diff --git a/lophine-server/src/main/java/fun/bm/lophine/utils/EntitiesCounterUtil.java b/lophine-server/src/main/java/fun/bm/lophine/utils/EntitiesCounterUtil.java index d80320d..42021ce 100644 --- a/lophine-server/src/main/java/fun/bm/lophine/utils/EntitiesCounterUtil.java +++ b/lophine-server/src/main/java/fun/bm/lophine/utils/EntitiesCounterUtil.java @@ -91,6 +91,7 @@ public class EntitiesCounterUtil { Object2IntOpenHashMap map = new Object2IntOpenHashMap<>(); for (ReferenceList data : data0.values()) { for (Entity entity : GlobalEntitiesCounter.enabled ? data.copy() : data) { + if (entity == null || entity.isRemoved() || !entity.isAlive()) continue; // Lophine start - Copy from net/minecraft/world/level/NaturalSpawner MobCategory category = entity.getType().getCategory(); if (category != MobCategory.MISC) { @@ -132,6 +133,7 @@ public class EntitiesCounterUtil { // Lophine start - Copy from net/minecraft/world/level/NaturalSpawner PotentialCalculator potentialCalculator = new PotentialCalculator(); for (Entity entity : entities) { + if (entity == null || entity.isRemoved() || !entity.isAlive()) continue; // Paper start - Only count natural spawns if (!entity.level().paperConfig().entities.spawning.countAllMobsForSpawning && !(entity.spawnReason == CreatureSpawnEvent.SpawnReason.NATURAL || diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/replay/RecordMetaData.java b/lophine-server/src/main/java/org/leavesmc/leaves/replay/RecordMetaData.java index 0e0fbb6..9df5f5e 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/replay/RecordMetaData.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/replay/RecordMetaData.java @@ -26,7 +26,7 @@ public class RecordMetaData { public static final int CURRENT_FILE_FORMAT_VERSION = 14; public boolean singleplayer = false; - public String serverName = "Leaves"; + public String serverName = "Lophine"; public int duration = 0; public long date; public String mcversion; @@ -37,4 +37,22 @@ public class RecordMetaData { public int selfId = -1; public Set players = new HashSet<>(); + + public RecordMetaData copy() { + RecordMetaData ret = new RecordMetaData(); + synchronized (this) { + ret.singleplayer = this.singleplayer; + ret.serverName = this.serverName; + ret.duration = this.duration; + ret.date = this.date; + ret.mcversion = this.mcversion; + ret.fileFormat = this.fileFormat; + ret.fileFormatVersion = this.fileFormatVersion; + ret.protocol = this.protocol; + ret.generator = this.generator; + ret.selfId = this.selfId; + ret.players = new HashSet<>(this.players); + } + return ret; + } } diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/replay/Recorder.java b/lophine-server/src/main/java/org/leavesmc/leaves/replay/Recorder.java index e986671..66c2806 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/replay/Recorder.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/replay/Recorder.java @@ -195,7 +195,9 @@ public class Recorder extends Connection { } case ClientboundAddEntityPacket packet1 -> { if (packet1.getType() == EntityType.PLAYER) { - metaData.players.add(packet1.getUUID()); + synchronized (metaData) { + metaData.players.add(packet1.getUUID()); + } saveMetadata(); } } diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/replay/RecorderOption.java b/lophine-server/src/main/java/org/leavesmc/leaves/replay/RecorderOption.java index 2ff2e7f..6762e23 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/replay/RecorderOption.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/replay/RecorderOption.java @@ -27,7 +27,7 @@ import java.util.List; public class RecorderOption { public int recordDistance = -1; - public String serverName = "Leaves"; + public String serverName = "Lophine"; public RecordWeather forceWeather = null; public int forceDayTime = -1; public boolean ignoreChat = false; diff --git a/lophine-server/src/main/java/org/leavesmc/leaves/replay/ReplayFile.java b/lophine-server/src/main/java/org/leavesmc/leaves/replay/ReplayFile.java index 47324bd..0f6eeb9 100644 --- a/lophine-server/src/main/java/org/leavesmc/leaves/replay/ReplayFile.java +++ b/lophine-server/src/main/java/org/leavesmc/leaves/replay/ReplayFile.java @@ -123,9 +123,10 @@ public class ReplayFile { data.fileFormatVersion = RecordMetaData.CURRENT_FILE_FORMAT_VERSION; data.protocol = SharedConstants.getCurrentVersion().protocolVersion(); data.generator = ProtocolUtils.buildProtocolVersion("replay"); + RecordMetaData dataCopy = data.copy(); try (Writer writer = new OutputStreamWriter(new FileOutputStream(metaFile), StandardCharsets.UTF_8)) { - writer.write(META_GSON.toJson(data)); + writer.write(META_GSON.toJson(dataCopy)); } }