Java tutorial
/* * This class was created by: RANKSHANK as a part of the Arbitraria mod. * Full source can be found @ https://github.com/RANKSHANK/Arbitraria * * Arbitraria is provided in binary and source forms under the Arbitraria License. * Arbitraria License can be found in the repository @ https://github.com/RANKSHANK/Arbitraria */ package mod.rankshank.arbitraria.common.cap.armcannon; import mod.rankshank.arbitraria.common.cap.munitions.CapabilityHandlerCannonMunition; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumFacing; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.ICapabilityProvider; import net.minecraftforge.common.util.INBTSerializable; import net.minecraftforge.items.CapabilityItemHandler; import net.minecraftforge.items.IItemHandler; import net.minecraftforge.items.IItemHandlerModifiable; public final class CapabilityArmCannon implements IItemHandler, ICapabilityProvider, INBTSerializable, IItemHandlerModifiable { private final ItemStack[] augments; public CapabilityArmCannon(ItemStack stack, NBTTagCompound nbt) { this.augments = new ItemStack[6]; } @Override public boolean hasCapability(Capability<?> capability, EnumFacing facing) { return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || capability == CapabilityHandlerCannonMunition.CANNON_CAPABILITY; } @Override @SuppressWarnings("unchecked") public <T> T getCapability(Capability<T> capability, EnumFacing facing) { return (T) (capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || capability == CapabilityHandlerCannonMunition.CANNON_CAPABILITY ? this : null); } @Override public int getSlots() { return this.augments.length; } @Override public ItemStack getStackInSlot(int slot) { return this.augments[slot]; } @Override public ItemStack insertItem(int slot, ItemStack stack, boolean simulate) { ItemStack hold = this.augments[slot]; if (hold == null) { if (!simulate) { } } else if (hold.isItemEqual(stack)) { if (slot > 1) { return stack; } if (!simulate) { } } return stack; } @Override public ItemStack extractItem(int slot, int amount, boolean simulate) { ItemStack ret = this.augments[slot].copy(); int diff = ret.getCount() - amount; ret.setCount(diff <= 0 ? ret.getCount() : amount); if (!simulate) { if (diff <= 0) { this.augments[slot] = ItemStack.EMPTY; } else { ItemStack itemStack = this.augments[slot]; itemStack.shrink(amount); } } return ret; } @Override public int getSlotLimit(int slot) { return 0; } public ItemStack getAmmo() { return this.augments[0]; } public ItemStack getPrimer() { return this.augments[1]; } public boolean hasAugment() { return false; } @Override public NBTBase serializeNBT() { return CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.writeNBT(this, null); } @Override public void deserializeNBT(NBTBase nbt) { CapabilityItemHandler.ITEM_HANDLER_CAPABILITY.readNBT(this, null, nbt); } @Override public void setStackInSlot(int slot, ItemStack stack) { } }