Пример #1
0
 protected void randomlyFillWithBlocks(World world, StructureBoundingBox structureboundingbox, java.util.Random random, float f, int i, int j, int k,
                                       int l, int i1, int j1, int k1, int l1, bool flag)
 {
     for (int i2 = j; i2 <= i1; i2++)
     {
         for (int j2 = i; j2 <= l; j2++)
         {
             for (int k2 = k; k2 <= j1; k2++)
             {
                 if (random.nextFloat() > f || flag && func_35297_a(world, j2, i2, k2, structureboundingbox) == 0)
                 {
                     continue;
                 }
                 if (i2 == j || i2 == i1 || j2 == i || j2 == l || k2 == k || k2 == j1)
                 {
                     func_35309_a(world, k1, 0, j2, i2, k2, structureboundingbox);
                 }
                 else
                 {
                     func_35309_a(world, l1, 0, j2, i2, k2, structureboundingbox);
                 }
             }
         }
     }
 }
Пример #2
0
 protected void randomlyPlaceBlock(World world, StructureBoundingBox structureboundingbox, java.util.Random random, float f, int i, int j, int k,
                                   int l, int i1)
 {
     if (random.nextFloat() < f)
     {
         func_35309_a(world, l, i1, i, j, k, structureboundingbox);
     }
 }
Пример #3
0
        public override bool generate(World world, java.util.Random random, int i, int j, int k)
        {
            float  f  = random.nextFloat() * 3.141593F;
            double d  = (float)(i + 8) + (MathHelper.sin(f) * (float)numberOfBlocks) / 8F;
            double d1 = (float)(i + 8) - (MathHelper.sin(f) * (float)numberOfBlocks) / 8F;
            double d2 = (float)(k + 8) + (MathHelper.cos(f) * (float)numberOfBlocks) / 8F;
            double d3 = (float)(k + 8) - (MathHelper.cos(f) * (float)numberOfBlocks) / 8F;
            double d4 = (j + random.nextInt(3)) - 2;
            double d5 = (j + random.nextInt(3)) - 2;

            for (int l = 0; l <= numberOfBlocks; l++)
            {
                double d6  = d + ((d1 - d) * (double)l) / (double)numberOfBlocks;
                double d7  = d4 + ((d5 - d4) * (double)l) / (double)numberOfBlocks;
                double d8  = d2 + ((d3 - d2) * (double)l) / (double)numberOfBlocks;
                double d9  = (random.nextDouble() * (double)numberOfBlocks) / 16D;
                double d10 = (double)(MathHelper.sin(((float)l * 3.141593F) / (float)numberOfBlocks) + 1.0F) * d9 + 1.0D;
                double d11 = (double)(MathHelper.sin(((float)l * 3.141593F) / (float)numberOfBlocks) + 1.0F) * d9 + 1.0D;
                int    i1  = MathHelper.floor_double(d6 - d10 / 2D);
                int    j1  = MathHelper.floor_double(d7 - d11 / 2D);
                int    k1  = MathHelper.floor_double(d8 - d10 / 2D);
                int    l1  = MathHelper.floor_double(d6 + d10 / 2D);
                int    i2  = MathHelper.floor_double(d7 + d11 / 2D);
                int    j2  = MathHelper.floor_double(d8 + d10 / 2D);
                for (int k2 = i1; k2 <= l1; k2++)
                {
                    double d12 = (((double)k2 + 0.5D) - d6) / (d10 / 2D);
                    if (d12 * d12 >= 1.0D)
                    {
                        continue;
                    }
                    for (int l2 = j1; l2 <= i2; l2++)
                    {
                        double d13 = (((double)l2 + 0.5D) - d7) / (d11 / 2D);
                        if (d12 * d12 + d13 * d13 >= 1.0D)
                        {
                            continue;
                        }
                        for (int i3 = k1; i3 <= j2; i3++)
                        {
                            double d14 = (((double)i3 + 0.5D) - d8) / (d10 / 2D);
                            if (d12 * d12 + d13 * d13 + d14 * d14 < 1.0D && world.GetBlock(k2, l2, i3) == (byte)Blocks.Stone)
                            {
                                world.SetBlock(k2, l2, i3, (byte)minableBlockId);
                            }
                        }
                    }
                }
            }

            return(true);
        }
