1 /* 2 * Copyright (c) 2017-2019 sel-project 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a copy 5 * of this software and associated documentation files (the "Software"), to deal 6 * in the Software without restriction, including without limitation the rights 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 * copies of the Software, and to permit persons to whom the Software is 9 * furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice shall be included in all 12 * copies or substantial portions of the Software. 13 * 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20 * SOFTWARE. 21 * 22 */ 23 /** 24 * Copyright: Copyright (c) 2017-2019 sel-project 25 * License: MIT 26 * Authors: Kripth 27 * Source: $(HTTP github.com/sel-project/selery/source/selery/block/blocks.d, selery/block/blocks.d) 28 */ 29 module selery.block.blocks; 30 31 import selery.about : block_t, item_t; 32 import selery.block.block : Block; 33 import selery.block.farming; 34 import selery.block.fluid; 35 import selery.block.miscellaneous; 36 import selery.block.redstone; 37 import selery.block.solid; 38 import selery.block.tile; 39 import selery.item.items : Items; 40 import selery.item.tool : Tools; 41 42 import sul.blocks : _ = Blocks; 43 44 /** 45 * Storage for a world's blocks. 46 */ 47 public class BlockStorage { 48 49 private static BlockStorage instance; 50 51 private Block[] sel; 52 private Block*[][256] java, bedrock; 53 54 public this() { 55 if(instance is null) { 56 this.instantiateDefaultBlocks(); 57 foreach(immutable member ; __traits(allMembers, Tiles)) { 58 mixin("alias T = Tiles." ~ member ~ ";"); 59 this.registerTile!T(new T()); 60 } 61 instance = this; 62 } else { 63 this.sel = instance.sel.dup; 64 this.java = instance.java.dup; 65 this.bedrock = instance.bedrock.dup; 66 } 67 } 68 69 public void register(Block block) { 70 if(block !is null) { 71 if(this.sel.length <= block.id) this.sel.length = block.id + 1; 72 this.sel[block.id] = block; 73 auto pointer = &this.sel[block.id]; 74 if(block.java) { 75 if(this.java[block.javaId].length <= block.javaMeta) this.java[block.javaId].length = block.javaMeta + 1; 76 this.java[block.javaId][block.javaMeta] = pointer; 77 } 78 if(block.bedrock) { 79 if(this.bedrock[block.bedrockId].length <= block.bedrockMeta) this.bedrock[block.bedrockId].length = block.bedrockMeta + 1; 80 this.bedrock[block.bedrockId][block.bedrockMeta] = pointer; 81 } 82 } 83 } 84 85 public void registerTile(T:Tile)(T tile) { 86 this.register(tile); 87 //TODO register tile data 88 } 89 90 /** 91 * Gets a block using its sel-id. 92 * This method only takes an argument as SEL blocks 93 * are identified by a single number instead of an id and 94 * optional metadata as in Minecraft and Minecraft: Pocket Edition. 95 * Example: 96 * --- 97 * auto block = 1 in blocks; 98 * assert(block.name == "stone"); 99 * assert(blocks[Blocks.grass].name == "grass"); 100 * --- 101 */ 102 public @safe Block* opBinaryRight(string op : "in")(block_t id) { 103 if(id < this.sel.length) { 104 auto ret = &this.sel[id]; 105 if(*ret !is null) return ret; 106 } 107 return null; 108 } 109 110 /// ditto 111 public @safe Block* opIndex(block_t id) { 112 return id in this; 113 } 114 115 /** 116 * Gets a block with the id used in Minecraft. 117 * Example: 118 * --- 119 * auto block = blocks.fromMinecraft(217); 120 * assert(block.name == "structure void"); 121 * assert(blocks.fromMinecraft(248) is null); 122 * --- 123 */ 124 public @safe Block* fromJava(ubyte id, ubyte meta=0) { 125 auto data = this.java[id]; 126 if(data.length > meta) return data[meta]; 127 else return null; 128 } 129 130 /** 131 * Gets a block with the id used in Minecraft. 132 * Example: 133 * --- 134 * auto block = blocks.fromBedrock(33, 2); 135 * assert(block && block.name == "piston facing north"); 136 * assert(blocks.fromBedrock(255) is null); // structure block 137 * --- 138 */ 139 public @safe Block* fromBedrock(ubyte id, ubyte meta=0) { 140 auto data = this.bedrock[id]; 141 if(data.length > meta) return data[meta]; 142 else return null; 143 } 144 145 public pure nothrow @property @safe @nogc size_t length() { 146 return this.sel.length; 147 } 148 149 version(NoBlocks) { 150 151 private void instantiateDefaultBlocks() {} 152 153 } else { 154 155 private void instantiateDefaultBlocks() { 156 157 const woodPickaxe = MiningTool(true, Tools.pickaxe, Tools.wood); 158 const stonePickaxe = MiningTool(true, Tools.pickaxe, Tools.stone); 159 const ironPickaxe = MiningTool(true, Tools.pickaxe, Tools.iron); 160 const diamondPickaxe = MiningTool(true, Tools.pickaxe, Tools.diamond); 161 162 const woodAxe = MiningTool(false, Tools.axe, Tools.wood); 163 164 this.register(new Block(_.air)); 165 this.register(new StoneBlock(_.stone, Items.cobblestone, Items.stone)); 166 this.register(new StoneBlock(_.granite, Items.granite)); 167 this.register(new StoneBlock(_.polishedGranite, Items.polishedGranite)); 168 this.register(new StoneBlock(_.diorite, Items.diorite)); 169 this.register(new StoneBlock(_.polishedDiorite, Items.polishedDiorite)); 170 this.register(new StoneBlock(_.andesite, Items.andesite)); 171 this.register(new StoneBlock(_.polishedAndesite, Items.polishedAndesite)); 172 this.register(new StoneBlock(_.stoneBricks, Items.stoneBricks)); 173 this.register(new StoneBlock(_.mossyStoneBricks, Items.mossyStoneBricks)); 174 this.register(new StoneBlock(_.crackedStoneBricks, Items.crackedStoneBricks)); 175 this.register(new StoneBlock(_.chiseledStoneBricks, Items.chiseledStoneBricks)); 176 this.register(new StoneBlock(_.cobblestone, Items.cobblestone)); 177 this.register(new StoneBlock(_.mossStone, Items.mossStone)); 178 this.register(new StoneBlock(_.cobblestoneWall, Items.cobblestoneWall)); 179 this.register(new StoneBlock(_.mossyCobblestoneWall, Items.mossyCobblestoneWall)); 180 this.register(new StoneBlock(_.bricks, Items.bricks)); 181 this.register(new MineableBlock(_.coalOre, woodPickaxe, Drop(Items.coal, 1, 1, Items.coalOre, &Drop.plusOne), Experience(0, 2))); 182 this.register(new MineableBlock(_.ironOre, stonePickaxe, Drop(Items.ironOre, 1))); 183 this.register(new MineableBlock(_.goldOre, ironPickaxe, Drop(Items.goldOre, 1))); 184 this.register(new MineableBlock(_.diamondOre, ironPickaxe, Drop(Items.diamond, 1, 1, Items.diamondOre))); //TODO +1 with fortune 185 this.register(new MineableBlock(_.emeraldOre, ironPickaxe, Drop(Items.emerald, 1, 1, Items.emeraldOre))); //TODO +1 with fortune 186 this.register(new MineableBlock(_.lapisLazuliOre, stonePickaxe, Drop(Items.lapisLazuli, 4, 8, Items.lapisLazuliOre), Experience(2, 5))); //TODO fortune 187 this.register(new RedstoneOreBlock!false(_.redstoneOre, Blocks.litRedstoneOre)); 188 this.register(new RedstoneOreBlock!true(_.litRedstoneOre, Blocks.redstoneOre)); 189 this.register(new MineableBlock(_.netherQuartzOre, woodPickaxe, Drop(Items.netherQuartz, 2, 5, Items.netherQuartzOre), Experience(2, 5, 1))); //TODO fortune 190 this.register(new MineableBlock(_.coalBlock, woodPickaxe, Drop(Items.coalBlock, 1))); 191 this.register(new MineableBlock(_.ironBlock, stonePickaxe, Drop(Items.ironBlock, 1))); 192 this.register(new MineableBlock(_.goldBlock, ironPickaxe, Drop(Items.goldBlock, 1))); 193 this.register(new MineableBlock(_.diamondBlock, ironPickaxe, Drop(Items.diamondBlock, 1))); 194 this.register(new MineableBlock(_.emeraldBlock, ironPickaxe, Drop(Items.emeraldBlock, 1))); 195 this.register(new MineableBlock(_.redstoneBlock, woodPickaxe, Drop(Items.redstoneBlock, 1))); 196 this.register(new MineableBlock(_.lapisLazuliOre, stonePickaxe, Drop(Items.lapisLazuliBlock, 1))); 197 this.register(new MineableBlock(_.netherReactorCore, woodPickaxe, [Drop(Items.diamond, 3), Drop(Items.ironIngot, 6)])); 198 this.register(new MineableBlock(_.activeNetherReactorCore, woodPickaxe, [Drop(Items.diamond, 3), Drop(Items.ironIngot, 6)])); 199 this.register(new MineableBlock(_.usedNetherReactorCore, woodPickaxe, [Drop(Items.diamond, 3), Drop(Items.ironIngot, 6)])); 200 this.register(new SuffocatingSpreadingBlock(_.grass, MiningTool(false, Tools.shovel, Tools.wood), [Drop(Items.dirt, 1, 1, Items.grass)], [Blocks.dirt], 1, 1, 2, 2, Blocks.dirt)); 201 this.register(new MineableBlock(_.dirt, MiningTool(false, Tools.shovel, Tools.wood), Drop(Items.dirt, 1))); 202 this.register(new MineableBlock(_.coarseDirt, MiningTool(false, Tools.shovel, Tools.wood), Drop(Items.dirt, 1))); 203 this.register(new MineableBlock(_.podzol, MiningTool(false, Tools.shovel, Tools.wood), Drop(Items.dirt, 1, 1, Items.podzol))); 204 this.register(new SpreadingBlock(_.mycelium, MiningTool(false, Tools.shovel, Tools.wood), [Drop(Items.dirt, 1, 1, Items.mycelium)], [Blocks.dirt, Blocks.grass, Blocks.podzol], 1, 1, 3, 1)); 205 this.register(new MineableBlock(_.grassPath, MiningTool(false, Tools.shovel, Tools.wood), Drop(Items.grassPath, 1))); 206 this.register(new FertileTerrainBlock!false(_.farmland0, Blocks.farmland7, Blocks.dirt)); 207 this.register(new FertileTerrainBlock!false(_.farmland1, Blocks.farmland7, Blocks.farmland0)); 208 this.register(new FertileTerrainBlock!false(_.farmland2, Blocks.farmland7, Blocks.farmland1)); 209 this.register(new FertileTerrainBlock!false(_.farmland3, Blocks.farmland7, Blocks.farmland2)); 210 this.register(new FertileTerrainBlock!false(_.farmland4, Blocks.farmland7, Blocks.farmland4)); 211 this.register(new FertileTerrainBlock!false(_.farmland5, Blocks.farmland7, Blocks.farmland4)); 212 this.register(new FertileTerrainBlock!false(_.farmland6, Blocks.farmland7, Blocks.farmland5)); 213 this.register(new FertileTerrainBlock!true(_.farmland7, 0, Blocks.farmland6)); 214 this.register(new MineableBlock(_.oakWoodPlanks, woodAxe, Drop(Items.oakWoodPlanks, 1))); 215 this.register(new MineableBlock(_.spruceWoodPlanks, woodAxe, Drop(Items.spruceWoodPlanks, 1))); 216 this.register(new MineableBlock(_.birchWoodPlanks, woodAxe, Drop(Items.birchWoodPlanks, 1))); 217 this.register(new MineableBlock(_.jungleWoodPlanks, woodAxe, Drop(Items.jungleWoodPlanks, 1))); 218 this.register(new MineableBlock(_.acaciaWoodPlanks, woodAxe, Drop(Items.acaciaWoodPlanks, 1))); 219 this.register(new MineableBlock(_.darkOakWoodPlanks, woodAxe, Drop(Items.darkOakWoodPlanks, 1))); 220 this.register(new SaplingBlock(_.oakSapling, Items.oakSapling, Blocks.oakWood, Blocks.oakLeaves)); 221 this.register(new SaplingBlock(_.spruceSapling, Items.spruceSapling, Blocks.spruceWood, Blocks.spruceLeaves)); 222 this.register(new SaplingBlock(_.birchSapling, Items.birchSapling, Blocks.birchWood, Blocks.birchLeaves)); 223 this.register(new SaplingBlock(_.jungleSapling, Items.jungleSapling, Blocks.jungleWood, Blocks.jungleLeaves)); 224 this.register(new SaplingBlock(_.acaciaSapling, Items.acaciaSapling, Blocks.acaciaWood, Blocks.acaciaLeaves)); 225 this.register(new SaplingBlock(_.darkOakSapling, Items.darkOakSapling, Blocks.darkOakWood, Blocks.darkOakLeaves)); 226 this.register(new Block(_.bedrock)); 227 this.register(new GravityBlock(_.sand, MiningTool(false, Tools.shovel, Tools.wood), Drop(Items.sand, 1))); 228 this.register(new GravityBlock(_.redSand, MiningTool(false, Tools.shovel, Tools.wood), Drop(Items.redSand, 1))); 229 this.register(new GravelBlock(_.gravel)); 230 this.register(new WoodBlock(_.oakWoodUpDown, Items.oakWood)); 231 this.register(new WoodBlock(_.oakWoodEastWest, Items.oakWood)); 232 this.register(new WoodBlock(_.oakWoodNorthSouth, Items.oakWood)); 233 this.register(new WoodBlock(_.oakWoodBark, Items.oakWood)); 234 this.register(new WoodBlock(_.spruceWoodUpDown, Items.spruceWood)); 235 this.register(new WoodBlock(_.spruceWoodEastWest, Items.spruceWood)); 236 this.register(new WoodBlock(_.spruceWoodNorthSouth, Items.spruceWood)); 237 this.register(new WoodBlock(_.spruceWoodBark, Items.spruceWood)); 238 this.register(new WoodBlock(_.birchWoodUpDown, Items.birchWood)); 239 this.register(new WoodBlock(_.birchWoodEastWest, Items.birchWood)); 240 this.register(new WoodBlock(_.birchWoodNorthSouth, Items.birchWood)); 241 this.register(new WoodBlock(_.birchWoodBark, Items.birchWood)); 242 this.register(new WoodBlock(_.jungleWoodUpDown, Items.jungleWood)); 243 this.register(new WoodBlock(_.jungleWoodEastWest, Items.jungleWood)); 244 this.register(new WoodBlock(_.jungleWoodNorthSouth, Items.jungleWood)); 245 this.register(new WoodBlock(_.jungleWoodBark, Items.jungleWood)); 246 this.register(new WoodBlock(_.acaciaWoodUpDown, Items.acaciaWood)); 247 this.register(new WoodBlock(_.acaciaWoodEastWest, Items.acaciaWood)); 248 this.register(new WoodBlock(_.acaciaWoodNorthSouth, Items.acaciaWood)); 249 this.register(new WoodBlock(_.acaciaWoodBark, Items.acaciaWood)); 250 this.register(new WoodBlock(_.darkOakWoodUpDown, Items.darkOakWood)); 251 this.register(new WoodBlock(_.darkOakWoodEastWest, Items.darkOakWood)); 252 this.register(new WoodBlock(_.darkOakWoodNorthSouth, Items.darkOakWood)); 253 this.register(new WoodBlock(_.darkOakWoodBark, Items.darkOakWood)); 254 this.register(new LeavesBlock!(true, true)(_.oakLeavesDecay, Items.oakLeaves, Items.oakSapling, false)); 255 this.register(new LeavesBlock!(false, true)(_.oakLeavesNoDecay, Items.oakLeaves, Items.oakSapling, false)); 256 this.register(new LeavesBlock!(true, true)(_.oakLeavesCheckDecay, Items.oakLeaves, Items.oakSapling, false)); 257 this.register(new LeavesBlock!(false, true)(_.oakLeavesNoDecayCheckDecay, Items.oakLeaves, Items.oakSapling, false)); 258 this.register(new LeavesBlock!(true, false)(_.spruceLeavesDecay, Items.spruceLeaves, Items.spruceSapling, false)); 259 this.register(new LeavesBlock!(false, false)(_.spruceLeavesNoDecay, Items.spruceLeaves, Items.spruceSapling, false)); 260 this.register(new LeavesBlock!(true, false)(_.spruceLeavesCheckDecay, Items.spruceLeaves, Items.spruceSapling, false)); 261 this.register(new LeavesBlock!(true, false)(_.spruceLeavesNoDecayCheckDecay, Items.spruceLeaves, Items.spruceSapling, false)); 262 this.register(new LeavesBlock!(true, false)(_.birchLeavesDecay, Items.birchLeaves, Items.birchSapling, false)); 263 this.register(new LeavesBlock!(false, false)(_.birchLeavesNoDecay, Items.birchLeaves, Items.birchSapling, false)); 264 this.register(new LeavesBlock!(true, false)(_.birchLeavesCheckDecay, Items.birchLeaves, Items.birchSapling, false)); 265 this.register(new LeavesBlock!(false, false)(_.birchLeavesNoDecayCheckDecay, Items.birchLeaves, Items.birchSapling, false)); 266 this.register(new LeavesBlock!(true, false)(_.jungleLeavesDecay, Items.jungleLeaves, Items.jungleSapling, true)); 267 this.register(new LeavesBlock!(false, false)(_.jungleLeavesNoDecay, Items.jungleLeaves, Items.jungleSapling, true)); 268 this.register(new LeavesBlock!(true, false)(_.jungleLeavesCheckDecay, Items.jungleLeaves, Items.jungleSapling, true)); 269 this.register(new LeavesBlock!(false, true)(_.jungleLeavesNoDecayCheckDecay, Items.jungleLeaves, Items.jungleSapling, true)); 270 this.register(new LeavesBlock!(true, false)(_.acaciaLeavesDecay, Items.acaciaLeaves, Items.acaciaSapling, false)); 271 this.register(new LeavesBlock!(false, false)(_.acaciaLeavesNoDecay, Items.acaciaLeaves, Items.acaciaSapling, false)); 272 this.register(new LeavesBlock!(true, false)(_.acaciaLeavesCheckDecay, Items.acaciaLeaves, Items.acaciaSapling, false)); 273 this.register(new LeavesBlock!(false, false)(_.acaciaLeavesNoDecayCheckDecay, Items.acaciaLeaves, Items.acaciaSapling, false)); 274 this.register(new LeavesBlock!(true, true)(_.darkOakLeavesDecay, Items.darkOakLeaves, Items.darkOakSapling, false)); 275 this.register(new LeavesBlock!(false, true)(_.darkOakLeavesNoDecay, Items.darkOakLeaves, Items.darkOakSapling, false)); 276 this.register(new LeavesBlock!(true, true)(_.darkOakLeavesCheckDecay, Items.darkOakLeaves, Items.darkOakSapling, false)); 277 this.register(new LeavesBlock!(false, true)(_.darkOakLeavesNoDecayCheckDecay, Items.darkOakLeaves, Items.darkOakSapling, false)); 278 this.register(new AbsorbingBlock(_.sponge, Items.sponge, Blocks.wetSponge, Blocks.water, 7, 65)); 279 this.register(new MineableBlock(_.wetSponge, MiningTool.init, Drop(Items.wetSponge, 1))); 280 this.register(new MineableBlock(_.glass, MiningTool.init, Drop(0, 0, 0, Items.glass))); 281 this.register(new MineableBlock(_.whiteStainedGlass, MiningTool.init, Drop(0, 0, 0, Items.whiteStainedGlass))); 282 this.register(new MineableBlock(_.orangeStainedGlass, MiningTool.init, Drop(0, 0, 0, Items.orangeStainedGlass))); 283 this.register(new MineableBlock(_.magentaStainedGlass, MiningTool.init, Drop(0, 0, 0, Items.magentaStainedGlass))); 284 this.register(new MineableBlock(_.lightBlueStainedGlass, MiningTool.init, Drop(0, 0, 0, Items.lightBlueStainedGlass))); 285 this.register(new MineableBlock(_.yellowStainedGlass, MiningTool.init, Drop(0, 0, 0, Items.yellowStainedGlass))); 286 this.register(new MineableBlock(_.limeStainedGlass, MiningTool.init, Drop(0, 0, 0, Items.limeStainedGlass))); 287 this.register(new MineableBlock(_.pinkStainedGlass, MiningTool.init, Drop(0, 0, 0, Items.pinkStainedGlass))); 288 this.register(new MineableBlock(_.grayStainedGlass, MiningTool.init, Drop(0, 0, 0, Items.grayStainedGlass))); 289 this.register(new MineableBlock(_.lightGrayStainedGlass, MiningTool.init, Drop(0, 0, 0, Items.lightGrayStainedGlass))); 290 this.register(new MineableBlock(_.cyanStainedGlass, MiningTool.init, Drop(0, 0, 0, Items.cyanStainedGlass))); 291 this.register(new MineableBlock(_.purpleStainedGlass, MiningTool.init, Drop(0, 0, 0, Items.purpleStainedGlass))); 292 this.register(new MineableBlock(_.blueStainedGlass, MiningTool.init, Drop(0, 0, 0, Items.blueStainedGlass))); 293 this.register(new MineableBlock(_.brownStainedGlass, MiningTool.init, Drop(0, 0, 0, Items.brownStainedGlass))); 294 this.register(new MineableBlock(_.greenStainedGlass, MiningTool.init, Drop(0, 0, 0, Items.greenStainedGlass))); 295 this.register(new MineableBlock(_.redStainedGlass, MiningTool.init, Drop(0, 0, 0, Items.redStainedGlass))); 296 this.register(new MineableBlock(_.blackStainedGlass, MiningTool.init, Drop(0, 0, 0, Items.blackStainedGlass))); 297 this.register(new MineableBlock(_.glassPane, MiningTool.init, Drop(0, 0, 0, Items.glassPane))); 298 this.register(new MineableBlock(_.whiteStainedGlassPane, MiningTool.init, Drop(0, 0, 0, Items.whiteStainedGlassPane))); 299 this.register(new MineableBlock(_.orangeStainedGlassPane, MiningTool.init, Drop(0, 0, 0, Items.orangeStainedGlassPane))); 300 this.register(new MineableBlock(_.magentaStainedGlassPane, MiningTool.init, Drop(0, 0, 0, Items.magentaStainedGlassPane))); 301 this.register(new MineableBlock(_.lightBlueStainedGlassPane, MiningTool.init, Drop(0, 0, 0, Items.lightBlueStainedGlassPane))); 302 this.register(new MineableBlock(_.yellowStainedGlassPane, MiningTool.init, Drop(0, 0, 0, Items.yellowStainedGlassPane))); 303 this.register(new MineableBlock(_.limeStainedGlassPane, MiningTool.init, Drop(0, 0, 0, Items.limeStainedGlassPane))); 304 this.register(new MineableBlock(_.pinkStainedGlassPane, MiningTool.init, Drop(0, 0, 0, Items.pinkStainedGlassPane))); 305 this.register(new MineableBlock(_.grayStainedGlassPane, MiningTool.init, Drop(0, 0, 0, Items.grayStainedGlassPane))); 306 this.register(new MineableBlock(_.lightGrayStainedGlassPane, MiningTool.init, Drop(0, 0, 0, Items.lightGrayStainedGlassPane))); 307 this.register(new MineableBlock(_.cyanStainedGlassPane, MiningTool.init, Drop(0, 0, 0, Items.cyanStainedGlassPane))); 308 this.register(new MineableBlock(_.purpleStainedGlassPane, MiningTool.init, Drop(0, 0, 0, Items.purpleStainedGlassPane))); 309 this.register(new MineableBlock(_.blueStainedGlassPane, MiningTool.init, Drop(0, 0, 0, Items.blueStainedGlassPane))); 310 this.register(new MineableBlock(_.brownStainedGlassPane, MiningTool.init, Drop(0, 0, 0, Items.brownStainedGlassPane))); 311 this.register(new MineableBlock(_.greenStainedGlassPane, MiningTool.init, Drop(0, 0, 0, Items.greenStainedGlassPane))); 312 this.register(new MineableBlock(_.redStainedGlassPane, MiningTool.init, Drop(0, 0, 0, Items.redStainedGlassPane))); 313 this.register(new MineableBlock(_.blackStainedGlassPane, MiningTool.init, Drop(0, 0, 0, Items.blackStainedGlassPane))); 314 this.register(new MineableBlock(_.sandstone, woodPickaxe, Drop(Items.sandstone, 1))); 315 this.register(new MineableBlock(_.chiseledSandstone, woodPickaxe, Drop(Items.chiseledSandstone, 1))); 316 this.register(new MineableBlock(_.smoothSandstone, woodPickaxe, Drop(Items.smoothSandstone, 1))); 317 this.register(new MineableBlock(_.redSandstone, woodPickaxe, Drop(Items.redSandstone, 1))); 318 this.register(new MineableBlock(_.chiseledRedSandstone, woodPickaxe, Drop(Items.chiseledRedSandstone, 1))); 319 this.register(new MineableBlock(_.smoothRedSandstone, woodPickaxe, Drop(Items.smoothRedSandstone, 1))); 320 this.register(new MineableBlock(_.whiteWool, MiningTool(false, Tools.shears), Drop(Items.whiteWool, 1))); 321 this.register(new MineableBlock(_.orangeWool, MiningTool(false, Tools.shears), Drop(Items.orangeWool, 1))); 322 this.register(new MineableBlock(_.magentaWool, MiningTool(false, Tools.shears), Drop(Items.magentaWool, 1))); 323 this.register(new MineableBlock(_.lightBlueWool, MiningTool(false, Tools.shears), Drop(Items.lightBlueWool, 1))); 324 this.register(new MineableBlock(_.yellowWool, MiningTool(false, Tools.shears), Drop(Items.yellowWool, 1))); 325 this.register(new MineableBlock(_.limeWool, MiningTool(false, Tools.shears), Drop(Items.limeWool, 1))); 326 this.register(new MineableBlock(_.pinkWool, MiningTool(false, Tools.shears), Drop(Items.pinkWool, 1))); 327 this.register(new MineableBlock(_.grayWool, MiningTool(false, Tools.shears), Drop(Items.grayWool, 1))); 328 this.register(new MineableBlock(_.lightGrayWool, MiningTool(false, Tools.shears), Drop(Items.lightGrayWool, 1))); 329 this.register(new MineableBlock(_.cyanWool, MiningTool(false, Tools.shears), Drop(Items.cyanWool, 1))); 330 this.register(new MineableBlock(_.purpleWool, MiningTool(false, Tools.shears), Drop(Items.purpleWool, 1))); 331 this.register(new MineableBlock(_.blueWool, MiningTool(false, Tools.shears), Drop(Items.blueWool, 1))); 332 this.register(new MineableBlock(_.brownWool, MiningTool(false, Tools.shears), Drop(Items.brownWool, 1))); 333 this.register(new MineableBlock(_.greenWool, MiningTool(false, Tools.shears), Drop(Items.greenWool, 1))); 334 this.register(new MineableBlock(_.redWool, MiningTool(false, Tools.shears), Drop(Items.redWool, 1))); 335 this.register(new MineableBlock(_.blackWool, MiningTool(false, Tools.shears), Drop(Items.blackWool, 1))); 336 this.register(new MineableBlock(_.whiteCarpet, MiningTool.init, Drop(Items.whiteCarpet, 1))); 337 this.register(new MineableBlock(_.orangeCarpet, MiningTool.init, Drop(Items.orangeCarpet, 1))); 338 this.register(new MineableBlock(_.magentaCarpet, MiningTool.init, Drop(Items.magentaCarpet, 1))); 339 this.register(new MineableBlock(_.lightBlueCarpet, MiningTool.init, Drop(Items.lightBlueCarpet, 1))); 340 this.register(new MineableBlock(_.yellowCarpet, MiningTool.init, Drop(Items.yellowCarpet, 1))); 341 this.register(new MineableBlock(_.limeCarpet, MiningTool.init, Drop(Items.limeCarpet, 1))); 342 this.register(new MineableBlock(_.pinkCarpet, MiningTool.init, Drop(Items.pinkCarpet, 1))); 343 this.register(new MineableBlock(_.grayCarpet, MiningTool.init, Drop(Items.grayCarpet, 1))); 344 this.register(new MineableBlock(_.lightGrayCarpet, MiningTool.init, Drop(Items.lightGrayCarpet, 1))); 345 this.register(new MineableBlock(_.cyanCarpet, MiningTool.init, Drop(Items.cyanCarpet, 1))); 346 this.register(new MineableBlock(_.purpleCarpet, MiningTool.init, Drop(Items.purpleCarpet, 1))); 347 this.register(new MineableBlock(_.blueCarpet, MiningTool.init, Drop(Items.blueCarpet, 1))); 348 this.register(new MineableBlock(_.brownCarpet, MiningTool.init, Drop(Items.brownCarpet, 1))); 349 this.register(new MineableBlock(_.greenCarpet, MiningTool.init, Drop(Items.greenCarpet, 1))); 350 this.register(new MineableBlock(_.redCarpet, MiningTool.init, Drop(Items.redCarpet, 1))); 351 this.register(new MineableBlock(_.blackCarpet, MiningTool.init, Drop(Items.blackCarpet, 1))); 352 this.register(new FlowerBlock(_.dandelion, Items.dandelion)); 353 this.register(new FlowerBlock(_.poppy, Items.poppy)); 354 this.register(new FlowerBlock(_.blueOrchid, Items.blueOrchid)); 355 this.register(new FlowerBlock(_.allium, Items.allium)); 356 this.register(new FlowerBlock(_.azureBluet, Items.azureBluet)); 357 this.register(new FlowerBlock(_.redTulip, Items.redTulip)); 358 this.register(new FlowerBlock(_.orangeTulip, Items.orangeTulip)); 359 this.register(new FlowerBlock(_.whiteTulip, Items.whiteTulip)); 360 this.register(new FlowerBlock(_.pinkTulip, Items.pinkTulip)); 361 this.register(new FlowerBlock(_.oxeyeDaisy, Items.oxeyeDaisy)); 362 this.register(new DoublePlantBlock(_.sunflowerBottom, false, Blocks.sunflowerTop, Items.sunflower)); 363 this.register(new DoublePlantBlock(_.sunflowerTop, true, Blocks.sunflowerBottom, Items.sunflower)); 364 this.register(new DoublePlantBlock(_.liliacBottom, false, Blocks.liliacTop, Items.liliac)); 365 this.register(new DoublePlantBlock(_.liliacTop, true, Blocks.liliacBottom, Items.liliac)); 366 this.register(new GrassDoublePlantBlock(_.doubleTallgrassBottom, false, Blocks.doubleTallgrassTop, Items.tallGrass)); 367 this.register(new GrassDoublePlantBlock(_.doubleTallgrassTop, true, Blocks.doubleTallgrassBottom, Items.tallGrass)); 368 this.register(new GrassDoublePlantBlock(_.largeFernBottom, false, Blocks.largeFernTop, Items.fern)); 369 this.register(new GrassDoublePlantBlock(_.largeFernTop, true, Blocks.largeFernBottom, Items.fern)); 370 this.register(new DoublePlantBlock(_.roseBushBottom, false, Blocks.roseBushTop, Items.roseBush)); 371 this.register(new DoublePlantBlock(_.roseBushTop, true, Blocks.roseBushBottom, Items.roseBush)); 372 this.register(new DoublePlantBlock(_.peonyBottom, false, Blocks.peonyTop, Items.peony)); 373 this.register(new DoublePlantBlock(_.peonyTop, true, Blocks.peonyBottom, Items.peony)); 374 this.register(new PlantBlock(_.tallGrass, Items.tallGrass, Drop(Items.seeds, 0, 1))); 375 this.register(new PlantBlock(_.fern, Items.fern, Drop(Items.seeds, 0, 1))); 376 this.register(new PlantBlock(_.deadBush, Items.deadBush, Drop(Items.stick, 0, 2))); 377 this.register(new MineableBlock(_.stoneSlab, woodPickaxe, Drop(Items.stoneSlab, 1))); 378 this.register(new MineableBlock(_.sandstoneSlab, woodPickaxe, Drop(Items.sandstoneSlab, 1))); 379 this.register(new MineableBlock(_.stoneWoodenSlab, woodPickaxe, Drop(Items.stoneWoodenSlab, 1))); 380 this.register(new MineableBlock(_.cobblestoneSlab, woodPickaxe, Drop(Items.cobblestoneSlab, 1))); 381 this.register(new MineableBlock(_.bricksSlab, woodPickaxe, Drop(Items.bricksSlab, 1))); 382 this.register(new MineableBlock(_.stoneBrickSlab, woodPickaxe, Drop(Items.stoneBrickSlab, 1))); 383 this.register(new MineableBlock(_.netherBrickSlab, woodPickaxe, Drop(Items.netherBrickSlab, 1))); 384 this.register(new MineableBlock(_.quartzSlab, woodPickaxe, Drop(Items.quartzSlab, 1))); 385 this.register(new MineableBlock(_.redSandstoneSlab, woodPickaxe, Drop(Items.redSandstoneSlab, 1))); 386 this.register(new MineableBlock(_.purpurSlab, woodPickaxe, Drop(Items.purpurSlab, 1))); 387 this.register(new MineableBlock(_.oakWoodSlab, woodAxe, Drop(Items.oakWoodSlab, 1))); 388 this.register(new MineableBlock(_.spruceWoodSlab, woodAxe, Drop(Items.spruceWoodSlab, 1))); 389 this.register(new MineableBlock(_.birchWoodSlab, woodAxe, Drop(Items.birchWoodSlab, 1))); 390 this.register(new MineableBlock(_.jungleWoodSlab, woodAxe, Drop(Items.jungleWoodSlab, 1))); 391 this.register(new MineableBlock(_.acaciaWoodSlab, woodAxe, Drop(Items.acaciaWoodSlab, 1))); 392 this.register(new MineableBlock(_.darkOakWoodSlab, woodAxe, Drop(Items.darkOakWoodSlab, 1))); 393 this.register(new MineableBlock(_.upperStoneSlab, woodPickaxe, Drop(Items.stoneSlab, 1))); 394 this.register(new MineableBlock(_.upperSandstoneSlab, woodPickaxe, Drop(Items.sandstoneSlab, 1))); 395 this.register(new MineableBlock(_.upperStoneWoodenSlab, woodPickaxe, Drop(Items.stoneWoodenSlab, 1))); 396 this.register(new MineableBlock(_.upperCobblestoneSlab, woodPickaxe, Drop(Items.cobblestoneSlab, 1))); 397 this.register(new MineableBlock(_.upperBricksSlab, woodPickaxe, Drop(Items.bricksSlab, 1))); 398 this.register(new MineableBlock(_.upperStoneBrickSlab, woodPickaxe, Drop(Items.stoneBrickSlab, 1))); 399 this.register(new MineableBlock(_.upperNetherBrickSlab, woodPickaxe, Drop(Items.netherBrickSlab, 1))); 400 this.register(new MineableBlock(_.upperQuartzSlab, woodPickaxe, Drop(Items.quartzSlab, 1))); 401 this.register(new MineableBlock(_.upperRedSandstoneSlab, woodPickaxe, Drop(Items.redSandstoneSlab, 1))); 402 this.register(new MineableBlock(_.upperPurpurSlab, woodPickaxe, Drop(Items.purpurSlab, 1))); 403 this.register(new MineableBlock(_.upperOakWoodSlab, woodAxe, Drop(Items.oakWoodSlab, 1))); 404 this.register(new MineableBlock(_.upperSpruceWoodSlab, woodAxe, Drop(Items.spruceWoodSlab, 1))); 405 this.register(new MineableBlock(_.birchWoodSlab, woodAxe, Drop(Items.birchWoodSlab, 1))); 406 this.register(new MineableBlock(_.upperJungleWoodSlab, woodAxe, Drop(Items.jungleWoodSlab, 1))); 407 this.register(new MineableBlock(_.upperAcaciaWoodSlab, woodAxe, Drop(Items.acaciaWoodSlab, 1))); 408 this.register(new MineableBlock(_.upperDarkOakWoodSlab, woodAxe, Drop(Items.darkOakWoodSlab, 1))); 409 this.register(new MineableBlock(_.doubleStoneSlab, woodPickaxe, Drop(Items.stoneSlab, 2))); 410 this.register(new MineableBlock(_.doubleSandstoneSlab, woodPickaxe, Drop(Items.sandstoneSlab, 2))); 411 this.register(new MineableBlock(_.doubleStoneWoodenSlab, woodPickaxe, Drop(Items.stoneWoodenSlab, 2))); 412 this.register(new MineableBlock(_.doubleCobblestoneSlab, woodPickaxe, Drop(Items.cobblestoneSlab, 2))); 413 this.register(new MineableBlock(_.doubleBricksSlab, woodPickaxe, Drop(Items.bricksSlab, 1))); 414 this.register(new MineableBlock(_.doubleStoneBrickSlab, woodPickaxe, Drop(Items.stoneBrickSlab, 2))); 415 this.register(new MineableBlock(_.doubleNetherBrickSlab, woodPickaxe, Drop(Items.netherBrickSlab, 2))); 416 this.register(new MineableBlock(_.doubleQuartzSlab, woodPickaxe, Drop(Items.quartzSlab, 2))); 417 this.register(new MineableBlock(_.doubleRedSandstoneSlab, woodPickaxe, Drop(Items.redSandstoneSlab, 2))); 418 this.register(new MineableBlock(_.doublePurpurSlab, woodPickaxe, Drop(Items.purpurSlab, 2))); 419 this.register(new MineableBlock(_.doubleOakWoodSlab, woodAxe, Drop(Items.oakWoodSlab, 2))); 420 this.register(new MineableBlock(_.doubleSpruceWoodSlab, woodAxe, Drop(Items.spruceWoodSlab, 2))); 421 this.register(new MineableBlock(_.birchWoodSlab, woodAxe, Drop(Items.birchWoodSlab, 2))); 422 this.register(new MineableBlock(_.doubleJungleWoodSlab, woodAxe, Drop(Items.jungleWoodSlab, 2))); 423 this.register(new MineableBlock(_.doubleAcaciaWoodSlab, woodAxe, Drop(Items.acaciaWoodSlab, 2))); 424 this.register(new MineableBlock(_.doubleDarkOakWoodSlab, woodAxe, Drop(Items.darkOakWoodSlab, 2))); 425 this.register(new StairsBlock(_.cobblestoneStairsFacingEast, Facing.east, false, woodPickaxe, Items.cobblestoneStairs)); 426 this.register(new StairsBlock(_.cobblestoneStairsFacingWest, Facing.west, false, woodPickaxe, Items.cobblestoneStairs)); 427 this.register(new StairsBlock(_.cobblestoneStairsFacingSouth, Facing.south, false, woodPickaxe, Items.cobblestoneStairs)); 428 this.register(new StairsBlock(_.cobblestoneStairsFacingNorth, Facing.north, false, woodPickaxe, Items.cobblestoneStairs)); 429 this.register(new StairsBlock(_.upsideDownCobblestoneStairsFacingEast, Facing.east, true, woodPickaxe, Items.cobblestoneStairs)); 430 this.register(new StairsBlock(_.upsideDownCobblestoneStairsFacingWest, Facing.west, true, woodPickaxe, Items.cobblestoneStairs)); 431 this.register(new StairsBlock(_.upsideDownCobblestoneStairsFacingSouth, Facing.south, true, woodPickaxe, Items.cobblestoneStairs)); 432 this.register(new StairsBlock(_.upsideDownCobblestoneStairsFacingNorth, Facing.north, true, woodPickaxe, Items.cobblestoneStairs)); 433 this.register(new StairsBlock(_.brickStairsFacingEast, Facing.east, false, woodPickaxe, Items.brickStairs)); 434 this.register(new StairsBlock(_.brickStairsFacingWest, Facing.west, false, woodPickaxe, Items.brickStairs)); 435 this.register(new StairsBlock(_.brickStairsFacingSouth, Facing.south, false, woodPickaxe, Items.brickStairs)); 436 this.register(new StairsBlock(_.brickStairsFacingNorth, Facing.north, false, woodPickaxe, Items.brickStairs)); 437 this.register(new StairsBlock(_.upsideDownBrickStairsFacingEast, Facing.east, true, woodPickaxe, Items.brickStairs)); 438 this.register(new StairsBlock(_.upsideDownBrickStairsFacingWest, Facing.west, true, woodPickaxe, Items.brickStairs)); 439 this.register(new StairsBlock(_.upsideDownBrickStairsFacingSouth, Facing.south, true, woodPickaxe, Items.brickStairs)); 440 this.register(new StairsBlock(_.upsideDownBrickStairsFacingNorth, Facing.north, true, woodPickaxe, Items.brickStairs)); 441 this.register(new StairsBlock(_.netherBrickStairsFacingEast, Facing.east, false, woodPickaxe, Items.netherBrickStairs)); 442 this.register(new StairsBlock(_.netherBrickStairsFacingWest, Facing.west, false, woodPickaxe, Items.netherBrickStairs)); 443 this.register(new StairsBlock(_.netherBrickStairsFacingSouth, Facing.south, false, woodPickaxe, Items.netherBrickStairs)); 444 this.register(new StairsBlock(_.netherBrickStairsFacingNorth, Facing.north, false, woodPickaxe, Items.netherBrickStairs)); 445 this.register(new StairsBlock(_.upsideDownNetherBrickStairsFacingEast, Facing.east, true, woodPickaxe, Items.netherBrickStairs)); 446 this.register(new StairsBlock(_.upsideDownNetherBrickStairsFacingWest, Facing.west, true, woodPickaxe, Items.netherBrickStairs)); 447 this.register(new StairsBlock(_.upsideDownNetherBrickStairsFacingSouth, Facing.south, true, woodPickaxe, Items.netherBrickStairs)); 448 this.register(new StairsBlock(_.upsideDownNetherBrickStairsFacingNorth, Facing.north, true, woodPickaxe, Items.netherBrickStairs)); 449 this.register(new StairsBlock(_.stoneBrickStairsFacingEast, Facing.east, false, woodPickaxe, Items.stoneBrickStairs)); 450 this.register(new StairsBlock(_.stoneBrickStairsFacingWest, Facing.west, false, woodPickaxe, Items.stoneBrickStairs)); 451 this.register(new StairsBlock(_.stoneBrickStairsFacingSouth, Facing.south, false, woodPickaxe, Items.stoneBrickStairs)); 452 this.register(new StairsBlock(_.stoneBrickStairsFacingNorth, Facing.north, false, woodPickaxe, Items.stoneBrickStairs)); 453 this.register(new StairsBlock(_.upsideDownStoneBrickStairsFacingEast, Facing.east, true, woodPickaxe, Items.stoneBrickStairs)); 454 this.register(new StairsBlock(_.upsideDownStoneBrickStairsFacingWest, Facing.west, true, woodPickaxe, Items.stoneBrickStairs)); 455 this.register(new StairsBlock(_.upsideDownStoneBrickStairsFacingSouth, Facing.south, true, woodPickaxe, Items.stoneBrickStairs)); 456 this.register(new StairsBlock(_.upsideDownStoneBrickStairsFacingNorth, Facing.north, true, woodPickaxe, Items.stoneBrickStairs)); 457 this.register(new StairsBlock(_.purpurStairsFacingEast, Facing.east, false, woodPickaxe, Items.purpurStairs)); 458 this.register(new StairsBlock(_.purpurStairsFacingWest, Facing.west, false, woodPickaxe, Items.purpurStairs)); 459 this.register(new StairsBlock(_.purpurStairsFacingSouth, Facing.south, false, woodPickaxe, Items.purpurStairs)); 460 this.register(new StairsBlock(_.purpurStairsFacingNorth, Facing.north, false, woodPickaxe, Items.purpurStairs)); 461 this.register(new StairsBlock(_.upsideDownPurpurStairsFacingEast, Facing.east, true, woodPickaxe, Items.purpurStairs)); 462 this.register(new StairsBlock(_.upsideDownPurpurStairsFacingWest, Facing.west, true, woodPickaxe, Items.purpurStairs)); 463 this.register(new StairsBlock(_.upsideDownPurpurStairsFacingSouth, Facing.south, true, woodPickaxe, Items.purpurStairs)); 464 this.register(new StairsBlock(_.upsideDownPurpurStairsFacingNorth, Facing.north, true, woodPickaxe, Items.purpurStairs)); 465 this.register(new StairsBlock(_.quartzStairsFacingEast, Facing.east, false, woodPickaxe, Items.quartzStairs)); 466 this.register(new StairsBlock(_.quartzStairsFacingWest, Facing.west, false, woodPickaxe, Items.quartzStairs)); 467 this.register(new StairsBlock(_.quartzStairsFacingSouth, Facing.south, false, woodPickaxe, Items.quartzStairs)); 468 this.register(new StairsBlock(_.quartzStairsFacingNorth, Facing.north, false, woodPickaxe, Items.quartzStairs)); 469 this.register(new StairsBlock(_.upsideDownQuartzStairsFacingEast, Facing.east, true, woodPickaxe, Items.quartzStairs)); 470 this.register(new StairsBlock(_.upsideDownQuartzStairsFacingWest, Facing.west, true, woodPickaxe, Items.quartzStairs)); 471 this.register(new StairsBlock(_.upsideDownQuartzStairsFacingSouth, Facing.south, true, woodPickaxe, Items.quartzStairs)); 472 this.register(new StairsBlock(_.upsideDownQuartzStairsFacingNorth, Facing.north, true, woodPickaxe, Items.quartzStairs)); 473 this.register(new StairsBlock(_.sandstoneStairsFacingEast, Facing.east, false, woodPickaxe, Items.sandstoneStairs)); 474 this.register(new StairsBlock(_.sandstoneStairsFacingWest, Facing.west, false, woodPickaxe, Items.sandstoneStairs)); 475 this.register(new StairsBlock(_.sandstoneStairsFacingSouth, Facing.south, false, woodPickaxe, Items.sandstoneStairs)); 476 this.register(new StairsBlock(_.sandstoneStairsFacingNorth, Facing.north, false, woodPickaxe, Items.sandstoneStairs)); 477 this.register(new StairsBlock(_.upsideDownSandstoneStairsFacingEast, Facing.east, true, woodPickaxe, Items.sandstoneStairs)); 478 this.register(new StairsBlock(_.upsideDownSandstoneStairsFacingWest, Facing.west, true, woodPickaxe, Items.sandstoneStairs)); 479 this.register(new StairsBlock(_.upsideDownSandstoneStairsFacingSouth, Facing.south, true, woodPickaxe, Items.sandstoneStairs)); 480 this.register(new StairsBlock(_.upsideDownSandstoneStairsFacingNorth, Facing.north, true, woodPickaxe, Items.sandstoneStairs)); 481 this.register(new StairsBlock(_.redSandstoneStairsFacingEast, Facing.east, false, woodPickaxe, Items.redSandstoneStairs)); 482 this.register(new StairsBlock(_.redSandstoneStairsFacingWest, Facing.west, false, woodPickaxe, Items.redSandstoneStairs)); 483 this.register(new StairsBlock(_.redSandstoneStairsFacingSouth, Facing.south, false, woodPickaxe, Items.redSandstoneStairs)); 484 this.register(new StairsBlock(_.redSandstoneStairsFacingNorth, Facing.north, false, woodPickaxe, Items.redSandstoneStairs)); 485 this.register(new StairsBlock(_.upsideDownRedSandstoneStairsFacingEast, Facing.east, true, woodPickaxe, Items.redSandstoneStairs)); 486 this.register(new StairsBlock(_.upsideDownRedSandstoneStairsFacingWest, Facing.west, true, woodPickaxe, Items.redSandstoneStairs)); 487 this.register(new StairsBlock(_.upsideDownRedSandstoneStairsFacingSouth, Facing.south, true, woodPickaxe, Items.redSandstoneStairs)); 488 this.register(new StairsBlock(_.upsideDownRedSandstoneStairsFacingNorth, Facing.north, true, woodPickaxe, Items.redSandstoneStairs)); 489 this.register(new StairsBlock(_.oakWoodStairsFacingEast, Facing.east, false, woodAxe, Items.oakWoodStairs)); 490 this.register(new StairsBlock(_.oakWoodStairsFacingWest, Facing.west, false, woodAxe, Items.oakWoodStairs)); 491 this.register(new StairsBlock(_.oakWoodStairsFacingSouth, Facing.south, false, woodAxe, Items.oakWoodStairs)); 492 this.register(new StairsBlock(_.oakWoodStairsFacingNorth, Facing.north, false, woodAxe, Items.oakWoodStairs)); 493 this.register(new StairsBlock(_.upsideDownOakWoodStairsFacingEast, Facing.east, true, woodAxe, Items.oakWoodStairs)); 494 this.register(new StairsBlock(_.upsideDownOakWoodStairsFacingWest, Facing.west, true, woodAxe, Items.oakWoodStairs)); 495 this.register(new StairsBlock(_.upsideDownOakWoodStairsFacingSouth, Facing.south, true, woodAxe, Items.oakWoodStairs)); 496 this.register(new StairsBlock(_.upsideDownOakWoodStairsFacingNorth, Facing.north, true, woodAxe, Items.oakWoodStairs)); 497 this.register(new StairsBlock(_.spruceWoodStairsFacingEast, Facing.east, false, woodAxe, Items.spruceWoodStairs)); 498 this.register(new StairsBlock(_.spruceWoodStairsFacingWest, Facing.west, false, woodAxe, Items.spruceWoodStairs)); 499 this.register(new StairsBlock(_.spruceWoodStairsFacingSouth, Facing.south, false, woodAxe, Items.spruceWoodStairs)); 500 this.register(new StairsBlock(_.spruceWoodStairsFacingNorth, Facing.north, false, woodAxe, Items.spruceWoodStairs)); 501 this.register(new StairsBlock(_.upsideDownSpruceWoodStairsFacingEast, Facing.east, true, woodAxe, Items.spruceWoodStairs)); 502 this.register(new StairsBlock(_.upsideDownSpruceWoodStairsFacingWest, Facing.west, true, woodAxe, Items.spruceWoodStairs)); 503 this.register(new StairsBlock(_.upsideDownSpruceWoodStairsFacingSouth, Facing.south, true, woodAxe, Items.spruceWoodStairs)); 504 this.register(new StairsBlock(_.upsideDownSpruceWoodStairsFacingNorth, Facing.north, true, woodAxe, Items.spruceWoodStairs)); 505 this.register(new StairsBlock(_.birchWoodStairsFacingEast, Facing.east, false, woodAxe, Items.birchWoodStairs)); 506 this.register(new StairsBlock(_.birchWoodStairsFacingWest, Facing.west, false, woodAxe, Items.birchWoodStairs)); 507 this.register(new StairsBlock(_.birchWoodStairsFacingSouth, Facing.south, false, woodAxe, Items.birchWoodStairs)); 508 this.register(new StairsBlock(_.birchWoodStairsFacingNorth, Facing.north, false, woodAxe, Items.birchWoodStairs)); 509 this.register(new StairsBlock(_.upsideDownBirchWoodStairsFacingEast, Facing.east, true, woodAxe, Items.birchWoodStairs)); 510 this.register(new StairsBlock(_.upsideDownBirchWoodStairsFacingWest, Facing.west, true, woodAxe, Items.birchWoodStairs)); 511 this.register(new StairsBlock(_.upsideDownBirchWoodStairsFacingSouth, Facing.south, true, woodAxe, Items.birchWoodStairs)); 512 this.register(new StairsBlock(_.upsideDownBirchWoodStairsFacingNorth, Facing.north, true, woodAxe, Items.birchWoodStairs)); 513 this.register(new StairsBlock(_.jungleWoodStairsFacingEast, Facing.east, false, woodAxe, Items.jungleWoodStairs)); 514 this.register(new StairsBlock(_.jungleWoodStairsFacingWest, Facing.west, false, woodAxe, Items.jungleWoodStairs)); 515 this.register(new StairsBlock(_.jungleWoodStairsFacingSouth, Facing.south, false, woodAxe, Items.jungleWoodStairs)); 516 this.register(new StairsBlock(_.jungleWoodStairsFacingNorth, Facing.north, false, woodAxe, Items.jungleWoodStairs)); 517 this.register(new StairsBlock(_.upsideDownJungleWoodStairsFacingEast, Facing.east, true, woodAxe, Items.jungleWoodStairs)); 518 this.register(new StairsBlock(_.upsideDownJungleWoodStairsFacingWest, Facing.west, true, woodAxe, Items.jungleWoodStairs)); 519 this.register(new StairsBlock(_.upsideDownJungleWoodStairsFacingSouth, Facing.south, true, woodAxe, Items.jungleWoodStairs)); 520 this.register(new StairsBlock(_.upsideDownJungleWoodStairsFacingNorth, Facing.north, true, woodAxe, Items.jungleWoodStairs)); 521 this.register(new StairsBlock(_.acaciaWoodStairsFacingEast, Facing.east, false, woodAxe, Items.acaciaWoodStairs)); 522 this.register(new StairsBlock(_.acaciaWoodStairsFacingWest, Facing.west, false, woodAxe, Items.acaciaWoodStairs)); 523 this.register(new StairsBlock(_.acaciaWoodStairsFacingSouth, Facing.south, false, woodAxe, Items.acaciaWoodStairs)); 524 this.register(new StairsBlock(_.acaciaWoodStairsFacingNorth, Facing.north, false, woodAxe, Items.acaciaWoodStairs)); 525 this.register(new StairsBlock(_.upsideDownAcaciaWoodStairsFacingEast, Facing.east, true, woodAxe, Items.acaciaWoodStairs)); 526 this.register(new StairsBlock(_.upsideDownAcaciaWoodStairsFacingWest, Facing.west, true, woodAxe, Items.acaciaWoodStairs)); 527 this.register(new StairsBlock(_.upsideDownAcaciaWoodStairsFacingSouth, Facing.south, true, woodAxe, Items.acaciaWoodStairs)); 528 this.register(new StairsBlock(_.upsideDownAcaciaWoodStairsFacingNorth, Facing.north, true, woodAxe, Items.acaciaWoodStairs)); 529 this.register(new StairsBlock(_.darkOakWoodStairsFacingEast, Facing.east, false, woodAxe, Items.darkOakWoodStairs)); 530 this.register(new StairsBlock(_.darkOakWoodStairsFacingWest, Facing.west, false, woodAxe, Items.darkOakWoodStairs)); 531 this.register(new StairsBlock(_.darkOakWoodStairsFacingSouth, Facing.south, false, woodAxe, Items.darkOakWoodStairs)); 532 this.register(new StairsBlock(_.darkOakWoodStairsFacingNorth, Facing.north, false, woodAxe, Items.darkOakWoodStairs)); 533 this.register(new StairsBlock(_.upsideDownDarkOakWoodStairsFacingEast, Facing.east, true, woodAxe, Items.darkOakWoodStairs)); 534 this.register(new StairsBlock(_.upsideDownDarkOakWoodStairsFacingWest, Facing.west, true, woodAxe, Items.darkOakWoodStairs)); 535 this.register(new StairsBlock(_.upsideDownDarkOakWoodStairsFacingSouth, Facing.south, true, woodAxe, Items.darkOakWoodStairs)); 536 this.register(new StairsBlock(_.upsideDownDarkOakWoodStairsFacingNorth, Facing.north, true, woodAxe, Items.darkOakWoodStairs)); 537 this.register(new MineableBlock(_.bookshelf, woodAxe, Drop(Items.book, 3, 3, Items.bookshelf))); 538 this.register(new MineableBlock(_.obsidian, diamondPickaxe, Drop(Items.obsidian, 1))); 539 this.register(new MineableBlock(_.glowingObsidian, diamondPickaxe, Drop(Items.glowingObsidian, 1))); 540 this.register(new MineableBlock(_.torchFacingEast, MiningTool.init, Drop(Items.torch, 1))); 541 this.register(new MineableBlock(_.torchFacingWest, MiningTool.init, Drop(Items.torch, 1))); 542 this.register(new MineableBlock(_.torchFacingSouth, MiningTool.init, Drop(Items.torch, 1))); 543 this.register(new MineableBlock(_.torchFacingNorth, MiningTool.init, Drop(Items.torch, 1))); 544 this.register(new MineableBlock(_.torchFacingUp, MiningTool.init, Drop(Items.torch, 1))); 545 this.register(new MineableBlock(_.craftingTable, MiningTool(Tools.axe, Tools.all), Drop(Items.craftingTable, 1))); //TODO open window on click 546 this.register(new StageCropBlock(_.seeds0, Blocks.seeds1, [Drop(Items.seeds, 1)])); 547 this.register(new StageCropBlock(_.seeds1, Blocks.seeds2, [Drop(Items.seeds, 1)])); 548 this.register(new StageCropBlock(_.seeds2, Blocks.seeds3, [Drop(Items.seeds, 1)])); 549 this.register(new StageCropBlock(_.seeds3, Blocks.seeds4, [Drop(Items.seeds, 1)])); 550 this.register(new StageCropBlock(_.seeds4, Blocks.seeds5, [Drop(Items.seeds, 1)])); 551 this.register(new StageCropBlock(_.seeds5, Blocks.seeds6, [Drop(Items.seeds, 1)])); 552 this.register(new StageCropBlock(_.seeds6, Blocks.seeds7, [Drop(Items.seeds, 1)])); 553 this.register(new FarmingBlock(_.seeds7, [Drop(Items.seeds, 0, 3), Drop(Items.wheat, 1)])); 554 this.register(new ChanceCropBlock(_.beetroot0, Blocks.beetroot1, [Drop(Items.beetrootSeeds, 1)], 2, 3)); 555 this.register(new ChanceCropBlock(_.beetroot1, Blocks.beetroot2, [Drop(Items.beetrootSeeds, 1)], 2, 3)); 556 this.register(new ChanceCropBlock(_.beetroot2, Blocks.beetroot3, [Drop(Items.beetrootSeeds, 1)], 2, 3)); 557 this.register(new FarmingBlock(_.beetroot3, [Drop(Items.beetroot, 1), Drop(Items.beetrootSeeds, 0, 3)])); 558 this.register(new StageCropBlock(_.carrot0, Blocks.carrot1, [Drop(Items.carrot, 1)])); 559 this.register(new StageCropBlock(_.carrot1, Blocks.carrot2, [Drop(Items.carrot, 1)])); 560 this.register(new StageCropBlock(_.carrot2, Blocks.carrot3, [Drop(Items.carrot, 1)])); 561 this.register(new StageCropBlock(_.carrot3, Blocks.carrot4, [Drop(Items.carrot, 1)])); 562 this.register(new StageCropBlock(_.carrot4, Blocks.carrot5, [Drop(Items.carrot, 1)])); 563 this.register(new StageCropBlock(_.carrot5, Blocks.carrot6, [Drop(Items.carrot, 1)])); 564 this.register(new StageCropBlock(_.carrot6, Blocks.carrot7, [Drop(Items.carrot, 1)])); 565 this.register(new FarmingBlock(_.carrot7, [Drop(Items.carrot, 1, 4)])); 566 this.register(new StageCropBlock(_.potato0, Blocks.potato1, [Drop(Items.potato, 1)])); 567 this.register(new StageCropBlock(_.potato1, Blocks.potato2, [Drop(Items.potato, 1)])); 568 this.register(new StageCropBlock(_.potato2, Blocks.potato3, [Drop(Items.potato, 1)])); 569 this.register(new StageCropBlock(_.potato3, Blocks.potato4, [Drop(Items.potato, 1)])); 570 this.register(new StageCropBlock(_.potato4, Blocks.potato5, [Drop(Items.potato, 1)])); 571 this.register(new StageCropBlock(_.potato5, Blocks.potato6, [Drop(Items.potato, 1)])); 572 this.register(new StageCropBlock(_.potato6, Blocks.potato7, [Drop(Items.potato, 1)])); 573 this.register(new FarmingBlock(_.potato7, [Drop(Items.potato, 1, 4), Drop(Items.poisonousPotato, -49, 1)])); 574 this.register(new StemBlock!StageCropBlock(_.melonStem0, Items.melonSeeds, Blocks.melonStem1)); 575 this.register(new StemBlock!StageCropBlock(_.melonStem1, Items.melonSeeds, Blocks.melonStem2)); 576 this.register(new StemBlock!StageCropBlock(_.melonStem2, Items.melonSeeds, Blocks.melonStem3)); 577 this.register(new StemBlock!StageCropBlock(_.melonStem3, Items.melonSeeds, Blocks.melonStem4)); 578 this.register(new StemBlock!StageCropBlock(_.melonStem4, Items.melonSeeds, Blocks.melonStem5)); 579 this.register(new StemBlock!StageCropBlock(_.melonStem5, Items.melonSeeds, Blocks.melonStem6)); 580 this.register(new StemBlock!StageCropBlock(_.melonStem6, Items.melonSeeds, Blocks.melonStem7)); 581 this.register(new StemBlock!(FruitCropBlock!false)(_.melonStem7, Items.melonSeeds, Blocks.melon)); 582 this.register(new StemBlock!StageCropBlock(_.pumpkinStem0, Items.pumpkinSeeds, Blocks.pumpkinStem1)); 583 this.register(new StemBlock!StageCropBlock(_.pumpkinStem1, Items.pumpkinSeeds, Blocks.pumpkinStem2)); 584 this.register(new StemBlock!StageCropBlock(_.pumpkinStem2, Items.pumpkinSeeds, Blocks.pumpkinStem3)); 585 this.register(new StemBlock!StageCropBlock(_.pumpkinStem3, Items.pumpkinSeeds, Blocks.pumpkinStem4)); 586 this.register(new StemBlock!StageCropBlock(_.pumpkinStem4, Items.pumpkinSeeds, Blocks.pumpkinStem5)); 587 this.register(new StemBlock!StageCropBlock(_.pumpkinStem5, Items.pumpkinSeeds, Blocks.pumpkinStem6)); 588 this.register(new StemBlock!StageCropBlock(_.pumpkinStem6, Items.pumpkinSeeds, Blocks.pumpkinStem7)); 589 this.register(new StemBlock!(FruitCropBlock!true)(_.pumpkinStem7, Items.pumpkinSeeds, cast(block_t[4])Blocks.pumpkin[0..4])); 590 this.register(new SugarCanesBlock(_.sugarCanes0, Blocks.sugarCanes1)); 591 this.register(new SugarCanesBlock(_.sugarCanes1, Blocks.sugarCanes2)); 592 this.register(new SugarCanesBlock(_.sugarCanes2, Blocks.sugarCanes3)); 593 this.register(new SugarCanesBlock(_.sugarCanes3, Blocks.sugarCanes4)); 594 this.register(new SugarCanesBlock(_.sugarCanes4, Blocks.sugarCanes5)); 595 this.register(new SugarCanesBlock(_.sugarCanes5, Blocks.sugarCanes6)); 596 this.register(new SugarCanesBlock(_.sugarCanes6, Blocks.sugarCanes7)); 597 this.register(new SugarCanesBlock(_.sugarCanes7, Blocks.sugarCanes8)); 598 this.register(new SugarCanesBlock(_.sugarCanes8, Blocks.sugarCanes9)); 599 this.register(new SugarCanesBlock(_.sugarCanes9, Blocks.sugarCanes10)); 600 this.register(new SugarCanesBlock(_.sugarCanes10, Blocks.sugarCanes11)); 601 this.register(new SugarCanesBlock(_.sugarCanes11, Blocks.sugarCanes12)); 602 this.register(new SugarCanesBlock(_.sugarCanes12, Blocks.sugarCanes13)); 603 this.register(new SugarCanesBlock(_.sugarCanes13, Blocks.sugarCanes14)); 604 this.register(new SugarCanesBlock(_.sugarCanes14, Blocks.sugarCanes15)); 605 this.register(new SugarCanesBlock(_.sugarCanes15, 0)); 606 this.register(new StageNetherCropBlock(_.netherWart0, Blocks.netherWart1, Drop(Items.netherWart, 1))); 607 this.register(new StageNetherCropBlock(_.netherWart1, Blocks.netherWart2, Drop(Items.netherWart, 1))); 608 this.register(new StageNetherCropBlock(_.netherWart2, Blocks.netherWart3, Drop(Items.netherWart, 1))); 609 this.register(new NetherCropBlock(_.netherWart3, Drop(Items.netherWart, 1, 4, 0))); //TODO +1 with fortune 610 this.register(new MineableBlock(_.stonecutter, woodPickaxe, Drop(Items.stonecutter, 1))); 611 this.register(new GravityBlock(_.snowLayer0, MiningTool(Tools.shovel, Tools.wood), Drop(Items.snowball, 2))); 612 this.register(new GravityBlock(_.snowLayer1, MiningTool(Tools.shovel, Tools.wood), Drop(Items.snowball, 3))); 613 this.register(new GravityBlock(_.snowLayer2, MiningTool(Tools.shovel, Tools.wood), Drop(Items.snowball, 4))); 614 this.register(new GravityBlock(_.snowLayer3, MiningTool(Tools.shovel, Tools.wood), Drop(Items.snowball, 5))); 615 this.register(new GravityBlock(_.snowLayer4, MiningTool(Tools.shovel, Tools.wood), Drop(Items.snowball, 6))); 616 this.register(new GravityBlock(_.snowLayer5, MiningTool(Tools.shovel, Tools.wood), Drop(Items.snowball, 7))); 617 this.register(new GravityBlock(_.snowLayer6, MiningTool(Tools.shovel, Tools.wood), Drop(Items.snowball, 8))); 618 this.register(new GravityBlock(_.snowLayer7, MiningTool(Tools.shovel, Tools.wood), Drop(Items.snowball, 9))); 619 this.register(new MineableBlock(_.snow, MiningTool(Tools.shovel, Tools.wood), Drop(Items.snowball, 4, 4, Items.snowBlock))); 620 this.register(new CactusBlock(_.cactus0, Blocks.cactus1)); 621 this.register(new CactusBlock(_.cactus1, Blocks.cactus2)); 622 this.register(new CactusBlock(_.cactus2, Blocks.cactus3)); 623 this.register(new CactusBlock(_.cactus3, Blocks.cactus4)); 624 this.register(new CactusBlock(_.cactus4, Blocks.cactus5)); 625 this.register(new CactusBlock(_.cactus5, Blocks.cactus6)); 626 this.register(new CactusBlock(_.cactus6, Blocks.cactus7)); 627 this.register(new CactusBlock(_.cactus7, Blocks.cactus8)); 628 this.register(new CactusBlock(_.cactus8, Blocks.cactus9)); 629 this.register(new CactusBlock(_.cactus9, Blocks.cactus10)); 630 this.register(new CactusBlock(_.cactus10, Blocks.cactus11)); 631 this.register(new CactusBlock(_.cactus11, Blocks.cactus12)); 632 this.register(new CactusBlock(_.cactus12, Blocks.cactus13)); 633 this.register(new CactusBlock(_.cactus13, Blocks.cactus14)); 634 this.register(new CactusBlock(_.cactus14, Blocks.cactus15)); 635 this.register(new CactusBlock(_.cactus15, 0)); 636 this.register(new MineableBlock(_.clay, MiningTool(false, Tools.shovel, Tools.wood), Drop(Items.clay, 4, 4, Items.clayBlock))); 637 this.register(new MineableBlock(_.hardenedClay, woodPickaxe, Drop(Items.hardenedClay, 1))); 638 this.register(new MineableBlock(_.whiteStainedClay, woodPickaxe, Drop(Items.whiteStainedClay, 1))); 639 this.register(new MineableBlock(_.orangeStainedClay, woodPickaxe, Drop(Items.orangeStainedClay, 1))); 640 this.register(new MineableBlock(_.magentaStainedClay, woodPickaxe, Drop(Items.magentaStainedClay, 1))); 641 this.register(new MineableBlock(_.lightBlueStainedClay, woodPickaxe, Drop(Items.lightBlueStainedClay, 1))); 642 this.register(new MineableBlock(_.yellowStainedClay, woodPickaxe, Drop(Items.yellowStainedClay, 1))); 643 this.register(new MineableBlock(_.limeStainedClay, woodPickaxe, Drop(Items.limeStainedClay, 1))); 644 this.register(new MineableBlock(_.pinkStainedClay, woodPickaxe, Drop(Items.pinkStainedClay, 1))); 645 this.register(new MineableBlock(_.grayStainedClay, woodPickaxe, Drop(Items.grayStainedClay, 1))); 646 this.register(new MineableBlock(_.lightGrayStainedClay, woodPickaxe, Drop(Items.lightGrayStainedClay, 1))); 647 this.register(new MineableBlock(_.cyanStainedClay, woodPickaxe, Drop(Items.cyanStainedClay, 1))); 648 this.register(new MineableBlock(_.purpleStainedClay, woodPickaxe, Drop(Items.purpleStainedClay, 1))); 649 this.register(new MineableBlock(_.blueStainedClay, woodPickaxe, Drop(Items.blueStainedClay, 1))); 650 this.register(new MineableBlock(_.brownStainedClay, woodPickaxe, Drop(Items.brownStainedClay, 1))); 651 this.register(new MineableBlock(_.greenStainedClay, woodPickaxe, Drop(Items.greenStainedClay, 1))); 652 this.register(new MineableBlock(_.redStainedClay, woodPickaxe, Drop(Items.redStainedClay, 1))); 653 this.register(new MineableBlock(_.blackStainedClay, woodPickaxe, Drop(Items.blackStainedClay, 1))); 654 this.register(new MineableBlock(_.pumpkinFacingSouth, woodAxe, Drop(Items.pumpkin, 1))); 655 this.register(new MineableBlock(_.pumpkinFacingWest, woodAxe, Drop(Items.pumpkin, 1))); 656 this.register(new MineableBlock(_.pumpkinFacingNorth, woodAxe, Drop(Items.pumpkin, 1))); 657 this.register(new MineableBlock(_.pumpkinFacingEast, woodAxe, Drop(Items.pumpkin, 1))); 658 this.register(new MineableBlock(_.facelessPumpkinFacingSouth, woodAxe, Drop(Items.pumpkin, 1))); 659 this.register(new MineableBlock(_.facelessPumpkinFacingWest, woodAxe, Drop(Items.pumpkin, 1))); 660 this.register(new MineableBlock(_.facelessPumpkinFacingNorth, woodAxe, Drop(Items.pumpkin, 1))); 661 this.register(new MineableBlock(_.facelessPumpkinFacingEast, woodAxe, Drop(Items.pumpkin, 1))); 662 this.register(new MineableBlock(_.jackOLanternFacingSouth, woodAxe, Drop(Items.jackOLantern, 1))); 663 this.register(new MineableBlock(_.jackOLanternFacingWest, woodAxe, Drop(Items.jackOLantern, 1))); 664 this.register(new MineableBlock(_.jackOLanternFacingNorth, woodAxe, Drop(Items.jackOLantern, 1))); 665 this.register(new MineableBlock(_.jackOLanternFacingEast, woodAxe, Drop(Items.jackOLantern, 1))); 666 this.register(new MineableBlock(_.facelessJackOLanternFacingSouth, woodAxe, Drop(Items.jackOLantern, 1))); 667 this.register(new MineableBlock(_.facelessJackOLanternFacingWest, woodAxe, Drop(Items.jackOLantern, 1))); 668 this.register(new MineableBlock(_.facelessJackOLanternFacingNorth, woodAxe, Drop(Items.jackOLantern, 1))); 669 this.register(new MineableBlock(_.facelessJackOLanternFacingEast, woodAxe, Drop(Items.jackOLantern, 1))); 670 this.register(new MineableBlock(_.netherrack, woodPickaxe, Drop(Items.netherrack, 1))); //TODO infinite fire 671 this.register(new MineableBlock(_.soulSand, MiningTool(false, Tools.pickaxe, Tools.wood), Drop(Items.soulSand, 1))); 672 this.register(new MineableBlock(_.glowstone, MiningTool.init, Drop(Items.glowstoneDust, 2, 4, Items.glowstone))); //TODO fortune +1 but max 4 673 this.register(new MineableBlock(_.netherBrick, woodPickaxe, Drop(Items.netherBrick, 1))); 674 this.register(new MineableBlock(_.redNetherBrick, woodPickaxe, Drop(Items.redNetherBrick, 1))); 675 this.register(new CakeBlock(_.cake0, Blocks.cake1)); 676 this.register(new CakeBlock(_.cake1, Blocks.cake2)); 677 this.register(new CakeBlock(_.cake2, Blocks.cake3)); 678 this.register(new CakeBlock(_.cake3, Blocks.cake4)); 679 this.register(new CakeBlock(_.cake4, Blocks.cake5)); 680 this.register(new CakeBlock(_.cake5, Blocks.cake6)); 681 this.register(new CakeBlock(_.cake6, 0)); 682 this.register(new SwitchingBlock!false(_.woodenTrapdoorSouthSide, MiningTool(Tools.axe, Tools.all), Drop(Items.woodenTrapdoor, 1), Blocks.openedWoodenTrapdoorSouthSide)); 683 this.register(new SwitchingBlock!false(_.woodenTrapdoorNorthSide, MiningTool(Tools.axe, Tools.all), Drop(Items.woodenTrapdoor, 1), Blocks.openedWoodenTrapdoorNorthSide)); 684 this.register(new SwitchingBlock!false(_.woodenTrapdoorEastSide, MiningTool(Tools.axe, Tools.all), Drop(Items.woodenTrapdoor, 1), Blocks.openedWoodenTrapdoorEastSide)); 685 this.register(new SwitchingBlock!false(_.woodenTrapdoorWestSide, MiningTool(Tools.axe, Tools.all), Drop(Items.woodenTrapdoor, 1), Blocks.openedWoodenTrapdoorWestSide)); 686 this.register(new SwitchingBlock!false(_.openedWoodenTrapdoorSouthSide, MiningTool(Tools.axe, Tools.all), Drop(Items.woodenTrapdoor, 1), Blocks.woodenTrapdoorSouthSide)); 687 this.register(new SwitchingBlock!false(_.openedWoodenTrapdoorNorthSide, MiningTool(Tools.axe, Tools.all), Drop(Items.woodenTrapdoor, 1), Blocks.woodenTrapdoorNorthSide)); 688 this.register(new SwitchingBlock!false(_.openedWoodenTrapdoorEastSide, MiningTool(Tools.axe, Tools.all), Drop(Items.woodenTrapdoor, 1), Blocks.woodenTrapdoorEastSide)); 689 this.register(new SwitchingBlock!false(_.openedWoodenTrapdoorWestSide, MiningTool(Tools.axe, Tools.all), Drop(Items.woodenTrapdoor, 1), Blocks.woodenTrapdoorWestSide)); 690 this.register(new SwitchingBlock!false(_.topWoodenTrapdoorSouthSide, MiningTool(Tools.axe, Tools.all), Drop(Items.woodenTrapdoor, 1), Blocks.openedTopWoodenTrapdoorSouthSide)); 691 this.register(new SwitchingBlock!false(_.topWoodenTrapdoorNorthSide, MiningTool(Tools.axe, Tools.all), Drop(Items.woodenTrapdoor, 1), Blocks.openedTopWoodenTrapdoorNorthSide)); 692 this.register(new SwitchingBlock!false(_.topWoodenTrapdoorEastSide, MiningTool(Tools.axe, Tools.all), Drop(Items.woodenTrapdoor, 1), Blocks.openedTopWoodenTrapdoorEastSide)); 693 this.register(new SwitchingBlock!false(_.topWoodenTrapdoorWestSide, MiningTool(Tools.axe, Tools.all), Drop(Items.woodenTrapdoor, 1), Blocks.openedTopWoodenTrapdoorWestSide)); 694 this.register(new SwitchingBlock!false(_.openedTopWoodenTrapdoorSouthSide, MiningTool(Tools.axe, Tools.all), Drop(Items.woodenTrapdoor, 1), Blocks.topWoodenTrapdoorSouthSide)); 695 this.register(new SwitchingBlock!false(_.openedTopWoodenTrapdoorNorthSide, MiningTool(Tools.axe, Tools.all), Drop(Items.woodenTrapdoor, 1), Blocks.topWoodenTrapdoorNorthSide)); 696 this.register(new SwitchingBlock!false(_.openedTopWoodenTrapdoorEastSide, MiningTool(Tools.axe, Tools.all), Drop(Items.woodenTrapdoor, 1), Blocks.topWoodenTrapdoorEastSide)); 697 this.register(new SwitchingBlock!false(_.openedTopWoodenTrapdoorWestSide, MiningTool(Tools.axe, Tools.all), Drop(Items.woodenTrapdoor, 1), Blocks.topWoodenTrapdoorWestSide)); 698 this.register(new SwitchingBlock!true(_.ironTrapdoorSouthSide, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.ironTrapdoor, 1), Blocks.openedIronTrapdoorSouthSide)); 699 this.register(new SwitchingBlock!true(_.ironTrapdoorNorthSide, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.ironTrapdoor, 1), Blocks.openedIronTrapdoorNorthSide)); 700 this.register(new SwitchingBlock!true(_.ironTrapdoorEastSide, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.ironTrapdoor, 1), Blocks.openedIronTrapdoorEastSide)); 701 this.register(new SwitchingBlock!true(_.ironTrapdoorWestSide, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.ironTrapdoor, 1), Blocks.openedIronTrapdoorWestSide)); 702 this.register(new SwitchingBlock!true(_.openedIronTrapdoorSouthSide, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.ironTrapdoor, 1), Blocks.ironTrapdoorSouthSide)); 703 this.register(new SwitchingBlock!true(_.openedIronTrapdoorNorthSide, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.ironTrapdoor, 1), Blocks.ironTrapdoorNorthSide)); 704 this.register(new SwitchingBlock!true(_.openedIronTrapdoorEastSide, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.ironTrapdoor, 1), Blocks.ironTrapdoorEastSide)); 705 this.register(new SwitchingBlock!true(_.openedIronTrapdoorWestSide, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.ironTrapdoor, 1), Blocks.ironTrapdoorWestSide)); 706 this.register(new SwitchingBlock!true(_.topIronTrapdoorSouthSide, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.ironTrapdoor, 1), Blocks.openedTopIronTrapdoorSouthSide)); 707 this.register(new SwitchingBlock!true(_.topIronTrapdoorNorthSide, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.ironTrapdoor, 1), Blocks.openedTopIronTrapdoorNorthSide)); 708 this.register(new SwitchingBlock!true(_.topIronTrapdoorEastSide, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.ironTrapdoor, 1), Blocks.openedTopIronTrapdoorEastSide)); 709 this.register(new SwitchingBlock!true(_.topIronTrapdoorWestSide, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.ironTrapdoor, 1), Blocks.openedTopIronTrapdoorWestSide)); 710 this.register(new SwitchingBlock!true(_.openedTopIronTrapdoorSouthSide, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.ironTrapdoor, 1), Blocks.topIronTrapdoorSouthSide)); 711 this.register(new SwitchingBlock!true(_.openedTopIronTrapdoorNorthSide, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.ironTrapdoor, 1), Blocks.topIronTrapdoorNorthSide)); 712 this.register(new SwitchingBlock!true(_.openedTopIronTrapdoorEastSide, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.ironTrapdoor, 1), Blocks.topIronTrapdoorEastSide)); 713 this.register(new SwitchingBlock!true(_.openedTopIronTrapdoorWestSide, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.ironTrapdoor, 1), Blocks.topIronTrapdoorWestSide)); 714 this.register(new MonsterEggBlock(_.stoneMonsterEgg, Blocks.stone)); 715 this.register(new MonsterEggBlock(_.cobblestoneMonsterEgg, Blocks.cobblestone)); 716 this.register(new MonsterEggBlock(_.stoneBrickMonsterEgg, Blocks.stoneBricks)); 717 this.register(new MonsterEggBlock(_.mossyStoneBrickMonsterEgg, Blocks.mossyStoneBricks)); 718 this.register(new MonsterEggBlock(_.crackedStoneBrickMonsterEgg, Blocks.crackedStoneBricks)); 719 this.register(new MonsterEggBlock(_.chiseledStoneBrickMonsterEgg, Blocks.chiseledStoneBricks)); 720 this.register(new MineableBlock(_.brownMushroomPoresEverywhere, MiningTool(Tools.axe, Tools.all), Drop(Items.brownMushroom, 0, 2, Items.brownMushroomBlock))); 721 this.register(new MineableBlock(_.brownMushroomCapTopWestNorth, MiningTool(Tools.axe, Tools.all), Drop(Items.brownMushroom, 0, 2, Items.brownMushroomBlock))); 722 this.register(new MineableBlock(_.brownMushroomCapTopNorth, MiningTool(Tools.axe, Tools.all), Drop(Items.brownMushroom, 0, 2, Items.brownMushroomBlock))); 723 this.register(new MineableBlock(_.brownMushroomCapTopNorthEast, MiningTool(Tools.axe, Tools.all), Drop(Items.brownMushroom, 0, 2, Items.brownMushroomBlock))); 724 this.register(new MineableBlock(_.brownMushroomCapTopWest, MiningTool(Tools.axe, Tools.all), Drop(Items.brownMushroom, 0, 2, Items.brownMushroomBlock))); 725 this.register(new MineableBlock(_.brownMushroomCapTop, MiningTool(Tools.axe, Tools.all), Drop(Items.brownMushroom, 0, 2, Items.brownMushroomBlock))); 726 this.register(new MineableBlock(_.brownMushroomCapTopEast, MiningTool(Tools.axe, Tools.all), Drop(Items.brownMushroom, 0, 2, Items.brownMushroomBlock))); 727 this.register(new MineableBlock(_.brownMushroomCapTopSouthWest, MiningTool(Tools.axe, Tools.all), Drop(Items.brownMushroom, 0, 2, Items.brownMushroomBlock))); 728 this.register(new MineableBlock(_.brownMushroomCapTopSouth, MiningTool(Tools.axe, Tools.all), Drop(Items.brownMushroom, 0, 2, Items.brownMushroomBlock))); 729 this.register(new MineableBlock(_.brownMushroomCapTopEastSouth, MiningTool(Tools.axe, Tools.all), Drop(Items.brownMushroom, 0, 2, Items.brownMushroomBlock))); 730 this.register(new MineableBlock(_.brownMushroomStemEverySide, MiningTool(Tools.axe, Tools.all), Drop(Items.brownMushroom, 0, 2, Items.brownMushroomBlock))); 731 this.register(new MineableBlock(_.brownMushroomCapsEverywhere, MiningTool(Tools.axe, Tools.all), Drop(Items.brownMushroom, 0, 2, Items.brownMushroomBlock))); 732 this.register(new MineableBlock(_.brownMushroomStemsEverywhere, MiningTool(Tools.axe, Tools.all), Drop(Items.brownMushroom, 0, 2, Items.brownMushroomBlock))); 733 this.register(new MineableBlock(_.redMushroomPoresEverywhere, MiningTool(Tools.axe, Tools.all), Drop(Items.redMushroom, 0, 2, Items.redMushroomBlock))); 734 this.register(new MineableBlock(_.redMushroomCapTopWestNorth, MiningTool(Tools.axe, Tools.all), Drop(Items.redMushroom, 0, 2, Items.redMushroomBlock))); 735 this.register(new MineableBlock(_.redMushroomCapTopNorth, MiningTool(Tools.axe, Tools.all), Drop(Items.redMushroom, 0, 2, Items.redMushroomBlock))); 736 this.register(new MineableBlock(_.redMushroomCapTopNorthEast, MiningTool(Tools.axe, Tools.all), Drop(Items.redMushroom, 0, 2, Items.redMushroomBlock))); 737 this.register(new MineableBlock(_.redMushroomCapTopWest, MiningTool(Tools.axe, Tools.all), Drop(Items.redMushroom, 0, 2, Items.redMushroomBlock))); 738 this.register(new MineableBlock(_.redMushroomCapTop, MiningTool(Tools.axe, Tools.all), Drop(Items.redMushroom, 0, 2, Items.redMushroomBlock))); 739 this.register(new MineableBlock(_.redMushroomCapTopEast, MiningTool(Tools.axe, Tools.all), Drop(Items.redMushroom, 0, 2, Items.redMushroomBlock))); 740 this.register(new MineableBlock(_.redMushroomCapTopSouthWest, MiningTool(Tools.axe, Tools.all), Drop(Items.redMushroom, 0, 2, Items.redMushroomBlock))); 741 this.register(new MineableBlock(_.redMushroomCapTopSouth, MiningTool(Tools.axe, Tools.all), Drop(Items.redMushroom, 0, 2, Items.redMushroomBlock))); 742 this.register(new MineableBlock(_.redMushroomCapTopEastSouth, MiningTool(Tools.axe, Tools.all), Drop(Items.redMushroom, 0, 2, Items.redMushroomBlock))); 743 this.register(new MineableBlock(_.redMushroomStemEverySide, MiningTool(Tools.axe, Tools.all), Drop(Items.redMushroom, 0, 2, Items.redMushroomBlock))); 744 this.register(new MineableBlock(_.redMushroomCapsEverywhere, MiningTool(Tools.axe, Tools.all), Drop(Items.redMushroom, 0, 2, Items.redMushroomBlock))); 745 this.register(new MineableBlock(_.redMushroomStemsEverywhere, MiningTool(Tools.axe, Tools.all), Drop(Items.redMushroom, 0, 2, Items.redMushroomBlock))); 746 this.register(new MineableBlock(_.ironBars, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.ironBars, 1))); 747 this.register(new MineableBlock(_.melon, MiningTool(Tools.axe | Tools.sword, Tools.all), Drop(Items.melon, 3, 7, Items.melonBlock))); 748 this.register(new InactiveEndPortalBlock(_.endPortalFrameSouth, Blocks.activeEndPortalFrameSouth, Facing.south)); 749 this.register(new InactiveEndPortalBlock(_.endPortalFrameWest, Blocks.activeEndPortalFrameWest, Facing.west)); 750 this.register(new InactiveEndPortalBlock(_.endPortalFrameNorth, Blocks.activeEndPortalFrameNorth, Facing.north)); 751 this.register(new InactiveEndPortalBlock(_.endPortalFrameEast, Blocks.activeEndPortalFrameEast, Facing.east)); 752 this.register(new Block(_.activeEndPortalFrameSouth)); 753 this.register(new Block(_.activeEndPortalFrameWest)); 754 this.register(new Block(_.activeEndPortalFrameNorth)); 755 this.register(new Block(_.activeEndPortalFrameEast)); 756 this.register(new MineableBlock(_.endStone, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.endStone, 1))); 757 this.register(new MineableBlock(_.endStoneBricks, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.endStoneBricks, 1))); 758 this.register(new Block(_.endPortal)); //TODO teleport to end dimension 759 this.register(new GrowingBeansBlock(_.cocoaNorth0, MiningTool(Tools.axe, Tools.wood), Drop(Items.cocoaBeans, 1), Facing.south, Blocks.cocoaNorth1)); 760 this.register(new GrowingBeansBlock(_.cocoaEast0, MiningTool(Tools.axe, Tools.wood), Drop(Items.cocoaBeans, 1), Facing.west, Blocks.cocoaEast1)); 761 this.register(new GrowingBeansBlock(_.cocoaSouth0, MiningTool(Tools.axe, Tools.wood), Drop(Items.cocoaBeans, 1), Facing.north, Blocks.cocoaSouth1)); 762 this.register(new GrowingBeansBlock(_.cocoaWest0, MiningTool(Tools.axe, Tools.wood), Drop(Items.cocoaBeans, 1), Facing.east, Blocks.cocoaWest1)); 763 this.register(new GrowingBeansBlock(_.cocoaNorth1, MiningTool(Tools.axe, Tools.wood), Drop(Items.cocoaBeans, 1), Facing.south, Blocks.cocoaNorth2)); 764 this.register(new GrowingBeansBlock(_.cocoaEast1, MiningTool(Tools.axe, Tools.wood), Drop(Items.cocoaBeans, 1), Facing.west, Blocks.cocoaEast2)); 765 this.register(new GrowingBeansBlock(_.cocoaSouth1, MiningTool(Tools.axe, Tools.wood), Drop(Items.cocoaBeans, 1), Facing.north, Blocks.cocoaSouth2)); 766 this.register(new GrowingBeansBlock(_.cocoaWest1, MiningTool(Tools.axe, Tools.wood), Drop(Items.cocoaBeans, 1), Facing.east, Blocks.cocoaWest2)); 767 this.register(new BeansBlock(_.cocoaNorth2, MiningTool(Tools.axe, Tools.wood), Drop(Items.cocoaBeans, 2, 3), Facing.south)); 768 this.register(new BeansBlock(_.cocoaEast2, MiningTool(Tools.axe, Tools.wood), Drop(Items.cocoaBeans, 2, 3), Facing.west)); 769 this.register(new BeansBlock(_.cocoaSouth2, MiningTool(Tools.axe, Tools.wood), Drop(Items.cocoaBeans, 2, 3), Facing.north)); 770 this.register(new BeansBlock(_.cocoaWest2, MiningTool(Tools.axe, Tools.wood), Drop(Items.cocoaBeans, 2, 3), Facing.east)); 771 this.register(new MineableBlock(_.lilyPad, MiningTool.init, Drop(Items.lilyPad, 1))); //TODO drop when the block underneath is not water nor ice 772 this.register(new MineableBlock(_.quartzBlock, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.quartzBlock, 1))); 773 this.register(new MineableBlock(_.chiseledQuartzBlock, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.chiseledQuartzBlock, 1))); 774 this.register(new MineableBlock(_.pillarQuartzBlockVertical, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.pillarQuartzBlock, 1))); 775 this.register(new MineableBlock(_.pillarQuartzBlockNorthSouth, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.pillarQuartzBlock, 1))); 776 this.register(new MineableBlock(_.pillarQuartzBlockEastWest, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.pillarQuartzBlock, 1))); 777 this.register(new Block(_.barrier)); 778 this.register(new MineableBlock(_.prismarine, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.prismarine, 1))); 779 this.register(new MineableBlock(_.prismarineBricks, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.prismarineBricks, 1))); 780 this.register(new MineableBlock(_.darkPrismarine, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.darkPrismarine, 1))); 781 this.register(new MineableBlock(_.seaLantern, MiningTool.init, Drop(Items.prismarineCrystals, 2, 3, Items.seaLantern))); //TODO fortune 782 this.register(new MineableBlock(_.hayBaleVertical, MiningTool.init, Drop(Items.hayBale, 1))); 783 this.register(new MineableBlock(_.hayBaleEastWest, MiningTool.init, Drop(Items.hayBale, 1))); 784 this.register(new MineableBlock(_.hayBaleNorthSouth, MiningTool.init, Drop(Items.hayBale, 1))); 785 this.register(new MineableBlock(_.endRodFacingDown, MiningTool.init, Drop(Items.endRod, 1))); 786 this.register(new MineableBlock(_.endRodFacingUp, MiningTool.init, Drop(Items.endRod, 1))); 787 this.register(new MineableBlock(_.endRodFacingNorth, MiningTool.init, Drop(Items.endRod, 1))); 788 this.register(new MineableBlock(_.endRodFacingSouth, MiningTool.init, Drop(Items.endRod, 1))); 789 this.register(new MineableBlock(_.endRodFacingWest, MiningTool.init, Drop(Items.endRod, 1))); 790 this.register(new MineableBlock(_.endRodFacingEast, MiningTool.init, Drop(Items.endRod, 1))); 791 this.register(new MineableBlock(_.purpurBlock, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.purpurBlock, 1))); 792 this.register(new MineableBlock(_.purpurPillarVertical, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.purpurPillar, 1))); 793 this.register(new MineableBlock(_.purpurPillarEastWest, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.purpurPillar, 1))); 794 this.register(new MineableBlock(_.purpurPillarNorthSouth, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.purpurPillar, 1))); 795 this.register(new MineableBlock(_.netherWartBlock, MiningTool.init, Drop(Items.netherWartBlock, 1))); 796 this.register(new MineableBlock(_.boneBlockVertical, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.boneBlock, 1))); 797 this.register(new MineableBlock(_.boneBlockEastWest, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.boneBlock, 1))); 798 this.register(new MineableBlock(_.boneBlockNorthSouth, MiningTool(Tools.pickaxe, Tools.wood), Drop(Items.boneBlock, 1))); 799 this.register(new Block(_.structureVoid)); 800 this.register(new Block(_.updateBlock)); 801 this.register(new Block(_.ateupdBlock)); 802 803 } 804 805 } 806 807 } 808 809 interface Blocks { 810 811 mixin((){ 812 string ret; 813 foreach(member ; __traits(allMembers, _)) { 814 ret ~= "enum " ~ member ~ "=_." ~ member ~ ".id;"; 815 } 816 return ret; 817 }()); 818 819 // dirt and related 820 enum block_t[] farmland = [farmland0, farmland1, farmland2, farmland3, farmland4, farmland5, farmland6, farmland7]; 821 enum block_t[] dirts = cast(block_t[])[dirt, grass, podzol, coarseDirt] ~ farmland; 822 823 // wooden logs 824 enum block_t[] oakWood = [oakWoodUpDown, oakWoodEastWest, oakWoodNorthSouth, oakWoodBark]; 825 enum block_t[] spruceWood = [spruceWoodUpDown, spruceWoodEastWest, spruceWoodNorthSouth, spruceWoodBark]; 826 enum block_t[] birchWood = [birchWoodUpDown, birchWoodEastWest, birchWoodNorthSouth, birchWoodBark]; 827 enum block_t[] jungleWood = [jungleWoodUpDown, jungleWoodEastWest, jungleWoodNorthSouth, jungleWoodBark]; 828 enum block_t[] acaciaWood = [acaciaWoodUpDown, acaciaWoodEastWest, acaciaWoodNorthSouth, acaciaWoodBark]; 829 enum block_t[] darkOakWood = [darkOakWoodUpDown, darkOakWoodEastWest, darkOakWoodNorthSouth, darkOakWoodBark]; 830 enum block_t[] wood = oakWood ~ spruceWood ~ birchWood ~ jungleWood ~ acaciaWood ~ darkOakWood; 831 832 // wooden logs (in another order) 833 enum block_t[] woodUpDown = [oakWoodUpDown, spruceWoodUpDown, birchWoodUpDown, jungleWoodUpDown, acaciaWoodUpDown, darkOakWoodUpDown]; 834 enum block_t[] woodEastWest = [oakWoodEastWest, spruceWoodEastWest, birchWoodEastWest, jungleWoodEastWest, acaciaWoodEastWest, darkOakWoodEastWest]; 835 enum block_t[] woodNorthSouth = [oakWoodNorthSouth, spruceWoodNorthSouth, birchWoodNorthSouth, jungleWoodNorthSouth, acaciaWoodNorthSouth, darkOakWoodNorthSouth]; 836 enum block_t[] woodBark = [oakWoodBark, spruceWoodBark, birchWoodBark, jungleWoodBark, acaciaWoodBark, darkOakWoodBark]; 837 838 // planks 839 840 // leaves 841 enum block_t[] oakLeaves = [oakLeavesDecay, oakLeavesNoDecay, oakLeavesCheckDecay, oakLeavesNoDecayCheckDecay]; 842 enum block_t[] spruceLeaves = [spruceLeavesDecay, spruceLeavesNoDecay, spruceLeavesCheckDecay, spruceLeavesNoDecayCheckDecay]; 843 enum block_t[] birchLeaves = [birchLeavesDecay, birchLeavesNoDecay, birchLeavesCheckDecay, birchLeavesNoDecayCheckDecay]; 844 enum block_t[] jungleLeaves = [jungleLeavesDecay, jungleLeavesNoDecay, jungleLeavesCheckDecay, jungleLeavesNoDecayCheckDecay]; 845 enum block_t[] acaciaLeaves = [acaciaLeavesDecay, acaciaLeavesNoDecay, acaciaLeavesCheckDecay, acaciaLeavesNoDecayCheckDecay]; 846 enum block_t[] darkOakLeaves = [darkOakLeavesDecay, darkOakLeavesNoDecay, darkOakLeavesCheckDecay, darkOakLeavesNoDecayCheckDecay]; 847 enum block_t[] leaves = oakLeaves ~ spruceLeaves ~ birchLeaves ~ jungleLeaves ~ acaciaLeaves ~ darkOakLeaves; 848 849 // leaves (in another order) 850 enum block_t[] leavesDecay = [oakLeavesDecay, spruceLeavesDecay, birchLeavesDecay, jungleLeavesDecay, acaciaLeavesDecay, darkOakLeavesDecay]; 851 enum block_t[] leavesNoDecay = [oakLeavesNoDecay, spruceLeavesNoDecay, birchLeavesNoDecay, jungleLeavesNoDecay, acaciaLeavesNoDecay, darkOakLeavesNoDecay]; 852 enum block_t[] leavesCheckDecay = [oakLeavesCheckDecay, spruceLeavesCheckDecay, birchLeavesCheckDecay, jungleLeavesCheckDecay, acaciaLeavesCheckDecay, darkOakLeavesCheckDecay]; 853 enum block_t[] leavesNoDecayCheckDecay = [oakLeavesNoDecayCheckDecay, spruceLeavesNoDecayCheckDecay, birchLeavesNoDecayCheckDecay, jungleLeavesNoDecayCheckDecay, acaciaLeavesNoDecayCheckDecay, darkOakLeavesNoDecayCheckDecay]; 854 855 // water 856 enum block_t[] flowingWater = [flowingWater0, flowingWater1, flowingWater2, flowingWater3, flowingWater4, flowingWater5, flowingWater6, flowingWater7]; 857 enum block_t[] flowingWaterFalling = [flowingWaterFalling0, flowingWaterFalling1, flowingWaterFalling2, flowingWaterFalling3, flowingWaterFalling4, flowingWaterFalling5, flowingWaterFalling6, flowingWaterFalling7]; 858 enum block_t[] stillWater = [stillWater0, stillWater1, stillWater2, stillWater3, stillWater4, stillWater5, stillWater6, stillWater7]; 859 enum block_t[] stillWaterFalling = [stillWaterFalling0, stillWaterFalling1, stillWaterFalling2, stillWaterFalling3, stillWaterFalling4, stillWaterFalling5, stillWaterFalling6, stillWaterFalling7]; 860 enum block_t[] water = flowingWater ~ flowingWaterFalling ~ stillWater ~ stillWaterFalling; 861 862 // lava 863 enum block_t[] flowingLava = [flowingLava0, flowingLava1, flowingLava2, flowingLava3, flowingLava4, flowingLava5, flowingLava6, flowingLava7]; 864 enum block_t[] flowingLavaFalling = [flowingLavaFalling0, flowingLavaFalling1, flowingLavaFalling2, flowingLavaFalling3, flowingLavaFalling4, flowingLavaFalling5, flowingLavaFalling6, flowingLavaFalling7]; 865 enum block_t[] stillLava = [stillLava0, stillLava1, stillLava2, stillLava3, stillLava4, stillLava5, stillLava6, stillLava7]; 866 enum block_t[] stillLavaFalling = [stillLavaFalling0, stillLavaFalling1, stillLavaFalling2, stillLavaFalling3, stillLavaFalling4, stillLavaFalling5, stillLavaFalling6, stillLavaFalling7]; 867 enum block_t[] lava = flowingLava ~ flowingLavaFalling ~ stillLava ~ stillLavaFalling; 868 869 // stairs 870 enum block_t[] cobblestoneStairs = [cobblestoneStairsFacingEast, cobblestoneStairsFacingWest, cobblestoneStairsFacingSouth, cobblestoneStairsFacingNorth, upsideDownCobblestoneStairsFacingEast, upsideDownCobblestoneStairsFacingWest, upsideDownCobblestoneStairsFacingSouth, upsideDownCobblestoneStairsFacingNorth]; 871 enum block_t[] brickStairs = [brickStairsFacingEast, brickStairsFacingWest, brickStairsFacingSouth, brickStairsFacingNorth, upsideDownBrickStairsFacingEast, upsideDownBrickStairsFacingWest, upsideDownBrickStairsFacingSouth, upsideDownBrickStairsFacingNorth]; 872 enum block_t[] netherStairs = [netherBrickStairsFacingEast, netherBrickStairsFacingWest, netherBrickStairsFacingSouth, netherBrickStairsFacingNorth, upsideDownNetherBrickStairsFacingEast, upsideDownNetherBrickStairsFacingWest, upsideDownNetherBrickStairsFacingSouth, upsideDownNetherBrickStairsFacingNorth]; 873 enum block_t[] stoneBrickStairs = [stoneBrickStairsFacingEast, stoneBrickStairsFacingWest, stoneBrickStairsFacingSouth, stoneBrickStairsFacingNorth, upsideDownStoneBrickStairsFacingEast, upsideDownStoneBrickStairsFacingWest, upsideDownStoneBrickStairsFacingSouth, upsideDownStoneBrickStairsFacingNorth]; 874 enum block_t[] purpurStairs = [purpurStairsFacingEast, purpurStairsFacingWest, purpurStairsFacingSouth, purpurStairsFacingNorth, upsideDownPurpurStairsFacingEast, upsideDownPurpurStairsFacingWest, upsideDownPurpurStairsFacingSouth, upsideDownPurpurStairsFacingNorth]; 875 enum block_t[] quartzStairs = [quartzStairsFacingEast, quartzStairsFacingWest, quartzStairsFacingSouth, quartzStairsFacingNorth, upsideDownQuartzStairsFacingEast, upsideDownQuartzStairsFacingWest, upsideDownQuartzStairsFacingSouth, upsideDownQuartzStairsFacingNorth]; 876 enum block_t[] sandstoneStairs = [sandstoneStairsFacingEast, sandstoneStairsFacingWest, sandstoneStairsFacingSouth, sandstoneStairsFacingNorth, upsideDownSandstoneStairsFacingEast, upsideDownSandstoneStairsFacingWest, upsideDownSandstoneStairsFacingSouth, upsideDownSandstoneStairsFacingNorth]; 877 enum block_t[] redSandstoneStairs = [redSandstoneStairsFacingEast, redSandstoneStairsFacingWest, redSandstoneStairsFacingSouth, redSandstoneStairsFacingNorth, upsideDownRedSandstoneStairsFacingEast, upsideDownRedSandstoneStairsFacingWest, upsideDownRedSandstoneStairsFacingSouth, upsideDownRedSandstoneStairsFacingNorth]; 878 enum block_t[] oakWoodStairs = [oakWoodStairsFacingEast, oakWoodStairsFacingWest, oakWoodStairsFacingSouth, oakWoodStairsFacingNorth, upsideDownOakWoodStairsFacingEast, upsideDownOakWoodStairsFacingWest, upsideDownOakWoodStairsFacingSouth, upsideDownOakWoodStairsFacingNorth]; 879 enum block_t[] spruceWoodStairs = [spruceWoodStairsFacingEast, spruceWoodStairsFacingWest, spruceWoodStairsFacingSouth, spruceWoodStairsFacingNorth, upsideDownSpruceWoodStairsFacingEast, upsideDownSpruceWoodStairsFacingWest, upsideDownSpruceWoodStairsFacingSouth, upsideDownSpruceWoodStairsFacingNorth]; 880 enum block_t[] birchWoodStairs = [birchWoodStairsFacingEast, birchWoodStairsFacingWest, birchWoodStairsFacingSouth, birchWoodStairsFacingNorth, upsideDownBirchWoodStairsFacingEast, upsideDownBirchWoodStairsFacingWest, upsideDownBirchWoodStairsFacingSouth, upsideDownBirchWoodStairsFacingNorth]; 881 enum block_t[] jungleWoodStairs = [jungleWoodStairsFacingEast, jungleWoodStairsFacingWest, jungleWoodStairsFacingSouth, jungleWoodStairsFacingNorth, upsideDownJungleWoodStairsFacingEast, upsideDownJungleWoodStairsFacingWest, upsideDownJungleWoodStairsFacingSouth, upsideDownJungleWoodStairsFacingNorth]; 882 enum block_t[] acaciaWoodStairs = [acaciaWoodStairsFacingEast, acaciaWoodStairsFacingWest, acaciaWoodStairsFacingSouth, acaciaWoodStairsFacingNorth, upsideDownAcaciaWoodStairsFacingEast, upsideDownAcaciaWoodStairsFacingWest, upsideDownAcaciaWoodStairsFacingSouth, upsideDownAcaciaWoodStairsFacingNorth]; 883 enum block_t[] darkOakWoodStairs = [darkOakWoodStairsFacingEast, darkOakWoodStairsFacingWest, darkOakWoodStairsFacingSouth, darkOakWoodStairsFacingNorth, upsideDownDarkOakWoodStairsFacingEast, upsideDownDarkOakWoodStairsFacingWest, upsideDownDarkOakWoodStairsFacingSouth, upsideDownDarkOakWoodStairsFacingNorth]; 884 885 // blocks with colours 886 enum block_t[] wool = [whiteWool, orangeWool, magentaWool, lightBlueWool, yellowWool, limeWool, pinkWool, grayWool, lightGrayWool, cyanWool, purpleWool, blueWool, brownWool, greenWool, redWool, blackWool]; 887 enum block_t[] stainedClay = [whiteStainedClay, orangeStainedClay, magentaStainedClay, lightBlueStainedClay, yellowStainedClay, limeStainedClay, pinkStainedClay, grayStainedClay, lightGrayStainedClay, cyanStainedClay, purpleStainedClay, blueStainedClay, brownStainedClay, greenStainedClay, redStainedClay, blackStainedClay]; 888 889 // torches 890 enum block_t[] torch = [torchFacingUp, torchFacingEast, torchFacingWest, torchFacingSouth, torchFacingNorth]; 891 enum block_t[] redstoneTorch = [redstoneTorchFacingUp, redstoneTorchFacingEast, redstoneTorchFacingWest, redstoneTorchFacingSouth, redstoneTorchFacingNorth]; 892 893 // farming 894 enum block_t[] sugarCanes = [sugarCanes0, sugarCanes1, sugarCanes2, sugarCanes3, sugarCanes4, sugarCanes5, sugarCanes6, sugarCanes7, sugarCanes8, sugarCanes9, sugarCanes10, sugarCanes11, sugarCanes12, sugarCanes13, sugarCanes14, sugarCanes15]; 895 enum block_t[] cactus = [cactus0, cactus1, cactus2, cactus3, cactus4, cactus5, cactus6, cactus7, cactus8, cactus9, cactus10, cactus11, cactus12, cactus13, cactus14, cactus15]; 896 897 // products of the earth 898 enum block_t[] pumpkin = [pumpkinFacingSouth, pumpkinFacingWest, pumpkinFacingNorth, pumpkinFacingEast, facelessPumpkinFacingSouth, facelessPumpkinFacingWest, facelessPumpkinFacingNorth, facelessPumpkinFacingEast]; 899 900 // ice 901 enum block_t[] frostedIce = [frostedIce0, frostedIce1, frostedIce2, frostedIce3]; 902 903 // cauldron 904 enum block_t[] cauldron = [cauldronEmpty, cauldronOneSixthFilled, cauldronOneThirdFilled, cauldronThreeSixthFilled, cauldronTwoThirdFilled, cauldronFiveSixthFilled, cauldronFilled]; 905 906 }