aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.World/PlayerEnderChestContainer.cpp
diff options
context:
space:
mode:
authordaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
committerdaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
commitb691c43c44ff180d10e7d4a9afc83b98551ff586 (patch)
tree3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.World/PlayerEnderChestContainer.cpp
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.World/PlayerEnderChestContainer.cpp')
-rw-r--r--Minecraft.World/PlayerEnderChestContainer.cpp72
1 files changed, 72 insertions, 0 deletions
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<EnderChestTileEntity> activeChest)
+{
+ this->activeChest = activeChest;
+}
+
+void PlayerEnderChestContainer::setItemsByTag(ListTag<CompoundTag> *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<CompoundTag> *PlayerEnderChestContainer::createTag()
+{
+ ListTag<CompoundTag> *items = new ListTag<CompoundTag>(L"EnderItems");
+ for (int i = 0; i < getContainerSize(); i++)
+ {
+ shared_ptr<ItemInstance> 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> 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