Пример #4
0
        protected void generateCaveNode(long l, int i, int j, byte[] abyte0, double d, 
                double d1, double d2, float f, float f1, float f2, 
                int k, int i1, double d3)
        {
            double d4 = i * 16 + 8;
            double d5 = j * 16 + 8;
            float f3 = 0.0F;
            float f4 = 0.0F;
            java.util.Random random = new java.util.Random(l);
            if(i1 <= 0)
            {
                int j1 = field_947_a * 16 - 16;
                i1 = j1 - random.nextInt(j1 / 4);
            }
            bool flag = false;
            if(k == -1)
            {
                k = i1 / 2;
                flag = true;
            }
            int k1 = random.nextInt(i1 / 2) + i1 / 4;
            bool flag1 = random.nextInt(6) == 0;
            for(; k < i1; k++)
            {
                double d6 = 1.5D + (double)(MathHelper.sin(((float)k * 3.141593F) / (float)i1) * f * 1.0F);
                double d7 = d6 * d3;
                float f5 = MathHelper.cos(f2);
                float f6 = MathHelper.sin(f2);
                d += MathHelper.cos(f1) * f5;
                d1 += f6;
                d2 += MathHelper.sin(f1) * f5;
                if(flag1)
                {
                    f2 *= 0.92F;
                } else
                {
                    f2 *= 0.7F;
                }
                f2 += f4 * 0.1F;
                f1 += f3 * 0.1F;
                f4 *= 0.9F;
                f3 *= 0.75F;
                f4 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 2.0F;
                f3 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 4F;
                if(!flag && k == k1 && f > 1.0F && i1 > 0)
                {
                    generateCaveNode(random.nextLong(), i, j, abyte0, d, d1, d2, random.nextFloat() * 0.5F + 0.5F, f1 - 1.570796F, f2 / 3F, k, i1, 1.0D);
                    generateCaveNode(random.nextLong(), i, j, abyte0, d, d1, d2, random.nextFloat() * 0.5F + 0.5F, f1 + 1.570796F, f2 / 3F, k, i1, 1.0D);
                    return;
                }
                if(!flag && random.nextInt(4) == 0)
                {
                    continue;
                }
                double d8 = d - d4;
                double d9 = d2 - d5;
                double d10 = i1 - k;
                double d11 = f + 2.0F + 16F;
                if((d8 * d8 + d9 * d9) - d10 * d10 > d11 * d11)
                {
                    return;
                }
                if(d < d4 - 16D - d6 * 2D || d2 < d5 - 16D - d6 * 2D || d > d4 + 16D + d6 * 2D || d2 > d5 + 16D + d6 * 2D)
                {
                    continue;
                }
                d8 = MathHelper.floor_double(d - d6) - i * 16 - 1;
                int l1 = (MathHelper.floor_double(d + d6) - i * 16) + 1;
                d9 = MathHelper.floor_double(d1 - d7) - 1;
                int i2 = MathHelper.floor_double(d1 + d7) + 1;
                d10 = MathHelper.floor_double(d2 - d6) - j * 16 - 1;
                int j2 = (MathHelper.floor_double(d2 + d6) - j * 16) + 1;
                if(d8 < 0)
                {
                    d8 = 0;
                }
                if(l1 > 16)
                {
                    l1 = 16;
                }
                if(d9 < 1)
                {
                    d9 = 1;
                }
                //field_35530_d.getClass();
                if(i2 > 128 - 8)
                {
                    //field_35530_d.getClass();
                    i2 = 128 - 8;
                }
                if(d10 < 0)
                {
                    d10 = 0;
                }
                if(j2 > 16)
                {
                    j2 = 16;
                }
                bool flag2 = false;
                for(int k2 = (int) d8; !flag2 && k2 < l1; k2++)
                {
                    for(int i3 = (int) d10; !flag2 && i3 < j2; i3++)
                    {
                        for(int j3 = i2 + 1; !flag2 && j3 >= d9 - 1; j3--)
                        {
                            //field_35530_d.getClass();
                            int k3 = (k2 * 16 + i3) * 128 + j3;
                            if(j3 < 0)
                            {
                                continue;
                            }
                            //field_35530_d.getClass();
                            if(j3 >= 128)
                            {
                                continue;
                            }
                            if(abyte0[k3] == (byte)Blocks.AWater || abyte0[k3] == (byte)Blocks.SWater)
                            {
                                flag2 = true;
                            }
                            if(j3 != d9 - 1 && k2 != d8 && k2 != l1 - 1 && i3 != d10 && i3 != j2 - 1)
                            {
                                j3 = (int) d9;
                            }
                        }

                    }

                }

                if(flag2)
                {
                    continue;
                }
                for(int l2 = (int) d8; l2 < l1; l2++)
                {
                    double d12 = (((double)(l2 + i * 16) + 0.5D) - d) / d6;
                    for(int l3 = (int) d10; l3 < j2; l3++)
                    {
                        double d13 = (((double)(l3 + j * 16) + 0.5D) - d2) / d6;
                        //field_35530_d.getClass();
                        int i4 = (l2 * 16 + l3) * 128 + i2;
                        bool flag3 = false;
                        if(d12 * d12 + d13 * d13 >= 1.0D)
                        {
                            continue;
                        }
                        int j4 = i2 - 1;
                        bool label0 = false;
                        do
                        {
                            if(j4 < d9)
                            {
                                label0 = true;
                                break;
                            }
                            double d14 = (((double)j4 + 0.5D) - d1) / d7;
                            if(d14 > -0.69999999999999996D && d12 * d12 + d14 * d14 + d13 * d13 < 1.0D)
                            {
                                byte byte0 = abyte0[i4];
                                if (byte0 == (byte)Blocks.Grass)
                                {
                                    flag3 = true;
                                }
                                if (byte0 == (byte)Blocks.Stone || byte0 == (byte)Blocks.Dirt || byte0 == (byte)Blocks.Grass)
                                {
                                    if(j4 < 10)
                                    {
                                        abyte0[i4] = (byte)Blocks.ALava;
                                    } else
                                    {
                                        abyte0[i4] = 0;
                                        if (flag3 && abyte0[i4 - 1] == (byte)Blocks.Dirt)
                                        {
                                            abyte0[i4 - 1] = (byte)Blocks.Grass;
                                        }
                                    }
                                }
                            }
                            i4--;
                            j4--;
                        } while(true);
                        if (label0) continue;
                    }

                }

                if(flag)
                {
                    break;
                }
            }
        }
