001 package net.minecraft.world.gen.structure;
002
003 import java.util.List;
004 import java.util.Random;
005 import net.minecraft.block.Block;
006 import net.minecraft.tileentity.TileEntityMobSpawner;
007 import net.minecraft.world.World;
008
009 public class ComponentStrongholdPortalRoom extends ComponentStronghold
010 {
011 private boolean hasSpawner;
012
013 public ComponentStrongholdPortalRoom(int par1, Random par2Random, StructureBoundingBox par3StructureBoundingBox, int par4)
014 {
015 super(par1);
016 this.coordBaseMode = par4;
017 this.boundingBox = par3StructureBoundingBox;
018 }
019
020 /**
021 * Initiates construction of the Structure Component picked, at the current Location of StructGen
022 */
023 public void buildComponent(StructureComponent par1StructureComponent, List par2List, Random par3Random)
024 {
025 if (par1StructureComponent != null)
026 {
027 ((ComponentStrongholdStairs2)par1StructureComponent).strongholdPortalRoom = this;
028 }
029 }
030
031 public static ComponentStrongholdPortalRoom findValidPlacement(List par0List, Random par1Random, int par2, int par3, int par4, int par5, int par6)
032 {
033 StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(par2, par3, par4, -4, -1, 0, 11, 8, 16, par5);
034 return canStrongholdGoDeeper(var7) && StructureComponent.findIntersecting(par0List, var7) == null ? new ComponentStrongholdPortalRoom(par6, par1Random, var7, par5) : null;
035 }
036
037 /**
038 * second Part of Structure generating, this for example places Spiderwebs, Mob Spawners, it closes Mineshafts at
039 * the end, it adds Fences...
040 */
041 public boolean addComponentParts(World par1World, Random par2Random, StructureBoundingBox par3StructureBoundingBox)
042 {
043 this.fillWithRandomizedBlocks(par1World, par3StructureBoundingBox, 0, 0, 0, 10, 7, 15, false, par2Random, StructureStrongholdPieces.getStrongholdStones());
044 this.placeDoor(par1World, par2Random, par3StructureBoundingBox, EnumDoor.GRATES, 4, 1, 0);
045 byte var4 = 6;
046 this.fillWithRandomizedBlocks(par1World, par3StructureBoundingBox, 1, var4, 1, 1, var4, 14, false, par2Random, StructureStrongholdPieces.getStrongholdStones());
047 this.fillWithRandomizedBlocks(par1World, par3StructureBoundingBox, 9, var4, 1, 9, var4, 14, false, par2Random, StructureStrongholdPieces.getStrongholdStones());
048 this.fillWithRandomizedBlocks(par1World, par3StructureBoundingBox, 2, var4, 1, 8, var4, 2, false, par2Random, StructureStrongholdPieces.getStrongholdStones());
049 this.fillWithRandomizedBlocks(par1World, par3StructureBoundingBox, 2, var4, 14, 8, var4, 14, false, par2Random, StructureStrongholdPieces.getStrongholdStones());
050 this.fillWithRandomizedBlocks(par1World, par3StructureBoundingBox, 1, 1, 1, 2, 1, 4, false, par2Random, StructureStrongholdPieces.getStrongholdStones());
051 this.fillWithRandomizedBlocks(par1World, par3StructureBoundingBox, 8, 1, 1, 9, 1, 4, false, par2Random, StructureStrongholdPieces.getStrongholdStones());
052 this.fillWithBlocks(par1World, par3StructureBoundingBox, 1, 1, 1, 1, 1, 3, Block.lavaMoving.blockID, Block.lavaMoving.blockID, false);
053 this.fillWithBlocks(par1World, par3StructureBoundingBox, 9, 1, 1, 9, 1, 3, Block.lavaMoving.blockID, Block.lavaMoving.blockID, false);
054 this.fillWithRandomizedBlocks(par1World, par3StructureBoundingBox, 3, 1, 8, 7, 1, 12, false, par2Random, StructureStrongholdPieces.getStrongholdStones());
055 this.fillWithBlocks(par1World, par3StructureBoundingBox, 4, 1, 9, 6, 1, 11, Block.lavaMoving.blockID, Block.lavaMoving.blockID, false);
056 int var5;
057
058 for (var5 = 3; var5 < 14; var5 += 2)
059 {
060 this.fillWithBlocks(par1World, par3StructureBoundingBox, 0, 3, var5, 0, 4, var5, Block.fenceIron.blockID, Block.fenceIron.blockID, false);
061 this.fillWithBlocks(par1World, par3StructureBoundingBox, 10, 3, var5, 10, 4, var5, Block.fenceIron.blockID, Block.fenceIron.blockID, false);
062 }
063
064 for (var5 = 2; var5 < 9; var5 += 2)
065 {
066 this.fillWithBlocks(par1World, par3StructureBoundingBox, var5, 3, 15, var5, 4, 15, Block.fenceIron.blockID, Block.fenceIron.blockID, false);
067 }
068
069 var5 = this.getMetadataWithOffset(Block.stairsStoneBrickSmooth.blockID, 3);
070 this.fillWithRandomizedBlocks(par1World, par3StructureBoundingBox, 4, 1, 5, 6, 1, 7, false, par2Random, StructureStrongholdPieces.getStrongholdStones());
071 this.fillWithRandomizedBlocks(par1World, par3StructureBoundingBox, 4, 2, 6, 6, 2, 7, false, par2Random, StructureStrongholdPieces.getStrongholdStones());
072 this.fillWithRandomizedBlocks(par1World, par3StructureBoundingBox, 4, 3, 7, 6, 3, 7, false, par2Random, StructureStrongholdPieces.getStrongholdStones());
073
074 for (int var6 = 4; var6 <= 6; ++var6)
075 {
076 this.placeBlockAtCurrentPosition(par1World, Block.stairsStoneBrickSmooth.blockID, var5, var6, 1, 4, par3StructureBoundingBox);
077 this.placeBlockAtCurrentPosition(par1World, Block.stairsStoneBrickSmooth.blockID, var5, var6, 2, 5, par3StructureBoundingBox);
078 this.placeBlockAtCurrentPosition(par1World, Block.stairsStoneBrickSmooth.blockID, var5, var6, 3, 6, par3StructureBoundingBox);
079 }
080
081 byte var14 = 2;
082 byte var7 = 0;
083 byte var8 = 3;
084 byte var9 = 1;
085
086 switch (this.coordBaseMode)
087 {
088 case 0:
089 var14 = 0;
090 var7 = 2;
091 break;
092 case 1:
093 var14 = 1;
094 var7 = 3;
095 var8 = 0;
096 var9 = 2;
097 case 2:
098 default:
099 break;
100 case 3:
101 var14 = 3;
102 var7 = 1;
103 var8 = 0;
104 var9 = 2;
105 }
106
107 this.placeBlockAtCurrentPosition(par1World, Block.endPortalFrame.blockID, var14 + (par2Random.nextFloat() > 0.9F ? 4 : 0), 4, 3, 8, par3StructureBoundingBox);
108 this.placeBlockAtCurrentPosition(par1World, Block.endPortalFrame.blockID, var14 + (par2Random.nextFloat() > 0.9F ? 4 : 0), 5, 3, 8, par3StructureBoundingBox);
109 this.placeBlockAtCurrentPosition(par1World, Block.endPortalFrame.blockID, var14 + (par2Random.nextFloat() > 0.9F ? 4 : 0), 6, 3, 8, par3StructureBoundingBox);
110 this.placeBlockAtCurrentPosition(par1World, Block.endPortalFrame.blockID, var7 + (par2Random.nextFloat() > 0.9F ? 4 : 0), 4, 3, 12, par3StructureBoundingBox);
111 this.placeBlockAtCurrentPosition(par1World, Block.endPortalFrame.blockID, var7 + (par2Random.nextFloat() > 0.9F ? 4 : 0), 5, 3, 12, par3StructureBoundingBox);
112 this.placeBlockAtCurrentPosition(par1World, Block.endPortalFrame.blockID, var7 + (par2Random.nextFloat() > 0.9F ? 4 : 0), 6, 3, 12, par3StructureBoundingBox);
113 this.placeBlockAtCurrentPosition(par1World, Block.endPortalFrame.blockID, var8 + (par2Random.nextFloat() > 0.9F ? 4 : 0), 3, 3, 9, par3StructureBoundingBox);
114 this.placeBlockAtCurrentPosition(par1World, Block.endPortalFrame.blockID, var8 + (par2Random.nextFloat() > 0.9F ? 4 : 0), 3, 3, 10, par3StructureBoundingBox);
115 this.placeBlockAtCurrentPosition(par1World, Block.endPortalFrame.blockID, var8 + (par2Random.nextFloat() > 0.9F ? 4 : 0), 3, 3, 11, par3StructureBoundingBox);
116 this.placeBlockAtCurrentPosition(par1World, Block.endPortalFrame.blockID, var9 + (par2Random.nextFloat() > 0.9F ? 4 : 0), 7, 3, 9, par3StructureBoundingBox);
117 this.placeBlockAtCurrentPosition(par1World, Block.endPortalFrame.blockID, var9 + (par2Random.nextFloat() > 0.9F ? 4 : 0), 7, 3, 10, par3StructureBoundingBox);
118 this.placeBlockAtCurrentPosition(par1World, Block.endPortalFrame.blockID, var9 + (par2Random.nextFloat() > 0.9F ? 4 : 0), 7, 3, 11, par3StructureBoundingBox);
119
120 if (!this.hasSpawner)
121 {
122 int var13 = this.getYWithOffset(3);
123 int var10 = this.getXWithOffset(5, 6);
124 int var11 = this.getZWithOffset(5, 6);
125
126 if (par3StructureBoundingBox.isVecInside(var10, var13, var11))
127 {
128 this.hasSpawner = true;
129 par1World.setBlockWithNotify(var10, var13, var11, Block.mobSpawner.blockID);
130 TileEntityMobSpawner var12 = (TileEntityMobSpawner)par1World.getBlockTileEntity(var10, var13, var11);
131
132 if (var12 != null)
133 {
134 var12.setMobID("Silverfish");
135 }
136 }
137 }
138
139 return true;
140 }
141 }