the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#include "stdafx.h"
2#include "net.minecraft.world.entity.item.h"
3#include "net.minecraft.world.entity.player.h"
4#include "net.minecraft.world.item.h"
5#include "net.minecraft.world.level.h"
6#include "net.minecraft.world.level.tile.h"
7#include "net.minecraft.h"
8#include "StoneSlabTileItem.h"
9
10StoneSlabTileItem::StoneSlabTileItem(int id, HalfSlabTile *halfTile, HalfSlabTile *fullTile, bool full) : TileItem(id)
11{
12 this->halfTile = halfTile;
13 this->fullTile = fullTile;
14
15 isFull = full;
16 setMaxDamage(0);
17 setStackedByData(true);
18}
19
20Icon *StoneSlabTileItem::getIcon(int itemAuxValue)
21{
22 return Tile::tiles[id]->getTexture(2, itemAuxValue);
23}
24
25int StoneSlabTileItem::getLevelDataForAuxValue(int auxValue)
26{
27 return auxValue;
28}
29
30unsigned int StoneSlabTileItem::getDescriptionId(shared_ptr<ItemInstance> instance)
31{
32 return halfTile->getAuxName(instance->getAuxValue());
33}
34
35bool StoneSlabTileItem::useOn(shared_ptr<ItemInstance> instance, shared_ptr<Player> player, Level *level, int x, int y, int z, int face, float clickX, float clickY, float clickZ, bool bTestUseOnOnly)
36{
37 if (isFull)
38 {
39 return TileItem::useOn(instance, player, level, x, y, z, face, clickX, clickY, clickZ, bTestUseOnOnly);
40 }
41
42 if (instance->count == 0) return false;
43 if (!player->mayUseItemAt(x, y, z, face, instance)) return false;
44
45 int currentTile = level->getTile(x, y, z);
46 int currentData = level->getData(x, y, z);
47 int slabType = currentData & HalfSlabTile::TYPE_MASK;
48 bool isUpper = (currentData & HalfSlabTile::TOP_SLOT_BIT) != 0;
49
50 if (((face == Facing::UP && !isUpper) || (face == Facing::DOWN && isUpper)) && currentTile == halfTile->id && slabType == instance->getAuxValue())
51 {
52 if(bTestUseOnOnly)
53 {
54 return true;
55 }
56
57 if (level->isUnobstructed(fullTile->getAABB(level, x, y, z)) && level->setTileAndData(x, y, z, fullTile->id, slabType, Tile::UPDATE_ALL))
58 {
59 level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, fullTile->soundType->getPlaceSound(), (fullTile->soundType->getVolume() + 1) / 2, fullTile->soundType->getPitch() * 0.8f);
60 instance->count--;
61 }
62 return true;
63 }
64 else if (tryConvertTargetTile(instance, player, level, x, y, z, face, bTestUseOnOnly))
65 {
66 return true;
67 }
68 else
69 {
70 return TileItem::useOn(instance, player, level, x, y, z, face, clickX, clickY, clickZ, bTestUseOnOnly);
71 }
72}
73
74
75bool StoneSlabTileItem::mayPlace(Level *level, int x, int y, int z, int face,shared_ptr<Player> player, shared_ptr<ItemInstance> item)
76{
77 int ox = x, oy = y, oz = z;
78
79 int currentTile = level->getTile(x, y, z);
80 int currentData = level->getData(x, y, z);
81 int slabType = currentData & HalfSlabTile::TYPE_MASK;
82 boolean isUpper = (currentData & HalfSlabTile::TOP_SLOT_BIT) != 0;
83
84 if (((face == Facing::UP && !isUpper) || (face == Facing::DOWN && isUpper)) && currentTile == halfTile->id && slabType == item->getAuxValue())
85 {
86 return true;
87 }
88
89 if (face == 0) y--;
90 if (face == 1) y++;
91 if (face == 2) z--;
92 if (face == 3) z++;
93 if (face == 4) x--;
94 if (face == 5) x++;
95
96 currentTile = level->getTile(x, y, z);
97 currentData = level->getData(x, y, z);
98 slabType = currentData & HalfSlabTile::TYPE_MASK;
99 isUpper = (currentData & HalfSlabTile::TOP_SLOT_BIT) != 0;
100
101 if (currentTile == halfTile->id && slabType == item->getAuxValue())
102 {
103 return true;
104 }
105
106 return TileItem::mayPlace(level, ox, oy, oz, face, player, item);
107}
108
109bool StoneSlabTileItem::tryConvertTargetTile(shared_ptr<ItemInstance> instance, shared_ptr<Player> player, Level *level, int x, int y, int z, int face, bool bTestUseOnOnly)
110{
111 if (face == 0) y--;
112 if (face == 1) y++;
113 if (face == 2) z--;
114 if (face == 3) z++;
115 if (face == 4) x--;
116 if (face == 5) x++;
117
118 int currentTile = level->getTile(x, y, z);
119 int currentData = level->getData(x, y, z);
120 int slabType = currentData & HalfSlabTile::TYPE_MASK;
121
122 if (currentTile == halfTile->id && slabType == instance->getAuxValue())
123 {
124 if(bTestUseOnOnly)
125 {
126 return true;
127 }
128 if (level->isUnobstructed(fullTile->getAABB(level, x, y, z)) && level->setTileAndData(x, y, z, fullTile->id, slabType, Tile::UPDATE_ALL))
129 {
130 level->playSound(x + 0.5f, y + 0.5f, z + 0.5f, fullTile->soundType->getPlaceSound(), (fullTile->soundType->getVolume() + 1) / 2, fullTile->soundType->getPitch() * 0.8f);
131 instance->count--;
132 }
133 return true;
134 }
135
136 return false;
137}