Пример #5
0
        protected void generateCaveNode(long l, int i, int j, byte[] abyte0, double d,
                                        double d1, double d2, float f, float f1, float f2,
                                        int k, int i1, double d3)
        {
            double d4 = i * 16 + 8;
            double d5 = j * 16 + 8;
            float  f3 = 0.0F;
            float  f4 = 0.0F;

            java.util.Random random = new java.util.Random(l);
            if (i1 <= 0)
            {
                int j1 = field_947_a * 16 - 16;
                i1 = j1 - random.nextInt(j1 / 4);
            }
            bool flag = false;

            if (k == -1)
            {
                k    = i1 / 2;
                flag = true;
            }
            int  k1    = random.nextInt(i1 / 2) + i1 / 4;
            bool flag1 = random.nextInt(6) == 0;

            for (; k < i1; k++)
            {
                double d6 = 1.5D + (double)(MathHelper.sin(((float)k * 3.141593F) / (float)i1) * f * 1.0F);
                double d7 = d6 * d3;
                float  f5 = MathHelper.cos(f2);
                float  f6 = MathHelper.sin(f2);
                d  += MathHelper.cos(f1) * f5;
                d1 += f6;
                d2 += MathHelper.sin(f1) * f5;
                if (flag1)
                {
                    f2 *= 0.92F;
                }
                else
                {
                    f2 *= 0.7F;
                }
                f2 += f4 * 0.1F;
                f1 += f3 * 0.1F;
                f4 *= 0.9F;
                f3 *= 0.75F;
                f4 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 2.0F;
                f3 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 4F;
                if (!flag && k == k1 && f > 1.0F && i1 > 0)
                {
                    generateCaveNode(random.nextLong(), i, j, abyte0, d, d1, d2, random.nextFloat() * 0.5F + 0.5F, f1 - 1.570796F, f2 / 3F, k, i1, 1.0D);
                    generateCaveNode(random.nextLong(), i, j, abyte0, d, d1, d2, random.nextFloat() * 0.5F + 0.5F, f1 + 1.570796F, f2 / 3F, k, i1, 1.0D);
                    return;
                }
                if (!flag && random.nextInt(4) == 0)
                {
                    continue;
                }
                double d8  = d - d4;
                double d9  = d2 - d5;
                double d10 = i1 - k;
                double d11 = f + 2.0F + 16F;
                if ((d8 * d8 + d9 * d9) - d10 * d10 > d11 * d11)
                {
                    return;
                }
                if (d < d4 - 16D - d6 * 2D || d2 < d5 - 16D - d6 * 2D || d > d4 + 16D + d6 * 2D || d2 > d5 + 16D + d6 * 2D)
                {
                    continue;
                }
                d8 = MathHelper.floor_double(d - d6) - i * 16 - 1;
                int l1 = (MathHelper.floor_double(d + d6) - i * 16) + 1;
                d9 = MathHelper.floor_double(d1 - d7) - 1;
                int i2 = MathHelper.floor_double(d1 + d7) + 1;
                d10 = MathHelper.floor_double(d2 - d6) - j * 16 - 1;
                int j2 = (MathHelper.floor_double(d2 + d6) - j * 16) + 1;
                if (d8 < 0)
                {
                    d8 = 0;
                }
                if (l1 > 16)
                {
                    l1 = 16;
                }
                if (d9 < 1)
                {
                    d9 = 1;
                }
                //field_35530_d.getClass();
                if (i2 > 128 - 8)
                {
                    //field_35530_d.getClass();
                    i2 = 128 - 8;
                }
                if (d10 < 0)
                {
                    d10 = 0;
                }
                if (j2 > 16)
                {
                    j2 = 16;
                }
                bool flag2 = false;
                for (int k2 = (int)d8; !flag2 && k2 < l1; k2++)
                {
                    for (int i3 = (int)d10; !flag2 && i3 < j2; i3++)
                    {
                        for (int j3 = i2 + 1; !flag2 && j3 >= d9 - 1; j3--)
                        {
                            //field_35530_d.getClass();
                            int k3 = (k2 * 16 + i3) * 128 + j3;
                            if (j3 < 0)
                            {
                                continue;
                            }
                            //field_35530_d.getClass();
                            if (j3 >= 128)
                            {
                                continue;
                            }
                            if (abyte0[k3] == (byte)Blocks.AWater || abyte0[k3] == (byte)Blocks.SWater)
                            {
                                flag2 = true;
                            }
                            if (j3 != d9 - 1 && k2 != d8 && k2 != l1 - 1 && i3 != d10 && i3 != j2 - 1)
                            {
                                j3 = (int)d9;
                            }
                        }
                    }
                }

                if (flag2)
                {
                    continue;
                }
                for (int l2 = (int)d8; l2 < l1; l2++)
                {
                    double d12 = (((double)(l2 + i * 16) + 0.5D) - d) / d6;
                    for (int l3 = (int)d10; l3 < j2; l3++)
                    {
                        double d13 = (((double)(l3 + j * 16) + 0.5D) - d2) / d6;
                        //field_35530_d.getClass();
                        int  i4    = (l2 * 16 + l3) * 128 + i2;
                        bool flag3 = false;
                        if (d12 * d12 + d13 * d13 >= 1.0D)
                        {
                            continue;
                        }
                        int  j4     = i2 - 1;
                        bool label0 = false;
                        do
                        {
                            if (j4 < d9)
                            {
                                label0 = true;
                                break;
                            }
                            double d14 = (((double)j4 + 0.5D) - d1) / d7;
                            if (d14 > -0.69999999999999996D && d12 * d12 + d14 * d14 + d13 * d13 < 1.0D)
                            {
                                byte byte0 = abyte0[i4];
                                if (byte0 == (byte)Blocks.Grass)
                                {
                                    flag3 = true;
                                }
                                if (byte0 == (byte)Blocks.Stone || byte0 == (byte)Blocks.Dirt || byte0 == (byte)Blocks.Grass)
                                {
                                    if (j4 < 10)
                                    {
                                        abyte0[i4] = (byte)Blocks.ALava;
                                    }
                                    else
                                    {
                                        abyte0[i4] = 0;
                                        if (flag3 && abyte0[i4 - 1] == (byte)Blocks.Dirt)
                                        {
                                            abyte0[i4 - 1] = (byte)Blocks.Grass;
                                        }
                                    }
                                }
                            }
                            i4--;
                            j4--;
                        } while(true);
                        if (label0)
                        {
                            continue;
                        }
                    }
                }

                if (flag)
                {
                    break;
                }
            }
        }
