Interface Immersive<I extends ImmersiveInfo, R extends ImmersiveRenderState, S extends NetworkStorage>
- Type Parameters:
I- TheImmersiveInfoimplementation this Immersive uses.R- The render state implementation this Immersive uses. SeeextractRenderState(I, R, float).S- The type of storage to use for sending Immersive data over the network.
- All Known Subinterfaces:
BlockBasedImmersive<I,R, S>, BuiltBlockBasedImmersive<E, ER, S>, PlayerAttachmentImmersive<I, R, S>
- All Known Implementing Classes:
AbstractBlockBasedImmersive, AbstractDragImmersive, BuiltBlockBasedImmersiveImpl, ImmersiveBag, ImmersiveBeacon, ImmersiveChest, ImmersiveDoor, ImmersiveHitboxes, ImmersiveLectern, ImmersiveLever, ImmersiveRepeater, ImmersiveTrapdoor
public sealed interface Immersive<I extends ImmersiveInfo, R extends ImmersiveRenderState, S extends NetworkStorage>
permits BlockBasedImmersive<I,R,S>, PlayerAttachmentImmersive<I,R,S>
Represents the client-side implementation of an Immersive. One should implement this to build a client-side
representation one of the permitted sub-interfaces of this interface to create an interface.
- See Also:
-
Method Summary
Modifier and TypeMethodDescription@Nullable ImmersiveConfigScreenInfoThe info needed to build a config screen button for this Immersive.Creates a new render state not populated with any rendering-related details.voidextractRenderState(I info, R renderState, float partialTicks) Extract render state from the info into the provided render state object.@Nullable BoundingBoxgetDragHitbox(I info) Get the collection of ImmersiveInfos currently active for this Immersive.default voidThis is the same astick(ImmersiveInfo), but called once per tick, instead of called once per tick per info.inthandleHitboxInteract(I info, net.minecraft.client.player.LocalPlayer player, List<Integer> hitboxIndices, net.minecraft.world.InteractionHand hand, boolean modifierPressed) The method called when a player interacts with a hitbox.booleanisInputHitbox(I info, int hitboxIndex) voidprocessStorageFromNetwork(I info, S storage) Process the storage from the server for this Immersive.voidrender(R renderState, com.mojang.blaze3d.vertex.PoseStack stack, ImmersiveRenderHelpers helpers, float partialTick) Render the provided render state.booleanshouldRender(R renderState) Whether the provided render state should render in the world.voidThis method is called once per game tick.
-
Method Details
-
getTrackedObjects
Collection<I> getTrackedObjects()Get the collection of ImmersiveInfos currently active for this Immersive. The contents of the list may be modified by ImmersiveMC with the intention of updating the actual set of active ImmersiveInfos.
For example, if this Immersive represented a furnace, and the furnace was broken, ImmersiveMC would remove the ImmersiveInfo from the collection returned by this function to indicate that this Immersive should no longer handle the block, as it is no longer a furnace. As another example, if this Immersive represented a furnace, and a player placed a furnace, ImmersiveMC would add the result ofBlockBasedImmersive.buildInfo(BlockPos, Level)to the collection returned by this function.
In short, you should return the actual collection of ImmersiveInfos used by this Immersive instead of a copy of it.- Returns:
- The collection of all ImmersiveInfos tied to this Immersive.
-
handleHitboxInteract
int handleHitboxInteract(I info, net.minecraft.client.player.LocalPlayer player, List<Integer> hitboxIndices, net.minecraft.world.InteractionHand hand, boolean modifierPressed) The method called when a player interacts with a hitbox.
If multiple hitboxes are being interacted with at the same time, only the first hitbox in iteration order fromImmersiveInfo.getAllHitboxes()that is being interacted with will have this function called.- Parameters:
info- The info containing the hitbox that was interacted with.player- The player that interacted with the hitbox. This player is always the player currently controlling the game window.hitboxIndices- The indices intoImmersiveInfo.getAllHitboxes()that were interacted with. The list is guaranteed to contain at least one element and all elements are not null.hand- The hand used for interaction.modifierPressed- Whether the modifier key (usually the button mapped to breaking blocks) was held for the interaction.- Returns:
- A number representing the number of ticks of cooldown to apply before the player can interact with any Immersive again, or a negative number to denote no actual interaction has happened, such as obtaining items from an output slot of an Immersive when the output slot has no items.
-
tick
This method is called once per game tick. This is where you should, for example, recalculate hitboxes if needed.- Parameters:
info- The info being ticked.
-
getDragHitbox
- Returns:
- The hitbox that determines whether dragging between multiple slots should continue or not. Can return
null here to not allow dragging. If non-null, the hitbox should contain all hitboxes where
isInputHitbox(ImmersiveInfo, int)returns true.
-
isInputHitbox
- Parameters:
info- The info being checked with.hitboxIndex- The hitbox index being checked.- Returns:
- Whether the provided hitbox index is an input, such as for inputting items.
-
shouldRender
Whether the provided render state should render in the world. It's good to return false here if this Immersive does not have its data ready for rendering.- Parameters:
renderState- The render state to check.- Returns:
- Whether the provided render state should render to the world, which includes calling
render(ImmersiveRenderState, PoseStack, ImmersiveRenderHelpers, float).
-
render
void render(R renderState, com.mojang.blaze3d.vertex.PoseStack stack, ImmersiveRenderHelpers helpers, float partialTick) Render the provided render state.- Parameters:
renderState- The render state to render.stack- The pose stack being rendered with.helpers- Some helper functions for rendering.partialTick- The fraction of time between the last tick and the current tick.
-
getHandler
ImmersiveHandler getHandler()- Returns:
- The
ImmersiveHandlerthis Immersive uses.
-
configScreenInfo
The info needed to build a config screen button for this Immersive. If this method returns null, ImmersiveMC will not add a setting for this Immersive to its in-game configuration. Reasons to possibly return null from this method include, but are not limited to:- This Immersive cannot be controlled via a config.
- Another mod already handles configuring this Immersive.
- Returns:
- An ImmersiveConfigScreenInfo instance used for ImmersiveMC to add this Immersive to its in-game configuration screens, or null if ImmersiveMC should not do so.
-
processStorageFromNetwork
Process the storage from the server for this Immersive. Not called for Immersives that return true forgetHandler()'sImmersiveHandler.clientAuthoritative().- Parameters:
info- The info with storage being processed.storage- The storage to be processed.
-
createRenderState
R createRenderState()Creates a new render state not populated with any rendering-related details.- Returns:
- Created render state, as described.
-
extractRenderState
Extract render state from the info into the provided render state object.The extracted render state must be independent of the info it comes from such that mutations to the info do not affect the render state. For example, if the info contains a list of hitboxes, a modification to that list must NOT modify the list of hitboxes stored in the render state.
- Parameters:
info- Info to extract render state from.renderState- Render state to populate from the info. Note that the API does NOT cover the state of this object when this function is called. It only defines that this should be fully populated from the provided info for rendering. As such, it's recommended to set the values for all fields in this object based on the provided info every time this method is called.partialTicks- The fraction of time between the last tick and the current tick.
-
globalTick
default void globalTick()This is the same astick(ImmersiveInfo), but called once per tick, instead of called once per tick per info.
-