From 0b04c0553a8b196b9d93f3fcc21989f26eadedb0 Mon Sep 17 00:00:00 2001 From: adrian Date: Mon, 15 Dec 2025 02:09:09 -0300 Subject: [PATCH] Add sendCommand() on Glimmer because beta does not break line on sendMessage() line break. Subcommands are now mapped in the class Commands. Add usage() and description() to Subcommand. Add help command. --- README.md | 7 ++- .../adrianvic/nemesiseye/impl/b1_7_3.java | 9 ++++ .../nemesiseye/commands/Commands.java | 26 ++++++++++ .../nemesiseye/commands/EyeCore.java | 25 ++++------ .../commands/sub/CurrentPolicies.java | 15 ++++-- .../nemesiseye/commands/sub/Help.java | 47 +++++++++++++++++++ .../nemesiseye/commands/sub/ListPolicies.java | 16 ++++--- .../nemesiseye/commands/sub/PolicyInfo.java | 19 ++++++-- .../nemesiseye/commands/sub/Reload.java | 10 ++-- .../nemesiseye/commands/sub/Subcommand.java | 3 +- .../nemesiseye/reflection/Glimmer.java | 15 ++++-- .../adrianvic/nemesiseye/impl/r1_21.java | 6 +++ 12 files changed, 154 insertions(+), 44 deletions(-) create mode 100644 src/main/java/io/github/adrianvic/nemesiseye/commands/Commands.java create mode 100644 src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Help.java diff --git a/README.md b/README.md index 4d8a7bf..7223155 100644 --- a/README.md +++ b/README.md @@ -3,13 +3,12 @@ [![Build status badge](https://github.com/adrianvic/NemesisEye/actions/workflows/build.yml/badge.svg)](https://github.com/adrianvic/NemesisEye/actions/workflows/build.yml) ![Modrinth link](https://img.shields.io/badge/Modrinth-Black?style=social&logo=Modrinth&logoColor=green&link=https%3A%2F%2Fmodrinth.com%2Fplugin%2Feye-of-nemesis%2F) +> [!IMPORTANT] +> This project is in a early stage, please report any bug you find. + # Eye of Nemesis Eye of Nemesis is a plugin that allows server admins to write policies that will deny or allow (black/whitelist) players to do specific things based on the value of nodes. -## Warnings -- This plugin is in a very early stage. -- Even though running `/eye` will tell you to run `/eye help` to list all available commands, this is not implemented yet, however all commands are available as tab-complete of `/eye`. - ## Motivations I made this plugin as an effort to preserve a village from my private server. Originally from beta 1.7.3 Betalands server, then transferred to RetroMC, and then finally we downloaded the chunks to merge into our server, I was afraid it would not have the same feeling after all the updates, so I had the idea to make a plugin that can block the newer features. diff --git a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/b1_7_3.java b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/b1_7_3.java index 68783b1..7ef72cf 100644 --- a/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/b1_7_3.java +++ b/src/b1_7_3/java/io/github/adrianvic/nemesiseye/impl/b1_7_3.java @@ -7,6 +7,7 @@ import io.github.adrianvic.nemesiseye.policy.PolicyParsers; import io.github.adrianvic.nemesiseye.policy.policies.LocationPolicy; import io.github.adrianvic.nemesiseye.reflection.Glimmer; import org.bukkit.World; +import org.bukkit.command.CommandSender; import org.bukkit.entity.HumanEntity; import org.bukkit.event.Event; import org.bukkit.inventory.ItemStack; @@ -89,6 +90,14 @@ public class b1_7_3 implements Glimmer { return entity.getItemInHand(); } + @Override + public void sendMessage(CommandSender commandSender, String text) { + String[] lines = text.split("\\r?\\n"); + for (String line : lines) { + commandSender.sendMessage(line); + } + } + @Override public boolean hasItemMeta(ItemStack item) { return false; diff --git a/src/main/java/io/github/adrianvic/nemesiseye/commands/Commands.java b/src/main/java/io/github/adrianvic/nemesiseye/commands/Commands.java new file mode 100644 index 0000000..cc5e497 --- /dev/null +++ b/src/main/java/io/github/adrianvic/nemesiseye/commands/Commands.java @@ -0,0 +1,26 @@ +package io.github.adrianvic.nemesiseye.commands; + +import io.github.adrianvic.nemesiseye.commands.sub.*; + +import java.util.HashMap; +import java.util.Map; + +public class Commands { + private static final Map commands = new HashMap<>(); + + static { + commands.put("help", new Help()); + commands.put("listpolicies", new ListPolicies()); + commands.put("currentpolicies", new CurrentPolicies()); + commands.put("policyinfo", new PolicyInfo()); + commands.put("reload", new Reload()); + } + + public static Map getAll() { + return commands; + } + + public static Subcommand get(String type) { + return commands.get(type); + } +} 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 38be35b..542bdc0 100644 --- a/src/main/java/io/github/adrianvic/nemesiseye/commands/EyeCore.java +++ b/src/main/java/io/github/adrianvic/nemesiseye/commands/EyeCore.java @@ -2,33 +2,26 @@ 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 io.github.adrianvic.nemesiseye.commands.Commands; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import java.util.*; public class EyeCore { - public final Map subs = new HashMap<>(); + private final Glimmer glim = Nemesis.getInstance().getGlimmer(); - public EyeCore() { - register(new Reload()); - register(new ListPolicies()); - register(new PolicyInfo()); - register(new CurrentPolicies()); - } - - private void register(Subcommand sub) { - subs.put(sub.name(), sub); - } + public EyeCore() {} public boolean onCommand(CommandSender commandSender, Command command, String s, String [] strings) { if (strings.length == 0) { - commandSender.sendMessage(""" + glim.sendMessage(commandSender, """ Eye of Nemesis version %s Usage: '/eye ' Use '/eye help' for a list of available commands """.formatted(Nemesis.getInstance().getDescription().getVersion())); } else { - Subcommand sub = subs.get(strings[0].toLowerCase()); + Subcommand sub = Commands.get(strings[0].toLowerCase()); if (sub == null) { commandSender.sendMessage("Unknown command, try '/eye help' to list available commands."); return true; @@ -40,14 +33,12 @@ public class EyeCore { public List onTabComplete(CommandSender commandSender, Command command, String s, String [] strings) { if (strings.length == 1) { - return new ArrayList<>(subs.keySet()); + return new ArrayList<>(Commands.getAll().keySet()); } - Subcommand sub = subs.get(strings[0].toLowerCase()); + Subcommand sub = Commands.get(strings[0].toLowerCase()); if (sub != null) { return sub.onTabComplete(commandSender, Arrays.copyOfRange(strings, 1, strings.length)); } return List.of(); } - - public Map getSubs() { return subs; } } 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 09fa798..ba77e73 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 @@ -9,11 +9,6 @@ import java.util.ArrayList; import java.util.List; public class CurrentPolicies implements Subcommand { - @Override - public String name() { - return "currentpolicies"; - } - @Override public boolean execute(CommandSender commandSender, String[] args) { List policies = Validator.getPoliciesForEntity((HumanEntity) commandSender); @@ -34,4 +29,14 @@ public class CurrentPolicies implements Subcommand { public List onTabComplete(CommandSender sender, String[] args) { return List.of(); } + + @Override + public String description() { + return "Lists policies appliying to you."; + } + + @Override + public String usage() { + return ""; + } } 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 new file mode 100644 index 0000000..2ef436e --- /dev/null +++ b/src/main/java/io/github/adrianvic/nemesiseye/commands/sub/Help.java @@ -0,0 +1,47 @@ +package io.github.adrianvic.nemesiseye.commands.sub; + +import io.github.adrianvic.nemesiseye.Nemesis; +import io.github.adrianvic.nemesiseye.commands.Commands; +import io.github.adrianvic.nemesiseye.reflection.Glimmer; +import org.bukkit.command.CommandSender; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class Help implements Subcommand { + private final Glimmer glim = Nemesis.getInstance().getGlimmer(); + + @Override + public boolean execute(CommandSender commandSender, String[] strings) { + List rstr = new ArrayList<>(); + Map allSubcommands = Commands.getAll(); + if (allSubcommands.isEmpty()) { + 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())); + } + + glim.sendMessage(commandSender, String.join("\n", rstr)); + return true; + } + + @Override + public List onTabComplete(CommandSender sender, String[] strings) { + return List.of(); + } + + @Override + public String description() { + return "Lists all commands."; + } + + @Override + public String usage() { + return ""; + } +} 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 cb866a1..bc1a028 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 @@ -8,12 +8,6 @@ import java.util.ArrayList; import java.util.List; public class ListPolicies implements Subcommand { - - @Override - public String name() { - return "listpolicies"; - } - @Override public boolean execute(CommandSender commandSender, String[] args) { List rstr = new ArrayList<>(); @@ -28,4 +22,14 @@ public class ListPolicies implements Subcommand { public List onTabComplete(CommandSender sender, String[] args) { return List.of(); } + + @Override + public String description() { + return "Lists all loaded policies."; + } + + @Override + public String usage() { + return ""; + } } 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 20576cf..e2632b5 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 @@ -1,24 +1,23 @@ package io.github.adrianvic.nemesiseye.commands.sub; import io.github.adrianvic.nemesiseye.Config; +import io.github.adrianvic.nemesiseye.Nemesis; import io.github.adrianvic.nemesiseye.policy.Policy; +import io.github.adrianvic.nemesiseye.reflection.Glimmer; import org.bukkit.command.CommandSender; import java.util.ArrayList; import java.util.List; public class PolicyInfo implements Subcommand { - @Override - public String name() { - return "policyinfo"; - } + private final Glimmer glim = Nemesis.getInstance().getGlimmer(); @Override public boolean execute(CommandSender commandSender, String[] strings) { List policies = Config.getInstance().getPolicies(); for (Policy policy : policies) { if (policy.name().equals(strings[0])) { - commandSender.sendMessage(String.format(""" + glim.sendMessage(commandSender, String.format(""" Showing info for policy "%s": Type: %s Nodes: %s @@ -37,4 +36,14 @@ public class PolicyInfo implements Subcommand { } return rstr; } + + @Override + public String description() { + return "Shows info for a specified policy."; + } + + @Override + public String usage() { + return ""; + } } 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 23f1659..48800b6 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 @@ -6,7 +6,6 @@ import org.bukkit.command.CommandSender; import java.util.List; public class Reload implements Subcommand { - @Override public boolean execute(CommandSender commandSender, String [] strings) { Config.getInstance().load(); @@ -20,7 +19,12 @@ public class Reload implements Subcommand { } @Override - public String name() { - return "reload"; + public String description() { + return "Reloads the plugin configuration file."; + } + + @Override + public String usage() { + return ""; } } 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 1ea9426..cc25614 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 @@ -5,7 +5,8 @@ import org.bukkit.command.CommandSender; import java.util.List; public interface Subcommand { - String name(); + String description(); + String usage(); @SuppressWarnings("SameReturnValue") boolean execute(CommandSender commandSender, String[] strings); List onTabComplete(CommandSender sender, String[] strings); diff --git a/src/main/java/io/github/adrianvic/nemesiseye/reflection/Glimmer.java b/src/main/java/io/github/adrianvic/nemesiseye/reflection/Glimmer.java index 2509e39..69f5fff 100644 --- a/src/main/java/io/github/adrianvic/nemesiseye/reflection/Glimmer.java +++ b/src/main/java/io/github/adrianvic/nemesiseye/reflection/Glimmer.java @@ -3,6 +3,7 @@ package io.github.adrianvic.nemesiseye.reflection; import io.github.adrianvic.nemesiseye.policy.Policy; import org.bukkit.Location; import org.bukkit.World; +import org.bukkit.command.CommandSender; import org.bukkit.entity.HumanEntity; import org.bukkit.inventory.ItemStack; import org.bukkit.util.Vector; @@ -12,15 +13,23 @@ import java.util.List; import java.util.Map; public interface Glimmer { + void onLoad(); + + List getWorlds(); + + // Configuration File loadConfigFile(); List loadPoliciesFromFile(File file); List getApplyingPoliciesForEntity(HumanEntity entity, List policies); - void onLoad(); - ItemStack getItemInMainHandHumanEntity(HumanEntity entity); + + // Items boolean hasItemMeta(ItemStack item); - List getWorlds(); boolean hasEnchantment(ItemStack item, Map valuesmap); boolean hasAnyEnchantment(ItemStack itemStack); + ItemStack getItemInMainHandHumanEntity(HumanEntity entity); + + // Commands + void sendMessage(CommandSender commandSender, String text); class Box { public final double x1, y1, z1, x2, y2, z2; diff --git a/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/r1_21.java b/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/r1_21.java index 2d735eb..b406742 100644 --- a/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/r1_21.java +++ b/src/r1_21/java/io/github/adrianvic/nemesiseye/impl/r1_21.java @@ -8,6 +8,7 @@ import io.github.adrianvic.nemesiseye.policy.policies.LocationPolicy; import io.github.adrianvic.nemesiseye.reflection.Glimmer; import org.bukkit.Bukkit; import org.bukkit.World; +import org.bukkit.command.CommandSender; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.enchantments.Enchantment; import org.bukkit.entity.HumanEntity; @@ -84,6 +85,11 @@ public class r1_21 implements Glimmer { return entity.getInventory().getItemInMainHand(); } + @Override + public void sendMessage(CommandSender commandSender, String text) { + commandSender.sendMessage(text); + } + @Override public boolean hasItemMeta(ItemStack item) { return item.getItemMeta() != null;