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 22ec85fb9e5313b94f1dc55c3cfbfe88eded0db6..b88dd166628c46a7f2bf98b0b8bf5a215acb99de 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
|
@@ -1417,6 +1417,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 ed8378ad022c375b0d18172aeccf65cb026d9d68..f5acd0f9ed0a4936257a96971b995ec62ec2906d 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) {
|