Class StandardPhysicsProvider

java.lang.Object
com.hypixel.hytale.server.core.modules.projectile.config.StandardPhysicsProvider
All Implemented Interfaces:
Component<EntityStore>, IBlockCollisionConsumer, Cloneable

public class StandardPhysicsProvider extends Object implements IBlockCollisionConsumer, Component<EntityStore>
Mixin class to provide a simple physics behavior with gravity and collisions
  • Field Details

    • WATER_DETECTION_EXTREMA_COUNT

      public static final int WATER_DETECTION_EXTREMA_COUNT
      Number of extrema to detect swimming state change
      See Also:
    • MIN_BOUNCE_EPSILON

      public static final double MIN_BOUNCE_EPSILON
      See Also:
    • MIN_BOUNCE_EPSILON_SQUARED

      public static final double MIN_BOUNCE_EPSILON_SQUARED
      See Also:
  • Constructor Details

    • StandardPhysicsProvider

      public StandardPhysicsProvider(@Nonnull BoundingBox boundingBox, @Nullable UUID creatorUuid, @Nonnull StandardPhysicsConfig physicsConfig, @Nonnull org.joml.Vector3d initialForce, boolean predicted)
  • Method Details

    • getComponentType

      @Nonnull public static ComponentType<EntityStore, StandardPhysicsProvider> getComponentType()
      Returns:
      the component type for the StandardPhysicsProvider component.
    • onCollision

      @Nonnull public IBlockCollisionConsumer.Result onCollision(int blockX, int blockY, int blockZ, @Nonnull org.joml.Vector3d direction, @Nonnull BlockContactData contactData, @Nonnull BlockData blockData, @Nonnull Box collider)
      Description copied from interface: IBlockCollisionConsumer
      Process a collision between a block and the collider.

      collisionData and blockData are only valid until this call returns.

      Specified by:
      onCollision in interface IBlockCollisionConsumer
      Parameters:
      blockX - X position of block
      blockY - Y position of block
      blockZ - Z position of block
      direction - Direction collider is moving
      contactData - Information about collision contact
      blockData - Information about block
      collider - Sub hitbox collision happens with
      Returns:
      Return IBlockCollisionConsumer.Result.STOP or IBlockCollisionConsumer.Result.STOP_NOW to stop processing after this block or IBlockCollisionConsumer.Result.CONTINUE to continue
    • probeCollisionDamage

      @Nonnull public IBlockCollisionConsumer.Result probeCollisionDamage(int blockX, int blockY, int blockZ, org.joml.Vector3d direction, BlockContactData collisionData, BlockData blockData)
      Description copied from interface: IBlockCollisionConsumer
      Test if the damage caused by block should stop processing and stop movement of collider.

      collisionData and blockData are only valid until this call returns. The actual damage should be processed using IBlockCollisionConsumer.onCollisionDamage(int, int, int, Vector3d, BlockContactData, BlockData).

      Specified by:
      probeCollisionDamage in interface IBlockCollisionConsumer
      Parameters:
      blockX - X position of block
      blockY - Y position of block
      blockZ - Z position of block
      direction - Direction collider is moving
      collisionData - Information about collision contact
      blockData - Information about block
      Returns:
      Return IBlockCollisionConsumer.Result.STOP or IBlockCollisionConsumer.Result.STOP_NOW to stop processing after this block or IBlockCollisionConsumer.Result.CONTINUE to continue
    • onCollisionDamage

      public void onCollisionDamage(int blockX, int blockY, int blockZ, org.joml.Vector3d direction, BlockContactData collisionData, BlockData blockData)
      Description copied from interface: IBlockCollisionConsumer
      Process damage caused by block.

      collisionData and blockData are only valid until this call returns.

      Specified by:
      onCollisionDamage in interface IBlockCollisionConsumer
      Parameters:
      blockX - X position of block
      blockY - Y position of block
      blockZ - Z position of block
      direction - Direction collider is moving
      collisionData - Information about collision contact
      blockData - Information about block
    • onCollisionSliceFinished

      @Nonnull public IBlockCollisionConsumer.Result onCollisionSliceFinished()
      Description copied from interface: IBlockCollisionConsumer
      Called when BoxBlockIterator used for iteration ends a slice.
      Specified by:
      onCollisionSliceFinished in interface IBlockCollisionConsumer
      Returns:
      Return IBlockCollisionConsumer.Result.STOP or IBlockCollisionConsumer.Result.STOP_NOW to stop processing after this block or IBlockCollisionConsumer.Result.CONTINUE to continue
    • onCollisionFinished

      public void onCollisionFinished()
      Description copied from interface: IBlockCollisionConsumer
      Called when all blocks are processed.
      Specified by:
      onCollisionFinished in interface IBlockCollisionConsumer
    • finishTick

      public void finishTick(@Nonnull TransformComponent position, @Nonnull Velocity velocity)
    • rotateBody

      public void rotateBody(double dt, @Nonnull Rotation3f bodyRotation)
    • isOnGround

      public boolean isOnGround()
    • isSwimming

      public boolean isSwimming()
    • getDragCoefficient

      public double getDragCoefficient(double density)
    • getState

      @Nonnull public StandardPhysicsProvider.STATE getState()
    • setState

      public void setState(@Nonnull StandardPhysicsProvider.STATE state)
    • getPhysicsConfig

      @Nonnull public StandardPhysicsConfig getPhysicsConfig()
    • getForceProviderStandardState

      @Nonnull public ForceProviderStandardState getForceProviderStandardState()
    • getRestingSupport

      @Nonnull public RestingSupport getRestingSupport()
    • setWorld

      public void setWorld(@Nullable World world)
    • getPosition

      @Nonnull public org.joml.Vector3d getPosition()
    • getVelocity

      @Nonnull public org.joml.Vector3d getVelocity()
    • getMovement

      @Nonnull public org.joml.Vector3d getMovement()
    • getNextMovement

      @Nonnull public org.joml.Vector3d getNextMovement()
    • getForceProviderEntity

      @Nonnull public ForceProviderEntity getForceProviderEntity()
    • getForceProviders

      @Nonnull public ForceProvider[] getForceProviders()
    • getStateUpdater

      @Nonnull public PhysicsBodyStateUpdater getStateUpdater()
    • getStateBefore

      @Nonnull public PhysicsBodyState getStateBefore()
    • getStateAfter

      @Nonnull public PhysicsBodyState getStateAfter()
    • isProvidesCharacterCollisions

      public boolean isProvidesCharacterCollisions()
    • getCreatorUuid

      @Nullable public UUID getCreatorUuid()
    • getEntityCollisionProvider

      @Nonnull public EntityRefCollisionProvider getEntityCollisionProvider()
    • isBounced

      public boolean isBounced()
    • setBounced

      public void setBounced(boolean bounced)
    • getBounces

      public int getBounces()
    • incrementBounces

      public void incrementBounces()
    • bounceBlockPosition

      @Nullable public org.joml.Vector3i bounceBlockPosition()
    • clearBounced

      public void clearBounced()
    • getMoveOutOfSolidVelocity

      @Nonnull public org.joml.Vector3d getMoveOutOfSolidVelocity()
    • isMovedInsideSolid

      public boolean isMovedInsideSolid()
    • setMovedInsideSolid

      public void setMovedInsideSolid(boolean movedInsideSolid)
    • getContactBlock

      @Nullable public BlockPosition getContactBlock()
      The cell this projectile last collided with, or null if it has not struck a block. The cell keeps its value while the projectile settles, unlike bounceBlockPosition(), which is cleared once the bounce is consumed.
    • setFallingAfterBreak

      public void setFallingAfterBreak(boolean fallingAfterBreak)
    • getDisplacedMass

      public double getDisplacedMass()
    • setDisplacedMass

      public void setDisplacedMass(double displacedMass)
    • getSubSurfaceVolume

      public double getSubSurfaceVolume()
    • setSubSurfaceVolume

      public void setSubSurfaceVolume(double subSurfaceVolume)
    • getEnterFluid

      public double getEnterFluid()
    • setEnterFluid

      public void setEnterFluid(double enterFluid)
    • getLeaveFluid

      public double getLeaveFluid()
    • setLeaveFluid

      public void setLeaveFluid(double leaveFluid)
    • getCollisionStart

      public double getCollisionStart()
    • setCollisionStart

      public void setCollisionStart(double collisionStart)
    • getContactPosition

      @Nonnull public org.joml.Vector3d getContactPosition()
    • getContactNormal

      @Nonnull public org.joml.Vector3d getContactNormal()
    • isSliding

      public boolean isSliding()
    • setSliding

      public void setSliding(boolean sliding)
    • getBlockCollisionProvider

      @Nonnull public BlockCollisionProvider getBlockCollisionProvider()
    • getTriggerTracker

      @Nonnull public BlockTracker getTriggerTracker()
    • getFluidTracker

      @Nonnull public BlockTracker getFluidTracker()
    • isInFluid

      public boolean isInFluid()
    • setInFluid

      public void setInFluid(boolean inFluid)
    • getVelocityExtremaCount

      public int getVelocityExtremaCount()
    • setVelocityExtremaCount

      public void setVelocityExtremaCount(int velocityExtremaCount)
    • decrementVelocityExtremaCount

      public void decrementVelocityExtremaCount()
    • setOnGround

      public void setOnGround(boolean onGround)
    • getImpactConsumer

      @Nullable public ImpactConsumer getImpactConsumer()
    • setImpactConsumer

      public void setImpactConsumer(@Nullable ImpactConsumer impactConsumer)
    • getBounceConsumer

      @Nullable public BounceConsumer getBounceConsumer()
    • setBounceConsumer

      public void setBounceConsumer(@Nullable BounceConsumer bounceConsumer)
    • clone

      @Nonnull public Component<EntityStore> clone()
      Specified by:
      clone in interface Component<EntityStore>
      Returns:
      a clone instance of the original component instance.