From 869ab5202ebaf76b5689acbd138bf9d680f38a3c Mon Sep 17 00:00:00 2001
From: William <admin@domnian.com>
Date: Sat, 19 Mar 2016 16:19:00 -0400
Subject: [PATCH] Allow Reloading of Custom Permissions

Add the ability to reload the custom permissions file by doing "/reload permissions"

Implements Feature Request: https://github.com/PaperMC/Paper/issues/49
---
 ...dd-command-to-reload-permissions.yml.patch | 83 +++++++++++++++++++
 ...llow-Reloading-of-Custom-Permissions.patch | 27 ++++++
 2 files changed, 110 insertions(+)
 create mode 100644 Spigot-API-Patches/0026-Add-command-to-reload-permissions.yml.patch
 create mode 100644 Spigot-Server-Patches/0085-Allow-Reloading-of-Custom-Permissions.patch

diff --git a/Spigot-API-Patches/0026-Add-command-to-reload-permissions.yml.patch b/Spigot-API-Patches/0026-Add-command-to-reload-permissions.yml.patch
new file mode 100644
index 000000000..8ad6b10d3
--- /dev/null
+++ b/Spigot-API-Patches/0026-Add-command-to-reload-permissions.yml.patch
@@ -0,0 +1,83 @@
+From e78f2b0a6014d98fb0dd2992da41e321176d94ea Mon Sep 17 00:00:00 2001
+From: William <admin@domnian.com>
+Date: Fri, 18 Mar 2016 03:28:07 -0400
+Subject: [PATCH] Add command to reload permissions.yml
+
+https://github.com/PaperMC/Paper/issues/49
+
+diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java
+index 91bde81..6b1f2a4 100644
+--- a/src/main/java/org/bukkit/Server.java
++++ b/src/main/java/org/bukkit/Server.java
+@@ -1018,4 +1018,6 @@ public interface Server extends PluginMessageRecipient {
+     }
+ 
+     Spigot spigot();
++
++    void reloadPermissions(); // Paper
+ }
+diff --git a/src/main/java/org/bukkit/command/defaults/ReloadCommand.java b/src/main/java/org/bukkit/command/defaults/ReloadCommand.java
+index c70d512..7f32a7c 100644
+--- a/src/main/java/org/bukkit/command/defaults/ReloadCommand.java
++++ b/src/main/java/org/bukkit/command/defaults/ReloadCommand.java
+@@ -11,15 +11,28 @@ public class ReloadCommand extends BukkitCommand {
+     public ReloadCommand(String name) {
+         super(name);
+         this.description = "Reloads the server configuration and plugins";
+-        this.usageMessage = "/reload";
++        this.usageMessage = "/reload [permissions]"; // Paper
+         this.setPermission("bukkit.command.reload");
+         this.setAliases(Arrays.asList("rl"));
+     }
+ 
+     @Override
+     public boolean execute(CommandSender sender, String currentAlias, String[] args) {
++
+         if (!testPermission(sender)) return true;
+ 
++        // Paper start - Reload permissions.yml (PAPER-49)
++        if (args.length == 1) {
++            if (args[0].equalsIgnoreCase("permissions")) {
++                Bukkit.getServer().reloadPermissions();
++                Command.broadcastCommandMessage(sender, ChatColor.GREEN + "Permissions successfully reloaded.");
++                return true;
++            } else {
++                return false;
++            }
++        }
++        // Paper end
++
+         Command.broadcastCommandMessage(sender, ChatColor.RED + "Please note that this command is not supported and may cause issues when using some plugins.");
+         Command.broadcastCommandMessage(sender, ChatColor.RED + "If you encounter any issues please use the /stop command to restart your server.");
+         Bukkit.reload();
+@@ -32,7 +45,8 @@ public class ReloadCommand extends BukkitCommand {
+     @Override
+     public java.util.List<String> tabComplete(CommandSender sender, String alias, String[] args) throws IllegalArgumentException
+     {
+-        return java.util.Collections.emptyList();
++        return java.util.Collections.singletonList("permissions"); // Paper
+     }
+     // Spigot End
++
+ }
+diff --git a/src/main/java/org/bukkit/plugin/SimplePluginManager.java b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
+index 49f5872..e988a7c 100644
+--- a/src/main/java/org/bukkit/plugin/SimplePluginManager.java
++++ b/src/main/java/org/bukkit/plugin/SimplePluginManager.java
+@@ -750,4 +750,13 @@ public final class SimplePluginManager implements PluginManager {
+     public void useTimings(boolean use) {
+         co.aikar.timings.Timings.setTimingsEnabled(use); // Spigot
+     }
++
++    // Paper start
++    public void clearPermissions() {
++        permissions.clear();
++        defaultPerms.get(true).clear();
++        defaultPerms.get(false).clear();
++    }
++    // Paper end
++
+ }
+-- 
+2.5.0
+
diff --git a/Spigot-Server-Patches/0085-Allow-Reloading-of-Custom-Permissions.patch b/Spigot-Server-Patches/0085-Allow-Reloading-of-Custom-Permissions.patch
new file mode 100644
index 000000000..053e29540
--- /dev/null
+++ b/Spigot-Server-Patches/0085-Allow-Reloading-of-Custom-Permissions.patch
@@ -0,0 +1,27 @@
+From 8b0fab818c1a07dab47347144e4b53e395cf4e99 Mon Sep 17 00:00:00 2001
+From: William <admin@domnian.com>
+Date: Fri, 18 Mar 2016 03:30:17 -0400
+Subject: [PATCH] Allow Reloading of Custom Permissions
+
+https://github.com/PaperMC/Paper/issues/49
+
+diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+index cb9906a..3977bff 100644
+--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
++++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
+@@ -1833,4 +1833,12 @@ public final class CraftServer implements Server {
+     {
+         return spigot;
+     }
++
++    // Paper start
++    @Override
++    public void reloadPermissions() {
++        ((SimplePluginManager) pluginManager).clearPermissions();
++        loadCustomPermissions();
++    }
++    // Paper end
+ }
+-- 
+2.5.0
+