Class ImmersiveBag
java.lang.Object
com.hammy275.immersivemc.client.immersive.ImmersiveBag
- All Implemented Interfaces:
Immersive<BagInfo, BagInfo.RenderState, BagStorage>, PlayerAttachmentImmersive<BagInfo, BagInfo.RenderState, BagStorage>
public class ImmersiveBag
extends Object
implements PlayerAttachmentImmersive<BagInfo, BagInfo.RenderState, BagStorage>
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final BackpackBundleModelstatic final BackpackCraftingModelstatic final BackpackModelstatic final BackpackLowDetailModel -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbuildInfo(net.minecraft.client.player.AbstractClientPlayer player) Constructs a new PlayerAttachmentImmersiveInfo based on the provided owning player.static boolean@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(BagInfo info, BagInfo.RenderState renderState, float partialTicks) Extract render state from the info into the provided render state object.static intstatic net.minecraft.client.model.Modelstatic net.minecraft.resources.Identifier@Nullable BoundingBoxgetDragHitbox(BagInfo info) Get the collection of ImmersiveInfos currently active for this Immersive.inthandleHitboxInteract(BagInfo 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(BagInfo info, int hitboxIndex) voidprocessStorageFromNetwork(BagInfo info, BagStorage storage) Process the storage from the server for this Immersive.voidrender(BagInfo.RenderState renderState, com.mojang.blaze3d.vertex.PoseStack stack, ImmersiveRenderHelpers helpers, float partialTick) Render the provided render state.booleanshouldRender(BagInfo.RenderState renderState) Whether the provided render state should render in the world.voidThis 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
-
bundleModel
-
model
-
modelLowDetail
-
craftingModel
-
trackedObjects
-
-
Constructor Details
-
ImmersiveBag
public ImmersiveBag()
-
-
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<BagInfo, BagInfo.RenderState, BagStorage>- 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<BagInfo, BagInfo.RenderState, BagStorage>- Returns:
- The collection of all ImmersiveInfos tied to this Immersive.
-
handleHitboxInteract
public int handleHitboxInteract(BagInfo 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<BagInfo, BagInfo.RenderState, BagStorage>- 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<BagInfo, BagInfo.RenderState, BagStorage>- Parameters:
info- The info being ticked.
-
getDragHitbox
- Specified by:
getDragHitboxin interfaceImmersive<BagInfo, BagInfo.RenderState, BagStorage>- 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<BagInfo, BagInfo.RenderState, BagStorage>- 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<BagInfo, BagInfo.RenderState, BagStorage>- 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(BagInfo.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<BagInfo, BagInfo.RenderState, BagStorage>- 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<BagInfo, BagInfo.RenderState, BagStorage>- Specified by:
getHandlerin interfacePlayerAttachmentImmersive<BagInfo, BagInfo.RenderState, BagStorage>- 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<BagInfo, BagInfo.RenderState, BagStorage>- 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<BagInfo, BagInfo.RenderState, BagStorage>- 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<BagInfo, BagInfo.RenderState, BagStorage>- Returns:
- Created render state, as described.
-
extractRenderState
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<BagInfo, BagInfo.RenderState, BagStorage>- 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.
-
getBackpackColor
public static int getBackpackColor() -
getBackpackModel
public static net.minecraft.client.model.Model getBackpackModel() -
getBackpackTexture
public static net.minecraft.resources.Identifier getBackpackTexture() -
canGotoNextRowFromClick
-