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 0a8baeb94ae553c4759b065eafd9e242153cf991..abf8ddccce6ec9d893038d1fafdca617ce0eae4d 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 1a90a7d91288b9a8ab3539785de2616a6f24aa48..2a3025d16a3ca02ce1566a96b8bf3bea45ccb0c1 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; @@ -213,7 +214,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