Move item placement into item handlers (#5184)
* Move item placement into item handlers + Add appropriate CanBeAt checks in cPlayer::PlaceBlocks, into which all placement handlers call. * Partly addresses #5157 * Fixes #4878 * Fixes #2919 * Fixes #4629 * Fixes #4239 * Fixes #4849 Co-authored-by: changyong guo <guo1487@163.com> Co-authored-by: Xotheus <shady3300@outlook.com> Co-authored-by: Krist Pregracke <krist@tiger-scm.com> * Review fixes * Update APIDesc.lua * Rename Co-authored-by: changyong guo <guo1487@163.com> Co-authored-by: Xotheus <shady3300@outlook.com> Co-authored-by: Krist Pregracke <krist@tiger-scm.com>
This commit is contained in:
co-authored by
changyong guo
Xotheus
Krist Pregracke
parent
34bf5c0d9d
commit
a62b2b1be2
@@ -17,25 +17,6 @@ public:
|
||||
|
||||
using Super::Super;
|
||||
|
||||
/** Converts the block face of the neighbor to which the wallsign is attached to the wallsign block's meta. */
|
||||
static NIBBLETYPE BlockFaceToMetaData(eBlockFace a_NeighborBlockFace)
|
||||
{
|
||||
switch (a_NeighborBlockFace)
|
||||
{
|
||||
case BLOCK_FACE_ZM: return 0x02;
|
||||
case BLOCK_FACE_ZP: return 0x03;
|
||||
case BLOCK_FACE_XM: return 0x04;
|
||||
case BLOCK_FACE_XP: return 0x05;
|
||||
case BLOCK_FACE_NONE:
|
||||
case BLOCK_FACE_YP:
|
||||
case BLOCK_FACE_YM:
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0x02;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
virtual cItems ConvertToPickups(const NIBBLETYPE a_BlockMeta, const cItem * const a_Tool) const override
|
||||
@@ -47,16 +28,16 @@ private:
|
||||
|
||||
|
||||
|
||||
virtual bool CanBeAt(cChunkInterface & a_ChunkInterface, const Vector3i a_RelPos, const cChunk & a_Chunk) const override
|
||||
virtual bool CanBeAt(const cChunk & a_Chunk, const Vector3i a_Position, const NIBBLETYPE a_Meta) const override
|
||||
{
|
||||
auto NeighborPos = a_RelPos + GetOffsetBehindTheSign(a_Chunk.GetMeta(a_RelPos));
|
||||
auto NeighborPos = a_Position + GetOffsetBehindTheSign(a_Meta);
|
||||
BLOCKTYPE NeighborType;
|
||||
if (!a_Chunk.UnboundedRelGetBlockType(NeighborPos, NeighborType))
|
||||
{
|
||||
// The neighbor is not accessible (unloaded chunk), bail out without changing this
|
||||
return true;
|
||||
}
|
||||
return ((NeighborType == E_BLOCK_WALLSIGN) || (NeighborType == E_BLOCK_SIGN_POST) || cBlockInfo::IsSolid(NeighborType));
|
||||
return (NeighborType == E_BLOCK_WALLSIGN) || (NeighborType == E_BLOCK_SIGN_POST) || cBlockInfo::IsSolid(NeighborType);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user