Class ScreenHandler
- Direct Known Subclasses:
- AbstractRecipeScreenHandler,- BeaconScreenHandler,- BrewingStandScreenHandler,- CartographyTableScreenHandler,- CreativeInventoryScreen.CreativeScreenHandler,- EnchantmentScreenHandler,- ForgingScreenHandler,- Generic3x3ContainerScreenHandler,- GenericContainerScreenHandler,- GrindstoneScreenHandler,- HopperScreenHandler,- HorseScreenHandler,- LecternScreenHandler,- LoomScreenHandler,- MerchantScreenHandler,- ShulkerBoxScreenHandler,- StonecutterScreenHandler
On the client, screen handlers are coupled with a HandledScreen. Handled screens have a
 reference to a client-sided screen handler that is exposed through the
 ScreenHandlerProvider interface.
 
Models
Screen handlers hold slots, properties, property delegates, and screen handler contexts. This allows easy synchronization of states between the client and the server, and prevents running code on the wrong side.
Slot holds one item stack. The slots are usually controlled by the server,
 and the changes to slots on the server are automatically synchronized to the client.
 Slots can be backed by an inventory, allowing the changes to be reflected to the
 persistent storage (like block entities) on the server. Clients manipulate the
 slots by issuing a "slot click" packet. "Clicking" a slot includes actions like
 picking up crafting result, shift-clicking stacks, swapping stacks between the
 inventory and the hotbar, or dropping stacks.
 
Screen handlers also contain a list of properties
 that are used for syncing integers (e.g. progress bars) from the server to the client.
 Properties can also be used to sync an integer from the client to the server, although
 it has to be manually performed. If a property relies on other objects, like
 a value from a block entity instance, then the property can delegate its operations
 using PropertyDelegate. The delegate is passed when creating the screen handler.
 On the server, access to the property's value is delegated to the delegate (which in
 turn delegates to another object like a block entity instance).
 On the client, access to the property's value still uses the synced value.
 
ScreenHandlerContext allows running code on the server side only. Screen
 handlers are designed to be used on both sides; any action modifying the world has
 to be wrapped in a call to the context. Like with the property delegate, a context
 with the world is passed to the screen handler on creation on the server. On the
 server, the context executes the function with the world and the position. On the
 client, the context does nothing.
 
How to use screen handlers
Creation
To create a new screen handler, subclass ScreenHandler, create and register
 a new screen handler type, and associate it with
 a handled screen.
 
A subclass should have two constructors. One is for the server, and should take
 the syncId and inventories, property delegates, or contexts that are used.
 The syncId is shared between the two sides. It is used to verify that a player
 has a specific screen (handler) open so that they can move items, for example.
 The inventories are used to back a slot so that any changes to a slot is reflected
 on the backing inventory, and vice versa. Property delegates and contexts bridge
 between the screen handler and other parts of the world; see above for more description.
 
The constructor should add slots, add properties from delegates, and store the property delegates and screen handler
 context in the instance fields.
 
The other constructor is for the client. There, the only parameters allowed are the
 syncId and the player inventory. This is because all other things are
 unavailable at creation time and synced later. This constructor should call the
 other constructor with a new simple inventory of sufficient size, a new array property delegate, and an empty screen handler context. Synced data then fills the inventory and property
 delegate.
 
The screen handler then has to be registered in a registry. Create a new instance of
 ScreenHandlerType with the screen handler type factory (which can be a reference
 to the client-side constructor; i.e. MyScreenHandler::MyScreenHandler)
 and register it to Registries.SCREEN_HANDLER.
 
Opening
Most of the screen handlers are associated with a block and opened by using the block.
 Screen handlers are opened on the server and synced to the client. To open a
 screen handler, use PlayerEntity.openHandledScreen(net.minecraft.screen.NamedScreenHandlerFactory). This takes a
 NamedScreenHandlerFactory, which creates a screen handler. In vanilla,
 block entity instances implement the interface, allowing them to be passed.
 SimpleNamedScreenHandlerFactory is a screen handler factory implementation
 for use cases that do not involve a block entity.
 
The factory should create a new instance of a screen handler with the server-side constructor (one that takes inventories, etc). If the screen handler requires a property delegate or a context, create an instance and pass it here.
As long as the screen handler only uses the slots and properties, there should not be any need for external synchronization.
Interaction
Screen handler interaction mainly involves "slot clicks" and "button clicks".
 A slot click is, as mentioned before, an action manipulating
 the slots' held item stacks. Slot clicks are implemented in this class and
 quickMove(net.minecraft.entity.player.PlayerEntity, int). To manipulate the stacks, get the slot via getSlot(int)
 and call methods of it. Screen handlers also provide methods for common operations,
 such as insertItem(net.minecraft.item.ItemStack, int, int, boolean) that inserts a stack to the screen handler's available slots.
 
The "cursor stack" is an item stack held by the cursor. When moving item stacks between slots, the cursor stack can hold the stack temporarily. The cursor stack is not held by any slots. When the screen handler is closed, the stack will be inserted to the player inventory or dropped as an item entity.
Some screen handlers also handle button clicks. This is used to execute an action on the server as a response to clients sending a button click packet. In most cases, this is triggered by a button in the screen rendered by the client, hence the name. Inside screen handlers, buttons are identified with an integer.
Subclasses must implement two methods: canUse(PlayerEntity) and quickMove(net.minecraft.entity.player.PlayerEntity, int). See the documentation of each method for more details.
 
Closing
Since a screen handler handles the client's screen, the screen must be closed at the
 same time. To close the screen handler and the screen, call PlayerEntity.closeHandledScreen() on the server.
 
Screen handlers should override onClosed(net.minecraft.entity.player.PlayerEntity). In there, it should drop contents of all slots not backed by an inventory and call
 Inventory.onClose(net.minecraft.entity.player.PlayerEntity) on the backing inventory. See the documentation of
 the method for more details.
- See Also:
- Mappings:
- Namespace - Name - official - cbf- intermediary - net/minecraft/class_1703- named - net/minecraft/screen/ScreenHandler
- 
Field SummaryFieldsModifier and TypeFieldDescriptionprivate ItemStackprivate booleanstatic final intA special slot index value (-999) indicating that the player has clicked outside the main panel of a screen.static final intstatic final intstatic final intstatic final intstatic final intstatic final intstatic final intprivate final List<ScreenHandlerListener>private static final Loggerprivate ItemStackprivate final DefaultedList<ItemStack>private intprivate intprivate intfinal DefaultedList<Slot>private @Nullable ScreenHandlerSyncHandlerfinal intprivate final IntListprivate final DefaultedList<ItemStack>A list of item stacks that is used for tracking changes insendContentUpdates().private final @Nullable ScreenHandlerType<?>
- 
Constructor SummaryConstructorsModifierConstructorDescriptionprotectedScreenHandler(@Nullable ScreenHandlerType<?> type, int syncId) 
- 
Method SummaryModifier and TypeMethodDescriptionvoidaddListener(ScreenHandlerListener listener) Addslistenerto the screen handler.protected voidaddProperties(PropertyDelegate propertyDelegate) Adds properties ofpropertyDelegateto this screen handler.protected PropertyaddProperty(Property property) Addspropertyto this screen handler.protected SlotAddsslotto this screen handler.static intstatic intcalculateComparatorOutput(@Nullable Inventory inventory) static intcalculateStackSize(Set<Slot> slots, int mode, ItemStack stack) booleancanInsertIntoSlot(ItemStack stack, Slot slot) Returns whetherstackcan be inserted toslot.booleancanInsertIntoSlot(Slot slot) static booleancanInsertItemIntoSlot(@Nullable Slot slot, ItemStack stack, boolean allowOverflow) abstract booleancanUse(PlayerEntity player) Returns whether the screen handler can be used.protected static booleancanUse(ScreenHandlerContext context, PlayerEntity player, Block block) Returns whether the screen handler can be used.private voidprotected static voidcheckDataCount(PropertyDelegate data, int expectedCount) Checks that the size of thedatais at least as large as theexpectedCount.private voidcheckPropertyUpdates(int id, int value) protected static voidChecks that the size of the provided inventory is at least as large as theexpectedSize.private voidcheckSlotUpdates(int slot, ItemStack stack, Supplier<ItemStack> copySupplier) voidcopySharedSlots(ScreenHandler handler) voidprotected voiddropInventory(PlayerEntity player, Inventory inventory) voidprotected voidprivate StackReferenceReturns a reference to the cursor's stack.intgetSlot(int index) Returns the slot with indexindex.getSlotIndex(Inventory inventory, int index) Returns a list of all stacks of the screen handler's slot.getType()Returns the screen handler type.private booleanhandleSlotClick(PlayerEntity player, ClickType clickType, Slot slot, ItemStack stack, ItemStack cursorStack) protected booleaninsertItem(ItemStack stack, int startIndex, int endIndex, boolean fromLast) Tries to consumestackby inserting to slots fromstartIndextoendIndex - 1(both inclusive) until the entire stack is used.private voidinternalOnSlotClick(int slotIndex, int button, SlotActionType actionType, PlayerEntity player) The actual logic that handles a slot click.booleanisValid(int slot) Returns whether the given slot index is valid.intprivate voidnotifyPropertyUpdate(int index, int value) booleanonButtonClick(PlayerEntity player, int id) Called whenplayerclicks a button withid.voidonClosed(PlayerEntity player) Called when this screen handler is closed.voidonContentChanged(Inventory inventory) Called when a slot's content has changed.voidonSlotClick(int slotIndex, int button, SlotActionType actionType, PlayerEntity player) Performs a slot click.static intpackQuickCraftData(int quickCraftStage, int buttonId) abstract ItemStackquickMove(PlayerEntity player, int slot) Quick-moves the stack atslotto other slots of the screen handler that belong to a different inventory or another section of the same inventory.voidremoveListener(ScreenHandlerListener listener) Removeslistenerfrom this screen handler.voidSends updates to listeners if any properties or slot stacks have changed.voidsetCursorStack(ItemStack stack) voidsetPreviousCursorStack(ItemStack stack) voidsetPreviousTrackedSlot(int slot, ItemStack stack) voidsetPreviousTrackedSlotMutable(int slot, ItemStack stack) voidsetProperty(int id, int value) Sets the property with IDidtovalue.voidsetStackInSlot(int slot, int revision, ItemStack stack) static booleanshouldQuickCraftContinue(int stage, PlayerEntity player) voidstatic intunpackQuickCraftButton(int quickCraftData) static intunpackQuickCraftStage(int quickCraftData) voidupdateSlotStacks(int revision, List<ItemStack> stacks, ItemStack cursorStack) voidvoidprivate voidupdateTrackedSlot(int slot, ItemStack stack, Supplier<ItemStack> copySupplier) 
- 
Field Details- 
LOGGER- Mappings:
- Namespace - Name - Mixin selector - official - k- Lcbf;k:Lorg/slf4j/Logger;- intermediary - field_36534- Lnet/minecraft/class_1703;field_36534:Lorg/slf4j/Logger;- named - LOGGER- Lnet/minecraft/screen/ScreenHandler;LOGGER:Lorg/slf4j/Logger;
 
- 
EMPTY_SPACE_SLOT_INDEXpublic static final int EMPTY_SPACE_SLOT_INDEXA special slot index value (-999) indicating that the player has clicked outside the main panel of a screen. Used for dropping the cursor stack.- See Also:
- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a:I- intermediary - field_30730- Lnet/minecraft/class_1703;field_30730:I- named - EMPTY_SPACE_SLOT_INDEX- Lnet/minecraft/screen/ScreenHandler;EMPTY_SPACE_SLOT_INDEX:I
 