Пример #6
0
        protected void func_35539_a(long l, int i, int j, byte[] abyte0, double d, double d1, double d2, float f, float f1, float f2, int k, int i1, double d3)
        {
            java.util.Random random;
            double d4;
            double d5;
            float f3;
            float f4;
            bool flag;
            label0:
            {
                random = new java.util.Random(l);
                d4 = i * 16 + 8;
                d5 = j * 16 + 8;
                f3 = 0.0F;
                f4 = 0.0F;
                if(i1 <= 0)
                {
                    int j1 = field_947_a * 16 - 16;
                    i1 = j1 - random.nextInt(j1 / 4);
                }
                flag = false;
                if(k == -1)
                {
                    k = i1 / 2;
                    flag = true;
                }
                float f5 = 1.0F;
                int k1 = 0;
                bool label0 = false;
                do
                {
                    if(k1 >= 128)
                    {
                        label0 = true;
                        break;
                    }
                    if(k1 == 0 || random.nextInt(3) == 0)
                    {
                        f5 = 1.0F + random.nextFloat() * random.nextFloat() * 1.0F;
                    }
                    field_35540_a[k1] = f5 * f5;
                    k1++;
                } while (true);
                if (!label0) goto label0;
            }
            for(; k < i1; k++)
            {
                double d6 = 1.5D + (double)(MathHelper.sin(((float)k * 3.141593F) / (float)i1) * f * 1.0F);
                double d7 = d6 * d3;
                d6 *= (double)random.nextFloat() * 0.25D + 0.75D;
                d7 *= (double)random.nextFloat() * 0.25D + 0.75D;
                float f6 = MathHelper.cos(f2);
                float f7 = MathHelper.sin(f2);
                d += MathHelper.cos(f1) * f6;
                d1 += f7;
                d2 += MathHelper.sin(f1) * f6;
                f2 *= 0.7F;
                f2 += f4 * 0.05F;
                f1 += f3 * 0.05F;
                f4 *= 0.8F;
                f3 *= 0.5F;
                f4 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 2.0F;
                f3 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 4F;
                if(!flag && random.nextInt(4) == 0)
                {
                    continue;
                }
                double d8 = d - d4;
                double d9 = d2 - d5;
                double d10 = i1 - k;
                double d11 = f + 2.0F + 16F;
                if((d8 * d8 + d9 * d9) - d10 * d10 > d11 * d11)
                {
                    return;
                }
                if(d < d4 - 16D - d6 * 2D || d2 < d5 - 16D - d6 * 2D || d > d4 + 16D + d6 * 2D || d2 > d5 + 16D + d6 * 2D)
                {
                    continue;
                }
                d8 = MathHelper.floor_double(d - d6) - i * 16 - 1;
                int l1 = (MathHelper.floor_double(d + d6) - i * 16) + 1;
                d9 = MathHelper.floor_double(d1 - d7) - 1;
                int i2 = MathHelper.floor_double(d1 + d7) + 1;
                d10 = MathHelper.floor_double(d2 - d6) - j * 16 - 1;
                int j2 = (MathHelper.floor_double(d2 + d6) - j * 16) + 1;
                if(d8 < 0)
                {
                    d8 = 0;
                }
                if(l1 > 16)
                {
                    l1 = 16;
                }
                if(d9 < 1)
                {
                    d9 = 1;
                }
                if(i2 > 128 - 8)
                {
                    i2 = 128 - 8;
                }
                if(d10 < 0)
                {
                    d10 = 0;
                }
                if(j2 > 16)
                {
                    j2 = 16;
                }
                bool flag1 = false;
                for(int k2 = (int) d8; !flag1 && k2 < l1; k2++)
                {
                    for(int i3 = (int) d10; !flag1 && i3 < j2; i3++)
                    {
                        for(int j3 = i2 + 1; !flag1 && j3 >= d9 - 1; j3--)
                        {
                            int k3 = (k2 * 16 + i3) * 128 + j3;
                            if(j3 < 0)
                            {
                                continue;
                            }
                            if(j3 >= 128)
                            {
                                continue;
                            }
                            if(abyte0[k3] == (byte)Blocks.AWater || abyte0[k3] == (byte)Blocks.SWater)
                            {
                                flag1 = true;
                            }
                            if(j3 != d9 - 1 && k2 != d8 && k2 != l1 - 1 && i3 != d10 && i3 != j2 - 1)
                            {
                                j3 = (int) d9;
                            }
                        }

                    }

                }

                if(flag1)
                {
                    continue;
                }
                for(int l2 = (int) d8; l2 < l1; l2++)
                {
                    double d12 = (((double)(l2 + i * 16) + 0.5D) - d) / d6;
                    label1:
                    for(int l3 = (int) d10; l3 < j2; l3++)
                    {
                        double d13 = (((double)(l3 + j * 16) + 0.5D) - d2) / d6;
                        int i4 = (l2 * 16 + l3) * 128 + i2;
                        bool flag2 = false;
                        if(d12 * d12 + d13 * d13 >= 1.0D)
                        {
                            continue;
                        }
                        int j4 = i2 - 1;
                        bool label1 = false;
                        do
                        {
                            if(j4 < d9)
                            {
                                label1 = true;
                                break;
                            }
                            double d14 = (((double)j4 + 0.5D) - d1) / d7;
                            if((d12 * d12 + d13 * d13) * (double)field_35540_a[j4] + (d14 * d14) / 6D < 1.0D)
                            {
                                byte byte0 = abyte0[i4];
                                if(byte0 == (byte)Blocks.Grass)
                                {
                                    flag2 = true;
                                }
                                if(byte0 == (byte)Blocks.Stone || byte0 == (byte)Blocks.Dirt || byte0 == (byte)Blocks.Grass)
                                {
                                    if(j4 < 10)
                                    {
                                        abyte0[i4] = (byte)Blocks.ALava;
                                    } else
                                    {
                                        abyte0[i4] = 0;
                                        if(flag2 && abyte0[i4 - 1] == (byte)Blocks.Dirt)
                                        {
                                            abyte0[i4 - 1] = (byte)Blocks.Grass;
                                        }
                                    }
                                }
                            }
                            i4--;
                            j4--;
                        } while(true);
                        if (label1) continue;
                    }

                }

                if(flag)
                {
                    break;
                }
            }
        }
