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 cel
intermediary net/minecraft/class_1703
named net/minecraft/screen/ScreenHandler
-
Field Summary
Modifier and TypeFieldDescriptionprivate ItemStack
private boolean
static final int
A special slot index value (-999) indicating that the player has clicked outside the main panel of a screen.static final int
static final int
static final int
static final int
static final int
static final int
static final int
private final List<ScreenHandlerListener>
private static final Logger
private ItemStack
private final DefaultedList<ItemStack>
private int
private int
private int
final DefaultedList<Slot>
private @Nullable ScreenHandlerSyncHandler
final int
private final IntList
private final DefaultedList<ItemStack>
A list of item stacks that is used for tracking changes insendContentUpdates()
.private final @Nullable ScreenHandlerType<?>
-
Constructor Summary
ModifierConstructorDescriptionprotected
ScreenHandler
(@Nullable ScreenHandlerType<?> type, int syncId) -
Method Summary
Modifier and TypeMethodDescriptionvoid
addListener
(ScreenHandlerListener listener) Addslistener
to the screen handler.protected void
addProperties
(PropertyDelegate propertyDelegate) Adds properties ofpropertyDelegate
to this screen handler.protected Property
addProperty
(Property property) Addsproperty
to this screen handler.protected Slot
Addsslot
to this screen handler.static int
calculateComparatorOutput
(@Nullable BlockEntity entity) static int
calculateComparatorOutput
(@Nullable Inventory inventory) static int
calculateStackSize
(Set<Slot> slots, int mode, ItemStack stack) boolean
canInsertIntoSlot
(ItemStack stack, Slot slot) Returns whetherstack
can be inserted toslot
.boolean
canInsertIntoSlot
(Slot slot) static boolean
canInsertItemIntoSlot
(@Nullable Slot slot, ItemStack stack, boolean allowOverflow) abstract boolean
canUse
(PlayerEntity player) Returns whether the screen handler can be used.protected static boolean
canUse
(ScreenHandlerContext context, PlayerEntity player, Block block) Returns whether the screen handler can be used.private void
protected static void
checkDataCount
(PropertyDelegate data, int expectedCount) Checks that the size of thedata
is at least as large as theexpectedCount
.private void
checkPropertyUpdates
(int id, int value) protected static void
Checks that the size of the provided inventory is at least as large as theexpectedSize
.private void
checkSlotUpdates
(int slot, ItemStack stack, Supplier<ItemStack> copySupplier) void
copySharedSlots
(ScreenHandler handler) void
protected void
dropInventory
(PlayerEntity player, Inventory inventory) void
protected void
private StackReference
Returns a reference to the cursor's stack.int
getSlot
(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 boolean
handleSlotClick
(PlayerEntity player, ClickType clickType, Slot slot, ItemStack stack, ItemStack cursorStack) protected boolean
insertItem
(ItemStack stack, int startIndex, int endIndex, boolean fromLast) Tries to consumestack
by inserting to slots fromstartIndex
toendIndex - 1
(both inclusive) until the entire stack is used.private void
internalOnSlotClick
(int slotIndex, int button, SlotActionType actionType, PlayerEntity player) The actual logic that handles a slot click.boolean
isValid
(int slot) Returns whether the given slot index is valid.int
private void
notifyPropertyUpdate
(int index, int value) boolean
onButtonClick
(PlayerEntity player, int id) Called whenplayer
clicks a button withid
.void
onClosed
(PlayerEntity player) Called when this screen handler is closed.void
onContentChanged
(Inventory inventory) Called when a slot's content has changed.void
onSlotClick
(int slotIndex, int button, SlotActionType actionType, PlayerEntity player) Performs a slot click.static int
packQuickCraftData
(int quickCraftStage, int buttonId) abstract ItemStack
quickMove
(PlayerEntity player, int slot) Quick-moves the stack atslot
to other slots of the screen handler that belong to a different inventory or another section of the same inventory.void
removeListener
(ScreenHandlerListener listener) Removeslistener
from this screen handler.void
Sends updates to listeners if any properties or slot stacks have changed.void
setCursorStack
(ItemStack stack) void
setPreviousCursorStack
(ItemStack stack) void
setPreviousTrackedSlot
(int slot, ItemStack stack) void
setPreviousTrackedSlotMutable
(int slot, ItemStack stack) void
setProperty
(int id, int value) Sets the property with IDid
tovalue
.void
setStackInSlot
(int slot, int revision, ItemStack stack) static boolean
shouldQuickCraftContinue
(int stage, PlayerEntity player) void
static int
unpackQuickCraftButton
(int quickCraftData) static int
unpackQuickCraftStage
(int quickCraftData) void
updateSlotStacks
(int revision, List<ItemStack> stacks, ItemStack cursorStack) void
void
private void
updateTrackedSlot
(int slot, ItemStack stack, Supplier<ItemStack> copySupplier)
-
Field Details
-
LOGGER
- Mappings:
Namespace Name Mixin selector official k
Lcel;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_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
Lcel;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
Lcel;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
Lcel;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
Lcel;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
Lcel;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
Lcel;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
Lcel;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
Lcel;h:I
intermediary field_30737
Lnet/minecraft/class_1703;field_30737:I
named field_30737
Lnet/minecraft/screen/ScreenHandler;field_30737:I
-
trackedStacks
A list of item stacks that is used for tracking changes insendContentUpdates()
.- Mappings:
Namespace Name Mixin selector official l
Lcel;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
Lcel;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
Lcel;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
Lcel;n:Lcjf;
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
Lcel;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
Lcel;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
Lcel;q:Lcjf;
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
Lcel;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
Lcel;s:Lcfq;
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
Lcel;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
Lcel;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
Lcel;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
Lcel;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
Lcel;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
Lcel;x:Lcey;
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
Lcel;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>
Lcel;<init>(Lcfq;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
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
Lcel;a(Lcew;Lcbu;Lcsv;)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
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
Lcel;a()Lcfq;
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
Checks that the size of the provided inventory is at least as large as theexpectedSize
.- Throws:
IllegalArgumentException
- if the inventory size is smaller thanexpectedSize
- Mappings:
Namespace Name Mixin selector official a
Lcel;a(Lbgr;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
Checks that the size of thedata
is at least as large as theexpectedCount
.- Throws:
IllegalArgumentException
- if thedata
has a smaller size thanexpectedCount
- Mappings:
Namespace Name Mixin selector official a
Lcel;a(Lcev;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
Lcel;a(I)Z
intermediary method_40442
Lnet/minecraft/class_1703;method_40442(I)Z
named isValid
Lnet/minecraft/screen/ScreenHandler;isValid(I)Z
-
addSlot
Addsslot
to this screen handler. This must be called inside the subclass's constructor.- Returns:
- the added slot
- Mappings:
Namespace Name Mixin selector official a
Lcel;a(Lcgd;)Lcgd;
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
Addsproperty
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
Lcel;a(Lcfb;)Lcfb;
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
Adds properties ofpropertyDelegate
to this screen handler. This must be called inside the subclass's constructor.- See Also:
- Mappings:
Namespace Name Mixin selector official a
Lcel;a(Lcev;)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
Addslistener
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
Lcel;a(Lcex;)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
Lcel;a(Lcey;)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
Lcel;b()V
intermediary method_34252
Lnet/minecraft/class_1703;method_34252()V
named syncState
Lnet/minecraft/screen/ScreenHandler;syncState()V
-
removeListener
Removeslistener
from this screen handler.- Mappings:
Namespace Name Mixin selector official b
Lcel;b(Lcex;)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
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
Lcel;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;
-
sendContentUpdates
public void sendContentUpdates()Sends updates to listeners if any properties or slot stacks have changed.- Mappings:
Namespace Name Mixin selector official d
Lcel;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
Lcel;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
Lcel;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
Lcel;a(ILcjf;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
Lcel;b(ILcjf;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
Lcel;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
Lcel;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
Lcel;a(ILcjf;)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
Lcel;b(ILcjf;)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
Lcel;a(Lcjf;)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
Called whenplayer
clicks 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
Lcel;b(Lcbu;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
Returns the slot with indexindex
.- Returns:
- the slot with index
index
- Mappings:
Namespace Name Mixin selector official b
Lcel;b(I)Lcgd;
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
Quick-moves the stack atslot
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
Lcel;a(Lcbu;I)Lcjf;
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
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 eachSlotActionType
value for details- Mappings:
Namespace Name Mixin selector official a
Lcel;a(IILceu;Lcbu;)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
Lcel;b(IILceu;Lcbu;)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
Lcel;a(Lcbu;Lcet;Lcgd;Lcjf;Lcjf;)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
Returns a reference to the cursor's stack.- Returns:
- a reference to the cursor's stack
- Mappings:
Namespace Name Mixin selector official m
Lcel;m()Lbjy;
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
Returns whetherstack
can be inserted toslot
.Subclasses should override this to return
false
if the slot is used for output.- Returns:
- whether
stack
can be inserted toslot
- Mappings:
Namespace Name Mixin selector official a
Lcel;a(Lcjf;Lcgd;)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
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
Lcel;b(Lcbu;)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
Lcel;a(Lcbu;Lbgr;)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
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
whosemarkDirty
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
Lcel;a(Lbgr;)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
Lcel;a(IILcjf;)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
Lcel;a(ILjava/util/List;Lcjf;)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 IDid
tovalue
.Subclasses can call
sendContentUpdates()
to manually sync the change to the client.- Mappings:
Namespace Name Mixin selector official a
Lcel;a(II)V
intermediary method_7606
Lnet/minecraft/class_1703;method_7606(II)V
named setProperty
Lnet/minecraft/screen/ScreenHandler;setProperty(II)V
-
canUse
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
Lcel;a(Lcbu;)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
Tries to consumestack
by inserting to slots fromstartIndex
toendIndex - 1
(both inclusive) until the entire stack is used.If
fromLast
istrue
, this attempts the insertion in reverse order; i.e.endIndex - 1
tostartIndex
(both inclusive).- Returns:
- whether
stack
was decremented - Mappings:
Namespace Name Mixin selector official a
Lcel;a(Lcjf;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
Lcel;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
Lcel;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
Lcel;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
Lcel;a(ILcbu;)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
Lcel;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
Lcel;a(Lcgd;Lcjf;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
Lcel;a(Ljava/util/Set;ILcjf;)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
Lcel;b(Lcgd;)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
Lcel;a(Ldcv;)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
Lcel;b(Lbgr;)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
Lcel;b(Lcjf;)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
Lcel;g()Lcjf;
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
Lcel;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
Lcel;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
Lcel;b(Lbgr;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
Lcel;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
Lcel;k()I
intermediary method_37422
Lnet/minecraft/class_1703;method_37422()I
named nextRevision
Lnet/minecraft/screen/ScreenHandler;nextRevision()I
-