diff --git a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java
index 261eb835..f57e0839 100644
--- a/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java
+++ b/BauSystem/BauSystem_Main/src/de/steamwar/bausystem/BauSystem.java
@@ -40,10 +40,13 @@ import de.steamwar.bausystem.worlddata.WorldData;
import de.steamwar.command.AbstractValidator;
import de.steamwar.command.SWCommandUtils;
import de.steamwar.core.CRIUSleepEvent;
+import de.steamwar.core.Core;
import de.steamwar.core.WorldEditRendererCUIEditor;
+import de.steamwar.core.WorldIdentifier;
import de.steamwar.linkage.AbstractLinker;
import de.steamwar.linkage.SpigotLinker;
import de.steamwar.message.Message;
+import de.steamwar.providers.BauServerInfo;
import lombok.Getter;
import org.bukkit.Bukkit;
import org.bukkit.GameRule;
@@ -131,6 +134,9 @@ public class BauSystem extends JavaPlugin implements Listener {
new WorldEditRendererCUIEditor();
Bukkit.getWorlds().get(0).setGameRule(GameRule.SEND_COMMAND_FEEDBACK, false);
+
+ String identifier = BauServerInfo.getOwnerUser().getUUID().toString().replace("-", "");
+ WorldIdentifier.set("bau/" + Core.getVersion() + "/" + identifier);
}
@EventHandler
diff --git a/SpigotCore/SpigotCore_19/src/de/steamwar/core/WorldIdentifier19.java b/SpigotCore/SpigotCore_19/src/de/steamwar/core/WorldIdentifier19.java
new file mode 100644
index 00000000..74a2dc14
--- /dev/null
+++ b/SpigotCore/SpigotCore_19/src/de/steamwar/core/WorldIdentifier19.java
@@ -0,0 +1,68 @@
+/*
+ * This file is a part of the SteamWar software.
+ *
+ * Copyright (C) 2025 SteamWar.de-Serverteam
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package de.steamwar.core;
+
+import com.comphenix.tinyprotocol.TinyProtocol;
+import de.steamwar.Reflection;
+import net.minecraft.network.protocol.game.PacketPlayOutLogin;
+import net.minecraft.resources.ResourceKey;
+import net.minecraft.world.level.World;
+
+public class WorldIdentifier19 implements WorldIdentifier.IWorldIdentifier {
+
+ private static ResourceKey resourceKey = null;
+
+ private static final Class> resourceKeyClass = Reflection.getClass("net.minecraft.resources.ResourceKey");
+ private static final Class> minecraftKeyClass = Reflection.getClass("net.minecraft.resources.MinecraftKey");
+ private static final Reflection.Constructor resourceKeyConstructor = Reflection.getConstructor(resourceKeyClass, minecraftKeyClass, minecraftKeyClass);
+ private static final Reflection.Constructor minecraftKeyConstructor = Reflection.getConstructor(minecraftKeyClass, String.class, String.class);
+
+ @Override
+ public void setResourceKey(String name) {
+ resourceKey = (ResourceKey) resourceKeyConstructor.invoke(minecraftKeyConstructor.invoke("minecraft", "dimension"), minecraftKeyConstructor.invoke("steamwar", name));
+ }
+
+ public WorldIdentifier19() {
+ TinyProtocol.instance.addFilter(PacketPlayOutLogin.class, (player, o) -> {
+ if (resourceKey == null) return o;
+ PacketPlayOutLogin packet = (PacketPlayOutLogin) o;
+
+ return new PacketPlayOutLogin(
+ packet.b(),
+ packet.c(),
+ packet.d(),
+ packet.e(),
+ packet.f(),
+ packet.g(),
+ packet.h(),
+ resourceKey,
+ packet.j(),
+ packet.k(),
+ packet.l(),
+ packet.m(),
+ packet.n(),
+ packet.o(),
+ packet.p(),
+ packet.q(),
+ packet.r()
+ );
+ });
+ }
+}
diff --git a/SpigotCore/SpigotCore_20/src/de/steamwar/core/WorldIdentifier20.java b/SpigotCore/SpigotCore_20/src/de/steamwar/core/WorldIdentifier20.java
new file mode 100644
index 00000000..354d8710
--- /dev/null
+++ b/SpigotCore/SpigotCore_20/src/de/steamwar/core/WorldIdentifier20.java
@@ -0,0 +1,70 @@
+/*
+ * This file is a part of the SteamWar software.
+ *
+ * Copyright (C) 2025 SteamWar.de-Serverteam
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package de.steamwar.core;
+
+import com.comphenix.tinyprotocol.TinyProtocol;
+import de.steamwar.Reflection;
+import net.minecraft.network.protocol.game.PacketPlayOutLogin;
+import net.minecraft.resources.ResourceKey;
+import net.minecraft.world.level.World;
+
+public class WorldIdentifier20 implements WorldIdentifier.IWorldIdentifier {
+
+ private static ResourceKey resourceKey = null;
+
+ private static final Reflection.Field playerId = Reflection.getField(PacketPlayOutLogin.class, int.class, 0);
+ private static final Class> resourceKeyClass = Reflection.getClass("net.minecraft.resources.ResourceKey");
+ private static final Class> minecraftKeyClass = Reflection.getClass("net.minecraft.resources.MinecraftKey");
+ private static final Reflection.Constructor resourceKeyConstructor = Reflection.getConstructor(resourceKeyClass, minecraftKeyClass, minecraftKeyClass);
+ private static final Reflection.Constructor minecraftKeyConstructor = Reflection.getConstructor(minecraftKeyClass, String.class, String.class);
+
+ @Override
+ public void setResourceKey(String name) {
+ resourceKey = (ResourceKey) resourceKeyConstructor.invoke(minecraftKeyConstructor.invoke("minecraft", "dimension"), minecraftKeyConstructor.invoke("steamwar", name));
+ }
+
+ public WorldIdentifier20() {
+ TinyProtocol.instance.addFilter(PacketPlayOutLogin.class, (player, o) -> {
+ if (resourceKey == null) return o;
+ PacketPlayOutLogin packet = (PacketPlayOutLogin) o;
+
+ return new PacketPlayOutLogin(
+ playerId.get(packet),
+ packet.c(),
+ packet.d(),
+ packet.e(),
+ packet.f(),
+ packet.g(),
+ packet.h(),
+ resourceKey,
+ packet.j(),
+ packet.k(),
+ packet.l(),
+ packet.m(),
+ packet.n(),
+ packet.o(),
+ packet.p(),
+ packet.q(),
+ packet.r(),
+ packet.s()
+ );
+ });
+ }
+}
diff --git a/SpigotCore/SpigotCore_21/src/de/steamwar/core/WorldIdentifier21.java b/SpigotCore/SpigotCore_21/src/de/steamwar/core/WorldIdentifier21.java
new file mode 100644
index 00000000..8553124c
--- /dev/null
+++ b/SpigotCore/SpigotCore_21/src/de/steamwar/core/WorldIdentifier21.java
@@ -0,0 +1,73 @@
+/*
+ * This file is a part of the SteamWar software.
+ *
+ * Copyright (C) 2025 SteamWar.de-Serverteam
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package de.steamwar.core;
+
+import com.comphenix.tinyprotocol.TinyProtocol;
+import de.steamwar.Reflection;
+import net.minecraft.network.protocol.game.ClientboundLoginPacket;
+import net.minecraft.network.protocol.game.CommonPlayerSpawnInfo;
+import net.minecraft.resources.ResourceKey;
+import net.minecraft.world.level.Level;
+
+public class WorldIdentifier21 implements WorldIdentifier.IWorldIdentifier {
+
+ private static ResourceKey resourceKey = null;
+
+ private static final Class> resourceKeyClass = Reflection.getClass("net.minecraft.resources.ResourceKey");
+ private static final Class> minecraftKeyClass = Reflection.getClass("net.minecraft.resources.MinecraftKey");
+ private static final Reflection.Constructor resourceKeyConstructor = Reflection.getConstructor(resourceKeyClass, minecraftKeyClass, minecraftKeyClass);
+ private static final Reflection.Constructor minecraftKeyConstructor = Reflection.getConstructor(minecraftKeyClass, String.class, String.class);
+
+ @Override
+ public void setResourceKey(String name) {
+ resourceKey = (ResourceKey) resourceKeyConstructor.invoke(minecraftKeyConstructor.invoke("minecraft", "dimension"), minecraftKeyConstructor.invoke("steamwar", name));
+ }
+
+ public WorldIdentifier21() {
+ TinyProtocol.instance.addFilter(ClientboundLoginPacket.class, (player, o) -> {
+ if (resourceKey == null) return o;
+ ClientboundLoginPacket packet = (ClientboundLoginPacket) o;
+
+ return new ClientboundLoginPacket(packet.playerId(),
+ packet.hardcore(),
+ packet.levels(),
+ packet.maxPlayers(),
+ packet.chunkRadius(),
+ packet.simulationDistance(),
+ packet.reducedDebugInfo(),
+ packet.showDeathScreen(),
+ packet.doLimitedCrafting(),
+ new CommonPlayerSpawnInfo(
+ packet.commonPlayerSpawnInfo().dimensionType(),
+ resourceKey,
+ packet.commonPlayerSpawnInfo().seed(),
+ packet.commonPlayerSpawnInfo().gameType(),
+ packet.commonPlayerSpawnInfo().previousGameType(),
+ packet.commonPlayerSpawnInfo().isDebug(),
+ packet.commonPlayerSpawnInfo().isFlat(),
+ packet.commonPlayerSpawnInfo().lastDeathLocation(),
+ packet.commonPlayerSpawnInfo().portalCooldown(),
+ packet.commonPlayerSpawnInfo().seaLevel()
+ ),
+ packet.enforcesSecureChat()
+ );
+ });
+ }
+}
diff --git a/SpigotCore/SpigotCore_8/src/de/steamwar/core/WorldIdentifier8.java b/SpigotCore/SpigotCore_8/src/de/steamwar/core/WorldIdentifier8.java
new file mode 100644
index 00000000..632201bb
--- /dev/null
+++ b/SpigotCore/SpigotCore_8/src/de/steamwar/core/WorldIdentifier8.java
@@ -0,0 +1,27 @@
+/*
+ * This file is a part of the SteamWar software.
+ *
+ * Copyright (C) 2025 SteamWar.de-Serverteam
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package de.steamwar.core;
+
+public class WorldIdentifier8 implements WorldIdentifier.IWorldIdentifier {
+
+ @Override
+ public void setResourceKey(String name) {
+ }
+}
diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/WorldIdentifier.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/WorldIdentifier.java
new file mode 100644
index 00000000..14e3db31
--- /dev/null
+++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/WorldIdentifier.java
@@ -0,0 +1,33 @@
+/*
+ * This file is a part of the SteamWar software.
+ *
+ * Copyright (C) 2025 SteamWar.de-Serverteam
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package de.steamwar.core;
+
+public class WorldIdentifier {
+
+ private static final IWorldIdentifier impl = VersionDependent.getVersionImpl(Core.getInstance());
+
+ public static void set(String name) {
+ impl.setResourceKey(name);
+ }
+
+ protected interface IWorldIdentifier {
+ void setResourceKey(String name);
+ }
+}