Fix join gamemode enforcement in Lobby Systems v1.5.2
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user