forked from SteamWar/SteamWar
Merge pull request 'Add WorldIdentifier' (#249) from SpigotCore/WorldIdentifier into main
Reviewed-on: SteamWar/SteamWar#249 Reviewed-by: D4rkr34lm <dark@steamwar.de>
This commit is contained in:
@@ -40,10 +40,13 @@ import de.steamwar.bausystem.worlddata.WorldData;
|
|||||||
import de.steamwar.command.AbstractValidator;
|
import de.steamwar.command.AbstractValidator;
|
||||||
import de.steamwar.command.SWCommandUtils;
|
import de.steamwar.command.SWCommandUtils;
|
||||||
import de.steamwar.core.CRIUSleepEvent;
|
import de.steamwar.core.CRIUSleepEvent;
|
||||||
|
import de.steamwar.core.Core;
|
||||||
import de.steamwar.core.WorldEditRendererCUIEditor;
|
import de.steamwar.core.WorldEditRendererCUIEditor;
|
||||||
|
import de.steamwar.core.WorldIdentifier;
|
||||||
import de.steamwar.linkage.AbstractLinker;
|
import de.steamwar.linkage.AbstractLinker;
|
||||||
import de.steamwar.linkage.SpigotLinker;
|
import de.steamwar.linkage.SpigotLinker;
|
||||||
import de.steamwar.message.Message;
|
import de.steamwar.message.Message;
|
||||||
|
import de.steamwar.providers.BauServerInfo;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.GameRule;
|
import org.bukkit.GameRule;
|
||||||
@@ -131,6 +134,9 @@ public class BauSystem extends JavaPlugin implements Listener {
|
|||||||
new WorldEditRendererCUIEditor();
|
new WorldEditRendererCUIEditor();
|
||||||
|
|
||||||
Bukkit.getWorlds().get(0).setGameRule(GameRule.SEND_COMMAND_FEEDBACK, false);
|
Bukkit.getWorlds().get(0).setGameRule(GameRule.SEND_COMMAND_FEEDBACK, false);
|
||||||
|
|
||||||
|
String identifier = BauServerInfo.getOwnerUser().getUUID().toString().replace("-", "");
|
||||||
|
WorldIdentifier.set("bau/" + Core.getVersion() + "/" + identifier);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
|||||||
@@ -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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
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<World> 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<World>) 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()
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
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<World> resourceKey = null;
|
||||||
|
|
||||||
|
private static final Reflection.Field<Integer> 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<World>) 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()
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
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<Level> 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<Level>) 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()
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package de.steamwar.core;
|
||||||
|
|
||||||
|
public class WorldIdentifier8 implements WorldIdentifier.IWorldIdentifier {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setResourceKey(String name) {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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 <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user