Fix join gamemode enforcement in Lobby Systems v1.5.2

This commit is contained in:
Darto KLoning
2026-09-06 23:31:07 +07:00
parent b24e031b05
commit abc1942ecd
6 changed files with 173 additions and 102 deletions
@@ -80,11 +80,23 @@ public final class DimensionGameModeManager {
String dimension = player.level().dimension().identifier().toString();
String previous = lastDimension.put(player.getUUID(), dimension);
if (!dimension.equals(previous)) {
applyForPlayer(player, dimension, true);
applyConfiguredMode(player, dimension, true);
}
}
}
/**
* Memaksa gamemode yang dikonfigurasi untuk dimension player saat ini.
* Dipakai setelah teleport agar join/reconnect tidak bergantung hanya pada
* deteksi perubahan dimension di tick berikutnya.
*/
public boolean applyForPlayer(ServerPlayer player, boolean log) {
String dimension = player.level().dimension().identifier().toString();
boolean changed = applyConfiguredMode(player, dimension, log);
lastDimension.put(player.getUUID(), dimension);
return changed;
}
public void onDisconnect(UUID uuid) {
lastDimension.remove(uuid);
}
@@ -117,14 +129,14 @@ public final class DimensionGameModeManager {
String normalized = normalizeDimension(dimension);
for (ServerPlayer player : server.getPlayerList().getPlayers()) {
if (player.level().dimension().identifier().toString().equals(normalized)) {
if (applyForPlayer(player, normalized, false)) changed++;
if (applyConfiguredMode(player, normalized, false)) changed++;
lastDimension.put(player.getUUID(), normalized);
}
}
return changed;
}
private boolean applyForPlayer(ServerPlayer player, String dimension, boolean log) {
private boolean applyConfiguredMode(ServerPlayer player, String dimension, boolean log) {
String configuredMode = configured.get(normalizeDimension(dimension));
if (configuredMode == null) return false;
@@ -921,6 +921,10 @@ public final class LobbySystemsMod implements ModInitializer {
boolean ok = TELEPORTS.teleport(player, target, x, y, z, yaw, pitch);
if (!ok) return 0;
if (CONFIG.get().manageDimensionGamemode) {
DIMENSION_GAMEMODES.applyForPlayer(player, true);
}
if (sendMessage) {
player.sendSystemMessage(Component.literal(returning
? "§aTeleport ke §f" + dimensionId + "§a pada posisi terakhirmu."
@@ -967,6 +971,9 @@ public final class LobbySystemsMod implements ModInitializer {
LobbyConfig c = CONFIG.get();
boolean ok = TELEPORTS.teleport(player, target, c.lobbyX, c.lobbyY, c.lobbyZ, c.lobbyYaw, c.lobbyPitch);
if (ok && CONFIG.get().manageDimensionGamemode) {
DIMENSION_GAMEMODES.applyForPlayer(player, true);
}
if (ok && sendMessage) player.sendSystemMessage(Component.literal(c.returnedMessage));
return ok;
}