Class ScreenHandler
- Direct Known Subclasses:
AbstractRecipeScreenHandler
,BeaconScreenHandler
,BrewingStandScreenHandler
,CartographyTableScreenHandler
,CrafterScreenHandler
,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 named net/minecraft/screen/ScreenHandler
intermediary net/minecraft/class_1703
official ctb
-
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
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
addPlayerHotbarSlots
(Inventory playerInventory, int left, int y) protected void
addPlayerInventorySlots
(Inventory playerInventory, int left, int top) protected void
addPlayerSlots
(Inventory playerInventory, int left, int top) Adds the slots for the player inventory and hotbar.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
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) private static void
offerOrDropStack
(PlayerEntity player, ItemStack stack) 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
selectBundleStack
(int slot, int selectedStack) 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 named LOGGER
Lnet/minecraft/screen/ScreenHandler;LOGGER:Lorg/slf4j/Logger;
intermediary field_36534
Lnet/minecraft/class_1703;field_36534:Lorg/slf4j/Logger;
official m
Lctb;m: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 named EMPTY_SPACE_SLOT_INDEX
Lnet/minecraft/screen/ScreenHandler;EMPTY_SPACE_SLOT_INDEX:I
intermediary field_30730
Lnet/minecraft/class_1703;field_30730:I
official a
Lctb;a:I
-
field_30731
public static final int field_30731- See Also:
- Mappings:
Namespace Name Mixin selector named field_30731
Lnet/minecraft/screen/ScreenHandler;field_30731:I
intermediary field_30731
Lnet/minecraft/class_1703;field_30731:I
official b
Lctb;b:I
-
field_30732
public static final int field_30732- See Also:
- Mappings:
Namespace Name Mixin selector named field_30732
Lnet/minecraft/screen/ScreenHandler;field_30732:I
intermediary field_30732
Lnet/minecraft/class_1703;field_30732:I
official c
Lctb;c:I
-
field_30733
public static final int field_30733- See Also:
- Mappings:
Namespace Name Mixin selector named field_30733
Lnet/minecraft/screen/ScreenHandler;field_30733:I
intermediary field_30733
Lnet/minecraft/class_1703;field_30733:I
official d
Lctb;d:I
-
field_30734
public static final int field_30734- See Also:
- Mappings:
Namespace Name Mixin selector named field_30734
Lnet/minecraft/screen/ScreenHandler;field_30734:I
intermediary field_30734
Lnet/minecraft/class_1703;field_30734:I
official e
Lctb;e:I
-
field_30735
public static final int field_30735- See Also:
- Mappings:
Namespace Name Mixin selector named field_30735
Lnet/minecraft/screen/ScreenHandler;field_30735:I
intermediary field_30735
Lnet/minecraft/class_1703;field_30735:I
official f
Lctb;f:I
-
field_30736
public static final int field_30736- See Also:
- Mappings:
Namespace Name Mixin selector named field_30736
Lnet/minecraft/screen/ScreenHandler;field_30736:I
intermediary field_30736
Lnet/minecraft/class_1703;field_30736:I
official g
Lctb;g:I
-
field_30737
public static final int field_30737- See Also:
- Mappings:
Namespace Name Mixin selector named field_30737
Lnet/minecraft/screen/ScreenHandler;field_30737:I
intermediary field_30737
Lnet/minecraft/class_1703;field_30737:I
official h
Lctb;h:I
-
field_52557
public static final int field_52557- See Also:
- Mappings:
Namespace Name Mixin selector named field_52557
Lnet/minecraft/screen/ScreenHandler;field_52557:I
intermediary field_52557
Lnet/minecraft/class_1703;field_52557:I
official i
Lctb;i:I
-
field_52558
public static final int field_52558- See Also:
- Mappings:
Namespace Name Mixin selector named field_52558
Lnet/minecraft/screen/ScreenHandler;field_52558:I
intermediary field_52558
Lnet/minecraft/class_1703;field_52558:I
official j
Lctb;j:I
-
trackedStacks
A list of item stacks that is used for tracking changes insendContentUpdates()
.- Mappings:
Namespace Name Mixin selector named trackedStacks
Lnet/minecraft/screen/ScreenHandler;trackedStacks:Lnet/minecraft/util/collection/DefaultedList;
intermediary field_7764
Lnet/minecraft/class_1703;field_7764:Lnet/minecraft/class_2371;
official n
Lctb;n:Ljz;
-
slots
- Mappings:
Namespace Name Mixin selector named slots
Lnet/minecraft/screen/ScreenHandler;slots:Lnet/minecraft/util/collection/DefaultedList;
intermediary field_7761
Lnet/minecraft/class_1703;field_7761:Lnet/minecraft/class_2371;
official k
Lctb;k:Ljz;
-
properties
- Mappings:
Namespace Name Mixin selector named properties
Lnet/minecraft/screen/ScreenHandler;properties:Ljava/util/List;
intermediary field_17285
Lnet/minecraft/class_1703;field_17285:Ljava/util/List;
official o
Lctb;o:Ljava/util/List;
-
cursorStack
- Mappings:
Namespace Name Mixin selector named cursorStack
Lnet/minecraft/screen/ScreenHandler;cursorStack:Lnet/minecraft/item/ItemStack;
intermediary field_29205
Lnet/minecraft/class_1703;field_29205:Lnet/minecraft/class_1799;
official p
Lctb;p:Lcxo;
-
previousTrackedStacks
- Mappings:
Namespace Name Mixin selector named previousTrackedStacks
Lnet/minecraft/screen/ScreenHandler;previousTrackedStacks:Lnet/minecraft/util/collection/DefaultedList;
intermediary field_29206
Lnet/minecraft/class_1703;field_29206:Lnet/minecraft/class_2371;
official q
Lctb;q:Ljz;
-
trackedPropertyValues
- Mappings:
Namespace Name Mixin selector named trackedPropertyValues
Lnet/minecraft/screen/ScreenHandler;trackedPropertyValues:Lit/unimi/dsi/fastutil/ints/IntList;
intermediary field_29559
Lnet/minecraft/class_1703;field_29559:Lit/unimi/dsi/fastutil/ints/IntList;
official r
Lctb;r:Lit/unimi/dsi/fastutil/ints/IntList;
-
previousCursorStack
- Mappings:
Namespace Name Mixin selector named previousCursorStack
Lnet/minecraft/screen/ScreenHandler;previousCursorStack:Lnet/minecraft/item/ItemStack;
intermediary field_29207
Lnet/minecraft/class_1703;field_29207:Lnet/minecraft/class_1799;
official s
Lctb;s:Lcxo;
-
revision
private int revision- Mappings:
Namespace Name Mixin selector named revision
Lnet/minecraft/screen/ScreenHandler;revision:I
intermediary field_34024
Lnet/minecraft/class_1703;field_34024:I
official t
Lctb;t:I
-
type
- Mappings:
Namespace Name Mixin selector named type
Lnet/minecraft/screen/ScreenHandler;type:Lnet/minecraft/screen/ScreenHandlerType;
intermediary field_17493
Lnet/minecraft/class_1703;field_17493:Lnet/minecraft/class_3917;
official u
Lctb;u:Lcuk;
-
syncId
public final int syncId- Mappings:
Namespace Name Mixin selector named syncId
Lnet/minecraft/screen/ScreenHandler;syncId:I
intermediary field_7763
Lnet/minecraft/class_1703;field_7763:I
official l
Lctb;l:I
-
quickCraftButton
private int quickCraftButton- Mappings:
Namespace Name Mixin selector named quickCraftButton
Lnet/minecraft/screen/ScreenHandler;quickCraftButton:I
intermediary field_7762
Lnet/minecraft/class_1703;field_7762:I
official v
Lctb;v:I
-
quickCraftStage
private int quickCraftStage- Mappings:
Namespace Name Mixin selector named quickCraftStage
Lnet/minecraft/screen/ScreenHandler;quickCraftStage:I
intermediary field_7759
Lnet/minecraft/class_1703;field_7759:I
official w
Lctb;w:I
-
quickCraftSlots
- Mappings:
Namespace Name Mixin selector named quickCraftSlots
Lnet/minecraft/screen/ScreenHandler;quickCraftSlots:Ljava/util/Set;
intermediary field_7757
Lnet/minecraft/class_1703;field_7757:Ljava/util/Set;
official x
Lctb;x:Ljava/util/Set;
-
listeners
- Mappings:
Namespace Name Mixin selector named listeners
Lnet/minecraft/screen/ScreenHandler;listeners:Ljava/util/List;
intermediary field_7765
Lnet/minecraft/class_1703;field_7765:Ljava/util/List;
official y
Lctb;y:Ljava/util/List;
-
syncHandler
- Mappings:
Namespace Name Mixin selector named syncHandler
Lnet/minecraft/screen/ScreenHandler;syncHandler:Lnet/minecraft/screen/ScreenHandlerSyncHandler;
intermediary field_29208
Lnet/minecraft/class_1703;field_29208:Lnet/minecraft/class_5916;
official z
Lctb;z:Lctq;
-
disableSync
private boolean disableSync- Mappings:
Namespace Name Mixin selector named disableSync
Lnet/minecraft/screen/ScreenHandler;disableSync:Z
intermediary field_29209
Lnet/minecraft/class_1703;field_29209:Z
official A
Lctb;A:Z
-
-
Constructor Details
-
ScreenHandler
- Mappings:
Namespace Name Mixin selector named <init>
Lnet/minecraft/screen/ScreenHandler;<init>(Lnet/minecraft/screen/ScreenHandlerType;I)V
intermediary <init>
Lnet/minecraft/class_1703;<init>(Lnet/minecraft/class_3917;I)V
official <init>
Lctb;<init>(Lcuk;I)V
-
-
Method Details
-
addPlayerHotbarSlots
- Mappings:
Namespace Name Mixin selector named addPlayerHotbarSlots
Lnet/minecraft/screen/ScreenHandler;addPlayerHotbarSlots(Lnet/minecraft/inventory/Inventory;II)V
intermediary method_61622
Lnet/minecraft/class_1703;method_61622(Lnet/minecraft/class_1263;II)V
official a
Lctb;a(Lbtb;II)V
-
addPlayerInventorySlots
- Mappings:
Namespace Name Mixin selector named addPlayerInventorySlots
Lnet/minecraft/screen/ScreenHandler;addPlayerInventorySlots(Lnet/minecraft/inventory/Inventory;II)V
intermediary method_61623
Lnet/minecraft/class_1703;method_61623(Lnet/minecraft/class_1263;II)V
official b
Lctb;b(Lbtb;II)V
-
addPlayerSlots
Adds the slots for the player inventory and hotbar. Subclasses should call this within the constructor.- Mappings:
Namespace Name Mixin selector named addPlayerSlots
Lnet/minecraft/screen/ScreenHandler;addPlayerSlots(Lnet/minecraft/inventory/Inventory;II)V
intermediary method_61624
Lnet/minecraft/class_1703;method_61624(Lnet/minecraft/class_1263;II)V
official c
Lctb;c(Lbtb;II)V
-
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 named canUse
Lnet/minecraft/screen/ScreenHandler;canUse(Lnet/minecraft/screen/ScreenHandlerContext;Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/block/Block;)Z
intermediary method_17695
Lnet/minecraft/class_1703;method_17695(Lnet/minecraft/class_3914;Lnet/minecraft/class_1657;Lnet/minecraft/class_2248;)Z
official a
Lctb;a(Lcto;Lcpw;Ldkl;)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 named getType
Lnet/minecraft/screen/ScreenHandler;getType()Lnet/minecraft/screen/ScreenHandlerType;
intermediary method_17358
Lnet/minecraft/class_1703;method_17358()Lnet/minecraft/class_3917;
official a
Lctb;a()Lcuk;
-
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 named checkSize
Lnet/minecraft/screen/ScreenHandler;checkSize(Lnet/minecraft/inventory/Inventory;I)V
intermediary method_17359
Lnet/minecraft/class_1703;method_17359(Lnet/minecraft/class_1263;I)V
official a
Lctb;a(Lbtb;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 named checkDataCount
Lnet/minecraft/screen/ScreenHandler;checkDataCount(Lnet/minecraft/screen/PropertyDelegate;I)V
intermediary method_17361
Lnet/minecraft/class_1703;method_17361(Lnet/minecraft/class_3913;I)V
official a
Lctb;a(Lctn;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 named isValid
Lnet/minecraft/screen/ScreenHandler;isValid(I)Z
intermediary method_40442
Lnet/minecraft/class_1703;method_40442(I)Z
official a
Lctb;a(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 named addSlot
Lnet/minecraft/screen/ScreenHandler;addSlot(Lnet/minecraft/screen/slot/Slot;)Lnet/minecraft/screen/slot/Slot;
intermediary method_7621
Lnet/minecraft/class_1703;method_7621(Lnet/minecraft/class_1735;)Lnet/minecraft/class_1735;
official a
Lctb;a(Lcuy;)Lcuy;
-
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 named addProperty
Lnet/minecraft/screen/ScreenHandler;addProperty(Lnet/minecraft/screen/Property;)Lnet/minecraft/screen/Property;
intermediary method_17362
Lnet/minecraft/class_1703;method_17362(Lnet/minecraft/class_3915;)Lnet/minecraft/class_3915;
official a
Lctb;a(Lctv;)Lctv;
-
addProperties
Adds properties ofpropertyDelegate
to this screen handler. This must be called inside the subclass's constructor.- See Also:
- Mappings:
Namespace Name Mixin selector named addProperties
Lnet/minecraft/screen/ScreenHandler;addProperties(Lnet/minecraft/screen/PropertyDelegate;)V
intermediary method_17360
Lnet/minecraft/class_1703;method_17360(Lnet/minecraft/class_3913;)V
official a
Lctb;a(Lctn;)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 named addListener
Lnet/minecraft/screen/ScreenHandler;addListener(Lnet/minecraft/screen/ScreenHandlerListener;)V
intermediary method_7596
Lnet/minecraft/class_1703;method_7596(Lnet/minecraft/class_1712;)V
official a
Lctb;a(Lctp;)V
-
updateSyncHandler
- Mappings:
Namespace Name Mixin selector named updateSyncHandler
Lnet/minecraft/screen/ScreenHandler;updateSyncHandler(Lnet/minecraft/screen/ScreenHandlerSyncHandler;)V
intermediary method_34248
Lnet/minecraft/class_1703;method_34248(Lnet/minecraft/class_5916;)V
official a
Lctb;a(Lctq;)V
-
syncState
public void syncState()- Mappings:
Namespace Name Mixin selector named syncState
Lnet/minecraft/screen/ScreenHandler;syncState()V
intermediary method_34252
Lnet/minecraft/class_1703;method_34252()V
official b
Lctb;b()V
-
removeListener
Removeslistener
from this screen handler.- Mappings:
Namespace Name Mixin selector named removeListener
Lnet/minecraft/screen/ScreenHandler;removeListener(Lnet/minecraft/screen/ScreenHandlerListener;)V
intermediary method_7603
Lnet/minecraft/class_1703;method_7603(Lnet/minecraft/class_1712;)V
official b
Lctb;b(Lctp;)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 named getStacks
Lnet/minecraft/screen/ScreenHandler;getStacks()Lnet/minecraft/util/collection/DefaultedList;
intermediary method_7602
Lnet/minecraft/class_1703;method_7602()Lnet/minecraft/class_2371;
official c
Lctb;c()Ljz;
-
sendContentUpdates
public void sendContentUpdates()Sends updates to listeners if any properties or slot stacks have changed.- Mappings:
Namespace Name Mixin selector named sendContentUpdates
Lnet/minecraft/screen/ScreenHandler;sendContentUpdates()V
intermediary method_7623
Lnet/minecraft/class_1703;method_7623()V
official d
Lctb;d()V
-
updateToClient
public void updateToClient()- Mappings:
Namespace Name Mixin selector named updateToClient
Lnet/minecraft/screen/ScreenHandler;updateToClient()V
intermediary method_37420
Lnet/minecraft/class_1703;method_37420()V
official e
Lctb;e()V
-
notifyPropertyUpdate
private void notifyPropertyUpdate(int index, int value) - Mappings:
Namespace Name Mixin selector named notifyPropertyUpdate
Lnet/minecraft/screen/ScreenHandler;notifyPropertyUpdate(II)V
intermediary method_37419
Lnet/minecraft/class_1703;method_37419(II)V
official d
Lctb;d(II)V
-
updateTrackedSlot
- Mappings:
Namespace Name Mixin selector named updateTrackedSlot
Lnet/minecraft/screen/ScreenHandler;updateTrackedSlot(ILnet/minecraft/item/ItemStack;Ljava/util/function/Supplier;)V
intermediary method_34246
Lnet/minecraft/class_1703;method_34246(ILnet/minecraft/class_1799;Ljava/util/function/Supplier;)V
official a
Lctb;a(ILcxo;Ljava/util/function/Supplier;)V
-
checkSlotUpdates
- Mappings:
Namespace Name Mixin selector named checkSlotUpdates
Lnet/minecraft/screen/ScreenHandler;checkSlotUpdates(ILnet/minecraft/item/ItemStack;Ljava/util/function/Supplier;)V
intermediary method_34253
Lnet/minecraft/class_1703;method_34253(ILnet/minecraft/class_1799;Ljava/util/function/Supplier;)V
official b
Lctb;b(ILcxo;Ljava/util/function/Supplier;)V
-
checkPropertyUpdates
private void checkPropertyUpdates(int id, int value) - Mappings:
Namespace Name Mixin selector named checkPropertyUpdates
Lnet/minecraft/screen/ScreenHandler;checkPropertyUpdates(II)V
intermediary method_34715
Lnet/minecraft/class_1703;method_34715(II)V
official e
Lctb;e(II)V
-
checkCursorStackUpdates
private void checkCursorStackUpdates()- Mappings:
Namespace Name Mixin selector named checkCursorStackUpdates
Lnet/minecraft/screen/ScreenHandler;checkCursorStackUpdates()V
intermediary method_34258
Lnet/minecraft/class_1703;method_34258()V
official l
Lctb;l()V
-
setPreviousTrackedSlot
- Mappings:
Namespace Name Mixin selector named setPreviousTrackedSlot
Lnet/minecraft/screen/ScreenHandler;setPreviousTrackedSlot(ILnet/minecraft/item/ItemStack;)V
intermediary method_34245
Lnet/minecraft/class_1703;method_34245(ILnet/minecraft/class_1799;)V
official a
Lctb;a(ILcxo;)V
-
setPreviousTrackedSlotMutable
- Mappings:
Namespace Name Mixin selector named setPreviousTrackedSlotMutable
Lnet/minecraft/screen/ScreenHandler;setPreviousTrackedSlotMutable(ILnet/minecraft/item/ItemStack;)V
intermediary method_37449
Lnet/minecraft/class_1703;method_37449(ILnet/minecraft/class_1799;)V
official b
Lctb;b(ILcxo;)V
-
setPreviousCursorStack
- Mappings:
Namespace Name Mixin selector named setPreviousCursorStack
Lnet/minecraft/screen/ScreenHandler;setPreviousCursorStack(Lnet/minecraft/item/ItemStack;)V
intermediary method_34250
Lnet/minecraft/class_1703;method_34250(Lnet/minecraft/class_1799;)V
official a
Lctb;a(Lcxo;)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 named onButtonClick
Lnet/minecraft/screen/ScreenHandler;onButtonClick(Lnet/minecraft/entity/player/PlayerEntity;I)Z
intermediary method_7604
Lnet/minecraft/class_1703;method_7604(Lnet/minecraft/class_1657;I)Z
official a
Lctb;a(Lcpw;I)Z
-
getSlot
Returns the slot with indexindex
.- Returns:
- the slot with index
index
- Mappings:
Namespace Name Mixin selector named getSlot
Lnet/minecraft/screen/ScreenHandler;getSlot(I)Lnet/minecraft/screen/slot/Slot;
intermediary method_7611
Lnet/minecraft/class_1703;method_7611(I)Lnet/minecraft/class_1735;
official b
Lctb;b(I)Lcuy;
-
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 named quickMove
Lnet/minecraft/screen/ScreenHandler;quickMove(Lnet/minecraft/entity/player/PlayerEntity;I)Lnet/minecraft/item/ItemStack;
intermediary method_7601
Lnet/minecraft/class_1703;method_7601(Lnet/minecraft/class_1657;I)Lnet/minecraft/class_1799;
official b
Lctb;b(Lcpw;I)Lcxo;
-
selectBundleStack
public void selectBundleStack(int slot, int selectedStack) - Mappings:
Namespace Name Mixin selector named selectBundleStack
Lnet/minecraft/screen/ScreenHandler;selectBundleStack(II)V
intermediary method_61621
Lnet/minecraft/class_1703;method_61621(II)V
official a
Lctb;a(II)V
-
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 named onSlotClick
Lnet/minecraft/screen/ScreenHandler;onSlotClick(IILnet/minecraft/screen/slot/SlotActionType;Lnet/minecraft/entity/player/PlayerEntity;)V
intermediary method_7593
Lnet/minecraft/class_1703;method_7593(IILnet/minecraft/class_1713;Lnet/minecraft/class_1657;)V
official a
Lctb;a(IILctm;Lcpw;)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 named internalOnSlotClick
Lnet/minecraft/screen/ScreenHandler;internalOnSlotClick(IILnet/minecraft/screen/slot/SlotActionType;Lnet/minecraft/entity/player/PlayerEntity;)V
intermediary method_30010
Lnet/minecraft/class_1703;method_30010(IILnet/minecraft/class_1713;Lnet/minecraft/class_1657;)V
official b
Lctb;b(IILctm;Lcpw;)V
-
handleSlotClick
private boolean handleSlotClick(PlayerEntity player, ClickType clickType, Slot slot, ItemStack stack, ItemStack cursorStack) - Mappings:
Namespace Name Mixin selector 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
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
official a
Lctb;a(Lcpw;Lctl;Lcuy;Lcxo;Lcxo;)Z
-
getCursorStackReference
Returns a reference to the cursor's stack.- Returns:
- a reference to the cursor's stack
- Mappings:
Namespace Name Mixin selector named getCursorStackReference
Lnet/minecraft/screen/ScreenHandler;getCursorStackReference()Lnet/minecraft/inventory/StackReference;
intermediary method_34259
Lnet/minecraft/class_1703;method_34259()Lnet/minecraft/class_5630;
official m
Lctb;m()Lbwx;
-
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 named canInsertIntoSlot
Lnet/minecraft/screen/ScreenHandler;canInsertIntoSlot(Lnet/minecraft/item/ItemStack;Lnet/minecraft/screen/slot/Slot;)Z
intermediary method_7613
Lnet/minecraft/class_1703;method_7613(Lnet/minecraft/class_1799;Lnet/minecraft/class_1735;)Z
official a
Lctb;a(Lcxo;Lcuy;)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 named onClosed
Lnet/minecraft/screen/ScreenHandler;onClosed(Lnet/minecraft/entity/player/PlayerEntity;)V
intermediary method_7595
Lnet/minecraft/class_1703;method_7595(Lnet/minecraft/class_1657;)V
official a
Lctb;a(Lcpw;)V
-
offerOrDropStack
- Mappings:
Namespace Name Mixin selector named offerOrDropStack
Lnet/minecraft/screen/ScreenHandler;offerOrDropStack(Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/item/ItemStack;)V
intermediary method_64192
Lnet/minecraft/class_1703;method_64192(Lnet/minecraft/class_1657;Lnet/minecraft/class_1799;)V
official a
Lctb;a(Lcpw;Lcxo;)V
-
dropInventory
- Mappings:
Namespace Name Mixin selector named dropInventory
Lnet/minecraft/screen/ScreenHandler;dropInventory(Lnet/minecraft/entity/player/PlayerEntity;Lnet/minecraft/inventory/Inventory;)V
intermediary method_7607
Lnet/minecraft/class_1703;method_7607(Lnet/minecraft/class_1657;Lnet/minecraft/class_1263;)V
official a
Lctb;a(Lcpw;Lbtb;)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 named onContentChanged
Lnet/minecraft/screen/ScreenHandler;onContentChanged(Lnet/minecraft/inventory/Inventory;)V
intermediary method_7609
Lnet/minecraft/class_1703;method_7609(Lnet/minecraft/class_1263;)V
official a
Lctb;a(Lbtb;)V
-
setStackInSlot
- Mappings:
Namespace Name Mixin selector named setStackInSlot
Lnet/minecraft/screen/ScreenHandler;setStackInSlot(IILnet/minecraft/item/ItemStack;)V
intermediary method_7619
Lnet/minecraft/class_1703;method_7619(IILnet/minecraft/class_1799;)V
official a
Lctb;a(IILcxo;)V
-
updateSlotStacks
- Mappings:
Namespace Name Mixin selector named updateSlotStacks
Lnet/minecraft/screen/ScreenHandler;updateSlotStacks(ILjava/util/List;Lnet/minecraft/item/ItemStack;)V
intermediary method_7610
Lnet/minecraft/class_1703;method_7610(ILjava/util/List;Lnet/minecraft/class_1799;)V
official a
Lctb;a(ILjava/util/List;Lcxo;)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 named setProperty
Lnet/minecraft/screen/ScreenHandler;setProperty(II)V
intermediary method_7606
Lnet/minecraft/class_1703;method_7606(II)V
official b
Lctb;b(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 named canUse
Lnet/minecraft/screen/ScreenHandler;canUse(Lnet/minecraft/entity/player/PlayerEntity;)Z
intermediary method_7597
Lnet/minecraft/class_1703;method_7597(Lnet/minecraft/class_1657;)Z
official b
Lctb;b(Lcpw;)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 named insertItem
Lnet/minecraft/screen/ScreenHandler;insertItem(Lnet/minecraft/item/ItemStack;IIZ)Z
intermediary method_7616
Lnet/minecraft/class_1703;method_7616(Lnet/minecraft/class_1799;IIZ)Z
official a
Lctb;a(Lcxo;IIZ)Z
-
unpackQuickCraftButton
public static int unpackQuickCraftButton(int quickCraftData) - Mappings:
Namespace Name Mixin selector named unpackQuickCraftButton
Lnet/minecraft/screen/ScreenHandler;unpackQuickCraftButton(I)I
intermediary method_7620
Lnet/minecraft/class_1703;method_7620(I)I
official c
Lctb;c(I)I
-
unpackQuickCraftStage
public static int unpackQuickCraftStage(int quickCraftData) - Mappings:
Namespace Name Mixin selector named unpackQuickCraftStage
Lnet/minecraft/screen/ScreenHandler;unpackQuickCraftStage(I)I
intermediary method_7594
Lnet/minecraft/class_1703;method_7594(I)I
official d
Lctb;d(I)I
-
packQuickCraftData
public static int packQuickCraftData(int quickCraftStage, int buttonId) - Mappings:
Namespace Name Mixin selector named packQuickCraftData
Lnet/minecraft/screen/ScreenHandler;packQuickCraftData(II)I
intermediary method_7591
Lnet/minecraft/class_1703;method_7591(II)I
official c
Lctb;c(II)I
-
shouldQuickCraftContinue
- Mappings:
Namespace Name Mixin selector named shouldQuickCraftContinue
Lnet/minecraft/screen/ScreenHandler;shouldQuickCraftContinue(ILnet/minecraft/entity/player/PlayerEntity;)Z
intermediary method_7600
Lnet/minecraft/class_1703;method_7600(ILnet/minecraft/class_1657;)Z
official a
Lctb;a(ILcpw;)Z
-
endQuickCraft
protected void endQuickCraft()- Mappings:
Namespace Name Mixin selector named endQuickCraft
Lnet/minecraft/screen/ScreenHandler;endQuickCraft()V
intermediary method_7605
Lnet/minecraft/class_1703;method_7605()V
official f
Lctb;f()V
-
canInsertItemIntoSlot
public static boolean canInsertItemIntoSlot(@Nullable @Nullable Slot slot, ItemStack stack, boolean allowOverflow) - Mappings:
Namespace Name Mixin selector named canInsertItemIntoSlot
Lnet/minecraft/screen/ScreenHandler;canInsertItemIntoSlot(Lnet/minecraft/screen/slot/Slot;Lnet/minecraft/item/ItemStack;Z)Z
intermediary method_7592
Lnet/minecraft/class_1703;method_7592(Lnet/minecraft/class_1735;Lnet/minecraft/class_1799;Z)Z
official a
Lctb;a(Lcuy;Lcxo;Z)Z
-
calculateStackSize
- Mappings:
Namespace Name Mixin selector named calculateStackSize
Lnet/minecraft/screen/ScreenHandler;calculateStackSize(Ljava/util/Set;ILnet/minecraft/item/ItemStack;)I
intermediary method_7617
Lnet/minecraft/class_1703;method_7617(Ljava/util/Set;ILnet/minecraft/class_1799;)I
official a
Lctb;a(Ljava/util/Set;ILcxo;)I
-
canInsertIntoSlot
- Mappings:
Namespace Name Mixin selector named canInsertIntoSlot
Lnet/minecraft/screen/ScreenHandler;canInsertIntoSlot(Lnet/minecraft/screen/slot/Slot;)Z
intermediary method_7615
Lnet/minecraft/class_1703;method_7615(Lnet/minecraft/class_1735;)Z
official b
Lctb;b(Lcuy;)Z
-
calculateComparatorOutput
- Mappings:
Namespace Name Mixin selector named calculateComparatorOutput
Lnet/minecraft/screen/ScreenHandler;calculateComparatorOutput(Lnet/minecraft/block/entity/BlockEntity;)I
intermediary method_7608
Lnet/minecraft/class_1703;method_7608(Lnet/minecraft/class_2586;)I
official a
Lctb;a(Lduw;)I
-
calculateComparatorOutput
- Mappings:
Namespace Name Mixin selector named calculateComparatorOutput
Lnet/minecraft/screen/ScreenHandler;calculateComparatorOutput(Lnet/minecraft/inventory/Inventory;)I
intermediary method_7618
Lnet/minecraft/class_1703;method_7618(Lnet/minecraft/class_1263;)I
official b
Lctb;b(Lbtb;)I
-
setCursorStack
- Mappings:
Namespace Name Mixin selector named setCursorStack
Lnet/minecraft/screen/ScreenHandler;setCursorStack(Lnet/minecraft/item/ItemStack;)V
intermediary method_34254
Lnet/minecraft/class_1703;method_34254(Lnet/minecraft/class_1799;)V
official b
Lctb;b(Lcxo;)V
-
getCursorStack
- Mappings:
Namespace Name Mixin selector named getCursorStack
Lnet/minecraft/screen/ScreenHandler;getCursorStack()Lnet/minecraft/item/ItemStack;
intermediary method_34255
Lnet/minecraft/class_1703;method_34255()Lnet/minecraft/class_1799;
official g
Lctb;g()Lcxo;
-
disableSyncing
public void disableSyncing()- Mappings:
Namespace Name Mixin selector named disableSyncing
Lnet/minecraft/screen/ScreenHandler;disableSyncing()V
intermediary method_34256
Lnet/minecraft/class_1703;method_34256()V
official h
Lctb;h()V
-
enableSyncing
public void enableSyncing()- Mappings:
Namespace Name Mixin selector named enableSyncing
Lnet/minecraft/screen/ScreenHandler;enableSyncing()V
intermediary method_34257
Lnet/minecraft/class_1703;method_34257()V
official i
Lctb;i()V
-
getSlotIndex
- Mappings:
Namespace Name Mixin selector named getSlotIndex
Lnet/minecraft/screen/ScreenHandler;getSlotIndex(Lnet/minecraft/inventory/Inventory;I)Ljava/util/OptionalInt;
intermediary method_37418
Lnet/minecraft/class_1703;method_37418(Lnet/minecraft/class_1263;I)Ljava/util/OptionalInt;
official b
Lctb;b(Lbtb;I)Ljava/util/OptionalInt;
-
getRevision
public int getRevision()- Mappings:
Namespace Name Mixin selector named getRevision
Lnet/minecraft/screen/ScreenHandler;getRevision()I
intermediary method_37421
Lnet/minecraft/class_1703;method_37421()I
official j
Lctb;j()I
-
nextRevision
public int nextRevision()- Mappings:
Namespace Name Mixin selector named nextRevision
Lnet/minecraft/screen/ScreenHandler;nextRevision()I
intermediary method_37422
Lnet/minecraft/class_1703;method_37422()I
official k
Lctb;k()I
-