summaryrefslogtreecommitdiffstats
path: root/source/cBlockToPickup.cpp
diff options
context:
space:
mode:
authorcedeel@gmail.com <cedeel@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2012-06-14 15:06:06 +0200
committercedeel@gmail.com <cedeel@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2012-06-14 15:06:06 +0200
commit92c59963f82f81aa3202657e7fdbb2592924ede3 (patch)
treeb7eb2474528a4998fa102e3ec9119b908cee08b4 /source/cBlockToPickup.cpp
parentAdded HOOK_WEATHER_CHANGE. (diff)
downloadcuberite-92c59963f82f81aa3202657e7fdbb2592924ede3.tar
cuberite-92c59963f82f81aa3202657e7fdbb2592924ede3.tar.gz
cuberite-92c59963f82f81aa3202657e7fdbb2592924ede3.tar.bz2
cuberite-92c59963f82f81aa3202657e7fdbb2592924ede3.tar.lz
cuberite-92c59963f82f81aa3202657e7fdbb2592924ede3.tar.xz
cuberite-92c59963f82f81aa3202657e7fdbb2592924ede3.tar.zst
cuberite-92c59963f82f81aa3202657e7fdbb2592924ede3.zip
Diffstat (limited to 'source/cBlockToPickup.cpp')
-rw-r--r--source/cBlockToPickup.cpp646
1 files changed, 323 insertions, 323 deletions
diff --git a/source/cBlockToPickup.cpp b/source/cBlockToPickup.cpp
index ceda2b115..8089320e7 100644
--- a/source/cBlockToPickup.cpp
+++ b/source/cBlockToPickup.cpp
@@ -1,323 +1,323 @@
-
-#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules
-
-#include "cBlockToPickup.h"
-#include "Defines.h"
-#include "BlockID.h"
-#include "MersenneTwister.h"
-
-
-
-
-
-static void AddRandomDrop(cItems & a_Drops, MTRand & r1, int a_OneInNChance, ENUM_ITEM_ID a_ItemID)
-{
- if ((r1.randInt(16 * a_OneInNChance - 1) / 16) != 0)
- {
- return;
- }
- a_Drops.push_back(cItem(a_ItemID, 1));
-}
-
-
-
-
-
-void cBlockToPickup::ToPickup(BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta, const cItem & a_UsedItem, cItems & a_Drops)
-{
- MTRand r1;
-
- switch (a_BlockType)
- {
- // Blocks that always drop themselves as the only item, no matter what tool; copy damage from meta:
- case E_BLOCK_LOG:
- case E_BLOCK_PLANKS:
- case E_BLOCK_WOOL:
- {
- a_Drops.push_back(cItem((ENUM_ITEM_ID)a_BlockType, 1, a_BlockMeta));
- return;
- }
-
-
- // Blocks that always drop themselves as the only item, no matter what tool, set damage value zero:
- case E_BLOCK_DIRT:
- case E_BLOCK_SAPLING:
- case E_BLOCK_SAND:
- case E_BLOCK_TORCH:
- case E_BLOCK_YELLOW_FLOWER:
- case E_BLOCK_RED_ROSE:
- case E_BLOCK_BROWN_MUSHROOM:
- case E_BLOCK_RED_MUSHROOM:
- case E_BLOCK_TNT:
- case E_BLOCK_CRAFTING_TABLE:
- case E_BLOCK_FURNACE:
- case E_BLOCK_CACTUS:
- case E_BLOCK_REDSTONE_TORCH_OFF:
- case E_BLOCK_POWERED_RAIL:
- case E_BLOCK_DETECTOR_RAIL:
- case E_BLOCK_RAIL:
- case E_BLOCK_LADDER:
- case E_BLOCK_LEVER:
- case E_BLOCK_WOODEN_PRESSURE_PLATE:
- case E_BLOCK_STONE_BUTTON:
- case E_BLOCK_JUKEBOX:
- case E_BLOCK_FENCE:
- case E_BLOCK_FENCE_GATE:
- case E_BLOCK_PUMPKIN:
- case E_BLOCK_NETHERRACK:
- case E_BLOCK_SOULSAND:
- case E_BLOCK_JACK_O_LANTERN:
- case E_BLOCK_TRAPDOOR:
- {
- a_Drops.push_back(cItem((ENUM_ITEM_ID)a_BlockType, 1, 0));
- return;
- }
-
-
- // Blocks that always drop a single item, no matter what tool:
- case E_BLOCK_SIGN_POST:
- case E_BLOCK_WALLSIGN: a_Drops.push_back(cItem(E_ITEM_SIGN, 1)); return;
- case E_BLOCK_REDSTONE_WIRE: a_Drops.push_back(cItem(E_ITEM_REDSTONE_DUST, 1)); return;
- case E_BLOCK_GLOWSTONE: a_Drops.push_back(cItem(E_ITEM_GLOWSTONE_DUST, 1)); return;
- case E_BLOCK_REDSTONE_REPEATER_OFF:
- case E_BLOCK_REDSTONE_REPEATER_ON: a_Drops.push_back(cItem(E_ITEM_REDSTONE_REPEATER, 1)); return;
- case E_BLOCK_COBWEB: a_Drops.push_back(cItem(E_ITEM_STRING, 1)); return;
- case E_BLOCK_FARMLAND:
- case E_BLOCK_GRASS: a_Drops.push_back(cItem(E_ITEM_DIRT, 1)); return;
- case E_BLOCK_LIT_FURNACE: a_Drops.push_back(cItem(E_ITEM_FURNACE, 1)); return;
- case E_BLOCK_SUGARCANE: a_Drops.push_back(cItem(E_ITEM_SUGARCANE, 1)); return;
- case E_BLOCK_PUMPKIN_STEM: a_Drops.push_back(cItem(E_ITEM_PUMPKIN_SEEDS, 1)); return;
- case E_BLOCK_MELON_STEM: a_Drops.push_back(cItem(E_ITEM_MELON_SEEDS, 1)); return;
-
-
- // Doors seem to need their meta set to 1
- case E_BLOCK_WOODEN_DOOR: a_Drops.push_back(cItem(E_ITEM_WOODEN_DOOR, 1, 1)); return;
- case E_BLOCK_IRON_DOOR: a_Drops.push_back(cItem(E_ITEM_IRON_DOOR, 1, 1)); return;
-
-
- ////////////////////////
- // Ores:
-
- // Coal ore requires a pickaxe:
- case E_BLOCK_COAL_ORE:
- {
- if (ItemCategory::IsPickaxe(a_UsedItem.m_ItemID))
- {
- a_Drops.push_back(cItem(E_ITEM_COAL, 1));
- }
- return;
- }
-
- // Iron ore requires a stone or better pickaxe:
- case E_BLOCK_IRON_ORE:
- {
- if (
- (a_UsedItem.m_ItemID == E_ITEM_STONE_PICKAXE) ||
- (a_UsedItem.m_ItemID == E_ITEM_IRON_PICKAXE) ||
- (a_UsedItem.m_ItemID == E_ITEM_DIAMOND_PICKAXE)
- )
- {
- a_Drops.push_back(cItem(E_ITEM_IRON_ORE, 1));
- }
- return;
- }
-
- // Gold and diamond ores require an iron or better pickaxe:
- case E_BLOCK_GOLD_ORE:
- case E_BLOCK_DIAMOND_ORE:
- {
- if (
- (a_UsedItem.m_ItemID == E_ITEM_IRON_PICKAXE) ||
- (a_UsedItem.m_ItemID == E_ITEM_DIAMOND_PICKAXE)
- )
- {
- a_Drops.push_back(cItem((ENUM_ITEM_ID)a_BlockType, 1));
- }
- return;
- }
-
- // Obsidian require a diamond pickaxe:
- case E_BLOCK_OBSIDIAN:
- {
- if (a_UsedItem.m_ItemID == E_ITEM_DIAMOND_PICKAXE)
- {
- a_Drops.push_back(cItem((ENUM_ITEM_ID)a_BlockType, 1));
- }
- return;
- }
-
- // Redstone requires an iron or better pickaxe:
- case E_BLOCK_REDSTONE_ORE_GLOWING:
- case E_BLOCK_REDSTONE_ORE:
- {
- if (
- (a_UsedItem.m_ItemID == E_ITEM_IRON_PICKAXE) ||
- (a_UsedItem.m_ItemID == E_ITEM_DIAMOND_PICKAXE)
- )
- {
- a_Drops.push_back(cItem(E_ITEM_REDSTONE_DUST, 4 + (short)r1.randInt(1)));
- }
- return;
- }
-
- // Lapis ore requires a stone or better pickaxe:
- case E_BLOCK_LAPIS_ORE:
- {
- if (
- (a_UsedItem.m_ItemID == E_ITEM_STONE_PICKAXE) ||
- (a_UsedItem.m_ItemID == E_ITEM_IRON_PICKAXE) ||
- (a_UsedItem.m_ItemID == E_ITEM_GOLD_PICKAXE) ||
- (a_UsedItem.m_ItemID == E_ITEM_DIAMOND_PICKAXE)
- )
- {
- a_Drops.push_back(cItem(E_ITEM_DYE, 4 + (short)r1.randInt(4), E_META_DYE_BLUE));
- }
- return;
- }
-
-
- ////////////////////////
- // Resource blocks:
-
- // Iron and lapis blocks require a stone or better pickaxe:
- case E_BLOCK_IRON_BLOCK:
- case E_BLOCK_LAPIS_BLOCK:
- {
- if (
- (a_UsedItem.m_ItemID == E_ITEM_STONE_PICKAXE) ||
- (a_UsedItem.m_ItemID == E_ITEM_IRON_PICKAXE) ||
- (a_UsedItem.m_ItemID == E_ITEM_DIAMOND_PICKAXE)
- )
- {
- a_Drops.push_back(cItem((ENUM_ITEM_ID)a_BlockType, 1));
- }
- return;
- }
-
- // Diamond and gold blocks require an iron or better pickaxe:
- case E_BLOCK_DIAMOND_BLOCK:
- {
- if (
- (a_UsedItem.m_ItemID == E_ITEM_IRON_PICKAXE) ||
- (a_UsedItem.m_ItemID == E_ITEM_DIAMOND_PICKAXE)
- )
- {
- a_Drops.push_back(cItem((ENUM_ITEM_ID)a_BlockType, 1));
- }
- }
-
-
- // These blocks require a pickaxe to drop themselves:
- case E_BLOCK_COBBLESTONE:
- case E_BLOCK_BRICK:
- case E_BLOCK_NETHER_BRICK:
- case E_BLOCK_MOSSY_COBBLESTONE:
- case E_BLOCK_STONE_SLAB:
- case E_BLOCK_COBBLESTONE_STAIRS:
- case E_BLOCK_STONE_BRICK_STAIRS:
- case E_BLOCK_NETHER_BRICK_STAIRS:
- case E_BLOCK_SANDSTONE_STAIRS:
- case E_BLOCK_SANDSTONE:
- case E_BLOCK_STONE_PRESSURE_PLATE:
- {
- if (ItemCategory::IsPickaxe(a_UsedItem.m_ItemID))
- {
- a_Drops.push_back(cItem((ENUM_ITEM_ID)a_BlockType, 1));
- }
- return;
- }
-
-
- // Stone requires a pickaxe to drop cobblestone:
- case E_BLOCK_STONE:
- {
- if (ItemCategory::IsPickaxe(a_UsedItem.m_ItemID))
- {
- a_Drops.push_back(cItem(E_ITEM_COBBLESTONE, 1));
- }
- return;
- }
-
-
- // Snow requires a shovel to harvest:
- case E_BLOCK_SNOW:
- {
- if (ItemCategory::IsShovel(a_UsedItem.m_ItemID))
- {
- a_Drops.push_back(cItem(E_ITEM_SNOWBALL, 1));
- }
- return;
- }
-
-
- // Leaves require shears for harvesting and have a chance of dropping a sapling and a red apple:
- case E_BLOCK_LEAVES:
- {
- if (a_UsedItem.m_ItemID == E_ITEM_SHEARS)
- {
- a_Drops.push_back(cItem(E_ITEM_LEAVES, 1));
- }
- else
- {
- AddRandomDrop(a_Drops, r1, 5, E_ITEM_SAPLING);
- AddRandomDrop(a_Drops, r1, 200, E_ITEM_APPLE);
- }
- return;
- }
-
-
- // Crops drop a wheat and possibly another seeds when ripe; always drop at least a single seed
- case E_BLOCK_CROPS:
- {
- if (a_BlockMeta == 7)
- {
- AddRandomDrop(a_Drops, r1, 3, E_ITEM_SEEDS);
- a_Drops.push_back(cItem(E_ITEM_WHEAT, 1));
- }
- a_Drops.push_back(cItem(E_ITEM_SEEDS, 1));
- return;
- }
-
-
- // Vines drop only with shears, otherwise they are destroyed
- case E_BLOCK_VINES:
- {
- if (a_UsedItem.m_ItemID == E_ITEM_SHEARS)
- {
- a_Drops.push_back(cItem(E_ITEM_VINES, 1));
- }
- return;
- }
-
-
- // Snow drops only when using a shovel
- case E_BLOCK_SNOW_BLOCK:
- {
- if (ItemCategory::IsShovel(a_UsedItem.m_ItemID))
- {
- a_Drops.push_back(cItem(E_ITEM_SNOWBALL, 4, 0)); return;
- }
- return;
- }
-
-
- // Random multi-drop blocks:
- case E_BLOCK_TALL_GRASS: a_Drops.push_back(cItem(E_ITEM_SEEDS, (short)r1.randInt(3) / 2, 1)); return;
- case E_BLOCK_MELON: a_Drops.push_back(cItem(E_ITEM_MELON_SLICE, 3 + (short)r1.randInt(2), 1)); return;
-
-
- // Fixed multi-drop blocks:
- case E_BLOCK_DOUBLE_STONE_SLAB: a_Drops.push_back(cItem(E_ITEM_STONE_SLAB, 2, 0)); return;
- case E_BLOCK_DOUBLE_WOODEN_SLAB: a_Drops.push_back(cItem(E_ITEM_STEP, 2, 0)); return;
-
- default:
- {
- return;
- }
- } // switch (a_BlockType)
-}
-
-
-
-
-
+
+#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules
+
+#include "cBlockToPickup.h"
+#include "Defines.h"
+#include "BlockID.h"
+#include "MersenneTwister.h"
+
+
+
+
+
+static void AddRandomDrop(cItems & a_Drops, MTRand & r1, int a_OneInNChance, ENUM_ITEM_ID a_ItemID)
+{
+ if ((r1.randInt(16 * a_OneInNChance - 1) / 16) != 0)
+ {
+ return;
+ }
+ a_Drops.push_back(cItem(a_ItemID, 1));
+}
+
+
+
+
+
+void cBlockToPickup::ToPickup(BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta, const cItem & a_UsedItem, cItems & a_Drops)
+{
+ MTRand r1;
+
+ switch (a_BlockType)
+ {
+ // Blocks that always drop themselves as the only item, no matter what tool; copy damage from meta:
+ case E_BLOCK_LOG:
+ case E_BLOCK_PLANKS:
+ case E_BLOCK_WOOL:
+ {
+ a_Drops.push_back(cItem((ENUM_ITEM_ID)a_BlockType, 1, a_BlockMeta));
+ return;
+ }
+
+
+ // Blocks that always drop themselves as the only item, no matter what tool, set damage value zero:
+ case E_BLOCK_DIRT:
+ case E_BLOCK_SAPLING:
+ case E_BLOCK_SAND:
+ case E_BLOCK_TORCH:
+ case E_BLOCK_YELLOW_FLOWER:
+ case E_BLOCK_RED_ROSE:
+ case E_BLOCK_BROWN_MUSHROOM:
+ case E_BLOCK_RED_MUSHROOM:
+ case E_BLOCK_TNT:
+ case E_BLOCK_CRAFTING_TABLE:
+ case E_BLOCK_FURNACE:
+ case E_BLOCK_CACTUS:
+ case E_BLOCK_REDSTONE_TORCH_OFF:
+ case E_BLOCK_POWERED_RAIL:
+ case E_BLOCK_DETECTOR_RAIL:
+ case E_BLOCK_RAIL:
+ case E_BLOCK_LADDER:
+ case E_BLOCK_LEVER:
+ case E_BLOCK_WOODEN_PRESSURE_PLATE:
+ case E_BLOCK_STONE_BUTTON:
+ case E_BLOCK_JUKEBOX:
+ case E_BLOCK_FENCE:
+ case E_BLOCK_FENCE_GATE:
+ case E_BLOCK_PUMPKIN:
+ case E_BLOCK_NETHERRACK:
+ case E_BLOCK_SOULSAND:
+ case E_BLOCK_JACK_O_LANTERN:
+ case E_BLOCK_TRAPDOOR:
+ {
+ a_Drops.push_back(cItem((ENUM_ITEM_ID)a_BlockType, 1, 0));
+ return;
+ }
+
+
+ // Blocks that always drop a single item, no matter what tool:
+ case E_BLOCK_SIGN_POST:
+ case E_BLOCK_WALLSIGN: a_Drops.push_back(cItem(E_ITEM_SIGN, 1)); return;
+ case E_BLOCK_REDSTONE_WIRE: a_Drops.push_back(cItem(E_ITEM_REDSTONE_DUST, 1)); return;
+ case E_BLOCK_GLOWSTONE: a_Drops.push_back(cItem(E_ITEM_GLOWSTONE_DUST, 1)); return;
+ case E_BLOCK_REDSTONE_REPEATER_OFF:
+ case E_BLOCK_REDSTONE_REPEATER_ON: a_Drops.push_back(cItem(E_ITEM_REDSTONE_REPEATER, 1)); return;
+ case E_BLOCK_COBWEB: a_Drops.push_back(cItem(E_ITEM_STRING, 1)); return;
+ case E_BLOCK_FARMLAND:
+ case E_BLOCK_GRASS: a_Drops.push_back(cItem(E_ITEM_DIRT, 1)); return;
+ case E_BLOCK_LIT_FURNACE: a_Drops.push_back(cItem(E_ITEM_FURNACE, 1)); return;
+ case E_BLOCK_SUGARCANE: a_Drops.push_back(cItem(E_ITEM_SUGARCANE, 1)); return;
+ case E_BLOCK_PUMPKIN_STEM: a_Drops.push_back(cItem(E_ITEM_PUMPKIN_SEEDS, 1)); return;
+ case E_BLOCK_MELON_STEM: a_Drops.push_back(cItem(E_ITEM_MELON_SEEDS, 1)); return;
+
+
+ // Doors seem to need their meta set to 1
+ case E_BLOCK_WOODEN_DOOR: a_Drops.push_back(cItem(E_ITEM_WOODEN_DOOR, 1, 1)); return;
+ case E_BLOCK_IRON_DOOR: a_Drops.push_back(cItem(E_ITEM_IRON_DOOR, 1, 1)); return;
+
+
+ ////////////////////////
+ // Ores:
+
+ // Coal ore requires a pickaxe:
+ case E_BLOCK_COAL_ORE:
+ {
+ if (ItemCategory::IsPickaxe(a_UsedItem.m_ItemID))
+ {
+ a_Drops.push_back(cItem(E_ITEM_COAL, 1));
+ }
+ return;
+ }
+
+ // Iron ore requires a stone or better pickaxe:
+ case E_BLOCK_IRON_ORE:
+ {
+ if (
+ (a_UsedItem.m_ItemID == E_ITEM_STONE_PICKAXE) ||
+ (a_UsedItem.m_ItemID == E_ITEM_IRON_PICKAXE) ||
+ (a_UsedItem.m_ItemID == E_ITEM_DIAMOND_PICKAXE)
+ )
+ {
+ a_Drops.push_back(cItem(E_ITEM_IRON_ORE, 1));
+ }
+ return;
+ }
+
+ // Gold and diamond ores require an iron or better pickaxe:
+ case E_BLOCK_GOLD_ORE:
+ case E_BLOCK_DIAMOND_ORE:
+ {
+ if (
+ (a_UsedItem.m_ItemID == E_ITEM_IRON_PICKAXE) ||
+ (a_UsedItem.m_ItemID == E_ITEM_DIAMOND_PICKAXE)
+ )
+ {
+ a_Drops.push_back(cItem((ENUM_ITEM_ID)a_BlockType, 1));
+ }
+ return;
+ }
+
+ // Obsidian require a diamond pickaxe:
+ case E_BLOCK_OBSIDIAN:
+ {
+ if (a_UsedItem.m_ItemID == E_ITEM_DIAMOND_PICKAXE)
+ {
+ a_Drops.push_back(cItem((ENUM_ITEM_ID)a_BlockType, 1));
+ }
+ return;
+ }
+
+ // Redstone requires an iron or better pickaxe:
+ case E_BLOCK_REDSTONE_ORE_GLOWING:
+ case E_BLOCK_REDSTONE_ORE:
+ {
+ if (
+ (a_UsedItem.m_ItemID == E_ITEM_IRON_PICKAXE) ||
+ (a_UsedItem.m_ItemID == E_ITEM_DIAMOND_PICKAXE)
+ )
+ {
+ a_Drops.push_back(cItem(E_ITEM_REDSTONE_DUST, 4 + (short)r1.randInt(1)));
+ }
+ return;
+ }
+
+ // Lapis ore requires a stone or better pickaxe:
+ case E_BLOCK_LAPIS_ORE:
+ {
+ if (
+ (a_UsedItem.m_ItemID == E_ITEM_STONE_PICKAXE) ||
+ (a_UsedItem.m_ItemID == E_ITEM_IRON_PICKAXE) ||
+ (a_UsedItem.m_ItemID == E_ITEM_GOLD_PICKAXE) ||
+ (a_UsedItem.m_ItemID == E_ITEM_DIAMOND_PICKAXE)
+ )
+ {
+ a_Drops.push_back(cItem(E_ITEM_DYE, 4 + (short)r1.randInt(4), E_META_DYE_BLUE));
+ }
+ return;
+ }
+
+
+ ////////////////////////
+ // Resource blocks:
+
+ // Iron and lapis blocks require a stone or better pickaxe:
+ case E_BLOCK_IRON_BLOCK:
+ case E_BLOCK_LAPIS_BLOCK:
+ {
+ if (
+ (a_UsedItem.m_ItemID == E_ITEM_STONE_PICKAXE) ||
+ (a_UsedItem.m_ItemID == E_ITEM_IRON_PICKAXE) ||
+ (a_UsedItem.m_ItemID == E_ITEM_DIAMOND_PICKAXE)
+ )
+ {
+ a_Drops.push_back(cItem((ENUM_ITEM_ID)a_BlockType, 1));
+ }
+ return;
+ }
+
+ // Diamond and gold blocks require an iron or better pickaxe:
+ case E_BLOCK_DIAMOND_BLOCK:
+ {
+ if (
+ (a_UsedItem.m_ItemID == E_ITEM_IRON_PICKAXE) ||
+ (a_UsedItem.m_ItemID == E_ITEM_DIAMOND_PICKAXE)
+ )
+ {
+ a_Drops.push_back(cItem((ENUM_ITEM_ID)a_BlockType, 1));
+ }
+ }
+
+
+ // These blocks require a pickaxe to drop themselves:
+ case E_BLOCK_COBBLESTONE:
+ case E_BLOCK_BRICK:
+ case E_BLOCK_NETHER_BRICK:
+ case E_BLOCK_MOSSY_COBBLESTONE:
+ case E_BLOCK_STONE_SLAB:
+ case E_BLOCK_COBBLESTONE_STAIRS:
+ case E_BLOCK_STONE_BRICK_STAIRS:
+ case E_BLOCK_NETHER_BRICK_STAIRS:
+ case E_BLOCK_SANDSTONE_STAIRS:
+ case E_BLOCK_SANDSTONE:
+ case E_BLOCK_STONE_PRESSURE_PLATE:
+ {
+ if (ItemCategory::IsPickaxe(a_UsedItem.m_ItemID))
+ {
+ a_Drops.push_back(cItem((ENUM_ITEM_ID)a_BlockType, 1));
+ }
+ return;
+ }
+
+
+ // Stone requires a pickaxe to drop cobblestone:
+ case E_BLOCK_STONE:
+ {
+ if (ItemCategory::IsPickaxe(a_UsedItem.m_ItemID))
+ {
+ a_Drops.push_back(cItem(E_ITEM_COBBLESTONE, 1));
+ }
+ return;
+ }
+
+
+ // Snow requires a shovel to harvest:
+ case E_BLOCK_SNOW:
+ {
+ if (ItemCategory::IsShovel(a_UsedItem.m_ItemID))
+ {
+ a_Drops.push_back(cItem(E_ITEM_SNOWBALL, 1));
+ }
+ return;
+ }
+
+
+ // Leaves require shears for harvesting and have a chance of dropping a sapling and a red apple:
+ case E_BLOCK_LEAVES:
+ {
+ if (a_UsedItem.m_ItemID == E_ITEM_SHEARS)
+ {
+ a_Drops.push_back(cItem(E_ITEM_LEAVES, 1));
+ }
+ else
+ {
+ AddRandomDrop(a_Drops, r1, 5, E_ITEM_SAPLING);
+ AddRandomDrop(a_Drops, r1, 200, E_ITEM_APPLE);
+ }
+ return;
+ }
+
+
+ // Crops drop a wheat and possibly another seeds when ripe; always drop at least a single seed
+ case E_BLOCK_CROPS:
+ {
+ if (a_BlockMeta == 7)
+ {
+ AddRandomDrop(a_Drops, r1, 3, E_ITEM_SEEDS);
+ a_Drops.push_back(cItem(E_ITEM_WHEAT, 1));
+ }
+ a_Drops.push_back(cItem(E_ITEM_SEEDS, 1));
+ return;
+ }
+
+
+ // Vines drop only with shears, otherwise they are destroyed
+ case E_BLOCK_VINES:
+ {
+ if (a_UsedItem.m_ItemID == E_ITEM_SHEARS)
+ {
+ a_Drops.push_back(cItem(E_ITEM_VINES, 1));
+ }
+ return;
+ }
+
+
+ // Snow drops only when using a shovel
+ case E_BLOCK_SNOW_BLOCK:
+ {
+ if (ItemCategory::IsShovel(a_UsedItem.m_ItemID))
+ {
+ a_Drops.push_back(cItem(E_ITEM_SNOWBALL, 4, 0)); return;
+ }
+ return;
+ }
+
+
+ // Random multi-drop blocks:
+ case E_BLOCK_TALL_GRASS: a_Drops.push_back(cItem(E_ITEM_SEEDS, (short)r1.randInt(3) / 2, 1)); return;
+ case E_BLOCK_MELON: a_Drops.push_back(cItem(E_ITEM_MELON_SLICE, 3 + (short)r1.randInt(2), 1)); return;
+
+
+ // Fixed multi-drop blocks:
+ case E_BLOCK_DOUBLE_STONE_SLAB: a_Drops.push_back(cItem(E_ITEM_STONE_SLAB, 2, 0)); return;
+ case E_BLOCK_DOUBLE_WOODEN_SLAB: a_Drops.push_back(cItem(E_ITEM_STEP, 2, 0)); return;
+
+ default:
+ {
+ return;
+ }
+ } // switch (a_BlockType)
+}
+
+
+
+
+