Search in sources :

Example 1 with CraftInventoryCustom

use of org.bukkit.craftbukkit.v.inventory.CraftInventoryCustom in project Arclight by IzzelAliz.

the class ContainerMixin method getBukkitView.

// todo check this
public InventoryView getBukkitView() {
    if (bukkitView == null) {
        PlayerEntity candidate = null;
        Set<IInventory> set = new HashSet<>();
        for (Slot slot : this.inventorySlots) {
            if (slot.inventory != null) {
                if (slot.inventory instanceof PlayerInventory) {
                    if (candidate != null && ((PlayerInventory) slot.inventory).player != candidate) {
                        ArclightMod.LOGGER.warn("Duplicate PlayerInventory inside {}, previous {}, new {}", this, candidate, slot.inventory);
                    }
                    candidate = ((PlayerInventory) slot.inventory).player;
                } else {
                    set.add(slot.inventory);
                }
            }
        }
        if (candidate == null) {
            if (ArclightCaptures.getContainerOwner() != null) {
                candidate = ArclightCaptures.getContainerOwner();
            } else {
                throw new RuntimeException("candidate cannot be null");
            }
        }
        CraftResultInventory resultCandidate = null;
        IInventory mainCandidate = null;
        for (IInventory inventory : set) {
            if (inventory instanceof CraftResultInventory) {
                resultCandidate = (CraftResultInventory) inventory;
            } else {
                mainCandidate = inventory;
            }
        }
        Inventory inv;
        if (mainCandidate == null && resultCandidate != null) {
            mainCandidate = resultCandidate;
            resultCandidate = null;
        }
        if (mainCandidate != null) {
            if (resultCandidate != null) {
                inv = new org.bukkit.craftbukkit.v.inventory.CraftResultInventory(mainCandidate, resultCandidate);
            } else {
                inv = new CraftInventory(mainCandidate);
            }
        } else {
            // container has no slots
            inv = new CraftInventoryCustom(((PlayerEntityBridge) candidate).bridge$getBukkitEntity(), 0);
        }
        bukkitView = new CraftInventoryView(((PlayerEntityBridge) candidate).bridge$getBukkitEntity(), inv, (Container) (Object) this);
    }
    return bukkitView;
}
Also used : IInventory(net.minecraft.inventory.IInventory) CraftInventoryCustom(org.bukkit.craftbukkit.v.inventory.CraftInventoryCustom) CraftInventory(org.bukkit.craftbukkit.v.inventory.CraftInventory) PlayerEntityBridge(io.izzel.arclight.common.bridge.entity.player.PlayerEntityBridge) PlayerInventory(net.minecraft.entity.player.PlayerInventory) PlayerEntity(net.minecraft.entity.player.PlayerEntity) ServerPlayerEntity(net.minecraft.entity.player.ServerPlayerEntity) Container(net.minecraft.inventory.container.Container) CraftInventoryView(org.bukkit.craftbukkit.v.inventory.CraftInventoryView) Slot(net.minecraft.inventory.container.Slot) CraftResultInventory(net.minecraft.inventory.CraftResultInventory) Inventory(org.bukkit.inventory.Inventory) CraftInventory(org.bukkit.craftbukkit.v.inventory.CraftInventory) CraftResultInventory(net.minecraft.inventory.CraftResultInventory) PlayerInventory(net.minecraft.entity.player.PlayerInventory) IInventory(net.minecraft.inventory.IInventory) HashSet(java.util.HashSet)

Aggregations

PlayerEntityBridge (io.izzel.arclight.common.bridge.entity.player.PlayerEntityBridge)1 HashSet (java.util.HashSet)1 PlayerEntity (net.minecraft.entity.player.PlayerEntity)1 PlayerInventory (net.minecraft.entity.player.PlayerInventory)1 ServerPlayerEntity (net.minecraft.entity.player.ServerPlayerEntity)1 CraftResultInventory (net.minecraft.inventory.CraftResultInventory)1 IInventory (net.minecraft.inventory.IInventory)1 Container (net.minecraft.inventory.container.Container)1 Slot (net.minecraft.inventory.container.Slot)1 CraftInventory (org.bukkit.craftbukkit.v.inventory.CraftInventory)1 CraftInventoryCustom (org.bukkit.craftbukkit.v.inventory.CraftInventoryCustom)1 CraftInventoryView (org.bukkit.craftbukkit.v.inventory.CraftInventoryView)1 Inventory (org.bukkit.inventory.Inventory)1