generated from tilera/1710mod
186 lines
5.2 KiB
Java
186 lines
5.2 KiB
Java
package com.eloraam.redpower.base;
|
|
|
|
import com.eloraam.redpower.RedPowerBase;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import net.minecraft.client.renderer.texture.IIconRegister;
|
|
import net.minecraft.creativetab.CreativeTabs;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.inventory.IInventory;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.nbt.NBTTagList;
|
|
import net.minecraft.util.IIcon;
|
|
import net.minecraft.world.World;
|
|
|
|
public class ItemBag extends Item {
|
|
private IIcon[] icons = new IIcon[16];
|
|
|
|
public ItemBag() {
|
|
this.setMaxStackSize(1);
|
|
this.setHasSubtypes(true);
|
|
this.setUnlocalizedName("rpBag");
|
|
this.setCreativeTab(CreativeTabs.tabMisc);
|
|
}
|
|
|
|
public static IInventory getBagInventory(ItemStack ist, EntityPlayer player) {
|
|
return !(ist.getItem() instanceof ItemBag) ? null : ((ItemBag)ist.getItem()).new InventoryBag(ist, player);
|
|
}
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
public void registerIcons(IIconRegister registerer) {
|
|
for(int color = 0; color < 16; ++color) {
|
|
this.icons[color] = registerer.registerIcon("rpbase:bag/" + color);
|
|
}
|
|
|
|
}
|
|
|
|
public int getMaxItemUseDuration(ItemStack ist) {
|
|
return 1;
|
|
}
|
|
|
|
public IIcon getIconFromDamage(int meta) {
|
|
return this.icons[meta % this.icons.length];
|
|
}
|
|
|
|
public ItemStack onItemRightClick(ItemStack ist, World world, EntityPlayer player) {
|
|
if (!world.isRemote && !player.isSneaking()) {
|
|
player.openGui(RedPowerBase.instance, 4, world, 0, 0, 0);
|
|
}
|
|
|
|
return ist;
|
|
}
|
|
|
|
public class InventoryBag implements IInventory {
|
|
ItemStack bagitem;
|
|
ItemStack[] items;
|
|
EntityPlayer player;
|
|
|
|
InventoryBag(ItemStack ist, EntityPlayer host) {
|
|
this.bagitem = ist;
|
|
this.player = host;
|
|
this.unpackInventory();
|
|
}
|
|
|
|
private void unpackInventory() {
|
|
this.items = new ItemStack[27];
|
|
if (this.bagitem.stackTagCompound != null) {
|
|
NBTTagList list = this.bagitem.stackTagCompound.getTagList("contents", 10);
|
|
|
|
for(int i = 0; i < list.tagCount(); ++i) {
|
|
NBTTagCompound item = list.getCompoundTagAt(i);
|
|
byte slt = item.getByte("Slot");
|
|
if (slt < 27) {
|
|
this.items[slt] = ItemStack.loadItemStackFromNBT(item);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
private void packInventory() {
|
|
if (this.bagitem.stackTagCompound == null) {
|
|
this.bagitem.setTagCompound(new NBTTagCompound());
|
|
}
|
|
|
|
NBTTagList contents = new NBTTagList();
|
|
|
|
for(int i = 0; i < 27; ++i) {
|
|
if (this.items[i] != null) {
|
|
NBTTagCompound cpd = new NBTTagCompound();
|
|
this.items[i].writeToNBT(cpd);
|
|
cpd.setByte("Slot", (byte)i);
|
|
contents.appendTag(cpd);
|
|
}
|
|
}
|
|
|
|
this.bagitem.stackTagCompound.setTag("contents", contents);
|
|
}
|
|
|
|
public int getSizeInventory() {
|
|
return 27;
|
|
}
|
|
|
|
public ItemStack getStackInSlot(int slot) {
|
|
return this.items[slot];
|
|
}
|
|
|
|
public ItemStack decrStackSize(int slot, int num) {
|
|
if (this.bagitem != this.player.getHeldItem()) {
|
|
this.markDirty();
|
|
this.player.closeScreen();
|
|
return null;
|
|
} else if (this.items[slot] == null) {
|
|
return null;
|
|
} else if (this.items[slot].stackSize <= num) {
|
|
ItemStack tr = this.items[slot];
|
|
this.items[slot] = null;
|
|
this.markDirty();
|
|
return tr;
|
|
} else {
|
|
ItemStack tr = this.items[slot].splitStack(num);
|
|
if (this.items[slot].stackSize == 0) {
|
|
this.items[slot] = null;
|
|
}
|
|
|
|
this.markDirty();
|
|
return tr;
|
|
}
|
|
}
|
|
|
|
public ItemStack getStackInSlotOnClosing(int slot) {
|
|
if (this.items[slot] == null) {
|
|
return null;
|
|
} else {
|
|
ItemStack tr = this.items[slot];
|
|
this.items[slot] = null;
|
|
return tr;
|
|
}
|
|
}
|
|
|
|
public void setInventorySlotContents(int slot, ItemStack ist) {
|
|
if (this.bagitem != this.player.getHeldItem()) {
|
|
this.markDirty();
|
|
this.player.closeScreen();
|
|
} else {
|
|
this.items[slot] = ist;
|
|
if (ist != null && ist.stackSize > this.getInventoryStackLimit()) {
|
|
ist.stackSize = this.getInventoryStackLimit();
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
public String getInventoryName() {
|
|
return "item.rpBag.name";
|
|
}
|
|
|
|
public int getInventoryStackLimit() {
|
|
return 64;
|
|
}
|
|
|
|
public void markDirty() {
|
|
this.packInventory();
|
|
}
|
|
|
|
public boolean isUseableByPlayer(EntityPlayer player) {
|
|
return this.bagitem == this.player.getHeldItem();
|
|
}
|
|
|
|
public void openInventory() {
|
|
}
|
|
|
|
public void closeInventory() {
|
|
}
|
|
|
|
public boolean hasCustomInventoryName() {
|
|
return false;
|
|
}
|
|
|
|
public boolean isItemValidForSlot(int slotID, ItemStack stack) {
|
|
return this.bagitem != null && stack.getItem() != ItemBag.this;
|
|
}
|
|
}
|
|
}
|