2014-02-17 19:16:03 -05:00
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "ItemHandler.h"
|
|
|
|
#include "../World.h"
|
|
|
|
#include "../Entities/Player.h"
|
|
|
|
#include "../Entities/Painting.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class cItemPaintingHandler :
|
|
|
|
public cItemHandler
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
cItemPaintingHandler(int a_ItemType)
|
|
|
|
: cItemHandler(a_ItemType)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2015-04-14 04:49:01 -04:00
|
|
|
|
|
|
|
|
|
|
|
virtual bool OnItemUse(
|
|
|
|
cWorld * a_World, cPlayer * a_Player, cBlockPluginInterface & a_PluginInterface, const cItem & a_Item,
|
|
|
|
int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace
|
|
|
|
) override
|
2014-02-17 19:16:03 -05:00
|
|
|
{
|
2015-04-14 04:49:01 -04:00
|
|
|
if ((a_BlockFace == BLOCK_FACE_NONE) || (a_BlockFace == BLOCK_FACE_YM) || (a_BlockFace == BLOCK_FACE_YP))
|
2014-02-17 19:16:03 -05:00
|
|
|
{
|
2015-03-13 19:05:06 -04:00
|
|
|
// Paintings can't be flatly placed
|
2014-02-17 19:16:03 -05:00
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2015-04-14 04:49:01 -04:00
|
|
|
AddFaceDirection(a_BlockX, a_BlockY, a_BlockZ, a_BlockFace); // Make sure block that will be occupied is free
|
2014-02-17 19:16:03 -05:00
|
|
|
BLOCKTYPE Block = a_World->GetBlock(a_BlockX, a_BlockY, a_BlockZ);
|
|
|
|
|
|
|
|
if (Block == E_BLOCK_AIR)
|
|
|
|
{
|
2014-07-17 16:15:34 -04:00
|
|
|
static const struct // Define all the possible painting titles
|
2014-02-17 19:16:03 -05:00
|
|
|
{
|
|
|
|
AString Title;
|
|
|
|
} gPaintingTitlesList[] =
|
|
|
|
{
|
|
|
|
{ "Kebab" },
|
|
|
|
{ "Aztec" },
|
|
|
|
{ "Alban" },
|
|
|
|
{ "Aztec2" },
|
|
|
|
{ "Bomb" },
|
|
|
|
{ "Plant" },
|
|
|
|
{ "Wasteland" },
|
|
|
|
{ "Wanderer" },
|
|
|
|
{ "Graham" },
|
|
|
|
{ "Pool" },
|
|
|
|
{ "Courbet" },
|
|
|
|
{ "Sunset" },
|
|
|
|
{ "Sea" },
|
|
|
|
{ "Creebet" },
|
|
|
|
{ "Match" },
|
|
|
|
{ "Bust" },
|
|
|
|
{ "Stage" },
|
|
|
|
{ "Void" },
|
|
|
|
{ "SkullAndRoses" },
|
|
|
|
{ "Wither" },
|
|
|
|
{ "Fighters" },
|
|
|
|
{ "Skeleton" },
|
|
|
|
{ "DonkeyKong" },
|
|
|
|
{ "Pointer" },
|
|
|
|
{ "Pigscene" },
|
|
|
|
{ "BurningSkull" }
|
|
|
|
};
|
|
|
|
|
2016-12-19 15:12:23 -05:00
|
|
|
auto Painting = cpp14::make_unique<cPainting>(gPaintingTitlesList[a_World->GetTickRandomNumber(ARRAYCOUNT(gPaintingTitlesList) - 1)].Title, a_BlockFace, a_BlockX, a_BlockY, a_BlockZ);
|
|
|
|
auto PaintingPtr = Painting.get();
|
|
|
|
if (!PaintingPtr->Initialize(std::move(Painting), *a_World))
|
2017-05-02 07:16:59 -04:00
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
2014-02-17 19:16:03 -05:00
|
|
|
|
|
|
|
if (!a_Player->IsGameModeCreative())
|
|
|
|
{
|
|
|
|
a_Player->GetInventory().RemoveOneEquippedItem();
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|