Пример #7
0
        private void func_424_a()
        {
            height = (int)(field_756_e * field_754_g);
            if (height >= field_756_e)
            {
                height = field_756_e - 1;
            }
            var i = (int)(1.3819999999999999D + Math.pow((field_750_k * field_756_e) / 13D, 2D));

            if (i < 1)
            {
                i = 1;
            }
            var ai = new int[i * field_756_e][];

            for (int i2 = 0; i2 < i * field_756_e; i2++)
            {
                ai[i2] = new int[4];
            }
            int j  = (basePos[1] + field_756_e) - field_747_n;
            int k  = 1;
            int l  = basePos[1] + height;
            int i1 = j - basePos[1];

            ai[0][0] = basePos[0];
            ai[0][1] = j;
            ai[0][2] = basePos[2];
            ai[0][3] = l;
            j--;
            while (i1 >= 0)
            {
                int   j1 = 0;
                float f  = func_431_a(i1);
                if (f < 0.0F)
                {
                    j--;
                    i1--;
                }
                else
                {
                    double d = 0.5D;
                    for (; j1 < i; j1++)
                    {
                        double d1  = field_751_j * (f * (field_759_b.nextFloat() + 0.32800000000000001D));
                        double d2  = field_759_b.nextFloat() * 2D * 3.1415899999999999D;
                        var    k1  = (int)(d1 * Math.sin(d2) + basePos[0] + d);
                        var    l1  = (int)(d1 * Math.cos(d2) + basePos[2] + d);
                        int[]  ai1 =
                        {
                            k1, j, l1
                        };
                        int[] ai2 =
                        {
                            k1, j + field_747_n, l1
                        };
                        if (func_427_a(ai1, ai2) != -1)
                        {
                            continue;
                        }
                        int[] ai3 =
                        {
                            basePos[0], basePos[1], basePos[2]
                        };
                        double d3 =
                            Math.sqrt(Math.pow(Math.abs(basePos[0] - ai1[0]), 2D) +
                                      Math.pow(Math.abs(basePos[2] - ai1[2]), 2D));
                        double d4 = d3 * field_752_i;
                        if (ai1[1] - d4 > l)
                        {
                            ai3[1] = l;
                        }
                        else
                        {
                            ai3[1] = (int)(ai1[1] - d4);
                        }
                        if (func_427_a(ai3, ai1) == -1)
                        {
                            ai[k][0] = k1;
                            ai[k][1] = j;
                            ai[k][2] = l1;
                            ai[k][3] = ai3[1];
                            k++;
                        }
                    }

                    j--;
                    i1--;
                }
            }
            field_746_o = new int[k][];
            for (int i3 = 0; i3 < k; i3++)
            {
                field_746_o[i3] = new int[4];
            }
            Array.Copy(ai, 0, field_746_o, 0, k);
        }
