Cuberite
A lightweight, fast and extensible game server for Minecraft
BlockHandler.cpp
Go to the documentation of this file.
1 #include "Globals.h"
2 
3 #include "BlockHandler.h"
4 #include "../Item.h"
5 #include "../World.h"
6 #include "../Chunk.h"
7 #include "BlockPluginInterface.h"
8 #include "BlockAir.h"
9 #include "BlockAnvil.h"
10 #include "BlockBanner.h"
11 #include "BlockBed.h"
12 #include "BlockBigFlower.h"
13 #include "BlockBookShelf.h"
14 #include "BlockBrewingStand.h"
15 #include "BlockButton.h"
16 #include "BlockCactus.h"
17 #include "BlockCake.h"
18 #include "BlockCarpet.h"
19 #include "BlockCauldron.h"
20 #include "BlockChest.h"
21 #include "BlockCloth.h"
22 #include "BlockCobWeb.h"
23 #include "BlockCocoaPod.h"
24 #include "BlockCommandBlock.h"
25 #include "BlockComparator.h"
26 #include "BlockConcretePowder.h"
27 #include "BlockCrops.h"
28 #include "BlockDaylightSensor.h"
29 #include "BlockDeadBush.h"
30 #include "BlockDefaultBlock.h"
31 #include "BlockDirt.h"
32 #include "BlockDoor.h"
33 #include "BlockDropSpenser.h"
34 #include "BlockEnchantingTable.h"
35 #include "BlockEndPortalFrame.h"
36 #include "BlockEnderChest.h"
37 #include "BlockEntity.h"
38 #include "BlockFarmland.h"
39 #include "BlockFence.h"
40 #include "BlockFenceGate.h"
41 #include "BlockFire.h"
42 #include "BlockFlower.h"
43 #include "BlockFlowerPot.h"
44 #include "BlockFluid.h"
45 #include "BlockFurnace.h"
46 #include "BlockGlass.h"
47 #include "BlockGlazedTerracotta.h"
48 #include "BlockGlowstone.h"
49 #include "BlockGrass.h"
50 #include "BlockGravel.h"
51 #include "BlockHopper.h"
52 #include "BlockHugeMushroom.h"
53 #include "BlockIce.h"
54 #include "BlockJukebox.h"
55 #include "BlockLadder.h"
56 #include "BlockLeaves.h"
57 #include "BlockLever.h"
58 #include "BlockLilypad.h"
59 #include "BlockMelon.h"
60 #include "BlockMobHead.h"
61 #include "BlockMobSpawner.h"
62 #include "BlockInfested.h"
63 #include "BlockMushroom.h"
64 #include "BlockMycelium.h"
65 #include "BlockNetherWart.h"
66 #include "BlockNetherrack.h"
67 #include "BlockNoteBlock.h"
68 #include "BlockObserver.h"
69 #include "BlockOre.h"
70 #include "BlockPackedIce.h"
71 #include "BlockPiston.h"
72 #include "BlockPlanks.h"
73 #include "BlockPortal.h"
74 #include "BlockPressurePlate.h"
75 #include "BlockPumpkin.h"
76 #include "BlockQuartz.h"
77 #include "BlockRail.h"
78 #include "BlockRedstoneWire.h"
79 #include "BlockRedstoneLamp.h"
80 #include "BlockRedstoneOre.h"
81 #include "BlockRedstoneRepeater.h"
82 #include "BlockSand.h"
83 #include "BlockSapling.h"
84 #include "BlockSeaLantern.h"
85 #include "BlockSideways.h"
86 #include "BlockSignPost.h"
87 #include "BlockSlab.h"
88 #include "BlockSlime.h"
89 #include "BlockSnow.h"
90 #include "BlockSponge.h"
91 #include "BlockStairs.h"
92 #include "BlockStems.h"
93 #include "BlockStone.h"
94 #include "BlockSugarCane.h"
95 #include "BlockTNT.h"
96 #include "BlockTallGrass.h"
97 #include "BlockTorch.h"
98 #include "BlockTrapdoor.h"
99 #include "BlockTripwire.h"
100 #include "BlockTripwireHook.h"
101 #include "BlockVines.h"
102 #include "BlockWallSign.h"
103 #include "BlockWorkbench.h"
104 
105 
106 
107 
108 
109 /*
110 // Tests the meta rotation and mirroring.
111 // Note that the cMetaRotator needs to have its assert paths disabled for this test to work!
112 static class cBlockHandlerRotationTester
113 {
114 public:
115  cBlockHandlerRotationTester(void)
116  {
117  printf("Performing block handlers test...\n");
118  for (BLOCKTYPE Type = 0; Type < E_BLOCK_MAX_TYPE_ID; Type++)
119  {
120  cBlockHandler * Handler = cBlockInfo::GetHandler(Type);
121  if (Handler == nullptr)
122  {
123  printf("nullptr handler for block type %d!\n", Type);
124  continue;
125  }
126  AString BlockName = ItemTypeToString(Type);
127  for (NIBBLETYPE Meta = 0; Meta < 16; Meta++)
128  {
129  // Test the CW / CCW rotations:
130  NIBBLETYPE TestMeta;
131  TestMeta = Handler->MetaRotateCW(Handler->MetaRotateCW(Handler->MetaRotateCW(Handler->MetaRotateCW(Meta))));
132  if (TestMeta != Meta)
133  {
134  // 4 CW rotations should produce no change in the meta
135  printf("Handler for blocktype %d (%s) fails CW 4-rotation test for meta %d: got back %d\n", Type, BlockName.c_str(), Meta, TestMeta);
136  }
137  TestMeta = Handler->MetaRotateCCW(Handler->MetaRotateCCW(Handler->MetaRotateCCW(Handler->MetaRotateCCW(Meta))));
138  if (TestMeta != Meta)
139  {
140  // 4 CCW rotations should produce no change in the meta
141  printf("Handler for blocktype %d (%s) fails CCW 4-rotation test for meta %d: got back %d\n", Type, BlockName.c_str(), Meta, TestMeta);
142  }
143  TestMeta = Handler->MetaRotateCCW(Handler->MetaRotateCW(Meta));
144  if (TestMeta != Meta)
145  {
146  // CCW rotation of a CW rotation should produce no change in the meta
147  printf("Handler for blocktype %d (%s) fails CCW(CW) rotation test for meta %d: got back %d\n", Type, BlockName.c_str(), Meta, TestMeta);
148  }
149  TestMeta = Handler->MetaRotateCW(Handler->MetaRotateCCW(Meta));
150  if (TestMeta != Meta)
151  {
152  // CW rotation of a CCW rotation should produce no change in the meta
153  printf("Handler for blocktype %d (%s) fails CW(CCW) rotation test for meta %d: got back %d\n", Type, BlockName.c_str(), Meta, TestMeta);
154  }
155 
156  // Test the mirroring:
157  TestMeta = Handler->MetaMirrorXY(Handler->MetaMirrorXY(Meta));
158  if (TestMeta != Meta)
159  {
160  // Double-mirroring should produce the same meta:
161  printf("Handler for blocktype %d (%s) fails XY mirror test for meta %d: got back %d\n", Type, BlockName.c_str(), Meta, TestMeta);
162  }
163  TestMeta = Handler->MetaMirrorXZ(Handler->MetaMirrorXZ(Meta));
164  if (TestMeta != Meta)
165  {
166  // Double-mirroring should produce the same meta:
167  printf("Handler for blocktype %d (%s) fails XZ mirror test for meta %d: got back %d\n", Type, BlockName.c_str(), Meta, TestMeta);
168  }
169  TestMeta = Handler->MetaMirrorYZ(Handler->MetaMirrorYZ(Meta));
170  if (TestMeta != Meta)
171  {
172  // Double-mirroring should produce the same meta:
173  printf("Handler for blocktype %d (%s) fails YZ mirror test for meta %d: got back %d\n", Type, BlockName.c_str(), Meta, TestMeta);
174  }
175 
176  // Test mirror-rotating:
177  TestMeta = Handler->MetaRotateCW(Handler->MetaRotateCW(Handler->MetaMirrorXY(Handler->MetaMirrorYZ(Meta))));
178  if (TestMeta != Meta)
179  {
180  // 2 CW rotations should be the same as XY, YZ mirroring:
181  printf("Handler for blocktype %d (%s) fails rotation-mirror test for meta %d: got back %d\n", Type, BlockName.c_str(), Meta, TestMeta);
182  }
183  }
184  } // for Type
185  printf("Block handlers test complete.\n");
186  }
187 } g_BlockHandlerRotationTester;
188 //*/
189 
190 
191 
192 
193 
196 namespace
197 {
198  constexpr cBlockDoorHandler BlockAcaciaDoorHandler (E_BLOCK_ACACIA_DOOR);
199  constexpr cBlockFenceGateHandler BlockAcaciaFenceGateHandler (E_BLOCK_ACACIA_FENCE_GATE);
200  constexpr cBlockFenceHandler BlockAcaciaFenceHandler (E_BLOCK_ACACIA_FENCE);
201  constexpr cBlockStairsHandler BlockAcaciaWoodStairsHandler (E_BLOCK_ACACIA_WOOD_STAIRS);
202  constexpr cBlockRailHandler BlockActivatorRailHandler (E_BLOCK_ACTIVATOR_RAIL);
203  constexpr cBlockComparatorHandler BlockActiveComparatorHandler (E_BLOCK_ACTIVE_COMPARATOR);
204  constexpr cBlockAirHandler BlockAirHandler (E_BLOCK_AIR);
205  constexpr cBlockAnvilHandler BlockAnvilHandler (E_BLOCK_ANVIL);
206  constexpr cDefaultBlockHandler BlockBarrierHandler (E_BLOCK_BARRIER);
207  constexpr cDefaultBlockEntityHandler BlockBeaconHandler (E_BLOCK_BEACON);
208  constexpr cBlockBedHandler BlockBedHandler (E_BLOCK_BED);
209  constexpr cDefaultBlockHandler BlockBedrockHandler (E_BLOCK_BEDROCK);
210  constexpr cBlockCropsHandler<3> BlockBeetrootsHandler (E_BLOCK_BEETROOTS); // 4 stages of growth
211  constexpr cBlockBigFlowerHandler BlockBigFlowerHandler (E_BLOCK_BIG_FLOWER);
212  constexpr cBlockDoorHandler BlockBirchDoorHandler (E_BLOCK_BIRCH_DOOR);
213  constexpr cBlockFenceGateHandler BlockBirchFenceGateHandler (E_BLOCK_BIRCH_FENCE_GATE);
214  constexpr cBlockFenceHandler BlockBirchFenceHandler (E_BLOCK_BIRCH_FENCE);
215  constexpr cBlockStairsHandler BlockBirchWoodStairsHandler (E_BLOCK_BIRCH_WOOD_STAIRS);
216  constexpr cBlockGlazedTerracottaHandler BlockBlackGlazedTerracottaHandler (E_BLOCK_BLACK_GLAZED_TERRACOTTA);
217  constexpr cDefaultBlockHandler BlockBlackShulkerBoxHandler (E_BLOCK_BLACK_SHULKER_BOX);
218  constexpr cBlockGlazedTerracottaHandler BlockBlueGlazedTerracottaHandler (E_BLOCK_BLUE_GLAZED_TERRACOTTA);
219  constexpr cDefaultBlockHandler BlockBlueShulkerBoxHandler (E_BLOCK_BLUE_SHULKER_BOX);
220  constexpr cDefaultBlockHandler BlockBoneBlockHandler (E_BLOCK_BONE_BLOCK);
221  constexpr cBlockBookShelfHandler BlockBookcaseHandler (E_BLOCK_BOOKCASE);
222  constexpr cBlockBrewingStandHandler BlockBrewingStandHandler (E_BLOCK_BREWING_STAND);
223  constexpr cDefaultBlockHandler BlockBricksHandler (E_BLOCK_BRICK);
224  constexpr cBlockStairsHandler BlockBrickStairsHandler (E_BLOCK_BRICK_STAIRS);
225  constexpr cBlockGlazedTerracottaHandler BlockBrownGlazedTerracottaHandler (E_BLOCK_BROWN_GLAZED_TERRACOTTA);
226  constexpr cBlockMushroomHandler BlockBrownMushroomHandler (E_BLOCK_BROWN_MUSHROOM);
227  constexpr cDefaultBlockHandler BlockBrownShulkerBoxHandler (E_BLOCK_BROWN_SHULKER_BOX);
228  constexpr cBlockCactusHandler BlockCactusHandler (E_BLOCK_CACTUS);
229  constexpr cBlockCakeHandler BlockCakeHandler (E_BLOCK_CAKE);
230  constexpr cBlockCarpetHandler BlockCarpetHandler (E_BLOCK_CARPET);
231  constexpr cBlockCropsHandler<7> BlockCarrotsHandler (E_BLOCK_CARROTS); // 8 stages of growth
232  constexpr cBlockCauldronHandler BlockCauldronHandler (E_BLOCK_CAULDRON);
233  constexpr cBlockCommandBlockHandler BlockChainCommandBlockHandler (E_BLOCK_CHAIN_COMMAND_BLOCK);
234  constexpr cBlockChestHandler BlockChestHandler (E_BLOCK_CHEST);
235  constexpr cDefaultBlockHandler BlockChorusFlowerHandler (E_BLOCK_CHORUS_FLOWER);
236  constexpr cDefaultBlockHandler BlockChorusPlantHandler (E_BLOCK_CHORUS_PLANT);
237  constexpr cDefaultOreHandler BlockClayHandler (E_BLOCK_CLAY);
238  constexpr cDefaultBlockHandler BlockCoalBlockHandler (E_BLOCK_BLOCK_OF_COAL);
239  constexpr cDefaultOreHandler BlockCoalOreHandler (E_BLOCK_COAL_ORE);
240  constexpr cDefaultBlockHandler BlockCobblestoneHandler (E_BLOCK_COBBLESTONE);
241  constexpr cBlockStairsHandler BlockCobblestoneStairsHandler (E_BLOCK_COBBLESTONE_STAIRS);
242  constexpr cDefaultBlockHandler BlockCobblestoneWallHandler (E_BLOCK_COBBLESTONE_WALL);
243  constexpr cBlockCobWebHandler BlockCobwebHandler (E_BLOCK_COBWEB);
244  constexpr cBlockCocoaPodHandler BlockCocoaPodHandler (E_BLOCK_COCOA_POD);
245  constexpr cBlockCommandBlockHandler BlockCommandBlockHandler (E_BLOCK_COMMAND_BLOCK);
246  constexpr cDefaultBlockHandler BlockConcreteHandler (E_BLOCK_CONCRETE);
247  constexpr cBlockConcretePowderHandler BlockConcretePowderHandler (E_BLOCK_CONCRETE_POWDER);
248  constexpr cBlockCropsHandler<7> BlockCropsHandler (E_BLOCK_CROPS); // 8 stages of growth
249  constexpr cBlockGlazedTerracottaHandler BlockCyanGlazedTerracottaHandler (E_BLOCK_CYAN_GLAZED_TERRACOTTA);
250  constexpr cDefaultBlockHandler BlockCyanShulkerBoxHandler (E_BLOCK_CYAN_SHULKER_BOX);
251  constexpr cBlockDoorHandler BlockDarkOakDoorHandler (E_BLOCK_DARK_OAK_DOOR);
252  constexpr cBlockFenceGateHandler BlockDarkOakFenceGateHandler (E_BLOCK_DARK_OAK_FENCE_GATE);
253  constexpr cBlockFenceHandler BlockDarkOakFenceHandler (E_BLOCK_DARK_OAK_FENCE);
254  constexpr cBlockStairsHandler BlockDarkOakWoodStairsHandler (E_BLOCK_DARK_OAK_WOOD_STAIRS);
255  constexpr cBlockDaylightSensorHandler BlockDaylightSensorHandler (E_BLOCK_DAYLIGHT_SENSOR);
256  constexpr cBlockDeadBushHandler BlockDeadBushHandler (E_BLOCK_DEAD_BUSH);
257  constexpr cBlockRailHandler BlockDetectorRailHandler (E_BLOCK_DETECTOR_RAIL);
258  constexpr cDefaultBlockHandler BlockDiamondBlockHandler (E_BLOCK_DIAMOND_BLOCK);
259  constexpr cDefaultOreHandler BlockDiamondOreHandler (E_BLOCK_DIAMOND_ORE);
260  constexpr cBlockDirtHandler BlockDirtHandler (E_BLOCK_DIRT);
261  constexpr cBlockDropSpenserHandler BlockDispenserHandler (E_BLOCK_DISPENSER);
262  constexpr cBlockDoubleSlabHandler BlockDoubleRedSandstoneSlabHandler(E_BLOCK_DOUBLE_RED_SANDSTONE_SLAB);
263  constexpr cBlockDoubleSlabHandler BlockDoubleStoneSlabHandler (E_BLOCK_DOUBLE_STONE_SLAB);
264  constexpr cBlockDoubleSlabHandler BlockDoubleWoodenSlabHandler (E_BLOCK_DOUBLE_WOODEN_SLAB);
265  constexpr cDefaultBlockHandler BlockDragonEggHandler (E_BLOCK_DRAGON_EGG);
266  constexpr cBlockDropSpenserHandler BlockDropperHandler (E_BLOCK_DROPPER);
267  constexpr cDefaultBlockHandler BlockEmeraldBlockHandler (E_BLOCK_EMERALD_BLOCK);
268  constexpr cDefaultOreHandler BlockEmeraldOreHandler (E_BLOCK_EMERALD_ORE);
269  constexpr cBlockEnchantingTableHandler BlockEnchantingTableHandler (E_BLOCK_ENCHANTMENT_TABLE);
270  constexpr cDefaultBlockHandler BlockEndBricksHandler (E_BLOCK_END_BRICKS);
271  constexpr cBlockEnderChestHandler BlockEnderChestHandler (E_BLOCK_ENDER_CHEST);
272  constexpr cDefaultBlockHandler BlockEndGatewayHandler (E_BLOCK_END_GATEWAY);
273  constexpr cBlockEndPortalFrameHandler BlockEndPortalFrameHandler (E_BLOCK_END_PORTAL_FRAME);
274  constexpr cDefaultBlockHandler BlockEndPortalHandler (E_BLOCK_END_PORTAL);
275  constexpr cDefaultBlockHandler BlockEndRodHandler (E_BLOCK_END_ROD);
276  constexpr cDefaultBlockHandler BlockEndStoneHandler (E_BLOCK_END_STONE);
277  constexpr cBlockFarmlandHandler BlockFarmlandHandler (E_BLOCK_FARMLAND);
278  constexpr cBlockFenceHandler BlockFenceHandler (E_BLOCK_FENCE);
279  constexpr cBlockFireHandler BlockFireHandler (E_BLOCK_FIRE);
280  constexpr cBlockFlowerPotHandler BlockFlowerPotHandler (E_BLOCK_FLOWER_POT);
281  constexpr cBlockIceHandler BlockFrostedIceHandler (E_BLOCK_FROSTED_ICE);
282  constexpr cBlockFurnaceHandler BlockFurnaceHandler (E_BLOCK_FURNACE);
283  constexpr cBlockGlassHandler BlockGlassHandler (E_BLOCK_GLASS);
284  constexpr cBlockGlassHandler BlockGlassPaneHandler (E_BLOCK_GLASS_PANE);
285  constexpr cBlockGlowstoneHandler BlockGlowstoneHandler (E_BLOCK_GLOWSTONE);
286  constexpr cDefaultBlockHandler BlockGoldBlockHandler (E_BLOCK_GOLD_BLOCK);
287  constexpr cDefaultOreHandler BlockGoldOreHandler (E_BLOCK_GOLD_ORE);
288  constexpr cBlockGrassHandler BlockGrassHandler (E_BLOCK_GRASS);
289  constexpr cDefaultBlockHandler BlockGrassPathHandler (E_BLOCK_GRASS_PATH);
290  constexpr cBlockGravelHandler BlockGravelHandler (E_BLOCK_GRAVEL);
291  constexpr cBlockGlazedTerracottaHandler BlockGrayGlazedTerracottaHandler (E_BLOCK_GRAY_GLAZED_TERRACOTTA);
292  constexpr cDefaultBlockHandler BlockGrayShulkerBoxHandler (E_BLOCK_GRAY_SHULKER_BOX);
293  constexpr cBlockGlazedTerracottaHandler BlockGreenGlazedTerracottaHandler (E_BLOCK_GREEN_GLAZED_TERRACOTTA);
294  constexpr cDefaultBlockHandler BlockGreenShulkerBoxHandler (E_BLOCK_GREEN_SHULKER_BOX);
295  constexpr cDefaultBlockHandler BlockHardenedClayHandler (E_BLOCK_HARDENED_CLAY);
296  constexpr cBlockSidewaysHandler BlockHayBaleHandler (E_BLOCK_HAY_BALE);
297  constexpr cBlockMobHeadHandler BlockHeadHandler (E_BLOCK_HEAD);
298  constexpr cBlockPressurePlateHandler BlockHeavyWeightedPressurePHandler(E_BLOCK_HEAVY_WEIGHTED_PRESSURE_PLATE);
299  constexpr cBlockHopperHandler BlockHopperHandler (E_BLOCK_HOPPER);
300  constexpr cBlockHugeMushroomHandler BlockHugeBrownMushroomHandler (E_BLOCK_HUGE_BROWN_MUSHROOM);
301  constexpr cBlockHugeMushroomHandler BlockHugeRedMushroomHandler (E_BLOCK_HUGE_RED_MUSHROOM);
302  constexpr cBlockIceHandler BlockIceHandler (E_BLOCK_ICE);
303  constexpr cBlockComparatorHandler BlockInactiveComparatorHandler (E_BLOCK_INACTIVE_COMPARATOR);
304  constexpr cBlockInfestedHandler BlockInfestedBlockHandler (E_BLOCK_SILVERFISH_EGG);
305  constexpr cDefaultBlockHandler BlockIronBarsHandler (E_BLOCK_IRON_BARS);
306  constexpr cDefaultBlockHandler BlockIronBlockHandler (E_BLOCK_IRON_BLOCK);
307  constexpr cBlockDoorHandler BlockIronDoorHandler (E_BLOCK_IRON_DOOR);
308  constexpr cDefaultOreHandler BlockIronOreHandler (E_BLOCK_IRON_ORE);
309  constexpr cBlockTrapdoorHandler BlockIronTrapdoorHandler (E_BLOCK_IRON_TRAPDOOR);
310  constexpr cBlockPumpkinHandler BlockJackOLanternHandler (E_BLOCK_JACK_O_LANTERN);
311  constexpr cBlockJukeboxHandler BlockJukeboxHandler (E_BLOCK_JUKEBOX);
312  constexpr cBlockDoorHandler BlockJungleDoorHandler (E_BLOCK_JUNGLE_DOOR);
313  constexpr cBlockFenceGateHandler BlockJungleFenceGateHandler (E_BLOCK_JUNGLE_FENCE_GATE);
314  constexpr cBlockFenceHandler BlockJungleFenceHandler (E_BLOCK_JUNGLE_FENCE);
315  constexpr cBlockStairsHandler BlockJungleWoodStairsHandler (E_BLOCK_JUNGLE_WOOD_STAIRS);
316  constexpr cBlockLadderHandler BlockLadderHandler (E_BLOCK_LADDER);
317  constexpr cDefaultBlockHandler BlockLapisBlockHandler (E_BLOCK_LAPIS_BLOCK);
318  constexpr cDefaultOreHandler BlockLapisOreHandler (E_BLOCK_LAPIS_ORE);
319  constexpr cBlockLavaHandler BlockLavaHandler (E_BLOCK_LAVA);
320  constexpr cBlockLeavesHandler BlockLeavesHandler (E_BLOCK_LEAVES);
321  constexpr cBlockLeverHandler BlockLeverHandler (E_BLOCK_LEVER);
322  constexpr cBlockGlazedTerracottaHandler BlockLightBlueGlazedTerracoHandler(E_BLOCK_LIGHT_BLUE_GLAZED_TERRACOTTA);
323  constexpr cDefaultBlockHandler BlockLightBlueShulkerBoxHandler (E_BLOCK_LIGHT_BLUE_SHULKER_BOX);
324  constexpr cBlockGlazedTerracottaHandler BlockLightGrayGlazedTerracoHandler(E_BLOCK_LIGHT_GRAY_GLAZED_TERRACOTTA);
325  constexpr cDefaultBlockHandler BlockLightGrayShulkerBoxHandler (E_BLOCK_LIGHT_GRAY_SHULKER_BOX);
326  constexpr cBlockPressurePlateHandler BlockLightWeightedPressurePHandler(E_BLOCK_LIGHT_WEIGHTED_PRESSURE_PLATE);
327  constexpr cBlockLilypadHandler BlockLilyPadHandler (E_BLOCK_LILY_PAD);
328  constexpr cBlockGlazedTerracottaHandler BlockLimeGlazedTerracottaHandler (E_BLOCK_LIME_GLAZED_TERRACOTTA);
329  constexpr cDefaultBlockHandler BlockLimeShulkerBoxHandler (E_BLOCK_LIME_SHULKER_BOX);
330  constexpr cBlockFurnaceHandler BlockLitFurnaceHandler (E_BLOCK_LIT_FURNACE);
331  constexpr cBlockSidewaysHandler BlockLogHandler (E_BLOCK_LOG);
332  constexpr cBlockGlazedTerracottaHandler BlockMagentaGlazedTerracottHandler(E_BLOCK_MAGENTA_GLAZED_TERRACOTTA);
333  constexpr cDefaultBlockHandler BlockMagentaShulkerBoxHandler (E_BLOCK_MAGENTA_SHULKER_BOX);
334  constexpr cDefaultBlockHandler BlockMagmaHandler (E_BLOCK_MAGMA);
335  constexpr cBlockMelonHandler BlockMelonHandler (E_BLOCK_MELON);
336  constexpr cBlockMelonStemHandler BlockMelonStemHandler (E_BLOCK_MELON_STEM);
337  constexpr cBlockMobSpawnerHandler BlockMobSpawnerHandler (E_BLOCK_MOB_SPAWNER);
338  constexpr cDefaultBlockHandler BlockMossyCobblestoneHandler (E_BLOCK_MOSSY_COBBLESTONE);
339  constexpr cBlockMyceliumHandler BlockMyceliumHandler (E_BLOCK_MYCELIUM);
340  constexpr cBlockFenceHandler BlockNetherBrickFenceHandler (E_BLOCK_NETHER_BRICK_FENCE);
341  constexpr cDefaultBlockHandler BlockNetherBricksHandler (E_BLOCK_NETHER_BRICK);
342  constexpr cBlockStairsHandler BlockNetherBrickStairsHandler (E_BLOCK_NETHER_BRICK_STAIRS);
343  constexpr cBlockPortalHandler BlockNetherPortalHandler (E_BLOCK_NETHER_PORTAL);
344  constexpr cDefaultOreHandler BlockNetherQuartzOreHandler (E_BLOCK_NETHER_QUARTZ_ORE);
345  constexpr cBlockNetherrack BlockNetherrackHandler (E_BLOCK_NETHERRACK);
346  constexpr cDefaultBlockHandler BlockNetherWartBlockHandler (E_BLOCK_NETHER_WART_BLOCK);
347  constexpr cBlockNetherWartHandler BlockNetherWartHandler (E_BLOCK_NETHER_WART);
348  constexpr cBlockLeavesHandler BlockNewLeavesHandler (E_BLOCK_NEW_LEAVES);
349  constexpr cBlockSidewaysHandler BlockNewLogHandler (E_BLOCK_NEW_LOG);
350  constexpr cBlockNoteBlockHandler BlockNoteBlockHandler (E_BLOCK_NOTE_BLOCK);
351  constexpr cBlockDoorHandler BlockOakDoorHandler (E_BLOCK_OAK_DOOR);
352  constexpr cBlockFenceGateHandler BlockOakFenceGateHandler (E_BLOCK_OAK_FENCE_GATE);
353  constexpr cBlockStairsHandler BlockOakWoodStairsHandler (E_BLOCK_OAK_WOOD_STAIRS);
354  constexpr cBlockObserverHandler BlockObserverHandler (E_BLOCK_OBSERVER);
355  constexpr cDefaultBlockHandler BlockObsidianHandler (E_BLOCK_OBSIDIAN);
356  constexpr cBlockGlazedTerracottaHandler BlockOrangeGlazedTerracottaHandler(E_BLOCK_ORANGE_GLAZED_TERRACOTTA);
357  constexpr cDefaultBlockHandler BlockOrangeShulkerBoxHandler (E_BLOCK_ORANGE_SHULKER_BOX);
358  constexpr cBlockPackedIceHandler BlockPackedIceHandler (E_BLOCK_PACKED_ICE);
359  constexpr cBlockGlazedTerracottaHandler BlockPinkGlazedTerracottaHandler (E_BLOCK_PINK_GLAZED_TERRACOTTA);
360  constexpr cDefaultBlockHandler BlockPinkShulkerBoxHandler (E_BLOCK_PINK_SHULKER_BOX);
361  constexpr cBlockPistonHandler BlockPistonHandler (E_BLOCK_PISTON);
362  constexpr cBlockPistonHeadHandler BlockPistonHeadHandler;
363  constexpr cDefaultBlockHandler BlockPistonMovedBlockHandler (E_BLOCK_PISTON_MOVED_BLOCK);
364  constexpr cBlockPlanksHandler BlockPlanksHandler (E_BLOCK_PLANKS);
365  constexpr cBlockCropsHandler<7> BlockPotatoesHandler (E_BLOCK_POTATOES); // 8 stages of growth
366  constexpr cBlockRailHandler BlockPoweredRailHandler (E_BLOCK_POWERED_RAIL);
367  constexpr cDefaultBlockHandler BlockPrismarineBlockHandler (E_BLOCK_PRISMARINE_BLOCK);
368  constexpr cBlockPumpkinHandler BlockPumpkinHandler (E_BLOCK_PUMPKIN);
369  constexpr cBlockPumpkinStemHandler BlockPumpkinStemHandler (E_BLOCK_PUMPKIN_STEM);
370  constexpr cBlockGlazedTerracottaHandler BlockPurpleGlazedTerracottaHandler(E_BLOCK_PURPLE_GLAZED_TERRACOTTA);
371  constexpr cDefaultBlockHandler BlockPurpleShulkerBoxHandler (E_BLOCK_PURPLE_SHULKER_BOX);
372  constexpr cDefaultBlockHandler BlockPurpurBlockHandler (E_BLOCK_PURPUR_BLOCK);
373  constexpr cBlockDoubleSlabHandler BlockPurpurDoubleSlabHandler (E_BLOCK_PURPUR_DOUBLE_SLAB);
374  constexpr cDefaultBlockHandler BlockPurpurPillarHandler (E_BLOCK_PURPUR_PILLAR);
375  constexpr cBlockSlabHandler BlockPurpurSlabHandler (E_BLOCK_PURPUR_SLAB);
376  constexpr cBlockStairsHandler BlockPurpurStairsHandler (E_BLOCK_PURPUR_STAIRS);
377  constexpr cBlockQuartzHandler BlockQuartzBlockHandler (E_BLOCK_QUARTZ_BLOCK);
378  constexpr cBlockStairsHandler BlockQuartzStairsHandler (E_BLOCK_QUARTZ_STAIRS);
379  constexpr cBlockRailHandler BlockRailHandler (E_BLOCK_RAIL);
380  constexpr cBlockGlazedTerracottaHandler BlockRedGlazedTerracottaHandler (E_BLOCK_RED_GLAZED_TERRACOTTA);
381  constexpr cBlockMushroomHandler BlockRedMushroomHandler (E_BLOCK_RED_MUSHROOM);
382  constexpr cDefaultBlockHandler BlockRedNetherBricksHandler (E_BLOCK_RED_NETHER_BRICK);
383  constexpr cBlockFlowerHandler BlockRedRoseHandler (E_BLOCK_RED_ROSE);
384  constexpr cDefaultBlockHandler BlockRedSandstoneHandler (E_BLOCK_RED_SANDSTONE);
385  constexpr cBlockSlabHandler BlockRedSandstoneSlabHandler (E_BLOCK_RED_SANDSTONE_SLAB);
386  constexpr cBlockStairsHandler BlockRedSandstoneStairsHandler (E_BLOCK_RED_SANDSTONE_STAIRS);
387  constexpr cDefaultBlockHandler BlockRedShulkerBoxHandler (E_BLOCK_RED_SHULKER_BOX);
388  constexpr cDefaultBlockHandler BlockRedstoneBlockHandler (E_BLOCK_BLOCK_OF_REDSTONE);
389  constexpr cBlockRedstoneLampHandler BlockRedstoneLampHandler (E_BLOCK_REDSTONE_LAMP_ON);
390  constexpr cBlockGlowingRedstoneOreHandler BlockRedstoneOreGlowingHandler (E_BLOCK_REDSTONE_ORE_GLOWING);
391  constexpr cBlockRedstoneOreHandler BlockRedstoneOreHandler (E_BLOCK_REDSTONE_ORE);
392  constexpr cBlockRedstoneRepeaterHandler BlockRedstoneRepeaterOffHandler (E_BLOCK_REDSTONE_REPEATER_OFF);
393  constexpr cBlockRedstoneRepeaterHandler BlockRedstoneRepeaterOnHandler (E_BLOCK_REDSTONE_REPEATER_ON);
394  constexpr cBlockRedstoneTorchHandler BlockRedstoneTorchOffHandler (E_BLOCK_REDSTONE_TORCH_OFF);
395  constexpr cBlockRedstoneTorchHandler BlockRedstoneTorchOnHandler (E_BLOCK_REDSTONE_TORCH_ON);
396  constexpr cBlockRedstoneWireHandler BlockRedstoneWireHandler (E_BLOCK_REDSTONE_WIRE);
397  constexpr cBlockCommandBlockHandler BlockRepeatingCommandBlockHandler (E_BLOCK_REPEATING_COMMAND_BLOCK);
398  constexpr cBlockSandHandler BlockSandHandler (E_BLOCK_SAND);
399  constexpr cDefaultBlockHandler BlockSandstoneHandler (E_BLOCK_SANDSTONE);
400  constexpr cBlockStairsHandler BlockSandstoneStairsHandler (E_BLOCK_SANDSTONE_STAIRS);
401  constexpr cBlockSaplingHandler BlockSaplingHandler (E_BLOCK_SAPLING);
402  constexpr cBlockSeaLanternHandler BlockSeaLanternHandler (E_BLOCK_SEA_LANTERN);
403  constexpr cBlockSignPostHandler BlockSignPostHandler (E_BLOCK_SIGN_POST);
404  constexpr cBlockSlimeHandler BlockSlimeBlockHandler (E_BLOCK_SLIME_BLOCK);
405  constexpr cDefaultBlockHandler BlockSnowBlockHandler (E_BLOCK_SNOW_BLOCK);
406  constexpr cBlockSnowHandler BlockSnowHandler (E_BLOCK_SNOW);
407  constexpr cDefaultBlockHandler BlockSoulSandHandler (E_BLOCK_SOULSAND);
408  constexpr cBlockSpongeHandler BlockSpongeHandler (E_BLOCK_SPONGE);
409  constexpr cBlockDoorHandler BlockSpruceDoorHandler (E_BLOCK_SPRUCE_DOOR);
410  constexpr cBlockFenceGateHandler BlockSpruceFenceGateHandler (E_BLOCK_SPRUCE_FENCE_GATE);
411  constexpr cBlockFenceHandler BlockSpruceFenceHandler (E_BLOCK_SPRUCE_FENCE);
412  constexpr cBlockStairsHandler BlockSpruceWoodStairsHandler (E_BLOCK_SPRUCE_WOOD_STAIRS);
413  constexpr cDefaultBlockHandler BlockStainedClayHandler (E_BLOCK_STAINED_CLAY);
414  constexpr cBlockGlassHandler BlockStainedGlassHandler (E_BLOCK_STAINED_GLASS);
415  constexpr cBlockGlassHandler BlockStainedGlassPaneHandler (E_BLOCK_STAINED_GLASS_PANE);
416  constexpr cBlockBannerHandler BlockStandingBannerHandler (E_BLOCK_STANDING_BANNER);
417  constexpr cBlockLavaHandler BlockStationaryLavaHandler (E_BLOCK_STATIONARY_LAVA);
418  constexpr cBlockWaterHandler BlockStationaryWaterHandler (E_BLOCK_STATIONARY_WATER);
419  constexpr cBlockPistonHandler BlockStickyPistonHandler (E_BLOCK_STICKY_PISTON);
420  constexpr cDefaultBlockHandler BlockStoneBricksHandler (E_BLOCK_STONE_BRICKS);
421  constexpr cBlockStairsHandler BlockStoneBrickStairsHandler (E_BLOCK_STONE_BRICK_STAIRS);
422  constexpr cBlockButtonHandler BlockStoneButtonHandler (E_BLOCK_STONE_BUTTON);
423  constexpr cBlockStoneHandler BlockStoneHandler (E_BLOCK_STONE);
424  constexpr cBlockPressurePlateHandler BlockStonePressurePlateHandler (E_BLOCK_STONE_PRESSURE_PLATE);
425  constexpr cBlockSlabHandler BlockStoneSlabHandler (E_BLOCK_STONE_SLAB);
426  constexpr cDefaultBlockHandler BlockStructureBlockHandler (E_BLOCK_STRUCTURE_BLOCK);
427  constexpr cDefaultBlockHandler BlockStructureVoidHandler (E_BLOCK_STRUCTURE_VOID);
428  constexpr cBlockSugarCaneHandler BlockSugarCaneHandler (E_BLOCK_SUGARCANE);
429  constexpr cBlockTallGrassHandler BlockTallGrassHandler (E_BLOCK_TALL_GRASS);
430  constexpr cBlockTNTHandler BlockTNTHandler (E_BLOCK_TNT);
431  constexpr cBlockTorchHandler BlockTorchHandler (E_BLOCK_TORCH);
432  constexpr cBlockTrapdoorHandler BlockTrapdoorHandler (E_BLOCK_TRAPDOOR);
433  constexpr cBlockChestHandler BlockTrappedChestHandler (E_BLOCK_TRAPPED_CHEST);
434  constexpr cBlockTripwireHandler BlockTripwireHandler (E_BLOCK_TRIPWIRE);
435  constexpr cBlockTripwireHookHandler BlockTripwireHookHandler (E_BLOCK_TRIPWIRE_HOOK);
436  constexpr cBlockVinesHandler BlockVinesHandler (E_BLOCK_VINES);
437  constexpr cBlockBannerHandler BlockWallBannerHandler (E_BLOCK_WALL_BANNER);
438  constexpr cBlockWallSignHandler BlockWallsignHandler (E_BLOCK_WALLSIGN);
439  constexpr cBlockWaterHandler BlockWaterHandler (E_BLOCK_WATER);
440  constexpr cBlockGlazedTerracottaHandler BlockWhiteGlazedTerracottaHandler (E_BLOCK_WHITE_GLAZED_TERRACOTTA);
441  constexpr cDefaultBlockHandler BlockWhiteShulkerBoxHandler (E_BLOCK_WHITE_SHULKER_BOX);
442  constexpr cBlockButtonHandler BlockWoodenButtonHandler (E_BLOCK_WOODEN_BUTTON);
443  constexpr cBlockPressurePlateHandler BlockWoodenPressurePlateHandler (E_BLOCK_WOODEN_PRESSURE_PLATE);
444  constexpr cBlockSlabHandler BlockWoodenSlabHandler (E_BLOCK_WOODEN_SLAB);
445  constexpr cBlockClothHandler BlockWoolHandler (E_BLOCK_WOOL);
446  constexpr cBlockWorkbenchHandler BlockWorkbenchHandler (E_BLOCK_WORKBENCH);
447  constexpr cBlockFlowerHandler BlockYellowFlowerHandler (E_BLOCK_YELLOW_FLOWER);
448  constexpr cBlockGlazedTerracottaHandler BlockYellowGlazedTerracottaHandler(E_BLOCK_YELLOW_GLAZED_TERRACOTTA);
449  constexpr cDefaultBlockHandler BlockYellowShulkerBoxHandler (E_BLOCK_YELLOW_SHULKER_BOX);
450 }
451 
452 
453 
454 
455 
457 // cBlockHandler:
458 
460  cChunkInterface & a_ChunkInterface,
461  cWorldInterface & a_WorldInterface,
462  cBlockPluginInterface & a_PluginInterface,
463  cChunk & a_Chunk,
464  const Vector3i a_RelPos
465 ) const
466 {
467 }
468 
469 
470 
471 
472 
473 void cBlockHandler::OnNeighborChanged(cChunkInterface & a_ChunkInterface, Vector3i a_BlockPos, eBlockFace a_WhichNeighbor) const
474 {
475  if (a_ChunkInterface.DoWithChunkAt(a_BlockPos, [&](cChunk & a_Chunk) { return CanBeAt(a_Chunk, cChunkDef::AbsoluteToRelative(a_BlockPos), a_Chunk.GetMeta(cChunkDef::AbsoluteToRelative(a_BlockPos))); }))
476  {
477  return;
478  }
479 
480  a_ChunkInterface.DropBlockAsPickups(a_BlockPos);
481 }
482 
483 
484 
485 
486 
487 void cBlockHandler::NeighborChanged(cChunkInterface & a_ChunkInterface, Vector3i a_NeighborPos, eBlockFace a_WhichNeighbor)
488 {
489  if (!cChunkDef::IsValidHeight(a_NeighborPos))
490  {
491  return;
492  }
493 
494  cBlockHandler::For(a_ChunkInterface.GetBlock(a_NeighborPos)).OnNeighborChanged(a_ChunkInterface, a_NeighborPos, a_WhichNeighbor);
495 }
496 
497 
498 
499 
500 
501 cItems cBlockHandler::ConvertToPickups(NIBBLETYPE a_BlockMeta, const cItem * const a_Tool) const
502 {
503  UNUSED(a_Tool);
504 
505  // Add self:
506  return cItem(m_BlockType, 1, a_BlockMeta);
507 }
508 
509 
510 
511 
512 
513 bool cBlockHandler::CanBeAt(const cChunk & a_Chunk, const Vector3i a_Position, const NIBBLETYPE a_Meta) const
514 {
515  return true;
516 }
517 
518 
519 
520 
521 
523 {
524  return false;
525 }
526 
527 
528 
529 
530 
531 bool cBlockHandler::DoesIgnoreBuildCollision(const cWorld & a_World, const cItem & a_HeldItem, const Vector3i a_Position, const NIBBLETYPE a_Meta, const eBlockFace a_ClickedBlockFace, const bool a_ClickedDirectly) const
532 {
533  return m_BlockType == E_BLOCK_AIR;
534 }
535 
536 
537 
538 
539 
540 bool cBlockHandler::IsInsideBlock(const Vector3d a_RelPosition, const NIBBLETYPE a_BlockMeta) const
541 {
542  // Default functionality: Test the height, since we assume full voxels with varying height
543  return (a_RelPosition.y < cBlockInfo::GetBlockHeight(m_BlockType));
544 }
545 
546 
547 
548 
549 
551 {
553  {
554  // Non-solid things can be placed within entities
555  return cBoundingBox(0, 0, 0, 0, 0, 0);
556  }
557  return cBoundingBox(0, 1, 0, cBlockInfo::GetBlockHeight(m_BlockType), 0, 1);
558 }
559 
560 
561 
562 
563 
565  cChunkInterface & a_ChunkInterface, cBlockPluginInterface & a_PluginInterface,
566  Vector3i a_RelPos,
567  cChunk & a_Chunk
568 ) const
569 {
570  const auto Position = cChunkDef::RelativeToAbsolute(a_RelPos, a_Chunk.GetPos());
571  NeighborChanged(a_ChunkInterface, Position.addedX(-1), BLOCK_FACE_XP);
572  NeighborChanged(a_ChunkInterface, Position.addedX(1), BLOCK_FACE_XM);
573  NeighborChanged(a_ChunkInterface, Position.addedY(-1), BLOCK_FACE_YP);
574  NeighborChanged(a_ChunkInterface, Position.addedY(1), BLOCK_FACE_YM);
575  NeighborChanged(a_ChunkInterface, Position.addedZ(-1), BLOCK_FACE_ZP);
576  NeighborChanged(a_ChunkInterface, Position.addedZ(1), BLOCK_FACE_ZM);
577 }
578 
579 
580 
581 
582 
584 {
585  // Zero for transparent
586  return 0;
587 }
588 
589 
590 
591 
592 
594 {
595  return ((a_Tool != nullptr) && (a_Tool->m_Enchantments.GetLevel(cEnchantments::enchSilkTouch) > 0));
596 }
597 
598 
599 
600 
601 
602 unsigned char cBlockHandler::ToolFortuneLevel(const cItem * a_Tool)
603 {
604  if ((a_Tool != nullptr) && ItemCategory::IsTool(a_Tool->m_ItemType))
605  {
606  // Return enchantment level, limited to avoid spawning excessive pickups (crashing the server) when modified items are used:
607  return static_cast<unsigned char>(std::min(8U, a_Tool->m_Enchantments.GetLevel(cEnchantments::enchFortune)));
608  }
609 
610  // Not a tool:
611  return 0;
612 }
613 
614 
615 
616 
617 
618 char cBlockHandler::FortuneDiscreteRandom(char a_MinDrop, char a_DefaultMax, unsigned char a_BonusMax, char a_DropCap)
619 {
620  // First sample the discrete random distribution.
621  char DropNum = GetRandomProvider().RandInt<char>(a_MinDrop, static_cast<char>(a_DefaultMax + a_BonusMax));
622 
623  // Then clamp to within range (clamp instead of min incase of overflow):
624  return std::clamp<char>(DropNum, a_MinDrop, a_DropCap);
625 }
626 
627 
628 
629 
630 
632 {
633  // Switch on the block type, as an enumeration
634  // Clang will fail if any type is unhandled:
635  switch (static_cast<ENUM_BLOCK_TYPE>(a_BlockType))
636  {
637  // Block handlers, alphabetically sorted:
638  case E_BLOCK_ACACIA_DOOR: return BlockAcaciaDoorHandler;
639  case E_BLOCK_ACACIA_FENCE: return BlockAcaciaFenceHandler;
640  case E_BLOCK_ACACIA_FENCE_GATE: return BlockAcaciaFenceGateHandler;
641  case E_BLOCK_ACACIA_WOOD_STAIRS: return BlockAcaciaWoodStairsHandler;
642  case E_BLOCK_ACTIVATOR_RAIL: return BlockActivatorRailHandler;
643  case E_BLOCK_ACTIVE_COMPARATOR: return BlockActiveComparatorHandler;
644  case E_BLOCK_AIR: return BlockAirHandler;
645  case E_BLOCK_ANVIL: return BlockAnvilHandler;
646  case E_BLOCK_BARRIER: return BlockBarrierHandler;
647  case E_BLOCK_BEACON: return BlockBeaconHandler;
648  case E_BLOCK_BED: return BlockBedHandler;
649  case E_BLOCK_BEDROCK: return BlockBedrockHandler;
650  case E_BLOCK_BEETROOTS: return BlockBeetrootsHandler;
651  case E_BLOCK_BIG_FLOWER: return BlockBigFlowerHandler;
652  case E_BLOCK_BIRCH_DOOR: return BlockBirchDoorHandler;
653  case E_BLOCK_BIRCH_FENCE: return BlockBirchFenceHandler;
654  case E_BLOCK_BIRCH_FENCE_GATE: return BlockBirchFenceGateHandler;
655  case E_BLOCK_BIRCH_WOOD_STAIRS: return BlockBirchWoodStairsHandler;
656  case E_BLOCK_BLACK_GLAZED_TERRACOTTA: return BlockBlackGlazedTerracottaHandler;
657  case E_BLOCK_BLACK_SHULKER_BOX: return BlockBlackShulkerBoxHandler;
658  case E_BLOCK_BLOCK_OF_COAL: return BlockCoalBlockHandler;
659  case E_BLOCK_BLOCK_OF_REDSTONE: return BlockRedstoneBlockHandler;
660  case E_BLOCK_BLUE_GLAZED_TERRACOTTA: return BlockBlueGlazedTerracottaHandler;
661  case E_BLOCK_BLUE_SHULKER_BOX: return BlockBlueShulkerBoxHandler;
662  case E_BLOCK_BONE_BLOCK: return BlockBoneBlockHandler;
663  case E_BLOCK_BOOKCASE: return BlockBookcaseHandler;
664  case E_BLOCK_BREWING_STAND: return BlockBrewingStandHandler;
665  case E_BLOCK_BRICK: return BlockBricksHandler;
666  case E_BLOCK_BRICK_STAIRS: return BlockBrickStairsHandler;
667  case E_BLOCK_BROWN_GLAZED_TERRACOTTA: return BlockBrownGlazedTerracottaHandler;
668  case E_BLOCK_BROWN_MUSHROOM: return BlockBrownMushroomHandler;
669  case E_BLOCK_BROWN_SHULKER_BOX: return BlockBrownShulkerBoxHandler;
670  case E_BLOCK_CACTUS: return BlockCactusHandler;
671  case E_BLOCK_CAKE: return BlockCakeHandler;
672  case E_BLOCK_CARPET: return BlockCarpetHandler;
673  case E_BLOCK_CARROTS: return BlockCarrotsHandler;
674  case E_BLOCK_CAULDRON: return BlockCauldronHandler;
675  case E_BLOCK_CHAIN_COMMAND_BLOCK: return BlockChainCommandBlockHandler;
676  case E_BLOCK_CHEST: return BlockChestHandler;
677  case E_BLOCK_CHORUS_FLOWER: return BlockChorusFlowerHandler;
678  case E_BLOCK_CHORUS_PLANT: return BlockChorusPlantHandler;
679  case E_BLOCK_CLAY: return BlockClayHandler;
680  case E_BLOCK_COAL_ORE: return BlockCoalOreHandler;
681  case E_BLOCK_COBBLESTONE: return BlockCobblestoneHandler;
682  case E_BLOCK_COBBLESTONE_STAIRS: return BlockCobblestoneStairsHandler;
683  case E_BLOCK_COBBLESTONE_WALL: return BlockCobblestoneWallHandler;
684  case E_BLOCK_COBWEB: return BlockCobwebHandler;
685  case E_BLOCK_COCOA_POD: return BlockCocoaPodHandler;
686  case E_BLOCK_COMMAND_BLOCK: return BlockCommandBlockHandler;
687  case E_BLOCK_CONCRETE: return BlockConcreteHandler;
688  case E_BLOCK_CONCRETE_POWDER: return BlockConcretePowderHandler;
689  case E_BLOCK_CROPS: return BlockCropsHandler;
690  case E_BLOCK_CYAN_GLAZED_TERRACOTTA: return BlockCyanGlazedTerracottaHandler;
691  case E_BLOCK_CYAN_SHULKER_BOX: return BlockCyanShulkerBoxHandler;
692  case E_BLOCK_DARK_OAK_DOOR: return BlockDarkOakDoorHandler;
693  case E_BLOCK_DARK_OAK_FENCE: return BlockDarkOakFenceHandler;
694  case E_BLOCK_DARK_OAK_FENCE_GATE: return BlockDarkOakFenceGateHandler;
695  case E_BLOCK_DARK_OAK_WOOD_STAIRS: return BlockDarkOakWoodStairsHandler;
696  case E_BLOCK_DAYLIGHT_SENSOR: return BlockDaylightSensorHandler;
697  case E_BLOCK_DEAD_BUSH: return BlockDeadBushHandler;
698  case E_BLOCK_DETECTOR_RAIL: return BlockDetectorRailHandler;
699  case E_BLOCK_DIAMOND_BLOCK: return BlockDiamondBlockHandler;
700  case E_BLOCK_DIAMOND_ORE: return BlockDiamondOreHandler;
701  case E_BLOCK_DIRT: return BlockDirtHandler;
702  case E_BLOCK_DISPENSER: return BlockDispenserHandler;
703  case E_BLOCK_DOUBLE_RED_SANDSTONE_SLAB: return BlockDoubleRedSandstoneSlabHandler;
704  case E_BLOCK_DOUBLE_STONE_SLAB: return BlockDoubleStoneSlabHandler;
705  case E_BLOCK_DOUBLE_WOODEN_SLAB: return BlockDoubleWoodenSlabHandler;
706  case E_BLOCK_DRAGON_EGG: return BlockDragonEggHandler;
707  case E_BLOCK_DROPPER: return BlockDropperHandler;
708  case E_BLOCK_EMERALD_BLOCK: return BlockEmeraldBlockHandler;
709  case E_BLOCK_EMERALD_ORE: return BlockEmeraldOreHandler;
710  case E_BLOCK_ENCHANTMENT_TABLE: return BlockEnchantingTableHandler;
711  case E_BLOCK_ENDER_CHEST: return BlockEnderChestHandler;
712  case E_BLOCK_END_BRICKS: return BlockEndBricksHandler;
713  case E_BLOCK_END_GATEWAY: return BlockEndGatewayHandler;
714  case E_BLOCK_END_PORTAL: return BlockEndPortalHandler;
715  case E_BLOCK_END_PORTAL_FRAME: return BlockEndPortalFrameHandler;
716  case E_BLOCK_END_ROD: return BlockEndRodHandler;
717  case E_BLOCK_END_STONE: return BlockEndStoneHandler;
718  case E_BLOCK_FARMLAND: return BlockFarmlandHandler;
719  case E_BLOCK_FENCE: return BlockFenceHandler;
720  case E_BLOCK_FIRE: return BlockFireHandler;
721  case E_BLOCK_FLOWER_POT: return BlockFlowerPotHandler;
722  case E_BLOCK_FROSTED_ICE: return BlockFrostedIceHandler;
723  case E_BLOCK_FURNACE: return BlockFurnaceHandler;
724  case E_BLOCK_GLASS: return BlockGlassHandler;
725  case E_BLOCK_GLASS_PANE: return BlockGlassPaneHandler;
726  case E_BLOCK_GLOWSTONE: return BlockGlowstoneHandler;
727  case E_BLOCK_GOLD_BLOCK: return BlockGoldBlockHandler;
728  case E_BLOCK_GOLD_ORE: return BlockGoldOreHandler;
729  case E_BLOCK_GRASS: return BlockGrassHandler;
730  case E_BLOCK_GRASS_PATH: return BlockGrassPathHandler;
731  case E_BLOCK_GRAVEL: return BlockGravelHandler;
732  case E_BLOCK_GRAY_GLAZED_TERRACOTTA: return BlockGrayGlazedTerracottaHandler;
733  case E_BLOCK_GRAY_SHULKER_BOX: return BlockGrayShulkerBoxHandler;
734  case E_BLOCK_GREEN_GLAZED_TERRACOTTA: return BlockGreenGlazedTerracottaHandler;
735  case E_BLOCK_GREEN_SHULKER_BOX: return BlockGreenShulkerBoxHandler;
736  case E_BLOCK_HARDENED_CLAY: return BlockHardenedClayHandler;
737  case E_BLOCK_HAY_BALE: return BlockHayBaleHandler;
738  case E_BLOCK_HEAD: return BlockHeadHandler;
739  case E_BLOCK_HEAVY_WEIGHTED_PRESSURE_PLATE: return BlockHeavyWeightedPressurePHandler;
740  case E_BLOCK_HOPPER: return BlockHopperHandler;
741  case E_BLOCK_HUGE_BROWN_MUSHROOM: return BlockHugeBrownMushroomHandler;
742  case E_BLOCK_HUGE_RED_MUSHROOM: return BlockHugeRedMushroomHandler;
743  case E_BLOCK_ICE: return BlockIceHandler;
744  case E_BLOCK_INACTIVE_COMPARATOR: return BlockInactiveComparatorHandler;
745  case E_BLOCK_INVERTED_DAYLIGHT_SENSOR: return BlockDaylightSensorHandler;
746  case E_BLOCK_IRON_BARS: return BlockIronBarsHandler;
747  case E_BLOCK_IRON_BLOCK: return BlockIronBlockHandler;
748  case E_BLOCK_IRON_DOOR: return BlockIronDoorHandler;
749  case E_BLOCK_IRON_ORE: return BlockIronOreHandler;
750  case E_BLOCK_IRON_TRAPDOOR: return BlockIronTrapdoorHandler;
751  case E_BLOCK_JACK_O_LANTERN: return BlockJackOLanternHandler;
752  case E_BLOCK_JUKEBOX: return BlockJukeboxHandler;
753  case E_BLOCK_JUNGLE_DOOR: return BlockJungleDoorHandler;
754  case E_BLOCK_JUNGLE_FENCE: return BlockJungleFenceHandler;
755  case E_BLOCK_JUNGLE_FENCE_GATE: return BlockJungleFenceGateHandler;
756  case E_BLOCK_JUNGLE_WOOD_STAIRS: return BlockJungleWoodStairsHandler;
757  case E_BLOCK_LADDER: return BlockLadderHandler;
758  case E_BLOCK_LAPIS_BLOCK: return BlockLapisBlockHandler;
759  case E_BLOCK_LAPIS_ORE: return BlockLapisOreHandler;
760  case E_BLOCK_LAVA: return BlockLavaHandler;
761  case E_BLOCK_LEAVES: return BlockLeavesHandler;
762  case E_BLOCK_LEVER: return BlockLeverHandler;
763  case E_BLOCK_LIGHT_BLUE_GLAZED_TERRACOTTA: return BlockLightBlueGlazedTerracoHandler;
764  case E_BLOCK_LIGHT_BLUE_SHULKER_BOX: return BlockLightBlueShulkerBoxHandler;
765  case E_BLOCK_LIGHT_GRAY_GLAZED_TERRACOTTA: return BlockLightGrayGlazedTerracoHandler;
766  case E_BLOCK_LIGHT_GRAY_SHULKER_BOX: return BlockLightGrayShulkerBoxHandler;
767  case E_BLOCK_LIGHT_WEIGHTED_PRESSURE_PLATE: return BlockLightWeightedPressurePHandler;
768  case E_BLOCK_LILY_PAD: return BlockLilyPadHandler;
769  case E_BLOCK_LIME_GLAZED_TERRACOTTA: return BlockLimeGlazedTerracottaHandler;
770  case E_BLOCK_LIME_SHULKER_BOX: return BlockLimeShulkerBoxHandler;
771  case E_BLOCK_LIT_FURNACE: return BlockLitFurnaceHandler;
772  case E_BLOCK_LOG: return BlockLogHandler;
773  case E_BLOCK_MAGENTA_GLAZED_TERRACOTTA: return BlockMagentaGlazedTerracottHandler;
774  case E_BLOCK_MAGENTA_SHULKER_BOX: return BlockMagentaShulkerBoxHandler;
775  case E_BLOCK_MAGMA: return BlockMagmaHandler;
776  case E_BLOCK_MELON: return BlockMelonHandler;
777  case E_BLOCK_MELON_STEM: return BlockMelonStemHandler;
778  case E_BLOCK_MOB_SPAWNER: return BlockMobSpawnerHandler;
779  case E_BLOCK_MOSSY_COBBLESTONE: return BlockMossyCobblestoneHandler;
780  case E_BLOCK_MYCELIUM: return BlockMyceliumHandler;
781  case E_BLOCK_NETHERRACK: return BlockNetherrackHandler;
782  case E_BLOCK_NETHER_BRICK: return BlockNetherBricksHandler;
783  case E_BLOCK_NETHER_BRICK_FENCE: return BlockNetherBrickFenceHandler;
784  case E_BLOCK_NETHER_BRICK_STAIRS: return BlockNetherBrickStairsHandler;
785  case E_BLOCK_NETHER_PORTAL: return BlockNetherPortalHandler;
786  case E_BLOCK_NETHER_QUARTZ_ORE: return BlockNetherQuartzOreHandler;
787  case E_BLOCK_NETHER_WART: return BlockNetherWartHandler;
788  case E_BLOCK_NETHER_WART_BLOCK: return BlockNetherWartBlockHandler;
789  case E_BLOCK_NEW_LEAVES: return BlockNewLeavesHandler;
790  case E_BLOCK_NEW_LOG: return BlockNewLogHandler;
791  case E_BLOCK_NOTE_BLOCK: return BlockNoteBlockHandler;
792  case E_BLOCK_OAK_DOOR: return BlockOakDoorHandler;
793  case E_BLOCK_OAK_FENCE_GATE: return BlockOakFenceGateHandler;
794  case E_BLOCK_OAK_WOOD_STAIRS: return BlockOakWoodStairsHandler;
795  case E_BLOCK_OBSERVER: return BlockObserverHandler;
796  case E_BLOCK_OBSIDIAN: return BlockObsidianHandler;
797  case E_BLOCK_ORANGE_GLAZED_TERRACOTTA: return BlockOrangeGlazedTerracottaHandler;
798  case E_BLOCK_ORANGE_SHULKER_BOX: return BlockOrangeShulkerBoxHandler;
799  case E_BLOCK_PACKED_ICE: return BlockPackedIceHandler;
800  case E_BLOCK_PINK_GLAZED_TERRACOTTA: return BlockPinkGlazedTerracottaHandler;
801  case E_BLOCK_PINK_SHULKER_BOX: return BlockPinkShulkerBoxHandler;
802  case E_BLOCK_PISTON: return BlockPistonHandler;
803  case E_BLOCK_PISTON_EXTENSION: return BlockPistonHeadHandler;
804  case E_BLOCK_PISTON_MOVED_BLOCK: return BlockPistonMovedBlockHandler;
805  case E_BLOCK_PLANKS: return BlockPlanksHandler;
806  case E_BLOCK_POTATOES: return BlockPotatoesHandler;
807  case E_BLOCK_POWERED_RAIL: return BlockPoweredRailHandler;
808  case E_BLOCK_PRISMARINE_BLOCK: return BlockPrismarineBlockHandler;
809  case E_BLOCK_PUMPKIN: return BlockPumpkinHandler;
810  case E_BLOCK_PUMPKIN_STEM: return BlockPumpkinStemHandler;
811  case E_BLOCK_PURPLE_GLAZED_TERRACOTTA: return BlockPurpleGlazedTerracottaHandler;
812  case E_BLOCK_PURPLE_SHULKER_BOX: return BlockPurpleShulkerBoxHandler;
813  case E_BLOCK_PURPUR_BLOCK: return BlockPurpurBlockHandler;
814  case E_BLOCK_PURPUR_DOUBLE_SLAB: return BlockPurpurDoubleSlabHandler;
815  case E_BLOCK_PURPUR_PILLAR: return BlockPurpurPillarHandler;
816  case E_BLOCK_PURPUR_SLAB: return BlockPurpurSlabHandler;
817  case E_BLOCK_PURPUR_STAIRS: return BlockPurpurStairsHandler;
818  case E_BLOCK_QUARTZ_BLOCK: return BlockQuartzBlockHandler;
819  case E_BLOCK_QUARTZ_STAIRS: return BlockQuartzStairsHandler;
820  case E_BLOCK_RAIL: return BlockRailHandler;
821  case E_BLOCK_REDSTONE_LAMP_OFF: return BlockRedstoneLampHandler;
822  case E_BLOCK_REDSTONE_LAMP_ON: return BlockRedstoneLampHandler;
823  case E_BLOCK_REDSTONE_ORE: return BlockRedstoneOreHandler;
824  case E_BLOCK_REDSTONE_ORE_GLOWING: return BlockRedstoneOreGlowingHandler;
825  case E_BLOCK_REDSTONE_REPEATER_OFF: return BlockRedstoneRepeaterOffHandler;
826  case E_BLOCK_REDSTONE_REPEATER_ON: return BlockRedstoneRepeaterOnHandler;
827  case E_BLOCK_REDSTONE_TORCH_OFF: return BlockRedstoneTorchOffHandler;
828  case E_BLOCK_REDSTONE_TORCH_ON: return BlockRedstoneTorchOnHandler;
829  case E_BLOCK_REDSTONE_WIRE: return BlockRedstoneWireHandler;
830  case E_BLOCK_RED_GLAZED_TERRACOTTA: return BlockRedGlazedTerracottaHandler;
831  case E_BLOCK_RED_MUSHROOM: return BlockRedMushroomHandler;
832  case E_BLOCK_RED_NETHER_BRICK: return BlockRedNetherBricksHandler;
833  case E_BLOCK_RED_ROSE: return BlockRedRoseHandler;
834  case E_BLOCK_RED_SANDSTONE: return BlockRedSandstoneHandler;
835  case E_BLOCK_RED_SANDSTONE_SLAB: return BlockRedSandstoneSlabHandler;
836  case E_BLOCK_RED_SANDSTONE_STAIRS: return BlockRedSandstoneStairsHandler;
837  case E_BLOCK_RED_SHULKER_BOX: return BlockRedShulkerBoxHandler;
838  case E_BLOCK_REPEATING_COMMAND_BLOCK: return BlockRepeatingCommandBlockHandler;
839  case E_BLOCK_SAND: return BlockSandHandler;
840  case E_BLOCK_SANDSTONE: return BlockSandstoneHandler;
841  case E_BLOCK_SANDSTONE_STAIRS: return BlockSandstoneStairsHandler;
842  case E_BLOCK_SAPLING: return BlockSaplingHandler;
843  case E_BLOCK_SEA_LANTERN: return BlockSeaLanternHandler;
844  case E_BLOCK_SIGN_POST: return BlockSignPostHandler;
845  case E_BLOCK_SILVERFISH_EGG: return BlockInfestedBlockHandler;
846  case E_BLOCK_SLIME_BLOCK: return BlockSlimeBlockHandler;
847  case E_BLOCK_SNOW: return BlockSnowHandler;
848  case E_BLOCK_SNOW_BLOCK: return BlockSnowBlockHandler;
849  case E_BLOCK_SOULSAND: return BlockSoulSandHandler;
850  case E_BLOCK_SPONGE: return BlockSpongeHandler;
851  case E_BLOCK_SPRUCE_DOOR: return BlockSpruceDoorHandler;
852  case E_BLOCK_SPRUCE_FENCE: return BlockSpruceFenceHandler;
853  case E_BLOCK_SPRUCE_FENCE_GATE: return BlockSpruceFenceGateHandler;
854  case E_BLOCK_SPRUCE_WOOD_STAIRS: return BlockSpruceWoodStairsHandler;
855  case E_BLOCK_STAINED_CLAY: return BlockStainedClayHandler;
856  case E_BLOCK_STAINED_GLASS: return BlockStainedGlassHandler;
857  case E_BLOCK_STAINED_GLASS_PANE: return BlockStainedGlassPaneHandler;
858  case E_BLOCK_STANDING_BANNER: return BlockStandingBannerHandler;
859  case E_BLOCK_STATIONARY_LAVA: return BlockStationaryLavaHandler;
860  case E_BLOCK_STATIONARY_WATER: return BlockStationaryWaterHandler;
861  case E_BLOCK_STICKY_PISTON: return BlockStickyPistonHandler;
862  case E_BLOCK_STONE: return BlockStoneHandler;
863  case E_BLOCK_STONE_BRICKS: return BlockStoneBricksHandler;
864  case E_BLOCK_STONE_BRICK_STAIRS: return BlockStoneBrickStairsHandler;
865  case E_BLOCK_STONE_BUTTON: return BlockStoneButtonHandler;
866  case E_BLOCK_STONE_PRESSURE_PLATE: return BlockStonePressurePlateHandler;
867  case E_BLOCK_STONE_SLAB: return BlockStoneSlabHandler;
868  case E_BLOCK_STRUCTURE_BLOCK: return BlockStructureBlockHandler;
869  case E_BLOCK_STRUCTURE_VOID: return BlockStructureVoidHandler;
870  case E_BLOCK_SUGARCANE: return BlockSugarCaneHandler;
871  case E_BLOCK_TALL_GRASS: return BlockTallGrassHandler;
872  case E_BLOCK_TNT: return BlockTNTHandler;
873  case E_BLOCK_TORCH: return BlockTorchHandler;
874  case E_BLOCK_TRAPDOOR: return BlockTrapdoorHandler;
875  case E_BLOCK_TRAPPED_CHEST: return BlockTrappedChestHandler;
876  case E_BLOCK_TRIPWIRE: return BlockTripwireHandler;
877  case E_BLOCK_TRIPWIRE_HOOK: return BlockTripwireHookHandler;
878  case E_BLOCK_VINES: return BlockVinesHandler;
879  case E_BLOCK_WALLSIGN: return BlockWallsignHandler;
880  case E_BLOCK_WALL_BANNER: return BlockWallBannerHandler;
881  case E_BLOCK_WATER: return BlockWaterHandler;
882  case E_BLOCK_WHITE_GLAZED_TERRACOTTA: return BlockWhiteGlazedTerracottaHandler;
883  case E_BLOCK_WHITE_SHULKER_BOX: return BlockWhiteShulkerBoxHandler;
884  case E_BLOCK_WOODEN_BUTTON: return BlockWoodenButtonHandler;
885  case E_BLOCK_WOODEN_PRESSURE_PLATE: return BlockWoodenPressurePlateHandler;
886  case E_BLOCK_WOODEN_SLAB: return BlockWoodenSlabHandler;
887  case E_BLOCK_WOOL: return BlockWoolHandler;
888  case E_BLOCK_WORKBENCH: return BlockWorkbenchHandler;
889  case E_BLOCK_YELLOW_FLOWER: return BlockYellowFlowerHandler;
890  case E_BLOCK_YELLOW_GLAZED_TERRACOTTA: return BlockYellowGlazedTerracottaHandler;
891  case E_BLOCK_YELLOW_SHULKER_BOX: return BlockYellowShulkerBoxHandler;
892 
893  // TODO: these will be removed in 1.13+ migration
895  case E_BLOCK_UNFINISHED: return BlockAirHandler;
896  }
897  UNREACHABLE("Getting handler for unexpected block type");
898 }
cBlockCactusHandler
Definition: BlockCactus.h:10
E_BLOCK_STRUCTURE_VOID
@ E_BLOCK_STRUCTURE_VOID
Definition: BlockType.h:236
E_BLOCK_EMERALD_BLOCK
@ E_BLOCK_EMERALD_BLOCK
Definition: BlockType.h:148
E_BLOCK_OBSIDIAN
@ E_BLOCK_OBSIDIAN
Definition: BlockType.h:59
cBlockMobHeadHandler
Definition: BlockMobHead.h:10
cBlockRedstoneWireHandler
Definition: BlockRedstoneWire.h:11
E_BLOCK_IRON_BARS
@ E_BLOCK_IRON_BARS
Definition: BlockType.h:116
BlockJukebox.h
E_BLOCK_LIGHT_WEIGHTED_PRESSURE_PLATE
@ E_BLOCK_LIGHT_WEIGHTED_PRESSURE_PLATE
Definition: BlockType.h:162
E_BLOCK_LIGHT_GRAY_SHULKER_BOX
@ E_BLOCK_LIGHT_GRAY_SHULKER_BOX
Definition: BlockType.h:246
BlockOre.h
cBlockWorkbenchHandler
Definition: BlockWorkbench.h:12
BlockRedstoneWire.h
E_BLOCK_STAINED_CLAY
@ E_BLOCK_STAINED_CLAY
Definition: BlockType.h:177
BlockHandler.h
E_BLOCK_RED_SANDSTONE_SLAB
@ E_BLOCK_RED_SANDSTONE_SLAB
Definition: BlockType.h:201
E_BLOCK_SLIME_BLOCK
@ E_BLOCK_SLIME_BLOCK
Definition: BlockType.h:184
E_BLOCK_OBSERVER
@ E_BLOCK_OBSERVER
Definition: BlockType.h:237
E_BLOCK_NOTE_BLOCK
@ E_BLOCK_NOTE_BLOCK
Definition: BlockType.h:35
BlockDoor.h
cBlockHandler::ToolHasSilkTouch
static bool ToolHasSilkTouch(const cItem *a_Tool)
Returns true if the specified tool is valid and has a non-zero silk-touch enchantment.
Definition: BlockHandler.cpp:593
E_BLOCK_REDSTONE_LAMP_ON
@ E_BLOCK_REDSTONE_LAMP_ON
Definition: BlockType.h:139
E_BLOCK_COBBLESTONE_STAIRS
@ E_BLOCK_COBBLESTONE_STAIRS
Definition: BlockType.h:81
BlockGlazedTerracotta.h
cBlockWaterHandler
Definition: BlockFluid.h:150
cBlockCocoaPodHandler
Definition: BlockCocoaPod.h:10
BlockCarpet.h
E_BLOCK_MAGENTA_SHULKER_BOX
@ E_BLOCK_MAGENTA_SHULKER_BOX
Definition: BlockType.h:240
cBlockInfo::GetBlockHeight
static float GetBlockHeight(BLOCKTYPE Block)
Block's height.
Definition: BlockInfo.cpp:1153
E_BLOCK_IRON_ORE
@ E_BLOCK_IRON_ORE
Definition: BlockType.h:25
E_BLOCK_NETHER_PORTAL
@ E_BLOCK_NETHER_PORTAL
Definition: BlockType.h:105
cBlockObserverHandler
Definition: BlockObserver.h:8
cRandomWrapper::RandInt
IntType RandInt(IntType a_Min, IntType a_Max)
Return a random IntType in the range [a_Min, a_Max].
Definition: FastRandom.h:78
cBlockDoubleSlabHandler
Definition: BlockSlab.h:181
cChunkInterface::DropBlockAsPickups
void DropBlockAsPickups(Vector3i a_BlockPos, const cEntity *a_Digger=nullptr, const cItem *a_Tool=nullptr)
Digs the block and spawns the relevant pickups, as if a_Digger used a_Tool to dig the block.
Definition: ChunkInterface.cpp:123
E_BLOCK_WATER
@ E_BLOCK_WATER
Definition: BlockType.h:18
E_BLOCK_PISTON_EXTENSION
@ E_BLOCK_PISTON_EXTENSION
Definition: BlockType.h:44
BlockFlowerPot.h
E_BLOCK_END_GATEWAY
@ E_BLOCK_END_GATEWAY
Definition: BlockType.h:228
BlockSugarCane.h
E_BLOCK_RED_MUSHROOM
@ E_BLOCK_RED_MUSHROOM
Definition: BlockType.h:50
E_BLOCK_PINK_SHULKER_BOX
@ E_BLOCK_PINK_SHULKER_BOX
Definition: BlockType.h:244
E_BLOCK_ENDER_CHEST
@ E_BLOCK_ENDER_CHEST
Definition: BlockType.h:145
E_BLOCK_STONE
@ E_BLOCK_STONE
Definition: BlockType.h:11
BlockBanner.h
BlockSponge.h
BlockCloth.h
cBlockEndPortalFrameHandler
Definition: BlockEndPortalFrame.h:10
E_BLOCK_ORANGE_SHULKER_BOX
@ E_BLOCK_ORANGE_SHULKER_BOX
Definition: BlockType.h:239
cBlockBedHandler
Definition: BlockBed.h:22
E_BLOCK_PISTON
@ E_BLOCK_PISTON
Definition: BlockType.h:43
E_BLOCK_LIME_GLAZED_TERRACOTTA
@ E_BLOCK_LIME_GLAZED_TERRACOTTA
Definition: BlockType.h:259
cBlockHandler::m_BlockType
const BLOCKTYPE m_BlockType
Definition: BlockHandler.h:205
E_BLOCK_TRIPWIRE_HOOK
@ E_BLOCK_TRIPWIRE_HOOK
Definition: BlockType.h:146
cBlockLadderHandler
Definition: BlockLadder.h:12
cBlockRailHandler
Definition: BlockRail.h:19
cBlockHandler::ConvertToPickups
virtual cItems ConvertToPickups(NIBBLETYPE a_BlockMeta, const cItem *a_Tool=nullptr) const
Returns the pickups that would result if the block was mined by a_Digger using a_Tool.
Definition: BlockHandler.cpp:501
E_BLOCK_INACTIVE_COMPARATOR
@ E_BLOCK_INACTIVE_COMPARATOR
Definition: BlockType.h:165
BlockNetherWart.h
E_BLOCK_YELLOW_GLAZED_TERRACOTTA
@ E_BLOCK_YELLOW_GLAZED_TERRACOTTA
Definition: BlockType.h:258
E_BLOCK_SOULSAND
@ E_BLOCK_SOULSAND
Definition: BlockType.h:103
cBlockTrapdoorHandler
Definition: BlockTrapdoor.h:11
E_BLOCK_TRAPDOOR
@ E_BLOCK_TRAPDOOR
Definition: BlockType.h:111
E_BLOCK_BRICK_STAIRS
@ E_BLOCK_BRICK_STAIRS
Definition: BlockType.h:123
cBlockJukeboxHandler
Definition: BlockJukebox.h:11
E_BLOCK_NETHER_BRICK
@ E_BLOCK_NETHER_BRICK
Definition: BlockType.h:127
cBlockEnderChestHandler
Definition: BlockEnderChest.h:9
cBlockBannerHandler
Definition: BlockBanner.h:13
E_BLOCK_PINK_GLAZED_TERRACOTTA
@ E_BLOCK_PINK_GLAZED_TERRACOTTA
Definition: BlockType.h:260
BlockMobSpawner.h
E_BLOCK_CYAN_SHULKER_BOX
@ E_BLOCK_CYAN_SHULKER_BOX
Definition: BlockType.h:247
cBlockQuartzHandler
Definition: BlockQuartz.h:10
E_BLOCK_WORKBENCH
@ E_BLOCK_WORKBENCH
Definition: BlockType.h:69
cBlockRedstoneTorchHandler
Definition: BlockTorch.h:155
BlockPortal.h
BlockAir.h
BlockSlime.h
BLOCK_FACE_XM
@ BLOCK_FACE_XM
Definition: Defines.h:40
E_BLOCK_FURNACE
@ E_BLOCK_FURNACE
Definition: BlockType.h:73
E_BLOCK_BLOCK_OF_REDSTONE
@ E_BLOCK_BLOCK_OF_REDSTONE
Definition: BlockType.h:168
cChunkInterface::GetBlock
BLOCKTYPE GetBlock(Vector3i a_Pos)
Definition: ChunkInterface.cpp:23
BlockWallSign.h
BlockLeaves.h
cBoundingBox
Represents two sets of coords, minimum and maximum for each direction.
Definition: BoundingBox.h:23
cEnchantments::enchFortune
@ enchFortune
Definition: Enchantments.h:68
E_BLOCK_WALL_BANNER
@ E_BLOCK_WALL_BANNER
Definition: BlockType.h:196
E_BLOCK_MOSSY_COBBLESTONE
@ E_BLOCK_MOSSY_COBBLESTONE
Definition: BlockType.h:58
E_BLOCK_LIT_FURNACE
@ E_BLOCK_LIT_FURNACE
Definition: BlockType.h:74
BlockTrapdoor.h
E_BLOCK_HUGE_BROWN_MUSHROOM
@ E_BLOCK_HUGE_BROWN_MUSHROOM
Definition: BlockType.h:114
BlockIce.h
E_BLOCK_IRON_DOOR
@ E_BLOCK_IRON_DOOR
Definition: BlockType.h:85
BlockNoteBlock.h
E_BLOCK_CHORUS_FLOWER
@ E_BLOCK_CHORUS_FLOWER
Definition: BlockType.h:219
E_BLOCK_BOOKCASE
@ E_BLOCK_BOOKCASE
Definition: BlockType.h:57
E_BLOCK_CAULDRON
@ E_BLOCK_CAULDRON
Definition: BlockType.h:133
BlockGravel.h
E_BLOCK_OAK_WOOD_STAIRS
@ E_BLOCK_OAK_WOOD_STAIRS
Definition: BlockType.h:63
E_BLOCK_WHITE_SHULKER_BOX
@ E_BLOCK_WHITE_SHULKER_BOX
Definition: BlockType.h:238
E_BLOCK_END_ROD
@ E_BLOCK_END_ROD
Definition: BlockType.h:217
E_BLOCK_CONCRETE
@ E_BLOCK_CONCRETE
Definition: BlockType.h:270
E_BLOCK_COMMAND_BLOCK
@ E_BLOCK_COMMAND_BLOCK
Definition: BlockType.h:152
E_BLOCK_SAND
@ E_BLOCK_SAND
Definition: BlockType.h:22
E_BLOCK_NETHER_BRICK_STAIRS
@ E_BLOCK_NETHER_BRICK_STAIRS
Definition: BlockType.h:129
cBlockHandler::IsUseable
virtual bool IsUseable(void) const
Called to check whether this block supports a rclk action.
Definition: BlockHandler.cpp:522
E_BLOCK_REDSTONE_ORE_GLOWING
@ E_BLOCK_REDSTONE_ORE_GLOWING
Definition: BlockType.h:88
BlockFurnace.h
E_BLOCK_LEVER
@ E_BLOCK_LEVER
Definition: BlockType.h:83
cBlockHandler::GetMapBaseColourID
virtual ColourID GetMapBaseColourID(NIBBLETYPE a_Meta) const
Returns the base colour ID of the block, as will be represented on a map, as per documentation: https...
Definition: BlockHandler.cpp:583
E_BLOCK_IRON_BLOCK
@ E_BLOCK_IRON_BLOCK
Definition: BlockType.h:52
BlockDaylightSensor.h
E_BLOCK_DIAMOND_ORE
@ E_BLOCK_DIAMOND_ORE
Definition: BlockType.h:66
E_BLOCK_BRICK
@ E_BLOCK_BRICK
Definition: BlockType.h:55
E_BLOCK_DOUBLE_STONE_SLAB
@ E_BLOCK_DOUBLE_STONE_SLAB
Definition: BlockType.h:53
E_BLOCK_NETHER_BRICK_FENCE
@ E_BLOCK_NETHER_BRICK_FENCE
Definition: BlockType.h:128
cBlockHandler
Definition: BlockHandler.h:25
cChunk::GetPos
cChunkCoords GetPos() const
Definition: Chunk.h:133
cDefaultBlockHandler
Definition: BlockDefaultBlock.h:8
BlockHopper.h
E_BLOCK_BARRIER
@ E_BLOCK_BARRIER
Definition: BlockType.h:185
ColourID
Byte ColourID
Definition: Globals.h:159
BlockCommandBlock.h
cEnchantments::enchSilkTouch
@ enchSilkTouch
Definition: Enchantments.h:66
E_BLOCK_MELON_STEM
@ E_BLOCK_MELON_STEM
Definition: BlockType.h:120
cBlockSugarCaneHandler
Definition: BlockSugarCane.h:10
E_BLOCK_MELON
@ E_BLOCK_MELON
Definition: BlockType.h:118
BlockFarmland.h
E_BLOCK_RAIL
@ E_BLOCK_RAIL
Definition: BlockType.h:79
cWorldInterface
Definition: WorldInterface.h:19
BlockCauldron.h
E_BLOCK_BIRCH_FENCE
@ E_BLOCK_BIRCH_FENCE
Definition: BlockType.h:208
BlockBrewingStand.h
BlockTallGrass.h
Globals.h
E_BLOCK_NEW_LOG
@ E_BLOCK_NEW_LOG
Definition: BlockType.h:181
E_BLOCK_DOUBLE_WOODEN_SLAB
@ E_BLOCK_DOUBLE_WOODEN_SLAB
Definition: BlockType.h:140
cBlockInfestedHandler
Definition: BlockInfested.h:12
E_BLOCK_MAGENTA_GLAZED_TERRACOTTA
@ E_BLOCK_MAGENTA_GLAZED_TERRACOTTA
Definition: BlockType.h:256
cBlockEnchantingTableHandler
Definition: BlockEnchantingTable.h:14
cBlockAnvilHandler
Definition: BlockAnvil.h:13
E_BLOCK_WALLSIGN
@ E_BLOCK_WALLSIGN
Definition: BlockType.h:82
E_BLOCK_GRAY_SHULKER_BOX
@ E_BLOCK_GRAY_SHULKER_BOX
Definition: BlockType.h:245
ENUM_BLOCK_TYPE
ENUM_BLOCK_TYPE
Definition: BlockType.h:8
E_BLOCK_UNFINISHED
@ E_BLOCK_UNFINISHED
Definition: BlockType.h:280
cBlockPumpkinHandler
Definition: BlockPumpkin.h:8
cBlockTorchHandler
Definition: BlockTorch.h:141
E_BLOCK_CACTUS
@ E_BLOCK_CACTUS
Definition: BlockType.h:95
E_BLOCK_INVERTED_DAYLIGHT_SENSOR
@ E_BLOCK_INVERTED_DAYLIGHT_SENSOR
Definition: BlockType.h:197
cBlockHandler::CanBeAt
virtual bool CanBeAt(const cChunk &a_Chunk, Vector3i a_Position, NIBBLETYPE a_Meta) const
Checks if the block can stay at the specified relative coords in the chunk.
Definition: BlockHandler.cpp:513
E_BLOCK_REDSTONE_TORCH_OFF
@ E_BLOCK_REDSTONE_TORCH_OFF
Definition: BlockType.h:89
E_BLOCK_LIGHT_BLUE_SHULKER_BOX
@ E_BLOCK_LIGHT_BLUE_SHULKER_BOX
Definition: BlockType.h:241
BlockStairs.h
E_BLOCK_DARK_OAK_FENCE
@ E_BLOCK_DARK_OAK_FENCE
Definition: BlockType.h:210
E_BLOCK_STONE_PRESSURE_PLATE
@ E_BLOCK_STONE_PRESSURE_PLATE
Definition: BlockType.h:84
BlockMelon.h
E_BLOCK_OAK_FENCE_GATE
@ E_BLOCK_OAK_FENCE_GATE
Definition: BlockType.h:122
E_BLOCK_SILVERFISH_EGG
@ E_BLOCK_SILVERFISH_EGG
Definition: BlockType.h:112
E_BLOCK_BIG_FLOWER
@ E_BLOCK_BIG_FLOWER
Definition: BlockType.h:194
BlockTripwireHook.h
E_BLOCK_JUNGLE_WOOD_STAIRS
@ E_BLOCK_JUNGLE_WOOD_STAIRS
Definition: BlockType.h:151
E_BLOCK_DOUBLE_RED_SANDSTONE_SLAB
@ E_BLOCK_DOUBLE_RED_SANDSTONE_SLAB
Definition: BlockType.h:200
E_BLOCK_COBBLESTONE
@ E_BLOCK_COBBLESTONE
Definition: BlockType.h:14
BlockSapling.h
E_BLOCK_BREWING_STAND
@ E_BLOCK_BREWING_STAND
Definition: BlockType.h:132
cBlockGlassHandler
Definition: BlockGlass.h:10
E_BLOCK_SIGN_POST
@ E_BLOCK_SIGN_POST
Definition: BlockType.h:76
NIBBLETYPE
unsigned char NIBBLETYPE
The datatype used by nibbledata (meta, light, skylight)
Definition: ChunkDef.h:44
cBlockComparatorHandler
Definition: BlockComparator.h:12
BLOCK_FACE_YM
@ BLOCK_FACE_YM
Definition: Defines.h:42
BLOCK_FACE_YP
@ BLOCK_FACE_YP
Definition: Defines.h:43
cDefaultOreHandler
Definition: BlockOre.h:149
E_BLOCK_POTATOES
@ E_BLOCK_POTATOES
Definition: BlockType.h:157
cBlockSnowHandler
Definition: BlockSnow.h:10
E_BLOCK_HUGE_RED_MUSHROOM
@ E_BLOCK_HUGE_RED_MUSHROOM
Definition: BlockType.h:115
E_BLOCK_PURPUR_DOUBLE_SLAB
@ E_BLOCK_PURPUR_DOUBLE_SLAB
Definition: BlockType.h:223
E_BLOCK_SNOW_BLOCK
@ E_BLOCK_SNOW_BLOCK
Definition: BlockType.h:94
cBlockHugeMushroomHandler
Handler for huge mushroom blocks.
Definition: BlockHugeMushroom.h:11
cBlockDoorHandler
Definition: BlockDoor.h:16
E_BLOCK_DARK_OAK_WOOD_STAIRS
@ E_BLOCK_DARK_OAK_WOOD_STAIRS
Definition: BlockType.h:183
E_BLOCK_ACTIVE_COMPARATOR
@ E_BLOCK_ACTIVE_COMPARATOR
Definition: BlockType.h:166
BlockLever.h
E_BLOCK_ANVIL
@ E_BLOCK_ANVIL
Definition: BlockType.h:160
cItem::m_Enchantments
cEnchantments m_Enchantments
Definition: Item.h:166
E_BLOCK_REDSTONE_TORCH_ON
@ E_BLOCK_REDSTONE_TORCH_ON
Definition: BlockType.h:90
BlockDirt.h
E_BLOCK_SUGARCANE
@ E_BLOCK_SUGARCANE
Definition: BlockType.h:97
cBlockPortalHandler
Definition: BlockPortal.h:10
E_BLOCK_BED
@ E_BLOCK_BED
Definition: BlockType.h:36
cBlockTNTHandler
Definition: BlockTNT.h:10
BlockPiston.h
E_BLOCK_BLOCK_OF_COAL
@ E_BLOCK_BLOCK_OF_COAL
Definition: BlockType.h:192
cBlockGravelHandler
Definition: BlockGravel.h:10
cBlockDeadBushHandler
Definition: BlockDeadBush.h:10
E_BLOCK_LIGHT_GRAY_GLAZED_TERRACOTTA
@ E_BLOCK_LIGHT_GRAY_GLAZED_TERRACOTTA
Definition: BlockType.h:262
BlockInfested.h
cBlockHandler::For
static const cBlockHandler & For(BLOCKTYPE a_BlockType)
Definition: BlockHandler.cpp:631
E_BLOCK_ICE
@ E_BLOCK_ICE
Definition: BlockType.h:93
cBlockPlanksHandler
Definition: BlockPlanks.h:10
cBlockStoneHandler
Definition: BlockStone.h:9
BlockObserver.h
E_BLOCK_LOG
@ E_BLOCK_LOG
Definition: BlockType.h:27
cBlockCarpetHandler
Definition: BlockCarpet.h:17
E_BLOCK_DARK_OAK_FENCE_GATE
@ E_BLOCK_DARK_OAK_FENCE_GATE
Definition: BlockType.h:205
cBlockHandler::FortuneDiscreteRandom
static char FortuneDiscreteRandom(char a_MinDrop, char a_DefaultMax, unsigned char a_BonusMax, char a_DropCap=25)
Returns a random number of drops taking into account fortune.
Definition: BlockHandler.cpp:618
cBlockMushroomHandler
Handler for the small (singleblock) mushrooms.
Definition: BlockMushroom.h:11
E_BLOCK_TRAPPED_CHEST
@ E_BLOCK_TRAPPED_CHEST
Definition: BlockType.h:161
cBlockSaplingHandler
Definition: BlockSapling.h:11
BlockCobWeb.h
E_BLOCK_FLOWER_POT
@ E_BLOCK_FLOWER_POT
Definition: BlockType.h:155
E_BLOCK_STONE_BRICKS
@ E_BLOCK_STONE_BRICKS
Definition: BlockType.h:113
E_BLOCK_JUKEBOX
@ E_BLOCK_JUKEBOX
Definition: BlockType.h:99
BlockGlass.h
ItemCategory::IsTool
bool IsTool(short a_ItemType)
Definition: Defines.cpp:499
cChunkInterface
Definition: ChunkInterface.h:21
E_BLOCK_SPRUCE_DOOR
@ E_BLOCK_SPRUCE_DOOR
Definition: BlockType.h:212
E_BLOCK_GRAY_GLAZED_TERRACOTTA
@ E_BLOCK_GRAY_GLAZED_TERRACOTTA
Definition: BlockType.h:261
BlockCake.h
E_BLOCK_DEAD_BUSH
@ E_BLOCK_DEAD_BUSH
Definition: BlockType.h:42
E_BLOCK_WOODEN_BUTTON
@ E_BLOCK_WOODEN_BUTTON
Definition: BlockType.h:158
E_BLOCK_RED_SANDSTONE_STAIRS
@ E_BLOCK_RED_SANDSTONE_STAIRS
Definition: BlockType.h:199
E_BLOCK_HARDENED_CLAY
@ E_BLOCK_HARDENED_CLAY
Definition: BlockType.h:191
BlockBigFlower.h
E_BLOCK_DIRT
@ E_BLOCK_DIRT
Definition: BlockType.h:13
BLOCK_FACE_ZP
@ BLOCK_FACE_ZP
Definition: Defines.h:45
E_BLOCK_REDSTONE_REPEATER_OFF
@ E_BLOCK_REDSTONE_REPEATER_OFF
Definition: BlockType.h:108
E_BLOCK_END_BRICKS
@ E_BLOCK_END_BRICKS
Definition: BlockType.h:225
E_BLOCK_REDSTONE_LAMP_OFF
@ E_BLOCK_REDSTONE_LAMP_OFF
Definition: BlockType.h:138
E_BLOCK_BROWN_SHULKER_BOX
@ E_BLOCK_BROWN_SHULKER_BOX
Definition: BlockType.h:250
E_BLOCK_QUARTZ_STAIRS
@ E_BLOCK_QUARTZ_STAIRS
Definition: BlockType.h:173
cBlockGlowstoneHandler
Definition: BlockGlowstone.h:10
cBlockCropsHandler
Common class that takes care of beetroots, carrots, potatoes and wheat.
Definition: BlockCrops.h:13
E_BLOCK_BIRCH_WOOD_STAIRS
@ E_BLOCK_BIRCH_WOOD_STAIRS
Definition: BlockType.h:150
cBlockHandler::OnUpdate
virtual void OnUpdate(cChunkInterface &a_ChunkInterface, cWorldInterface &a_WorldInterface, cBlockPluginInterface &a_BlockPluginInterface, cChunk &a_Chunk, const Vector3i a_RelPos) const
Called when the block gets ticked either by a random tick or by a queued tick.
Definition: BlockHandler.cpp:459
E_BLOCK_PURPUR_SLAB
@ E_BLOCK_PURPUR_SLAB
Definition: BlockType.h:224
E_BLOCK_CYAN_GLAZED_TERRACOTTA
@ E_BLOCK_CYAN_GLAZED_TERRACOTTA
Definition: BlockType.h:263
BlockChest.h
cWorld
Definition: World.h:47
E_BLOCK_STANDING_BANNER
@ E_BLOCK_STANDING_BANNER
Definition: BlockType.h:195
cBlockPistonHandler
Definition: BlockPiston.h:18
cBlockStairsHandler
Definition: BlockStairs.h:10
BlockSignPost.h
cBlockFurnaceHandler
Definition: BlockFurnace.h:9
cBlockCommandBlockHandler
Definition: BlockCommandBlock.h:10
BlockNetherrack.h
E_BLOCK_BONE_BLOCK
@ E_BLOCK_BONE_BLOCK
Definition: BlockType.h:235
cBlockSlimeHandler
Definition: BlockSlime.h:9
cDefaultBlockEntityHandler
Definition: BlockEntity.h:51
E_BLOCK_LEAVES
@ E_BLOCK_LEAVES
Definition: BlockType.h:28
cBlockBookShelfHandler
Definition: BlockBookShelf.h:9
BlockQuartz.h
cBlockHopperHandler
Definition: BlockHopper.h:10
E_BLOCK_TRIPWIRE
@ E_BLOCK_TRIPWIRE
Definition: BlockType.h:147
cBlockDirtHandler
Definition: BlockDirt.h:10
cBlockLeverHandler
Definition: BlockLever.h:9
cBlockRedstoneOreHandler
Definition: BlockRedstoneOre.h:11
E_BLOCK_GLOWSTONE
@ E_BLOCK_GLOWSTONE
Definition: BlockType.h:104
BlockMobHead.h
E_BLOCK_SPONGE
@ E_BLOCK_SPONGE
Definition: BlockType.h:29
E_BLOCK_STATIONARY_WATER
@ E_BLOCK_STATIONARY_WATER
Definition: BlockType.h:19
cBlockPluginInterface
This interface is used to decouple block handlers from the cPluginManager dependency through cWorld.
Definition: BlockPluginInterface.h:27
cBlockTallGrassHandler
Handles the grass that is 1 block tall.
Definition: BlockTallGrass.h:12
E_BLOCK_GOLD_ORE
@ E_BLOCK_GOLD_ORE
Definition: BlockType.h:24
E_BLOCK_MYCELIUM
@ E_BLOCK_MYCELIUM
Definition: BlockType.h:125
BlockPluginInterface.h
cBlockTripwireHookHandler
Definition: BlockTripwireHook.h:10
E_BLOCK_HOPPER
@ E_BLOCK_HOPPER
Definition: BlockType.h:171
BlockDeadBush.h
BlockPackedIce.h
E_BLOCK_ACACIA_FENCE
@ E_BLOCK_ACACIA_FENCE
Definition: BlockType.h:211
cChunkDef::IsValidHeight
static bool IsValidHeight(Vector3i a_BlockPosition)
Validates a height-coordinate.
Definition: ChunkDef.h:168
E_BLOCK_TALL_GRASS
@ E_BLOCK_TALL_GRASS
Definition: BlockType.h:41
GetRandomProvider
MTRand & GetRandomProvider()
Returns the current thread's random number source.
Definition: FastRandom.cpp:12
E_BLOCK_GREEN_GLAZED_TERRACOTTA
@ E_BLOCK_GREEN_GLAZED_TERRACOTTA
Definition: BlockType.h:267
E_BLOCK_WOODEN_SLAB
@ E_BLOCK_WOODEN_SLAB
Definition: BlockType.h:141
cItem
Definition: Item.h:36
E_BLOCK_IRON_TRAPDOOR
@ E_BLOCK_IRON_TRAPDOOR
Definition: BlockType.h:186
E_BLOCK_GLASS
@ E_BLOCK_GLASS
Definition: BlockType.h:30
E_BLOCK_MOB_SPAWNER
@ E_BLOCK_MOB_SPAWNER
Definition: BlockType.h:62
E_BLOCK_LIGHT_BLUE_GLAZED_TERRACOTTA
@ E_BLOCK_LIGHT_BLUE_GLAZED_TERRACOTTA
Definition: BlockType.h:257
E_BLOCK_GRAVEL
@ E_BLOCK_GRAVEL
Definition: BlockType.h:23
E_BLOCK_POWERED_RAIL
@ E_BLOCK_POWERED_RAIL
Definition: BlockType.h:37
BlockButton.h
E_BLOCK_VINES
@ E_BLOCK_VINES
Definition: BlockType.h:121
BlockCrops.h
E_BLOCK_PURPUR_STAIRS
@ E_BLOCK_PURPUR_STAIRS
Definition: BlockType.h:222
BlockFire.h
E_BLOCK_DETECTOR_RAIL
@ E_BLOCK_DETECTOR_RAIL
Definition: BlockType.h:38
BlockStone.h
E_BLOCK_CHORUS_PLANT
@ E_BLOCK_CHORUS_PLANT
Definition: BlockType.h:218
BlockCocoaPod.h
E_BLOCK_STONE_SLAB
@ E_BLOCK_STONE_SLAB
Definition: BlockType.h:54
BlockEndPortalFrame.h
E_BLOCK_LADDER
@ E_BLOCK_LADDER
Definition: BlockType.h:78
E_BLOCK_GLASS_PANE
@ E_BLOCK_GLASS_PANE
Definition: BlockType.h:117
cChunkInterface::DoWithChunkAt
bool DoWithChunkAt(Vector3i a_BlockPos, cFunctionRef< bool(cChunk &)> a_Callback)
Definition: ChunkInterface.cpp:14
E_BLOCK_REDSTONE_WIRE
@ E_BLOCK_REDSTONE_WIRE
Definition: BlockType.h:65
E_BLOCK_CHAIN_COMMAND_BLOCK
@ E_BLOCK_CHAIN_COMMAND_BLOCK
Definition: BlockType.h:230
E_BLOCK_STONE_BUTTON
@ E_BLOCK_STONE_BUTTON
Definition: BlockType.h:91
E_BLOCK_SANDSTONE_STAIRS
@ E_BLOCK_SANDSTONE_STAIRS
Definition: BlockType.h:143
E_BLOCK_FARMLAND
@ E_BLOCK_FARMLAND
Definition: BlockType.h:72
E_BLOCK_GRASS
@ E_BLOCK_GRASS
Definition: BlockType.h:12
BlockRedstoneOre.h
BlockBookShelf.h
BlockSeaLantern.h
cBlockHandler::NeighborChanged
static void NeighborChanged(cChunkInterface &a_ChunkInterface, Vector3i a_NeighborPos, eBlockFace a_WhichNeighbor)
Notifies the specified neighbor that the current block has changed.
Definition: BlockHandler.cpp:487
BlockMushroom.h
cBlockHandler::DoesIgnoreBuildCollision
virtual bool DoesIgnoreBuildCollision(const cWorld &a_World, const cItem &a_HeldItem, Vector3i a_Position, NIBBLETYPE a_Meta, eBlockFace a_ClickedBlockFace, bool a_ClickedDirectly) const
Checks if the player can build "inside" this block.
Definition: BlockHandler.cpp:531
E_BLOCK_LAPIS_ORE
@ E_BLOCK_LAPIS_ORE
Definition: BlockType.h:31
BlockPressurePlate.h
E_BLOCK_NETHER_WART
@ E_BLOCK_NETHER_WART
Definition: BlockType.h:130
E_BLOCK_ACACIA_DOOR
@ E_BLOCK_ACACIA_DOOR
Definition: BlockType.h:215
E_BLOCK_HEAVY_WEIGHTED_PRESSURE_PLATE
@ E_BLOCK_HEAVY_WEIGHTED_PRESSURE_PLATE
Definition: BlockType.h:163
E_BLOCK_ACTIVATOR_RAIL
@ E_BLOCK_ACTIVATOR_RAIL
Definition: BlockType.h:174
E_BLOCK_DAYLIGHT_SENSOR
@ E_BLOCK_DAYLIGHT_SENSOR
Definition: BlockType.h:167
cBlockFlowerPotHandler
Definition: BlockFlowerPot.h:8
cItems
This class bridges a vector of cItem for safe access via Lua.
Definition: Item.h:213
cBlockChestHandler
Definition: BlockChest.h:12
E_BLOCK_ORANGE_GLAZED_TERRACOTTA
@ E_BLOCK_ORANGE_GLAZED_TERRACOTTA
Definition: BlockType.h:255
BlockPlanks.h
E_BLOCK_WHITE_GLAZED_TERRACOTTA
@ E_BLOCK_WHITE_GLAZED_TERRACOTTA
Definition: BlockType.h:254
E_BLOCK_CAKE
@ E_BLOCK_CAKE
Definition: BlockType.h:107
UNREACHABLE
#define UNREACHABLE(x)
Definition: Globals.h:285
cBlockNetherrack
Definition: BlockNetherrack.h:10
cBlockSidewaysHandler
Handler for blocks that have 3 orientations (hay bale, log), specified by the upper 2 bits in meta.
Definition: BlockSideways.h:12
E_BLOCK_END_PORTAL
@ E_BLOCK_END_PORTAL
Definition: BlockType.h:134
BlockLadder.h
E_BLOCK_STAINED_GLASS
@ E_BLOCK_STAINED_GLASS
Definition: BlockType.h:110
E_BLOCK_EMERALD_ORE
@ E_BLOCK_EMERALD_ORE
Definition: BlockType.h:144
E_BLOCK_BIRCH_DOOR
@ E_BLOCK_BIRCH_DOOR
Definition: BlockType.h:213
E_BLOCK_LAPIS_BLOCK
@ E_BLOCK_LAPIS_BLOCK
Definition: BlockType.h:32
BlockSand.h
E_BLOCK_PUMPKIN_STEM
@ E_BLOCK_PUMPKIN_STEM
Definition: BlockType.h:119
E_BLOCK_PLANKS
@ E_BLOCK_PLANKS
Definition: BlockType.h:15
E_BLOCK_NUMBER_OF_TYPES
@ E_BLOCK_NUMBER_OF_TYPES
Number of individual (different) blocktypes.
Definition: BlockType.h:277
E_BLOCK_DISPENSER
@ E_BLOCK_DISPENSER
Definition: BlockType.h:33
BlockDropSpenser.h
E_BLOCK_JUNGLE_DOOR
@ E_BLOCK_JUNGLE_DOOR
Definition: BlockType.h:214
E_BLOCK_CARPET
@ E_BLOCK_CARPET
Definition: BlockType.h:190
BLOCKTYPE
unsigned char BLOCKTYPE
The datatype used by blockdata.
Definition: ChunkDef.h:41
cBlockHandler::Check
void Check(cChunkInterface &ChunkInterface, cBlockPluginInterface &a_PluginInterface, Vector3i a_RelPos, cChunk &a_Chunk) const
Called when one of the neighbors gets set; equivalent to MC block update.
Definition: BlockHandler.cpp:564
E_BLOCK_PRISMARINE_BLOCK
@ E_BLOCK_PRISMARINE_BLOCK
Definition: BlockType.h:187
BlockGlowstone.h
E_BLOCK_RED_GLAZED_TERRACOTTA
@ E_BLOCK_RED_GLAZED_TERRACOTTA
Definition: BlockType.h:268
E_BLOCK_PACKED_ICE
@ E_BLOCK_PACKED_ICE
Definition: BlockType.h:193
E_BLOCK_FIRE
@ E_BLOCK_FIRE
Definition: BlockType.h:61
BlockDefaultBlock.h
E_BLOCK_SPRUCE_FENCE_GATE
@ E_BLOCK_SPRUCE_FENCE_GATE
Definition: BlockType.h:202
E_BLOCK_SEA_LANTERN
@ E_BLOCK_SEA_LANTERN
Definition: BlockType.h:188
BlockFluid.h
E_BLOCK_PURPLE_GLAZED_TERRACOTTA
@ E_BLOCK_PURPLE_GLAZED_TERRACOTTA
Definition: BlockType.h:264
E_BLOCK_COCOA_POD
@ E_BLOCK_COCOA_POD
Definition: BlockType.h:142
E_BLOCK_TORCH
@ E_BLOCK_TORCH
Definition: BlockType.h:60
E_BLOCK_TNT
@ E_BLOCK_TNT
Definition: BlockType.h:56
BlockComparator.h
E_BLOCK_REPEATING_COMMAND_BLOCK
@ E_BLOCK_REPEATING_COMMAND_BLOCK
Definition: BlockType.h:229
E_BLOCK_STICKY_PISTON
@ E_BLOCK_STICKY_PISTON
Definition: BlockType.h:39
BlockFence.h
BlockVines.h
BlockEntity.h
E_BLOCK_HEAD
@ E_BLOCK_HEAD
Definition: BlockType.h:159
E_BLOCK_SPRUCE_WOOD_STAIRS
@ E_BLOCK_SPRUCE_WOOD_STAIRS
Definition: BlockType.h:149
E_BLOCK_BLACK_GLAZED_TERRACOTTA
@ E_BLOCK_BLACK_GLAZED_TERRACOTTA
Definition: BlockType.h:269
E_BLOCK_BLUE_GLAZED_TERRACOTTA
@ E_BLOCK_BLUE_GLAZED_TERRACOTTA
Definition: BlockType.h:265
E_BLOCK_STATIONARY_LAVA
@ E_BLOCK_STATIONARY_LAVA
Definition: BlockType.h:21
E_BLOCK_COAL_ORE
@ E_BLOCK_COAL_ORE
Definition: BlockType.h:26
E_BLOCK_NETHER_QUARTZ_ORE
@ E_BLOCK_NETHER_QUARTZ_ORE
Definition: BlockType.h:170
cBlockFenceHandler
Definition: BlockFence.h:13
cBlockButtonHandler
Definition: BlockButton.h:12
BlockEnchantingTable.h
BlockCactus.h
E_BLOCK_YELLOW_SHULKER_BOX
@ E_BLOCK_YELLOW_SHULKER_BOX
Definition: BlockType.h:242
cBlockMelonHandler
Definition: BlockMelon.h:10
E_BLOCK_PISTON_MOVED_BLOCK
@ E_BLOCK_PISTON_MOVED_BLOCK
Definition: BlockType.h:46
cBlockRedstoneRepeaterHandler
Definition: BlockRedstoneRepeater.h:14
E_BLOCK_REDSTONE_ORE
@ E_BLOCK_REDSTONE_ORE
Definition: BlockType.h:87
E_BLOCK_GREEN_SHULKER_BOX
@ E_BLOCK_GREEN_SHULKER_BOX
Definition: BlockType.h:251
eBlockFace
eBlockFace
Block face constants, used in PlayerDigging and PlayerBlockPlacement packets and bbox collision calc.
Definition: Defines.h:37
cBlockLavaHandler
Definition: BlockFluid.h:45
cBlockCobWebHandler
Definition: BlockCobWeb.h:12
cChunk
Definition: Chunk.h:35
cBlockWallSignHandler
Definition: BlockWallSign.h:11
BlockRail.h
E_BLOCK_CROPS
@ E_BLOCK_CROPS
Definition: BlockType.h:71
E_BLOCK_BIRCH_FENCE_GATE
@ E_BLOCK_BIRCH_FENCE_GATE
Definition: BlockType.h:203
E_BLOCK_END_STONE
@ E_BLOCK_END_STONE
Definition: BlockType.h:136
cBlockNoteBlockHandler
Definition: BlockNoteBlock.h:11
E_BLOCK_CONCRETE_POWDER
@ E_BLOCK_CONCRETE_POWDER
Definition: BlockType.h:271
cBlockSlabHandler
Definition: BlockSlab.h:20
E_BLOCK_RED_SHULKER_BOX
@ E_BLOCK_RED_SHULKER_BOX
Definition: BlockType.h:252
BLOCK_FACE_ZM
@ BLOCK_FACE_ZM
Definition: Defines.h:44
E_BLOCK_BROWN_GLAZED_TERRACOTTA
@ E_BLOCK_BROWN_GLAZED_TERRACOTTA
Definition: BlockType.h:266
cBlockFlowerHandler
Definition: BlockFlower.h:10
cBlockCauldronHandler
Definition: BlockCauldron.h:11
BlockAnvil.h
BlockSnow.h
E_BLOCK_PUMPKIN
@ E_BLOCK_PUMPKIN
Definition: BlockType.h:101
cBlockMyceliumHandler
Definition: BlockMycelium.h:10
BlockWorkbench.h
cBlockSeaLanternHandler
Definition: BlockSeaLantern.h:10
cBlockHandler::OnNeighborChanged
virtual void OnNeighborChanged(cChunkInterface &a_ChunkInterface, Vector3i a_BlockPos, eBlockFace a_WhichNeighbor) const
Called when a direct neighbor of this block has been changed.
Definition: BlockHandler.cpp:473
cBlockConcretePowderHandler
Definition: BlockConcretePowder.h:10
cBlockInfo::IsSolid
static bool IsSolid(BLOCKTYPE Block)
Is this block solid (player cannot walk through)?
Definition: BlockInfo.cpp:892
E_BLOCK_NETHERRACK
@ E_BLOCK_NETHERRACK
Definition: BlockType.h:102
E_BLOCK_ACACIA_FENCE_GATE
@ E_BLOCK_ACACIA_FENCE_GATE
Definition: BlockType.h:206
BlockSideways.h
E_BLOCK_MAGMA
@ E_BLOCK_MAGMA
Definition: BlockType.h:232
E_BLOCK_CARROTS
@ E_BLOCK_CARROTS
Definition: BlockType.h:156
E_BLOCK_COBBLESTONE_WALL
@ E_BLOCK_COBBLESTONE_WALL
Definition: BlockType.h:154
cBlockPackedIceHandler
Definition: BlockPackedIce.h:10
cBlockGlazedTerracottaHandler
Definition: BlockGlazedTerracotta.h:10
E_BLOCK_AIR
@ E_BLOCK_AIR
Definition: BlockType.h:10
BlockTripwire.h
cItem::m_ItemType
short m_ItemType
Definition: Item.h:163
E_BLOCK_STAINED_GLASS_PANE
@ E_BLOCK_STAINED_GLASS_PANE
Definition: BlockType.h:179
BlockMycelium.h
E_BLOCK_PURPUR_BLOCK
@ E_BLOCK_PURPUR_BLOCK
Definition: BlockType.h:220
E_BLOCK_BLACK_SHULKER_BOX
@ E_BLOCK_BLACK_SHULKER_BOX
Definition: BlockType.h:253
E_BLOCK_DRAGON_EGG
@ E_BLOCK_DRAGON_EGG
Definition: BlockType.h:137
E_BLOCK_YELLOW_FLOWER
@ E_BLOCK_YELLOW_FLOWER
Definition: BlockType.h:283
E_BLOCK_COBWEB
@ E_BLOCK_COBWEB
Definition: BlockType.h:40
BlockPumpkin.h
BlockRedstoneRepeater.h
E_BLOCK_FROSTED_ICE
@ E_BLOCK_FROSTED_ICE
Definition: BlockType.h:231
E_BLOCK_GOLD_BLOCK
@ E_BLOCK_GOLD_BLOCK
Definition: BlockType.h:51
UNUSED
#define UNUSED
Definition: Globals.h:72
cBlockSpongeHandler
Definition: BlockSponge.h:10
Vector3::y
T y
Definition: Vector3.h:17
cEnchantments::GetLevel
unsigned int GetLevel(int a_EnchantmentID) const
Returns the level for the specified enchantment; 0 if not stored.
Definition: Enchantments.cpp:112
E_BLOCK_SPRUCE_FENCE
@ E_BLOCK_SPRUCE_FENCE
Definition: BlockType.h:207
E_BLOCK_FENCE
@ E_BLOCK_FENCE
Definition: BlockType.h:100
E_BLOCK_BEACON
@ E_BLOCK_BEACON
Definition: BlockType.h:153
E_BLOCK_NETHER_WART_BLOCK
@ E_BLOCK_NETHER_WART_BLOCK
Definition: BlockType.h:233
E_BLOCK_GRASS_PATH
@ E_BLOCK_GRASS_PATH
Definition: BlockType.h:227
E_BLOCK_LIME_SHULKER_BOX
@ E_BLOCK_LIME_SHULKER_BOX
Definition: BlockType.h:243
cBlockIceHandler
Definition: BlockIce.h:10
cBlockDropSpenserHandler
Definition: BlockDropSpenser.h:14
E_BLOCK_DARK_OAK_DOOR
@ E_BLOCK_DARK_OAK_DOOR
Definition: BlockType.h:216
cBlockAirHandler
Definition: BlockAir.h:8
E_BLOCK_PURPLE_SHULKER_BOX
@ E_BLOCK_PURPLE_SHULKER_BOX
Definition: BlockType.h:248
cBlockFireHandler
Definition: BlockFire.h:10
cBlockCakeHandler
Definition: BlockCake.h:9
cBlockPressurePlateHandler
Definition: BlockPressurePlate.h:9
BlockFlower.h
cBlockMobSpawnerHandler
Definition: BlockMobSpawner.h:11
cBlockSandHandler
Definition: BlockSand.h:10
BlockHugeMushroom.h
E_BLOCK_CHEST
@ E_BLOCK_CHEST
Definition: BlockType.h:64
E_BLOCK_DIAMOND_BLOCK
@ E_BLOCK_DIAMOND_BLOCK
Definition: BlockType.h:67
E_BLOCK_SNOW
@ E_BLOCK_SNOW
Definition: BlockType.h:92
cBlockFarmlandHandler
Definition: BlockFarmland.h:22
cBlockBrewingStandHandler
Definition: BlockBrewingStand.h:10
E_BLOCK_CLAY
@ E_BLOCK_CLAY
Definition: BlockType.h:96
E_BLOCK_SANDSTONE
@ E_BLOCK_SANDSTONE
Definition: BlockType.h:34
cChunkDef::RelativeToAbsolute
static Vector3i RelativeToAbsolute(Vector3i a_RelBlockPosition, cChunkCoords a_ChunkCoords)
Converts relative block coordinates into absolute coordinates with a known chunk location.
Definition: ChunkDef.h:157
E_BLOCK_JUNGLE_FENCE
@ E_BLOCK_JUNGLE_FENCE
Definition: BlockType.h:209
cBlockLilypadHandler
Definition: BlockLilypad.h:10
BLOCK_FACE_XP
@ BLOCK_FACE_XP
Definition: Defines.h:41
cBlockGlowingRedstoneOreHandler
Definition: BlockRedstoneOre.h:63
E_BLOCK_PURPUR_PILLAR
@ E_BLOCK_PURPUR_PILLAR
Definition: BlockType.h:221
cBlockHandler::GetPlacementCollisionBox
virtual cBoundingBox GetPlacementCollisionBox(BLOCKTYPE a_XM, BLOCKTYPE a_XP, BLOCKTYPE a_YM, BLOCKTYPE a_YP, BLOCKTYPE a_ZM, BLOCKTYPE a_ZP) const
Returns the relative bounding box that must be entity-free in order for the block to be placed.
Definition: BlockHandler.cpp:550
cBlockClothHandler
Definition: BlockCloth.h:10
cBlockVinesHandler
Definition: BlockVines.h:9
E_BLOCK_WOODEN_PRESSURE_PLATE
@ E_BLOCK_WOODEN_PRESSURE_PLATE
Definition: BlockType.h:86
BlockTNT.h
Vector3< int >
E_BLOCK_LAVA
@ E_BLOCK_LAVA
Definition: BlockType.h:20
E_BLOCK_RED_NETHER_BRICK
@ E_BLOCK_RED_NETHER_BRICK
Definition: BlockType.h:234
E_BLOCK_QUARTZ_BLOCK
@ E_BLOCK_QUARTZ_BLOCK
Definition: BlockType.h:172
cBlockNetherWartHandler
Definition: BlockNetherWart.h:11
cBlockSignPostHandler
Definition: BlockSignPost.h:11
E_BLOCK_ENCHANTMENT_TABLE
@ E_BLOCK_ENCHANTMENT_TABLE
Definition: BlockType.h:131
BlockConcretePowder.h
E_BLOCK_BLUE_SHULKER_BOX
@ E_BLOCK_BLUE_SHULKER_BOX
Definition: BlockType.h:249
E_BLOCK_SAPLING
@ E_BLOCK_SAPLING
Definition: BlockType.h:16
BlockFenceGate.h
E_BLOCK_RED_SANDSTONE
@ E_BLOCK_RED_SANDSTONE
Definition: BlockType.h:198
E_BLOCK_BEDROCK
@ E_BLOCK_BEDROCK
Definition: BlockType.h:17
BlockBed.h
BlockStems.h
E_BLOCK_BEETROOTS
@ E_BLOCK_BEETROOTS
Definition: BlockType.h:226
E_BLOCK_DROPPER
@ E_BLOCK_DROPPER
Definition: BlockType.h:176
E_BLOCK_LILY_PAD
@ E_BLOCK_LILY_PAD
Definition: BlockType.h:126
E_BLOCK_STRUCTURE_BLOCK
@ E_BLOCK_STRUCTURE_BLOCK
Definition: BlockType.h:273
E_BLOCK_NEW_LEAVES
@ E_BLOCK_NEW_LEAVES
Definition: BlockType.h:180
E_BLOCK_ACACIA_WOOD_STAIRS
@ E_BLOCK_ACACIA_WOOD_STAIRS
Definition: BlockType.h:182
BlockEnderChest.h
BlockSlab.h
E_BLOCK_END_PORTAL_FRAME
@ E_BLOCK_END_PORTAL_FRAME
Definition: BlockType.h:135
cBlockGrassHandler
Definition: BlockGrass.h:13
cBlockDaylightSensorHandler
Definition: BlockDaylightSensor.h:10
cBlockBigFlowerHandler
Definition: BlockBigFlower.h:12
cBlockHandler::ToolFortuneLevel
static unsigned char ToolFortuneLevel(const cItem *a_Tool)
Returns the fortune level of a tool, if it is a valid tool.
Definition: BlockHandler.cpp:602
cBlockPistonHeadHandler
Definition: BlockPiston.h:145
E_BLOCK_REDSTONE_REPEATER_ON
@ E_BLOCK_REDSTONE_REPEATER_ON
Definition: BlockType.h:109
E_BLOCK_OAK_DOOR
@ E_BLOCK_OAK_DOOR
Definition: BlockType.h:77
cBlockStemsHandler
Handler for stems from which produce grows in an adjacent block (melon, pumpkin) after it becomes rip...
Definition: BlockStems.h:14
E_BLOCK_BROWN_MUSHROOM
@ E_BLOCK_BROWN_MUSHROOM
Definition: BlockType.h:49
E_BLOCK_WOOL
@ E_BLOCK_WOOL
Definition: BlockType.h:45
BlockRedstoneLamp.h
cBlockLeavesHandler
Definition: BlockLeaves.h:17
cBlockRedstoneLampHandler
Definition: BlockRedstoneLamp.h:10
BlockTorch.h
cBlockTripwireHandler
Definition: BlockTripwire.h:10
E_BLOCK_HAY_BALE
@ E_BLOCK_HAY_BALE
Definition: BlockType.h:189
E_BLOCK_JUNGLE_FENCE_GATE
@ E_BLOCK_JUNGLE_FENCE_GATE
Definition: BlockType.h:204
cBlockHandler::IsInsideBlock
virtual bool IsInsideBlock(const Vector3d a_RelPosition, const NIBBLETYPE a_BlockMeta) const
Tests if a_RelPosition is inside the block, where a_RelPosition is relative to the origin of the bloc...
Definition: BlockHandler.cpp:540
E_BLOCK_JACK_O_LANTERN
@ E_BLOCK_JACK_O_LANTERN
Definition: BlockType.h:106
E_BLOCK_STONE_BRICK_STAIRS
@ E_BLOCK_STONE_BRICK_STAIRS
Definition: BlockType.h:124
BlockGrass.h
E_BLOCK_RED_ROSE
@ E_BLOCK_RED_ROSE
Definition: BlockType.h:284
BlockLilypad.h
cBlockFenceGateHandler
Definition: BlockFenceGate.h:11