Package codechicken.nei

Source Code of codechicken.nei.ContainerPotionCreator$InventoryPotionStore

package codechicken.nei;

import codechicken.core.inventory.ContainerExtended;
import codechicken.core.inventory.SlotHandleClicks;
import codechicken.lib.inventory.InventoryNBT;
import codechicken.lib.inventory.InventoryUtils;
import codechicken.lib.packet.PacketCustom;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.InventoryBasic;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemPotion;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.potion.PotionEffect;

public class ContainerPotionCreator extends ContainerExtended
{
    public class SlotPotion extends Slot
    {
        public SlotPotion(IInventory inv, int slotIndex, int x, int y) {
            super(inv, slotIndex, x, y);
        }

        @Override
        public boolean isItemValid(ItemStack stack) {
            return stack.getItem() instanceof ItemPotion;
        }

        @Override
        public void onSlotChanged() {
            super.onSlotChanged();
            if (getHasStack()) {
                ItemStack stack = getStack();
                if (!stack.hasTagCompound())
                    stack.setTagCompound(new NBTTagCompound());
                if (!stack.getTagCompound().hasKey("CustomPotionEffects"))
                    stack.getTagCompound().setTag("CustomPotionEffects", new NBTTagList());
            }
        }
    }

    public class SlotPotionStore extends SlotHandleClicks
    {
        public SlotPotionStore(IInventory inv, int slotIndex, int x, int y) {
            super(inv, slotIndex, x, y);
        }

        @Override
        public ItemStack slotClick(ContainerExtended container, EntityPlayer player, int button, int modifier) {
            ItemStack held = player.inventory.getItemStack();
            if (button == 0 && modifier == 1) {
                NEIClientUtils.cheatItem(getStack(), button, -1);
            } else if (button == 1) {
                putStack(null);
            } else if (held != null) {
                if (isItemValid(held)) {
                    putStack(InventoryUtils.copyStack(held, 1));
                    player.inventory.setItemStack(null);
                }
            } else if (getHasStack())
                player.inventory.setItemStack(getStack());

            return null;
        }

        @Override
        public boolean isItemValid(ItemStack stack) {
            return stack.getItem() instanceof ItemPotion;
        }
    }

    public static class InventoryPotionStore extends InventoryNBT
    {
        public InventoryPotionStore() {
            super(9, NEIClientConfig.global.nbt.getCompoundTag("potionStore"));
        }

        @Override
        public void markDirty() {
            super.markDirty();
            NEIClientConfig.global.nbt.setTag("potionStore", tag);
            NEIClientConfig.global.saveNBT();
        }
    }

    InventoryPlayer playerInv;
    InventoryBasic potionInv;
    IInventory potionStoreInv;

    public ContainerPotionCreator(InventoryPlayer inventoryPlayer, IInventory potionStoreInv) {
        playerInv = inventoryPlayer;
        potionInv = new InventoryBasic("Potion", true, 1);
        this.potionStoreInv = potionStoreInv;

        addSlotToContainer(new SlotPotion(potionInv, 0, 25, 102));
        for (int i = 0; i < 9; i++)
            addSlotToContainer(new SlotPotionStore(potionStoreInv, i, 8 + i * 18, 14));
        bindPlayerInventory(inventoryPlayer, 8, 125);
    }

    @Override
    public boolean doMergeStackAreas(int slotIndex, ItemStack stack) {
        if (slotIndex < 10)
            return mergeItemStack(stack, 10, 46, true);
        return mergeItemStack(stack, 0, 1, false);
    }

    @Override
    public boolean canInteractWith(EntityPlayer entityplayer) {
        return true;
    }

    @Override
    public void onContainerClosed(EntityPlayer player) {
        super.onContainerClosed(player);

        if (!player.worldObj.isRemote)
            InventoryUtils.dropOnClose(player, potionInv);
    }

    @SuppressWarnings("unchecked")
    @Override
    public void handleInputPacket(PacketCustom packet) {
        ItemStack potion = potionInv.getStackInSlot(0);
        if (potion == null)
            return;

        boolean add = packet.readBoolean();
        int effectID = packet.readUByte();

        NBTTagList effects = potion.getTagCompound().getTagList("CustomPotionEffects", 10);
        NBTTagList newEffects = new NBTTagList();
        for(int i = 0; i < effects.tagCount(); i++) {
            NBTTagCompound tag = effects.getCompoundTagAt(i);
            PotionEffect e = PotionEffect.readCustomPotionEffectFromNBT(tag);
            if(e.getPotionID() != effectID)
                newEffects.appendTag(tag);
        }
        if(add)
            newEffects.appendTag(new PotionEffect(effectID, packet.readInt(), packet.readUByte()).writeCustomPotionEffectToNBT(new NBTTagCompound()));
        potion.getTagCompound().setTag("CustomPotionEffects", newEffects);
    }

    public void setPotionEffect(int effectID, int duration, int amplifier) {
        PacketCustom packet = NEICPH.createContainerPacket();
        packet.writeBoolean(true);
        packet.writeByte(effectID);
        packet.writeInt(duration);
        packet.writeByte(amplifier);
        packet.sendToServer();
    }

    public void removePotionEffect(int effectID) {
        PacketCustom packet = NEICPH.createContainerPacket();
        packet.writeBoolean(false);
        packet.writeByte(effectID);
        packet.sendToServer();
    }
}
TOP

Related Classes of codechicken.nei.ContainerPotionCreator$InventoryPotionStore

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.