From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Samsuik Date: Tue, 20 Feb 2024 19:16:16 +0000 Subject: [PATCH] Add entity travel distance limits diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java index 4a1ed4e1d03b9c01c32938bed964970d7f6917d6..a127f74d306ebb09a31fa4f6411624a4ac80bc76 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -1321,6 +1321,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe final boolean isActive = org.spigotmc.ActivationRange.checkIfActive(entity); // Paper - EAR 2 if (isActive) { // Paper - EAR 2 entity.tick(); + // Sakura start - entity travel distance limits + if (entity.isPastTravelDistanceLimit()) { + entity.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DESPAWN); + } + // Sakura end - entity travel distance limits entity.postTick(); // CraftBukkit } else { entity.inactiveTick(); } // Paper - EAR 2 gameprofilerfiller.pop(); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java index 2c84608aba2bfb610a7f2898e45f9a047691b3f4..0868f3d8d93e4c360a0a53df741950789f3c6a1c 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -681,6 +681,19 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return this.physics; } // Sakura end - physics version api + // Sakura start - entity travel distance limits + private final double travelDistanceLimit; + + public final boolean isPastTravelDistanceLimit() { + if (this.origin == null) { + return false; + } + + double x = Math.pow(this.origin.getX() - this.position.x(), 2); + double z = Math.pow(this.origin.getZ() - this.position.z(), 2); + return Math.max(x, z) >= this.travelDistanceLimit; + } + // Sakura end - entity travel distance limits public Entity(EntityType type, Level world) { this.id = Entity.ENTITY_COUNTER.incrementAndGet(); @@ -733,6 +746,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.entityData = datawatcher_a.build(); this.setPos(0.0D, 0.0D, 0.0D); this.eyeHeight = this.dimensions.eyeHeight(); + this.travelDistanceLimit = Math.pow(this.level.sakuraConfig().entity.chunkTravelLimit.getOrDefault(type, Integer.MAX_VALUE) * 16.0, 2); // Sakura - entity travel distance limits } public boolean isColliding(BlockPos pos, BlockState state) {