Fix rotation metas on blocks
This commit is contained in:
parent
f38ad5efb5
commit
8914355895
@ -2,6 +2,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "BlockHandler.h"
|
#include "BlockHandler.h"
|
||||||
|
#include "Mixins.h"
|
||||||
#include "../Entities/Player.h"
|
#include "../Entities/Player.h"
|
||||||
#include "../UI/AnvilWindow.h"
|
#include "../UI/AnvilWindow.h"
|
||||||
|
|
||||||
@ -10,11 +11,13 @@
|
|||||||
|
|
||||||
|
|
||||||
class cBlockAnvilHandler :
|
class cBlockAnvilHandler :
|
||||||
public cBlockHandler
|
public cYawRotator<cBlockHandler, 0x03, 0x03, 0x00, 0x01, 0x02>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
using super = cYawRotator<cBlockHandler, 0x03, 0x03, 0x00, 0x01, 0x02>;
|
||||||
|
|
||||||
cBlockAnvilHandler(BLOCKTYPE a_BlockType)
|
cBlockAnvilHandler(BLOCKTYPE a_BlockType)
|
||||||
: cBlockHandler(a_BlockType)
|
: super(a_BlockType)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,21 +48,12 @@ public:
|
|||||||
BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta
|
BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta
|
||||||
) override
|
) override
|
||||||
{
|
{
|
||||||
a_BlockType = m_BlockType;
|
if (!super::GetPlacementBlockTypeMeta(a_ChunkInterface, a_Player, a_BlockX, a_BlockY, a_BlockZ, a_BlockFace, a_CursorX, a_CursorY, a_CursorZ, a_BlockType, a_BlockMeta))
|
||||||
NIBBLETYPE Meta = static_cast<NIBBLETYPE>(a_Player.GetEquippedItem().m_ItemDamage);
|
|
||||||
int Direction = static_cast<int>(floor(a_Player.GetYaw() * 4.0 / 360.0 + 1.5)) & 0x3;
|
|
||||||
|
|
||||||
switch (Direction)
|
|
||||||
{
|
|
||||||
case 0: a_BlockMeta = static_cast<NIBBLETYPE>(0x2 | Meta << 2); break;
|
|
||||||
case 1: a_BlockMeta = static_cast<NIBBLETYPE>(0x3 | Meta << 2); break;
|
|
||||||
case 2: a_BlockMeta = static_cast<NIBBLETYPE>(0x0 | Meta << 2); break;
|
|
||||||
case 3: a_BlockMeta = static_cast<NIBBLETYPE>(0x1 | Meta << 2); break;
|
|
||||||
default:
|
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
a_BlockMeta = a_BlockMeta | static_cast<NIBBLETYPE>(a_Player.GetEquippedItem().m_ItemDamage << 2);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11,9 +11,9 @@
|
|||||||
|
|
||||||
|
|
||||||
class cBlockChestHandler :
|
class cBlockChestHandler :
|
||||||
public cYawRotator<cContainerEntityHandler<cBlockEntityHandler>>
|
public cYawRotator<cContainerEntityHandler<cBlockEntityHandler>, 0x07, 0x03, 0x04, 0x02, 0x05>
|
||||||
{
|
{
|
||||||
using super = cYawRotator<cContainerEntityHandler<cBlockEntityHandler>>;
|
using super = cYawRotator<cContainerEntityHandler<cBlockEntityHandler>, 0x07, 0x03, 0x04, 0x02, 0x05>;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -12,9 +12,9 @@
|
|||||||
|
|
||||||
|
|
||||||
class cBlockDoorHandler :
|
class cBlockDoorHandler :
|
||||||
public cYawRotator<cBlockHandler, 0x03, 0x01, 0x02, 0x03, 0x00, true>
|
public cYawRotator<cBlockHandler, 0x03, 0x03, 0x00, 0x01, 0x02>
|
||||||
{
|
{
|
||||||
using super = cYawRotator<cBlockHandler, 0x03, 0x01, 0x02, 0x03, 0x00, true>;
|
using super = cYawRotator<cBlockHandler, 0x03, 0x03, 0x00, 0x01, 0x02>;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -14,9 +14,9 @@
|
|||||||
|
|
||||||
|
|
||||||
class cBlockDropSpenserHandler :
|
class cBlockDropSpenserHandler :
|
||||||
public cPitchYawRotator<cBlockEntityHandler>
|
public cPitchYawRotator<cBlockEntityHandler, 0x07, 0x03, 0x04, 0x02, 0x05, 0x01, 0x00>
|
||||||
{
|
{
|
||||||
using super = cPitchYawRotator<cBlockEntityHandler>;
|
using super = cPitchYawRotator<cBlockEntityHandler, 0x07, 0x03, 0x04, 0x02, 0x05, 0x01, 0x00>;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -9,9 +9,9 @@
|
|||||||
|
|
||||||
|
|
||||||
class cBlockFurnaceHandler :
|
class cBlockFurnaceHandler :
|
||||||
public cYawRotator<cBlockEntityHandler, 0x07, 0x02, 0x05, 0x03, 0x04>
|
public cYawRotator<cBlockEntityHandler, 0x07, 0x03, 0x04, 0x02, 0x05>
|
||||||
{
|
{
|
||||||
using super = cYawRotator<cBlockEntityHandler, 0x07, 0x02, 0x05, 0x03, 0x04>;
|
using super = cYawRotator<cBlockEntityHandler, 0x07, 0x03, 0x04, 0x02, 0x05>;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -17,9 +17,9 @@ class cWorld;
|
|||||||
|
|
||||||
|
|
||||||
class cBlockPistonHandler:
|
class cBlockPistonHandler:
|
||||||
public cClearMetaOnDrop<cPitchYawRotator<cBlockHandler>>
|
public cClearMetaOnDrop<cPitchYawRotator<cBlockHandler, 0x07, 0x03, 0x04, 0x02, 0x05, 0x01, 0x00>>
|
||||||
{
|
{
|
||||||
using super = cClearMetaOnDrop<cPitchYawRotator<cBlockHandler>>;
|
using super = cClearMetaOnDrop<cPitchYawRotator<cBlockHandler, 0x07, 0x03, 0x04, 0x02, 0x05, 0x01, 0x00>>;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -6,9 +6,9 @@
|
|||||||
|
|
||||||
|
|
||||||
class cBlockPumpkinHandler :
|
class cBlockPumpkinHandler :
|
||||||
public cClearMetaOnDrop<cYawRotator<cBlockHandler, 0x07, 0x02, 0x03, 0x00, 0x01>>
|
public cClearMetaOnDrop<cYawRotator<cBlockHandler, 0x03, 0x00, 0x01, 0x02, 0x03>>
|
||||||
{
|
{
|
||||||
using super = cClearMetaOnDrop<cYawRotator<cBlockHandler, 0x07, 0x02, 0x03, 0x00, 0x01>>;
|
using super = cClearMetaOnDrop<cYawRotator<cBlockHandler, 0x03, 0x00, 0x01, 0x02, 0x03>>;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
cBlockPumpkinHandler(BLOCKTYPE a_BlockType) :
|
cBlockPumpkinHandler(BLOCKTYPE a_BlockType) :
|
||||||
|
@ -203,7 +203,10 @@ public:
|
|||||||
) override
|
) override
|
||||||
{
|
{
|
||||||
NIBBLETYPE BaseMeta;
|
NIBBLETYPE BaseMeta;
|
||||||
super::GetPlacementBlockTypeMeta(a_ChunkInterface, a_Player, a_BlockX, a_BlockY, a_BlockZ, a_BlockFace, a_CursorX, a_CursorY, a_CursorZ, a_BlockType, BaseMeta);
|
if (!super::GetPlacementBlockTypeMeta(a_ChunkInterface, a_Player, a_BlockX, a_BlockY, a_BlockZ, a_BlockFace, a_CursorX, a_CursorY, a_CursorZ, a_BlockType, BaseMeta))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
a_BlockMeta = (BaseMeta & ~BitMask) | YawToMetaData(a_Player.GetYaw());
|
a_BlockMeta = (BaseMeta & ~BitMask) | YawToMetaData(a_Player.GetYaw());
|
||||||
return true;
|
return true;
|
||||||
@ -249,8 +252,8 @@ template <
|
|||||||
NIBBLETYPE East = 0x05,
|
NIBBLETYPE East = 0x05,
|
||||||
NIBBLETYPE South = 0x03,
|
NIBBLETYPE South = 0x03,
|
||||||
NIBBLETYPE West = 0x04,
|
NIBBLETYPE West = 0x04,
|
||||||
NIBBLETYPE Up = 0x01,
|
NIBBLETYPE Up = 0x00,
|
||||||
NIBBLETYPE Down = 0x00
|
NIBBLETYPE Down = 0x01
|
||||||
>
|
>
|
||||||
class cPitchYawRotator:
|
class cPitchYawRotator:
|
||||||
public cYawRotator<Base, BitMask, North, East, South, West>
|
public cYawRotator<Base, BitMask, North, East, South, West>
|
||||||
@ -274,7 +277,10 @@ public:
|
|||||||
) override
|
) override
|
||||||
{
|
{
|
||||||
NIBBLETYPE BaseMeta;
|
NIBBLETYPE BaseMeta;
|
||||||
super::GetPlacementBlockTypeMeta(a_ChunkInterface, a_Player, a_BlockX, a_BlockY, a_BlockZ, a_BlockFace, a_CursorX, a_CursorY, a_CursorZ, a_BlockType, BaseMeta);
|
if (!super::GetPlacementBlockTypeMeta(a_ChunkInterface, a_Player, a_BlockX, a_BlockY, a_BlockZ, a_BlockFace, a_CursorX, a_CursorY, a_CursorZ, a_BlockType, BaseMeta))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
a_BlockMeta = (BaseMeta & ~BitMask) | PitchYawToMetaData(a_Player.GetYaw(), a_Player.GetPitch());
|
a_BlockMeta = (BaseMeta & ~BitMask) | PitchYawToMetaData(a_Player.GetYaw(), a_Player.GetPitch());
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user