Possible fix + add guest-gamemode flag

This commit is contained in:
Jesse Boyd 2016-07-25 08:02:17 +10:00
parent 07977ac2ce
commit 975a5765c1
2 changed files with 17 additions and 6 deletions

View File

@ -21,6 +21,7 @@ public final class Flags {
public static final IntervalFlag FEED = new IntervalFlag("feed"); public static final IntervalFlag FEED = new IntervalFlag("feed");
public static final IntervalFlag HEAL = new IntervalFlag("heal"); public static final IntervalFlag HEAL = new IntervalFlag("heal");
public static final GameModeFlag GAMEMODE = new GameModeFlag("gamemode"); public static final GameModeFlag GAMEMODE = new GameModeFlag("gamemode");
public static final GameModeFlag GUEST_GAMEMODE = new GameModeFlag("guest-gamemode");
public static final StringFlag DONE = (StringFlag) new StringFlag("done").reserve(); public static final StringFlag DONE = (StringFlag) new StringFlag("done").reserve();
public static final BooleanFlag REDSTONE = new BooleanFlag("redstone"); public static final BooleanFlag REDSTONE = new BooleanFlag("redstone");
public static final BooleanFlag FLY = new BooleanFlag("fly"); public static final BooleanFlag FLY = new BooleanFlag("fly");
@ -148,7 +149,7 @@ public final class Flags {
public static Flag<?> getFlag(String flag) { public static Flag<?> getFlag(String flag) {
return flags.get(flag); return flags.get(flag);
} }
public static void registerFlag(final Flag<?> flag) { public static void registerFlag(final Flag<?> flag) {
final Flag<?> duplicate = flags.put(flag.getName(), flag); final Flag<?> duplicate = flags.put(flag.getName(), flag);
@ -164,12 +165,11 @@ public final class Flags {
}); });
PS.get().foreachPlotRaw(new RunnableVal<Plot>() { PS.get().foreachPlotRaw(new RunnableVal<Plot>() {
@Override public void run(Plot value) { @Override public void run(Plot value) {
Object remove = null;
if (value.getFlags().containsKey(duplicate)) { if (value.getFlags().containsKey(duplicate)) {
remove = value.getFlags().remove(duplicate); Object remove = value.getFlags().remove(duplicate);
}
value.getFlags().put(flag,flag.parseValue("" + remove)); value.getFlags().put(flag,flag.parseValue("" + remove));
} }
}
}); });
} }
} }

View File

@ -94,6 +94,17 @@ public class PlotListener {
} }
} }
} }
Optional<PlotGameMode> guestGamemodeFlag = plot.getFlag(Flags.GUEST_GAMEMODE);
if (gamemodeFlag.isPresent()) {
if (player.getGameMode() != gamemodeFlag.get() && !plot.isAdded(player.getUUID())) {
if (!Permissions.hasPermission(player, "plots.gamemode.bypass")) {
player.setGameMode(gamemodeFlag.get());
} else {
MainUtil.sendMessage(player,
StringMan.replaceAll(C.GAMEMODE_WAS_BYPASSED.s(), "{plot}", plot.getId(), "{gamemode}", gamemodeFlag.get()));
}
}
}
Optional<Long> timeFlag = plot.getFlag(Flags.TIME); Optional<Long> timeFlag = plot.getFlag(Flags.TIME);
if (timeFlag.isPresent()) { if (timeFlag.isPresent()) {
try { try {
@ -171,7 +182,7 @@ public class PlotListener {
if (pw == null) { if (pw == null) {
return true; return true;
} }
if (plot.getFlag(Flags.GAMEMODE).isPresent()) { if (plot.getFlag(Flags.GAMEMODE).isPresent() || plot.getFlag(Flags.GUEST_GAMEMODE).isPresent()) {
if (player.getGameMode() != pw.GAMEMODE) { if (player.getGameMode() != pw.GAMEMODE) {
if (!Permissions.hasPermission(player, "plots.gamemode.bypass")) { if (!Permissions.hasPermission(player, "plots.gamemode.bypass")) {
player.setGameMode(pw.GAMEMODE); player.setGameMode(pw.GAMEMODE);