- 
field_30731public static final int field_30731- See Also:
- Mappings:
- Namespace - Name - Mixin selector - official - b- Lcbf;b:I- intermediary - field_30731- Lnet/minecraft/class_1703;field_30731:I- named - field_30731- Lnet/minecraft/screen/ScreenHandler;field_30731:I
 
- 
field_30732public static final int field_30732- See Also:
- Mappings:
- Namespace - Name - Mixin selector - official - c- Lcbf;c:I- intermediary - field_30732- Lnet/minecraft/class_1703;field_30732:I- named - field_30732- Lnet/minecraft/screen/ScreenHandler;field_30732:I
 
- 
field_30733public static final int field_30733- See Also:
- Mappings:
- Namespace - Name - Mixin selector - official - d- Lcbf;d:I- intermediary - field_30733- Lnet/minecraft/class_1703;field_30733:I- named - field_30733- Lnet/minecraft/screen/ScreenHandler;field_30733:I
 
- 
field_30734public static final int field_30734- See Also:
- Mappings:
- Namespace - Name - Mixin selector - official - e- Lcbf;e:I- intermediary - field_30734- Lnet/minecraft/class_1703;field_30734:I- named - field_30734- Lnet/minecraft/screen/ScreenHandler;field_30734:I
 
- 
field_30735public static final int field_30735- See Also:
- Mappings:
- Namespace - Name - Mixin selector - official - f- Lcbf;f:I- intermediary - field_30735- Lnet/minecraft/class_1703;field_30735:I- named - field_30735- Lnet/minecraft/screen/ScreenHandler;field_30735:I
 
- 
field_30736public static final int field_30736- See Also:
- Mappings:
- Namespace - Name - Mixin selector - official - g- Lcbf;g:I- intermediary - field_30736- Lnet/minecraft/class_1703;field_30736:I- named - field_30736- Lnet/minecraft/screen/ScreenHandler;field_30736:I
 
- 
field_30737public static final int field_30737- See Also:
- Mappings:
- Namespace - Name - Mixin selector - official - h- Lcbf;h:I- intermediary - field_30737- Lnet/minecraft/class_1703;field_30737:I- named - field_30737- Lnet/minecraft/screen/ScreenHandler;field_30737:I
 
- 
trackedStacksA list of item stacks that is used for tracking changes insendContentUpdates().- Mappings:
- Namespace - Name - Mixin selector - official - l- Lcbf;l:Lhn;- intermediary - field_7764- Lnet/minecraft/class_1703;field_7764:Lnet/minecraft/class_2371;- named - trackedStacks- Lnet/minecraft/screen/ScreenHandler;trackedStacks:Lnet/minecraft/util/collection/DefaultedList;
 
- 
slots- Mappings:
- Namespace - Name - Mixin selector - official - i- Lcbf;i:Lhn;- intermediary - field_7761- Lnet/minecraft/class_1703;field_7761:Lnet/minecraft/class_2371;- named - slots- Lnet/minecraft/screen/ScreenHandler;slots:Lnet/minecraft/util/collection/DefaultedList;
 
- 
properties- Mappings:
- Namespace - Name - Mixin selector - official - m- Lcbf;m:Ljava/util/List;- intermediary - field_17285- Lnet/minecraft/class_1703;field_17285:Ljava/util/List;- named - properties- Lnet/minecraft/screen/ScreenHandler;properties:Ljava/util/List;
 
- 
cursorStack- Mappings:
- Namespace - Name - Mixin selector - official - n- Lcbf;n:Lcfz;- intermediary - field_29205- Lnet/minecraft/class_1703;field_29205:Lnet/minecraft/class_1799;- named - cursorStack- Lnet/minecraft/screen/ScreenHandler;cursorStack:Lnet/minecraft/item/ItemStack;
 
- 
previousTrackedStacks- Mappings:
- Namespace - Name - Mixin selector - official - o- Lcbf;o:Lhn;- intermediary - field_29206- Lnet/minecraft/class_1703;field_29206:Lnet/minecraft/class_2371;- named - previousTrackedStacks- Lnet/minecraft/screen/ScreenHandler;previousTrackedStacks:Lnet/minecraft/util/collection/DefaultedList;
 
- 
trackedPropertyValues- Mappings:
- Namespace - Name - Mixin selector - official - p- Lcbf;p:Lit/unimi/dsi/fastutil/ints/IntList;- intermediary - field_29559- Lnet/minecraft/class_1703;field_29559:Lit/unimi/dsi/fastutil/ints/IntList;- named - trackedPropertyValues- Lnet/minecraft/screen/ScreenHandler;trackedPropertyValues:Lit/unimi/dsi/fastutil/ints/IntList;
 
- 
previousCursorStack- Mappings:
- Namespace - Name - Mixin selector - official - q- Lcbf;q:Lcfz;- intermediary - field_29207- Lnet/minecraft/class_1703;field_29207:Lnet/minecraft/class_1799;- named - previousCursorStack- Lnet/minecraft/screen/ScreenHandler;previousCursorStack:Lnet/minecraft/item/ItemStack;
 
- 
revisionprivate int revision- Mappings:
- Namespace - Name - Mixin selector - official - r- Lcbf;r:I- intermediary - field_34024- Lnet/minecraft/class_1703;field_34024:I- named - revision- Lnet/minecraft/screen/ScreenHandler;revision:I
 
- 
type- Mappings:
- Namespace - Name - Mixin selector - official - s- Lcbf;s:Lcck;- intermediary - field_17493- Lnet/minecraft/class_1703;field_17493:Lnet/minecraft/class_3917;- named - type- Lnet/minecraft/screen/ScreenHandler;type:Lnet/minecraft/screen/ScreenHandlerType;
 
- 
syncIdpublic final int syncId- Mappings:
- Namespace - Name - Mixin selector - official - j- Lcbf;j:I- intermediary - field_7763- Lnet/minecraft/class_1703;field_7763:I- named - syncId- Lnet/minecraft/screen/ScreenHandler;syncId:I
 
