From b691c43c44ff180d10e7d4a9afc83b98551ff586 Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Sun, 1 Mar 2026 12:16:08 +0800 Subject: Initial commit --- Minecraft.World/RepairResultSlot.cpp | 75 ++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 Minecraft.World/RepairResultSlot.cpp (limited to 'Minecraft.World/RepairResultSlot.cpp') diff --git a/Minecraft.World/RepairResultSlot.cpp b/Minecraft.World/RepairResultSlot.cpp new file mode 100644 index 00000000..041a64a7 --- /dev/null +++ b/Minecraft.World/RepairResultSlot.cpp @@ -0,0 +1,75 @@ +#include "stdafx.h" +#include "net.minecraft.world.inventory.h" +#include "net.minecraft.world.level.h" +#include "net.minecraft.world.level.tile.h" +#include "net.minecraft.world.entity.player.h" +#include "RepairResultSlot.h" + +RepairResultSlot::RepairResultSlot(RepairMenu *menu, int xt, int yt, int zt, shared_ptr container, int slot, int x, int y) : Slot(container, slot, x, y) +{ + m_menu = menu; + this->xt = xt; + this->yt = yt; + this->zt = zt; +} + +bool RepairResultSlot::mayPlace(shared_ptr item) +{ + return false; +} + +bool RepairResultSlot::mayPickup(shared_ptr player) +{ + return (player->abilities.instabuild || player->experienceLevel >= m_menu->cost) && (m_menu->cost > 0 && hasItem()); +} + +void RepairResultSlot::onTake(shared_ptr player, shared_ptr carried) +{ + if (!player->abilities.instabuild) player->withdrawExperienceLevels(m_menu->cost); + m_menu->repairSlots->setItem(RepairMenu::INPUT_SLOT, nullptr); + if (m_menu->repairItemCountCost > 0) + { + shared_ptr addition = m_menu->repairSlots->getItem(RepairMenu::ADDITIONAL_SLOT); + if (addition != NULL && addition->count > m_menu->repairItemCountCost) + { + addition->count -= m_menu->repairItemCountCost; + m_menu->repairSlots->setItem(RepairMenu::ADDITIONAL_SLOT, addition); + } + else + { + m_menu->repairSlots->setItem(RepairMenu::ADDITIONAL_SLOT, nullptr); + } + } + else + { + m_menu->repairSlots->setItem(RepairMenu::ADDITIONAL_SLOT, nullptr); + } + m_menu->cost = 0; + + if (!player->abilities.instabuild && !m_menu->level->isClientSide && m_menu->level->getTile(xt, yt, zt) == Tile::anvil->id && player->getRandom()->nextFloat() < 0.12f) + { + int data = m_menu->level->getData(xt, yt, zt); + int dir = data & 0x3; + int dmg = data >> 2; + + if (++dmg > 2) + { + m_menu->level->setTile(xt, yt, zt, 0); + m_menu->level->levelEvent(LevelEvent::SOUND_ANVIL_BROKEN, xt, yt, zt, 0); + } + else + { + m_menu->level->setData(xt, yt, zt, dir | (dmg << 2)); + m_menu->level->levelEvent(LevelEvent::SOUND_ANVIL_USED, xt, yt, zt, 0); + } + } + else if (!m_menu->level->isClientSide) + { + m_menu->level->levelEvent(LevelEvent::SOUND_ANVIL_USED, xt, yt, zt, 0); + } +} + +bool RepairResultSlot::mayCombine(shared_ptr second) +{ + return false; +} \ No newline at end of file -- cgit v1.2.3