Jump to content
  • Home
  • Files
  • Docs
Topics
  • All Content

  • This Topic
  • This Forum

  • Advanced Search
  • Existing user? Sign In  

    Sign In



    • Not recommended on shared computers


    • Forgot your password?

  • Sign Up
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • Detecting an item and performing actions on it in a player's inventory
Currently Supported: 1.16.X (Latest) and 1.15.X (LTS)
Sign in to follow this  
Followers 1
Glorfindel22

Detecting an item and performing actions on it in a player's inventory

By Glorfindel22, September 21, 2013 in Modder Support

  • Reply to this topic
  • Start new topic

Recommended Posts

Glorfindel22    1

Glorfindel22

Glorfindel22    1

  • Tree Puncher
  • Glorfindel22
  • Members
  • 1
  • 43 posts
Posted September 21, 2013

Like the title says I am trying to detect if the player has a certain item in their inventory, and if they do perform a few actions on it. I have been struggling to find a way to do that, at first I figured I would use the "haveItemStack" method, however while that would tell me they have it doesn't return the itemstack which I would need to perform the actions on. So now I have been thinking about doing a for loop that would look through every item in the inventory using the getStackInSlot method. But I can't seem to figure out what values i can be and how that number would relate to the rest of the inventory. Anyone know? Or better yet does anyone know of another easier way to do what I am trying to?

  • Quote

Creator of the Recipe Expansion Pack mod.

http://www.minecraftforum.net/topic/1983421-172-forge-recipe-expansion-pack-version-012/

Updated to 1.7.2!

Share this post


Link to post
Share on other sites

GamingTom    0

GamingTom

GamingTom    0

  • Tree Puncher
  • GamingTom
  • Members
  • 0
  • 21 posts
Posted September 21, 2013

I don't know how you would detect if an item is in the inventory, but I have been detecting when an item is picked up for my mod. For example, when an item is picked up, a specified action takes place.

 

public class PickupHandler implements IPickupNotifier {
@Override
public void notifyPickup(EntityItem item, EntityPlayer player) {

                if (item.getEntityItem().itemID == Items.yourItem.itemID){
                      <perform an action>
                }
        }
}

 

Hope this helps!

  • Quote

Share this post


Link to post
Share on other sites

GotoLink    381

GotoLink

GotoLink    381

  • World Shaper
  • GotoLink
  • Members
  • 381
  • 2012 posts
Posted September 21, 2013

Depends on when you want the actions to be done.

 

But yes, straight forward approach is to run a for loop on the player inventory slots.

  • Quote

Share this post


Link to post
Share on other sites

crackedEgg    20

crackedEgg

crackedEgg    20

  • Stone Miner
  • crackedEgg
  • Members
  • 20
  • 60 posts
Posted September 21, 2013

Here is how I do this in my parachute mod.

public static ItemStack inventoryContainsAAD(InventoryPlayer inventory) {
ItemStack itemstack = null;
for (ItemStack s : inventory.mainInventory) {
	if (s != null && s.getItem() instanceof ItemAutoActivateDevice) {
		itemstack = s;
		break;
	}
}
return itemstack;
}

 

you can view the code at https://github.com/m1k3s/parachute

  • Quote

Share this post


Link to post
Share on other sites

coolAlias    746

coolAlias

coolAlias    746

  • Reality Controller
  • coolAlias
  • Members
  • 746
  • 2805 posts
Posted September 21, 2013

How about the 'onUpdate' method from Item? It is called automatically for every ItemStack containing your Item each tick, so long as you override this method in your Item class. Maps use it to update while being held, but it's called so long as the item is in your inventory, not necessarily held.

 

These are the parameters:

public void onUpdate(ItemStack itemstack, World world, Entity entity, int par4, boolean isCurrentItem)

Sorry I'm not sure what 'par4' is, I think ticks in use but I may be wrong.

  • Quote

width=228 height=100http://i.imgur.com/NdrFdld.png[/img]

Share this post


Link to post
Share on other sites

chimera27    5

chimera27

chimera27    5

  • Creeper Killer
  • chimera27
  • Members
  • 5
  • 158 posts
Posted September 23, 2013

Just make a commontickhandler that implements ITickHandler and use

