diff options
Diffstat (limited to 'Minecraft.World/PlayerEnderChestContainer.cpp')
| -rw-r--r-- | Minecraft.World/PlayerEnderChestContainer.cpp | 72 |
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 |
