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.

How to set + get the slot in players inventory that the current ItemStack is in?

Featured Replies

set and get the current slot that an itemstack is in

ItemStack doesn't know where it is. It just is.

 

If in inventory, inventory knows tho.

 

player.inventory.mainInventory - array of 36 player slots, you can iterate through them, check if there is an item and replace/move it.

 

Or are we talking about other inventories? IInventory has getStackInSlot(index) or you can return whole array if you want and do same as above.

1.7.10 is no longer supported by forge, you are on your own.

  • Author

Well the first thing I am trying to do is copy an item stack from one slot to another. I managed to copy it but I am not sure how to delete the original.

slot.inventory.setInventorySlotContents(itemstack.stackSize, itemstack);

BioWarfare Mod: http://goo.gl/BYWQty

set the old slot where the itemstack was to null/replace it with the new one. java garbage collection will do the rest

  • Author

Easiest way to do this is just give you my code.

package com.looke81.Tat.items;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.inventory.Slot;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;

import com.looke81.Tat.Tat;

public class EnergyIngot extends Item {
public EnergyIngot() {
	this.setCreativeTab(Tat.TatTab);

}
private Random random = new Random();

public void onUpdate(ItemStack itemstack, World worldIn, Entity entity, int itemSlot, boolean isSelected) {
	EntityPlayer player= (EntityPlayer) entity;
	if(entity instanceof EntityPlayer){
		List stacks = player.inventoryContainer.inventoryItemStacks;
		List slots = player.inventoryContainer.inventorySlots;

		int index = random.nextInt(slots.size());
		Slot slot= (Slot) slots.get(index);
		ItemStack stack= (ItemStack) stacks.get(index);

		if(stack == null && slot != null){

			slot.inventory.setInventorySlotContents(slot.slotNumber, itemstack);

		}
	}
}

}

Yes I know this is kinda crazy but don't worry i'm not planning on doing it every tick this is just for test purposes. What I am trying to do is delete the old item that the new one was copied from. Thanks for your help so far.

BioWarfare Mod: http://goo.gl/BYWQty

EntityPlayer player= (EntityPlayer) entity;
if(entity instanceof EntityPlayer)

Rethink this code please.

  • Author

EntityPlayer player= (EntityPlayer) entity;
if(entity instanceof EntityPlayer)

Rethink this code please.

oh so i guess:

EntityPlayer player= (EntityPlayer) entity;

already checks if the entity is an entityplayer i didn't know that thanks. Also

  • Don't use the Container, it will just be confusing (e.g. you are using slot.slotNumber as the inventory slot index, but that's not right).
  • What is this "old item", "new item" you are talking about? :o Please clarify.

right yea just use the original index course. The "old item" is the item that i have copied from and the new item is the new item made by:

slot.inventory.setInventorySlotContents(index, itemstack);

Edit: and I want to delete the old item to move the item.

BioWarfare Mod: http://goo.gl/BYWQty

already checks if the entity is an entityplayer

Nope. Its casting, not instanceof.

 

Rethink this code please.

You mean "rethink your life!" :D

 

player.inventory.mainInventory - array of 36 player slots, you can iterate through them, check if there is an item and replace/move it.

Why not?

 

public void onUpdate(ItemStack itemstack, World worldIn, Entity entity, int itemSlot, boolean isSelected)
{
if (entity instanceof EntityPlayer)
{
	EntityPlayer player = (EntityPlayer) entity;
	ItemStack old = itemstack;
	for (int i = 0; i < 36; ++i)
	{
		if (player.inventory.mainInventory[i] == itemstack) player.inventory.mainInventory[i] = null; // removes itemstack from inventory.
	}
	// At this point, your inventory doesn't have your itemstack anymore and "old" holds last reference to it.
	// What are you trying to do next is mystery to me.
}
}

 

Not if the item spawning the new item is in a different slot. I understand why your confused but I'm not sure how else to explain it.

WHAT EXACLY are your trying to do?

1.7.10 is no longer supported by forge, you are on your own.

  • Author

WHAT EXACLY are your trying to do?

Probably should have opened with this but wanted to try on my own. Okay so i was trying to see if I could make an item "bounce around" the players inventory by making it move to random slots. I was going to do this by getting a random slot. If that slot had nothing in it (== null) I would copy the item into that slot (this is were we are). Then I would delete the item that was copied from. If the slot did have an item in it I was planning on switching the two items slots.

I hope this helps.

 

BioWarfare Mod: http://goo.gl/BYWQty

while(true)
int randomIndex=random.nextInt(maxIndex);
if(inv.getSlot(randomIndex)==null) placeItemHereAndSetOtherOneNull();
//TODO: prevent infinite loop

  • Author

placeItemHereAndSetOtherOneNull();

So what I am asking is how would I set the item there and make the other one null without making them both null because they are both being called onUpdate()?

BioWarfare Mod: http://goo.gl/BYWQty

player.mainInventory.setStackInSlot(randomIndex, itemstack);
player.mainInventory.setStackInSlot(itemSlot, null);

int rand = worldIn.rand.nextInt(36);
ItemStack someItem = player.inventory.mainInventory[rand];
player.inventory.mainInventory[rand] = itemstack;
player.inventory.mainInventory[itemSlot] = someItem;

 

I am learning for tomorrow exam - everything is (much) more fun than that ;_;

 

Idk how it will work in client/server manners.

 

EDIT

Btw. I just LOVE how everyone else is trying their best to help OP without shooting themselves in head :D Lolololol

 

EDIT

Ah, yes indeed (post below)

1.7.10 is no longer supported by forge, you are on your own.

  • Author

Wow I feel like an entrepreneur on dragons den whose been offered deals from everyone (its a TV show if you don't get reference).

So il go for Failender first.

player.mainInventory.setStackInSlot(randomIndex, itemstack);
player.mainInventory.setStackInSlot(itemSlot, null);

yes but were do you suppose I get itemSlot from? As I only have the slot of the new item and itemstack will call them both.

(looking into other two solutions thankyou very much just give me some time)

BioWarfare Mod: http://goo.gl/BYWQty

public void onUpdate(ItemStack itemstack, World worldIn, Entity entity, int itemSlot, boolean isSelected)

yes but were do you suppose I get itemSlot from?

you dont need to search for the item, you get it passed as argument (int itemSlot)

 

int rand = worldIn.rand.nextInt(36);
ItemStack someItem = player.inventory.mainInventory[rand];
player.inventory.mainInventory[rand] = itemstack;
player.inventory.mainInventory[itemSlot] = someItem;

 

I think this is everybody here now: (no offense intended)

 

[Edit: Removed image. Sorry Ernio, but that was a step too far]

1.7.10 is no longer supported by forge, you are on your own.

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.