001package net.minecraft.world.gen.layer; 002 003public class GenLayerVoronoiZoom extends GenLayer 004{ 005 public GenLayerVoronoiZoom(long par1, GenLayer par3GenLayer) 006 { 007 super(par1); 008 super.parent = par3GenLayer; 009 } 010 011 /** 012 * Returns a list of integer values generated by this layer. These may be interpreted as temperatures, rainfall 013 * amounts, or biomeList[] indices based on the particular GenLayer subclass. 014 */ 015 public int[] getInts(int par1, int par2, int par3, int par4) 016 { 017 par1 -= 2; 018 par2 -= 2; 019 byte b0 = 2; 020 int i1 = 1 << b0; 021 int j1 = par1 >> b0; 022 int k1 = par2 >> b0; 023 int l1 = (par3 >> b0) + 3; 024 int i2 = (par4 >> b0) + 3; 025 int[] aint = this.parent.getInts(j1, k1, l1, i2); 026 int j2 = l1 << b0; 027 int k2 = i2 << b0; 028 int[] aint1 = IntCache.getIntCache(j2 * k2); 029 int l2; 030 031 for (int i3 = 0; i3 < i2 - 1; ++i3) 032 { 033 l2 = aint[0 + (i3 + 0) * l1]; 034 int j3 = aint[0 + (i3 + 1) * l1]; 035 036 for (int k3 = 0; k3 < l1 - 1; ++k3) 037 { 038 double d0 = (double)i1 * 0.9D; 039 this.initChunkSeed((long)(k3 + j1 << b0), (long)(i3 + k1 << b0)); 040 double d1 = ((double)this.nextInt(1024) / 1024.0D - 0.5D) * d0; 041 double d2 = ((double)this.nextInt(1024) / 1024.0D - 0.5D) * d0; 042 this.initChunkSeed((long)(k3 + j1 + 1 << b0), (long)(i3 + k1 << b0)); 043 double d3 = ((double)this.nextInt(1024) / 1024.0D - 0.5D) * d0 + (double)i1; 044 double d4 = ((double)this.nextInt(1024) / 1024.0D - 0.5D) * d0; 045 this.initChunkSeed((long)(k3 + j1 << b0), (long)(i3 + k1 + 1 << b0)); 046 double d5 = ((double)this.nextInt(1024) / 1024.0D - 0.5D) * d0; 047 double d6 = ((double)this.nextInt(1024) / 1024.0D - 0.5D) * d0 + (double)i1; 048 this.initChunkSeed((long)(k3 + j1 + 1 << b0), (long)(i3 + k1 + 1 << b0)); 049 double d7 = ((double)this.nextInt(1024) / 1024.0D - 0.5D) * d0 + (double)i1; 050 double d8 = ((double)this.nextInt(1024) / 1024.0D - 0.5D) * d0 + (double)i1; 051 int l3 = aint[k3 + 1 + (i3 + 0) * l1]; 052 int i4 = aint[k3 + 1 + (i3 + 1) * l1]; 053 054 for (int j4 = 0; j4 < i1; ++j4) 055 { 056 int k4 = ((i3 << b0) + j4) * j2 + (k3 << b0); 057 058 for (int l4 = 0; l4 < i1; ++l4) 059 { 060 double d9 = ((double)j4 - d2) * ((double)j4 - d2) + ((double)l4 - d1) * ((double)l4 - d1); 061 double d10 = ((double)j4 - d4) * ((double)j4 - d4) + ((double)l4 - d3) * ((double)l4 - d3); 062 double d11 = ((double)j4 - d6) * ((double)j4 - d6) + ((double)l4 - d5) * ((double)l4 - d5); 063 double d12 = ((double)j4 - d8) * ((double)j4 - d8) + ((double)l4 - d7) * ((double)l4 - d7); 064 065 if (d9 < d10 && d9 < d11 && d9 < d12) 066 { 067 aint1[k4++] = l2; 068 } 069 else if (d10 < d9 && d10 < d11 && d10 < d12) 070 { 071 aint1[k4++] = l3; 072 } 073 else if (d11 < d9 && d11 < d10 && d11 < d12) 074 { 075 aint1[k4++] = j3; 076 } 077 else 078 { 079 aint1[k4++] = i4; 080 } 081 } 082 } 083 084 l2 = l3; 085 j3 = i4; 086 } 087 } 088 089 int[] aint2 = IntCache.getIntCache(par3 * par4); 090 091 for (l2 = 0; l2 < par4; ++l2) 092 { 093 System.arraycopy(aint1, (l2 + (par2 & i1 - 1)) * (l1 << b0) + (par1 & i1 - 1), aint2, l2 * par3, par3); 094 } 095 096 return aint2; 097 } 098}