Class ImmersiveHitboxes
java.lang.Object
com.hammy275.immersivemc.client.immersive.ImmersiveHitboxes
- All Implemented Interfaces:
Immersive<ImmersiveHitboxesInfo, ImmersiveHitboxesInfo.RenderState, NullStorage>, PlayerAttachmentImmersive<ImmersiveHitboxesInfo, ImmersiveHitboxesInfo.RenderState, NullStorage>
public class ImmersiveHitboxes
extends Object
implements PlayerAttachmentImmersive<ImmersiveHitboxesInfo, ImmersiveHitboxesInfo.RenderState, NullStorage>
Used for hitboxes attached to the player
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbuildInfo(net.minecraft.client.player.AbstractClientPlayer player) Constructs a new PlayerAttachmentImmersiveInfo based on the provided owning player.booleancanOpenBagFromInteractModule(net.minecraft.world.InteractionHand bagHand) @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(ImmersiveHitboxesInfo info, ImmersiveHitboxesInfo.RenderState renderState, float partialTicks) Extract render state from the info into the provided render state object.@Nullable BoundingBoxGet the collection of ImmersiveInfos currently active for this Immersive.inthandleHitboxInteract(ImmersiveHitboxesInfo 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.voidbooleanisInputHitbox(ImmersiveHitboxesInfo info, int hitboxIndex) voidprocessStorageFromNetwork(ImmersiveHitboxesInfo info, NullStorage storage) Process the storage from the server for this Immersive.voidrender(ImmersiveHitboxesInfo.RenderState renderState, com.mojang.blaze3d.vertex.PoseStack stack, ImmersiveRenderHelpers helpers, float partialTick) Render the provided render state.booleanshouldRender(ImmersiveHitboxesInfo.RenderState renderState) Whether the provided render state should render in the world.voidtick(ImmersiveHitboxesInfo info) This method is called once per game tick.Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface Immersive
globalTickMethods inherited from interface PlayerAttachmentImmersive
getLocalPlayerInfo
-
Field Details
-
trackedObjects
-
-
Constructor Details
-
ImmersiveHitboxes
public ImmersiveHitboxes()
-
-
Method Details
-
buildInfo
Description copied from interface:PlayerAttachmentImmersiveConstructs a new PlayerAttachmentImmersiveInfo based on the provided owning player. It's best to calculate initial hitboxes, etc. in this method to make the Immersive is available for interaction as soon as possible.This method is only called if @link ImmersiveHandler#clientAuthoritative()} returns false for the
PlayerAttachmentImmersiveHandlerreturned byPlayerAttachmentImmersive.getHandler().- Specified by:
buildInfoin interfacePlayerAttachmentImmersive<ImmersiveHitboxesInfo, ImmersiveHitboxesInfo.RenderState, NullStorage>- Parameters:
player- The player who owns/controls this Immersive. This may not necessarily be the same player as the local player!- Returns:
- An instance of an ImmersiveInfo implementation with the same position as provided.
-
getTrackedObjects
Description copied from interface:ImmersiveGet 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.- Specified by:
getTrackedObjectsin interfaceImmersive<ImmersiveHitboxesInfo, ImmersiveHitboxesInfo.RenderState, NullStorage>- Returns:
- The collection of all ImmersiveInfos tied to this Immersive.
-
handleHitboxInteract
public int handleHitboxInteract(ImmersiveHitboxesInfo info, net.minecraft.client.player.LocalPlayer player, List<Integer> hitboxIndices, net.minecraft.world.InteractionHand hand, boolean modifierPressed) Description copied from interface:ImmersiveThe 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.- Specified by:
handleHitboxInteractin interfaceImmersive<ImmersiveHitboxesInfo, ImmersiveHitboxesInfo.RenderState, NullStorage>- 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
Description copied from interface:ImmersiveThis method is called once per game tick. This is where you should, for example, recalculate hitboxes if needed.- Specified by:
tickin interfaceImmersive<ImmersiveHitboxesInfo, ImmersiveHitboxesInfo.RenderState, NullStorage>- Parameters:
info- The info being ticked.
-
getDragHitbox
- Specified by:
getDragHitboxin interfaceImmersive<ImmersiveHitboxesInfo, ImmersiveHitboxesInfo.RenderState, NullStorage>- 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
Immersive.isInputHitbox(ImmersiveInfo, int)returns true.
-
isInputHitbox
- Specified by:
isInputHitboxin interfaceImmersive<ImmersiveHitboxesInfo, ImmersiveHitboxesInfo.RenderState, NullStorage>- 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
Description copied from interface:ImmersiveWhether 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.- Specified by:
shouldRenderin interfaceImmersive<ImmersiveHitboxesInfo, ImmersiveHitboxesInfo.RenderState, NullStorage>- Parameters:
renderState- The render state to check.- Returns:
- Whether the provided render state should render to the world, which includes calling
Immersive.render(ImmersiveRenderState, PoseStack, ImmersiveRenderHelpers, float).
-
render
public void render(ImmersiveHitboxesInfo.RenderState renderState, com.mojang.blaze3d.vertex.PoseStack stack, ImmersiveRenderHelpers helpers, float partialTick) Description copied from interface:ImmersiveRender the provided render state.- Specified by:
renderin interfaceImmersive<ImmersiveHitboxesInfo, ImmersiveHitboxesInfo.RenderState, NullStorage>- 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
- Specified by:
getHandlerin interfaceImmersive<ImmersiveHitboxesInfo, ImmersiveHitboxesInfo.RenderState, NullStorage>- Specified by:
getHandlerin interfacePlayerAttachmentImmersive<ImmersiveHitboxesInfo, ImmersiveHitboxesInfo.RenderState, NullStorage>- Returns:
- The
PlayerAttachmentImmersiveHandlerthis Immersive uses.
-
configScreenInfo
Description copied from interface:ImmersiveThe 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.
- Specified by:
configScreenInfoin interfaceImmersive<ImmersiveHitboxesInfo, ImmersiveHitboxesInfo.RenderState, NullStorage>- 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
Description copied from interface:ImmersiveProcess the storage from the server for this Immersive. Not called for Immersives that return true forImmersive.getHandler()'sImmersiveHandler.clientAuthoritative().- Specified by:
processStorageFromNetworkin interfaceImmersive<ImmersiveHitboxesInfo, ImmersiveHitboxesInfo.RenderState, NullStorage>- Parameters:
info- The info with storage being processed.storage- The storage to be processed.
-
createRenderState
Description copied from interface:ImmersiveCreates a new render state not populated with any rendering-related details.- Specified by:
createRenderStatein interfaceImmersive<ImmersiveHitboxesInfo, ImmersiveHitboxesInfo.RenderState, NullStorage>- Returns:
- Created render state, as described.
-
extractRenderState
public void extractRenderState(ImmersiveHitboxesInfo info, ImmersiveHitboxesInfo.RenderState renderState, float partialTicks) Description copied from interface:ImmersiveExtract 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.
- Specified by:
extractRenderStatein interfaceImmersive<ImmersiveHitboxesInfo, ImmersiveHitboxesInfo.RenderState, NullStorage>- 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.
-
initImmersiveIfNeeded
public void initImmersiveIfNeeded() -
canOpenBagFromInteractModule
public boolean canOpenBagFromInteractModule(net.minecraft.world.InteractionHand bagHand)
-