if(player.inventory.hasItem(Main.itemwhatever.itemID){
Do Stuff.
}

(Just google how to make a common tick handler if you're unsure)

Also for reference here's how I check if the player has a power beam and an upgrade in their inventory, and if so consumes them and adds a power beam that can switch to the ice beam:

 

if (player.inventory.hasItem(Main.ItemIceUpgrade.itemID) && player.inventory.hasItem(Main.ItemPowerBeam.itemID)) {
		player.inventory.consumeInventoryItem(Main.ItemIceUpgrade.itemID);
		player.inventory.consumeInventoryItem(Main.ItemPowerBeam.itemID);
		player.inventory.addItemStackToInventory(ItemPowerBeamStackI);


	}

 

Hope it helps!

  • Quote

Creator of Metroid Cubed! Power Suits, Beams, Hypermode and more!

width=174 height=100http://i.imgur.com/ghgWmA3.jpg[/img]

Share this post


Link to post
Share on other sites

Mew    36

Mew

Mew    36

  • Dragon Slayer
  • Mew
  • Members
  • 36
  • 567 posts
Posted September 23, 2013

A slightly better, and less resource/time consuming way to do this would be to implement to of the earlier said ways. You would first do a check to see if the player has the item in their inventory, THEN run the for loop to get what slot it is in, and from there, get the itemstack.

If the player doesn't have the item... Just do nothing.

  • Quote

I am Mew. The Legendary Psychic. I behave oddly and am always playing practical jokes.

 

I have also found that I really love making extremely long and extremely but sometimes not so descriptive variables. Sort of like what I just did there xD

Share this post


Link to post
Share on other sites

Draco18s    2414

Draco18s

Draco18s    2414

  • Reality Controller
  • Draco18s
  • Members
  • 2414
  • 15998 posts
Posted September 23, 2013
You would first do a check to see if the player has the item in their inventory, THEN run the for loop

 

How can you detect that the item exists in the array without looking at the array?

  • Quote

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

Share this post


Link to post
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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  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.

    • Insert image from URL
×
  • Desktop
  • Tablet
  • Phone
Sign in to follow this  
Followers 1
Go To Topic Listing



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • kiou.23
      Block Rotate

      By kiou.23 · Posted 8 minutes ago

      That's usually the case, always try to understand the code before copy and pasting, or else you'll get a lot of headaches later in the code's life
    • Varzac
      Forge jar file not opening

      By Varzac · Posted 34 minutes ago

      I ran Jarfix and then tried installing again with the same results. Nothing happening I even tried using winrar, but as you said nothing happened
    • BeardlessBrady
      [1.16.4] Null when OpenGUI

      By BeardlessBrady · Posted 39 minutes ago

      Ah.. Thats what I get for stopping half way through and not double checking, thanks!
    • poopoodice
      [1.16.4] Null when OpenGUI

      By poopoodice · Posted 54 minutes ago

      https://github.com/Beardlessbrady/Currency-Mod/blob/master-1.16/src/main/java/com/beardlessbrady/gocurrency/blocks/vending/VendingTile.java#L68 This should not be null.
    • -MCS_Gaming-
      Matchmaking System?

      By -MCS_Gaming- · Posted 56 minutes ago

      I'm making an fps style mod and want to implement a matchmaking system, but I have absolutely no idea where to begin. Would anyone be able to give me some pointers as to how I would go about doing this?
  • Topics

    • ehbean
      10
      Block Rotate

      By ehbean
      Started 6 hours ago

    • Varzac
      3
      Forge jar file not opening

      By Varzac
      Started 13 hours ago

    • BeardlessBrady
      2
      [1.16.4] Null when OpenGUI

      By BeardlessBrady
      Started 1 hour ago

    • -MCS_Gaming-
      0
      Matchmaking System?

      By -MCS_Gaming-
      Started 56 minutes ago

    • Nyko
      1
      [1.16.5] Beacon Overwrite (Screen Error)

      By Nyko
      Started 15 hours ago

  • Who's Online (See full list)

    • The_Deadly_Taco
    • JackRaidenPH
    • NullDev
    • Jeldrik
    • kiou.23
    • ehbean
    • -MCS_Gaming-
    • Top_DawgsPM
    • BeardlessBrady
    • Twu
    • knees
  • All Activity
  • Home
  • Mod Developer Central
  • Modder Support
  • Detecting an item and performing actions on it in a player's inventory
  • Theme

Copyright © 2019 ForgeDevelopment LLC · Ads by Longitude Ads LLC Powered by Invision Community