package org.bukkit.craftbukkit.inventory;

import net.minecraft.world.IInventory;
import net.minecraft.world.inventory.InventoryMerchant;

import com.bergerkiller.generated.net.minecraft.world.IInventoryHandle;
import com.bergerkiller.generated.org.bukkit.craftbukkit.inventory.CraftInventoryMerchantHandle;
import com.bergerkiller.generated.org.bukkit.craftbukkit.inventory.CraftItemStackHandle;

class CraftItemStack {
    (Object) net.minecraft.world.item.ItemStack handle;

    public static (Object) net.minecraft.world.item.ItemStack asNMSCopy(org.bukkit.inventory.ItemStack original);

    public static (org.bukkit.inventory.ItemStack) CraftItemStack asCraftCopy(org.bukkit.inventory.ItemStack original);

    public static (org.bukkit.inventory.ItemStack) CraftItemStack asCraftMirror((Object) net.minecraft.world.item.ItemStack nmsItemStack);

    public static org.bukkit.inventory.meta.ItemMeta deserializeItemMeta(java.util.Map<String, Object> values) {
        return SerializableMeta.deserialize(values);
    }
}

class CraftInventory extends org.bukkit.inventory.Inventory {
    public (org.bukkit.inventory.Inventory) CraftInventory((Object) IInventory nmsIInventory);

    protected final (IInventoryHandle) IInventory handleField:inventory;

    public (IInventoryHandle) IInventory getHandle:getInventory();
}

class CraftInventoryPlayer {
    public (org.bukkit.inventory.PlayerInventory) CraftInventoryPlayer((Object) net.minecraft.world.entity.player.PlayerInventory nmsPlayerInventory);
}

class CraftInventoryCrafting {
#if version >= 1.13
    public (org.bukkit.inventory.CraftingInventory) CraftInventoryCrafting((Object) IInventory nmsInventoryCrafting, (Object) IInventory nmsResultIInventory);
#else
    public (org.bukkit.inventory.CraftingInventory) CraftInventoryCrafting((Object) net.minecraft.server.InventoryCrafting nmsInventoryCrafting, (Object) IInventory nmsResultIInventory);
#endif
}

class CraftInventoryFurnace {
    public (org.bukkit.inventory.FurnaceInventory) CraftInventoryFurnace((Object) net.minecraft.world.level.block.entity.TileEntityFurnace nmsTileEntityFurnace);
}

class CraftInventoryBrewer {
    public (org.bukkit.inventory.BrewerInventory) CraftInventoryBrewer((Object) IInventory nmsTileEntityBrewingStand);
}

class CraftInventoryMerchant {
    public static org.bukkit.inventory.MerchantInventory createNew((Object) InventoryMerchant nmsInventoryMerchant) {
#if version >= 1.14
        Object merchant = com.bergerkiller.generated.net.minecraft.world.inventory.InventoryMerchantHandle.T.merchant.get(nmsInventoryMerchant);
        return new CraftInventoryMerchant((net.minecraft.world.item.trading.IMerchant) merchant, nmsInventoryMerchant);
#else
        return new CraftInventoryMerchant(nmsInventoryMerchant);
#endif
    }
}

class CraftInventoryBeacon {

    public static org.bukkit.inventory.BeaconInventory createNew((Object) net.minecraft.world.level.block.entity.TileEntityBeacon nmsTileEntityBeacon) {
#if version >= 1.14
        return new com.bergerkiller.bukkit.common.internal.proxy.BeaconInventory_1_14(nmsTileEntityBeacon);
#else
        return new CraftInventoryBeacon(nmsTileEntityBeacon);
#endif
    }
}
