1
0
Fork 0

Cauldron: backport "use" behaviour to 1.12 (#4902)

* Cauldron: backport "use" behaviour to 1.12
This commit is contained in:
Tiger Wang 2020-09-20 15:39:17 +01:00 committed by GitHub
parent 68cced73af
commit 5a16620322
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 20 additions and 10 deletions

View File

@ -39,6 +39,7 @@ private:
{
NIBBLETYPE Meta = a_ChunkInterface.GetBlockMeta(a_BlockPos);
auto EquippedItem = a_Player.GetEquippedItem();
switch (EquippedItem.m_ItemType)
{
case E_ITEM_BUCKET:
@ -96,12 +97,12 @@ private:
}
break;
}
// Resets any color to default:
case E_ITEM_LEATHER_BOOTS:
case E_ITEM_LEATHER_CAP:
case E_ITEM_LEATHER_PANTS:
case E_ITEM_LEATHER_TUNIC:
{
// Resets any color to default:
if ((Meta > 0) && ((EquippedItem.m_ItemColor.GetRed() != 255) || (EquippedItem.m_ItemColor.GetBlue() != 255) || (EquippedItem.m_ItemColor.GetGreen() != 255)))
{
a_ChunkInterface.SetBlockMeta(a_BlockPos, --Meta);
@ -111,7 +112,6 @@ private:
}
break;
}
// Resets shulker box color:
case E_BLOCK_BLACK_SHULKER_BOX:
case E_BLOCK_BLUE_SHULKER_BOX:
case E_BLOCK_BROWN_SHULKER_BOX:
@ -127,6 +127,8 @@ private:
case E_BLOCK_RED_SHULKER_BOX:
case E_BLOCK_YELLOW_SHULKER_BOX:
{
// Resets shulker box color.
// TODO: When there is an actual default shulker box add the appropriate changes here! - 19.09.2020 - 12xx12
if (Meta == 0)
{
@ -134,22 +136,30 @@ private:
break;
}
// This is a workaround for version < 1.13. They client thinks a player placed a shulker and display that to the player
// The shulker cleaning was added in 1.13.
const auto ResendPosition = AddFaceDirection(a_BlockPos, a_BlockFace);
a_Player.GetClientHandle()->SendBlockChange(
ResendPosition.x, ResendPosition.y, ResendPosition.z,
a_ChunkInterface.GetBlock(ResendPosition), a_ChunkInterface.GetBlockMeta(ResendPosition)
);
// Proceed with normal cleaning:
a_ChunkInterface.SetBlockMeta(a_BlockPos, --Meta);
auto NewShulker = cItem(EquippedItem);
NewShulker.m_ItemType = E_BLOCK_PURPLE_SHULKER_BOX;
a_Player.ReplaceOneEquippedItemTossRest(NewShulker);
break;
}
}
if (!ItemHandler(EquippedItem.m_ItemType)->IsPlaceable())
{
// Item not placeable in the first place, our work is done:
return true;
}
// This is a workaround for versions < 1.13, where rclking a cauldron with a block, places a block.
// Using cauldrons with blocks was added in 1.13 as part of shulker cleaning.
const auto ResendPosition = AddFaceDirection(a_BlockPos, a_BlockFace);
a_Player.GetClientHandle()->SendBlockChange(
ResendPosition.x, ResendPosition.y, ResendPosition.z,
a_ChunkInterface.GetBlock(ResendPosition), a_ChunkInterface.GetBlockMeta(ResendPosition)
);
return true;
}