86 lines
5.1 KiB
Diff
86 lines
5.1 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 6b755f07ca62a8bb9ad3b1a2aee5fa07bacb134c..94d2f22d374f899d29576c927798a6de66120a41 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
|
@@ -1411,6 +1411,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
|
// Paper end - remove allocation of Vec3D here
|
|
int i = ChunkMap.this.getPlayerViewDistance(player);
|
|
double d0 = (double) Math.min(this.getEffectiveRange(), i * 16);
|
|
+ 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) && ChunkMap.this.isChunkTracked(player, this.entity.chunkPosition().x, this.entity.chunkPosition().z);
|
|
diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
|
index d9b9dd6023532a26f5d8173fb1fccf10a9dfec8c..dec8e20a8132e601ed0db3352d22fad968ed555a 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java
|
|
@@ -282,6 +282,7 @@ public class ServerPlayer extends Player {
|
|
public @Nullable String clientBrandName = null; // Paper - Brand support
|
|
public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - Add API for quit reason; 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
|
|
|
|
// Paper start - replace player chunk loader
|
|
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));
|
|
@@ -2758,4 +2759,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 1cf6d4f854d89c515e48e1fb365eb95ff9340765..6dab8b76bef3c97936fc337e813bcb60c7f2026d 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 e4425b242fe73d1fd2bd10c313aa16925432329f..b3252aa5bb4ce9fac0b914e0b2fe74d2c7ac3bce 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) {
|