the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 75 lines 2.3 kB view raw
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}