Class AbstractDragImmersive

java.lang.Object
com.hammy275.immersivemc.client.immersive.AbstractDragImmersive
All Implemented Interfaces:
Immersive<DragImmersiveInfo,NullStorage>
Direct Known Subclasses:
ImmersiveLever, ImmersiveRepeater, ImmersiveTrapdoor

public abstract class AbstractDragImmersive extends Object implements Immersive<DragImmersiveInfo,NullStorage>
Immersive that's used for dragging between hitboxes, such as trapdoors.
  • Field Details

  • Constructor Details

    • AbstractDragImmersive

      public AbstractDragImmersive()
  • Method Details

    • hitboxDragged

      protected abstract void hitboxDragged(DragImmersiveInfo info, int controller, int oldIndex, int newIndex)
      Called whenever a drag occurs from some old hitbox index to a new one. This is an ideal spot to update DragImmersiveInfo.startingHitboxIndex if not auto-dragging.
      Parameters:
      info - Info with dragging happening.
      controller - Controller number that is dragging.
      oldIndex - Old hitbox index. This will be -1 if starting a drag from "anywhere".
      newIndex - New hitbox index. This will never be -1.
    • autoDragSettings

      protected abstract AbstractDragImmersive.AutoDragSettings autoDragSettings()
      Configures auto-dragging.
      Returns:
      Whether to use auto-dragging.
    • makeHitboxes

      protected void makeHitboxes(DragImmersiveInfo info, net.minecraft.world.level.Level level)
      Add/set hitboxes into the info instance. Called automatically on each tick if AbstractDragImmersive.AutoDragSettings.makeHitboxesEveryTick is true. Otherwise, it's not called.
      Parameters:
      info - Info to set hitboxes into.
      level - The current level.
    • getTrackedObjects

      public Collection<DragImmersiveInfo> getTrackedObjects()
      Description copied from interface: Immersive
      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 of Immersive.buildInfo(BlockPos, Level) to the collection returned by this function.
      In short, you should the actual collection of ImmersiveInfos used by this Immersive instead of a copy of it, unless you want to deal with a lot of extra work.
      Specified by:
      getTrackedObjects in interface Immersive<DragImmersiveInfo,NullStorage>
      Returns:
      The collection of all ImmersiveInfos tied to this Immersive.
    • handleHitboxInteract

      public int handleHitboxInteract(DragImmersiveInfo info, net.minecraft.client.player.LocalPlayer player, int hitboxIndex, net.minecraft.world.InteractionHand hand)
      Description copied from interface: Immersive
      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 from ImmersiveInfo.getAllHitboxes() that is being interacted with will have this function called.
      Specified by:
      handleHitboxInteract in interface Immersive<DragImmersiveInfo,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.
      hitboxIndex - The index into ImmersiveInfo.getAllHitboxes() that was interacted with.
      hand - The hand used for 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. This cooldown should be the cooldown for desktop users if Immersive.isVROnly() returns false, and it should be the cooldown for VR users if Immersive.isVROnly() returns true. ImmersiveMC will modify this cooldown time to accommodate situations, such as VR users requiring an increased cooldown time.
    • shouldRender

      public boolean shouldRender(DragImmersiveInfo info)
      Description copied from interface: Immersive
      Whether the provided info 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:
      shouldRender in interface Immersive<DragImmersiveInfo,NullStorage>
      Parameters:
      info - The info to check.
      Returns:
      Whether the provided info should render to the world, which includes calling Immersive.render(ImmersiveInfo, PoseStack, ImmersiveRenderHelpers, float).
    • render

      public void render(DragImmersiveInfo info, com.mojang.blaze3d.vertex.PoseStack stack, ImmersiveRenderHelpers helpers, float partialTicks)
      Description copied from interface: Immersive
      Render the provided info.
      Specified by:
      render in interface Immersive<DragImmersiveInfo,NullStorage>
      Parameters:
      info - The info to render.
      stack - The pose stack being rendered with.
      helpers - Some helper functions for rendering.
      partialTicks - The fraction of time between the last tick and the current tick.
    • tick

      public void tick(DragImmersiveInfo info)
      Description copied from interface: Immersive
      This method is called once per game tick. This is where you should, for example, recalculate hitboxes if needed.
      Specified by:
      tick in interface Immersive<DragImmersiveInfo,NullStorage>
      Parameters:
      info - The info being ticked.
    • shouldDisableRightClicksWhenVanillaInteractionsDisabled

      public boolean shouldDisableRightClicksWhenVanillaInteractionsDisabled(DragImmersiveInfo info)
      Description copied from interface: Immersive
      Whether normal right-click behavior for this block should be disabled when the option to disable interactions is enabled in ImmersiveMC. This should usually return true if the block opens a GUI on right-click.
      Specified by:
      shouldDisableRightClicksWhenVanillaInteractionsDisabled in interface Immersive<DragImmersiveInfo,NullStorage>
      Parameters:
      info - The info for the block that may want to disable right-clicks.
      Returns:
      Whether to skip right-click behavior for this block when the option to disable click interactions is enabled in ImmersiveMC.
    • processStorageFromNetwork

      public void processStorageFromNetwork(DragImmersiveInfo info, NullStorage storage)
      Description copied from interface: Immersive
      Process the storage from the server for this Immersive. Not called for Immersives that return true for Immersive.getHandler()'s ImmersiveHandler.clientAuthoritative().
      Specified by:
      processStorageFromNetwork in interface Immersive<DragImmersiveInfo,NullStorage>
      Parameters:
      info - The info with storage being processed.
      storage - The storage to be processed.
    • isVROnly

      public boolean isVROnly()
      Specified by:
      isVROnly in interface Immersive<DragImmersiveInfo,NullStorage>
      Returns:
      Whether this Immersive should only exist for VR users. The same value should always be returned by this method.