package WayofTime.alchemicalWizardry.common.demonVillage; import java.util.ArrayList; import java.util.List; import net.minecraft.block.Block; import net.minecraft.block.BlockStairs; import net.minecraft.init.Blocks; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import WayofTime.alchemicalWizardry.common.Int3; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.GameRegistry.UniqueIdentifier; public class BlockSet { protected String blockid; protected int[] metadata; protected List<Int3> positions; public BlockSet() { this(Blocks.stone); } public BlockSet(String blockid) { this.blockid = blockid; this.metadata = new int[4]; positions = new ArrayList(); } public BlockSet(Block block) { this(BlockSet.getPairedIdForBlock(block)); } public BlockSet(Block block, int meta) { this(block); for(int i=0; i<metadata.length; i++) { metadata[i] = meta; } if(block instanceof BlockStairs) { int[] northSet = new int[]{2,3,0,1}; int[] eastSet = new int[]{1,0,2,3}; int[] southSet = new int[]{3,2,1,0}; int[] westSet = new int[]{0,1,3,2}; int[] northUpSet = new int[]{6,7,4,5}; int[] eastUpSet = new int[]{5,4,6,7}; int[] southUpSet = new int[]{7,6,5,4}; int[] westUpSet = new int[]{4,5,7,6}; switch(meta) { case 0: metadata = westSet; break; case 1: metadata = eastSet; break; case 2: metadata = northSet; break; case 3: metadata = southSet; break; case 4: metadata = westUpSet; break; case 5: metadata = eastUpSet; break; case 6: metadata = northUpSet; break; case 7: metadata = southUpSet; break; } } } public List<Int3> getPositions() { return positions; } public void addPositionToBlock(int xOffset, int yOffset, int zOffset) { positions.add(new Int3(xOffset, yOffset, zOffset)); } public Block getBlock() { return this.getBlockForString(blockid); } public static String getPairedIdForBlock(Block block) { UniqueIdentifier un = GameRegistry.findUniqueIdentifierFor(block); String name = ""; if(un != null) { name = un.modId + ":" + un.name; } return name; } public static Block getBlockForString(String str) { String[] parts = str.split(":"); String modId = parts[0]; String name = parts[1]; return GameRegistry.findBlock(modId, name); } public int getMetaForDirection(ForgeDirection dir) { if(metadata.length < 4) { return 0; } switch(dir) { case NORTH: return metadata[0]; case SOUTH: return metadata[1]; case WEST: return metadata[2]; case EAST: return metadata[3]; default: return 0; } } public void buildAtIndex(World world, int xCoord, int yCoord, int zCoord, ForgeDirection dir, int index) { Block block = this.getBlock(); if(index >= positions.size() || block == null) { return; } Int3 position = positions.get(index); int xOff = position.xCoord; int yOff = position.yCoord; int zOff = position.zCoord; int meta = this.getMetaForDirection(dir); switch(dir) { case NORTH: break; case SOUTH: xOff *= -1; zOff *= -1; break; case WEST: int temp = zOff; zOff = xOff * -1; xOff = temp; break; case EAST: int temp2 = zOff * -1; zOff = xOff; xOff = temp2; break; default: } world.setBlock(xCoord + xOff, yCoord + yOff, zCoord + zOff, block, meta, 3); } public void buildAll(World world, int xCoord, int yCoord, int zCoord, ForgeDirection dir) { for(int i=0; i<positions.size(); i++) { this.buildAtIndex(world, xCoord, yCoord, zCoord, dir, i); } } public boolean isContained(Block block, int defaultMeta) { Block thisBlock = this.getBlock(); return thisBlock == null ? false : thisBlock.equals(block) && this.metadata[0] == defaultMeta; } }