mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2026-01-06 15:51:31 +00:00
Fix tracker player NPE
This commit is contained in:
@@ -40,10 +40,26 @@ index e42677bb004201efe1702779a78cc8d0ca05e80f..cf5c2aabe2842ff9fc97823dff501140
|
||||
}
|
||||
// Leaves start - skip photographer
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
||||
index dde015810f6e914ad99dcb8ab66c7aa33e1b8c26..02622ad073d052eaf72fa136fa2725f58cda78aa 100644
|
||||
index dde015810f6e914ad99dcb8ab66c7aa33e1b8c26..192b4b9dc76f2f3adc63605248ea77dfd2c5e7db 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ChunkMap.java
|
||||
+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java
|
||||
@@ -906,6 +906,21 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
@@ -234,6 +234,15 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
return;
|
||||
}
|
||||
final ServerPlayer[] backingSet = inRange.getRawDataUnchecked();
|
||||
+ // Leaf start - Multithreaded tracker
|
||||
+ if (org.dreeam.leaf.config.modules.async.MultithreadedTracker.enabled)
|
||||
+ for (int i = 0, len = inRange.size(); i < len; i++) {
|
||||
+ final ServerPlayer player = backingSet[i];
|
||||
+ if (player == null) continue;
|
||||
+ ++(player.mobCounts[index]);
|
||||
+ }
|
||||
+ else
|
||||
+ // Leaf end - Multithreaded tracker
|
||||
for (int i = 0, len = inRange.size(); i < len; i++) {
|
||||
++(backingSet[i].mobCounts[index]);
|
||||
}
|
||||
@@ -906,6 +915,21 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
((ca.spottedleaf.moonrise.patches.entity_tracker.EntityTrackerEntity)entity).moonrise$setTrackedEntity(null); // Paper - optimise entity tracker
|
||||
}
|
||||
|
||||
@@ -65,7 +81,7 @@ index dde015810f6e914ad99dcb8ab66c7aa33e1b8c26..02622ad073d052eaf72fa136fa2725f5
|
||||
// Paper start - optimise entity tracker
|
||||
private void newTrackerTick() {
|
||||
final ca.spottedleaf.moonrise.common.misc.NearbyPlayers nearbyPlayers = ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel)this.level).moonrise$getNearbyPlayers();
|
||||
@@ -939,6 +954,13 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
@@ -939,6 +963,13 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
// Paper end - optimise entity tracker
|
||||
|
||||
protected void tick() {
|
||||
@@ -79,7 +95,7 @@ index dde015810f6e914ad99dcb8ab66c7aa33e1b8c26..02622ad073d052eaf72fa136fa2725f5
|
||||
// Paper start - optimise entity tracker
|
||||
if (true) {
|
||||
this.newTrackerTick();
|
||||
@@ -1088,7 +1110,9 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
@@ -1088,7 +1119,9 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
final Entity entity;
|
||||
private final int range;
|
||||
SectionPos lastSectionPos;
|
||||
@@ -90,7 +106,7 @@ index dde015810f6e914ad99dcb8ab66c7aa33e1b8c26..02622ad073d052eaf72fa136fa2725f5
|
||||
|
||||
// Paper start - optimise entity tracker
|
||||
private long lastChunkUpdate = -1L;
|
||||
@@ -1116,6 +1140,37 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
@@ -1116,6 +1149,37 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
|
||||
final ServerPlayer[] playersRaw = players.getRawDataUnchecked();
|
||||
|
||||
@@ -128,7 +144,7 @@ index dde015810f6e914ad99dcb8ab66c7aa33e1b8c26..02622ad073d052eaf72fa136fa2725f5
|
||||
for (int i = 0, len = players.size(); i < len; ++i) {
|
||||
final ServerPlayer player = playersRaw[i];
|
||||
this.updatePlayer(player);
|
||||
@@ -1130,6 +1185,8 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
@@ -1130,6 +1194,8 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -137,7 +153,7 @@ index dde015810f6e914ad99dcb8ab66c7aa33e1b8c26..02622ad073d052eaf72fa136fa2725f5
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1184,14 +1241,11 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
@@ -1184,14 +1250,11 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
}
|
||||
|
||||
public void broadcast(Packet<?> packet) {
|
||||
@@ -155,7 +171,7 @@ index dde015810f6e914ad99dcb8ab66c7aa33e1b8c26..02622ad073d052eaf72fa136fa2725f5
|
||||
}
|
||||
|
||||
public void broadcastAndSend(Packet<?> packet) {
|
||||
@@ -1203,18 +1257,15 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
@@ -1203,18 +1266,15 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
}
|
||||
|
||||
public void broadcastRemoved() {
|
||||
@@ -178,15 +194,17 @@ index dde015810f6e914ad99dcb8ab66c7aa33e1b8c26..02622ad073d052eaf72fa136fa2725f5
|
||||
if (this.seenBy.remove(player.connection)) {
|
||||
this.serverEntity.removePairing(player);
|
||||
}
|
||||
@@ -1222,7 +1273,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
@@ -1222,8 +1282,9 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider
|
||||
}
|
||||
|
||||
public void updatePlayer(ServerPlayer player) {
|
||||
- org.spigotmc.AsyncCatcher.catchOp("player tracker update"); // Spigot
|
||||
+ //org.spigotmc.AsyncCatcher.catchOp("player tracker update"); // Spigot // Leaf - petal - Multithreaded tracker - We can update async
|
||||
if (player != this.entity) {
|
||||
+ if (org.dreeam.leaf.config.modules.async.MultithreadedTracker.enabled && player == null) return; // Leaf - Multithreaded tracker
|
||||
// Paper start - remove allocation of Vec3D here
|
||||
// Vec3 vec3d = player.position().subtract(this.entity.position());
|
||||
double vec3d_dx = player.getX() - this.entity.getX();
|
||||
diff --git a/src/main/java/net/minecraft/server/level/ServerBossEvent.java b/src/main/java/net/minecraft/server/level/ServerBossEvent.java
|
||||
index 4f91107f9ae42f96c060c310596db9aa869a8dbc..f9889f593ed144ee8f1f5bd380e631c659b0c2b8 100644
|
||||
--- a/src/main/java/net/minecraft/server/level/ServerBossEvent.java
|
||||
@@ -320,10 +338,10 @@ index 14ceb3308474e76220bd64b0254df3f2925d4206..5fc03bf452082d13c577e2fcf49288c5
|
||||
private final net.minecraft.world.entity.LivingEntity entity; // Purpur
|
||||
diff --git a/src/main/java/org/dreeam/leaf/async/tracker/MultithreadedTracker.java b/src/main/java/org/dreeam/leaf/async/tracker/MultithreadedTracker.java
|
||||
new file mode 100644
|
||||
index 0000000000000000000000000000000000000000..16c59bdeeaa7f114c912e4b3d6409272e0f682bf
|
||||
index 0000000000000000000000000000000000000000..1fc19cc2945eff7bd5d3d3da826f4f973e5a7eb8
|
||||
--- /dev/null
|
||||
+++ b/src/main/java/org/dreeam/leaf/async/tracker/MultithreadedTracker.java
|
||||
@@ -0,0 +1,162 @@
|
||||
@@ -0,0 +1,168 @@
|
||||
+package org.dreeam.leaf.async.tracker;
|
||||
+
|
||||
+import ca.spottedleaf.moonrise.common.list.ReferenceList;
|
||||
@@ -336,6 +354,8 @@ index 0000000000000000000000000000000000000000..16c59bdeeaa7f114c912e4b3d6409272
|
||||
+import net.minecraft.server.level.ChunkMap;
|
||||
+import net.minecraft.server.level.ServerLevel;
|
||||
+import net.minecraft.world.entity.Entity;
|
||||
+import org.apache.logging.log4j.LogManager;
|
||||
+import org.apache.logging.log4j.Logger;
|
||||
+
|
||||
+import java.util.Arrays;
|
||||
+import java.util.concurrent.Executor;
|
||||
@@ -345,6 +365,7 @@ index 0000000000000000000000000000000000000000..16c59bdeeaa7f114c912e4b3d6409272
|
||||
+
|
||||
+public class MultithreadedTracker {
|
||||
+
|
||||
+ private static final Logger LOGGER = LogManager.getLogger("MultithreadedTracker");
|
||||
+ private static final Executor trackerExecutor = new ThreadPoolExecutor(
|
||||
+ 1,
|
||||
+ org.dreeam.leaf.config.modules.async.MultithreadedTracker.asyncEntityTrackerMaxThreads,
|
||||
@@ -363,10 +384,14 @@ index 0000000000000000000000000000000000000000..16c59bdeeaa7f114c912e4b3d6409272
|
||||
+ }
|
||||
+
|
||||
+ public static void tick(ChunkSystemServerLevel level) {
|
||||
+ if (!org.dreeam.leaf.config.modules.async.MultithreadedTracker.compatModeEnabled) {
|
||||
+ tickAsync(level);
|
||||
+ } else {
|
||||
+ tickAsyncWithCompatMode(level);
|
||||
+ try {
|
||||
+ if (!org.dreeam.leaf.config.modules.async.MultithreadedTracker.compatModeEnabled) {
|
||||
+ tickAsync(level);
|
||||
+ } else {
|
||||
+ tickAsyncWithCompatMode(level);
|
||||
+ }
|
||||
+ } catch (Exception e) {
|
||||
+ LOGGER.error("Failed to execute async task.", e);
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
@@ -458,7 +483,6 @@ index 0000000000000000000000000000000000000000..16c59bdeeaa7f114c912e4b3d6409272
|
||||
+ private static void tickOriginal(ServerLevel level) {
|
||||
+ final ca.spottedleaf.moonrise.common.misc.NearbyPlayers nearbyPlayers = ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel) level).moonrise$getNearbyPlayers();
|
||||
+ final ca.spottedleaf.moonrise.patches.chunk_system.level.entity.server.ServerEntityLookup entityLookup = (ca.spottedleaf.moonrise.patches.chunk_system.level.entity.server.ServerEntityLookup) ((ca.spottedleaf.moonrise.patches.chunk_system.level.ChunkSystemServerLevel) level).moonrise$getEntityLookup();
|
||||
+ ;
|
||||
+
|
||||
+ final ca.spottedleaf.moonrise.common.list.ReferenceList<net.minecraft.world.entity.Entity> trackerEntities = entityLookup.trackerEntities;
|
||||
+ final Entity[] trackerEntitiesRaw = trackerEntities.getRawDataUnchecked();
|
||||
|
||||
Reference in New Issue
Block a user