- 
quickCraftButtonprivate int quickCraftButton- Mappings:
- Namespace - Name - Mixin selector - official - t- Lcbf;t:I- intermediary - field_7762- Lnet/minecraft/class_1703;field_7762:I- named - quickCraftButton- Lnet/minecraft/screen/ScreenHandler;quickCraftButton:I
 
- 
quickCraftStageprivate int quickCraftStage- Mappings:
- Namespace - Name - Mixin selector - official - u- Lcbf;u:I- intermediary - field_7759- Lnet/minecraft/class_1703;field_7759:I- named - quickCraftStage- Lnet/minecraft/screen/ScreenHandler;quickCraftStage:I
 
- 
quickCraftSlots- Mappings:
- Namespace - Name - Mixin selector - official - v- Lcbf;v:Ljava/util/Set;- intermediary - field_7757- Lnet/minecraft/class_1703;field_7757:Ljava/util/Set;- named - quickCraftSlots- Lnet/minecraft/screen/ScreenHandler;quickCraftSlots:Ljava/util/Set;
 
- 
listeners- Mappings:
- Namespace - Name - Mixin selector - official - w- Lcbf;w:Ljava/util/List;- intermediary - field_7765- Lnet/minecraft/class_1703;field_7765:Ljava/util/List;- named - listeners- Lnet/minecraft/screen/ScreenHandler;listeners:Ljava/util/List;
 
- 
syncHandler- Mappings:
- Namespace - Name - Mixin selector - official - x- Lcbf;x:Lcbs;- intermediary - field_29208- Lnet/minecraft/class_1703;field_29208:Lnet/minecraft/class_5916;- named - syncHandler- Lnet/minecraft/screen/ScreenHandler;syncHandler:Lnet/minecraft/screen/ScreenHandlerSyncHandler;
 
- 
disableSyncprivate boolean disableSync- Mappings:
- Namespace - Name - Mixin selector - official - y- Lcbf;y:Z- intermediary - field_29209- Lnet/minecraft/class_1703;field_29209:Z- named - disableSync- Lnet/minecraft/screen/ScreenHandler;disableSync:Z
 
 
- 
- 
Constructor Details- 
ScreenHandler- Mappings:
- Namespace - Name - Mixin selector - official - <init>- Lcbf;<init>(Lcck;I)V- intermediary - <init>- Lnet/minecraft/class_1703;<init>(Lnet/minecraft/class_3917;I)V- named - <init>- Lnet/minecraft/screen/ScreenHandler;<init>(Lnet/minecraft/screen/ScreenHandlerType;I)V
 
 
- 
- 
Method Details- 
canUseReturns whether the screen handler can be used.- Returns:
- whether the screen handler can be used
- See Also:
- API Note:
- This should be called inside canUse(PlayerEntity).
- Implementation Note:
- On the server, this checks that the block at the position is
 blockand the player is within 8 blocks from the block's center.
- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(Lcbq;Lbyo;Lcpn;)Z- intermediary - method_17695- Lnet/minecraft/class_1703;method_17695(Lnet/minecraft/class_3914;Lnet/minecraft/class_1657;Lnet/minecraft/class_2248;)Z- named - canUse- Lnet/minecraft/screen/ScreenHandler;canUse(Lnet/minecraft/screen/ScreenHandlerContext;Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/block/Block;)Z
 
- 
getTypeReturns the screen handler type.A screen handler must have associated screen handler type to open it. - Returns:
- the screen handler type
- Throws:
- UnsupportedOperationException- if the type is not passed in the constructor
- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a()Lcck;- intermediary - method_17358- Lnet/minecraft/class_1703;method_17358()Lnet/minecraft/class_3917;- named - getType- Lnet/minecraft/screen/ScreenHandler;getType()Lnet/minecraft/screen/ScreenHandlerType;
 
- 
checkSizeChecks that the size of the provided inventory is at least as large as theexpectedSize.- Throws:
- IllegalArgumentException- if the inventory size is smaller than- expectedSize
- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(Lbdq;I)V- intermediary - method_17359- Lnet/minecraft/class_1703;method_17359(Lnet/minecraft/class_1263;I)V- named - checkSize- Lnet/minecraft/screen/ScreenHandler;checkSize(Lnet/minecraft/inventory/Inventory;I)V
 
- 
checkDataCountChecks that the size of thedatais at least as large as theexpectedCount.- Throws:
- IllegalArgumentException- if the- datahas a smaller size than- expectedCount
- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(Lcbp;I)V- intermediary - method_17361- Lnet/minecraft/class_1703;method_17361(Lnet/minecraft/class_3913;I)V- named - checkDataCount- Lnet/minecraft/screen/ScreenHandler;checkDataCount(Lnet/minecraft/screen/PropertyDelegate;I)V
 
- 
isValidpublic boolean isValid(int slot) Returns whether the given slot index is valid.This returns truefor all added slots, -999, and-1.- Returns:
- whether the given slot index is valid
- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(I)Z- intermediary - method_40442- Lnet/minecraft/class_1703;method_40442(I)Z- named - isValid- Lnet/minecraft/screen/ScreenHandler;isValid(I)Z
 
- 
addSlotAddsslotto this screen handler. This must be called inside the subclass's constructor.- Returns:
- the added slot
- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(Lccx;)Lccx;- intermediary - method_7621- Lnet/minecraft/class_1703;method_7621(Lnet/minecraft/class_1735;)Lnet/minecraft/class_1735;- named - addSlot- Lnet/minecraft/screen/ScreenHandler;addSlot(Lnet/minecraft/screen/slot/Slot;)Lnet/minecraft/screen/slot/Slot;
 
