Jump to content

[1.10] Prevent automation extract from specific slots


dakamojo

Recommended Posts

I'm creating a te that has a slot for a pickaxe.  I want a hopper or other automation to be able to insert into the slot, but I don't want a hopper underneath to pull the tool out of the slot.  But the player should be able to pull the tool out.

 

So I considered overriding extractItem on my ItemStackHandler to return false.  But I don't see how to tell if it is automation or the player that is trying to extract.

 

Basically slot 0 needs to allow automation in, but not out.  Allow player in and out.  Slot 1 needs to allow automation out, but not in.  Allow player out but not in.

Link to comment
Share on other sites

Create a regular ItemStackHandler to store the inventory and use this in your Container.

 

Create an IItemHandlerModifiable wrapper class that stores another IItemHandlerModifiable and delegates all methods to it except IItemHandler#extractItem. Implement this to always return ItemStack.EMPTY, preventing extraction from the wrapped inventory. Create an instance of this that wraps the regular ItemStackHandler and then expose this via your TileEntity's override of ICapabilityProvider#getCapability.

Edited by Choonster

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

You can use this class as an example. It's a wrapper that prevents insertion, but allows for extraction. You'd be doing something similar, but in reverse.

As Choonster mentions, it has a reference to another ItemStackHandler that acts normally so that your machine can insert and extract, but this one is exposed in getCapability:

Instantiation:

https://github.com/Draco18s/ReasonableRealism/blob/master/src/main/java/com/draco18s/ores/entities/TileEntitySifter.java#L50

GetCap:

https://github.com/Draco18s/ReasonableRealism/blob/master/src/main/java/com/draco18s/ores/entities/TileEntitySifter.java#L141

Internal use:

https://github.com/Draco18s/ReasonableRealism/blob/master/src/main/java/com/draco18s/ores/entities/TileEntitySifter.java#L93

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.

Link to comment
Share on other sites

So if I understand both of you, the trick is in getCapability to return one version of the ItemStackHandler if it is a player accessing it, and another if it is not.  From Draco's code...

 

if(facing == null) {
				return (T) new CombinedInvWrapper(inputSlot, outputSlotWrapper);
			}
			if(facing == EnumFacing.UP) {
				return (T) inputSlot;
			}
			if(facing == EnumFacing.DOWN) {
				return (T) outputSlotWrapper;
			}

 

So if facing is null that is the indication that it is a player accessing it?

Link to comment
Share on other sites

Facing of Null is used when no specific direction is involved. Typically referred to as "internal use" but it is not necessarily the case that it's the player accessing it. Could be that the block was broken and is dropping its contents, could be a "peek" mod that opens a container to look at the contents.

 

However, automation (hoppers, etc) should always pass in a non-null side.

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.

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.



×
×
  • Create New...

Important Information

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