From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: NONPLAYT <76615486+NONPLAYT@users.noreply.github.com> Date: Sun, 2 Apr 2023 21:27:33 +0300 Subject: [PATCH] Fallback to Dimension if World UUID is unknown diff --git a/src/main/java/gq/bxteam/divinemc/configuration/DivineConfig.java b/src/main/java/gq/bxteam/divinemc/configuration/DivineConfig.java index 9e802fbe8e5f1a3c24cb6bc9254c72a2a0c3fde1..cdf83dc33915632e29291c59eb1841991c03e8a0 100644 --- a/src/main/java/gq/bxteam/divinemc/configuration/DivineConfig.java +++ b/src/main/java/gq/bxteam/divinemc/configuration/DivineConfig.java @@ -152,4 +152,9 @@ public class DivineConfig { } return builder.build(); } + + public static boolean fallbackToDimensionIfWorldUUIDUnknown = true; + private static void fallbackToDimensionIfWorldUUIDUnknown() { + fallbackToDimensionIfWorldUUIDUnknown = getBoolean("settings.fallback-to-dimension-if-world-uuid-unknown", fallbackToDimensionIfWorldUUIDUnknown); + } } \ No newline at end of file diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java index 725149019d69f3350b7235391092b1fbe2cd9dfb..fc67dc67664a207b761ff4d8df0a206bd4a41547 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -102,6 +102,7 @@ import net.minecraft.world.scores.PlayerTeam; import net.minecraft.world.scores.Scoreboard; // Paper import net.minecraft.world.scores.Team; import org.slf4j.Logger; +import gq.bxteam.divinemc.configuration.DivineConfig; // CraftBukkit start import java.util.stream.Collectors; @@ -220,7 +221,14 @@ public abstract class PlayerList { if (bWorld != null) { resourcekey = ((CraftWorld) bWorld).getHandle().dimension(); } else { - resourcekey = Level.OVERWORLD; + // DivineMC start - Fallback to Dimension if World UUID is unknown + if (DivineConfig.fallbackToDimensionIfWorldUUIDUnknown) { + DataResult> dataResult = Level.RESOURCE_KEY_CODEC.parse(new Dynamic<>(NbtOps.INSTANCE, nbttagcompound.get("Dimension"))); + resourcekey = dataResult.result().orElse(Level.OVERWORLD); + } else { + resourcekey = Level.OVERWORLD; + } + // DivineMC end } } else if (nbttagcompound != null) { // Vanilla migration support