package net.mcft.copy.backpacks.container; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.EntityEquipmentSlot; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemStack; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import net.mcft.copy.backpacks.api.IBackpackType; /** Replaces the player's regular chest armor slot to * prevent them from taking out equipped backpacks. */ public class SlotArmorBackpack extends Slot { public SlotArmorBackpack(IInventory inventory, int slot, int x, int y) { super(inventory, slot, x, y); } /** Replaces the chest armor slot of the player with one that * prevents backpacks from being taken out, if necessary. */ public static void replace(EntityPlayer player) { Slot slot = player.inventoryContainer.getSlot(6); if (slot instanceof SlotArmorBackpack) return; Slot newSlot = new SlotArmorBackpack(slot.inventory, slot.getSlotIndex(), slot.xPos, slot.yPos); newSlot.slotNumber = slot.slotNumber; player.inventoryContainer.inventorySlots.set(slot.slotNumber, newSlot); } @Override @SideOnly(Side.CLIENT) public String getSlotTexture() { return ItemArmor.EMPTY_SLOT_NAMES[EntityEquipmentSlot.CHEST.getIndex()]; } @Override public int getSlotStackLimit() { return 1; } @Override public boolean isItemValid(ItemStack stack) { return stack.getItem().isValidArmor(stack, EntityEquipmentSlot.CHEST, ((InventoryPlayer)inventory).player); } @Override public boolean canTakeStack(EntityPlayer player) { ItemStack stack = getStack(); return (!(stack.getItem() instanceof IBackpackType) && (player.isCreative() || !EnchantmentHelper.hasBindingCurse(stack))); // Why, Mojang, whhhyyyyy??! Still no Item.canEquip / canUnequip!? } }