Refactored block-to-pickup conversion. (#4417)
This commit is contained in:
@@ -361,9 +361,11 @@ bool cItemHandler::OnPlayerPlace(
|
||||
cChunkInterface ChunkInterface(a_World.GetChunkMap());
|
||||
|
||||
// Check if the block ignores build collision (water, grass etc.):
|
||||
if (BlockHandler(ClickedBlock)->DoesIgnoreBuildCollision(ChunkInterface, { a_BlockX, a_BlockY, a_BlockZ }, a_Player, ClickedBlockMeta))
|
||||
auto blockHandler = BlockHandler(ClickedBlock);
|
||||
Vector3i absPos(a_BlockX, a_BlockY, a_BlockZ);
|
||||
if (blockHandler->DoesIgnoreBuildCollision(ChunkInterface, absPos, a_Player, ClickedBlockMeta))
|
||||
{
|
||||
BlockHandler(ClickedBlock)->OnDestroyedByPlayer(ChunkInterface, a_World, a_Player, a_BlockX, a_BlockY, a_BlockZ);
|
||||
a_World.DropBlockAsPickups(absPos, &a_Player, nullptr);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -482,28 +484,6 @@ bool cItemHandler::OnDiggingBlock(cWorld * a_World, cPlayer * a_Player, const cI
|
||||
|
||||
|
||||
|
||||
void cItemHandler::OnBlockDestroyed(cWorld * a_World, cPlayer * a_Player, const cItem & a_Item, int a_BlockX, int a_BlockY, int a_BlockZ)
|
||||
{
|
||||
UNUSED(a_Item);
|
||||
|
||||
BLOCKTYPE Block = a_World->GetBlock(a_BlockX, a_BlockY, a_BlockZ);
|
||||
cBlockHandler * Handler = cBlockInfo::GetHandler(Block);
|
||||
|
||||
if (a_Player->IsGameModeSurvival())
|
||||
{
|
||||
cChunkInterface ChunkInterface(a_World->GetChunkMap());
|
||||
cBlockInServerPluginInterface PluginInterface(*a_World);
|
||||
Handler->DropBlock(ChunkInterface, *a_World, PluginInterface, a_Player, a_BlockX, a_BlockY, a_BlockZ, CanHarvestBlock(Block));
|
||||
}
|
||||
|
||||
auto Action = (cBlockInfo::IsOneHitDig(Block) ? dlaBreakBlockInstant : dlaBreakBlock);
|
||||
a_Player->UseEquippedItem(Action);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void cItemHandler::OnEntityAttack(cPlayer * a_Attacker, cEntity * a_AttackedEntity)
|
||||
{
|
||||
UNUSED(a_AttackedEntity);
|
||||
|
||||
Reference in New Issue
Block a user