- 
addPropertyAddspropertyto this screen handler. This must be called inside the subclass's constructor.If the property relies on external objects (such as a block entity instance), it should instead use property delegates and addProperties(net.minecraft.screen.PropertyDelegate).- Returns:
- the added property
- See Also:
- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(Lcbv;)Lcbv;- intermediary - method_17362- Lnet/minecraft/class_1703;method_17362(Lnet/minecraft/class_3915;)Lnet/minecraft/class_3915;- named - addProperty- Lnet/minecraft/screen/ScreenHandler;addProperty(Lnet/minecraft/screen/Property;)Lnet/minecraft/screen/Property;
 
- 
addPropertiesAdds properties ofpropertyDelegateto this screen handler. This must be called inside the subclass's constructor.- See Also:
- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(Lcbp;)V- intermediary - method_17360- Lnet/minecraft/class_1703;method_17360(Lnet/minecraft/class_3913;)V- named - addProperties- Lnet/minecraft/screen/ScreenHandler;addProperties(Lnet/minecraft/screen/PropertyDelegate;)V
 
- 
addListenerAddslistenerto the screen handler.Listeners are often used to listen to slot or property changes on the client's screen. - Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(Lcbr;)V- intermediary - method_7596- Lnet/minecraft/class_1703;method_7596(Lnet/minecraft/class_1712;)V- named - addListener- Lnet/minecraft/screen/ScreenHandler;addListener(Lnet/minecraft/screen/ScreenHandlerListener;)V
 
- 
updateSyncHandler- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(Lcbs;)V- intermediary - method_34248- Lnet/minecraft/class_1703;method_34248(Lnet/minecraft/class_5916;)V- named - updateSyncHandler- Lnet/minecraft/screen/ScreenHandler;updateSyncHandler(Lnet/minecraft/screen/ScreenHandlerSyncHandler;)V
 
- 
syncStatepublic void syncState()- Mappings:
- Namespace - Name - Mixin selector - official - b- Lcbf;b()V- intermediary - method_34252- Lnet/minecraft/class_1703;method_34252()V- named - syncState- Lnet/minecraft/screen/ScreenHandler;syncState()V
 
- 
removeListenerRemoveslistenerfrom this screen handler.- Mappings:
- Namespace - Name - Mixin selector - official - b- Lcbf;b(Lcbr;)V- intermediary - method_7603- Lnet/minecraft/class_1703;method_7603(Lnet/minecraft/class_1712;)V- named - removeListener- Lnet/minecraft/screen/ScreenHandler;removeListener(Lnet/minecraft/screen/ScreenHandlerListener;)V
 
- 
getStacksReturns a list of all stacks of the screen handler's slot.This should not be used in most cases, and modifying the returned list has no effect to the screen handler. - Returns:
- a list of all stacks of the screen handler's slot
- Mappings:
- Namespace - Name - Mixin selector - official - c- Lcbf;c()Lhn;- intermediary - method_7602- Lnet/minecraft/class_1703;method_7602()Lnet/minecraft/class_2371;- named - getStacks- Lnet/minecraft/screen/ScreenHandler;getStacks()Lnet/minecraft/util/collection/DefaultedList;
 
- 
sendContentUpdatespublic void sendContentUpdates()Sends updates to listeners if any properties or slot stacks have changed.- Mappings:
- Namespace - Name - Mixin selector - official - d- Lcbf;d()V- intermediary - method_7623- Lnet/minecraft/class_1703;method_7623()V- named - sendContentUpdates- Lnet/minecraft/screen/ScreenHandler;sendContentUpdates()V
 
- 
updateToClientpublic void updateToClient()- Mappings:
- Namespace - Name - Mixin selector - official - e- Lcbf;e()V- intermediary - method_37420- Lnet/minecraft/class_1703;method_37420()V- named - updateToClient- Lnet/minecraft/screen/ScreenHandler;updateToClient()V
 
- 
notifyPropertyUpdateprivate void notifyPropertyUpdate(int index, int value) - Mappings:
- Namespace - Name - Mixin selector - official - c- Lcbf;c(II)V- intermediary - method_37419- Lnet/minecraft/class_1703;method_37419(II)V- named - notifyPropertyUpdate- Lnet/minecraft/screen/ScreenHandler;notifyPropertyUpdate(II)V
 
- 
updateTrackedSlot- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(ILcfz;Ljava/util/function/Supplier;)V- intermediary - method_34246- Lnet/minecraft/class_1703;method_34246(ILnet/minecraft/class_1799;Ljava/util/function/Supplier;)V- named - updateTrackedSlot- Lnet/minecraft/screen/ScreenHandler;updateTrackedSlot(ILnet/minecraft/item/ItemStack;Ljava/util/function/Supplier;)V
 
- 
checkSlotUpdates- Mappings:
- Namespace - Name - Mixin selector - official - b- Lcbf;b(ILcfz;Ljava/util/function/Supplier;)V- intermediary - method_34253- Lnet/minecraft/class_1703;method_34253(ILnet/minecraft/class_1799;Ljava/util/function/Supplier;)V- named - checkSlotUpdates- Lnet/minecraft/screen/ScreenHandler;checkSlotUpdates(ILnet/minecraft/item/ItemStack;Ljava/util/function/Supplier;)V
 
- 
checkPropertyUpdatesprivate void checkPropertyUpdates(int id, int value) - Mappings:
- Namespace - Name - Mixin selector - official - d- Lcbf;d(II)V- intermediary - method_34715- Lnet/minecraft/class_1703;method_34715(II)V- named - checkPropertyUpdates- Lnet/minecraft/screen/ScreenHandler;checkPropertyUpdates(II)V
 
- 
checkCursorStackUpdatesprivate void checkCursorStackUpdates()- Mappings:
- Namespace - Name - Mixin selector - official - l- Lcbf;l()V- intermediary - method_34258- Lnet/minecraft/class_1703;method_34258()V- named - checkCursorStackUpdates- Lnet/minecraft/screen/ScreenHandler;checkCursorStackUpdates()V
 
