From 24d6b1491599f294d18018d9378029b31cd8a522 Mon Sep 17 00:00:00 2001 From: Administrator <292397633@qq.com> Date: Sat, 6 Jun 2026 22:43:20 +0800 Subject: [PATCH 1/4] 1 --- .../kr/toxicity/model/api/tracker/EntityTrackerRegistry.java | 1 + 1 file changed, 1 insertion(+) diff --git a/api/src/main/java/kr/toxicity/model/api/tracker/EntityTrackerRegistry.java b/api/src/main/java/kr/toxicity/model/api/tracker/EntityTrackerRegistry.java index f2b0ee53..3b2fa3f3 100644 --- a/api/src/main/java/kr/toxicity/model/api/tracker/EntityTrackerRegistry.java +++ b/api/src/main/java/kr/toxicity/model/api/tracker/EntityTrackerRegistry.java @@ -309,6 +309,7 @@ private void initialLoad() { } private void refreshPlayer() { + if (entity.dead()) return; entity.trackedBy() .map(p -> BetterModel.player(p.uuid()).orElse(null)) .filter(Objects::nonNull) From 23c74e57d7f7fea30e0489843ee5331168da66c2 Mon Sep 17 00:00:00 2001 From: 33444_dirge <292397643@qq.com> Date: Thu, 11 Jun 2026 13:14:48 +0800 Subject: [PATCH 2/4] fix --- .../kr/toxicity/model/api/nms/HitBox.java | 13 ++++++++++ .../model/api/tracker/EntityTracker.java | 11 +++++++++ .../model/bukkit/nms/v1_21_R3/HitBoxImpl.kt | 22 +++++++++++++---- .../model/bukkit/nms/v1_21_R4/HitBoxImpl.kt | 23 ++++++++++++++---- .../model/bukkit/nms/v1_21_R5/HitBoxImpl.kt | 23 ++++++++++++++---- .../model/bukkit/nms/v1_21_R6/HitBoxImpl.kt | 23 ++++++++++++++---- .../model/bukkit/nms/v1_21_R7/HitBoxImpl.kt | 23 ++++++++++++++---- .../model/bukkit/nms/v26_R1/HitBoxImpl.kt | 23 ++++++++++++++---- .../impl/fabric/entity/HitBoxEntityImpl.kt | 24 +++++++++++++++---- 9 files changed, 150 insertions(+), 35 deletions(-) diff --git a/api/src/main/java/kr/toxicity/model/api/nms/HitBox.java b/api/src/main/java/kr/toxicity/model/api/nms/HitBox.java index cc51b9fc..2eee37f5 100644 --- a/api/src/main/java/kr/toxicity/model/api/nms/HitBox.java +++ b/api/src/main/java/kr/toxicity/model/api/nms/HitBox.java @@ -195,6 +195,19 @@ default void listener(@NotNull Function + * This method ensures that the hitbox position follows its model even when + * it is outside the server's simulation distance. It should be called + * periodically from the entity tracker's tick system. + *

+ * + * @since 3.3.2 + */ + @ApiStatus.Internal + void syncPosition(); + /** * Returns the entity tracker registry for this hitbox's source entity. * diff --git a/api/src/main/java/kr/toxicity/model/api/tracker/EntityTracker.java b/api/src/main/java/kr/toxicity/model/api/tracker/EntityTracker.java index a2334725..90d82826 100644 --- a/api/src/main/java/kr/toxicity/model/api/tracker/EntityTracker.java +++ b/api/src/main/java/kr/toxicity/model/api/tracker/EntityTracker.java @@ -30,6 +30,7 @@ import org.jetbrains.annotations.Nullable; import org.joml.Quaternionf; +import java.util.ArrayList; import java.util.Objects; import java.util.Optional; import java.util.Set; @@ -150,6 +151,16 @@ public EntityTracker(@NotNull EntityTrackerRegistry registry, @NotNull RenderPip tick((_, _) -> { if (damageTint.getAndDecrement() == 0) update(TrackerUpdateAction.previousTint()); }); + tick((_, _) -> { + var hbs = new ArrayList<>(registry.hitBoxCache.values()); + if (!hbs.isEmpty()) { + registry.entity().platform().task(() -> { + for (var hb : hbs) { + hb.syncPosition(); + } + }); + } + }); rotation(bodyRotator::bodyRotation); preUpdateConsumer.accept(this); EventUtil.call(CreateEntityTrackerEvent.class, () -> new CreateEntityTrackerEvent(this)); diff --git a/nms/v1_21_R3/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R3/HitBoxImpl.kt b/nms/v1_21_R3/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R3/HitBoxImpl.kt index a92e7e8e..bcfd35fa 100644 --- a/nms/v1_21_R3/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R3/HitBoxImpl.kt +++ b/nms/v1_21_R3/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R3/HitBoxImpl.kt @@ -119,6 +119,18 @@ internal class HitBoxImpl( override fun relativePosition(): Vector3f = delegate.position().run { bone.hitBoxPosition(posCache).add(x.toFloat(), y.toFloat(), z.toFloat()) } + override fun syncPosition() { + yRot = bone.rotation().y + yHeadRot = yRot + yBodyRot = yRot + val pos = relativePosition() + val minusHeight = source.minY * bone.hitBoxScale() + val targetX = pos.x.toDouble() + val targetY = pos.y.toDouble() + minusHeight + val targetZ = pos.z.toDouble() + level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) + setPos(targetX, targetY, targetZ) + } override fun listener(): HitBoxListener = listener override fun listener(listener: HitBoxListener) { this.listener = listener @@ -287,11 +299,11 @@ internal class HitBoxImpl( yBodyRot = yRot val pos = relativePosition() val minusHeight = source.minY * bone.hitBoxScale() - setPos( - pos.x.toDouble(), - pos.y.toDouble() + minusHeight, - pos.z.toDouble() - ) + val targetX = pos.x.toDouble() + val targetY = pos.y.toDouble() + minusHeight + val targetZ = pos.z.toDouble() + level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) + setPos(targetX, targetY, targetZ) BlockPos.betweenClosedStream(boundingBox).forEach { level().getBlockState(it).entityInside(level(), it, delegate) } diff --git a/nms/v1_21_R4/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R4/HitBoxImpl.kt b/nms/v1_21_R4/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R4/HitBoxImpl.kt index ec779f14..28dfd0a8 100644 --- a/nms/v1_21_R4/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R4/HitBoxImpl.kt +++ b/nms/v1_21_R4/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R4/HitBoxImpl.kt @@ -37,6 +37,7 @@ import net.minecraft.world.entity.projectile.Projectile import net.minecraft.world.entity.projectile.ProjectileDeflection import net.minecraft.world.item.ItemStack import net.minecraft.world.level.BlockGetter +import net.minecraft.core.BlockPos import net.minecraft.world.phys.AABB import net.minecraft.world.phys.Vec3 import org.bukkit.Bukkit @@ -121,6 +122,18 @@ internal class HitBoxImpl( override fun relativePosition(): Vector3f = delegate.position().run { bone.hitBoxPosition(posCache).add(x.toFloat(), y.toFloat(), z.toFloat()) } + override fun syncPosition() { + yRot = bone.rotation().y + yHeadRot = yRot + yBodyRot = yRot + val pos = relativePosition() + val minusHeight = source.minY * bone.hitBoxScale() + val targetX = pos.x.toDouble() + val targetY = pos.y.toDouble() + minusHeight + val targetZ = pos.z.toDouble() + level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) + setPos(targetX, targetY, targetZ) + } override fun listener(): HitBoxListener = listener override fun listener(listener: HitBoxListener) { this.listener = listener @@ -273,11 +286,11 @@ internal class HitBoxImpl( yBodyRot = yRot val pos = relativePosition() val minusHeight = source.minY * bone.hitBoxScale() - setPos( - pos.x.toDouble(), - pos.y.toDouble() + minusHeight, - pos.z.toDouble() - ) + val targetX = pos.x.toDouble() + val targetY = pos.y.toDouble() + minusHeight + val targetZ = pos.z.toDouble() + level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) + setPos(targetX, targetY, targetZ) BlockGetter.forEachBlockIntersectedBetween( oldPosition(), position(), diff --git a/nms/v1_21_R5/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R5/HitBoxImpl.kt b/nms/v1_21_R5/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R5/HitBoxImpl.kt index 18b23b4b..f56cbea6 100644 --- a/nms/v1_21_R5/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R5/HitBoxImpl.kt +++ b/nms/v1_21_R5/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R5/HitBoxImpl.kt @@ -37,6 +37,7 @@ import net.minecraft.world.entity.projectile.Projectile import net.minecraft.world.entity.projectile.ProjectileDeflection import net.minecraft.world.item.ItemStack import net.minecraft.world.level.BlockGetter +import net.minecraft.core.BlockPos import net.minecraft.world.phys.AABB import net.minecraft.world.phys.Vec3 import org.bukkit.Bukkit @@ -121,6 +122,18 @@ internal class HitBoxImpl( override fun relativePosition(): Vector3f = delegate.position().run { bone.hitBoxPosition(posCache).add(x.toFloat(), y.toFloat(), z.toFloat()) } + override fun syncPosition() { + yRot = bone.rotation().y + yHeadRot = yRot + yBodyRot = yRot + val pos = relativePosition() + val minusHeight = source.minY * bone.hitBoxScale() + val targetX = pos.x.toDouble() + val targetY = pos.y.toDouble() + minusHeight + val targetZ = pos.z.toDouble() + level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) + setPos(targetX, targetY, targetZ) + } override fun listener(): HitBoxListener = listener override fun listener(listener: HitBoxListener) { this.listener = listener @@ -289,11 +302,11 @@ internal class HitBoxImpl( yBodyRot = yRot val pos = relativePosition() val minusHeight = source.minY * bone.hitBoxScale() - setPos( - pos.x.toDouble(), - pos.y.toDouble() + minusHeight, - pos.z.toDouble() - ) + val targetX = pos.x.toDouble() + val targetY = pos.y.toDouble() + minusHeight + val targetZ = pos.z.toDouble() + level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) + setPos(targetX, targetY, targetZ) BlockGetter.forEachBlockIntersectedBetween( oldPosition(), position(), diff --git a/nms/v1_21_R6/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R6/HitBoxImpl.kt b/nms/v1_21_R6/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R6/HitBoxImpl.kt index 9895179d..b27d91ba 100644 --- a/nms/v1_21_R6/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R6/HitBoxImpl.kt +++ b/nms/v1_21_R6/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R6/HitBoxImpl.kt @@ -37,6 +37,7 @@ import net.minecraft.world.entity.projectile.Projectile import net.minecraft.world.entity.projectile.ProjectileDeflection import net.minecraft.world.item.ItemStack import net.minecraft.world.level.BlockGetter +import net.minecraft.core.BlockPos import net.minecraft.world.phys.AABB import net.minecraft.world.phys.Vec3 import org.bukkit.Bukkit @@ -121,6 +122,18 @@ internal class HitBoxImpl( override fun relativePosition(): Vector3f = delegate.position().run { bone.hitBoxPosition(posCache).add(x.toFloat(), y.toFloat(), z.toFloat()) } + override fun syncPosition() { + yRot = bone.rotation().y + yHeadRot = yRot + yBodyRot = yRot + val pos = relativePosition() + val minusHeight = source.minY * bone.hitBoxScale() + val targetX = pos.x.toDouble() + val targetY = pos.y.toDouble() + minusHeight + val targetZ = pos.z.toDouble() + level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) + setPos(targetX, targetY, targetZ) + } override fun listener(): HitBoxListener = listener override fun listener(listener: HitBoxListener) { this.listener = listener @@ -289,11 +302,11 @@ internal class HitBoxImpl( yBodyRot = yRot val pos = relativePosition() val minusHeight = source.minY * bone.hitBoxScale() - setPos( - pos.x.toDouble(), - pos.y.toDouble() + minusHeight, - pos.z.toDouble() - ) + val targetX = pos.x.toDouble() + val targetY = pos.y.toDouble() + minusHeight + val targetZ = pos.z.toDouble() + level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) + setPos(targetX, targetY, targetZ) BlockGetter.forEachBlockIntersectedBetween( oldPosition(), position(), diff --git a/nms/v1_21_R7/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R7/HitBoxImpl.kt b/nms/v1_21_R7/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R7/HitBoxImpl.kt index a66217bc..9a81d27a 100644 --- a/nms/v1_21_R7/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R7/HitBoxImpl.kt +++ b/nms/v1_21_R7/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R7/HitBoxImpl.kt @@ -37,6 +37,7 @@ import net.minecraft.world.entity.projectile.Projectile import net.minecraft.world.entity.projectile.ProjectileDeflection import net.minecraft.world.item.ItemStack import net.minecraft.world.level.BlockGetter +import net.minecraft.core.BlockPos import net.minecraft.world.phys.AABB import net.minecraft.world.phys.Vec3 import org.bukkit.Bukkit @@ -121,6 +122,18 @@ internal class HitBoxImpl( override fun relativePosition(): Vector3f = delegate.position().run { bone.hitBoxPosition(posCache).add(x.toFloat(), y.toFloat(), z.toFloat()) } + override fun syncPosition() { + yRot = bone.rotation().y + yHeadRot = yRot + yBodyRot = yRot + val pos = relativePosition() + val minusHeight = source.minY * bone.hitBoxScale() + val targetX = pos.x.toDouble() + val targetY = pos.y.toDouble() + minusHeight + val targetZ = pos.z.toDouble() + level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) + setPos(targetX, targetY, targetZ) + } override fun listener(): HitBoxListener = listener override fun listener(listener: HitBoxListener) { this.listener = listener @@ -289,11 +302,11 @@ internal class HitBoxImpl( yBodyRot = yRot val pos = relativePosition() val minusHeight = source.minY * bone.hitBoxScale() - setPos( - pos.x.toDouble(), - pos.y.toDouble() + minusHeight, - pos.z.toDouble() - ) + val targetX = pos.x.toDouble() + val targetY = pos.y.toDouble() + minusHeight + val targetZ = pos.z.toDouble() + level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) + setPos(targetX, targetY, targetZ) BlockGetter.forEachBlockIntersectedBetween( oldPosition(), position(), diff --git a/nms/v26_R1/src/main/kotlin/kr/toxicity/model/bukkit/nms/v26_R1/HitBoxImpl.kt b/nms/v26_R1/src/main/kotlin/kr/toxicity/model/bukkit/nms/v26_R1/HitBoxImpl.kt index d3c933e8..c898dddd 100644 --- a/nms/v26_R1/src/main/kotlin/kr/toxicity/model/bukkit/nms/v26_R1/HitBoxImpl.kt +++ b/nms/v26_R1/src/main/kotlin/kr/toxicity/model/bukkit/nms/v26_R1/HitBoxImpl.kt @@ -37,6 +37,7 @@ import net.minecraft.world.entity.projectile.Projectile import net.minecraft.world.entity.projectile.ProjectileDeflection import net.minecraft.world.item.ItemStack import net.minecraft.world.level.BlockGetter +import net.minecraft.core.BlockPos import net.minecraft.world.phys.AABB import net.minecraft.world.phys.Vec3 import org.bukkit.Bukkit @@ -121,6 +122,18 @@ internal class HitBoxImpl( override fun relativePosition(): Vector3f = delegate.position().run { bone.hitBoxPosition(posCache).add(x.toFloat(), y.toFloat(), z.toFloat()) } + override fun syncPosition() { + yRot = bone.rotation().y + yHeadRot = yRot + yBodyRot = yRot + val pos = relativePosition() + val minusHeight = source.minY * bone.hitBoxScale() + val targetX = pos.x.toDouble() + val targetY = pos.y.toDouble() + minusHeight + val targetZ = pos.z.toDouble() + level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) + setPos(targetX, targetY, targetZ) + } override fun listener(): HitBoxListener = listener override fun listener(listener: HitBoxListener) { this.listener = listener @@ -289,11 +302,11 @@ internal class HitBoxImpl( yBodyRot = yRot val pos = relativePosition() val minusHeight = source.minY * bone.hitBoxScale() - setPos( - pos.x.toDouble(), - pos.y.toDouble() + minusHeight, - pos.z.toDouble() - ) + val targetX = pos.x.toDouble() + val targetY = pos.y.toDouble() + minusHeight + val targetZ = pos.z.toDouble() + level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) + setPos(targetX, targetY, targetZ) BlockGetter.forEachBlockIntersectedBetween( oldPosition(), position(), diff --git a/platform/fabric/src/main/kotlin/kr/toxicity/model/impl/fabric/entity/HitBoxEntityImpl.kt b/platform/fabric/src/main/kotlin/kr/toxicity/model/impl/fabric/entity/HitBoxEntityImpl.kt index 6a27cbc7..46353342 100644 --- a/platform/fabric/src/main/kotlin/kr/toxicity/model/impl/fabric/entity/HitBoxEntityImpl.kt +++ b/platform/fabric/src/main/kotlin/kr/toxicity/model/impl/fabric/entity/HitBoxEntityImpl.kt @@ -36,6 +36,7 @@ import net.minecraft.world.entity.projectile.Projectile import net.minecraft.world.entity.projectile.ProjectileDeflection import net.minecraft.world.item.ItemStack import net.minecraft.world.level.BlockGetter +import net.minecraft.core.BlockPos import net.minecraft.world.phys.AABB import net.minecraft.world.phys.Vec3 import org.joml.Vector3f @@ -128,6 +129,19 @@ class HitBoxEntityImpl( ) } + override fun syncPosition() { + yRot = bone.rotation().y + yHeadRot = yRot + yBodyRot = yRot + val pos = relativePosition() + val minusHeight = source.minY * bone.hitBoxScale() + val targetX = pos.x.toDouble() + val targetY = pos.y.toDouble() + minusHeight + val targetZ = pos.z.toDouble() + level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) + setPos(targetX, targetY, targetZ) + } + override fun listener(): HitBoxListener = listener override fun listener(listener: HitBoxListener) { @@ -346,11 +360,11 @@ class HitBoxEntityImpl( val pos = relativePosition() val minusHeight = source.minY * bone.hitBoxScale() - setPos( - pos.x.toDouble(), - pos.y.toDouble() + minusHeight, - pos.z.toDouble() - ) + val targetX = pos.x.toDouble() + val targetY = pos.y.toDouble() + minusHeight + val targetZ = pos.z.toDouble() + level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) + setPos(targetX, targetY, targetZ) BlockGetter.forEachBlockIntersectedBetween( oldPosition(), From cb9b9e64a55f8582d7c49e997472f734ae197dfd Mon Sep 17 00:00:00 2001 From: 33444_dirge <292397643@qq.com> Date: Fri, 12 Jun 2026 14:28:19 +0800 Subject: [PATCH 3/4] fix --- .../kr/toxicity/model/bukkit/nms/v1_21_R3/HitBoxImpl.kt | 7 +++++++ .../kr/toxicity/model/bukkit/nms/v1_21_R4/HitBoxImpl.kt | 7 +++++++ .../kr/toxicity/model/bukkit/nms/v1_21_R5/HitBoxImpl.kt | 7 +++++++ .../kr/toxicity/model/bukkit/nms/v1_21_R6/HitBoxImpl.kt | 7 +++++++ .../kr/toxicity/model/bukkit/nms/v1_21_R7/HitBoxImpl.kt | 7 +++++++ .../kr/toxicity/model/bukkit/nms/v26_R1/HitBoxImpl.kt | 7 +++++++ .../toxicity/model/impl/fabric/entity/HitBoxEntityImpl.kt | 8 ++++++++ 7 files changed, 50 insertions(+) diff --git a/nms/v1_21_R3/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R3/HitBoxImpl.kt b/nms/v1_21_R3/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R3/HitBoxImpl.kt index bcfd35fa..eb3dc768 100644 --- a/nms/v1_21_R3/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R3/HitBoxImpl.kt +++ b/nms/v1_21_R3/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R3/HitBoxImpl.kt @@ -130,6 +130,13 @@ internal class HitBoxImpl( val targetZ = pos.z.toDouble() level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) setPos(targetX, targetY, targetZ) + val dimension = dimensions + interaction.width = dimension.width + interaction.height = dimension.height + interaction.yRot = yRot + interaction.xRot = xRot + interaction.setSharedFlagOnFire(remainingFireTicks > 0) + interaction.isInvisible = delegate.isInvisible } override fun listener(): HitBoxListener = listener override fun listener(listener: HitBoxListener) { diff --git a/nms/v1_21_R4/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R4/HitBoxImpl.kt b/nms/v1_21_R4/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R4/HitBoxImpl.kt index 28dfd0a8..db04fac7 100644 --- a/nms/v1_21_R4/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R4/HitBoxImpl.kt +++ b/nms/v1_21_R4/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R4/HitBoxImpl.kt @@ -133,6 +133,13 @@ internal class HitBoxImpl( val targetZ = pos.z.toDouble() level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) setPos(targetX, targetY, targetZ) + val dimension = dimensions + interaction.width = dimension.width + interaction.height = dimension.height + interaction.yRot = yRot + interaction.xRot = xRot + interaction.setSharedFlagOnFire(remainingFireTicks > 0) + interaction.isInvisible = delegate.isInvisible } override fun listener(): HitBoxListener = listener override fun listener(listener: HitBoxListener) { diff --git a/nms/v1_21_R5/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R5/HitBoxImpl.kt b/nms/v1_21_R5/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R5/HitBoxImpl.kt index f56cbea6..1505d628 100644 --- a/nms/v1_21_R5/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R5/HitBoxImpl.kt +++ b/nms/v1_21_R5/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R5/HitBoxImpl.kt @@ -133,6 +133,13 @@ internal class HitBoxImpl( val targetZ = pos.z.toDouble() level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) setPos(targetX, targetY, targetZ) + val dimension = dimensions + interaction.width = dimension.width + interaction.height = dimension.height + interaction.yRot = yRot + interaction.xRot = xRot + interaction.setSharedFlagOnFire(remainingFireTicks > 0) + interaction.isInvisible = delegate.isInvisible } override fun listener(): HitBoxListener = listener override fun listener(listener: HitBoxListener) { diff --git a/nms/v1_21_R6/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R6/HitBoxImpl.kt b/nms/v1_21_R6/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R6/HitBoxImpl.kt index b27d91ba..7a8b7b2e 100644 --- a/nms/v1_21_R6/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R6/HitBoxImpl.kt +++ b/nms/v1_21_R6/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R6/HitBoxImpl.kt @@ -133,6 +133,13 @@ internal class HitBoxImpl( val targetZ = pos.z.toDouble() level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) setPos(targetX, targetY, targetZ) + val dimension = dimensions + interaction.width = dimension.width + interaction.height = dimension.height + interaction.yRot = yRot + interaction.xRot = xRot + interaction.setSharedFlagOnFire(remainingFireTicks > 0) + interaction.isInvisible = delegate.isInvisible } override fun listener(): HitBoxListener = listener override fun listener(listener: HitBoxListener) { diff --git a/nms/v1_21_R7/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R7/HitBoxImpl.kt b/nms/v1_21_R7/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R7/HitBoxImpl.kt index 9a81d27a..10dd5a29 100644 --- a/nms/v1_21_R7/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R7/HitBoxImpl.kt +++ b/nms/v1_21_R7/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R7/HitBoxImpl.kt @@ -133,6 +133,13 @@ internal class HitBoxImpl( val targetZ = pos.z.toDouble() level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) setPos(targetX, targetY, targetZ) + val dimension = dimensions + interaction.width = dimension.width + interaction.height = dimension.height + interaction.yRot = yRot + interaction.xRot = xRot + interaction.setSharedFlagOnFire(remainingFireTicks > 0) + interaction.isInvisible = delegate.isInvisible } override fun listener(): HitBoxListener = listener override fun listener(listener: HitBoxListener) { diff --git a/nms/v26_R1/src/main/kotlin/kr/toxicity/model/bukkit/nms/v26_R1/HitBoxImpl.kt b/nms/v26_R1/src/main/kotlin/kr/toxicity/model/bukkit/nms/v26_R1/HitBoxImpl.kt index c898dddd..1c403e2f 100644 --- a/nms/v26_R1/src/main/kotlin/kr/toxicity/model/bukkit/nms/v26_R1/HitBoxImpl.kt +++ b/nms/v26_R1/src/main/kotlin/kr/toxicity/model/bukkit/nms/v26_R1/HitBoxImpl.kt @@ -133,6 +133,13 @@ internal class HitBoxImpl( val targetZ = pos.z.toDouble() level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) setPos(targetX, targetY, targetZ) + val dimension = dimensions + interaction.width = dimension.width + interaction.height = dimension.height + interaction.yRot = yRot + interaction.xRot = xRot + interaction.setSharedFlagOnFire(remainingFireTicks > 0) + interaction.isInvisible = delegate.isInvisible } override fun listener(): HitBoxListener = listener override fun listener(listener: HitBoxListener) { diff --git a/platform/fabric/src/main/kotlin/kr/toxicity/model/impl/fabric/entity/HitBoxEntityImpl.kt b/platform/fabric/src/main/kotlin/kr/toxicity/model/impl/fabric/entity/HitBoxEntityImpl.kt index 46353342..6d12a5aa 100644 --- a/platform/fabric/src/main/kotlin/kr/toxicity/model/impl/fabric/entity/HitBoxEntityImpl.kt +++ b/platform/fabric/src/main/kotlin/kr/toxicity/model/impl/fabric/entity/HitBoxEntityImpl.kt @@ -140,6 +140,14 @@ class HitBoxEntityImpl( val targetZ = pos.z.toDouble() level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) setPos(targetX, targetY, targetZ) + calculateDimensions().let { dimensions -> + interaction.width = dimensions.width + interaction.height = dimensions.height + } + interaction.yRot = yRot + interaction.xRot = xRot + interaction.setSharedFlagOnFire(remainingFireTicks > 0) + interaction.isInvisible = delegate.isInvisible } override fun listener(): HitBoxListener = listener From 07b72c4fce65e813b8e1b258551113e91ec0f635 Mon Sep 17 00:00:00 2001 From: 33444_dirge <292397643@qq.com> Date: Fri, 12 Jun 2026 20:11:42 +0800 Subject: [PATCH 4/4] fix --- .../model/api/tracker/EntityTracker.java | 14 +++----- .../model/bukkit/nms/v1_21_R3/HitBoxImpl.kt | 34 +++++++++--------- .../model/bukkit/nms/v1_21_R4/HitBoxImpl.kt | 35 +++++++++---------- .../model/bukkit/nms/v1_21_R5/HitBoxImpl.kt | 35 +++++++++---------- .../model/bukkit/nms/v1_21_R6/HitBoxImpl.kt | 35 +++++++++---------- .../model/bukkit/nms/v1_21_R7/HitBoxImpl.kt | 35 +++++++++---------- .../model/bukkit/nms/v26_R1/HitBoxImpl.kt | 35 +++++++++---------- .../impl/fabric/entity/HitBoxEntityImpl.kt | 21 ++++------- 8 files changed, 113 insertions(+), 131 deletions(-) diff --git a/api/src/main/java/kr/toxicity/model/api/tracker/EntityTracker.java b/api/src/main/java/kr/toxicity/model/api/tracker/EntityTracker.java index 90d82826..40c49bac 100644 --- a/api/src/main/java/kr/toxicity/model/api/tracker/EntityTracker.java +++ b/api/src/main/java/kr/toxicity/model/api/tracker/EntityTracker.java @@ -30,11 +30,7 @@ import org.jetbrains.annotations.Nullable; import org.joml.Quaternionf; -import java.util.ArrayList; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; -import java.util.UUID; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; @@ -147,10 +143,6 @@ public EntityTracker(@NotNull EntityTrackerRegistry registry, @NotNull RenderPip if (isClosed()) return; createHitBox(null, CREATE_HITBOX_PREDICATE); }); - tick((_, _) -> updateLocation()); - tick((_, _) -> { - if (damageTint.getAndDecrement() == 0) update(TrackerUpdateAction.previousTint()); - }); tick((_, _) -> { var hbs = new ArrayList<>(registry.hitBoxCache.values()); if (!hbs.isEmpty()) { @@ -161,6 +153,10 @@ public EntityTracker(@NotNull EntityTrackerRegistry registry, @NotNull RenderPip }); } }); + tick((_, _) -> updateLocation()); + tick((_, _) -> { + if (damageTint.getAndDecrement() == 0) update(TrackerUpdateAction.previousTint()); + }); rotation(bodyRotator::bodyRotation); preUpdateConsumer.accept(this); EventUtil.call(CreateEntityTrackerEvent.class, () -> new CreateEntityTrackerEvent(this)); diff --git a/nms/v1_21_R3/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R3/HitBoxImpl.kt b/nms/v1_21_R3/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R3/HitBoxImpl.kt index eb3dc768..235238d8 100644 --- a/nms/v1_21_R3/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R3/HitBoxImpl.kt +++ b/nms/v1_21_R3/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R3/HitBoxImpl.kt @@ -119,25 +119,25 @@ internal class HitBoxImpl( override fun relativePosition(): Vector3f = delegate.position().run { bone.hitBoxPosition(posCache).add(x.toFloat(), y.toFloat(), z.toFloat()) } + override fun syncPosition() { yRot = bone.rotation().y yHeadRot = yRot yBodyRot = yRot val pos = relativePosition() val minusHeight = source.minY * bone.hitBoxScale() - val targetX = pos.x.toDouble() - val targetY = pos.y.toDouble() + minusHeight - val targetZ = pos.z.toDouble() - level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) - setPos(targetX, targetY, targetZ) - val dimension = dimensions - interaction.width = dimension.width - interaction.height = dimension.height - interaction.yRot = yRot - interaction.xRot = xRot - interaction.setSharedFlagOnFire(remainingFireTicks > 0) - interaction.isInvisible = delegate.isInvisible + setPos( + pos.x.toDouble(), + pos.y.toDouble() + minusHeight, + pos.z.toDouble() + ) + interaction.setPos( + pos.x.toDouble(), + pos.y.toDouble() + minusHeight, + pos.z.toDouble() + ) } + override fun listener(): HitBoxListener = listener override fun listener(listener: HitBoxListener) { this.listener = listener @@ -306,11 +306,11 @@ internal class HitBoxImpl( yBodyRot = yRot val pos = relativePosition() val minusHeight = source.minY * bone.hitBoxScale() - val targetX = pos.x.toDouble() - val targetY = pos.y.toDouble() + minusHeight - val targetZ = pos.z.toDouble() - level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) - setPos(targetX, targetY, targetZ) + setPos( + pos.x.toDouble(), + pos.y.toDouble() + minusHeight, + pos.z.toDouble() + ) BlockPos.betweenClosedStream(boundingBox).forEach { level().getBlockState(it).entityInside(level(), it, delegate) } diff --git a/nms/v1_21_R4/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R4/HitBoxImpl.kt b/nms/v1_21_R4/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R4/HitBoxImpl.kt index db04fac7..6c7251de 100644 --- a/nms/v1_21_R4/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R4/HitBoxImpl.kt +++ b/nms/v1_21_R4/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R4/HitBoxImpl.kt @@ -37,7 +37,6 @@ import net.minecraft.world.entity.projectile.Projectile import net.minecraft.world.entity.projectile.ProjectileDeflection import net.minecraft.world.item.ItemStack import net.minecraft.world.level.BlockGetter -import net.minecraft.core.BlockPos import net.minecraft.world.phys.AABB import net.minecraft.world.phys.Vec3 import org.bukkit.Bukkit @@ -122,25 +121,25 @@ internal class HitBoxImpl( override fun relativePosition(): Vector3f = delegate.position().run { bone.hitBoxPosition(posCache).add(x.toFloat(), y.toFloat(), z.toFloat()) } + override fun syncPosition() { yRot = bone.rotation().y yHeadRot = yRot yBodyRot = yRot val pos = relativePosition() val minusHeight = source.minY * bone.hitBoxScale() - val targetX = pos.x.toDouble() - val targetY = pos.y.toDouble() + minusHeight - val targetZ = pos.z.toDouble() - level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) - setPos(targetX, targetY, targetZ) - val dimension = dimensions - interaction.width = dimension.width - interaction.height = dimension.height - interaction.yRot = yRot - interaction.xRot = xRot - interaction.setSharedFlagOnFire(remainingFireTicks > 0) - interaction.isInvisible = delegate.isInvisible + setPos( + pos.x.toDouble(), + pos.y.toDouble() + minusHeight, + pos.z.toDouble() + ) + interaction.setPos( + pos.x.toDouble(), + pos.y.toDouble() + minusHeight, + pos.z.toDouble() + ) } + override fun listener(): HitBoxListener = listener override fun listener(listener: HitBoxListener) { this.listener = listener @@ -293,11 +292,11 @@ internal class HitBoxImpl( yBodyRot = yRot val pos = relativePosition() val minusHeight = source.minY * bone.hitBoxScale() - val targetX = pos.x.toDouble() - val targetY = pos.y.toDouble() + minusHeight - val targetZ = pos.z.toDouble() - level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) - setPos(targetX, targetY, targetZ) + setPos( + pos.x.toDouble(), + pos.y.toDouble() + minusHeight, + pos.z.toDouble() + ) BlockGetter.forEachBlockIntersectedBetween( oldPosition(), position(), diff --git a/nms/v1_21_R5/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R5/HitBoxImpl.kt b/nms/v1_21_R5/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R5/HitBoxImpl.kt index 1505d628..84dd2205 100644 --- a/nms/v1_21_R5/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R5/HitBoxImpl.kt +++ b/nms/v1_21_R5/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R5/HitBoxImpl.kt @@ -37,7 +37,6 @@ import net.minecraft.world.entity.projectile.Projectile import net.minecraft.world.entity.projectile.ProjectileDeflection import net.minecraft.world.item.ItemStack import net.minecraft.world.level.BlockGetter -import net.minecraft.core.BlockPos import net.minecraft.world.phys.AABB import net.minecraft.world.phys.Vec3 import org.bukkit.Bukkit @@ -122,25 +121,25 @@ internal class HitBoxImpl( override fun relativePosition(): Vector3f = delegate.position().run { bone.hitBoxPosition(posCache).add(x.toFloat(), y.toFloat(), z.toFloat()) } + override fun syncPosition() { yRot = bone.rotation().y yHeadRot = yRot yBodyRot = yRot val pos = relativePosition() val minusHeight = source.minY * bone.hitBoxScale() - val targetX = pos.x.toDouble() - val targetY = pos.y.toDouble() + minusHeight - val targetZ = pos.z.toDouble() - level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) - setPos(targetX, targetY, targetZ) - val dimension = dimensions - interaction.width = dimension.width - interaction.height = dimension.height - interaction.yRot = yRot - interaction.xRot = xRot - interaction.setSharedFlagOnFire(remainingFireTicks > 0) - interaction.isInvisible = delegate.isInvisible + setPos( + pos.x.toDouble(), + pos.y.toDouble() + minusHeight, + pos.z.toDouble() + ) + interaction.setPos( + pos.x.toDouble(), + pos.y.toDouble() + minusHeight, + pos.z.toDouble() + ) } + override fun listener(): HitBoxListener = listener override fun listener(listener: HitBoxListener) { this.listener = listener @@ -309,11 +308,11 @@ internal class HitBoxImpl( yBodyRot = yRot val pos = relativePosition() val minusHeight = source.minY * bone.hitBoxScale() - val targetX = pos.x.toDouble() - val targetY = pos.y.toDouble() + minusHeight - val targetZ = pos.z.toDouble() - level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) - setPos(targetX, targetY, targetZ) + setPos( + pos.x.toDouble(), + pos.y.toDouble() + minusHeight, + pos.z.toDouble() + ) BlockGetter.forEachBlockIntersectedBetween( oldPosition(), position(), diff --git a/nms/v1_21_R6/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R6/HitBoxImpl.kt b/nms/v1_21_R6/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R6/HitBoxImpl.kt index 7a8b7b2e..12af603b 100644 --- a/nms/v1_21_R6/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R6/HitBoxImpl.kt +++ b/nms/v1_21_R6/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R6/HitBoxImpl.kt @@ -37,7 +37,6 @@ import net.minecraft.world.entity.projectile.Projectile import net.minecraft.world.entity.projectile.ProjectileDeflection import net.minecraft.world.item.ItemStack import net.minecraft.world.level.BlockGetter -import net.minecraft.core.BlockPos import net.minecraft.world.phys.AABB import net.minecraft.world.phys.Vec3 import org.bukkit.Bukkit @@ -122,25 +121,25 @@ internal class HitBoxImpl( override fun relativePosition(): Vector3f = delegate.position().run { bone.hitBoxPosition(posCache).add(x.toFloat(), y.toFloat(), z.toFloat()) } + override fun syncPosition() { yRot = bone.rotation().y yHeadRot = yRot yBodyRot = yRot val pos = relativePosition() val minusHeight = source.minY * bone.hitBoxScale() - val targetX = pos.x.toDouble() - val targetY = pos.y.toDouble() + minusHeight - val targetZ = pos.z.toDouble() - level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) - setPos(targetX, targetY, targetZ) - val dimension = dimensions - interaction.width = dimension.width - interaction.height = dimension.height - interaction.yRot = yRot - interaction.xRot = xRot - interaction.setSharedFlagOnFire(remainingFireTicks > 0) - interaction.isInvisible = delegate.isInvisible + setPos( + pos.x.toDouble(), + pos.y.toDouble() + minusHeight, + pos.z.toDouble() + ) + interaction.setPos( + pos.x.toDouble(), + pos.y.toDouble() + minusHeight, + pos.z.toDouble() + ) } + override fun listener(): HitBoxListener = listener override fun listener(listener: HitBoxListener) { this.listener = listener @@ -309,11 +308,11 @@ internal class HitBoxImpl( yBodyRot = yRot val pos = relativePosition() val minusHeight = source.minY * bone.hitBoxScale() - val targetX = pos.x.toDouble() - val targetY = pos.y.toDouble() + minusHeight - val targetZ = pos.z.toDouble() - level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) - setPos(targetX, targetY, targetZ) + setPos( + pos.x.toDouble(), + pos.y.toDouble() + minusHeight, + pos.z.toDouble() + ) BlockGetter.forEachBlockIntersectedBetween( oldPosition(), position(), diff --git a/nms/v1_21_R7/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R7/HitBoxImpl.kt b/nms/v1_21_R7/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R7/HitBoxImpl.kt index 10dd5a29..fe66572d 100644 --- a/nms/v1_21_R7/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R7/HitBoxImpl.kt +++ b/nms/v1_21_R7/src/main/kotlin/kr/toxicity/model/bukkit/nms/v1_21_R7/HitBoxImpl.kt @@ -37,7 +37,6 @@ import net.minecraft.world.entity.projectile.Projectile import net.minecraft.world.entity.projectile.ProjectileDeflection import net.minecraft.world.item.ItemStack import net.minecraft.world.level.BlockGetter -import net.minecraft.core.BlockPos import net.minecraft.world.phys.AABB import net.minecraft.world.phys.Vec3 import org.bukkit.Bukkit @@ -122,25 +121,25 @@ internal class HitBoxImpl( override fun relativePosition(): Vector3f = delegate.position().run { bone.hitBoxPosition(posCache).add(x.toFloat(), y.toFloat(), z.toFloat()) } + override fun syncPosition() { yRot = bone.rotation().y yHeadRot = yRot yBodyRot = yRot val pos = relativePosition() val minusHeight = source.minY * bone.hitBoxScale() - val targetX = pos.x.toDouble() - val targetY = pos.y.toDouble() + minusHeight - val targetZ = pos.z.toDouble() - level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) - setPos(targetX, targetY, targetZ) - val dimension = dimensions - interaction.width = dimension.width - interaction.height = dimension.height - interaction.yRot = yRot - interaction.xRot = xRot - interaction.setSharedFlagOnFire(remainingFireTicks > 0) - interaction.isInvisible = delegate.isInvisible + setPos( + pos.x.toDouble(), + pos.y.toDouble() + minusHeight, + pos.z.toDouble() + ) + interaction.setPos( + pos.x.toDouble(), + pos.y.toDouble() + minusHeight, + pos.z.toDouble() + ) } + override fun listener(): HitBoxListener = listener override fun listener(listener: HitBoxListener) { this.listener = listener @@ -309,11 +308,11 @@ internal class HitBoxImpl( yBodyRot = yRot val pos = relativePosition() val minusHeight = source.minY * bone.hitBoxScale() - val targetX = pos.x.toDouble() - val targetY = pos.y.toDouble() + minusHeight - val targetZ = pos.z.toDouble() - level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) - setPos(targetX, targetY, targetZ) + setPos( + pos.x.toDouble(), + pos.y.toDouble() + minusHeight, + pos.z.toDouble() + ) BlockGetter.forEachBlockIntersectedBetween( oldPosition(), position(), diff --git a/nms/v26_R1/src/main/kotlin/kr/toxicity/model/bukkit/nms/v26_R1/HitBoxImpl.kt b/nms/v26_R1/src/main/kotlin/kr/toxicity/model/bukkit/nms/v26_R1/HitBoxImpl.kt index 1c403e2f..726c3bfb 100644 --- a/nms/v26_R1/src/main/kotlin/kr/toxicity/model/bukkit/nms/v26_R1/HitBoxImpl.kt +++ b/nms/v26_R1/src/main/kotlin/kr/toxicity/model/bukkit/nms/v26_R1/HitBoxImpl.kt @@ -37,7 +37,6 @@ import net.minecraft.world.entity.projectile.Projectile import net.minecraft.world.entity.projectile.ProjectileDeflection import net.minecraft.world.item.ItemStack import net.minecraft.world.level.BlockGetter -import net.minecraft.core.BlockPos import net.minecraft.world.phys.AABB import net.minecraft.world.phys.Vec3 import org.bukkit.Bukkit @@ -122,25 +121,25 @@ internal class HitBoxImpl( override fun relativePosition(): Vector3f = delegate.position().run { bone.hitBoxPosition(posCache).add(x.toFloat(), y.toFloat(), z.toFloat()) } + override fun syncPosition() { yRot = bone.rotation().y yHeadRot = yRot yBodyRot = yRot val pos = relativePosition() val minusHeight = source.minY * bone.hitBoxScale() - val targetX = pos.x.toDouble() - val targetY = pos.y.toDouble() + minusHeight - val targetZ = pos.z.toDouble() - level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) - setPos(targetX, targetY, targetZ) - val dimension = dimensions - interaction.width = dimension.width - interaction.height = dimension.height - interaction.yRot = yRot - interaction.xRot = xRot - interaction.setSharedFlagOnFire(remainingFireTicks > 0) - interaction.isInvisible = delegate.isInvisible + setPos( + pos.x.toDouble(), + pos.y.toDouble() + minusHeight, + pos.z.toDouble() + ) + interaction.setPos( + pos.x.toDouble(), + pos.y.toDouble() + minusHeight, + pos.z.toDouble() + ) } + override fun listener(): HitBoxListener = listener override fun listener(listener: HitBoxListener) { this.listener = listener @@ -309,11 +308,11 @@ internal class HitBoxImpl( yBodyRot = yRot val pos = relativePosition() val minusHeight = source.minY * bone.hitBoxScale() - val targetX = pos.x.toDouble() - val targetY = pos.y.toDouble() + minusHeight - val targetZ = pos.z.toDouble() - level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) - setPos(targetX, targetY, targetZ) + setPos( + pos.x.toDouble(), + pos.y.toDouble() + minusHeight, + pos.z.toDouble() + ) BlockGetter.forEachBlockIntersectedBetween( oldPosition(), position(), diff --git a/platform/fabric/src/main/kotlin/kr/toxicity/model/impl/fabric/entity/HitBoxEntityImpl.kt b/platform/fabric/src/main/kotlin/kr/toxicity/model/impl/fabric/entity/HitBoxEntityImpl.kt index 6d12a5aa..53e80e0e 100644 --- a/platform/fabric/src/main/kotlin/kr/toxicity/model/impl/fabric/entity/HitBoxEntityImpl.kt +++ b/platform/fabric/src/main/kotlin/kr/toxicity/model/impl/fabric/entity/HitBoxEntityImpl.kt @@ -36,7 +36,6 @@ import net.minecraft.world.entity.projectile.Projectile import net.minecraft.world.entity.projectile.ProjectileDeflection import net.minecraft.world.item.ItemStack import net.minecraft.world.level.BlockGetter -import net.minecraft.core.BlockPos import net.minecraft.world.phys.AABB import net.minecraft.world.phys.Vec3 import org.joml.Vector3f @@ -138,16 +137,8 @@ class HitBoxEntityImpl( val targetX = pos.x.toDouble() val targetY = pos.y.toDouble() + minusHeight val targetZ = pos.z.toDouble() - level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) setPos(targetX, targetY, targetZ) - calculateDimensions().let { dimensions -> - interaction.width = dimensions.width - interaction.height = dimensions.height - } - interaction.yRot = yRot - interaction.xRot = xRot - interaction.setSharedFlagOnFire(remainingFireTicks > 0) - interaction.isInvisible = delegate.isInvisible + interaction.setPos(targetX, targetY, targetZ) } override fun listener(): HitBoxListener = listener @@ -368,11 +359,11 @@ class HitBoxEntityImpl( val pos = relativePosition() val minusHeight = source.minY * bone.hitBoxScale() - val targetX = pos.x.toDouble() - val targetY = pos.y.toDouble() + minusHeight - val targetZ = pos.z.toDouble() - level().getChunkAt(BlockPos.containing(targetX, targetY, targetZ)) - setPos(targetX, targetY, targetZ) + setPos( + pos.x.toDouble(), + pos.y.toDouble() + minusHeight, + pos.z.toDouble() + ) BlockGetter.forEachBlockIntersectedBetween( oldPosition(),