Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

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

  • 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.

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...

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.