From 73772df8ee83ed4727da4d1abd1a4e46b1091ccf Mon Sep 17 00:00:00 2001 From: iTheTrollIdk Date: Mon, 23 Nov 2020 03:21:20 -0600 Subject: [PATCH] Command update --- .../me/heyimblake/proxyparty/ProxyParty.java | 39 ++-- .../commands/AnnotatedPartySubCommand.java | 37 ---- ...cutor.java => PartyAnnotationCommand.java} | 6 +- .../proxyparty/commands/PartyCommand.java | 168 +++++++++--------- ...mmandHandler.java => PartySubCommand.java} | 31 ++-- .../subcommands/AcceptSubCommand.java | 35 ++-- .../commands/subcommands/ChatSubCommand.java | 45 +++-- .../commands/subcommands/DenySubCommand.java | 41 ++--- .../subcommands/DisbandSubCommand.java | 35 ++-- .../commands/subcommands/FindSubCommand.java | 39 ++-- .../subcommands/InviteSubCommand.java | 51 +++--- .../subcommands/InvitedSubCommand.java | 35 ++-- .../commands/subcommands/KickSubCommand.java | 41 ++--- .../commands/subcommands/LeaveSubCommand.java | 31 ++-- .../commands/subcommands/ListSubCommand.java | 38 ++-- .../subcommands/PromoteSubCommand.java | 38 ++-- .../subcommands/RetractSubCommand.java | 39 ++-- .../subcommands/ToggleSubCommand.java | 40 +++-- .../commands/subcommands/WarpSubCommand.java | 28 +-- .../events/PartyAcceptInviteEvent.java | 4 +- .../proxyparty/events/PartyCreateEvent.java | 2 +- .../events/PartyDenyInviteEvent.java | 4 +- .../proxyparty/events/PartyDisbandEvent.java | 2 +- .../proxyparty/events/PartyKickEvent.java | 4 +- .../events/PartyPlayerJoinEvent.java | 4 +- .../events/PartyPlayerQuitEvent.java | 4 +- .../proxyparty/events/PartyPromoteEvent.java | 5 +- .../events/PartyRetractInviteEvent.java | 4 +- .../events/PartySendInviteEvent.java | 4 +- .../proxyparty/events/PartyWarpEvent.java | 2 +- .../listeners/PlayerChatListener.java | 16 +- .../listeners/PlayerServerSwitchListener.java | 13 +- .../proxyparty/partyutils/Party.java | 71 ++++++-- .../proxyparty/partyutils/PartyCreator.java | 81 --------- .../proxyparty/partyutils/PartyManager.java | 12 +- .../proxyparty/partyutils/PartyRole.java | 5 +- .../proxyparty/partyutils/PartySetting.java | 20 ++- .../proxyparty/utils/ActionLogEntry.java | 15 +- .../proxyparty/utils/CommandConditions.java | 8 +- .../proxyparty/utils/ConfigManager.java | 18 +- 40 files changed, 492 insertions(+), 623 deletions(-) delete mode 100644 src/main/java/me/heyimblake/proxyparty/commands/AnnotatedPartySubCommand.java rename src/main/java/me/heyimblake/proxyparty/commands/{PartySubCommandExecutor.java => PartyAnnotationCommand.java} (96%) rename src/main/java/me/heyimblake/proxyparty/commands/{PartySubCommandHandler.java => PartySubCommand.java} (61%) delete mode 100644 src/main/java/me/heyimblake/proxyparty/partyutils/PartyCreator.java diff --git a/src/main/java/me/heyimblake/proxyparty/ProxyParty.java b/src/main/java/me/heyimblake/proxyparty/ProxyParty.java index 8a1d47b..8a74f5a 100644 --- a/src/main/java/me/heyimblake/proxyparty/ProxyParty.java +++ b/src/main/java/me/heyimblake/proxyparty/ProxyParty.java @@ -10,7 +10,6 @@ import net.md_5.bungee.api.plugin.Plugin; import java.io.*; -import java.lang.reflect.Type; import java.util.List; import java.util.logging.Level; @@ -34,9 +33,13 @@ * @since 10/21/2016 */ public final class ProxyParty extends Plugin { + private static ProxyParty instance; + private boolean loggingEnabled = true; - private String logFileName = "log.json"; + + private final String logFileName = "log.json"; + private File logFile; private ConfigManager configManager; @@ -78,18 +81,22 @@ private void registerListeners() { } private void setupLogFile() { - if (!getDataFolder().exists()) - getDataFolder().mkdir(); + if (!getDataFolder().exists()) getDataFolder().mkdir(); + logFile = new File(getDataFolder().getPath(), logFileName); + if (!logFile.exists()) { try { - logFile.createNewFile(); + if (!logFile.createNewFile()) return; + try (InputStream is = getResourceAsStream(logFileName); OutputStream os = new FileOutputStream(logFile)) { ByteStreams.copy(is, os); + os.close(); is.close(); - getLogger().log(Level.INFO, logFileName + " was created with no issues!"); + + this.getLogger().log(Level.INFO, logFileName + " was created with no issues!"); } } catch (IOException e) { e.printStackTrace(); @@ -98,16 +105,18 @@ private void setupLogFile() { } return; } - if (!loggingEnabled) - return; - getLogger().log(Level.INFO, "Detected " + logFileName + "."); + + if (!loggingEnabled) return; + + this.getLogger().log(Level.INFO, "Detected " + logFileName + "."); + try { Gson gson = new Gson(); - List entires; - Type type = new TypeToken>() { - }.getType(); - entires = gson.fromJson(new FileReader(logFile), type); - entires.forEach(actionLogEntry -> ActionLogEntry.savedEntries.add(actionLogEntry)); + + List entires = gson.fromJson(new FileReader(logFile), new TypeToken>() {}.getType()); + + ActionLogEntry.savedEntries.addAll(entires); + getLogger().log(Level.INFO, "Imported old actions from " + logFileName + "."); } catch (FileNotFoundException e) { //Not really possible as it's created/verified above, but oh well, here's a catch block! @@ -129,4 +138,4 @@ public String getLogFileName() { public ConfigManager getConfigManager() { return configManager; } -} +} \ No newline at end of file diff --git a/src/main/java/me/heyimblake/proxyparty/commands/AnnotatedPartySubCommand.java b/src/main/java/me/heyimblake/proxyparty/commands/AnnotatedPartySubCommand.java deleted file mode 100644 index 2b182dd..0000000 --- a/src/main/java/me/heyimblake/proxyparty/commands/AnnotatedPartySubCommand.java +++ /dev/null @@ -1,37 +0,0 @@ -package me.heyimblake.proxyparty.commands; - - -/** - * Copyright (C) 2017 heyimblake - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * @author heyimblake - * @since 10/22/2016 - */ -public abstract class AnnotatedPartySubCommand { - private PartySubCommandHandler handler; - - public AnnotatedPartySubCommand(PartySubCommandHandler handler) { - this.handler = handler; - } - - public abstract void runProxiedPlayer(); - - public abstract void runConsole(); - - public PartySubCommandHandler getHandler() { - return this.handler; - } -} diff --git a/src/main/java/me/heyimblake/proxyparty/commands/PartySubCommandExecutor.java b/src/main/java/me/heyimblake/proxyparty/commands/PartyAnnotationCommand.java similarity index 96% rename from src/main/java/me/heyimblake/proxyparty/commands/PartySubCommandExecutor.java rename to src/main/java/me/heyimblake/proxyparty/commands/PartyAnnotationCommand.java index c1fd66b..7bf1511 100644 --- a/src/main/java/me/heyimblake/proxyparty/commands/PartySubCommandExecutor.java +++ b/src/main/java/me/heyimblake/proxyparty/commands/PartyAnnotationCommand.java @@ -24,13 +24,13 @@ @Documented @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) -public @interface PartySubCommandExecutor { +public @interface PartyAnnotationCommand { /** * The name of the subcommand. * * @return subcommand name */ - String subCommand(); + String name(); /** * The usage of the subcommand. @@ -66,4 +66,4 @@ * @return true if sender must be in a party, false otherwise */ boolean mustBeInParty() default true; -} +} \ No newline at end of file diff --git a/src/main/java/me/heyimblake/proxyparty/commands/PartyCommand.java b/src/main/java/me/heyimblake/proxyparty/commands/PartyCommand.java index 7278719..2a80cdb 100644 --- a/src/main/java/me/heyimblake/proxyparty/commands/PartyCommand.java +++ b/src/main/java/me/heyimblake/proxyparty/commands/PartyCommand.java @@ -10,9 +10,9 @@ import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Command; -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationTargetException; -import java.util.*; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; /** * Copyright (C) 2017 heyimblake @@ -35,24 +35,24 @@ */ public class PartyCommand extends Command { - private static Map> subCommandClasses = new HashMap<>(); + private final Map commands = new HashMap<>(); public PartyCommand() { super("party", null); - registerSubCommand(InviteSubCommand.class); - registerSubCommand(AcceptSubCommand.class); - registerSubCommand(DenySubCommand.class); - registerSubCommand(FindSubCommand.class); - registerSubCommand(ListSubCommand.class); - registerSubCommand(InvitedSubCommand.class); - registerSubCommand(RetractSubCommand.class); - registerSubCommand(KickSubCommand.class); - registerSubCommand(ChatSubCommand.class); - registerSubCommand(WarpSubCommand.class); - registerSubCommand(LeaveSubCommand.class); - registerSubCommand(PromoteSubCommand.class); - registerSubCommand(DisbandSubCommand.class); - registerSubCommand(ToggleSubCommand.class); + registerSubCommand(new InviteSubCommand()); + registerSubCommand(new AcceptSubCommand()); + registerSubCommand(new ChatSubCommand()); + registerSubCommand(new DenySubCommand()); + registerSubCommand(new DisbandSubCommand()); + registerSubCommand(new FindSubCommand()); + registerSubCommand(new InvitedSubCommand()); + registerSubCommand(new KickSubCommand()); + registerSubCommand(new LeaveSubCommand()); + registerSubCommand(new ListSubCommand()); + registerSubCommand(new PromoteSubCommand()); + registerSubCommand(new RetractSubCommand()); + registerSubCommand(new ToggleSubCommand()); + registerSubCommand(new WarpSubCommand()); } @Override @@ -62,51 +62,48 @@ public void execute(CommandSender sender, String[] args) { return; } ProxiedPlayer player = ((ProxiedPlayer) sender); - if (args.length > 0) { - PartySubCommandHandler handler = new PartySubCommandHandler(sender, Arrays.copyOfRange(args, 1, args.length)); - String subCMDInput = args[0]; - for (String key : subCommandClasses.keySet()) { - Class clazz = subCommandClasses.get(key); - if (key.equalsIgnoreCase(subCMDInput)) { - if (PartyRole.getRoleOf(player) == PartyRole.PARTICIPANT && getSubCommandClassAnnotation(clazz).leaderExclusive()) { - player.sendMessage(Constants.TAG, new ComponentBuilder("You must be the party leader in order to do this.").color(ChatColor.RED).create()[0]); - return; - } - PartySubCommandExecutor partySubCommandExecutor = getSubCommandClassAnnotation(clazz); - if (handler.getArguments().length == 0 && getSubCommandClassAnnotation(clazz).requiresArgumentCompletion()) { - player.sendMessage(Constants.TAG, new TextComponent("Usage: "), - new ComponentBuilder(partySubCommandExecutor.syntax()).color(ChatColor.AQUA) - .event(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/party " + partySubCommandExecutor.subCommand() + " ")) - .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new BaseComponent[]{new TextComponent(ChatColor.YELLOW + "Click to prepare command.")})) - .create()[0]); - return; - } - if (PartyManager.getInstance().getPartyOf(player) == null && partySubCommandExecutor.mustBeInParty()) { - player.sendMessage(Constants.TAG, new ComponentBuilder("You must be in a party to do this!").color(ChatColor.RED).create()[0]); - return; - } - performSubCommand(clazz, handler); - return; - } - } + + if (args.length <= 0) { showHelpMessage(player); + return; } - showHelpMessage(player); - } - private void performSubCommand(Class clazz, PartySubCommandHandler handler) { - try { - Constructor constructor = clazz.getConstructor(handler.getClass()); - AnnotatedPartySubCommand subCommandInstance = (AnnotatedPartySubCommand) constructor.newInstance(handler); - if (handler.isSenderProxiedPlayer()) { - subCommandInstance.runProxiedPlayer(); - } else { - subCommandInstance.runConsole(); - } - } catch (NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e) { - e.printStackTrace(); + String[] newArgs = Arrays.copyOfRange(args, 1, args.length); + + PartySubCommand subCommand = this.getCommand(args[0]); + + if (subCommand == null) { + showHelpMessage(player); + + return; } + + PartyAnnotationCommand annotations = subCommand.getAnnotations(); + + if (annotations == null) return; + + if (PartyRole.getRoleOf(player) == PartyRole.PARTICIPANT && annotations.leaderExclusive()) { + player.sendMessage(Constants.TAG, new ComponentBuilder("You must be the party leader in order to do this.").color(ChatColor.RED).create()[0]); + + return; + } + + if (newArgs.length == 0 && annotations.requiresArgumentCompletion()) { + player.sendMessage(Constants.TAG, new TextComponent("Usage: "), + new ComponentBuilder(annotations.syntax()).color(ChatColor.AQUA) + .event(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/party " + annotations.name() + " ")) + .event(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new BaseComponent[]{new TextComponent(ChatColor.YELLOW + "Click to prepare command.")})) + .create()[0]); + return; + } + + if (PartyManager.getInstance().getPartyOf(player) == null && annotations.mustBeInParty()) { + player.sendMessage(Constants.TAG, new ComponentBuilder("You must be in a party to do this!").color(ChatColor.RED).create()[0]); + return; + } + + subCommand.execute(player, newArgs); } @@ -114,58 +111,59 @@ private void showHelpMessage(ProxiedPlayer player) { TextComponent topMSG = new TextComponent("Party Commands:"); topMSG.setColor(ChatColor.LIGHT_PURPLE); topMSG.setBold(true); + player.sendMessage(topMSG); + TextComponent prepareMSG = new TextComponent("Click to prepare this command."); prepareMSG.setColor(ChatColor.YELLOW); prepareMSG.setItalic(true); + TextComponent pt1 = new TextComponent("" + '\u25CF' + " "); - for (Class clazz : subCommandClasses.values()) { - PartySubCommandExecutor annotatedPartySubCommand = getSubCommandClassAnnotation(clazz); + + for (PartySubCommand command : commands.values()) { + PartyAnnotationCommand annotations = command.getAnnotations(); + + if (annotations == null) continue; + //Bullet colors tell if the player can run the command or not. Just for a quick glance. ChatColor bulletColor = ChatColor.DARK_GREEN; - if (annotatedPartySubCommand.mustBeInParty()) { + + if (annotations.mustBeInParty()) { if (!PartyManager.getInstance().hasParty(player)) { bulletColor = ChatColor.DARK_RED; - } else { - if (annotatedPartySubCommand.leaderExclusive()) { - if (PartyRole.getRoleOf(player) != PartyRole.LEADER) - bulletColor = ChatColor.DARK_RED; - } + } else if (annotations.leaderExclusive()) { + if (PartyRole.getRoleOf(player) != PartyRole.LEADER) bulletColor = ChatColor.DARK_RED; } } + pt1.setColor(bulletColor); - TextComponent pt2 = new TextComponent(annotatedPartySubCommand.syntax()); + TextComponent pt2 = new TextComponent(annotations.syntax()); pt2.setColor(ChatColor.AQUA); pt2.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new BaseComponent[]{prepareMSG})); - pt2.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/party " + annotatedPartySubCommand.subCommand() + " ")); + pt2.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/party " + annotations.name() + " ")); + TextComponent pt3 = new TextComponent(" - "); pt3.setColor(ChatColor.DARK_GRAY); - TextComponent pt4 = new TextComponent(annotatedPartySubCommand.description()); + + TextComponent pt4 = new TextComponent(annotations.description()); pt4.setColor(ChatColor.GRAY); + player.sendMessage(pt1, pt2, pt3, pt4); } + player.sendMessage(new TextComponent(" ")); } - private void registerSubCommand(Class clazz) { - subCommandClasses.put(getSubCommandClassAnnotation(clazz).subCommand(), clazz); - } + private void registerSubCommand(PartySubCommand subCommand) { + PartyAnnotationCommand annotation = subCommand.getAnnotations(); - private Map> getSubCommandClasses() { - return subCommandClasses; + if (annotation == null) return; + + commands.put(annotation.name(), subCommand); } - /** - * Gets the Annotation of a AnnotatedPartySubCommand class. - * - * @param clazz the annotatedpartysubcommand class - * @return Annotation if it exists, null if invalid - */ - private PartySubCommandExecutor getSubCommandClassAnnotation(Class clazz) { - if (clazz.isAnnotationPresent(PartySubCommandExecutor.class)) { - return clazz.getAnnotation(PartySubCommandExecutor.class); - } - return null; + private PartySubCommand getCommand(String name) { + return commands.get(name.toLowerCase()); } } diff --git a/src/main/java/me/heyimblake/proxyparty/commands/PartySubCommandHandler.java b/src/main/java/me/heyimblake/proxyparty/commands/PartySubCommand.java similarity index 61% rename from src/main/java/me/heyimblake/proxyparty/commands/PartySubCommandHandler.java rename to src/main/java/me/heyimblake/proxyparty/commands/PartySubCommand.java index 544ae7c..940f67c 100644 --- a/src/main/java/me/heyimblake/proxyparty/commands/PartySubCommandHandler.java +++ b/src/main/java/me/heyimblake/proxyparty/commands/PartySubCommand.java @@ -1,5 +1,6 @@ package me.heyimblake.proxyparty.commands; + import net.md_5.bungee.api.CommandSender; import net.md_5.bungee.api.connection.ProxiedPlayer; @@ -22,24 +23,20 @@ * @author heyimblake * @since 10/22/2016 */ -public class PartySubCommandHandler { - private CommandSender commandSender; - private String[] arguments; +public abstract class PartySubCommand { - public PartySubCommandHandler(CommandSender commandSender, String[] arguments) { - this.commandSender = commandSender; - this.arguments = arguments; - } + public abstract void execute(ProxiedPlayer player, String[] args); - public CommandSender getCommandSender() { - return this.commandSender; - } - - public String[] getArguments() { - return this.arguments; - } + /** + * Gets the Annotation of a AnnotatedPartySubCommand class. + * + * @return Annotation if it exists, null if invalid + */ + public PartyAnnotationCommand getAnnotations() { + if (this.getClass().isAnnotationPresent(PartyAnnotationCommand.class)) { + return this.getClass().getAnnotation(PartyAnnotationCommand.class); + } - public boolean isSenderProxiedPlayer() { - return getCommandSender() instanceof ProxiedPlayer; + return null; } -} +} \ No newline at end of file diff --git a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/AcceptSubCommand.java b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/AcceptSubCommand.java index 958bbdd..da24b70 100644 --- a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/AcceptSubCommand.java +++ b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/AcceptSubCommand.java @@ -1,15 +1,15 @@ package me.heyimblake.proxyparty.commands.subcommands; import me.heyimblake.proxyparty.ProxyParty; -import me.heyimblake.proxyparty.commands.AnnotatedPartySubCommand; -import me.heyimblake.proxyparty.commands.PartySubCommandExecutor; -import me.heyimblake.proxyparty.commands.PartySubCommandHandler; +import me.heyimblake.proxyparty.commands.PartyAnnotationCommand; +import me.heyimblake.proxyparty.commands.PartySubCommand; import me.heyimblake.proxyparty.events.PartyAcceptInviteEvent; import me.heyimblake.proxyparty.partyutils.Party; import me.heyimblake.proxyparty.partyutils.PartyManager; import me.heyimblake.proxyparty.utils.CommandConditions; import me.heyimblake.proxyparty.utils.Constants; import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.connection.ProxiedPlayer; @@ -32,28 +32,19 @@ * @author heyimblake * @since 10/23/2016 */ -@PartySubCommandExecutor(subCommand = "accept", +@PartyAnnotationCommand(name = "accept", syntax = "/party accept ", description = "Accepts a party invitation from a player.", requiresArgumentCompletion = true, - leaderExclusive = false, mustBeInParty = false) -public class AcceptSubCommand extends AnnotatedPartySubCommand { +public class AcceptSubCommand extends PartySubCommand { - public AcceptSubCommand(PartySubCommandHandler handler) { - super(handler); - } - - @Override - public void runProxiedPlayer() { - ProxiedPlayer player = ((ProxiedPlayer) getHandler().getCommandSender()); - ProxiedPlayer target = ProxyParty.getInstance().getProxy().getPlayer(getHandler().getArguments()[0]); + public void execute(ProxiedPlayer player, String[] args) { + ProxiedPlayer target = ProxyServer.getInstance().getPlayer(args[0]); - if (!CommandConditions.checkTargetOnline(target, player)) - return; + if (!CommandConditions.checkTargetOnline(target, player)) return; - if (!CommandConditions.blockIfHasParty(player)) - return; + if (!CommandConditions.blockIfHasParty(player)) return; if (PartyManager.getInstance().getPartyOf(target) == null || !PartyManager.getInstance().getPartyOf(target).getLeader().getUniqueId().equals(target.getUniqueId())) { player.sendMessage(Constants.TAG, new ComponentBuilder("The specified player either is not in a party or is not the party leader.").color(ChatColor.RED).create()[0]); @@ -73,11 +64,7 @@ public void runProxiedPlayer() { ProxyParty.getInstance().getProxy().getPluginManager().callEvent(new PartyAcceptInviteEvent(party, player)); return; } - player.sendMessage(Constants.TAG, new ComponentBuilder("You have no pending invites for this party.").color(ChatColor.RED).create()[0]); - } - - @Override - public void runConsole() { + player.sendMessage(Constants.TAG, new ComponentBuilder("You have no pending invites for this party.").color(ChatColor.RED).create()[0]); } -} +} \ No newline at end of file diff --git a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/ChatSubCommand.java b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/ChatSubCommand.java index 89294d1..4fba944 100644 --- a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/ChatSubCommand.java +++ b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/ChatSubCommand.java @@ -1,8 +1,7 @@ package me.heyimblake.proxyparty.commands.subcommands; -import me.heyimblake.proxyparty.commands.AnnotatedPartySubCommand; -import me.heyimblake.proxyparty.commands.PartySubCommandExecutor; -import me.heyimblake.proxyparty.commands.PartySubCommandHandler; +import me.heyimblake.proxyparty.commands.PartyAnnotationCommand; +import me.heyimblake.proxyparty.commands.PartySubCommand; import me.heyimblake.proxyparty.partyutils.PartyManager; import me.heyimblake.proxyparty.partyutils.PartySetting; import me.heyimblake.proxyparty.utils.ActionLogEntry; @@ -32,39 +31,35 @@ * @author heyimblake * @since 10/21/2016 */ -@PartySubCommandExecutor(subCommand = "chat", +@PartyAnnotationCommand(name = "chat", syntax = "/party chat (Message)", description = "Sends a message to all party members, or toggles automatic party chat.", - requiresArgumentCompletion = false, - leaderExclusive = false, - mustBeInParty = true) -public class ChatSubCommand extends AnnotatedPartySubCommand { - - public ChatSubCommand(PartySubCommandHandler handler) { - super(handler); - } + requiresArgumentCompletion = false +) +public class ChatSubCommand extends PartySubCommand { @Override - public void runProxiedPlayer() { - ProxiedPlayer player = ((ProxiedPlayer) getHandler().getCommandSender()); - if (getHandler().getArguments().length == 0) { - player.sendMessage(Constants.TAG, new ComponentBuilder(!PartySetting.PARTY_CHAT_TOGGLE_ON.isEnabledFor(player) ? "All messages will now be sent to party chat." : "All messages will no longer be sent to party chat.") + public void execute(ProxiedPlayer player, String[] args) { + if (args.length == 0) { + player.sendMessage(Constants.TAG, + new ComponentBuilder(!PartySetting.PARTY_CHAT_TOGGLE_ON.isEnabledFor(player) ? "All messages will now be sent to party chat." : "All messages will no longer be sent to party chat.") .color(!PartySetting.PARTY_CHAT_TOGGLE_ON.isEnabledFor(player) ? ChatColor.GREEN : ChatColor.RED).create()[0]); - if (PartySetting.PARTY_CHAT_TOGGLE_ON.isEnabledFor(player)) + if (PartySetting.PARTY_CHAT_TOGGLE_ON.isEnabledFor(player)) { PartySetting.PARTY_CHAT_TOGGLE_ON.disable(player); - else + } else { PartySetting.PARTY_CHAT_TOGGLE_ON.enable(player); + } + return; } + final String[] message = {""}; - Arrays.stream(getHandler().getArguments()).forEach(string -> message[0] += string + " "); - PartyManager.getInstance().getPartyOf(player).sendMessage(player, message[0]); - new ActionLogEntry("chat", player.getUniqueId(), new String[]{message[0]}).log(); - } - @Override - public void runConsole() { + Arrays.stream(args).forEach(string -> message[0] += string + " "); + PartyManager.getInstance().getPartyOf(player).sendMessage(player, message[0]); + + new ActionLogEntry("chat", player.getUniqueId(), new String[]{message[0]}).log(); } -} +} \ No newline at end of file diff --git a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/DenySubCommand.java b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/DenySubCommand.java index 75503c8..c58aa6e 100644 --- a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/DenySubCommand.java +++ b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/DenySubCommand.java @@ -1,15 +1,15 @@ package me.heyimblake.proxyparty.commands.subcommands; import me.heyimblake.proxyparty.ProxyParty; -import me.heyimblake.proxyparty.commands.AnnotatedPartySubCommand; -import me.heyimblake.proxyparty.commands.PartySubCommandExecutor; -import me.heyimblake.proxyparty.commands.PartySubCommandHandler; +import me.heyimblake.proxyparty.commands.PartyAnnotationCommand; +import me.heyimblake.proxyparty.commands.PartySubCommand; import me.heyimblake.proxyparty.events.PartyDenyInviteEvent; import me.heyimblake.proxyparty.partyutils.Party; import me.heyimblake.proxyparty.partyutils.PartyManager; import me.heyimblake.proxyparty.utils.CommandConditions; import me.heyimblake.proxyparty.utils.Constants; import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.connection.ProxiedPlayer; @@ -32,42 +32,37 @@ * @author heyimblake * @since 10/23/2016 */ -@PartySubCommandExecutor(subCommand = "deny", +@PartyAnnotationCommand(name = "deny", syntax = "/party deny ", description = "Denies a party invitation from a player.", requiresArgumentCompletion = true, - leaderExclusive = false, mustBeInParty = false) -public class DenySubCommand extends AnnotatedPartySubCommand { - - public DenySubCommand(PartySubCommandHandler handler) { - super(handler); - } +public class DenySubCommand extends PartySubCommand { @Override - public void runProxiedPlayer() { - ProxiedPlayer player = ((ProxiedPlayer) getHandler().getCommandSender()); - ProxiedPlayer target = ProxyParty.getInstance().getProxy().getPlayer(getHandler().getArguments()[0]); + public void execute(ProxiedPlayer player, String[] args) { + ProxiedPlayer target = ProxyServer.getInstance().getPlayer(args[0]); - if (!CommandConditions.blockIfHasParty(player)) - return; + if (!CommandConditions.blockIfHasParty(player)) return; - if (PartyManager.getInstance().getPartyOf(target) == null || !PartyManager.getInstance().getPartyOf(target).getLeader().getUniqueId().equals(target.getUniqueId())) { + Party party = PartyManager.getInstance().getPartyOf(target); + + if (party == null || !party.getLeader().getUniqueId().equals(target.getUniqueId())) { player.sendMessage(Constants.TAG, new ComponentBuilder("The specified player either is not in a party or is not the party leader.").color(ChatColor.RED).create()[0]); + return; } - Party party = PartyManager.getInstance().getPartyOf(target); + if (!party.getInvited().contains(player)) { player.sendMessage(Constants.TAG, new ComponentBuilder("You are not invited to this party.").color(ChatColor.RED).create()[0]); + return; } + party.getInvited().remove(player); + ProxyParty.getInstance().getProxy().getPluginManager().callEvent(new PartyDenyInviteEvent(party, player)); + player.sendMessage(Constants.TAG, new ComponentBuilder(String.format("You declined %s's party invitation.", target.getName())).color(ChatColor.AQUA).create()[0]); } - - @Override - public void runConsole() { - - } -} +} \ No newline at end of file diff --git a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/DisbandSubCommand.java b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/DisbandSubCommand.java index 3a67850..5fc3969 100644 --- a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/DisbandSubCommand.java +++ b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/DisbandSubCommand.java @@ -1,14 +1,12 @@ package me.heyimblake.proxyparty.commands.subcommands; -import me.heyimblake.proxyparty.commands.AnnotatedPartySubCommand; -import me.heyimblake.proxyparty.commands.PartySubCommandExecutor; -import me.heyimblake.proxyparty.commands.PartySubCommandHandler; +import me.heyimblake.proxyparty.commands.PartyAnnotationCommand; +import me.heyimblake.proxyparty.commands.PartySubCommand; import me.heyimblake.proxyparty.partyutils.Party; import me.heyimblake.proxyparty.partyutils.PartyManager; import me.heyimblake.proxyparty.utils.Constants; import net.md_5.bungee.api.ChatColor; import net.md_5.bungee.api.chat.ComponentBuilder; -import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; /** @@ -30,32 +28,25 @@ * @author heyimblake * @since 10/21/2016 */ -@PartySubCommandExecutor(subCommand = "disband", +@PartyAnnotationCommand(name = "disband", syntax = "/party disband", description = "Disbands your party.", requiresArgumentCompletion = false, - leaderExclusive = true, - mustBeInParty = true) -public class DisbandSubCommand extends AnnotatedPartySubCommand { - - public DisbandSubCommand(PartySubCommandHandler handler) { - super(handler); - } + leaderExclusive = true) +public class DisbandSubCommand extends PartySubCommand { @Override - public void runProxiedPlayer() { - ProxiedPlayer player = ((ProxiedPlayer) getHandler().getCommandSender()); - if (!PartyManager.getInstance().hasParty(player)) { + public void execute(ProxiedPlayer player, String[] args) { + Party party = PartyManager.getInstance().getPartyOf(player); + + if (party == null) { player.sendMessage(Constants.TAG, new ComponentBuilder("You aren't in a party!").color(ChatColor.RED).create()[0]); + return; } - Party party = PartyManager.getInstance().getPartyOf(player); - party.disband(); - player.sendMessage(Constants.TAG, new ComponentBuilder("You disbanded the party.").color(ChatColor.YELLOW).create()[0]); - } - @Override - public void runConsole() { + party.disband(); + player.sendMessage(Constants.TAG, new ComponentBuilder("You disbanded the party.").color(ChatColor.YELLOW).create()[0]); } -} +} \ No newline at end of file diff --git a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/FindSubCommand.java b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/FindSubCommand.java index a6ddef0..9688b0c 100644 --- a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/FindSubCommand.java +++ b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/FindSubCommand.java @@ -1,16 +1,14 @@ package me.heyimblake.proxyparty.commands.subcommands; -import me.heyimblake.proxyparty.ProxyParty; -import me.heyimblake.proxyparty.commands.AnnotatedPartySubCommand; -import me.heyimblake.proxyparty.commands.PartySubCommandExecutor; -import me.heyimblake.proxyparty.commands.PartySubCommandHandler; +import me.heyimblake.proxyparty.commands.PartyAnnotationCommand; +import me.heyimblake.proxyparty.commands.PartySubCommand; import me.heyimblake.proxyparty.partyutils.PartyManager; import me.heyimblake.proxyparty.utils.ActionLogEntry; import me.heyimblake.proxyparty.utils.CommandConditions; import me.heyimblake.proxyparty.utils.Constants; import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.ComponentBuilder; -import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.connection.ProxiedPlayer; @@ -33,37 +31,28 @@ * @author heyimblake * @since 10/21/2016 */ -@PartySubCommandExecutor(subCommand = "find", +@PartyAnnotationCommand(name = "find", syntax = "/party find ", description = "Finds a party participant.", - requiresArgumentCompletion = true, - leaderExclusive = false, - mustBeInParty = true) -public class FindSubCommand extends AnnotatedPartySubCommand { - - public FindSubCommand(PartySubCommandHandler handler) { - super(handler); - } + requiresArgumentCompletion = true) +public class FindSubCommand extends PartySubCommand { @Override - public void runProxiedPlayer() { - ProxiedPlayer player = ((ProxiedPlayer) getHandler().getCommandSender()); - ProxiedPlayer target = ProxyParty.getInstance().getProxy().getPlayer(getHandler().getArguments()[0]); - if (!CommandConditions.checkTargetOnline(target, player)) - return; + public void execute(ProxiedPlayer player, String[] args) { + ProxiedPlayer target = ProxyServer.getInstance().getPlayer(args[0]); + + if (!CommandConditions.checkTargetOnline(target, player)) return; if (PartyManager.getInstance().getPartyOf(target).getLeader().getUniqueId() != PartyManager.getInstance().getPartyOf(player).getLeader().getUniqueId()) { player.sendMessage(Constants.TAG, new ComponentBuilder("That player isn't a member of your party!").color(ChatColor.RED).create()[0]); + return; } + ServerInfo serverInfo = target.getServer().getInfo(); + player.sendMessage(Constants.TAG, new ComponentBuilder(String.format("%s is playing on %s.", target.getName(), serverInfo.getName())).color(ChatColor.AQUA).create()[0]); new ActionLogEntry("find", player.getUniqueId(), new String[]{target.getName()}).log(); } - - @Override - public void runConsole() { - - } -} +} \ No newline at end of file diff --git a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/InviteSubCommand.java b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/InviteSubCommand.java index 5e48aba..b787f1c 100644 --- a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/InviteSubCommand.java +++ b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/InviteSubCommand.java @@ -1,15 +1,13 @@ package me.heyimblake.proxyparty.commands.subcommands; -import me.heyimblake.proxyparty.ProxyParty; -import me.heyimblake.proxyparty.commands.AnnotatedPartySubCommand; -import me.heyimblake.proxyparty.commands.PartySubCommandExecutor; -import me.heyimblake.proxyparty.commands.PartySubCommandHandler; +import me.heyimblake.proxyparty.commands.PartyAnnotationCommand; +import me.heyimblake.proxyparty.commands.PartySubCommand; import me.heyimblake.proxyparty.partyutils.Party; -import me.heyimblake.proxyparty.partyutils.PartyCreator; import me.heyimblake.proxyparty.partyutils.PartyManager; import me.heyimblake.proxyparty.partyutils.PartySetting; import me.heyimblake.proxyparty.utils.Constants; import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.connection.ProxiedPlayer; @@ -32,47 +30,52 @@ * @author heyimblake * @since 10/21/2016 */ -@PartySubCommandExecutor(subCommand = "invite", +@PartyAnnotationCommand(name = "invite", syntax = "/party invite ", description = "Invites a player (and creates a party if not in one).", requiresArgumentCompletion = true, leaderExclusive = true, mustBeInParty = false) -public class InviteSubCommand extends AnnotatedPartySubCommand { - - public InviteSubCommand(PartySubCommandHandler handler) { - super(handler); - } +public class InviteSubCommand extends PartySubCommand { @Override - public void runProxiedPlayer() { - ProxiedPlayer player = ((ProxiedPlayer) getHandler().getCommandSender()); - String targetName = getHandler().getArguments()[0]; - ProxiedPlayer target = ProxyParty.getInstance().getProxy().getPlayer(targetName); - if (target == null || (target != null && target.getUniqueId() == player.getUniqueId())) { + public void execute(ProxiedPlayer player, String[] args) { + ProxiedPlayer target = ProxyServer.getInstance().getPlayer(args[0]); + + if (target == null || target.getUniqueId() == player.getUniqueId()) { player.sendMessage(Constants.TAG, new ComponentBuilder("Cannot find or invite that player to your party! :(").color(ChatColor.RED).create()[0]); + return; } + Party targetParty = PartyManager.getInstance().getPartyOf(target); + if (targetParty != null) { player.sendMessage(Constants.TAG, new ComponentBuilder("This player is already a member of a party. Ask them to leave their party and try this command again.").color(ChatColor.RED).create()[0]); + return; } - Party party = !PartyManager.getInstance().hasParty(player) ? new PartyCreator().setLeader(player).create() : PartyManager.getInstance().getPartyOf(player); + + Party party = PartyManager.getInstance().getPartyOf(player); + + if (party == null) { + party = new Party(player); + } + if (party.getInvited().contains(target)) { player.sendMessage(Constants.TAG, new ComponentBuilder("This player is already invited to your party!").color(ChatColor.RED).create()[0]); + return; } - if (PartySetting.PARTY_INVITE_RECIEVE_TOGGLE_OFF.getPlayers().contains(target)) { + + if (PartySetting.PARTY_INVITE_RECEIVE_TOGGLE_OFF.getPlayers().contains(target)) { player.sendMessage(Constants.TAG, new ComponentBuilder("This player is currently not accepting party invitations.").color(ChatColor.RED).create()[0]); + return; } - party.invitePlayer(target); - player.sendMessage(Constants.TAG, new ComponentBuilder(String.format("Invited player %s!", targetName)).color(ChatColor.AQUA).create()[0]); - } - @Override - public void runConsole() { + party.invitePlayer(target); + player.sendMessage(Constants.TAG, new ComponentBuilder(String.format("Invited player %s!", target.getName())).color(ChatColor.AQUA).create()[0]); } -} +} \ No newline at end of file diff --git a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/InvitedSubCommand.java b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/InvitedSubCommand.java index fe089ee..f0c118d 100644 --- a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/InvitedSubCommand.java +++ b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/InvitedSubCommand.java @@ -1,8 +1,7 @@ package me.heyimblake.proxyparty.commands.subcommands; -import me.heyimblake.proxyparty.commands.AnnotatedPartySubCommand; -import me.heyimblake.proxyparty.commands.PartySubCommandExecutor; -import me.heyimblake.proxyparty.commands.PartySubCommandHandler; +import me.heyimblake.proxyparty.commands.PartyAnnotationCommand; +import me.heyimblake.proxyparty.commands.PartySubCommand; import me.heyimblake.proxyparty.partyutils.Party; import me.heyimblake.proxyparty.partyutils.PartyManager; import me.heyimblake.proxyparty.utils.Constants; @@ -32,41 +31,37 @@ * @author heyimblake * @since 10/21/2016 */ -@PartySubCommandExecutor(subCommand = "invited", +@PartyAnnotationCommand(name = "invited", syntax = "/party invited", description = "Shows a list of players invited to your party.", - requiresArgumentCompletion = false, - leaderExclusive = false, - mustBeInParty = true) -public class InvitedSubCommand extends AnnotatedPartySubCommand { - - public InvitedSubCommand(PartySubCommandHandler handler) { - super(handler); - } + requiresArgumentCompletion = false) +public class InvitedSubCommand extends PartySubCommand { @Override - public void runProxiedPlayer() { - ProxiedPlayer player = ((ProxiedPlayer) getHandler().getCommandSender()); + public void execute(ProxiedPlayer player, String[] args) { Party party = PartyManager.getInstance().getPartyOf(player); + if (party.getInvited().size() != 0) { List names = new ArrayList<>(); + for (ProxiedPlayer invited : party.getInvited()) { TextComponent textComponent = new TextComponent(invited.getName()); + textComponent.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/party retract " + invited.getName())); textComponent.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new BaseComponent[]{new TextComponent(ChatColor.YELLOW + "Click to retract invite of " + ChatColor.AQUA + invited.getName() + ".")})); textComponent.setColor(ChatColor.DARK_AQUA); + names.add(textComponent); } + player.sendMessage(Constants.TAG, new ComponentBuilder("These players have invitations to your party:").color(ChatColor.AQUA).create()[0]); + names.forEach(name -> player.sendMessage(Constants.TAG, name)); + player.sendMessage(Constants.TAG, new ComponentBuilder("Click on a name above to retract their invitation.").color(ChatColor.GRAY).create()[0]); + return; } player.sendMessage(Constants.TAG, new ComponentBuilder("You do not have any outgoing invitations.").color(ChatColor.RED).create()[0]); } - - @Override - public void runConsole() { - - } -} +} \ No newline at end of file diff --git a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/KickSubCommand.java b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/KickSubCommand.java index c8e3ecc..c990866 100644 --- a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/KickSubCommand.java +++ b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/KickSubCommand.java @@ -1,15 +1,15 @@ package me.heyimblake.proxyparty.commands.subcommands; import me.heyimblake.proxyparty.ProxyParty; -import me.heyimblake.proxyparty.commands.AnnotatedPartySubCommand; -import me.heyimblake.proxyparty.commands.PartySubCommandExecutor; -import me.heyimblake.proxyparty.commands.PartySubCommandHandler; +import me.heyimblake.proxyparty.commands.PartyAnnotationCommand; +import me.heyimblake.proxyparty.commands.PartySubCommand; import me.heyimblake.proxyparty.events.PartyKickEvent; import me.heyimblake.proxyparty.partyutils.Party; import me.heyimblake.proxyparty.partyutils.PartyManager; import me.heyimblake.proxyparty.utils.CommandConditions; import me.heyimblake.proxyparty.utils.Constants; import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.connection.ProxiedPlayer; @@ -32,42 +32,39 @@ * @author heyimblake * @since 10/21/2016 */ -@PartySubCommandExecutor(subCommand = "kick", +@PartyAnnotationCommand(name = "kick", syntax = "/party kick ", description = "Remove a player from the party.", requiresArgumentCompletion = true, - leaderExclusive = true, - mustBeInParty = true) -public class KickSubCommand extends AnnotatedPartySubCommand { - - public KickSubCommand(PartySubCommandHandler handler) { - super(handler); - } + leaderExclusive = true) +public class KickSubCommand extends PartySubCommand { @Override - public void runProxiedPlayer() { - ProxiedPlayer player = ((ProxiedPlayer) getHandler().getCommandSender()); - ProxiedPlayer target = ProxyParty.getInstance().getProxy().getPlayer(getHandler().getArguments()[0]); + public void execute(ProxiedPlayer player, String[] args) { + ProxiedPlayer target = ProxyServer.getInstance().getPlayer(args[0]); + Party party = PartyManager.getInstance().getPartyOf(player); - if (!CommandConditions.checkTargetOnline(target, player)) - return; + + if (!CommandConditions.checkTargetOnline(target, player)) return; Party targetParty = PartyManager.getInstance().getPartyOf(target); + if (targetParty == null || targetParty != party) { player.sendMessage(Constants.TAG, new ComponentBuilder("That player isn't in your party!").color(ChatColor.RED).create()[0]); + return; } + if (party.getLeader().getUniqueId() == target.getUniqueId() || target.getUniqueId() == player.getUniqueId()) { player.sendMessage(Constants.TAG, new ComponentBuilder("You can't kick yourself or the Party Leader!").color(ChatColor.RED).create()[0]); + return; } + party.removeParticipant(target); - ProxyParty.getInstance().getProxy().getPluginManager().callEvent(new PartyKickEvent(party, target)); - player.sendMessage(Constants.TAG, new ComponentBuilder(String.format("You kicked %s out of the party!", target.getName())).color(ChatColor.YELLOW).create()[0]); - } - @Override - public void runConsole() { + ProxyParty.getInstance().getProxy().getPluginManager().callEvent(new PartyKickEvent(party, target)); + player.sendMessage(Constants.TAG, new ComponentBuilder(String.format("You kicked %s out of the party!", target.getName())).color(ChatColor.YELLOW).create()[0]); } -} +} \ No newline at end of file diff --git a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/LeaveSubCommand.java b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/LeaveSubCommand.java index 9fd066c..a4f0299 100644 --- a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/LeaveSubCommand.java +++ b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/LeaveSubCommand.java @@ -1,8 +1,7 @@ package me.heyimblake.proxyparty.commands.subcommands; -import me.heyimblake.proxyparty.commands.AnnotatedPartySubCommand; -import me.heyimblake.proxyparty.commands.PartySubCommandExecutor; -import me.heyimblake.proxyparty.commands.PartySubCommandHandler; +import me.heyimblake.proxyparty.commands.PartyAnnotationCommand; +import me.heyimblake.proxyparty.commands.PartySubCommand; import me.heyimblake.proxyparty.partyutils.Party; import me.heyimblake.proxyparty.partyutils.PartyManager; import me.heyimblake.proxyparty.partyutils.PartyRole; @@ -30,32 +29,24 @@ * @author heyimblake * @since 10/21/2016 */ -@PartySubCommandExecutor(subCommand = "leave", +@PartyAnnotationCommand(name = "leave", syntax = "/party leave", description = "Leave your current party.", - requiresArgumentCompletion = false, - leaderExclusive = false, - mustBeInParty = true) -public class LeaveSubCommand extends AnnotatedPartySubCommand { - - public LeaveSubCommand(PartySubCommandHandler handler) { - super(handler); - } + requiresArgumentCompletion = false) +public class LeaveSubCommand extends PartySubCommand { @Override - public void runProxiedPlayer() { - ProxiedPlayer player = (ProxiedPlayer) getHandler().getCommandSender(); + public void execute(ProxiedPlayer player, String[] args) { Party party = PartyManager.getInstance().getPartyOf(player); + if (PartyRole.getRoleOf(player) == PartyRole.LEADER) { player.sendMessage(Constants.TAG, new ComponentBuilder("You're the leader! Either promote another member to be leader and leave or disband the party.").color(ChatColor.RED).create()[0]); + return; } - party.removeParticipant(player); - player.sendMessage(Constants.TAG, new ComponentBuilder("You left the party.").color(ChatColor.YELLOW).create()[0]); - } - @Override - public void runConsole() { + party.removeParticipant(player); + player.sendMessage(Constants.TAG, new ComponentBuilder("You left the party.").color(ChatColor.YELLOW).create()[0]); } -} +} \ No newline at end of file diff --git a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/ListSubCommand.java b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/ListSubCommand.java index 1dfb91d..28cb5c7 100644 --- a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/ListSubCommand.java +++ b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/ListSubCommand.java @@ -1,8 +1,7 @@ package me.heyimblake.proxyparty.commands.subcommands; -import me.heyimblake.proxyparty.commands.AnnotatedPartySubCommand; -import me.heyimblake.proxyparty.commands.PartySubCommandExecutor; -import me.heyimblake.proxyparty.commands.PartySubCommandHandler; +import me.heyimblake.proxyparty.commands.PartyAnnotationCommand; +import me.heyimblake.proxyparty.commands.PartySubCommand; import me.heyimblake.proxyparty.partyutils.Party; import me.heyimblake.proxyparty.partyutils.PartyManager; import me.heyimblake.proxyparty.utils.ActionLogEntry; @@ -31,52 +30,51 @@ * @author heyimblake * @since 10/21/2016 */ -@PartySubCommandExecutor(subCommand = "list", +@PartyAnnotationCommand(name = "list", syntax = "/party list", description = "Shows a list of current party members.", - requiresArgumentCompletion = false, - leaderExclusive = false, - mustBeInParty = true) -public class ListSubCommand extends AnnotatedPartySubCommand { - - public ListSubCommand(PartySubCommandHandler handler) { - super(handler); - } + requiresArgumentCompletion = false) +public class ListSubCommand extends PartySubCommand { @Override - public void runProxiedPlayer() { - ProxiedPlayer player = ((ProxiedPlayer) getHandler().getCommandSender()); + public void execute(ProxiedPlayer player, String[] args) { Party party = PartyManager.getInstance().getPartyOf(player); + TextComponent line1 = new TextComponent("Party Leader: "); + line1.setColor(ChatColor.YELLOW); line1.setBold(true); line1.addExtra(new TextComponent(party.getLeader().getName())); if (party.getParticipants().size() != 0) { TextComponent line2 = new TextComponent("Participants: "); + line2.setColor(ChatColor.AQUA); + if (Constants.MAX_PARTY_SIZE != -1) { TextComponent count = new TextComponent(" (" + party.getParticipants().size() + "/" + Constants.MAX_PARTY_SIZE + ")"); + count.setColor(ChatColor.DARK_AQUA); + line2.addExtra(count); } + String allParticipants = ""; + for (ProxiedPlayer participant : party.getParticipants()) { + allParticipants = allParticipants + participant.getName() + ", "; } + player.sendMessage(Constants.TAG, line1); player.sendMessage(Constants.TAG, line2); player.sendMessage(Constants.TAG, new TextComponent(allParticipants)); } else { player.sendMessage(Constants.TAG, line1); + player.sendMessage(Constants.TAG, new ComponentBuilder("There are no participants in this party.").color(ChatColor.RED).create()[0]); } new ActionLogEntry("list", player.getUniqueId()).log(); } - - @Override - public void runConsole() { - - } -} +} \ No newline at end of file diff --git a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/PromoteSubCommand.java b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/PromoteSubCommand.java index 6bdc69c..e641195 100644 --- a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/PromoteSubCommand.java +++ b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/PromoteSubCommand.java @@ -1,14 +1,14 @@ package me.heyimblake.proxyparty.commands.subcommands; import me.heyimblake.proxyparty.ProxyParty; -import me.heyimblake.proxyparty.commands.AnnotatedPartySubCommand; -import me.heyimblake.proxyparty.commands.PartySubCommandExecutor; -import me.heyimblake.proxyparty.commands.PartySubCommandHandler; +import me.heyimblake.proxyparty.commands.PartyAnnotationCommand; +import me.heyimblake.proxyparty.commands.PartySubCommand; import me.heyimblake.proxyparty.partyutils.Party; import me.heyimblake.proxyparty.partyutils.PartyManager; import me.heyimblake.proxyparty.utils.CommandConditions; import me.heyimblake.proxyparty.utils.Constants; import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.ComponentBuilder; import net.md_5.bungee.api.connection.ProxiedPlayer; @@ -31,37 +31,31 @@ * @author heyimblake * @since 10/21/2016 */ -@PartySubCommandExecutor(subCommand = "promote", +@PartyAnnotationCommand(name = "promote", syntax = "/party promote ", description = "Promotes a participant to be the party leader.", requiresArgumentCompletion = true, - leaderExclusive = true, - mustBeInParty = true) -public class PromoteSubCommand extends AnnotatedPartySubCommand { - - public PromoteSubCommand(PartySubCommandHandler handler) { - super(handler); - } + leaderExclusive = true) +public class PromoteSubCommand extends PartySubCommand { @Override - public void runProxiedPlayer() { - ProxiedPlayer player = (ProxiedPlayer) getHandler().getCommandSender(); + public void execute(ProxiedPlayer player, String[] args) { Party party = PartyManager.getInstance().getPartyOf(player); - ProxiedPlayer target = ProxyParty.getInstance().getProxy().getPlayer(getHandler().getArguments()[0]); - if (!CommandConditions.checkTargetOnline(target, player)) - return; + + ProxiedPlayer target = ProxyServer.getInstance().getPlayer(args[0]); + + if (!CommandConditions.checkTargetOnline(target, player)) return; Party targetParty = PartyManager.getInstance().getPartyOf(target); + if (targetParty == null || targetParty != party) { player.sendMessage(Constants.TAG, new ComponentBuilder("That player isn't in your party!").color(ChatColor.RED).create()[0]); + return; } - party.setLeader(target); - player.sendMessage(Constants.TAG, new ComponentBuilder(String.format("You've promoted %s to Party Leader!", target.getName())).color(ChatColor.YELLOW).create()[0]); - } - @Override - public void runConsole() { + party.setLeader(target); + player.sendMessage(Constants.TAG, new ComponentBuilder(String.format("You've promoted %s to Party Leader!", target.getName())).color(ChatColor.YELLOW).create()[0]); } -} +} \ No newline at end of file diff --git a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/RetractSubCommand.java b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/RetractSubCommand.java index fca0671..82c0f09 100644 --- a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/RetractSubCommand.java +++ b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/RetractSubCommand.java @@ -1,16 +1,14 @@ package me.heyimblake.proxyparty.commands.subcommands; -import me.heyimblake.proxyparty.ProxyParty; -import me.heyimblake.proxyparty.commands.AnnotatedPartySubCommand; -import me.heyimblake.proxyparty.commands.PartySubCommandExecutor; -import me.heyimblake.proxyparty.commands.PartySubCommandHandler; +import me.heyimblake.proxyparty.commands.PartyAnnotationCommand; +import me.heyimblake.proxyparty.commands.PartySubCommand; import me.heyimblake.proxyparty.partyutils.Party; import me.heyimblake.proxyparty.partyutils.PartyManager; import me.heyimblake.proxyparty.utils.CommandConditions; import me.heyimblake.proxyparty.utils.Constants; import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.ComponentBuilder; -import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; /** @@ -32,36 +30,29 @@ * @author heyimblake * @since 10/26/2016 */ -@PartySubCommandExecutor(subCommand = "retract", +@PartyAnnotationCommand(name = "retract", syntax = "/party retract ", description = "Retracts an invite from a player.", requiresArgumentCompletion = true, - leaderExclusive = true, - mustBeInParty = true) -public class RetractSubCommand extends AnnotatedPartySubCommand { - - public RetractSubCommand(PartySubCommandHandler handler) { - super(handler); - } + leaderExclusive = true) +public class RetractSubCommand extends PartySubCommand { @Override - public void runProxiedPlayer() { - ProxiedPlayer player = ((ProxiedPlayer) getHandler().getCommandSender()); - ProxiedPlayer target = ProxyParty.getInstance().getProxy().getPlayer(getHandler().getArguments()[0]); - if (!CommandConditions.checkTargetOnline(target, player)) - return; + public void execute(ProxiedPlayer player, String[] args) { + ProxiedPlayer target = ProxyServer.getInstance().getPlayer(args[0]); + + if (!CommandConditions.checkTargetOnline(target, player)) return; Party party = PartyManager.getInstance().getPartyOf(player); + if (!party.getInvited().contains(target)) { player.sendMessage(Constants.TAG, new ComponentBuilder(String.format("%s is not invited to your party.", target.getName())).color(ChatColor.RED).create()[0]); + return; } - party.retractInvite(target); - player.sendMessage(Constants.TAG, new ComponentBuilder(String.format("You've retracted the invite of %s.", target.getName())).color(ChatColor.AQUA).create()[0]); - } - @Override - public void runConsole() { + party.retractInvite(target); + player.sendMessage(Constants.TAG, new ComponentBuilder(String.format("You've retracted the invite of %s.", target.getName())).color(ChatColor.AQUA).create()[0]); } -} +} \ No newline at end of file diff --git a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/ToggleSubCommand.java b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/ToggleSubCommand.java index ff7065a..2c4569d 100644 --- a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/ToggleSubCommand.java +++ b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/ToggleSubCommand.java @@ -1,8 +1,7 @@ package me.heyimblake.proxyparty.commands.subcommands; -import me.heyimblake.proxyparty.commands.AnnotatedPartySubCommand; -import me.heyimblake.proxyparty.commands.PartySubCommandExecutor; -import me.heyimblake.proxyparty.commands.PartySubCommandHandler; +import me.heyimblake.proxyparty.commands.PartyAnnotationCommand; +import me.heyimblake.proxyparty.commands.PartySubCommand; import me.heyimblake.proxyparty.partyutils.PartySetting; import me.heyimblake.proxyparty.utils.ActionLogEntry; import me.heyimblake.proxyparty.utils.Constants; @@ -30,40 +29,40 @@ * @author heyimblake * @since 11/28/2016 */ -@PartySubCommandExecutor(subCommand = "toggle", +@PartyAnnotationCommand(name = "toggle", syntax = "/party toggle ", description = "Toggles a given setting on or off.", requiresArgumentCompletion = true, - leaderExclusive = false, mustBeInParty = false) -public class ToggleSubCommand extends AnnotatedPartySubCommand { - - public ToggleSubCommand(PartySubCommandHandler handler) { - super(handler); - } +public class ToggleSubCommand extends PartySubCommand { @Override - public void runProxiedPlayer() { - ProxiedPlayer player = (ProxiedPlayer) getHandler().getCommandSender(); - String settingString = getHandler().getArguments()[0]; + public void execute(ProxiedPlayer player, String[] args) { + String settingString = args[0]; + PartySetting partySetting = PartySetting.getPartySetting(settingString); + if (partySetting == null) { player.sendMessage(Constants.TAG, new ComponentBuilder("Sorry, that setting couldn't be found. Here's a list of valid settings: ").color(ChatColor.RED).create()[0]); + sendAllSettings(player); + return; } + partySetting.toggle(player); + TextComponent msg = new TextComponent(partySetting.getNiceName() + " has been"); + msg.setColor(ChatColor.YELLOW); + TextComponent msg2 = new TextComponent(partySetting.isEnabledFor(player) ? " enabled." : " disabled."); + msg2.setColor(ChatColor.AQUA); - player.sendMessage(Constants.TAG, msg, msg2); - new ActionLogEntry("toggle", player.getUniqueId(), new String[]{settingString}).log(); - } - @Override - public void runConsole() { + player.sendMessage(Constants.TAG, msg, msg2); + new ActionLogEntry("toggle", player.getUniqueId(), new String[]{settingString}).log(); } private void sendAllSettings(ProxiedPlayer player) { @@ -71,8 +70,11 @@ private void sendAllSettings(ProxiedPlayer player) { for (PartySetting partySetting : PartySetting.values()) { str += partySetting.getArgumentString() + ", "; } + TextComponent msg = new TextComponent(str); + msg.setColor(ChatColor.WHITE); + player.sendMessage(Constants.TAG, msg); } -} +} \ No newline at end of file diff --git a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/WarpSubCommand.java b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/WarpSubCommand.java index 51c59a8..37341fd 100644 --- a/src/main/java/me/heyimblake/proxyparty/commands/subcommands/WarpSubCommand.java +++ b/src/main/java/me/heyimblake/proxyparty/commands/subcommands/WarpSubCommand.java @@ -1,8 +1,7 @@ package me.heyimblake.proxyparty.commands.subcommands; -import me.heyimblake.proxyparty.commands.AnnotatedPartySubCommand; -import me.heyimblake.proxyparty.commands.PartySubCommandExecutor; -import me.heyimblake.proxyparty.commands.PartySubCommandHandler; +import me.heyimblake.proxyparty.commands.PartyAnnotationCommand; +import me.heyimblake.proxyparty.commands.PartySubCommand; import me.heyimblake.proxyparty.partyutils.Party; import me.heyimblake.proxyparty.partyutils.PartyManager; import me.heyimblake.proxyparty.utils.ActionLogEntry; @@ -27,28 +26,19 @@ * @author heyimblake * @since 10/21/2016 */ -@PartySubCommandExecutor(subCommand = "warp", +@PartyAnnotationCommand(name = "warp", syntax = "/party warp", description = "Warp all players to your server.", requiresArgumentCompletion = false, - leaderExclusive = true, - mustBeInParty = true) -public class WarpSubCommand extends AnnotatedPartySubCommand { - - public WarpSubCommand(PartySubCommandHandler handler) { - super(handler); - } + leaderExclusive = true) +public class WarpSubCommand extends PartySubCommand { @Override - public void runProxiedPlayer() { - ProxiedPlayer player = ((ProxiedPlayer) getHandler().getCommandSender()); + public void execute(ProxiedPlayer player, String[] args) { Party party = PartyManager.getInstance().getPartyOf(player); - party.warpParticipants(player.getServer().getInfo()); - new ActionLogEntry("warp", player.getUniqueId()).log(); - } - @Override - public void runConsole() { + party.warpParticipants(player.getServer().getInfo()); + new ActionLogEntry("warp", player.getUniqueId()).log(); } -} +} \ No newline at end of file diff --git a/src/main/java/me/heyimblake/proxyparty/events/PartyAcceptInviteEvent.java b/src/main/java/me/heyimblake/proxyparty/events/PartyAcceptInviteEvent.java index 4e4d05d..ce88751 100644 --- a/src/main/java/me/heyimblake/proxyparty/events/PartyAcceptInviteEvent.java +++ b/src/main/java/me/heyimblake/proxyparty/events/PartyAcceptInviteEvent.java @@ -24,8 +24,8 @@ * @since 11/03/2016 */ public class PartyAcceptInviteEvent extends Event { - private Party party; - private ProxiedPlayer accepter; + private final Party party; + private final ProxiedPlayer accepter; public PartyAcceptInviteEvent(Party party, ProxiedPlayer accepter) { this.party = party; diff --git a/src/main/java/me/heyimblake/proxyparty/events/PartyCreateEvent.java b/src/main/java/me/heyimblake/proxyparty/events/PartyCreateEvent.java index 42d3c58..298f7f3 100644 --- a/src/main/java/me/heyimblake/proxyparty/events/PartyCreateEvent.java +++ b/src/main/java/me/heyimblake/proxyparty/events/PartyCreateEvent.java @@ -24,7 +24,7 @@ * @since 10/21/2016 */ public class PartyCreateEvent extends Event { - private Party party; + private final Party party; public PartyCreateEvent(Party party) { this.party = party; diff --git a/src/main/java/me/heyimblake/proxyparty/events/PartyDenyInviteEvent.java b/src/main/java/me/heyimblake/proxyparty/events/PartyDenyInviteEvent.java index bf8b083..c743a58 100644 --- a/src/main/java/me/heyimblake/proxyparty/events/PartyDenyInviteEvent.java +++ b/src/main/java/me/heyimblake/proxyparty/events/PartyDenyInviteEvent.java @@ -24,8 +24,8 @@ * @since 10/26/2016 */ public class PartyDenyInviteEvent extends Event { - private Party party; - private ProxiedPlayer denier; + private final Party party; + private final ProxiedPlayer denier; public PartyDenyInviteEvent(Party party, ProxiedPlayer denier) { this.party = party; diff --git a/src/main/java/me/heyimblake/proxyparty/events/PartyDisbandEvent.java b/src/main/java/me/heyimblake/proxyparty/events/PartyDisbandEvent.java index 46fc2d2..2195c29 100644 --- a/src/main/java/me/heyimblake/proxyparty/events/PartyDisbandEvent.java +++ b/src/main/java/me/heyimblake/proxyparty/events/PartyDisbandEvent.java @@ -23,7 +23,7 @@ * @since 10/21/2016 */ public class PartyDisbandEvent extends Event { - private Party party; + private final Party party; public PartyDisbandEvent(Party party) { this.party = party; diff --git a/src/main/java/me/heyimblake/proxyparty/events/PartyKickEvent.java b/src/main/java/me/heyimblake/proxyparty/events/PartyKickEvent.java index ec5a870..b909a32 100644 --- a/src/main/java/me/heyimblake/proxyparty/events/PartyKickEvent.java +++ b/src/main/java/me/heyimblake/proxyparty/events/PartyKickEvent.java @@ -24,8 +24,8 @@ * @since 10/22/2016 */ public class PartyKickEvent extends Event { - private Party party; - private ProxiedPlayer player; + private final Party party; + private final ProxiedPlayer player; public PartyKickEvent(Party party, ProxiedPlayer player) { this.party = party; diff --git a/src/main/java/me/heyimblake/proxyparty/events/PartyPlayerJoinEvent.java b/src/main/java/me/heyimblake/proxyparty/events/PartyPlayerJoinEvent.java index bf6b6c6..20ce6d5 100644 --- a/src/main/java/me/heyimblake/proxyparty/events/PartyPlayerJoinEvent.java +++ b/src/main/java/me/heyimblake/proxyparty/events/PartyPlayerJoinEvent.java @@ -24,8 +24,8 @@ * @since 10/22/2016 */ public class PartyPlayerJoinEvent extends Event { - private Party party; - private ProxiedPlayer player; + private final Party party; + private final ProxiedPlayer player; public PartyPlayerJoinEvent(Party party, ProxiedPlayer player) { this.party = party; diff --git a/src/main/java/me/heyimblake/proxyparty/events/PartyPlayerQuitEvent.java b/src/main/java/me/heyimblake/proxyparty/events/PartyPlayerQuitEvent.java index abb2ce0..c4e04a0 100644 --- a/src/main/java/me/heyimblake/proxyparty/events/PartyPlayerQuitEvent.java +++ b/src/main/java/me/heyimblake/proxyparty/events/PartyPlayerQuitEvent.java @@ -24,8 +24,8 @@ * @since 10/22/2016 */ public class PartyPlayerQuitEvent extends Event { - private Party party; - private ProxiedPlayer player; + private final Party party; + private final ProxiedPlayer player; public PartyPlayerQuitEvent(Party party, ProxiedPlayer player) { this.party = party; diff --git a/src/main/java/me/heyimblake/proxyparty/events/PartyPromoteEvent.java b/src/main/java/me/heyimblake/proxyparty/events/PartyPromoteEvent.java index f2b5671..061acb1 100644 --- a/src/main/java/me/heyimblake/proxyparty/events/PartyPromoteEvent.java +++ b/src/main/java/me/heyimblake/proxyparty/events/PartyPromoteEvent.java @@ -24,8 +24,9 @@ * @since 10/22/2016 */ public class PartyPromoteEvent extends Event { - private Party party; - private ProxiedPlayer player, promoter; + private final Party party; + private final ProxiedPlayer player; + private final ProxiedPlayer promoter; public PartyPromoteEvent(Party party, ProxiedPlayer player, ProxiedPlayer promoter) { this.party = party; diff --git a/src/main/java/me/heyimblake/proxyparty/events/PartyRetractInviteEvent.java b/src/main/java/me/heyimblake/proxyparty/events/PartyRetractInviteEvent.java index 24ed4c4..4ad5bd5 100644 --- a/src/main/java/me/heyimblake/proxyparty/events/PartyRetractInviteEvent.java +++ b/src/main/java/me/heyimblake/proxyparty/events/PartyRetractInviteEvent.java @@ -24,8 +24,8 @@ * @since 10/22/2016 */ public class PartyRetractInviteEvent extends Event { - private Party party; - private ProxiedPlayer player; + private final Party party; + private final ProxiedPlayer player; public PartyRetractInviteEvent(Party party, ProxiedPlayer player) { this.party = party; diff --git a/src/main/java/me/heyimblake/proxyparty/events/PartySendInviteEvent.java b/src/main/java/me/heyimblake/proxyparty/events/PartySendInviteEvent.java index 69ea9b3..049bd57 100644 --- a/src/main/java/me/heyimblake/proxyparty/events/PartySendInviteEvent.java +++ b/src/main/java/me/heyimblake/proxyparty/events/PartySendInviteEvent.java @@ -24,8 +24,8 @@ * @since 10/21/2016 */ public class PartySendInviteEvent extends Event { - private Party party; - private ProxiedPlayer player; + private final Party party; + private final ProxiedPlayer player; public PartySendInviteEvent(Party party, ProxiedPlayer player) { this.party = party; diff --git a/src/main/java/me/heyimblake/proxyparty/events/PartyWarpEvent.java b/src/main/java/me/heyimblake/proxyparty/events/PartyWarpEvent.java index 6d7d6a0..8446ead 100644 --- a/src/main/java/me/heyimblake/proxyparty/events/PartyWarpEvent.java +++ b/src/main/java/me/heyimblake/proxyparty/events/PartyWarpEvent.java @@ -24,7 +24,7 @@ * @since 10/21/2016 */ public class PartyWarpEvent extends Event { - private Party party; + private final Party party; public PartyWarpEvent(Party party) { this.party = party; diff --git a/src/main/java/me/heyimblake/proxyparty/listeners/PlayerChatListener.java b/src/main/java/me/heyimblake/proxyparty/listeners/PlayerChatListener.java index 68c76bb..157e7ce 100644 --- a/src/main/java/me/heyimblake/proxyparty/listeners/PlayerChatListener.java +++ b/src/main/java/me/heyimblake/proxyparty/listeners/PlayerChatListener.java @@ -33,17 +33,17 @@ public class PlayerChatListener implements Listener { @EventHandler(priority = EventPriority.HIGHEST) public void onPlayerChat(ChatEvent event) { ProxiedPlayer player = (ProxiedPlayer) event.getSender(); + Party party = PartyManager.getInstance().getPartyOf(player); - if (party == null) { - return; - } - if (!PartySetting.PARTY_CHAT_TOGGLE_ON.isEnabledFor(player)) { - return; - } - if (event.getMessage().substring(0, 1).equalsIgnoreCase("/")) - return; + + if (party == null) return; + if (!PartySetting.PARTY_CHAT_TOGGLE_ON.isEnabledFor(player)) return; + if (event.getMessage().substring(0, 1).equalsIgnoreCase("/")) return; + event.setCancelled(true); + party.sendMessage(player, event.getMessage()); + new ActionLogEntry("chat", player.getUniqueId(), new String[]{event.getMessage()}).log(); } } diff --git a/src/main/java/me/heyimblake/proxyparty/listeners/PlayerServerSwitchListener.java b/src/main/java/me/heyimblake/proxyparty/listeners/PlayerServerSwitchListener.java index 91f4ff7..524b828 100644 --- a/src/main/java/me/heyimblake/proxyparty/listeners/PlayerServerSwitchListener.java +++ b/src/main/java/me/heyimblake/proxyparty/listeners/PlayerServerSwitchListener.java @@ -34,18 +34,25 @@ public class PlayerServerSwitchListener implements Listener { @EventHandler public void onPlayerServerSwitch(ServerSwitchEvent event) { ProxiedPlayer player = event.getPlayer(); - if (!PartyManager.getInstance().hasParty(player)) - return; + Party party = PartyManager.getInstance().getPartyOf(player); + + if (party == null) return; + ProxiedPlayer leader = party.getLeader(); + if (PartyRole.getRoleOf(player) == PartyRole.LEADER) { party.warpParticipants(player.getServer().getInfo()); + party.getLeader().sendMessage(Constants.TAG, new ComponentBuilder("Attempting to send all party members to your server.").color(ChatColor.DARK_AQUA).create()[0]); + return; } + if (!player.getServer().getInfo().getName().equalsIgnoreCase(leader.getServer().getInfo().getName())) { player.connect(leader.getServer().getInfo()); + player.sendMessage(Constants.TAG, new ComponentBuilder("Only party leaders can join servers whilst in a party!").color(ChatColor.RED).bold(true).create()[0]); } } -} +} \ No newline at end of file diff --git a/src/main/java/me/heyimblake/proxyparty/partyutils/Party.java b/src/main/java/me/heyimblake/proxyparty/partyutils/Party.java index ab20f84..6b13f73 100644 --- a/src/main/java/me/heyimblake/proxyparty/partyutils/Party.java +++ b/src/main/java/me/heyimblake/proxyparty/partyutils/Party.java @@ -4,6 +4,7 @@ import me.heyimblake.proxyparty.events.*; import me.heyimblake.proxyparty.utils.Constants; import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.config.ServerInfo; import net.md_5.bungee.api.connection.ProxiedPlayer; @@ -31,22 +32,29 @@ * @since 10/21/2016 */ public class Party { - private ProxiedPlayer leader = null; - private Set participants, invited; + private ProxiedPlayer leader; + private final Set participants; + private final Set invited; /** * Creates a party with a leader and no participants. * * @param leader the party leader */ - protected Party(ProxiedPlayer leader) { + public Party(ProxiedPlayer leader) { this.leader = leader; + this.participants = new HashSet<>(); + this.invited = new HashSet<>(); + PartyRole.setRoleOf(leader, PartyRole.LEADER); + PartyManager.getInstance().getActiveParties().add(this); + PartyManager.getInstance().getPlayerPartyMap().put(this.leader, this); - ProxyParty.getInstance().getProxy().getPluginManager().callEvent(new PartyCreateEvent(this)); + + ProxyServer.getInstance().getPluginManager().callEvent(new PartyCreateEvent(this)); } /** @@ -57,14 +65,22 @@ protected Party(ProxiedPlayer leader) { */ protected Party(ProxiedPlayer leader, Set participants) { this.leader = leader; + this.participants = participants; + this.invited = new HashSet<>(); + PartyRole.setRoleOf(leader, PartyRole.LEADER); + this.participants.forEach(participant -> PartyRole.setRoleOf(participant, PartyRole.PARTICIPANT)); + this.participants.forEach(participant -> PartyManager.getInstance().getPlayerPartyMap().put(participant, this)); + PartyManager.getInstance().getPlayerPartyMap().put(this.leader, this); + PartyManager.getInstance().getActiveParties().add(this); - ProxyParty.getInstance().getProxy().getPluginManager().callEvent(new PartyCreateEvent(this)); + + ProxyServer.getInstance().getPluginManager().callEvent(new PartyCreateEvent(this)); } /** @@ -82,16 +98,23 @@ public ProxiedPlayer getLeader() { * @param player the new party leader */ public void setLeader(ProxiedPlayer player) { - ProxyParty.getInstance().getProxy().getPluginManager().callEvent(new PartyPromoteEvent(this, player, this.leader)); + ProxyServer.getInstance().getPluginManager().callEvent(new PartyPromoteEvent(this, player, this.leader)); + if (this.leader != null) { + PartyRole.setRoleOf(this.leader, PartyRole.PARTICIPANT); + this.participants.add(this.leader); } + this.leader = player; + PartyRole.setRoleOf(player, PartyRole.LEADER); - if (this.participants.contains(player)) - this.participants.remove(player); + + this.participants.remove(player); + PartyManager.getInstance().getPlayerPartyMap().remove(player); + PartyManager.getInstance().getPlayerPartyMap().put(player, this); } @@ -122,7 +145,7 @@ public void removeParticipant(ProxiedPlayer player) { this.participants.remove(player); PartyManager.getInstance().getPlayerPartyMap().remove(player); PartyRole.removeRoleFrom(player); - ProxyParty.getInstance().getProxy().getPluginManager().callEvent(new PartyPlayerQuitEvent(this, player)); + ProxyServer.getInstance().getPluginManager().callEvent(new PartyPlayerQuitEvent(this, player)); } /** @@ -132,9 +155,12 @@ public void removeParticipant(ProxiedPlayer player) { */ public void addParticipant(ProxiedPlayer player) { this.participants.add(player); + PartyManager.getInstance().getPlayerPartyMap().put(player, this); + PartyRole.setRoleOf(player, PartyRole.PARTICIPANT); - ProxyParty.getInstance().getProxy().getPluginManager().callEvent(new PartyPlayerJoinEvent(this, player)); + + ProxyServer.getInstance().getPluginManager().callEvent(new PartyPlayerJoinEvent(this, player)); } /** @@ -144,7 +170,8 @@ public void addParticipant(ProxiedPlayer player) { */ public void invitePlayer(ProxiedPlayer player) { this.invited.add(player); - ProxyParty.getInstance().getProxy().getPluginManager().callEvent(new PartySendInviteEvent(this, player)); + + ProxyServer.getInstance().getPluginManager().callEvent(new PartySendInviteEvent(this, player)); } /** @@ -154,7 +181,8 @@ public void invitePlayer(ProxiedPlayer player) { */ public void retractInvite(ProxiedPlayer player) { this.invited.remove(player); - ProxyParty.getInstance().getProxy().getPluginManager().callEvent(new PartyRetractInviteEvent(this, player)); + + ProxyServer.getInstance().getPluginManager().callEvent(new PartyRetractInviteEvent(this, player)); } /** @@ -163,7 +191,8 @@ public void retractInvite(ProxiedPlayer player) { * @param serverInfo the server to send the participants to */ public void warpParticipants(ServerInfo serverInfo) { - ProxyParty.getInstance().getProxy().getPluginManager().callEvent(new PartyWarpEvent(this)); + ProxyServer.getInstance().getPluginManager().callEvent(new PartyWarpEvent(this)); + this.participants.forEach(participant -> participant.connect(serverInfo)); } @@ -175,9 +204,13 @@ public void warpParticipants(ServerInfo serverInfo) { */ public void sendMessage(ProxiedPlayer player, String string) { TextComponent name = new TextComponent(player.getName() + ": "); + name.setColor(ChatColor.YELLOW); + TextComponent message = new TextComponent(string); + getParticipants().forEach(participant -> participant.sendMessage(Constants.TAG, name, message)); + getLeader().sendMessage(Constants.TAG, name, message); } @@ -189,8 +222,11 @@ public void sendMessage(ProxiedPlayer player, String string) { */ public void sendMessage(String string, ChatColor chatColor) { TextComponent message = new TextComponent(string); + message.setColor(chatColor); + getParticipants().forEach(participant -> participant.sendMessage(Constants.TAG, message)); + getLeader().sendMessage(Constants.TAG, message); } @@ -198,11 +234,16 @@ public void sendMessage(String string, ChatColor chatColor) { * Disbands the current party instance. */ public void disband() { - ProxyParty.getInstance().getProxy().getPluginManager().callEvent(new PartyDisbandEvent(this)); + ProxyServer.getInstance().getPluginManager().callEvent(new PartyDisbandEvent(this)); + this.getParticipants().forEach(participant -> PartyManager.getInstance().getPlayerPartyMap().remove(participant)); + this.getParticipants().forEach(PartyRole::removeRoleFrom); + PartyRole.removeRoleFrom(this.leader); + PartyManager.getInstance().getPlayerPartyMap().remove(this.getLeader()); + PartyManager.getInstance().getActiveParties().remove(this); } -} +} \ No newline at end of file diff --git a/src/main/java/me/heyimblake/proxyparty/partyutils/PartyCreator.java b/src/main/java/me/heyimblake/proxyparty/partyutils/PartyCreator.java deleted file mode 100644 index 2d399fb..0000000 --- a/src/main/java/me/heyimblake/proxyparty/partyutils/PartyCreator.java +++ /dev/null @@ -1,81 +0,0 @@ -package me.heyimblake.proxyparty.partyutils; - -import net.md_5.bungee.api.connection.ProxiedPlayer; - -import java.util.HashSet; -import java.util.Set; - -/** - * Copyright (C) 2017 heyimblake - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * @author heyimblake - * @since 10/21/2016 - */ -public class PartyCreator { - private ProxiedPlayer leader; - private Set participants; - - /** - * Creates a new instance of a PartyCreator - */ - public PartyCreator() { - this.leader = null; - this.participants = new HashSet<>(); - } - - /** - * Set the leader. - * - * @param leader the player that will be leader - * @return the current partycreator instance - */ - public PartyCreator setLeader(ProxiedPlayer leader) { - this.leader = leader; - return this; - } - - /** - * Adds a participant - * - * @param participant the player to be added as a participant - * @return the current partycreator instance - */ - public PartyCreator addParticipant(ProxiedPlayer participant) { - this.participants.add(participant); - return this; - } - - /** - * Sets participants to a set of proxied players. - * - * @param participants set of proxied players to be added as participants - * @return the current partycreator instance - */ - public PartyCreator setParticipants(Set participants) { - this.participants = participants; - return this; - } - - /** - * Creates a party with the previously supplied leader and/or participants. - * - * @return the created party instance - */ - public Party create() { - return new Party(this.leader, this.participants); - } - -} diff --git a/src/main/java/me/heyimblake/proxyparty/partyutils/PartyManager.java b/src/main/java/me/heyimblake/proxyparty/partyutils/PartyManager.java index b804838..95c0561 100644 --- a/src/main/java/me/heyimblake/proxyparty/partyutils/PartyManager.java +++ b/src/main/java/me/heyimblake/proxyparty/partyutils/PartyManager.java @@ -27,14 +27,10 @@ * @since 10/21/2016 */ public class PartyManager { - private static PartyManager instance = new PartyManager(); - private Map playerPartyMap; - private Set activeParties; - private PartyManager() { - this.playerPartyMap = new HashMap<>(); - this.activeParties = new HashSet<>(); - } + private static final PartyManager instance = new PartyManager(); + private final Map playerPartyMap = new HashMap<>(); + private final Set activeParties = new HashSet<>(); public static PartyManager getInstance() { return instance; @@ -77,4 +73,4 @@ public boolean hasParty(ProxiedPlayer player) { public Set getActiveParties() { return this.activeParties; } -} +} \ No newline at end of file diff --git a/src/main/java/me/heyimblake/proxyparty/partyutils/PartyRole.java b/src/main/java/me/heyimblake/proxyparty/partyutils/PartyRole.java index d93df37..d0a78df 100644 --- a/src/main/java/me/heyimblake/proxyparty/partyutils/PartyRole.java +++ b/src/main/java/me/heyimblake/proxyparty/partyutils/PartyRole.java @@ -56,8 +56,8 @@ public static void removeRoleFrom(ProxiedPlayer player) { * @param role the partyrole to set the player to */ public static void setRoleOf(ProxiedPlayer player, PartyRole role) { - if (playerPartyRoleMap.containsKey(player)) - playerPartyRoleMap.remove(player); + playerPartyRoleMap.remove(player); + playerPartyRoleMap.put(player, role); } @@ -77,6 +77,7 @@ public static Map getPlayerPartyRoleMap() { */ public void addPlayer(ProxiedPlayer player) { removeRoleFrom(player); + setRoleOf(player, this); } diff --git a/src/main/java/me/heyimblake/proxyparty/partyutils/PartySetting.java b/src/main/java/me/heyimblake/proxyparty/partyutils/PartySetting.java index 418c103..e90a2f5 100644 --- a/src/main/java/me/heyimblake/proxyparty/partyutils/PartySetting.java +++ b/src/main/java/me/heyimblake/proxyparty/partyutils/PartySetting.java @@ -26,10 +26,11 @@ */ public enum PartySetting { PARTY_CHAT_TOGGLE_ON("Chat", "Automatic Party Chat", new HashSet<>()), - PARTY_INVITE_RECIEVE_TOGGLE_OFF("Invites", "Block Party Invites", new HashSet<>()); + PARTY_INVITE_RECEIVE_TOGGLE_OFF("Invites", "Block Party Invites", new HashSet<>()); - private Set players; - private String argumentString, niceName; + private final Set players; + private final String argumentString; + private final String niceName; PartySetting(String argumentString, String niceName, Set players) { this.argumentString = argumentString; @@ -45,9 +46,11 @@ public enum PartySetting { */ public static PartySetting getPartySetting(String argumentString) { for (PartySetting setting : PartySetting.values()) { - if (setting.getArgumentString().equalsIgnoreCase(argumentString)) - return setting; + if (!setting.getArgumentString().equalsIgnoreCase(argumentString)) continue; + + return setting; } + return null; } @@ -84,10 +87,11 @@ public void disable(ProxiedPlayer player) { * @param player the player to toggle the partysetting for */ public void toggle(ProxiedPlayer player) { - if (this.isEnabledFor(player)) + if (this.isEnabledFor(player)) { this.disable(player); - else + } else { this.enable(player); + } } /** @@ -117,4 +121,4 @@ public String getArgumentString() { public String getNiceName() { return niceName; } -} +} \ No newline at end of file diff --git a/src/main/java/me/heyimblake/proxyparty/utils/ActionLogEntry.java b/src/main/java/me/heyimblake/proxyparty/utils/ActionLogEntry.java index f6d99f4..c995297 100644 --- a/src/main/java/me/heyimblake/proxyparty/utils/ActionLogEntry.java +++ b/src/main/java/me/heyimblake/proxyparty/utils/ActionLogEntry.java @@ -31,10 +31,10 @@ public class ActionLogEntry { public static List savedEntries = new ArrayList<>(); - private String action; - private String[] arguments; - private UUID senderUUID; - private long timeMillis; + private final String action; + private final String[] arguments; + private final UUID senderUUID; + private final long timeMillis; public ActionLogEntry(String action, UUID senderUUID, String[] arguments) { this.action = action; @@ -71,12 +71,15 @@ private String toJson() { } public void log() { - if (!ProxyParty.getInstance().isLoggingEnabled()) - return; + if (!ProxyParty.getInstance().isLoggingEnabled()) return; + savedEntries.add(this); + try { FileOutputStream fileOutputStream = new FileOutputStream(ProxyParty.getInstance().getLogFile()); + fileOutputStream.write(new GsonBuilder().setPrettyPrinting().create().toJson(savedEntries).getBytes()); + fileOutputStream.close(); } catch (Exception e) { e.printStackTrace(); diff --git a/src/main/java/me/heyimblake/proxyparty/utils/CommandConditions.java b/src/main/java/me/heyimblake/proxyparty/utils/CommandConditions.java index 21511ba..ccd2b70 100644 --- a/src/main/java/me/heyimblake/proxyparty/utils/CommandConditions.java +++ b/src/main/java/me/heyimblake/proxyparty/utils/CommandConditions.java @@ -26,21 +26,25 @@ */ public class CommandConditions { - private static PartyManager partyManager = PartyManager.getInstance(); + private static final PartyManager partyManager = PartyManager.getInstance(); public static boolean checkTargetOnline(ProxiedPlayer proxiedPlayer, ProxiedPlayer sender) { if (proxiedPlayer == null) { sender.sendMessage(Constants.TAG, new ComponentBuilder("The specified player could not be found.").color(ChatColor.RED).create()[0]); + return false; } + return true; } public static boolean blockIfHasParty(ProxiedPlayer sender) { if (partyManager.hasParty(sender)) { sender.sendMessage(Constants.TAG, new ComponentBuilder("You are already in a party!").color(ChatColor.RED).create()[0]); + return false; } + return true; } -} +} \ No newline at end of file diff --git a/src/main/java/me/heyimblake/proxyparty/utils/ConfigManager.java b/src/main/java/me/heyimblake/proxyparty/utils/ConfigManager.java index af16968..560f4ac 100644 --- a/src/main/java/me/heyimblake/proxyparty/utils/ConfigManager.java +++ b/src/main/java/me/heyimblake/proxyparty/utils/ConfigManager.java @@ -31,23 +31,27 @@ * @since 12/03/2016 */ public class ConfigManager { + private final String fileName = "config.yml"; private Configuration configuration = null; public void initialize() { saveDefaultConfig(); + try { configuration = ConfigurationProvider.getProvider(YamlConfiguration.class).load(getConfigFile()); + Constants.TAG = new TextComponent(ChatColor.DARK_GRAY + "" + '\u2502' + " " + getColorizedString("prefix") + ChatColor.DARK_GRAY + '\u2502' + ChatColor.GRAY + " "); - int max; + + int max = -1; + try { max = Integer.parseInt(ProxyParty.getInstance().getConfigManager().getString("maxPartySize")); - if (max <= 0) - max = -1; + if (max <= 0) max = -1; } catch (Exception ignored) { ProxyParty.getInstance().getLogger().log(Level.WARNING, "Error while trying to get the defined max party size. Set to UNLIMITED now."); - max = -1; } + Constants.MAX_PARTY_SIZE = max; } catch (IOException e) { e.printStackTrace(); @@ -67,13 +71,17 @@ private void saveDefaultConfig() { ProxyParty.getInstance().getDataFolder().mkdir(); } File file = getConfigFile(); + if (!file.exists()) { try { file.createNewFile(); + try (InputStream is = ProxyParty.getInstance().getResourceAsStream(fileName); OutputStream os = new FileOutputStream(file)) { ByteStreams.copy(is, os); + os.close(); + is.close(); } } catch (IOException e) { @@ -97,4 +105,4 @@ public String getColorizedString(String key) { public String getString(String key) { return configuration.getString(key); } -} +} \ No newline at end of file