Jump to content

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


Looke81

Recommended Posts

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Hello there! I am trying to make custom dimensions for a modpack I am making in an older minecraft version, 1.16.5. I like that version and it has a few other mods that have not been updated that I would still like to use. Anyway, I am having a terrible time with getting my dimension to work and have tried using code from other peoples projects to at least figure out what I'm supposed to be doing but it has not been as helpful as I would have liked. If anyone could help that would be greatly appreciated! Here is my github with all the code as I am using it: https://github.com/BladeColdsteel/InvigoratedDimensionsMod I have also included the last log, https://pastebin.com/zX9vsDSq, I had when I tried to load up a world, let me know if there is anything else I should send though, thank you!
    • Whether you are a fan of Hypixel Bedwars, SkyWars and PvP gamemodes like that, well you would enjoy this server! We have a very fun and unique style of PvP that a lot of our players really enjoy and we want to bring this server to more players like you! Yes you reading this post haha. Introducing, the Minezone Network, home of SUPER CRAFT BLOCKS. We've been working on this server for over 4 years now. Here is what we have to offer: SUPER CRAFT BLOCKS: This has 3 different gamemodes you can play, Classic, Duels and Frenzy. Each mode offers over 60 kits to choose from, along with a total of over 60 maps, allowing for various different playstyles on each map. There are also random powerups that spawn on the map which can include Health Pots, Bazookas, Nukes, Extra Lives and way way more! There is also double jump in this gamemode as well, which makes PvP a lot more fun & unique. You only need a minimum of 2 players to start any mode! Classic: Choose a kit, 5 lives for each player, fight it out and claim the #1 spot! Look out for lightning as they can spawn powerups to really give you an advantage in the game! Duels: Fight against another random player or one of your friends and see who is the best! Frenzy: Your kit is randomly selected for you, each life you will have a different kit. You can fight with up to 100 players in this mode and lets see who will be the best out of that 100! All the other stuff from Classic/Duels apply to this mode as well like powerups. We have 2 ranks on this server too, VIP and CAPTAIN which has a bunch of different perks for SCB and other things like Cosmetics and more.   SERVER IP: If this server has caught your interest in any way, please consider joining and you will NOT regret it! Bring some of your friends online for an even better experience and join in on the fun at: IP: minezone.club Hope to see you online!   SERVER TRAILER: https://www.youtube.com/watch?v=0phpMgu1mH0
    • The mod give new blocks  
    • I will a Mode for 1.21 in this Mod give new block, items and dimensions   
  • Topics

×
×
  • Create New...

Important Information

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