86 lines
5.2 KiB
Diff
86 lines
5.2 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Cryptite <cryptite@gmail.com>
|
|
Date: Tue, 6 Jun 2023 08:14:08 -0500
|
|
Subject: [PATCH] Long distance tracking
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
|
index 4321789e9222350266ea0830473861e2f5fd75ad..6245bbc5745787b835b9b3a89da088ee01d4d706 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
|
@@ -1532,6 +1532,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
|
// Paper end - remove allocation of Vec3D here
|
|
Vec3 vec3d = player.position().subtract(this.entity.position());
|
|
double d0 = (double) Math.min(this.getEffectiveRange(), io.papermc.paper.chunk.system.ChunkSystem.getSendViewDistance(player) * 16); // Paper - per player view distance
|
|
+ if (this.entity instanceof ServerPlayer serverPlayer && player.canSeeFromLongDistance(serverPlayer)) d0 = Math.min(level.spigotConfig.flyingPlayerTrackingRange, d0); // Slice
|
|
double d1 = vec3d_dx * vec3d_dx + vec3d_dz * vec3d_dz; // Paper
|
|
double d2 = d0 * d0;
|
|
boolean flag = d1 <= d2 && this.entity.broadcastToPlayer(player);
|
|
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
|
index 4aa043cc25d7d770ead47bcc3bf0373336768e5c..20aea9a41bcb21b8063ae3a227d8d385b7fe9665 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
|
@@ -278,6 +278,7 @@ public class ServerPlayer extends Player {
|
|
public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper
|
|
public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - there are a lot of changes to do if we change all methods leading to the event
|
|
public boolean smoothWorldTeleport; // Slice
|
|
+ public boolean hasLongDistanceTracking; // Slice
|
|
|
|
private final java.util.concurrent.atomic.AtomicReference<io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances> viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1));
|
|
public io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader;
|
|
@@ -2650,4 +2651,18 @@ public class ServerPlayer extends Player {
|
|
return (CraftPlayer) super.getBukkitEntity();
|
|
}
|
|
// CraftBukkit end
|
|
+
|
|
+ // Slice start
|
|
+ public boolean canSeeFromLongDistance(ServerPlayer other) {
|
|
+ if (hasLongDistanceTracking) return true;
|
|
+
|
|
+ CraftPlayer bukkitEntity = other.getBukkitEntity();
|
|
+ return bukkitEntity.isGliding() || bukkitEntity.isFlying();
|
|
+ }
|
|
+
|
|
+ public boolean canBeSeenLongDistance() {
|
|
+ CraftPlayer bukkitEntity = getBukkitEntity();
|
|
+ return bukkitEntity.isGliding() || bukkitEntity.isFlying();
|
|
+ }
|
|
+ // Slice end
|
|
}
|
|
diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
index 5638290c72e0daeddfa79fd55e87334fa7d86f72..9f1daa3f9e8e04430a2329e9cbfa9f94ffc72c02 100644
|
|
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
@@ -271,6 +271,7 @@ public class SpigotWorldConfig
|
|
}
|
|
|
|
public int playerTrackingRange = 48;
|
|
+ public int flyingPlayerTrackingRange = 64; // Slice
|
|
public int animalTrackingRange = 48;
|
|
public int monsterTrackingRange = 48;
|
|
public int miscTrackingRange = 32;
|
|
@@ -279,6 +280,7 @@ public class SpigotWorldConfig
|
|
private void trackingRange()
|
|
{
|
|
this.playerTrackingRange = this.getInt( "entity-tracking-range.players", this.playerTrackingRange );
|
|
+ this.flyingPlayerTrackingRange = this.getInt( "entity-tracking-range.flying-players", this.flyingPlayerTrackingRange ); // Slice
|
|
this.animalTrackingRange = this.getInt( "entity-tracking-range.animals", this.animalTrackingRange );
|
|
this.monsterTrackingRange = this.getInt( "entity-tracking-range.monsters", this.monsterTrackingRange );
|
|
this.miscTrackingRange = this.getInt( "entity-tracking-range.misc", this.miscTrackingRange );
|
|
diff --git a/src/main/java/org/spigotmc/TrackingRange.java b/src/main/java/org/spigotmc/TrackingRange.java
|
|
index 8fca15099952626ee537f5ce3eefdfaa6518dc1b..1ddf149ce3d962905bec8c4562e4d86fbbe6e570 100644
|
|
--- a/src/main/java/org/spigotmc/TrackingRange.java
|
|
+++ b/src/main/java/org/spigotmc/TrackingRange.java
|
|
@@ -26,9 +26,9 @@ public class TrackingRange
|
|
return defaultRange;
|
|
}
|
|
SpigotWorldConfig config = entity.level().spigotConfig;
|
|
- if ( entity instanceof ServerPlayer )
|
|
+ if ( entity instanceof ServerPlayer serverPlayer)
|
|
{
|
|
- return config.playerTrackingRange;
|
|
+ return serverPlayer.canBeSeenLongDistance() ? config.flyingPlayerTrackingRange : config.playerTrackingRange;
|
|
// Paper start - Simplify and set water mobs to animal tracking range
|
|
}
|
|
switch (entity.activationType) {
|