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.inventory.h"
3#include "net.minecraft.world.level.h"
4#include "net.minecraft.world.level.tile.h"
5#include "net.minecraft.world.entity.player.h"
6#include "RepairResultSlot.h"
7
8RepairResultSlot::RepairResultSlot(AnvilMenu *menu, int xt, int yt, int zt, shared_ptr<Container> container, int slot, int x, int y) : Slot(container, slot, x, y)
9{
10 m_menu = menu;
11 this->xt = xt;
12 this->yt = yt;
13 this->zt = zt;
14}
15
16bool RepairResultSlot::mayPlace(shared_ptr<ItemInstance> item)
17{
18 return false;
19}
20
21bool RepairResultSlot::mayPickup(shared_ptr<Player> player)
22{
23 return (player->abilities.instabuild || player->experienceLevel >= m_menu->cost) && (m_menu->cost > 0 && hasItem());
24}
25
26void RepairResultSlot::onTake(shared_ptr<Player> player, shared_ptr<ItemInstance> carried)
27{
28 if (!player->abilities.instabuild) player->giveExperienceLevels(-m_menu->cost);
29 m_menu->repairSlots->setItem(AnvilMenu::INPUT_SLOT, nullptr);
30 if (m_menu->repairItemCountCost > 0)
31 {
32 shared_ptr<ItemInstance> addition = m_menu->repairSlots->getItem(AnvilMenu::ADDITIONAL_SLOT);
33 if (addition != NULL && addition->count > m_menu->repairItemCountCost)
34 {
35 addition->count -= m_menu->repairItemCountCost;
36 m_menu->repairSlots->setItem(AnvilMenu::ADDITIONAL_SLOT, addition);
37 }
38 else
39 {
40 m_menu->repairSlots->setItem(AnvilMenu::ADDITIONAL_SLOT, nullptr);
41 }
42 }
43 else
44 {
45 m_menu->repairSlots->setItem(AnvilMenu::ADDITIONAL_SLOT, nullptr);
46 }
47 m_menu->cost = 0;
48
49 if (!player->abilities.instabuild && !m_menu->level->isClientSide && m_menu->level->getTile(xt, yt, zt) == Tile::anvil->id && player->getRandom()->nextFloat() < 0.12f)
50 {
51 int data = m_menu->level->getData(xt, yt, zt);
52 int dir = data & 0x3;
53 int dmg = data >> 2;
54
55 if (++dmg > 2)
56 {
57 m_menu->level->removeTile(xt, yt, zt);
58 m_menu->level->levelEvent(LevelEvent::SOUND_ANVIL_BROKEN, xt, yt, zt, 0);
59 }
60 else
61 {
62 m_menu->level->setData(xt, yt, zt, dir | (dmg << 2), Tile::UPDATE_CLIENTS);
63 m_menu->level->levelEvent(LevelEvent::SOUND_ANVIL_USED, xt, yt, zt, 0);
64 }
65 }
66 else if (!m_menu->level->isClientSide)
67 {
68 m_menu->level->levelEvent(LevelEvent::SOUND_ANVIL_USED, xt, yt, zt, 0);
69 }
70}
71
72bool RepairResultSlot::mayCombine(shared_ptr<ItemInstance> second)
73{
74 return false;
75}