    001    package net.minecraft.src;
    002
    003    import java.util.List;
    004    import java.util.Random;
    005
    006    public class ComponentVillageField extends ComponentVillage
    007    {
    008        private int averageGroundLevel = -1;
    009        private int field_82679_b;
    010        private int field_82680_c;
    011        private int field_82678_d;
    012        private int field_82681_h;
    013
    014        public ComponentVillageField(ComponentVillageStartPiece par1ComponentVillageStartPiece, int par2, Random par3Random, StructureBoundingBox par4StructureBoundingBox, int par5)
    015        {
    016            super(par1ComponentVillageStartPiece, par2);
    017            this.coordBaseMode = par5;
    018            this.boundingBox = par4StructureBoundingBox;
    019            this.field_82679_b = this.func_82677_a(par3Random);
    020            this.field_82680_c = this.func_82677_a(par3Random);
    021            this.field_82678_d = this.func_82677_a(par3Random);
    022            this.field_82681_h = this.func_82677_a(par3Random);
    023        }
    024
    025        private int func_82677_a(Random par1Random)
    026        {
    027            switch (par1Random.nextInt(5))
    028            {
    029                case 0:
    030                    return Block.field_82513_cg.blockID;
    031                case 1:
    032                    return Block.field_82514_ch.blockID;
    033                default:
    034                    return Block.crops.blockID;
    035            }
    036        }
    037
    038        public static ComponentVillageField func_74900_a(ComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, int par6, int par7)
    039        {
    040            StructureBoundingBox var8 = StructureBoundingBox.getComponentToAddBoundingBox(par3, par4, par5, 0, 0, 0, 13, 4, 9, par6);
    041            return canVillageGoDeeper(var8) && StructureComponent.findIntersecting(par1List, var8) == null ? new ComponentVillageField(par0ComponentVillageStartPiece, par7, par2Random, var8, par6) : null;
    042        }
    043
    044        /**
    045         * second Part of Structure generating, this for example places Spiderwebs, Mob Spawners, it closes Mineshafts at
    046         * the end, it adds Fences...
    047         */
    048        public boolean addComponentParts(World par1World, Random par2Random, StructureBoundingBox par3StructureBoundingBox)
    049        {
    050            if (this.averageGroundLevel < 0)
    051            {
    052                this.averageGroundLevel = this.getAverageGroundLevel(par1World, par3StructureBoundingBox);
    053
    054                if (this.averageGroundLevel < 0)
    055                {
    056                    return true;
    057                }
    058
    059                this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 4 - 1, 0);
    060            }
    061
    062            this.fillWithBlocks(par1World, par3StructureBoundingBox, 0, 1, 0, 12, 4, 8, 0, 0, false);
    063            this.fillWithBlocks(par1World, par3StructureBoundingBox, 1, 0, 1, 2, 0, 7, Block.tilledField.blockID, Block.tilledField.blockID, false);
    064            this.fillWithBlocks(par1World, par3StructureBoundingBox, 4, 0, 1, 5, 0, 7, Block.tilledField.blockID, Block.tilledField.blockID, false);
    065            this.fillWithBlocks(par1World, par3StructureBoundingBox, 7, 0, 1, 8, 0, 7, Block.tilledField.blockID, Block.tilledField.blockID, false);
    066            this.fillWithBlocks(par1World, par3StructureBoundingBox, 10, 0, 1, 11, 0, 7, Block.tilledField.blockID, Block.tilledField.blockID, false);
    067            this.fillWithBlocks(par1World, par3StructureBoundingBox, 0, 0, 0, 0, 0, 8, Block.wood.blockID, Block.wood.blockID, false);
    068            this.fillWithBlocks(par1World, par3StructureBoundingBox, 6, 0, 0, 6, 0, 8, Block.wood.blockID, Block.wood.blockID, false);
    069            this.fillWithBlocks(par1World, par3StructureBoundingBox, 12, 0, 0, 12, 0, 8, Block.wood.blockID, Block.wood.blockID, false);
    070            this.fillWithBlocks(par1World, par3StructureBoundingBox, 1, 0, 0, 11, 0, 0, Block.wood.blockID, Block.wood.blockID, false);
    071            this.fillWithBlocks(par1World, par3StructureBoundingBox, 1, 0, 8, 11, 0, 8, Block.wood.blockID, Block.wood.blockID, false);
    072            this.fillWithBlocks(par1World, par3StructureBoundingBox, 3, 0, 1, 3, 0, 7, Block.waterMoving.blockID, Block.waterMoving.blockID, false);
    073            this.fillWithBlocks(par1World, par3StructureBoundingBox, 9, 0, 1, 9, 0, 7, Block.waterMoving.blockID, Block.waterMoving.blockID, false);
    074            int var4;
    075
    076            for (var4 = 1; var4 <= 7; ++var4)
    077            {
    078                this.placeBlockAtCurrentPosition(par1World, this.field_82679_b, MathHelper.getRandomIntegerInRange(par2Random, 2, 7), 1, 1, var4, par3StructureBoundingBox);
    079                this.placeBlockAtCurrentPosition(par1World, this.field_82679_b, MathHelper.getRandomIntegerInRange(par2Random, 2, 7), 2, 1, var4, par3StructureBoundingBox);
    080                this.placeBlockAtCurrentPosition(par1World, this.field_82680_c, MathHelper.getRandomIntegerInRange(par2Random, 2, 7), 4, 1, var4, par3StructureBoundingBox);
    081                this.placeBlockAtCurrentPosition(par1World, this.field_82680_c, MathHelper.getRandomIntegerInRange(par2Random, 2, 7), 5, 1, var4, par3StructureBoundingBox);
    082                this.placeBlockAtCurrentPosition(par1World, this.field_82678_d, MathHelper.getRandomIntegerInRange(par2Random, 2, 7), 7, 1, var4, par3StructureBoundingBox);
    083                this.placeBlockAtCurrentPosition(par1World, this.field_82678_d, MathHelper.getRandomIntegerInRange(par2Random, 2, 7), 8, 1, var4, par3StructureBoundingBox);
    084                this.placeBlockAtCurrentPosition(par1World, this.field_82681_h, MathHelper.getRandomIntegerInRange(par2Random, 2, 7), 10, 1, var4, par3StructureBoundingBox);
    085                this.placeBlockAtCurrentPosition(par1World, this.field_82681_h, MathHelper.getRandomIntegerInRange(par2Random, 2, 7), 11, 1, var4, par3StructureBoundingBox);
    086            }
    087
    088            for (var4 = 0; var4 < 9; ++var4)
    089            {
    090                for (int var5 = 0; var5 < 13; ++var5)
    091                {
    092                    this.clearCurrentPositionBlocksUpwards(par1World, var5, 4, var4, par3StructureBoundingBox);
    093                    this.fillCurrentPositionBlocksDownwards(par1World, Block.dirt.blockID, 0, var5, -1, var4, par3StructureBoundingBox);
    094                }
    095            }
    096
    097            return true;
    098        }
    099    }