4jcraft/Minecraft.World/Player/PlayerEnderChestContainer.cpp
2026-03-21 17:26:42 -05:00

72 lines
2.1 KiB
C++

#include "../Platform/stdafx.h"
#include "../Headers/net.minecraft.world.level.tile.entity.h"
#include "../Network/Packets/ContainerOpenPacket.h"
#include "PlayerEnderChestContainer.h"
PlayerEnderChestContainer::PlayerEnderChestContainer()
: SimpleContainer(IDS_TILE_ENDERCHEST, L"", false, 9 * 3) {
activeChest = nullptr;
}
int PlayerEnderChestContainer::getContainerType() {
return ContainerOpenPacket::ENDER_CHEST;
}
void PlayerEnderChestContainer::setActiveChest(
std::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++) {
std::shared_ptr<ItemInstance> item = getItem(i);
if (item != NULL) {
CompoundTag* tag = new CompoundTag();
tag->putByte(L"Slot", (uint8_t)i);
item->save(tag);
items->add(tag);
}
}
return items;
}
bool PlayerEnderChestContainer::stillValid(std::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;
}
bool PlayerEnderChestContainer::canPlaceItem(
int slot, std::shared_ptr<ItemInstance> item) {
return true;
}