- 
setPreviousTrackedSlot- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(ILcfz;)V- intermediary - method_34245- Lnet/minecraft/class_1703;method_34245(ILnet/minecraft/class_1799;)V- named - setPreviousTrackedSlot- Lnet/minecraft/screen/ScreenHandler;setPreviousTrackedSlot(ILnet/minecraft/item/ItemStack;)V
 
- 
setPreviousTrackedSlotMutable- Mappings:
- Namespace - Name - Mixin selector - official - b- Lcbf;b(ILcfz;)V- intermediary - method_37449- Lnet/minecraft/class_1703;method_37449(ILnet/minecraft/class_1799;)V- named - setPreviousTrackedSlotMutable- Lnet/minecraft/screen/ScreenHandler;setPreviousTrackedSlotMutable(ILnet/minecraft/item/ItemStack;)V
 
- 
setPreviousCursorStack- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(Lcfz;)V- intermediary - method_34250- Lnet/minecraft/class_1703;method_34250(Lnet/minecraft/class_1799;)V- named - setPreviousCursorStack- Lnet/minecraft/screen/ScreenHandler;setPreviousCursorStack(Lnet/minecraft/item/ItemStack;)V
 
- 
onButtonClickCalled whenplayerclicks a button withid."Button click" is an abstract concept; it does not have to be triggered by a button. Examples of button clicks include selecting a recipe for a stonecutter, turning a page of a lectern's book, or selecting an enchantment on an enchanting table. Buttons are identified by an integer. - Returns:
- whether the button click is handled successfully
- Implementation Note:
- This is normally only called by the server; however, screens that use buttons can call this on the client.
- Mappings:
- Namespace - Name - Mixin selector - official - b- Lcbf;b(Lbyo;I)Z- intermediary - method_7604- Lnet/minecraft/class_1703;method_7604(Lnet/minecraft/class_1657;I)Z- named - onButtonClick- Lnet/minecraft/screen/ScreenHandler;onButtonClick(Lnet/minecraft/entity/player/PlayerEntity;I)Z
 
- 
getSlotReturns the slot with indexindex.- Returns:
- the slot with index index
- Mappings:
- Namespace - Name - Mixin selector - official - b- Lcbf;b(I)Lccx;- intermediary - method_7611- Lnet/minecraft/class_1703;method_7611(I)Lnet/minecraft/class_1735;- named - getSlot- Lnet/minecraft/screen/ScreenHandler;getSlot(I)Lnet/minecraft/screen/slot/Slot;
 
- 
quickMoveQuick-moves the stack atslotto other slots of the screen handler that belong to a different inventory or another section of the same inventory. For example, items can be quick-moved between a chest's slots and the player inventory or between the main player inventory and the hotbar.Subclasses should call insertItem(net.minecraft.item.ItemStack, int, int, boolean), and if the insertion was successful, clear the slot (if the stack is exhausted) or mark it as dirty. See the vanilla subclasses for basic implementation.Quick-moving is also known as "shift-clicking" since it's usually triggered using Shift+left click. - Parameters:
- slot- the index of the slot to quick-move from
- Returns:
- ItemStack.EMPTYwhen no stack can be transferred, otherwise the original stack
- See Also:
- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(Lbyo;I)Lcfz;- intermediary - method_7601- Lnet/minecraft/class_1703;method_7601(Lnet/minecraft/class_1657;I)Lnet/minecraft/class_1799;- named - quickMove- Lnet/minecraft/screen/ScreenHandler;quickMove(Lnet/minecraft/entity/player/PlayerEntity;I)Lnet/minecraft/item/ItemStack;
 
- 
onSlotClickPerforms a slot click. This can behave in many different ways depending mainly on the action type.- Parameters:
- actionType- the type of slot click, check the docs for each- SlotActionTypevalue for details
- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(IILcbo;Lbyo;)V- intermediary - method_7593- Lnet/minecraft/class_1703;method_7593(IILnet/minecraft/class_1713;Lnet/minecraft/class_1657;)V- named - onSlotClick- Lnet/minecraft/screen/ScreenHandler;onSlotClick(IILnet/minecraft/screen/slot/SlotActionType;Lnet/minecraft/entity/player/PlayerEntity;)V
 
- 
internalOnSlotClickprivate void internalOnSlotClick(int slotIndex, int button, SlotActionType actionType, PlayerEntity player) The actual logic that handles a slot click. Called by(int, int, SlotActionType, PlayerEntity)in a try-catch block that wraps exceptions from this method into a crash report.- Mappings:
- Namespace - Name - Mixin selector - official - b- Lcbf;b(IILcbo;Lbyo;)V- intermediary - method_30010- Lnet/minecraft/class_1703;method_30010(IILnet/minecraft/class_1713;Lnet/minecraft/class_1657;)V- named - internalOnSlotClick- Lnet/minecraft/screen/ScreenHandler;internalOnSlotClick(IILnet/minecraft/screen/slot/SlotActionType;Lnet/minecraft/entity/player/PlayerEntity;)V
 
- 
handleSlotClickprivate boolean handleSlotClick(PlayerEntity player, ClickType clickType, Slot slot, ItemStack stack, ItemStack cursorStack) - Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(Lbyo;Lcbn;Lccx;Lcfz;Lcfz;)Z- intermediary - method_45409- Lnet/minecraft/class_1703;method_45409(Lnet/minecraft/class_1657;Lnet/minecraft/class_5536;Lnet/minecraft/class_1735;Lnet/minecraft/class_1799;Lnet/minecraft/class_1799;)Z- named - handleSlotClick- Lnet/minecraft/screen/ScreenHandler;handleSlotClick(Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/util/ClickType;Lnet/minecraft/screen/slot/Slot;Lnet/minecraft/item/ItemStack;Lnet/minecraft/item/ItemStack;)Z
 
- 
getCursorStackReferenceReturns a reference to the cursor's stack.- Returns:
- a reference to the cursor's stack
- Mappings:
- Namespace - Name - Mixin selector - official - m- Lcbf;m()Lbgs;- intermediary - method_34259- Lnet/minecraft/class_1703;method_34259()Lnet/minecraft/class_5630;- named - getCursorStackReference- Lnet/minecraft/screen/ScreenHandler;getCursorStackReference()Lnet/minecraft/inventory/StackReference;
 
- 
canInsertIntoSlotReturns whetherstackcan be inserted toslot.Subclasses should override this to return falseif the slot is used for output.- Returns:
- whether stackcan be inserted toslot
- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(Lcfz;Lccx;)Z- intermediary - method_7613- Lnet/minecraft/class_1703;method_7613(Lnet/minecraft/class_1799;Lnet/minecraft/class_1735;)Z- named - canInsertIntoSlot- Lnet/minecraft/screen/ScreenHandler;canInsertIntoSlot(Lnet/minecraft/item/ItemStack;Lnet/minecraft/screen/slot/Slot;)Z
 
- 
onClosedCalled when this screen handler is closed.To close a screen handler, call PlayerEntity.closeHandledScreen()on the server instead of this method.This drops the cursor stack by default. Subclasses that have slots not backed by a persistent inventory should call dropInventory(net.minecraft.entity.player.PlayerEntity, net.minecraft.inventory.Inventory)to drop the stacks.- Mappings:
- Namespace - Name - Mixin selector - official - b- Lcbf;b(Lbyo;)V- intermediary - method_7595- Lnet/minecraft/class_1703;method_7595(Lnet/minecraft/class_1657;)V- named - onClosed- Lnet/minecraft/screen/ScreenHandler;onClosed(Lnet/minecraft/entity/player/PlayerEntity;)V
 
- 
dropInventory- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(Lbyo;Lbdq;)V- intermediary - method_7607- Lnet/minecraft/class_1703;method_7607(Lnet/minecraft/class_1657;Lnet/minecraft/class_1263;)V- named - dropInventory- Lnet/minecraft/screen/ScreenHandler;dropInventory(Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/inventory/Inventory;)V
 
- 
onContentChangedCalled when a slot's content has changed.This is not called by default; subclasses that override this method should also use a custom InventorywhosemarkDirtymethod is overridden to call this method as a backing inventory of the slot.This can be used to update the output slot when input changes. - Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(Lbdq;)V- intermediary - method_7609- Lnet/minecraft/class_1703;method_7609(Lnet/minecraft/class_1263;)V- named - onContentChanged- Lnet/minecraft/screen/ScreenHandler;onContentChanged(Lnet/minecraft/inventory/Inventory;)V
 
- 
setStackInSlot- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(IILcfz;)V- intermediary - method_7619- Lnet/minecraft/class_1703;method_7619(IILnet/minecraft/class_1799;)V- named - setStackInSlot- Lnet/minecraft/screen/ScreenHandler;setStackInSlot(IILnet/minecraft/item/ItemStack;)V
 
- 
updateSlotStacks- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(ILjava/util/List;Lcfz;)V- intermediary - method_7610- Lnet/minecraft/class_1703;method_7610(ILjava/util/List;Lnet/minecraft/class_1799;)V- named - updateSlotStacks- Lnet/minecraft/screen/ScreenHandler;updateSlotStacks(ILjava/util/List;Lnet/minecraft/item/ItemStack;)V
 
- 
setPropertypublic void setProperty(int id, int value) Sets the property with IDidtovalue.Subclasses can call sendContentUpdates()to manually sync the change to the client.- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(II)V- intermediary - method_7606- Lnet/minecraft/class_1703;method_7606(II)V- named - setProperty- Lnet/minecraft/screen/ScreenHandler;setProperty(II)V
 
- 
canUseReturns whether the screen handler can be used.Subclasses should call #canUse(ScreenHandlerContext, PlayerEntity, Block)} or implement the check itself. The implementation should check that the player is near the screen handler's source position (e.g. block position) and that the source (e.g. block) is not destroyed. - Returns:
- whether the screen handler can be used
- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(Lbyo;)Z- intermediary - method_7597- Lnet/minecraft/class_1703;method_7597(Lnet/minecraft/class_1657;)Z- named - canUse- Lnet/minecraft/screen/ScreenHandler;canUse(Lnet/minecraft/entity/player/PlayerEntity;)Z
 
- 
insertItemTries to consumestackby inserting to slots fromstartIndextoendIndex - 1(both inclusive) until the entire stack is used.If fromLastistrue, this attempts the insertion in reverse order; i.e.endIndex - 1tostartIndex(both inclusive).- Returns:
- whether stackwas decremented
- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(Lcfz;IIZ)Z- intermediary - method_7616- Lnet/minecraft/class_1703;method_7616(Lnet/minecraft/class_1799;IIZ)Z- named - insertItem- Lnet/minecraft/screen/ScreenHandler;insertItem(Lnet/minecraft/item/ItemStack;IIZ)Z
 
- 
unpackQuickCraftButtonpublic static int unpackQuickCraftButton(int quickCraftData) - Mappings:
- Namespace - Name - Mixin selector - official - c- Lcbf;c(I)I- intermediary - method_7620- Lnet/minecraft/class_1703;method_7620(I)I- named - unpackQuickCraftButton- Lnet/minecraft/screen/ScreenHandler;unpackQuickCraftButton(I)I
 
- 
unpackQuickCraftStagepublic static int unpackQuickCraftStage(int quickCraftData) - Mappings:
- Namespace - Name - Mixin selector - official - d- Lcbf;d(I)I- intermediary - method_7594- Lnet/minecraft/class_1703;method_7594(I)I- named - unpackQuickCraftStage- Lnet/minecraft/screen/ScreenHandler;unpackQuickCraftStage(I)I
 
