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 ab5472c27f94e196a2747466f8721173cef937fc..c32140ded7da15123774b2443830528598b982d4 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -1219,6 +1219,11 @@ public class ServerLevel extends Level implements WorldGenLevel { if (isActive) { // Paper - EAR 2 TimingHistory.activatedEntityTicks++; entity.tick(); + // Sakura start - entity travel distance limits + if (entity.isPastTravelDistanceLimit()) { + entity.discard(); + } + // Sakura end - entity travel distance limits entity.postTick(); // CraftBukkit } else { entity.inactiveTick(); } // Paper - EAR 2 this.getProfiler().pop(); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java index 7145d3ad574e3e5f99d46fc4c18678e80a60087f..cbe68a30983380068c54eec708ce8ec8c0d3db38 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -698,6 +698,19 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { return false; } // Sakura end - Treat all collidable blocks as full when moving fast + // Sakura start - entity travel distance limits + private final double travelDistanceLimit; + + public final boolean isPastTravelDistanceLimit() { + if (origin == null) { + return false; + } + + double x = Math.pow(origin.getX() - position.x(), 2); + double z = Math.pow(origin.getZ() - 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(); @@ -745,6 +758,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { this.setPos(0.0D, 0.0D, 0.0D); this.eyeHeight = this.getEyeHeight(net.minecraft.world.entity.Pose.STANDING, this.dimensions); this.mergeLevel = level.sakuraConfig().cannons.mergeLevel; // Sakura + this.travelDistanceLimit = Math.pow(level.sakuraConfig().entity.chunkTravelLimit.getOrDefault(type, Integer.MAX_VALUE) * 16.0, 2); // Sakura - entity travel distance limits } public boolean isColliding(BlockPos pos, BlockState state) {