Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Backport the dupe uuid and entity log changes
- Loading branch information
Showing
1 changed file
with
144 additions
and
0 deletions.
There are no files selected for viewing
144 changes: 144 additions & 0 deletions
144
Spigot-Server-Patches/0367-Backport-the-dupe-uuid-and-entity-log-changes.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,144 @@ | ||
From 11cf0fdfd5befaac8c2e5fbdb29a834a1dc69d1f Mon Sep 17 00:00:00 2001 | ||
From: Aikar <aikar@aikar.co> | ||
Date: Fri, 12 Oct 2018 01:37:54 -0400 | ||
Subject: [PATCH] Backport the dupe uuid and entity log changes | ||
|
||
|
||
diff --git a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java | ||
index ed14753512..ba299afc40 100644 | ||
--- a/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java | ||
+++ b/src/main/java/com/destroystokyo/paper/PaperWorldConfig.java | ||
@@ -543,7 +543,7 @@ public class PaperWorldConfig { | ||
} | ||
|
||
public enum DuplicateUUIDMode { | ||
- SAFE_REGEN, REGEN, DELETE, NOTHING, WARN | ||
+ SAFE_REGEN, DELETE, NOTHING, WARN | ||
} | ||
public DuplicateUUIDMode duplicateUUIDMode = DuplicateUUIDMode.SAFE_REGEN; | ||
public int duplicateUUIDDeleteRange = 32; | ||
@@ -553,13 +553,10 @@ public class PaperWorldConfig { | ||
switch (desiredMode.toLowerCase()) { | ||
case "saferegen": | ||
case "saferegenerate": | ||
- duplicateUUIDMode = DuplicateUUIDMode.SAFE_REGEN; | ||
- log("Duplicate UUID Resolve: Safer Regenerate New UUID (Delete likely duplicates within " + duplicateUUIDDeleteRange + " blocks)"); | ||
- break; | ||
case "regen": | ||
case "regenerate": | ||
- duplicateUUIDMode = DuplicateUUIDMode.REGEN; | ||
- log("Duplicate UUID Resolve: Regenerate New UUID"); | ||
+ duplicateUUIDMode = DuplicateUUIDMode.SAFE_REGEN; | ||
+ log("Duplicate UUID Resolve: Safer Regenerate New UUID (Delete likely duplicates within " + duplicateUUIDDeleteRange + " blocks)"); | ||
break; | ||
case "remove": | ||
case "delete": | ||
diff --git a/src/main/java/net/minecraft/server/Chunk.java b/src/main/java/net/minecraft/server/Chunk.java | ||
index 6541f5af47..00c46fe50f 100644 | ||
--- a/src/main/java/net/minecraft/server/Chunk.java | ||
+++ b/src/main/java/net/minecraft/server/Chunk.java | ||
@@ -888,7 +888,7 @@ public class Chunk { | ||
List entityslice = aentityslice[j]; // Spigot | ||
// Paper start | ||
DuplicateUUIDMode mode = world.paperConfig.duplicateUUIDMode; | ||
- if (mode == DuplicateUUIDMode.WARN || mode == DuplicateUUIDMode.DELETE || mode == DuplicateUUIDMode.REGEN || mode == DuplicateUUIDMode.SAFE_REGEN) { | ||
+ if (mode == DuplicateUUIDMode.WARN || mode == DuplicateUUIDMode.DELETE || mode == DuplicateUUIDMode.SAFE_REGEN) { | ||
Map<UUID, Entity> thisChunk = new HashMap<>(); | ||
for (Iterator<Entity> iterator = ((List<Entity>) entityslice).iterator(); iterator.hasNext(); ) { | ||
Entity entity = iterator.next(); | ||
@@ -903,27 +903,26 @@ public class Chunk { | ||
&& java.util.Objects.equals(other.getSaveID(), entity.getSaveID()) | ||
&& entity.getBukkitEntity().getLocation().distance(other.getBukkitEntity().getLocation()) < world.paperConfig.duplicateUUIDDeleteRange | ||
) { | ||
- logger.warn("[DUPE-UUID] Duplicate UUID found used by " + other + ", deleted entity " + entity + " because it was near the duplicate and likely an actual duplicate. See https://github.com/PaperMC/Paper/issues/1223 for discussion on what this is about."); | ||
+ if (World.DEBUG_ENTITIES) logger.warn("[DUPE-UUID] Duplicate UUID found used by " + other + ", deleted entity " + entity + " because it was near the duplicate and likely an actual duplicate. See https://github.com/PaperMC/Paper/issues/1223 for discussion on what this is about."); | ||
entity.die(); | ||
iterator.remove(); | ||
continue; | ||
} | ||
if (other != null && !other.dead) { | ||
switch (mode) { | ||
- case SAFE_REGEN: | ||
- case REGEN: { | ||
+ case SAFE_REGEN: { | ||
entity.setUUID(UUID.randomUUID()); | ||
- logger.warn("[DUPE-UUID] Duplicate UUID found used by " + other + ", regenerated UUID for " + entity + ". See https://github.com/PaperMC/Paper/issues/1223 for discussion on what this is about."); | ||
+ if (World.DEBUG_ENTITIES) logger.warn("[DUPE-UUID] Duplicate UUID found used by " + other + ", regenerated UUID for " + entity + ". See https://github.com/PaperMC/Paper/issues/1223 for discussion on what this is about."); | ||
break; | ||
} | ||
case DELETE: { | ||
- logger.warn("[DUPE-UUID] Duplicate UUID found used by " + other + ", deleted entity " + entity + ". See https://github.com/PaperMC/Paper/issues/1223 for discussion on what this is about."); | ||
+ if (World.DEBUG_ENTITIES) logger.warn("[DUPE-UUID] Duplicate UUID found used by " + other + ", deleted entity " + entity + ". See https://github.com/PaperMC/Paper/issues/1223 for discussion on what this is about."); | ||
entity.die(); | ||
iterator.remove(); | ||
break; | ||
} | ||
default: | ||
- logger.warn("[DUPE-UUID] Duplicate UUID found used by " + other + ", doing nothing to " + entity + ". See https://github.com/PaperMC/Paper/issues/1223 for discussion on what this is about."); | ||
+ if (World.DEBUG_ENTITIES) logger.warn("[DUPE-UUID] Duplicate UUID found used by " + other + ", doing nothing to " + entity + ". See https://github.com/PaperMC/Paper/issues/1223 for discussion on what this is about."); | ||
break; | ||
} | ||
} | ||
diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java | ||
index bcbdadbd3a..7633a61342 100644 | ||
--- a/src/main/java/net/minecraft/server/World.java | ||
+++ b/src/main/java/net/minecraft/server/World.java | ||
@@ -45,6 +45,7 @@ public abstract class World implements IBlockAccess { | ||
private int a = 63; | ||
protected boolean d; | ||
// Spigot start - guard entity list from removals | ||
+ public static final boolean DEBUG_ENTITIES = Boolean.getBoolean("debug.entities"); // Paper | ||
public final List<Entity> entityList = new java.util.ArrayList<Entity>() | ||
{ | ||
@Override | ||
diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java | ||
index b19942e0f1..d29420dd49 100644 | ||
--- a/src/main/java/net/minecraft/server/WorldServer.java | ||
+++ b/src/main/java/net/minecraft/server/WorldServer.java | ||
@@ -54,7 +54,6 @@ public class WorldServer extends World implements IAsyncTaskHandler { | ||
private final List<NextTickListEntry> W = Lists.newArrayList(); | ||
|
||
// CraftBukkit start | ||
- private static final boolean DEBUG_ENTITIES = Boolean.getBoolean("debug.entities"); // Paper | ||
private static Throwable getAddToWorldStackTrace(Entity entity) { | ||
return new Throwable(entity + " Added to world at " + new Date()); | ||
} | ||
@@ -1164,8 +1163,10 @@ public class WorldServer extends World implements IAsyncTaskHandler { | ||
|
||
private boolean j(Entity entity) { | ||
if (entity.dead) { | ||
- WorldServer.a.warn("Tried to add entity {} but it was marked as removed already", EntityTypes.a(entity)); // CraftBukkit // Paper | ||
- if (DEBUG_ENTITIES) getAddToWorldStackTrace(entity).printStackTrace(); | ||
+ if (DEBUG_ENTITIES) { | ||
+ WorldServer.a.warn("Tried to add entity {} but it was marked as removed already", EntityTypes.a(entity)); // CraftBukkit // Paper | ||
+ getAddToWorldStackTrace(entity).printStackTrace(); | ||
+ } | ||
return false; | ||
} else { | ||
UUID uuid = entity.getUniqueID(); | ||
@@ -1178,9 +1179,10 @@ public class WorldServer extends World implements IAsyncTaskHandler { | ||
} else { | ||
if (!(entity instanceof EntityHuman)) { | ||
if (entity.world.paperConfig.duplicateUUIDMode != com.destroystokyo.paper.PaperWorldConfig.DuplicateUUIDMode.NOTHING) { | ||
- WorldServer.a.error("Keeping entity {} that already exists with UUID {}", entity1, uuid.toString()); // CraftBukkit // Paper | ||
- WorldServer.a.error("Duplicate entity {} will not be added to the world. See paper.yml duplicate-uuid-resolver and set this to either regen, delete or nothing to get rid of this message", entity); // Paper | ||
if (DEBUG_ENTITIES) { | ||
+ WorldServer.a.error("Keeping entity {} that already exists with UUID {}", entity1, uuid.toString()); // CraftBukkit // Paper | ||
+ WorldServer.a.error("Duplicate entity {} will not be added to the world. See paper.yml duplicate-uuid-resolver and set this to either regen, delete or nothing to get rid of this message", entity); // Paper | ||
+ | ||
if (entity1.addedToWorldStack != null) { | ||
entity1.addedToWorldStack.printStackTrace(); | ||
} | ||
@@ -1211,8 +1213,8 @@ public class WorldServer extends World implements IAsyncTaskHandler { | ||
Entity old = this.entitiesByUUID.put(entity.getUniqueID(), entity); | ||
if (old != null && old.getId() != entity.getId() && old.valid && entity.world.paperConfig.duplicateUUIDMode != com.destroystokyo.paper.PaperWorldConfig.DuplicateUUIDMode.NOTHING) { | ||
Logger logger = LogManager.getLogger(); | ||
- logger.error("Overwrote an existing entity " + old + " with " + entity); | ||
if (DEBUG_ENTITIES) { | ||
+ logger.error("Overwrote an existing entity " + old + " with " + entity); | ||
if (old.addedToWorldStack != null) { | ||
old.addedToWorldStack.printStackTrace(); | ||
} else { | ||
-- | ||
2.19.1 | ||
|