Jump to content

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


Recommended Posts

Posted

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.

  • Like 1

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

Posted

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

Posted

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

Posted

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

Posted

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.

Posted

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

Posted

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.

Posted

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

Posted

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

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