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/PlayerEnderChestContainer.cpp | 72 +++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 Minecraft.World/PlayerEnderChestContainer.cpp (limited to 'Minecraft.World/PlayerEnderChestContainer.cpp') diff --git a/Minecraft.World/PlayerEnderChestContainer.cpp b/Minecraft.World/PlayerEnderChestContainer.cpp new file mode 100644 index 00000000..466d9710 --- /dev/null +++ b/Minecraft.World/PlayerEnderChestContainer.cpp @@ -0,0 +1,72 @@ +#include "stdafx.h" +#include "net.minecraft.world.level.tile.entity.h" +#include "PlayerEnderChestContainer.h" + +PlayerEnderChestContainer::PlayerEnderChestContainer() : SimpleContainer(IDS_TILE_ENDERCHEST, 9 * 3) +{ + activeChest = nullptr; +} + +void PlayerEnderChestContainer::setActiveChest(shared_ptr activeChest) +{ + this->activeChest = activeChest; +} + +void PlayerEnderChestContainer::setItemsByTag(ListTag *enderItemsList) +{ + for (int i = 0; i < getContainerSize(); i++) + { + setItem(i, nullptr); + } + for (int i = 0; i < enderItemsList->size(); i++) + { + CompoundTag *tag = enderItemsList->get(i); + int slot = tag->getByte(L"Slot") & 0xff; + if (slot >= 0 && slot < getContainerSize()) setItem(slot, ItemInstance::fromTag(tag)); + } +} + +ListTag *PlayerEnderChestContainer::createTag() +{ + ListTag *items = new ListTag(L"EnderItems"); + for (int i = 0; i < getContainerSize(); i++) + { + shared_ptr item = getItem(i); + if (item != NULL) + { + CompoundTag *tag = new CompoundTag(); + tag->putByte(L"Slot", (byte) i); + item->save(tag); + items->add(tag); + } + } + return items; +} + +bool PlayerEnderChestContainer::stillValid(shared_ptr player) +{ + if (activeChest != NULL && !activeChest->stillValid(player)) + { + return false; + } + return SimpleContainer::stillValid(player); +} + +void PlayerEnderChestContainer::startOpen() +{ + if (activeChest != NULL) + { + activeChest->startOpen(); + } + SimpleContainer::startOpen(); +} + +void PlayerEnderChestContainer::stopOpen() +{ + if (activeChest) + { + activeChest->stopOpen(); + } + SimpleContainer::stopOpen(); + activeChest = nullptr; +} \ No newline at end of file -- cgit v1.2.3