Jump to content

[1.7.10] How to Give a mob a useable storage


Thornack

Recommended Posts

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

Link to comment
Share on other sites

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;
    }
}


Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.