Fixed issues relating to saplings and leaves
- Removed cBlockInfo::RequiresSpecialTool * Fixes #1195 * Fixes #1201
This commit is contained in:
parent
3dd9649665
commit
0f8c24e04d
@ -175,32 +175,6 @@ static int tolua_get_AllToLua_g_BlockIsSnowable(lua_State* tolua_S)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* get function: g_BlockRequiresSpecialTool */
|
|
||||||
#ifndef TOLUA_DISABLE_tolua_get_AllToLua_g_BlockRequiresSpecialTool
|
|
||||||
static int tolua_get_AllToLua_g_BlockRequiresSpecialTool(lua_State* tolua_S)
|
|
||||||
{
|
|
||||||
int BlockType;
|
|
||||||
#ifndef TOLUA_RELEASE
|
|
||||||
{
|
|
||||||
tolua_Error tolua_err;
|
|
||||||
if (!tolua_isnumber(tolua_S,2,0,&tolua_err))
|
|
||||||
tolua_error(tolua_S,"#vinvalid type in array indexing.",&tolua_err);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
BlockType = (int)tolua_tonumber(tolua_S, 2, 0);
|
|
||||||
if ((BlockType < 0) || (BlockType > E_BLOCK_MAX_TYPE_ID))
|
|
||||||
{
|
|
||||||
tolua_error(tolua_S, "array indexing out of range.", NULL);
|
|
||||||
}
|
|
||||||
tolua_pushboolean(tolua_S, cBlockInfo::RequiresSpecialTool((BLOCKTYPE)BlockType));
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
#endif //#ifndef TOLUA_DISABLE
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* get function: g_BlockIsSolid */
|
/* get function: g_BlockIsSolid */
|
||||||
#ifndef TOLUA_DISABLE_tolua_get_AllToLua_g_BlockIsSolid
|
#ifndef TOLUA_DISABLE_tolua_get_AllToLua_g_BlockIsSolid
|
||||||
static int tolua_get_AllToLua_g_BlockIsSolid(lua_State* tolua_S)
|
static int tolua_get_AllToLua_g_BlockIsSolid(lua_State* tolua_S)
|
||||||
@ -263,7 +237,6 @@ void DeprecatedBindings::Bind(lua_State * tolua_S)
|
|||||||
tolua_array(tolua_S, "g_BlockOneHitDig", tolua_get_AllToLua_g_BlockOneHitDig, NULL);
|
tolua_array(tolua_S, "g_BlockOneHitDig", tolua_get_AllToLua_g_BlockOneHitDig, NULL);
|
||||||
tolua_array(tolua_S, "g_BlockPistonBreakable", tolua_get_AllToLua_g_BlockPistonBreakable, NULL);
|
tolua_array(tolua_S, "g_BlockPistonBreakable", tolua_get_AllToLua_g_BlockPistonBreakable, NULL);
|
||||||
tolua_array(tolua_S, "g_BlockIsSnowable", tolua_get_AllToLua_g_BlockIsSnowable, NULL);
|
tolua_array(tolua_S, "g_BlockIsSnowable", tolua_get_AllToLua_g_BlockIsSnowable, NULL);
|
||||||
tolua_array(tolua_S, "g_BlockRequiresSpecialTool", tolua_get_AllToLua_g_BlockRequiresSpecialTool, NULL);
|
|
||||||
tolua_array(tolua_S, "g_BlockIsSolid", tolua_get_AllToLua_g_BlockIsSolid, NULL);
|
tolua_array(tolua_S, "g_BlockIsSolid", tolua_get_AllToLua_g_BlockIsSolid, NULL);
|
||||||
tolua_array(tolua_S, "g_BlockFullyOccupiesVoxel", tolua_get_AllToLua_g_BlockFullyOccupiesVoxel, NULL);
|
tolua_array(tolua_S, "g_BlockFullyOccupiesVoxel", tolua_get_AllToLua_g_BlockFullyOccupiesVoxel, NULL);
|
||||||
|
|
||||||
|
@ -15,7 +15,6 @@ cBlockInfo::cBlockInfo()
|
|||||||
, m_OneHitDig(false)
|
, m_OneHitDig(false)
|
||||||
, m_PistonBreakable(false)
|
, m_PistonBreakable(false)
|
||||||
, m_IsSnowable(false)
|
, m_IsSnowable(false)
|
||||||
, m_RequiresSpecialTool(false)
|
|
||||||
, m_IsSolid(true)
|
, m_IsSolid(true)
|
||||||
, m_FullyOccupiesVoxel(false)
|
, m_FullyOccupiesVoxel(false)
|
||||||
, m_Handler(NULL)
|
, m_Handler(NULL)
|
||||||
@ -440,51 +439,6 @@ void cBlockInfo::Initialize(cBlockInfoArray & a_Info)
|
|||||||
a_Info[E_BLOCK_TNT ].m_IsSnowable = true;
|
a_Info[E_BLOCK_TNT ].m_IsSnowable = true;
|
||||||
a_Info[E_BLOCK_WOOL ].m_IsSnowable = true;
|
a_Info[E_BLOCK_WOOL ].m_IsSnowable = true;
|
||||||
|
|
||||||
|
|
||||||
// Blocks that don't drop without a special tool:
|
|
||||||
a_Info[E_BLOCK_BRICK ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_CAULDRON ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_COAL_ORE ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_COBBLESTONE ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_COBBLESTONE_WALL ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_COBBLESTONE_STAIRS ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_COBWEB ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_DIAMOND_BLOCK ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_DIAMOND_ORE ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_DOUBLE_STONE_SLAB ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_EMERALD_ORE ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_END_STONE ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_GOLD_BLOCK ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_GOLD_ORE ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_HEAVY_WEIGHTED_PRESSURE_PLATE].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_IRON_BLOCK ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_IRON_ORE ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_LAPIS_BLOCK ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_LAPIS_ORE ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_LEAVES ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_LIGHT_WEIGHTED_PRESSURE_PLATE].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_MOSSY_COBBLESTONE ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_NETHERRACK ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_NETHER_BRICK ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_NETHER_BRICK_STAIRS ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_OBSIDIAN ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_REDSTONE_ORE ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_REDSTONE_ORE_GLOWING].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_SANDSTONE ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_SANDSTONE_STAIRS ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_SNOW ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_STONE ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_STONE_BRICKS ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_STONE_BRICK_STAIRS ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_STONE_PRESSURE_PLATE].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_STONE_SLAB ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_VINES ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_FURNACE ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_LIT_FURNACE ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_ANVIL ].m_RequiresSpecialTool = true;
|
|
||||||
a_Info[E_BLOCK_ENCHANTMENT_TABLE ].m_RequiresSpecialTool = true;
|
|
||||||
|
|
||||||
|
|
||||||
// Nonsolid blocks:
|
// Nonsolid blocks:
|
||||||
a_Info[E_BLOCK_ACTIVATOR_RAIL ].m_IsSolid = false;
|
a_Info[E_BLOCK_ACTIVATOR_RAIL ].m_IsSolid = false;
|
||||||
a_Info[E_BLOCK_AIR ].m_IsSolid = false;
|
a_Info[E_BLOCK_AIR ].m_IsSolid = false;
|
||||||
|
@ -39,9 +39,6 @@ public:
|
|||||||
/** Can this block hold snow atop? */
|
/** Can this block hold snow atop? */
|
||||||
bool m_IsSnowable;
|
bool m_IsSnowable;
|
||||||
|
|
||||||
/** Does this block require a tool to drop? */
|
|
||||||
bool m_RequiresSpecialTool;
|
|
||||||
|
|
||||||
/** Is this block solid (player cannot walk through)? */
|
/** Is this block solid (player cannot walk through)? */
|
||||||
bool m_IsSolid;
|
bool m_IsSolid;
|
||||||
|
|
||||||
@ -61,7 +58,6 @@ public:
|
|||||||
inline static bool IsOneHitDig (BLOCKTYPE a_Type) { return Get(a_Type).m_OneHitDig; }
|
inline static bool IsOneHitDig (BLOCKTYPE a_Type) { return Get(a_Type).m_OneHitDig; }
|
||||||
inline static bool IsPistonBreakable (BLOCKTYPE a_Type) { return Get(a_Type).m_PistonBreakable; }
|
inline static bool IsPistonBreakable (BLOCKTYPE a_Type) { return Get(a_Type).m_PistonBreakable; }
|
||||||
inline static bool IsSnowable (BLOCKTYPE a_Type) { return Get(a_Type).m_IsSnowable; }
|
inline static bool IsSnowable (BLOCKTYPE a_Type) { return Get(a_Type).m_IsSnowable; }
|
||||||
inline static bool RequiresSpecialTool (BLOCKTYPE a_Type) { return Get(a_Type).m_RequiresSpecialTool; }
|
|
||||||
inline static bool IsSolid (BLOCKTYPE a_Type) { return Get(a_Type).m_IsSolid; }
|
inline static bool IsSolid (BLOCKTYPE a_Type) { return Get(a_Type).m_IsSolid; }
|
||||||
inline static bool FullyOccupiesVoxel (BLOCKTYPE a_Type) { return Get(a_Type).m_FullyOccupiesVoxel; }
|
inline static bool FullyOccupiesVoxel (BLOCKTYPE a_Type) { return Get(a_Type).m_FullyOccupiesVoxel; }
|
||||||
|
|
||||||
|
@ -19,16 +19,16 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
virtual void DropBlock(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cBlockPluginInterface & a_BlockPluginInterface, cEntity * a_Digger, int a_BlockX, int a_BlockY, int a_BlockZ) override
|
virtual void DropBlock(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cBlockPluginInterface & a_BlockPluginInterface, cEntity * a_Digger, int a_BlockX, int a_BlockY, int a_BlockZ, bool a_DropVerbatim) override
|
||||||
{
|
{
|
||||||
NIBBLETYPE Meta = a_ChunkInterface.GetBlockMeta(a_BlockX, a_BlockY, a_BlockZ);
|
NIBBLETYPE Meta = a_ChunkInterface.GetBlockMeta(a_BlockX, a_BlockY, a_BlockZ);
|
||||||
if (Meta & 0x8)
|
if (Meta & 0x8)
|
||||||
{
|
{
|
||||||
super::DropBlock(a_ChunkInterface, a_WorldInterface, a_BlockPluginInterface, a_Digger, a_BlockX, a_BlockY - 1, a_BlockZ);
|
super::DropBlock(a_ChunkInterface, a_WorldInterface, a_BlockPluginInterface, a_Digger, a_BlockX, a_BlockY - 1, a_BlockZ, a_DropVerbatim);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
super::DropBlock(a_ChunkInterface, a_WorldInterface, a_BlockPluginInterface, a_Digger, a_BlockX, a_BlockY, a_BlockZ);
|
super::DropBlock(a_ChunkInterface, a_WorldInterface, a_BlockPluginInterface, a_Digger, a_BlockX, a_BlockY, a_BlockZ, a_DropVerbatim);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -407,39 +407,6 @@ void cBlockHandler::NeighborChanged(cChunkInterface & a_ChunkInterface, int a_Bl
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cBlockHandler::OnNeighborChanged(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cBlockHandler::OnDigging(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer *a_Player, int a_BlockX, int a_BlockY, int a_BlockZ)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cBlockHandler::OnUse(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer *a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace, int a_CursorX, int a_CursorY, int a_CursorZ)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cBlockHandler::OnCancelRightClick(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer *a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cBlockHandler::ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta)
|
void cBlockHandler::ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta)
|
||||||
{
|
{
|
||||||
// Setting the meta to a_BlockMeta keeps most textures. The few other blocks have to override this.
|
// Setting the meta to a_BlockMeta keeps most textures. The few other blocks have to override this.
|
||||||
@ -450,11 +417,20 @@ void cBlockHandler::ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cBlockHandler::DropBlock(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cBlockPluginInterface & a_BlockPluginInterface, cEntity * a_Digger, int a_BlockX, int a_BlockY, int a_BlockZ)
|
void cBlockHandler::DropBlock(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cBlockPluginInterface & a_BlockPluginInterface, cEntity * a_Digger, int a_BlockX, int a_BlockY, int a_BlockZ, bool a_DropVerbatim)
|
||||||
{
|
{
|
||||||
cItems Pickups;
|
cItems Pickups;
|
||||||
NIBBLETYPE Meta = a_ChunkInterface.GetBlockMeta(a_BlockX, a_BlockY, a_BlockZ);
|
NIBBLETYPE Meta = a_ChunkInterface.GetBlockMeta(a_BlockX, a_BlockY, a_BlockZ);
|
||||||
ConvertToPickups(Pickups, Meta);
|
|
||||||
|
if (!a_DropVerbatim)
|
||||||
|
{
|
||||||
|
ConvertToPickups(Pickups, Meta);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// TODO: Add a proper overridable function for this
|
||||||
|
Pickups.Add(m_BlockType, 1, Meta);
|
||||||
|
}
|
||||||
|
|
||||||
// Allow plugins to modify the pickups:
|
// Allow plugins to modify the pickups:
|
||||||
a_BlockPluginInterface.CallHookBlockToPickups(a_Digger, a_BlockX, a_BlockY, a_BlockZ, m_BlockType, Meta, Pickups);
|
a_BlockPluginInterface.CallHookBlockToPickups(a_Digger, a_BlockX, a_BlockY, a_BlockZ, m_BlockType, Meta, Pickups);
|
||||||
|
@ -60,25 +60,25 @@ public:
|
|||||||
virtual void OnDestroyed(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, int a_BlockX, int a_BlockY, int a_BlockZ);
|
virtual void OnDestroyed(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, int a_BlockX, int a_BlockY, int a_BlockZ);
|
||||||
|
|
||||||
/// Called when a direct neighbor of this block has been changed (The position is the own position, not the neighbor position)
|
/// Called when a direct neighbor of this block has been changed (The position is the own position, not the neighbor position)
|
||||||
virtual void OnNeighborChanged(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ);
|
virtual void OnNeighborChanged(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ) {};
|
||||||
|
|
||||||
/// Notifies all neighbors of the given block about a change
|
/// Notifies all neighbors of the given block about a change
|
||||||
static void NeighborChanged(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ);
|
static void NeighborChanged(cChunkInterface & a_ChunkInterface, int a_BlockX, int a_BlockY, int a_BlockZ);
|
||||||
|
|
||||||
/// Called while the player diggs the block.
|
/// Called while the player diggs the block.
|
||||||
virtual void OnDigging(cChunkInterface & cChunkInterface, cWorldInterface & a_WorldInterface, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ);
|
virtual void OnDigging(cChunkInterface & cChunkInterface, cWorldInterface & a_WorldInterface, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ) {};
|
||||||
|
|
||||||
/// Called if the user right clicks the block and the block is useable
|
/// Called if the user right clicks the block and the block is useable
|
||||||
virtual void OnUse(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace, int a_CursorX, int a_CursorY, int a_CursorZ);
|
virtual void OnUse(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace, int a_CursorX, int a_CursorY, int a_CursorZ) {};
|
||||||
|
|
||||||
/** Called when a Right Click to this Block is cancelled */
|
/** Called when a Right Click to this Block is cancelled */
|
||||||
virtual void OnCancelRightClick(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace);
|
virtual void OnCancelRightClick(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer * a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace) {};
|
||||||
|
|
||||||
/// <summary>Called when the item is mined to convert it into pickups. Pickups may specify multiple items. Appends items to a_Pickups, preserves its original contents</summary>
|
/// <summary>Called when the item is mined to convert it into pickups. Pickups may specify multiple items. Appends items to a_Pickups, preserves its original contents</summary>
|
||||||
virtual void ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta);
|
virtual void ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta);
|
||||||
|
|
||||||
/// Handles the dropping of a block based on what ConvertToDrops() returns. This will not destroy the block. a_Digger is the entity causing the drop; it may be NULL
|
/// Handles the dropping of a block based on what ConvertToDrops() returns. This will not destroy the block. a_Digger is the entity causing the drop; it may be NULL
|
||||||
virtual void DropBlock(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cBlockPluginInterface & a_BlockPluginInterface, cEntity * a_Digger, int a_BlockX, int a_BlockY, int a_BlockZ);
|
virtual void DropBlock(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cBlockPluginInterface & a_BlockPluginInterface, cEntity * a_Digger, int a_BlockX, int a_BlockY, int a_BlockZ, bool a_DropVerbatim = false);
|
||||||
|
|
||||||
/// Returns step sound name of block
|
/// Returns step sound name of block
|
||||||
virtual const char * GetStepSound(void);
|
virtual const char * GetStepSound(void);
|
||||||
|
@ -43,11 +43,17 @@ public:
|
|||||||
// Only the first 2 bits contain the display information, the others are for growing
|
// Only the first 2 bits contain the display information, the others are for growing
|
||||||
if (rand.NextInt(6) == 0)
|
if (rand.NextInt(6) == 0)
|
||||||
{
|
{
|
||||||
a_Pickups.push_back(cItem(E_BLOCK_SAPLING, 1, a_BlockMeta & 3));
|
a_Pickups.push_back(
|
||||||
|
cItem(
|
||||||
|
E_BLOCK_SAPLING,
|
||||||
|
1,
|
||||||
|
(m_BlockType == E_BLOCK_LEAVES) ? (a_BlockMeta & 0x03) : (2 << (a_BlockMeta & 0x01)) // Old leaves - 3 bits contain display; new leaves - 1st bit, shifted left two for saplings to understand
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 1 % chance of dropping an apple, if the leaves' type is Apple Leaves
|
// 1 % chance of dropping an apple, if the leaves' type is Apple Leaves
|
||||||
if ((a_BlockMeta & 3) == E_META_LEAVES_APPLE)
|
if ((m_BlockType == E_BLOCK_LEAVES) && ((a_BlockMeta & 0x03) == E_META_LEAVES_APPLE))
|
||||||
{
|
{
|
||||||
if (rand.NextInt(101) == 0)
|
if (rand.NextInt(101) == 0)
|
||||||
{
|
{
|
||||||
|
@ -20,8 +20,8 @@ public:
|
|||||||
|
|
||||||
virtual void ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta) override
|
virtual void ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta) override
|
||||||
{
|
{
|
||||||
// Only the first 2 bits contain the display information, the others are for growing
|
// Only the first 5 bits contain the display information, 8th bit for growth indicator (but we use 0x07 for forward compatibility)
|
||||||
a_Pickups.push_back(cItem(E_BLOCK_SAPLING, 1, a_BlockMeta & 3));
|
a_Pickups.push_back(cItem(E_BLOCK_SAPLING, 1, a_BlockMeta & 0x07));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -727,14 +727,5 @@ namespace ItemCategory
|
|||||||
// tolua_end
|
// tolua_end
|
||||||
|
|
||||||
|
|
||||||
inline bool BlockRequiresSpecialTool(BLOCKTYPE a_BlockType)
|
|
||||||
{
|
|
||||||
if(!IsValidBlock(a_BlockType)) return false;
|
|
||||||
return cBlockInfo::RequiresSpecialTool(a_BlockType);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -328,12 +328,9 @@ void cItemHandler::OnBlockDestroyed(cWorld * a_World, cPlayer * a_Player, const
|
|||||||
|
|
||||||
if (a_Player->IsGameModeSurvival())
|
if (a_Player->IsGameModeSurvival())
|
||||||
{
|
{
|
||||||
if (!BlockRequiresSpecialTool(Block) || CanHarvestBlock(Block))
|
cChunkInterface ChunkInterface(a_World->GetChunkMap());
|
||||||
{
|
cBlockInServerPluginInterface PluginInterface(*a_World);
|
||||||
cChunkInterface ChunkInterface(a_World->GetChunkMap());
|
Handler->DropBlock(ChunkInterface, *a_World, PluginInterface, a_Player, a_BlockX, a_BlockY, a_BlockZ, CanHarvestBlock(Block));
|
||||||
cBlockInServerPluginInterface PluginInterface(*a_World);
|
|
||||||
Handler->DropBlock(ChunkInterface, *a_World, PluginInterface, a_Player, a_BlockX, a_BlockY, a_BlockZ);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
a_Player->UseEquippedItem();
|
a_Player->UseEquippedItem();
|
||||||
|
Loading…
Reference in New Issue
Block a user