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.

Featured Replies

Posted

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.

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.

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.

  • Author

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?

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.

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.