mirror of
https://github.com/EngineHub/WorldGuard.git
synced 2024-09-28 22:57:29 +02:00
Restore game mode flag logic to pre-refactor version.
Fixes WORLDGUARD-3320.
This commit is contained in:
parent
9998a6c930
commit
73dea11de2
@ -87,7 +87,8 @@ public void onPlayerGameModeChange(PlayerGameModeChangeEvent event) {
|
||||
GameModeFlag handler = plugin.getSessionManager().get(player).getHandler(GameModeFlag.class);
|
||||
if (handler != null && wcfg.useRegions && !plugin.getGlobalRegionManager().hasBypass(player, player.getWorld())) {
|
||||
GameMode expected = handler.getSetGameMode();
|
||||
if (expected != event.getNewGameMode()) {
|
||||
if (handler.getOriginalGameMode() != null && expected != null && expected != event.getNewGameMode()) {
|
||||
log.info("Game mode change on " + player.getName() + " has been blocked due to the regionw GAMEMODE flag");
|
||||
event.setCancelled(true);
|
||||
}
|
||||
}
|
||||
|
@ -28,6 +28,8 @@
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
public class GameModeFlag extends FlagValueChangeHandler<GameMode> {
|
||||
|
||||
private GameMode originalGameMode;
|
||||
@ -37,19 +39,27 @@ public GameModeFlag(Session session) {
|
||||
super(session, DefaultFlag.GAME_MODE);
|
||||
}
|
||||
|
||||
public GameMode getOriginalGameMode() {
|
||||
return originalGameMode;
|
||||
}
|
||||
|
||||
public GameMode getSetGameMode() {
|
||||
return setGameMode;
|
||||
}
|
||||
|
||||
private void updateGameMode(Player player, GameMode newValue, World world) {
|
||||
if (player.getGameMode() != newValue) {
|
||||
if (originalGameMode == null) {
|
||||
private void updateGameMode(Player player, @Nullable GameMode newValue, World world) {
|
||||
if (!getSession().getManager().hasBypass(player, world) && newValue != null) {
|
||||
if (player.getGameMode() != newValue) {
|
||||
originalGameMode = player.getGameMode();
|
||||
}
|
||||
|
||||
if (!getSession().getManager().hasBypass(player, world)) {
|
||||
player.setGameMode(newValue);
|
||||
setGameMode = newValue;
|
||||
} else if (originalGameMode == null) {
|
||||
originalGameMode = player.getServer().getDefaultGameMode();
|
||||
}
|
||||
} else {
|
||||
if (originalGameMode != null) {
|
||||
GameMode mode = originalGameMode;
|
||||
originalGameMode = null;
|
||||
player.setGameMode(mode);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -67,13 +77,7 @@ protected boolean onSetValue(Player player, Location from, Location to, Applicab
|
||||
|
||||
@Override
|
||||
protected boolean onAbsentValue(Player player, Location from, Location to, ApplicableRegionSet toSet, GameMode lastValue, MoveType moveType) {
|
||||
if (originalGameMode != null) {
|
||||
if (player.getGameMode() == setGameMode) {
|
||||
player.setGameMode(originalGameMode);
|
||||
}
|
||||
originalGameMode = null;
|
||||
}
|
||||
|
||||
updateGameMode(player, null, player.getWorld());
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user