- 
packQuickCraftDatapublic static int packQuickCraftData(int quickCraftStage, int buttonId) - Mappings:
- Namespace - Name - Mixin selector - official - b- Lcbf;b(II)I- intermediary - method_7591- Lnet/minecraft/class_1703;method_7591(II)I- named - packQuickCraftData- Lnet/minecraft/screen/ScreenHandler;packQuickCraftData(II)I
 
- 
shouldQuickCraftContinue- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(ILbyo;)Z- intermediary - method_7600- Lnet/minecraft/class_1703;method_7600(ILnet/minecraft/class_1657;)Z- named - shouldQuickCraftContinue- Lnet/minecraft/screen/ScreenHandler;shouldQuickCraftContinue(ILnet/minecraft/entity/player/PlayerEntity;)Z
 
- 
endQuickCraftprotected void endQuickCraft()- Mappings:
- Namespace - Name - Mixin selector - official - f- Lcbf;f()V- intermediary - method_7605- Lnet/minecraft/class_1703;method_7605()V- named - endQuickCraft- Lnet/minecraft/screen/ScreenHandler;endQuickCraft()V
 
- 
canInsertItemIntoSlotpublic static boolean canInsertItemIntoSlot(@Nullable @Nullable Slot slot, ItemStack stack, boolean allowOverflow) - Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(Lccx;Lcfz;Z)Z- intermediary - method_7592- Lnet/minecraft/class_1703;method_7592(Lnet/minecraft/class_1735;Lnet/minecraft/class_1799;Z)Z- named - canInsertItemIntoSlot- Lnet/minecraft/screen/ScreenHandler;canInsertItemIntoSlot(Lnet/minecraft/screen/slot/Slot;Lnet/minecraft/item/ItemStack;Z)Z
 
- 
calculateStackSize- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(Ljava/util/Set;ILcfz;)I- intermediary - method_7617- Lnet/minecraft/class_1703;method_7617(Ljava/util/Set;ILnet/minecraft/class_1799;)I- named - calculateStackSize- Lnet/minecraft/screen/ScreenHandler;calculateStackSize(Ljava/util/Set;ILnet/minecraft/item/ItemStack;)I
 
- 
canInsertIntoSlot- Mappings:
- Namespace - Name - Mixin selector - official - b- Lcbf;b(Lccx;)Z- intermediary - method_7615- Lnet/minecraft/class_1703;method_7615(Lnet/minecraft/class_1735;)Z- named - canInsertIntoSlot- Lnet/minecraft/screen/ScreenHandler;canInsertIntoSlot(Lnet/minecraft/screen/slot/Slot;)Z
 
- 
calculateComparatorOutput- Mappings:
- Namespace - Name - Mixin selector - official - a- Lcbf;a(Lczn;)I- intermediary - method_7608- Lnet/minecraft/class_1703;method_7608(Lnet/minecraft/class_2586;)I- named - calculateComparatorOutput- Lnet/minecraft/screen/ScreenHandler;calculateComparatorOutput(Lnet/minecraft/block/entity/BlockEntity;)I
 
- 
calculateComparatorOutput- Mappings:
- Namespace - Name - Mixin selector - official - b- Lcbf;b(Lbdq;)I- intermediary - method_7618- Lnet/minecraft/class_1703;method_7618(Lnet/minecraft/class_1263;)I- named - calculateComparatorOutput- Lnet/minecraft/screen/ScreenHandler;calculateComparatorOutput(Lnet/minecraft/inventory/Inventory;)I
 
- 
setCursorStack- Mappings:
- Namespace - Name - Mixin selector - official - b- Lcbf;b(Lcfz;)V- intermediary - method_34254- Lnet/minecraft/class_1703;method_34254(Lnet/minecraft/class_1799;)V- named - setCursorStack- Lnet/minecraft/screen/ScreenHandler;setCursorStack(Lnet/minecraft/item/ItemStack;)V
 
- 
getCursorStack- Mappings:
- Namespace - Name - Mixin selector - official - g- Lcbf;g()Lcfz;- intermediary - method_34255- Lnet/minecraft/class_1703;method_34255()Lnet/minecraft/class_1799;- named - getCursorStack- Lnet/minecraft/screen/ScreenHandler;getCursorStack()Lnet/minecraft/item/ItemStack;
 
- 
disableSyncingpublic void disableSyncing()- Mappings:
- Namespace - Name - Mixin selector - official - h- Lcbf;h()V- intermediary - method_34256- Lnet/minecraft/class_1703;method_34256()V- named - disableSyncing- Lnet/minecraft/screen/ScreenHandler;disableSyncing()V
 
- 
enableSyncingpublic void enableSyncing()- Mappings:
- Namespace - Name - Mixin selector - official - i- Lcbf;i()V- intermediary - method_34257- Lnet/minecraft/class_1703;method_34257()V- named - enableSyncing- Lnet/minecraft/screen/ScreenHandler;enableSyncing()V
 
- 
getSlotIndex- Mappings:
- Namespace - Name - Mixin selector - official - b- Lcbf;b(Lbdq;I)Ljava/util/OptionalInt;- intermediary - method_37418- Lnet/minecraft/class_1703;method_37418(Lnet/minecraft/class_1263;I)Ljava/util/OptionalInt;- named - getSlotIndex- Lnet/minecraft/screen/ScreenHandler;getSlotIndex(Lnet/minecraft/inventory/Inventory;I)Ljava/util/OptionalInt;
 
- 
getRevisionpublic int getRevision()- Mappings:
- Namespace - Name - Mixin selector - official - j- Lcbf;j()I- intermediary - method_37421- Lnet/minecraft/class_1703;method_37421()I- named - getRevision- Lnet/minecraft/screen/ScreenHandler;getRevision()I
 
- 
nextRevisionpublic int nextRevision()- Mappings:
- Namespace - Name - Mixin selector - official - k- Lcbf;k()I- intermediary - method_37422- Lnet/minecraft/class_1703;method_37422()I- named - nextRevision- Lnet/minecraft/screen/ScreenHandler;nextRevision()I
 
 
-