1
0
Fork 0

Multiple fixes [SEE DESC]

- Removed two random block handling files in the item handling section
that didn't do anything. (One was an attempt at making slabs work, but
failed to realise that the coords would have to be the block CLICKED,
and another was just a random empty file for handling wooden planks.)
* Fixed placing repeater blocks not directioning properly
* Fixed wood directions breaking plank metadata
This commit is contained in:
Tiger Wang 2013-09-18 00:01:20 +01:00
parent ab696c37c3
commit 480991d1ac
8 changed files with 72 additions and 97 deletions

View File

@ -2159,6 +2159,10 @@
RelativePath="..\source\blocks\BlockPiston.h"
>
</File>
<File
RelativePath="..\source\blocks\BlockPlanks.h"
>
</File>
<File
RelativePath="..\source\Blocks\BlockPumpkin.h"
>
@ -2351,10 +2355,6 @@
RelativePath="..\source\items\ItemSign.h"
>
</File>
<File
RelativePath="..\source\items\ItemSlab.h"
>
</File>
<File
RelativePath="..\source\Items\ItemSpawnEgg.h"
>
@ -2371,10 +2371,6 @@
RelativePath="..\source\Items\ItemThrowable.h"
>
</File>
<File
RelativePath="..\source\items\ItemWood.h"
>
</File>
</Filter>
<Filter
Name="Protocol"

View File

@ -41,6 +41,7 @@
#include "BlockNote.h"
#include "BlockOre.h"
#include "BlockPiston.h"
#include "BlockPlanks.h"
#include "BlockPumpkin.h"
#include "BlockRail.h"
#include "BlockRedstone.h"
@ -153,7 +154,7 @@ cBlockHandler * cBlockHandler::CreateBlockHandler(BLOCKTYPE a_BlockType)
case E_BLOCK_NOTE_BLOCK: return new cBlockNoteHandler (a_BlockType);
case E_BLOCK_PISTON: return new cBlockPistonHandler (a_BlockType);
case E_BLOCK_PISTON_EXTENSION: return new cBlockPistonHeadHandler ();
case E_BLOCK_PLANKS: return new cBlockWoodHandler (a_BlockType);
case E_BLOCK_PLANKS: return new cBlockPlanksHandler (a_BlockType);
case E_BLOCK_PUMPKIN: return new cBlockPumpkinHandler (a_BlockType);
case E_BLOCK_JACK_O_LANTERN: return new cBlockPumpkinHandler (a_BlockType);
case E_BLOCK_PUMPKIN_STEM: return new cBlockStemsHandler (a_BlockType);

View File

@ -0,0 +1,41 @@
#pragma once
#include "BlockHandler.h"
class cBlockPlanksHandler : public cBlockHandler
{
public:
cBlockPlanksHandler(BLOCKTYPE a_BlockType)
: cBlockHandler(a_BlockType)
{
}
virtual bool GetPlacementBlockTypeMeta(
cWorld * a_World, cPlayer * a_Player,
int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace,
int a_CursorX, int a_CursorY, int a_CursorZ,
BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta
) override
{
a_BlockType = m_BlockType;
NIBBLETYPE Meta = a_Player->GetEquippedItem().m_ItemDamage;
a_BlockMeta = Meta;
return true;
}
virtual const char * GetStepSound(void) override
{
return "step.wood";
}
} ;

View File

@ -4,6 +4,7 @@
#include "../Item.h"
#include "../World.h"
#include "../Simulator/RedstoneSimulator.h"
#include "../Entities/Player.h"
@ -44,3 +45,18 @@ void cBlockRedstoneRepeaterHandler::OnDigging(cWorld *a_World, cPlayer *a_Player
bool cBlockRedstoneRepeaterHandler::GetPlacementBlockTypeMeta(
cWorld * a_World, cPlayer * a_Player,
int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace,
int a_CursorX, int a_CursorY, int a_CursorZ,
BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta
)
{
a_BlockType = m_BlockType;
a_BlockMeta = cRedstoneSimulator::RepeaterRotationToMetaData(a_Player->GetRotation());
return true;
}

View File

@ -36,6 +36,15 @@ public:
{
return ((a_RelY > 0) && (a_Chunk.GetBlock(a_RelX, a_RelY - 1, a_RelZ) != E_BLOCK_AIR));
}
virtual bool GetPlacementBlockTypeMeta(
cWorld * a_World, cPlayer * a_Player,
int a_BlockX, int a_BlockY, int a_BlockZ, char a_BlockFace,
int a_CursorX, int a_CursorY, int a_CursorZ,
BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta
) override;
virtual const char * GetStepSound(void) override
{

View File

@ -31,11 +31,9 @@
#include "ItemShears.h"
#include "ItemShovel.h"
#include "ItemSign.h"
#include "ItemSlab.h"
#include "ItemSpawnEgg.h"
#include "ItemSugarcane.h"
#include "ItemSword.h"
#include "ItemWood.h"
#include "../Blocks/BlockHandler.h"
@ -143,18 +141,6 @@ cItemHandler *cItemHandler::CreateItemHandler(int a_ItemType)
return new cItemSwordHandler(a_ItemType);
}
case E_BLOCK_STONE_SLAB:
case E_BLOCK_WOODEN_SLAB:
{
return new cItemSlabHandler(a_ItemType);
}
case E_BLOCK_LOG:
case E_BLOCK_PLANKS:
{
return new cItemWoodHandler(a_ItemType);
}
case E_ITEM_BUCKET:
case E_ITEM_WATER_BUCKET:
case E_ITEM_LAVA_BUCKET:

View File

@ -1,52 +0,0 @@
#pragma once
#include "ItemHandler.h"
#include "../World.h"
class cItemSlabHandler : public cItemHandler
{
public:
cItemSlabHandler(int a_ItemType)
: cItemHandler(a_ItemType)
{
}
virtual bool OnItemUse(cWorld * a_World, cPlayer * a_Player, const cItem & a_Item, int a_BlockX, int a_BlockY, int a_BlockZ, char a_Dir) override
{
BLOCKTYPE Block;
NIBBLETYPE Meta;
a_World->GetBlockTypeMeta(a_BlockX, a_BlockY, a_BlockZ, Block, Meta);
if (
((a_Dir == 0) || (a_Dir == 1)) // Only when clicking on top or on bottom of the block
&& ((Block == E_BLOCK_WOODEN_SLAB) || (Block == E_BLOCK_STONE_SLAB)) // It is a slab
&& (Block == a_Item.m_ItemType) // Same slab
&& ((Meta & 0x7) == (a_Item.m_ItemDamage & 0x7))) // Same Texture
{
if (a_Player->GetGameMode() == eGameMode_Creative)
{
a_World->SetBlock(a_BlockX, a_BlockY, a_BlockZ, Block - 1, Meta); // Block - 1 simple hack to save one if statement
return true;
}
else
{
if (a_Player->GetInventory().RemoveOneEquippedItem())
{
a_World->SetBlock(a_BlockX, a_BlockY, a_BlockZ, Block - 1, Meta); // Block - 1 simple hack to save one if statement
return true;
}
}
}
return false;
}
} ;

View File

@ -1,22 +0,0 @@
#pragma once
#include "ItemHandler.h"
class cItemWoodHandler :
public cItemHandler
{
public:
cItemWoodHandler(int a_ItemType)
: cItemHandler(a_ItemType)
{
}
} ;