Пример #8
0
        protected void func_35539_a(long l, int i, int j, byte[] abyte0, double d, double d1, double d2, float f, float f1, float f2, int k, int i1, double d3)
        {
            java.util.Random random;
            double           d4;
            double           d5;
            float            f3;
            float            f4;
            bool             flag;

label0:
            {
                random = new java.util.Random(l);
                d4     = i * 16 + 8;
                d5     = j * 16 + 8;
                f3     = 0.0F;
                f4     = 0.0F;
                if (i1 <= 0)
                {
                    int j1 = field_947_a * 16 - 16;
                    i1 = j1 - random.nextInt(j1 / 4);
                }
                flag = false;
                if (k == -1)
                {
                    k    = i1 / 2;
                    flag = true;
                }
                float f5     = 1.0F;
                int   k1     = 0;
                bool  label0 = false;
                do
                {
                    if (k1 >= 128)
                    {
                        label0 = true;
                        break;
                    }
                    if (k1 == 0 || random.nextInt(3) == 0)
                    {
                        f5 = 1.0F + random.nextFloat() * random.nextFloat() * 1.0F;
                    }
                    field_35540_a[k1] = f5 * f5;
                    k1++;
                } while (true);
                if (!label0)
                {
                    goto label0;
                }
            }
            for (; k < i1; k++)
            {
                double d6 = 1.5D + (double)(MathHelper.sin(((float)k * 3.141593F) / (float)i1) * f * 1.0F);
                double d7 = d6 * d3;
                d6 *= (double)random.nextFloat() * 0.25D + 0.75D;
                d7 *= (double)random.nextFloat() * 0.25D + 0.75D;
                float f6 = MathHelper.cos(f2);
                float f7 = MathHelper.sin(f2);
                d  += MathHelper.cos(f1) * f6;
                d1 += f7;
                d2 += MathHelper.sin(f1) * f6;
                f2 *= 0.7F;
                f2 += f4 * 0.05F;
                f1 += f3 * 0.05F;
                f4 *= 0.8F;
                f3 *= 0.5F;
                f4 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 2.0F;
                f3 += (random.nextFloat() - random.nextFloat()) * random.nextFloat() * 4F;
                if (!flag && random.nextInt(4) == 0)
                {
                    continue;
                }
                double d8  = d - d4;
                double d9  = d2 - d5;
                double d10 = i1 - k;
                double d11 = f + 2.0F + 16F;
                if ((d8 * d8 + d9 * d9) - d10 * d10 > d11 * d11)
                {
                    return;
                }
                if (d < d4 - 16D - d6 * 2D || d2 < d5 - 16D - d6 * 2D || d > d4 + 16D + d6 * 2D || d2 > d5 + 16D + d6 * 2D)
                {
                    continue;
                }
                d8 = MathHelper.floor_double(d - d6) - i * 16 - 1;
                int l1 = (MathHelper.floor_double(d + d6) - i * 16) + 1;
                d9 = MathHelper.floor_double(d1 - d7) - 1;
                int i2 = MathHelper.floor_double(d1 + d7) + 1;
                d10 = MathHelper.floor_double(d2 - d6) - j * 16 - 1;
                int j2 = (MathHelper.floor_double(d2 + d6) - j * 16) + 1;
                if (d8 < 0)
                {
                    d8 = 0;
                }
                if (l1 > 16)
                {
                    l1 = 16;
                }
                if (d9 < 1)
                {
                    d9 = 1;
                }
                if (i2 > 128 - 8)
                {
                    i2 = 128 - 8;
                }
                if (d10 < 0)
                {
                    d10 = 0;
                }
                if (j2 > 16)
                {
                    j2 = 16;
                }
                bool flag1 = false;
                for (int k2 = (int)d8; !flag1 && k2 < l1; k2++)
                {
                    for (int i3 = (int)d10; !flag1 && i3 < j2; i3++)
                    {
                        for (int j3 = i2 + 1; !flag1 && j3 >= d9 - 1; j3--)
                        {
                            int k3 = (k2 * 16 + i3) * 128 + j3;
                            if (j3 < 0)
                            {
                                continue;
                            }
                            if (j3 >= 128)
                            {
                                continue;
                            }
                            if (abyte0[k3] == (byte)Blocks.AWater || abyte0[k3] == (byte)Blocks.SWater)
                            {
                                flag1 = true;
                            }
                            if (j3 != d9 - 1 && k2 != d8 && k2 != l1 - 1 && i3 != d10 && i3 != j2 - 1)
                            {
                                j3 = (int)d9;
                            }
                        }
                    }
                }

                if (flag1)
                {
                    continue;
                }
                for (int l2 = (int)d8; l2 < l1; l2++)
                {
                    double d12 = (((double)(l2 + i * 16) + 0.5D) - d) / d6;
label1:
                    for (int l3 = (int)d10; l3 < j2; l3++)
                    {
                        double d13   = (((double)(l3 + j * 16) + 0.5D) - d2) / d6;
                        int    i4    = (l2 * 16 + l3) * 128 + i2;
                        bool   flag2 = false;
                        if (d12 * d12 + d13 * d13 >= 1.0D)
                        {
                            continue;
                        }
                        int  j4     = i2 - 1;
                        bool label1 = false;
                        do
                        {
                            if (j4 < d9)
                            {
                                label1 = true;
                                break;
                            }
                            double d14 = (((double)j4 + 0.5D) - d1) / d7;
                            if ((d12 * d12 + d13 * d13) * (double)field_35540_a[j4] + (d14 * d14) / 6D < 1.0D)
                            {
                                byte byte0 = abyte0[i4];
                                if (byte0 == (byte)Blocks.Grass)
                                {
                                    flag2 = true;
                                }
                                if (byte0 == (byte)Blocks.Stone || byte0 == (byte)Blocks.Dirt || byte0 == (byte)Blocks.Grass)
                                {
                                    if (j4 < 10)
                                    {
                                        abyte0[i4] = (byte)Blocks.ALava;
                                    }
                                    else
                                    {
                                        abyte0[i4] = 0;
                                        if (flag2 && abyte0[i4 - 1] == (byte)Blocks.Dirt)
                                        {
                                            abyte0[i4 - 1] = (byte)Blocks.Grass;
                                        }
                                    }
                                }
                            }
                            i4--;
                            j4--;
                        } while(true);
                        if (label1)
                        {
                            continue;
                        }
                    }
                }

                if (flag)
                {
                    break;
                }
            }
        }