Posted August 29, 201510 yr Hi everyone, Does anyone know how you would go about giving a custom mob a usable storage? By usable i mean if this mob picks up a sword, an axe and a bow/arrows it can use its ai to switch weapons at whim and attack the player using those items. Im not sure where to start with this one. I will be researching this/ trying to accomplish it for the next little while and will post any progress I make Any input/ideas/tutorials/info is appreciated thanks
August 30, 201510 yr Author So far I have written an inventory class. Im not sure how to add it to my entities in a way so that it becomes transferrable between my player and the entity because I have a method that swaps the player and entity so that the player becomes the entity and the entity becomes the player. Their models swap, positions swap, textures swap, and stats will also swap. But i need to be able to get the inventory from my entity that is full of items and give it to the player upon morph so that he can use it during morph. If he picks up an item while morphed and then morphs back i want the entity to get the inventory from the player containing the new items and i want it to be able to use them. unsure where to go next. public class InventoryCustom implements IInventory{ private final String inventoryName = "customInventory"; public static final int INV_SIZE = 4; ItemStack[] inventory = new ItemStack[iNV_SIZE]; public InventoryCustom(){ } @Override public int getSizeInventory() { return inventory.length; } @Override public ItemStack getStackInSlot(int slot) { return inventory[slot]; } @Override public ItemStack decrStackSize(int slot, int amount) { ItemStack stack = getStackInSlot(slot); if (stack != null){ if (stack.stackSize > amount){ stack = stack.splitStack(amount); if (stack.stackSize == 0){ setInventorySlotContents(slot, null); } }else{ setInventorySlotContents(slot, null); } this.markDirty(); } return stack; } @Override public ItemStack getStackInSlotOnClosing(int slot) { ItemStack stack = getStackInSlot(slot); if (stack != null){ setInventorySlotContents(slot, null); } return stack; } @Override public void setInventorySlotContents(int slot, ItemStack itemStack) { this.inventory[slot] = itemStack; if (itemStack != null && itemStack.stackSize > this.getInventoryStackLimit()){ itemStack.stackSize = this.getInventoryStackLimit(); } this.markDirty(); } @Override public String getInventoryName() { return inventoryName; } @Override public boolean hasCustomInventoryName() { return inventoryName.length() > 0; } @Override public int getInventoryStackLimit() { return 1; } @Override public void markDirty() { for (int i = 0; i < this.getSizeInventory(); ++i){ if (this.getStackInSlot(i) != null && this.getStackInSlot(i).stackSize == 0){ this.setInventorySlotContents(i, null); } } } @Override public boolean isUseableByPlayer(EntityPlayer player) { return true; } @Override public void openInventory() { } @Override public void closeInventory() { } @Override public boolean isItemValidForSlot(int slot, ItemStack itemStack) { return false; } public void loadInventoryFromPlayer(EntityPlayer player){ NBTTagCompound nbtCompound = player.getEntityData(); if(nbtCompound != null){ NBTTagList nbtTagList = nbtCompound.getTagList("customInventory", 10); this.loadInventoryFromNBT(nbtTagList); } } //save the player's PC inventory to NBT public void saveInventoryToPlayer(EntityPlayer player){ NBTTagCompound nbtCompound = player.getEntityData(); NBTTagList nbtTagList = this.saveInventoryToNBT(); nbtCompound.setTag("customInventory", nbtTagList); } //load,save to NBT copied from minecraft chest code public void loadInventoryFromNBT(NBTTagList par1NBTTagList) { int i; for (i = 0; i < this.getSizeInventory(); ++i) { this.setInventorySlotContents(i, (ItemStack)null); } for (i = 0; i < par1NBTTagList.tagCount(); ++i) { NBTTagCompound nbttagcompound = par1NBTTagList.getCompoundTagAt(i); int j = nbttagcompound.getByte("Slot") & 255; if (j >= 0 && j < this.getSizeInventory()) { this.setInventorySlotContents(j, ItemStack.loadItemStackFromNBT(nbttagcompound)); } } } //load,save to NBT copied from minecraft chest code public NBTTagList saveInventoryToNBT() { NBTTagList nbttaglist = new NBTTagList(); for (int i = 0; i < this.getSizeInventory(); ++i) { ItemStack itemstack = this.getStackInSlot(i); if (itemstack != null) { NBTTagCompound nbttagcompound = new NBTTagCompound(); nbttagcompound.setByte("Slot", (byte)i); itemstack.writeToNBT(nbttagcompound); nbttaglist.appendTag(nbttagcompound); } } return nbttaglist; } }
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.