From 80591dc8a74392cffbe9f57ace39243dad07a6a6 Mon Sep 17 00:00:00 2001 From: Tenkuma <85490958+adrianvic@users.noreply.github.com> Date: Mon, 15 Dec 2025 14:36:34 -0300 Subject: [PATCH 01/19] Only run release-build when publishing a release --- .github/workflows/release-build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml index 41e1923..df07ecd 100644 --- a/.github/workflows/release-build.yml +++ b/.github/workflows/release-build.yml @@ -2,8 +2,8 @@ name: Release Build on: release: - types: [created, published] - + types: [published] + jobs: build-and-release: runs-on: ubuntu-latest From 9180807f0a0e1cf2d610544495eea4487342c9d9 Mon Sep 17 00:00:00 2001 From: Tenkuma <85490958+adrianvic@users.noreply.github.com> Date: Mon, 15 Dec 2025 14:46:23 -0300 Subject: [PATCH 02/19] Update release-build.yml --- .github/workflows/release-build.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/release-build.yml b/.github/workflows/release-build.yml index df07ecd..dcc83d3 100644 --- a/.github/workflows/release-build.yml +++ b/.github/workflows/release-build.yml @@ -38,7 +38,3 @@ jobs: files: build/libs/*.jar tag_name: ${{ github.ref_name }} name: ${{ github.ref_name }} - body: | - Automated build for release **${{ github.ref_name }}**. - Includes the following artifacts: - - `$(ls build/libs/*.jar | tr '\n' '\n' | sed 's/^/ - /')` From 708f65fe36d25c8e83fa376402c9300d752e4ffe Mon Sep 17 00:00:00 2001 From: adrian Date: Thu, 18 Dec 2025 23:33:34 -0300 Subject: [PATCH 03/19] Added permission support for commands. --- src/b1_7_3/resources/plugin.yml | 11 ++++++++++- .../nemesiseye/commands/Commands.java | 9 +++++++++ .../nemesiseye/commands/EyeCore.java | 19 ++++++++++++++++--- .../commands/sub/CurrentPolicies.java | 5 +++++ .../nemesiseye/commands/sub/Help.java | 15 +++++++++++---- .../nemesiseye/commands/sub/ListPolicies.java | 5 +++++ .../nemesiseye/commands/sub/PolicyInfo.java | 5 +++++ .../nemesiseye/commands/sub/Reload.java | 10 ++++++++-- .../nemesiseye/commands/sub/Subcommand.java | 5 +++++ src/r1_21/resources/plugin.yml | 11 ++++++++++- 10 files changed, 84 insertions(+), 11 deletions(-) diff --git a/src/b1_7_3/resources/plugin.yml b/src/b1_7_3/resources/plugin.yml index 3ed24e7..bdb6b5a 100644 --- a/src/b1_7_3/resources/plugin.yml +++ b/src/b1_7_3/resources/plugin.yml @@ -5,4 +5,13 @@ author: 'Adrian Victor' description: "Change what players can do based in custom criteria." commands: eye: - description: "Run /eye help to see all available commands." \ No newline at end of file + description: "Run /eye help to see all available commands." +permissions: + nemesiseye.reload: + default: op + nemesiseye.policy.list.all: + default: op + nemesiseye.policy.list.self: + default: true + nemesiseye.help: + default: true \ No newline at end of file diff --git a/src/main/java/io/github/adrianvic/nemesiseye/commands/Commands.java b/src/main/java/io/github/adrianvic/nemesiseye/commands/Commands.java index cc5e497..a550f20 100644 --- a/src/main/java/io/github/adrianvic/nemesiseye/commands/Commands.java +++ b/src/main/java/io/github/adrianvic/nemesiseye/commands/Commands.java @@ -1,12 +1,16 @@ package io.github.adrianvic.nemesiseye.commands; +import io.github.adrianvic.nemesiseye.Nemesis; import io.github.adrianvic.nemesiseye.commands.sub.*; +import io.github.adrianvic.nemesiseye.reflection.Glimmer; +import org.bukkit.command.CommandSender; import java.util.HashMap; import java.util.Map; public class Commands { private static final Map commands = new HashMap<>(); + private static final Glimmer glim = Nemesis.getInstance().getGlimmer(); static { commands.put("help", new Help()); @@ -23,4 +27,9 @@ public class Commands { public static Subcommand get(String type) { return commands.get(type); } + + public static void sendNoPermissionError(CommandSender sender) { + glim.sendMessage(sender, "You do not have the necessary permission to use this command."); + } + } diff --git a/src/main/java/io/github/adrianvic/nemesiseye/commands/EyeCore.java b/src/main/java/io/github/adrianvic/nemesiseye/commands/EyeCore.java index 3ce2bb0..31cbd82 100644 --- a/src/main/java/io/github/adrianvic/nemesiseye/commands/EyeCore.java +++ b/src/main/java/io/github/adrianvic/nemesiseye/commands/EyeCore.java @@ -26,17 +26,30 @@ public class EyeCore { commandSender.sendMessage("Unknown command, try '/eye help' to list available commands."); return true; } - return sub.execute(commandSender, Arrays.copyOfRange(strings, 1, strings.length)); + else if (commandSender.hasPermission(sub.permission())) { + return sub.execute(commandSender, Arrays.copyOfRange(strings, 1, strings.length)); + } else { + Nemesis.getInstance().getLogger().info("does not have %s".formatted(sub.permission())); + Commands.sendNoPermissionError(commandSender); + return true; + } } return false; } public List onTabComplete(CommandSender commandSender, Command command, String s, String [] strings) { if (strings.length == 1) { - return new ArrayList<>(Commands.getAll().keySet()); + Map cmds = new HashMap<>(); + for (Map.Entry e : Commands.getAll().entrySet()) { + if (e.getValue().hasPermission(commandSender)) { + cmds.put(e.getKey(), e.getValue()); + cmds.put(e.getKey(), e.getValue()); + } + } + return new ArrayList<>(cmds.keySet()); } Subcommand sub = Commands.get(strings[0].toLowerCase()); - if (sub != null) { + if (sub != null && commandSender.hasPermission(sub.permission())) { return sub.onTabComplete(commandSender, Arrays.copyOfRange(strings, 1, strings.length)); } return List.of(); diff --git a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/CurrentPolicies.java b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/CurrentPolicies.java index ba77e73..09133e4 100644 --- a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/CurrentPolicies.java +++ b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/CurrentPolicies.java @@ -39,4 +39,9 @@ public class CurrentPolicies implements Subcommand { public String usage() { return ""; } + + @Override + public String permission() { + return "nemsiseye.policies.list.self"; + } } diff --git a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Help.java b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Help.java index 2ef436e..0526a6b 100644 --- a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Help.java +++ b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Help.java @@ -20,10 +20,12 @@ public class Help implements Subcommand { rstr.add("No commands found."); } for (Map.Entry e : allSubcommands.entrySet()) { - rstr.add(""" - %s - %s - Usage: /eye %s %s - """.formatted(e.getKey(), e.getValue().description(), e.getKey(), e.getValue())); + if (e.getValue().hasPermission(commandSender)) { + rstr.add(""" + %s - %s + Usage: /eye %s %s + """.formatted(e.getKey(), e.getValue().description(), e.getKey(), e.getValue().usage())); + } } glim.sendMessage(commandSender, String.join("\n", rstr)); @@ -44,4 +46,9 @@ public class Help implements Subcommand { public String usage() { return ""; } + + @Override + public String permission() { + return "nemsiseye.help"; + } } diff --git a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/ListPolicies.java b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/ListPolicies.java index bc1a028..d4169ac 100644 --- a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/ListPolicies.java +++ b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/ListPolicies.java @@ -32,4 +32,9 @@ public class ListPolicies implements Subcommand { public String usage() { return ""; } + + @Override + public String permission() { + return "nemsiseye.policy.list.all"; + } } diff --git a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/PolicyInfo.java b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/PolicyInfo.java index b5e898a..ad48e02 100644 --- a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/PolicyInfo.java +++ b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/PolicyInfo.java @@ -47,4 +47,9 @@ public class PolicyInfo implements Subcommand { public String usage() { return ""; } + + @Override + public String permission() { + return "nemsiseye.policy.info"; + } } diff --git a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Reload.java b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Reload.java index 48800b6..9cc49be 100644 --- a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Reload.java +++ b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Reload.java @@ -1,6 +1,7 @@ package io.github.adrianvic.nemesiseye.commands.sub; import io.github.adrianvic.nemesiseye.Config; +import io.github.adrianvic.nemesiseye.commands.Commands; import org.bukkit.command.CommandSender; import java.util.List; @@ -8,8 +9,8 @@ import java.util.List; public class Reload implements Subcommand { @Override public boolean execute(CommandSender commandSender, String [] strings) { - Config.getInstance().load(); - commandSender.sendMessage("Reloading..."); + Config.getInstance().load(); + commandSender.sendMessage("Reloading..."); return true; } @@ -18,6 +19,11 @@ public class Reload implements Subcommand { return List.of(); } + @Override + public String permission() { + return "nemsiseye.reload"; + } + @Override public String description() { return "Reloads the plugin configuration file."; diff --git a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Subcommand.java b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Subcommand.java index cc25614..3678494 100644 --- a/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Subcommand.java +++ b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Subcommand.java @@ -1,6 +1,7 @@ package io.github.adrianvic.nemesiseye.commands.sub; import org.bukkit.command.CommandSender; +import org.bukkit.permissions.Permission; import java.util.List; @@ -10,4 +11,8 @@ public interface Subcommand { @SuppressWarnings("SameReturnValue") boolean execute(CommandSender commandSender, String[] strings); List onTabComplete(CommandSender sender, String[] strings); + String permission(); + default boolean hasPermission(CommandSender sender) { + return sender.hasPermission(permission()); + } } \ No newline at end of file diff --git a/src/r1_21/resources/plugin.yml b/src/r1_21/resources/plugin.yml index da9278b..07679ff 100644 --- a/src/r1_21/resources/plugin.yml +++ b/src/r1_21/resources/plugin.yml @@ -7,4 +7,13 @@ website: "https://github.io/adrianvic/NemesisEye" description: "Change what players can do based in custom criteria." commands: eye: - usage: "/eye