public static IBlockState[][][][] getStateMaps( EnumFacing dir, IBlockState wallBlock, IBlockState wallBlock_external, IBlockState floorBlock, IBlockState ceilBlock, IBlockState fenceBlock, IBlockState carpetBlock, IBlockState commonGlass, IBlockState topGlass2, IBlockState topGlass3, IBlockState beaconGlass2, IBlockState beaconGlass3, IBlockState window, IBlockState mineral, int dyeColorIndex, boolean hasShop) { final boolean hasBeacon = !hasShop && mineral != null; IBlockState[][][][] stateMap = new IBlockState[6][][][]; EnumFacing pressurePlateDir = null; int index = 0; for (EnumStateMap s : EnumStateMap.values()) { final String mapName = s.name(), lastChar = mapName.substring(mapName.length() - 1); if (StringUtils.isNumeric(lastChar)) { if (Integer.parseInt(lastChar) != dyeColorIndex + 1) continue; } final int mapIndex = EnumStateMap.valueOf(mapName).ordinal(); final Map<EnumFacing, IBlockState[][][]> map = maps.get(wallBlock_external)[mapIndex]; final IBlockState air = Blocks.AIR.getDefaultState(), lever = !hasBeacon ? Blocks.LEVER.getStateFromMeta(7) : beaconGlass2 != null ? beaconGlass2 : air, glass = Blocks.GLASS.getDefaultState(), lamp = !hasBeacon ? Blocks.REDSTONE_LAMP.getDefaultState() : commonGlass, wire = !hasBeacon ? Blocks.REDSTONE_WIRE.getDefaultState() : air; if (mapName.startsWith("MINI_TOWER_TOP")) map.put( dir, !hasShop ? getTopMap( air, wallBlock_external, carpetBlock, window, floorBlock, lever, mineral, pressurePlateDir) : getTopMapShop(air, wallBlock_external, carpetBlock, window, fenceBlock, mineral)); else if (mapName.startsWith("MINI_TOWER_ROOF")) { if (mapName.equals("MINI_TOWER_ROOF_WIRE")) map.put(dir, getRoofWire(air, wallBlock_external, wire, beaconGlass3)); else map.put(dir, getRoof(fenceBlock, glass, commonGlass, topGlass2, topGlass3)); } else if (mapName.startsWith("MINI_TOWER_CEILING_")) map.put(dir, getCeiling(air, wallBlock_external, wallBlock, ceilBlock, commonGlass, lamp)); else if (mapName.equals("MINI_TOWER_BASE")) { map.get(dir)[0][4][4] = floorBlock; if (floorBlock.getBlock() instanceof BlockTrapDoor) { pressurePlateDir = floorBlock.getValue(BlockTrapDoor.FACING); floorBlock = MazeTowers.BlockMazeTowerThreshold.getDefaultState(); } } stateMap[index++] = map.get(dir); } return stateMap; }