namespace Minecraft.Server.FourKit.Inventory; /// /// Represents the inventory of a Double Chest. /// 54 slots total — left side is slots 0–26, right side is slots 27–53. /// public class DoubleChestInventory : Inventory { private readonly Inventory _left; private readonly Inventory _right; internal DoubleChestInventory(string title, int size, int entityId) : base(title, InventoryType.CHEST, size, entityId) { _left = new InventorySlice("Left chest", this, 0, 27); _right = new InventorySlice("Right chest", this, 27, 27); } /// /// Get the left half of this double chest. /// /// The left side inventory. public Inventory getLeftSide() => _left; /// /// Get the right half of this double chest. /// /// The right side inventory. public Inventory getRightSide() => _right; // todo: get rid of this class private sealed class InventorySlice : Inventory { private readonly Inventory _parent; private readonly int _offset; internal InventorySlice(string name, Inventory parent, int offset, int size) : base(name, InventoryType.CHEST, size) { _parent = parent; _offset = offset; } public override ItemStack? getItem(int index) { if (index < 0 || index >= getSize()) return null; return _parent.getItem(_offset + index); } public override void setItem(int index, ItemStack? item) { if (index >= 0 && index < getSize()) _parent.setItem(_offset + index, item); } } }