Class ScreenHandler

java.lang.Object
net.minecraft.screen.ScreenHandler
Direct Known Subclasses:
AbstractRecipeScreenHandler, BeaconScreenHandler, BrewingStandScreenHandler, CartographyTableScreenHandler, CrafterScreenHandler, CreativeInventoryScreen.CreativeScreenHandler, EnchantmentScreenHandler, ForgingScreenHandler, Generic3x3ContainerScreenHandler, GenericContainerScreenHandler, GrindstoneScreenHandler, HopperScreenHandler, HorseScreenHandler, LecternScreenHandler, LoomScreenHandler, MerchantScreenHandler, ShulkerBoxScreenHandler, StonecutterScreenHandler

public abstract class ScreenHandler extends Object
Manages lists of item stacks and properties between the server and the client for use in a screen. They are usually used for synchronizing the screens of container blocks such as chests and furnaces.

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 cib
intermediary net/minecraft/class_1703
named net/minecraft/screen/ScreenHandler
  • Field Details

    • LOGGER

      private static final Logger LOGGER
      Mappings:
      Namespace Name Mixin selector
      official k Lcib;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_INDEX

      public static final int EMPTY_SPACE_SLOT_INDEX
      A 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 Lcib;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_30731

      public static final int field_30731
      See Also:
      Mappings:
      Namespace Name Mixin selector
      official b Lcib;b:I
      intermediary field_30731 Lnet/minecraft/class_1703;field_30731:I
      named field_30731 Lnet/minecraft/screen/ScreenHandler;field_30731:I
    • field_30732

      public static final int field_30732
      See Also:
      Mappings:
      Namespace Name Mixin selector
      official c Lcib;c:I
      intermediary field_30732 Lnet/minecraft/class_1703;field_30732:I
      named field_30732 Lnet/minecraft/screen/ScreenHandler;field_30732:I
    • field_30733

      public static final int field_30733
      See Also:
      Mappings:
      Namespace Name Mixin selector
      official d Lcib;d:I
      intermediary field_30733 Lnet/minecraft/class_1703;field_30733:I
      named field_30733 Lnet/minecraft/screen/ScreenHandler;field_30733:I
    • field_30734

      public static final int field_30734
      See Also:
      Mappings:
      Namespace Name Mixin selector
      official e Lcib;e:I
      intermediary field_30734 Lnet/minecraft/class_1703;field_30734:I
      named field_30734 Lnet/minecraft/screen/ScreenHandler;field_30734:I
    • field_30735

      public static final int field_30735
      See Also:
      Mappings:
      Namespace Name Mixin selector
      official f Lcib;f:I
      intermediary field_30735 Lnet/minecraft/class_1703;field_30735:I
      named field_30735 Lnet/minecraft/screen/ScreenHandler;field_30735:I
    • field_30736

      public static final int field_30736
      See Also:
      Mappings:
      Namespace Name Mixin selector
      official g Lcib;g:I
      intermediary field_30736 Lnet/minecraft/class_1703;field_30736:I
      named field_30736 Lnet/minecraft/screen/ScreenHandler;field_30736:I
    • field_30737

      public static final int field_30737
      See Also:
      Mappings:
      Namespace Name Mixin selector
      official h Lcib;h:I
      intermediary field_30737 Lnet/minecraft/class_1703;field_30737:I
      named field_30737 Lnet/minecraft/screen/ScreenHandler;field_30737:I
    • trackedStacks

      private final DefaultedList<ItemStack> trackedStacks
      A list of item stacks that is used for tracking changes in sendContentUpdates().
      Mappings:
      Namespace Name Mixin selector
      official l Lcib;l:Liq;
      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

      public final DefaultedList<Slot> slots
      Mappings:
      Namespace Name Mixin selector
      official i Lcib;i:Liq;
      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

      private final List<Property> properties
      Mappings:
      Namespace Name Mixin selector
      official m Lcib;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

      private ItemStack cursorStack
      Mappings:
      Namespace Name Mixin selector
      official n Lcib;n:Lcmy;
      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

      private final DefaultedList<ItemStack> previousTrackedStacks
      Mappings:
      Namespace Name Mixin selector
      official o Lcib;o:Liq;
      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

      private final IntList trackedPropertyValues
      Mappings:
      Namespace Name Mixin selector
      official p Lcib;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

      private ItemStack previousCursorStack
      Mappings:
      Namespace Name Mixin selector
      official q Lcib;q:Lcmy;
      intermediary field_29207 Lnet/minecraft/class_1703;field_29207:Lnet/minecraft/class_1799;
      named previousCursorStack Lnet/minecraft/screen/ScreenHandler;previousCursorStack:Lnet/minecraft/item/ItemStack;
    • revision

      private int revision
      Mappings:
      Namespace Name Mixin selector
      official r Lcib;r:I
      intermediary field_34024 Lnet/minecraft/class_1703;field_34024:I
      named revision Lnet/minecraft/screen/ScreenHandler;revision:I
    • type

      @Nullable private final @Nullable ScreenHandlerType<?> type
      Mappings:
      Namespace Name Mixin selector
      official s Lcib;s:Lcji;
      intermediary field_17493 Lnet/minecraft/class_1703;field_17493:Lnet/minecraft/class_3917;
      named type Lnet/minecraft/screen/ScreenHandler;type:Lnet/minecraft/screen/ScreenHandlerType;
    • syncId

      public final int syncId
      Mappings:
      Namespace Name Mixin selector
      official j Lcib;j:I
      intermediary field_7763 Lnet/minecraft/class_1703;field_7763:I
      named syncId Lnet/minecraft/screen/ScreenHandler;syncId:I
    • quickCraftButton

      private int quickCraftButton
      Mappings:
      Namespace Name Mixin selector
      official t Lcib;t:I
      intermediary field_7762 Lnet/minecraft/class_1703;field_7762:I
      named quickCraftButton Lnet/minecraft/screen/ScreenHandler;quickCraftButton:I
    • quickCraftStage

      private int quickCraftStage
      Mappings:
      Namespace Name Mixin selector
      official u Lcib;u:I
      intermediary field_7759 Lnet/minecraft/class_1703;field_7759:I
      named quickCraftStage Lnet/minecraft/screen/ScreenHandler;quickCraftStage:I
    • quickCraftSlots

      private final Set<Slot> quickCraftSlots
      Mappings:
      Namespace Name Mixin selector
      official v Lcib;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

      private final List<ScreenHandlerListener> listeners
      Mappings:
      Namespace Name Mixin selector
      official w Lcib;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 Lcib;x:Lcio;
      intermediary field_29208 Lnet/minecraft/class_1703;field_29208:Lnet/minecraft/class_5916;
      named syncHandler Lnet/minecraft/screen/ScreenHandler;syncHandler:Lnet/minecraft/screen/ScreenHandlerSyncHandler;
    • disableSync

      private boolean disableSync
      Mappings:
      Namespace Name Mixin selector
      official y Lcib;y:Z
      intermediary field_29209 Lnet/minecraft/class_1703;field_29209:Z
      named disableSync Lnet/minecraft/screen/ScreenHandler;disableSync:Z
  • Constructor Details

    • ScreenHandler

      protected ScreenHandler(@Nullable @Nullable ScreenHandlerType<?> type, int syncId)
      Mappings:
      Namespace Name Mixin selector
      official <init> Lcib;<init>(Lcji;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

    • canUse

      protected static boolean canUse(ScreenHandlerContext context, PlayerEntity player, Block block)
      Returns 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 block and the player is within 8 blocks from the block's center.
      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(Lcim;Lcfi;Lcwq;)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
    • getType

      public ScreenHandlerType<?> getType()
      Returns 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 Lcib;a()Lcji;
      intermediary method_17358 Lnet/minecraft/class_1703;method_17358()Lnet/minecraft/class_3917;
      named getType Lnet/minecraft/screen/ScreenHandler;getType()Lnet/minecraft/screen/ScreenHandlerType;
    • checkSize

      protected static void checkSize(Inventory inventory, int expectedSize)
      Checks that the size of the provided inventory is at least as large as the expectedSize.
      Throws:
      IllegalArgumentException - if the inventory size is smaller than expectedSize
      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(Lbju;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
    • checkDataCount

      protected static void checkDataCount(PropertyDelegate data, int expectedCount)
      Checks that the size of the data is at least as large as the expectedCount.
      Throws:
      IllegalArgumentException - if the data has a smaller size than expectedCount
      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(Lcil;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
    • isValid

      public boolean isValid(int slot)
      Returns whether the given slot index is valid.

      This returns true for all added slots, -999, and -1.

      Returns:
      whether the given slot index is valid
      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(I)Z
      intermediary method_40442 Lnet/minecraft/class_1703;method_40442(I)Z
      named isValid Lnet/minecraft/screen/ScreenHandler;isValid(I)Z
    • addSlot

      protected Slot addSlot(Slot slot)
      Adds slot to this screen handler. This must be called inside the subclass's constructor.
      Returns:
      the added slot
      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(Lcjw;)Lcjw;
      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;
    • addProperty

      protected Property addProperty(Property property)
      Adds property to 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 Lcib;a(Lcit;)Lcit;
      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;
    • addProperties

      protected void addProperties(PropertyDelegate propertyDelegate)
      Adds properties of propertyDelegate to this screen handler. This must be called inside the subclass's constructor.
      See Also:
      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(Lcil;)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
    • addListener

      public void addListener(ScreenHandlerListener listener)
      Adds listener to 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 Lcib;a(Lcin;)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

      public void updateSyncHandler(ScreenHandlerSyncHandler handler)
      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(Lcio;)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
    • syncState

      public void syncState()
      Mappings:
      Namespace Name Mixin selector
      official b Lcib;b()V
      intermediary method_34252 Lnet/minecraft/class_1703;method_34252()V
      named syncState Lnet/minecraft/screen/ScreenHandler;syncState()V
    • removeListener

      public void removeListener(ScreenHandlerListener listener)
      Removes listener from this screen handler.
      Mappings:
      Namespace Name Mixin selector
      official b Lcib;b(Lcin;)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
    • getStacks

      public DefaultedList<ItemStack> getStacks()
      Returns 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 Lcib;c()Liq;
      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;
    • sendContentUpdates

      public void sendContentUpdates()
      Sends updates to listeners if any properties or slot stacks have changed.
      Mappings:
      Namespace Name Mixin selector
      official d Lcib;d()V
      intermediary method_7623 Lnet/minecraft/class_1703;method_7623()V
      named sendContentUpdates Lnet/minecraft/screen/ScreenHandler;sendContentUpdates()V
    • updateToClient

      public void updateToClient()
      Mappings:
      Namespace Name Mixin selector
      official e Lcib;e()V
      intermediary method_37420 Lnet/minecraft/class_1703;method_37420()V
      named updateToClient Lnet/minecraft/screen/ScreenHandler;updateToClient()V
    • notifyPropertyUpdate

      private void notifyPropertyUpdate(int index, int value)
      Mappings:
      Namespace Name Mixin selector
      official c Lcib;c(II)V
      intermediary method_37419 Lnet/minecraft/class_1703;method_37419(II)V
      named notifyPropertyUpdate Lnet/minecraft/screen/ScreenHandler;notifyPropertyUpdate(II)V
    • updateTrackedSlot

      private void updateTrackedSlot(int slot, ItemStack stack, Supplier<ItemStack> copySupplier)
      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(ILcmy;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

      private void checkSlotUpdates(int slot, ItemStack stack, Supplier<ItemStack> copySupplier)
      Mappings:
      Namespace Name Mixin selector
      official b Lcib;b(ILcmy;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
    • checkPropertyUpdates

      private void checkPropertyUpdates(int id, int value)
      Mappings:
      Namespace Name Mixin selector
      official d Lcib;d(II)V
      intermediary method_34715 Lnet/minecraft/class_1703;method_34715(II)V
      named checkPropertyUpdates Lnet/minecraft/screen/ScreenHandler;checkPropertyUpdates(II)V
    • checkCursorStackUpdates

      private void checkCursorStackUpdates()
      Mappings:
      Namespace Name Mixin selector
      official l Lcib;l()V
      intermediary method_34258 Lnet/minecraft/class_1703;method_34258()V
      named checkCursorStackUpdates Lnet/minecraft/screen/ScreenHandler;checkCursorStackUpdates()V
    • setPreviousTrackedSlot

      public void setPreviousTrackedSlot(int slot, ItemStack stack)
      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(ILcmy;)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

      public void setPreviousTrackedSlotMutable(int slot, ItemStack stack)
      Mappings:
      Namespace Name Mixin selector
      official b Lcib;b(ILcmy;)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

      public void setPreviousCursorStack(ItemStack stack)
      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(Lcmy;)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
    • onButtonClick

      public boolean onButtonClick(PlayerEntity player, int id)
      Called when player clicks a button with id.

      "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 Lcib;b(Lcfi;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
    • getSlot

      public Slot getSlot(int index)
      Returns the slot with index index.
      Returns:
      the slot with index index
      Mappings:
      Namespace Name Mixin selector
      official b Lcib;b(I)Lcjw;
      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;
    • quickMove

      public abstract ItemStack quickMove(PlayerEntity player, int slot)
      Quick-moves the stack at slot to 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.EMPTY when no stack can be transferred, otherwise the original stack
      See Also:
      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(Lcfi;I)Lcmy;
      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;
    • onSlotClick

      public void onSlotClick(int slotIndex, int button, SlotActionType actionType, PlayerEntity player)
      Performs 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 SlotActionType value for details
      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(IILcik;Lcfi;)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
    • internalOnSlotClick

      private 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 Lcib;b(IILcik;Lcfi;)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
    • handleSlotClick

      private boolean handleSlotClick(PlayerEntity player, ClickType clickType, Slot slot, ItemStack stack, ItemStack cursorStack)
      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(Lcfi;Lcij;Lcjw;Lcmy;Lcmy;)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
    • getCursorStackReference

      private StackReference getCursorStackReference()
      Returns a reference to the cursor's stack.
      Returns:
      a reference to the cursor's stack
      Mappings:
      Namespace Name Mixin selector
      official m Lcib;m()Lbnd;
      intermediary method_34259 Lnet/minecraft/class_1703;method_34259()Lnet/minecraft/class_5630;
      named getCursorStackReference Lnet/minecraft/screen/ScreenHandler;getCursorStackReference()Lnet/minecraft/inventory/StackReference;
    • canInsertIntoSlot

      public boolean canInsertIntoSlot(ItemStack stack, Slot slot)
      Returns whether stack can be inserted to slot.

      Subclasses should override this to return false if the slot is used for output.

      Returns:
      whether stack can be inserted to slot
      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(Lcmy;Lcjw;)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
    • onClosed

      public void onClosed(PlayerEntity player)
      Called 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 Lcib;b(Lcfi;)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

      protected void dropInventory(PlayerEntity player, Inventory inventory)
      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(Lcfi;Lbju;)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
    • onContentChanged

      public void onContentChanged(Inventory inventory)
      Called when a slot's content has changed.

      This is not called by default; subclasses that override this method should also use a custom Inventory whose markDirty method 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 Lcib;a(Lbju;)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

      public void setStackInSlot(int slot, int revision, ItemStack stack)
      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(IILcmy;)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

      public void updateSlotStacks(int revision, List<ItemStack> stacks, ItemStack cursorStack)
      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(ILjava/util/List;Lcmy;)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
    • setProperty

      public void setProperty(int id, int value)
      Sets the property with ID id to value.

      Subclasses can call sendContentUpdates() to manually sync the change to the client.

      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(II)V
      intermediary method_7606 Lnet/minecraft/class_1703;method_7606(II)V
      named setProperty Lnet/minecraft/screen/ScreenHandler;setProperty(II)V
    • canUse

      public abstract boolean canUse(PlayerEntity player)
      Returns 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 Lcib;a(Lcfi;)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
    • insertItem

      protected boolean insertItem(ItemStack stack, int startIndex, int endIndex, boolean fromLast)
      Tries to consume stack by inserting to slots from startIndex to endIndex - 1 (both inclusive) until the entire stack is used.

      If fromLast is true, this attempts the insertion in reverse order; i.e. endIndex - 1 to startIndex (both inclusive).

      Returns:
      whether stack was decremented
      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(Lcmy;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
    • unpackQuickCraftButton

      public static int unpackQuickCraftButton(int quickCraftData)
      Mappings:
      Namespace Name Mixin selector
      official c Lcib;c(I)I
      intermediary method_7620 Lnet/minecraft/class_1703;method_7620(I)I
      named unpackQuickCraftButton Lnet/minecraft/screen/ScreenHandler;unpackQuickCraftButton(I)I
    • unpackQuickCraftStage

      public static int unpackQuickCraftStage(int quickCraftData)
      Mappings:
      Namespace Name Mixin selector
      official d Lcib;d(I)I
      intermediary method_7594 Lnet/minecraft/class_1703;method_7594(I)I
      named unpackQuickCraftStage Lnet/minecraft/screen/ScreenHandler;unpackQuickCraftStage(I)I
    • packQuickCraftData

      public static int packQuickCraftData(int quickCraftStage, int buttonId)
      Mappings:
      Namespace Name Mixin selector
      official b Lcib;b(II)I
      intermediary method_7591 Lnet/minecraft/class_1703;method_7591(II)I
      named packQuickCraftData Lnet/minecraft/screen/ScreenHandler;packQuickCraftData(II)I
    • shouldQuickCraftContinue

      public static boolean shouldQuickCraftContinue(int stage, PlayerEntity player)
      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(ILcfi;)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
    • endQuickCraft

      protected void endQuickCraft()
      Mappings:
      Namespace Name Mixin selector
      official f Lcib;f()V
      intermediary method_7605 Lnet/minecraft/class_1703;method_7605()V
      named endQuickCraft Lnet/minecraft/screen/ScreenHandler;endQuickCraft()V
    • canInsertItemIntoSlot

      public static boolean canInsertItemIntoSlot(@Nullable @Nullable Slot slot, ItemStack stack, boolean allowOverflow)
      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(Lcjw;Lcmy;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

      public static int calculateStackSize(Set<Slot> slots, int mode, ItemStack stack)
      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(Ljava/util/Set;ILcmy;)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

      public boolean canInsertIntoSlot(Slot slot)
      Mappings:
      Namespace Name Mixin selector
      official b Lcib;b(Lcjw;)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

      public static int calculateComparatorOutput(@Nullable @Nullable BlockEntity entity)
      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(Ldgv;)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

      public static int calculateComparatorOutput(@Nullable @Nullable Inventory inventory)
      Mappings:
      Namespace Name Mixin selector
      official b Lcib;b(Lbju;)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

      public void setCursorStack(ItemStack stack)
      Mappings:
      Namespace Name Mixin selector
      official b Lcib;b(Lcmy;)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

      public ItemStack getCursorStack()
      Mappings:
      Namespace Name Mixin selector
      official g Lcib;g()Lcmy;
      intermediary method_34255 Lnet/minecraft/class_1703;method_34255()Lnet/minecraft/class_1799;
      named getCursorStack Lnet/minecraft/screen/ScreenHandler;getCursorStack()Lnet/minecraft/item/ItemStack;
    • disableSyncing

      public void disableSyncing()
      Mappings:
      Namespace Name Mixin selector
      official h Lcib;h()V
      intermediary method_34256 Lnet/minecraft/class_1703;method_34256()V
      named disableSyncing Lnet/minecraft/screen/ScreenHandler;disableSyncing()V
    • enableSyncing

      public void enableSyncing()
      Mappings:
      Namespace Name Mixin selector
      official i Lcib;i()V
      intermediary method_34257 Lnet/minecraft/class_1703;method_34257()V
      named enableSyncing Lnet/minecraft/screen/ScreenHandler;enableSyncing()V
    • copySharedSlots

      public void copySharedSlots(ScreenHandler handler)
      Mappings:
      Namespace Name Mixin selector
      official a Lcib;a(Lcib;)V
      intermediary method_34247 Lnet/minecraft/class_1703;method_34247(Lnet/minecraft/class_1703;)V
      named copySharedSlots Lnet/minecraft/screen/ScreenHandler;copySharedSlots(Lnet/minecraft/screen/ScreenHandler;)V
    • getSlotIndex

      public OptionalInt getSlotIndex(Inventory inventory, int index)
      Mappings:
      Namespace Name Mixin selector
      official b Lcib;b(Lbju;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;
    • getRevision

      public int getRevision()
      Mappings:
      Namespace Name Mixin selector
      official j Lcib;j()I
      intermediary method_37421 Lnet/minecraft/class_1703;method_37421()I
      named getRevision Lnet/minecraft/screen/ScreenHandler;getRevision()I
    • nextRevision

      public int nextRevision()
      Mappings:
      Namespace Name Mixin selector
      official k Lcib;k()I
      intermediary method_37422 Lnet/minecraft/class_1703;method_37422()I
      named nextRevision Lnet/minecraft/screen/ScreenHandler;nextRevision()I