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;