From 49f713b4c216db30a4122429beb6143aa93547e2 Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Mon, 21 Mar 2016 00:19:18 -0500 Subject: [PATCH] Support offline mode in whitelist command as well diff --git a/src/main/java/net/minecraft/server/CommandWhitelist.java b/src/main/java/net/minecraft/server/CommandWhitelist.java index b52bf74..65a93ef 100644 --- a/src/main/java/net/minecraft/server/CommandWhitelist.java +++ b/src/main/java/net/minecraft/server/CommandWhitelist.java @@ -43,24 +45,35 @@ public class CommandWhitelist extends CommandAbstract { throw new ExceptionUsage("commands.whitelist.add.usage", new Object[0]); } + // Paper start - Handle offline mode as well + /* gameprofile = minecraftserver.getUserCache().getProfile(astring[1]); if (gameprofile == null) { throw new CommandException("commands.whitelist.add.failed", new Object[] { astring[1]}); } minecraftserver.getPlayerList().addWhitelist(gameprofile); + */ + this.whitelist(minecraftserver, astring[1], true); + // Paper end a(icommandlistener, (ICommand) this, "commands.whitelist.add.success", new Object[] { astring[1]}); } else if (astring[0].equals("remove")) { if (astring.length < 2) { throw new ExceptionUsage("commands.whitelist.remove.usage", new Object[0]); } + // Paper start - Handle offline mode as well + /* gameprofile = minecraftserver.getPlayerList().getWhitelist().a(astring[1]); if (gameprofile == null) { throw new CommandException("commands.whitelist.remove.failed", new Object[] { astring[1]}); } minecraftserver.getPlayerList().removeWhitelist(gameprofile); + + */ + this.whitelist(minecraftserver, astring[1], false); + // Paper end a(icommandlistener, (ICommand) this, "commands.whitelist.remove.success", new Object[] { astring[1]}); } else if (astring[0].equals("reload")) { minecraftserver.getPlayerList().reloadWhitelist(); @@ -88,4 +101,48 @@ public class CommandWhitelist extends CommandAbstract { return Collections.emptyList(); } } + + /** + * Paper - Adds or removes a player from the game whitelist + * + * @param mcserver running instance of MinecraftServer + * @param playerName the player we're going to be whitelisting + * @param add whether we're adding or removing from the whitelist + */ + private void whitelist(MinecraftServer mcserver, String playerName, boolean add) throws CommandException { + if (mcserver.getOnlineMode()) { + // The reason we essentially copy/pasta NMS code here is because the NMS online-only version + // is capable of providing feedback to the person running the command based on whether or + // not the player is a real online-mode account + GameProfile gameprofile = mcserver.getUserCache().getProfile(playerName); + if (gameprofile == null) { + if (add) { + throw new CommandException("commands.whitelist.add.failed", new Object[] { playerName}); + } else { + throw new CommandException("commands.whitelist.remove.failed", new Object[] { playerName}); + } + } + + if (add) { + mcserver.getPlayerList().addWhitelist(gameprofile); + } else { + mcserver.getPlayerList().removeWhitelist(gameprofile); + } + } else { + // versus our offline version, which will always report success all of the time + org.bukkit.OfflinePlayer offlinePlayer = org.bukkit.Bukkit.getOfflinePlayer(playerName); + if (add) { + offlinePlayer.setWhitelisted(true); + } else { + offlinePlayer.setWhitelisted(false); + } + } + } + + // Paper start - Fix decompiler error + @Override + public int compareTo(ICommand o) { + return a((ICommand) o); + } + // Paper end } -- 2.7.4.windows.1