diff --git a/.idea/misc.xml b/.idea/misc.xml index 64de3b3..5ccf79a 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -6,6 +6,9 @@ + + + diff --git a/.idea/modules.xml b/.idea/modules.xml index 17cfd2c..69c241a 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -4,6 +4,8 @@ + + diff --git a/.idea/modules/EventCore.main.iml b/.idea/modules/EventCore.main.iml index f5de878..32d39f8 100644 --- a/.idea/modules/EventCore.main.iml +++ b/.idea/modules/EventCore.main.iml @@ -10,4 +10,8 @@ + + + + \ No newline at end of file diff --git a/.idea/modules/EventCore.test.iml b/.idea/modules/EventCore.test.iml new file mode 100644 index 0000000..c462275 --- /dev/null +++ b/.idea/modules/EventCore.test.iml @@ -0,0 +1,12 @@ + + + + + + + ADVENTURE + + + + + \ No newline at end of file diff --git a/.idea/modules/intelij.EventCore.main.iml b/.idea/modules/intelij.EventCore.main.iml new file mode 100644 index 0000000..bbeeb3e --- /dev/null +++ b/.idea/modules/intelij.EventCore.main.iml @@ -0,0 +1,14 @@ + + + + + + + PAPER + ADVENTURE + + 1 + + + + \ No newline at end of file diff --git a/.idea/modules/intelij.EventCore.test.iml b/.idea/modules/intelij.EventCore.test.iml new file mode 100644 index 0000000..a376b96 --- /dev/null +++ b/.idea/modules/intelij.EventCore.test.iml @@ -0,0 +1,13 @@ + + + + + + + ADVENTURE + + 1 + + + + \ No newline at end of file diff --git a/.idea/modules/lol.aabss.EventCore.main.iml b/.idea/modules/lol.aabss.EventCore.main.iml new file mode 100644 index 0000000..bbeeb3e --- /dev/null +++ b/.idea/modules/lol.aabss.EventCore.main.iml @@ -0,0 +1,14 @@ + + + + + + + PAPER + ADVENTURE + + 1 + + + + \ No newline at end of file diff --git a/.idea/modules/lol.aabss.EventCore.test.iml b/.idea/modules/lol.aabss.EventCore.test.iml new file mode 100644 index 0000000..a376b96 --- /dev/null +++ b/.idea/modules/lol.aabss.EventCore.test.iml @@ -0,0 +1,13 @@ + + + + + + + ADVENTURE + + 1 + + + + \ No newline at end of file diff --git a/src/main/java/lol/aabss/eventcore/EventCore.java b/src/main/java/lol/aabss/eventcore/EventCore.java index ad4b344..5e68b4a 100644 --- a/src/main/java/lol/aabss/eventcore/EventCore.java +++ b/src/main/java/lol/aabss/eventcore/EventCore.java @@ -17,8 +17,7 @@ import java.io.File; import java.io.IOException; -import java.util.ArrayList; -import java.util.Objects; +import java.util.*; import static lol.aabss.eventcore.hooks.UpdateChecker.UPDATE_CHECKER; @@ -27,9 +26,8 @@ public class EventCore extends JavaPlugin { public static EventCore instance; - public ArrayList Alive = new ArrayList<>(); - public ArrayList Dead = new ArrayList<>(); - public ArrayList Recent = new ArrayList<>(); + public List Alive = new ArrayList<>(); + public List Recent = new ArrayList<>(); public File datafile; public FileConfiguration dataconfig; @@ -46,48 +44,39 @@ public void onEnable() { // Registering bStats new Metrics(this, 19718); - Objects.requireNonNull(getCommand("alivelist")).setExecutor(new AliveList()); - Objects.requireNonNull(getCommand("clearalive")).setExecutor(new ClearAlive()); - Objects.requireNonNull(getCommand("givealive")).setExecutor(new GiveAlive()); - Objects.requireNonNull(getCommand("healalive")).setExecutor(new HealAlive()); - Objects.requireNonNull(getCommand("killalive")).setExecutor(new KillAlive()); - Objects.requireNonNull(getCommand("tpalive")).setExecutor(new TpAlive()); + new AliveList().register(); + new ClearAlive().register(); + new GiveAlive().register(); + new HealAlive().register(); + new KillAlive().register(); + new TpAlive().register(); // --- - Objects.requireNonNull(getCommand("cleardead")).setExecutor(new ClearDead()); - Objects.requireNonNull(getCommand("deadlist")).setExecutor(new DeadList()); - Objects.requireNonNull(getCommand("givedead")).setExecutor(new GiveDead()); - Objects.requireNonNull(getCommand("healdead")).setExecutor(new HealDead()); - Objects.requireNonNull(getCommand("killdead")).setExecutor(new KillDead()); - Objects.requireNonNull(getCommand("tpdead")).setExecutor(new TpDead()); + new DeadList().register(); + new ClearDead().register(); + new GiveDead().register(); + new HealDead().register(); + new KillDead().register(); + new TpDead().register(); // --- - Objects.requireNonNull(getCommand("balrevive")).setExecutor(new BalRevive()); - Objects.requireNonNull(getCommand("giverevive")).setExecutor(new GiveRevive()); - Objects.requireNonNull(getCommand("recentrev")).setExecutor(new RecentRev()); - Objects.requireNonNull(getCommand("revive")).setExecutor(new Revive()); - Objects.requireNonNull(getCommand("reviveall")).setExecutor(new ReviveAll()); - Objects.requireNonNull(getCommand("revivelate")).setExecutor(new ReviveLate()); - Objects.requireNonNull(getCommand("setrevive")).setExecutor(new SetRevive()); - Objects.requireNonNull(getCommand("togglerevive")).setExecutor(new ToggleRevive()); - Objects.requireNonNull(getCommand("takerevive")).setExecutor(new TakeRevive()); - Objects.requireNonNull(getCommand("unrevive")).setExecutor(new Unrevive()); - Objects.requireNonNull(getCommand("userevive")).setExecutor(new UseRevive()); + new BalRevive().register(); + new GiveRevive().register(); + new RecentRev().register(); + new Revive().register(); + new ReviveAll().register(); + new ReviveLate().register(); + new SetRevive().register(); + new TakeRevive().register(); + new ToggleRevive().register(); + new Unrevive().register(); + new UseRevive().register(); // --- - Objects.requireNonNull(getCommand("eventcore")).setExecutor(new MainCommand()); - Objects.requireNonNull(getCommand("mutechat")).setExecutor(new Mutechat()); - Objects.requireNonNull(getCommand("visibility")).setExecutor(new Visibility()); - - // Registering tab completions - Objects.requireNonNull(getCommand("givealive")).setTabCompleter(new GiveAlive()); - Objects.requireNonNull(getCommand("givedead")).setTabCompleter(new GiveDead()); - Objects.requireNonNull(getCommand("balrevive")).setTabCompleter(new BalRevive()); - Objects.requireNonNull(getCommand("giverevive")).setTabCompleter(new GiveRevive()); - Objects.requireNonNull(getCommand("revive")).setTabCompleter(new Revive()); - Objects.requireNonNull(getCommand("setrevive")).setTabCompleter(new SetRevive()); - Objects.requireNonNull(getCommand("takerevive")).setTabCompleter(new TakeRevive()); - Objects.requireNonNull(getCommand("visibility")).setTabCompleter(new Visibility()); + new MainCommand().register("eventcore"); + new Mutechat().register(); + new Visibility().register(); + // Registering PlaceholderAPI if(Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) { @@ -136,4 +125,26 @@ public void onDisable() { getLogger().info("EventCore disabled!"); } + public static String formatList(List list){ + List stringlist = new ArrayList<>(); + list.forEach(o -> stringlist.add(o.toString())); + Collections.sort(stringlist); + StringBuilder builder = new StringBuilder(); + int i = 0; + if (stringlist.size() == 1){ + return stringlist.get(0); + } + for (Object obj : stringlist){ + if (i == stringlist.size() - 1) { + builder.append(obj); + } else if (i == stringlist.size() - 2) { + builder.append(obj).append(" and "); + } else { + builder.append(obj).append(", "); + } + i++; + } + return builder.toString(); + } + } diff --git a/src/main/java/lol/aabss/eventcore/commands/Visibility.java b/src/main/java/lol/aabss/eventcore/commands/Visibility.java index 2ba6dd4..94a3f7b 100644 --- a/src/main/java/lol/aabss/eventcore/commands/Visibility.java +++ b/src/main/java/lol/aabss/eventcore/commands/Visibility.java @@ -2,7 +2,6 @@ import lol.aabss.eventcore.events.VisibilityEvent; import lol.aabss.eventcore.util.SimpleCommand; -import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -11,7 +10,6 @@ import java.util.List; import static lol.aabss.eventcore.EventCore.API; -import static lol.aabss.eventcore.EventCore.instance; import static lol.aabss.eventcore.util.Config.msg; public class Visibility implements SimpleCommand { diff --git a/src/main/java/lol/aabss/eventcore/commands/alive/AliveList.java b/src/main/java/lol/aabss/eventcore/commands/alive/AliveList.java index 4d0289c..227a31f 100644 --- a/src/main/java/lol/aabss/eventcore/commands/alive/AliveList.java +++ b/src/main/java/lol/aabss/eventcore/commands/alive/AliveList.java @@ -22,11 +22,11 @@ public boolean run(CommandSender sender, Command command, String[] args) { } if (names.size() == 1){ sender.sendMessage(msg("alivelist.one-player") - .replaceText(builder -> builder.matchLiteral("%alive%").replacement(String.valueOf(names)))); + .replaceText(builder -> builder.matchLiteral("%alive%").replacement(formatList(names)))); return true; } sender.sendMessage(msg("alivelist.players") - .replaceText(builder -> builder.matchLiteral("%alive%").replacement(String.valueOf(names))) + .replaceText(builder -> builder.matchLiteral("%alive%").replacement(formatList(names))) .replaceText(builder -> builder.matchLiteral("%amount%").replacement(String.valueOf(names.size()))) ); return true; diff --git a/src/main/java/lol/aabss/eventcore/commands/dead/DeadList.java b/src/main/java/lol/aabss/eventcore/commands/dead/DeadList.java index f2be842..c5743f5 100644 --- a/src/main/java/lol/aabss/eventcore/commands/dead/DeadList.java +++ b/src/main/java/lol/aabss/eventcore/commands/dead/DeadList.java @@ -1,6 +1,5 @@ package lol.aabss.eventcore.commands.dead; - import lol.aabss.eventcore.util.SimpleCommand; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; @@ -9,6 +8,7 @@ import java.util.List; import static lol.aabss.eventcore.EventCore.API; +import static lol.aabss.eventcore.EventCore.formatList; import static lol.aabss.eventcore.util.Config.msg; public class DeadList implements SimpleCommand { @@ -23,11 +23,11 @@ public boolean run(CommandSender sender, Command command, String[] args) { } if (names.size() == 1){ sender.sendMessage(msg("deadlist.one-player") - .replaceText(builder -> builder.matchLiteral("%dead%").replacement(String.valueOf(names)))); + .replaceText(builder -> builder.matchLiteral("%dead%").replacement(formatList(names)))); return true; } sender.sendMessage(msg("deadlist.players") - .replaceText(builder -> builder.matchLiteral("%dead%").replacement(String.valueOf(names))) + .replaceText(builder -> builder.matchLiteral("%dead%").replacement(formatList(names))) .replaceText(builder -> builder.matchLiteral("%amount%").replacement(String.valueOf(names.size()))) ); return true; diff --git a/src/main/java/lol/aabss/eventcore/commands/revives/ToggleRevive.java b/src/main/java/lol/aabss/eventcore/commands/revives/ToggleRevive.java index fc169dc..46890fe 100644 --- a/src/main/java/lol/aabss/eventcore/commands/revives/ToggleRevive.java +++ b/src/main/java/lol/aabss/eventcore/commands/revives/ToggleRevive.java @@ -14,7 +14,7 @@ public class ToggleRevive implements SimpleCommand { @Override public boolean run(CommandSender sender, Command command, String[] args) { API.toggleRevives(); - sender.sendMessage(msg("togglerevive."+(REVIVES ? "enabled" : "disabled)"))); + sender.sendMessage(msg("togglerevive."+(REVIVES ? "enabled" : "disabled"))); return true; } } diff --git a/src/main/java/lol/aabss/eventcore/commands/revives/Unrevive.java b/src/main/java/lol/aabss/eventcore/commands/revives/Unrevive.java index 4023877..5593dcb 100644 --- a/src/main/java/lol/aabss/eventcore/commands/revives/Unrevive.java +++ b/src/main/java/lol/aabss/eventcore/commands/revives/Unrevive.java @@ -42,7 +42,7 @@ public boolean run(CommandSender sender, Command command, String[] args) { public List tabComplete(CommandSender sender, Command command, String[] args) { if (args.length == 1){ List completions = new ArrayList<>(); - API.getDead().forEach(player -> completions.add(player.getName())); + API.getAlive().forEach(player -> completions.add(player.getName())); return completions; } return null; diff --git a/src/main/java/lol/aabss/eventcore/hooks/UpdateChecker.java b/src/main/java/lol/aabss/eventcore/hooks/UpdateChecker.java index 4569e75..9fe8bda 100644 --- a/src/main/java/lol/aabss/eventcore/hooks/UpdateChecker.java +++ b/src/main/java/lol/aabss/eventcore/hooks/UpdateChecker.java @@ -1,7 +1,7 @@ package lol.aabss.eventcore.hooks; +import com.google.gson.JsonParser; import org.bukkit.command.CommandSender; -import org.json.JSONArray; import java.net.URI; import java.net.http.HttpClient; @@ -24,7 +24,7 @@ public static String latestVersion() { .build(); try { String body = httpClient.sendAsync(request, HttpResponse.BodyHandlers.ofString()).get().body(); - return new JSONArray(body).getJSONObject(0).getString("version_number"); + return JsonParser.parseString(body).getAsJsonArray().get(0).getAsJsonObject().get("version_number").getAsString(); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/src/main/java/lol/aabss/eventcore/util/EventCoreAPI.java b/src/main/java/lol/aabss/eventcore/util/EventCoreAPI.java index 32b4723..1e77b09 100644 --- a/src/main/java/lol/aabss/eventcore/util/EventCoreAPI.java +++ b/src/main/java/lol/aabss/eventcore/util/EventCoreAPI.java @@ -10,6 +10,7 @@ import org.bukkit.entity.Player; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import static lol.aabss.eventcore.EventCore.instance; @@ -24,15 +25,15 @@ public EventCoreAPI(EventCore plugin) { } public boolean isAlive(Player p) { - return plugin.Alive.contains(p); + return getAlive().contains(p); } public boolean isDead(Player p) { - return plugin.Dead.contains(p); + return getDead().contains(p); } public boolean isRecentlyDead(Player p) { - return plugin.Recent.contains(p); + return getRecentlyDead().contains(p); } public List getAlive() { @@ -40,7 +41,11 @@ public List getAlive() { } public List getDead() { - return plugin.Dead; + List players = new ArrayList<>(Bukkit.getOnlinePlayers()); + players.forEach(player -> { + if (getAlive().contains(player)) players.remove(player); + }); + return players; } public List getRecentlyDead() { @@ -91,21 +96,18 @@ public void revive(Player p, Location location) { public void revive(Player p) { new ReviveEvent(p, Bukkit.getConsoleSender()).callEvent(); - plugin.Dead.remove(p); plugin.Recent.remove(p); plugin.Alive.add(p); } public void revive(Player revived, Player reviver, boolean teleport) { new ReviveEvent(revived, reviver).callEvent(); - plugin.Dead.remove(revived); plugin.Recent.remove(revived); plugin.Alive.add(revived); if (teleport) revived.teleport(reviver); } public void unrevive(Player p, boolean kill) { - plugin.Dead.add(p); plugin.Recent.remove(p); plugin.Alive.remove(p); if (kill) p.setHealth(0); diff --git a/src/main/java/lol/aabss/eventcore/util/Listeners.java b/src/main/java/lol/aabss/eventcore/util/Listeners.java index 025a41a..4c717ec 100644 --- a/src/main/java/lol/aabss/eventcore/util/Listeners.java +++ b/src/main/java/lol/aabss/eventcore/util/Listeners.java @@ -22,7 +22,6 @@ public class Listeners implements org.bukkit.event.Listener { public void onLeave(PlayerQuitEvent event){ Player p = event.getPlayer(); API.getAlive().remove(p); - API.getDead().remove(p); for (Player player : Visibility.VisStaff){ player.showPlayer(instance, p); } @@ -35,7 +34,6 @@ public void onLeave(PlayerQuitEvent event){ public void onJoin(PlayerJoinEvent event){ Player p = event.getPlayer(); API.getAlive().remove(event.getPlayer()); - API.getDead().add(event.getPlayer()); if (UPDATE_CHECKER && p.hasPermission("eventcore.admin")){ UpdateChecker.updateCheck(p); } @@ -55,8 +53,6 @@ public void onJoin(PlayerJoinEvent event){ public void onDeath(PlayerDeathEvent event){ if (API.isAlive(event.getPlayer())){ API.getAlive().remove(event.getEntity()); - API.getDead().remove(event.getEntity()); - API.getDead().add(event.getEntity()); if (!API.isRecentlyDead(event.getPlayer())){ API.getRecentlyDead().add(event.getEntity()); Bukkit.getScheduler().runTaskLater(EventCore.getPlugin(EventCore.class), () -> diff --git a/src/main/java/lol/aabss/eventcore/util/SimpleCommand.java b/src/main/java/lol/aabss/eventcore/util/SimpleCommand.java index aad7903..9e0c83e 100644 --- a/src/main/java/lol/aabss/eventcore/util/SimpleCommand.java +++ b/src/main/java/lol/aabss/eventcore/util/SimpleCommand.java @@ -6,22 +6,42 @@ package lol.aabss.eventcore.util; import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; +import org.bukkit.command.PluginCommand; import org.bukkit.command.TabExecutor; +import org.bukkit.permissions.Permission; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; +import static lol.aabss.eventcore.EventCore.instance; import static lol.aabss.eventcore.util.Config.msg; public interface SimpleCommand extends TabExecutor { + default void register(){ + register(this.getClass().getSimpleName().toLowerCase()); + } + + default void register(String name){ + PluginCommand cmd = instance.getCommand(name); + if (cmd != null){ + cmd.setExecutor(this); + cmd.setTabCompleter(this); + } + if (Bukkit.getPluginManager().getPermission(this.permission()) == null) { + Bukkit.getPluginManager().addPermission(new Permission(this.permission())); + } + } + + @Override default boolean onCommand(@NotNull CommandSender sender, org.bukkit.command.@NotNull Command command, @NotNull String label, @NotNull String[] args) { if (!sender.hasPermission(permission())) { - sender.sendMessage(permissionMessage()); + sender.sendMessage(msg("permission-message")); return true; } return run(sender, command, args); @@ -35,7 +55,7 @@ default List onTabComplete(@NotNull CommandSender sender, org.bukkit.com if (args.length == 0 || tabs == null || tabs.isEmpty()) { return completions; } - String arg = args[args.length - 1].toLowerCase(); + String arg = args[args.length-1].toLowerCase(); for (String s : tabs) { if (s.toLowerCase().startsWith(arg)) { completions.add(s); diff --git a/src/main/resources/lang/default.lang b/src/main/resources/lang/default.lang index b309a5b..5484638 100644 --- a/src/main/resources/lang/default.lang +++ b/src/main/resources/lang/default.lang @@ -1,4 +1,4 @@ -version: 2.1 +version: 2.2 types: visibilitystate: visibility ?state¦s @a diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index c9f5335..40af90b 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: EventCore -version: '2.1' +version: '2.2' main: lol.aabss.eventcore.EventCore api-version: '1.13' authors: @@ -16,6 +16,7 @@ commands: aliases: [event] description: "Main command for EventCore" revive: + aliases: rev description: "Revive a player." permission: eventcore.command.revive reviveall: