From dfbab30cc10404f651a6ce20d2ebf84c84530350 Mon Sep 17 00:00:00 2001 From: diademiemi Date: Wed, 3 Nov 2021 16:18:50 +0100 Subject: [PATCH 1/9] Overhaul messagereach with more options --- .../lineation/command/CommandExec.java | 38 +++--- .../diademiemi/lineation/line/LineTools.java | 109 ++++++++++-------- 2 files changed, 85 insertions(+), 62 deletions(-) diff --git a/src/main/java/me/diademiemi/lineation/command/CommandExec.java b/src/main/java/me/diademiemi/lineation/command/CommandExec.java index 0267094..10cb63b 100644 --- a/src/main/java/me/diademiemi/lineation/command/CommandExec.java +++ b/src/main/java/me/diademiemi/lineation/command/CommandExec.java @@ -348,23 +348,27 @@ public boolean onCommand(CommandSender sender, Command command, String label, St break; case "messagereach": if (args.length > 4) { - switch (args[4].toLowerCase()) { - case "world": - case "disabled": - case "all": - if (sender.hasPermission("lineation.line.option.messagereach")) { - if (line.getType().equalsIgnoreCase("finish")) { - line.setMessageReach(args[4]); - sender.sendMessage(Message.SUCCESS_OPTION_SET); - } else sender.sendMessage(Message.ERROR_NOT_FINISH.replace("$LINE$", args[1])); - } else sender.sendMessage(Message.ERROR_NO_PERMS); - break; - default: - sender.sendMessage(Message.ERROR_UNKNOWN_ARGS); - } - break; - } else sender.sendMessage(Message.ERROR_SEE_HELP.replace("$COMMAND$", "/lineation help options")); - break; + if (sender.hasPermission("lineation.line.option.messagereach")) { + switch (args[4].toLowerCase()) { + case "disabled": + case "world": + case "area": + case "all": + line.setMessageReach(args[4]); + sender.sendMessage(Message.SUCCESS_OPTION_SET); + break; + default: + try { + Integer.parseInt(args[4]); + line.setMessageReach(args[4]); + sender.sendMessage(Message.SUCCESS_OPTION_SET); + } catch (Exception e) { + sender.sendMessage(Message.ERROR_UNKNOWN_ARGS); + } + break; + } + } else sender.sendMessage(Message.ERROR_NO_PERMS); + } else sender.sendMessage(Message.ERROR_SEE_HELP.replace("$COMMAND$", "/lineation help options")); case "gamemodes": if (args.length > 4) { if (sender.hasPermission("lineation.line.option.gamemodes")) { diff --git a/src/main/java/me/diademiemi/lineation/line/LineTools.java b/src/main/java/me/diademiemi/lineation/line/LineTools.java index ee56aba..5f00b17 100644 --- a/src/main/java/me/diademiemi/lineation/line/LineTools.java +++ b/src/main/java/me/diademiemi/lineation/line/LineTools.java @@ -13,6 +13,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.GameMode; import org.bukkit.Material; +import org.bukkit.Location; import org.bukkit.World; import me.diademiemi.lineation.Lineation; @@ -76,6 +77,52 @@ public static void playerFinish(Line line, Player player) { } } + + /** + * Get a list of players that a message should be sent to according to the lines messagereach option + * + * @param line Line to get message reach from + * + * @return List of players + */ + public static List getMessagePlayers(Line line) { + List players; + switch (line.getMessageReach()) { + case "all": + players = new ArrayList<>(Bukkit.getOnlinePlayers()); + break; + case "world": + players = line.getWorld().getPlayers(); + break; + case "area": + players = line.getPlayers(); + break; + case "disabled": + players = new ArrayList<>(); + break; + default: + try { + int i = Integer.parseInt(line.getMessageReach()); + double[][] a = line.getArea(); + double[] areaCenter = new double[2]; + areaCenter[0] = a[0][0] / a[1][0]; + areaCenter[1] = a[0][1] / a[1][1]; + areaCenter[2] = a[0][2] / a[1][2]; + Location centerLocation = new Location(line.getWorld(), areaCenter[0], areaCenter[1], areaCenter[2]); + players = line.getWorld().getPlayers(); + for (Player p : players) { + if (centerLocation.distance(p.getLocation()) > i) { + players.remove(p); + } + } + } catch (Exception e) { + players = new ArrayList<>(); + } + break; + } + return players; + } + /** * Send finish message when someone finishes @@ -85,21 +132,11 @@ public static void playerFinish(Line line, Player player) { * @param place Place number player got */ public static void finishMessage(Line line, Player player, Integer place) { - switch (line.getMessageReach()) { - case "world": - List players = line.getWorld().getPlayers(); - for (Player p : players) { - p.sendMessage(Message.PLAYER_FINISHED - .replace("$NAME$", player.getName()) - .replace("$PLACE$", Message.ordinal(place))); - } - break; - case "all": - Bukkit.broadcastMessage(Message.PLAYER_FINISHED - .replace("$NAME$", player.getName()) - .replace("$PLACE$", Message.ordinal(place))); - break; - } + for (Player p : getMessagePlayers(line)) { + p.sendMessage(Message.PLAYER_FINISHED + .replace("$NAME$", player.getName()) + .replace("$PLACE$", Message.ordinal(place))); + } } /** @@ -110,21 +147,11 @@ public static void finishMessage(Line line, Player player, Integer place) { * @param i Number of the lap */ public static void lapMessage(Line line, Player player, Integer i) { - switch (line.getMessageReach()) { - case "world": - List players = line.getWorld().getPlayers(); - for (Player p : players) { - p.sendMessage(Message.PLAYER_LAP - .replace("$NAME$", player.getName()) - .replace("$LAP$", i + "/" + line.getLaps())); - } - break; - case "all": - Bukkit.broadcastMessage(Message.PLAYER_LAP - .replace("$NAME$", player.getName()) - .replace("$LAP$", i + "/" + line.getLaps())); - break; - } + for (Player p : getMessagePlayers(line)) { + p.sendMessage(Message.PLAYER_LAP + .replace("$NAME$", player.getName()) + .replace("$LAP$", i + "/" + line.getLaps())); + } } /** @@ -147,17 +174,9 @@ public static void finishCloseMessage(Line line) { i++; } - switch (line.getMessageReach()) { - case "world": - List players = line.getWorld().getPlayers(); - for (Player p : players) { - p.sendMessage(announcement.toString()); - } - break; - case "all": - Bukkit.broadcastMessage(announcement.toString()); - break; - } + for (Player p : getMessagePlayers(line)) { + p.sendMessage(announcement.toString()); + } } @@ -530,15 +549,15 @@ public void run() { replaceBlocks(es, b, line.getWorld(), "air", blockSequence.get(i - 1)); } - for (Player p : players) { + for (Player p : getMessagePlayers(line)) { p.sendMessage(Message.STARTING_NOW); } if (line.isTeleportEnabled()) { for (Player p : players) { - if(line.getGameModes().contains(p.getGameMode())) { + if(line.getGameModes().contains(p.getGameMode())) { p.teleport(line.getTeleportLocation()); - } + } } } @@ -548,7 +567,7 @@ public void run() { replaceBlocks(es, b, line.getWorld(), blockSequence.get(i), blockSequence.get(i - 1)); } - for (Player p : players) { + for (Player p : getMessagePlayers(line)) { p.sendMessage(Message.STARTING_IN.replace("$SECONDS$", String.valueOf(blockSequence.size() - i))); } From 4392581482c01800092320b73aa6033ba8131fc5 Mon Sep 17 00:00:00 2001 From: diademiemi Date: Wed, 3 Nov 2021 16:21:45 +0100 Subject: [PATCH 2/9] Fix switch statement --- src/main/java/me/diademiemi/lineation/command/CommandExec.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/me/diademiemi/lineation/command/CommandExec.java b/src/main/java/me/diademiemi/lineation/command/CommandExec.java index 10cb63b..3666534 100644 --- a/src/main/java/me/diademiemi/lineation/command/CommandExec.java +++ b/src/main/java/me/diademiemi/lineation/command/CommandExec.java @@ -369,6 +369,7 @@ public boolean onCommand(CommandSender sender, Command command, String label, St } } else sender.sendMessage(Message.ERROR_NO_PERMS); } else sender.sendMessage(Message.ERROR_SEE_HELP.replace("$COMMAND$", "/lineation help options")); + break; case "gamemodes": if (args.length > 4) { if (sender.hasPermission("lineation.line.option.gamemodes")) { From c86d86991510f2cc02a506048f2cddbf0eda7d8b Mon Sep 17 00:00:00 2001 From: diademiemi Date: Wed, 3 Nov 2021 17:26:47 +0100 Subject: [PATCH 3/9] Fix messagereach with a number --- .../me/diademiemi/lineation/line/LineTools.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/me/diademiemi/lineation/line/LineTools.java b/src/main/java/me/diademiemi/lineation/line/LineTools.java index 5f00b17..9485a46 100644 --- a/src/main/java/me/diademiemi/lineation/line/LineTools.java +++ b/src/main/java/me/diademiemi/lineation/line/LineTools.java @@ -104,15 +104,15 @@ public static List getMessagePlayers(Line line) { try { int i = Integer.parseInt(line.getMessageReach()); double[][] a = line.getArea(); - double[] areaCenter = new double[2]; - areaCenter[0] = a[0][0] / a[1][0]; - areaCenter[1] = a[0][1] / a[1][1]; - areaCenter[2] = a[0][2] / a[1][2]; + double[] areaCenter = new double[3]; + areaCenter[0] = (a[0][0] + a[1][0]) / 2.0; + areaCenter[1] = (a[0][1] + a[1][1]) / 2.0; + areaCenter[2] = (a[0][2] + a[1][2]) / 2.0; Location centerLocation = new Location(line.getWorld(), areaCenter[0], areaCenter[1], areaCenter[2]); - players = line.getWorld().getPlayers(); - for (Player p : players) { - if (centerLocation.distance(p.getLocation()) > i) { - players.remove(p); + players = new ArrayList<>(); + for (Player p : line.getWorld().getPlayers()) { + if (centerLocation.distance(p.getLocation()) < (double)i) { + players.add(p); } } } catch (Exception e) { From 799d4a3f1ea9e7ef39b8f0f0ed95f92273175671 Mon Sep 17 00:00:00 2001 From: diademiemi Date: Wed, 3 Nov 2021 17:34:32 +0100 Subject: [PATCH 4/9] Add tab completion for new messagereach param --- .../lineation/command/CommandTabComplete.java | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/diademiemi/lineation/command/CommandTabComplete.java b/src/main/java/me/diademiemi/lineation/command/CommandTabComplete.java index 586d9f8..f15645a 100644 --- a/src/main/java/me/diademiemi/lineation/command/CommandTabComplete.java +++ b/src/main/java/me/diademiemi/lineation/command/CommandTabComplete.java @@ -201,7 +201,7 @@ public List onTabComplete(CommandSender sender, Command command, String if (args[3].equalsIgnoreCase("")) { - if (player.hasPermission("lineation.line.option.messagereach") && Line.getLines().get(args[1]).getType().equalsIgnoreCase("finish")) tabList.add("messagereach"); + if (player.hasPermission("lineation.line.option.messagereach")) tabList.add("messagereach"); if (player.hasPermission("lineation.line.option.maxwinners") && Line.getLines().get(args[1]).getType().equalsIgnoreCase("finish")) tabList.add("maxwinners"); if (player.hasPermission("lineation.line.option.addcommand") && Line.getLines().get(args[1]).getType().equalsIgnoreCase("finish")) tabList.add("addcommand"); if (player.hasPermission("lineation.line.option.removecommand") && Line.getLines().get(args[1]).getType().equalsIgnoreCase("finish")) tabList.add("removecommand"); @@ -213,7 +213,7 @@ public List onTabComplete(CommandSender sender, Command command, String } - if ("messagereach".startsWith(args[3]) && player.hasPermission("lineation.line.option.messagereach") && Line.getLines().get(args[1]).getType().equalsIgnoreCase("finish")) tabList.add("messagereach"); + if ("messagereach".startsWith(args[3]) && player.hasPermission("lineation.line.option.messagereach")) tabList.add("messagereach"); if ("maxwins".startsWith(args[3]) && player.hasPermission("lineation.line.option.maxwinners") && Line.getLines().get(args[1]).getType().equalsIgnoreCase("finish")) tabList.add("maxwinners"); if ("addcommand".startsWith(args[3]) && player.hasPermission("lineation.line.option.addcommand") && Line.getLines().get(args[1]).getType().equalsIgnoreCase("finish")) tabList.add("addcommand"); if ("removecommand".startsWith(args[3]) && player.hasPermission("lineation.line.option.removecommand") && Line.getLines().get(args[1]).getType().equalsIgnoreCase("finish")) tabList.add("removecommand"); @@ -278,7 +278,24 @@ public List onTabComplete(CommandSender sender, Command command, String if (args[2].equalsIgnoreCase("option")) { - if (args[3].equalsIgnoreCase("teleport") && player.hasPermission("lineation.line.option.teleport")) { + if (args[3].equalsIgnoreCase("messagereach") && player.hasPermission("lineation.line.option.messagereach")) { + + if (args[4].equalsIgnoreCase("")) { + + tabList.add("area"); + tabList.add("all"); + tabList.add("world"); + tabList.add("100"); + tabList.add("disabled"); + + } + + if ("area".startsWith(args[4])) tabList.add("area"); + if ("all".startsWith(args[4])) tabList.add("all"); + if ("world".startsWith(args[4])) tabList.add("world"); + if ("disabled".startsWith(args[4])) tabList.add("disabled"); + + } else if (args[3].equalsIgnoreCase("teleport") && player.hasPermission("lineation.line.option.teleport")) { if (args[4].equalsIgnoreCase("")) { From 17ef85e224cfde50b10bb672d1513b07463da279 Mon Sep 17 00:00:00 2001 From: diademiemi Date: Wed, 3 Nov 2021 17:35:37 +0100 Subject: [PATCH 5/9] Add message reach to info of start lines --- src/main/java/me/diademiemi/lineation/line/LineTools.java | 1 + src/main/resources/messages.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/src/main/java/me/diademiemi/lineation/line/LineTools.java b/src/main/java/me/diademiemi/lineation/line/LineTools.java index 9485a46..723f8b5 100644 --- a/src/main/java/me/diademiemi/lineation/line/LineTools.java +++ b/src/main/java/me/diademiemi/lineation/line/LineTools.java @@ -273,6 +273,7 @@ public static void getLineOptions(Line line, CommandSender player) { .replace("$TPONSTART$", Boolean.toString(line.isTeleportEnabled())) .replace("$TPILLEGALAREA$", Boolean.toString(line.isTeleportEnabledIllegalArea())) .replace("$TELEPORTLOCATION$", teleportLocation) + .replace("$MESSAGEREACH$", line.getMessageReach()) .replace("$GAMEMODES$", line.getGameModesString()) .replace("$ILLEGALAREAS$", illegalAreasString) .replace("$LINKED$", line.getLinkedLine())); diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml index 1d48649..829e6c3 100644 --- a/src/main/resources/messages.yml +++ b/src/main/resources/messages.yml @@ -93,6 +93,7 @@ LINE_OPTIONS_START: |2- &8- &7Teleport onstart: $TPONSTART$ &8- &7Teleport illegalarea: $TPILLEGALAREA$ &8- &7Teleport location: $TELEPORTLOCATION$ + &8- &7Message reach: $MESSAGEREACH$ &8- &7Illegal Area gamemodes: $GAMEMODES$ &8- &7Illegal Areas: $ILLEGALAREAS$ &8- &7Linked line: $LINKED$ From 9f7318e36cb3675600bfa38c020dd068ba776332 Mon Sep 17 00:00:00 2001 From: diademiemi Date: Wed, 3 Nov 2021 17:38:13 +0100 Subject: [PATCH 6/9] Changes messagereach help message --- src/main/resources/messages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml index 829e6c3..19dfd13 100644 --- a/src/main/resources/messages.yml +++ b/src/main/resources/messages.yml @@ -34,7 +34,7 @@ HELP_OPTION: |2- &7/lineation line option addcommand &r: Sets a command to run when a player finishes. Placeholders: %player%, %uuid% &7/lineation line option removecommand &r: Removes a command by number &7/lineation line option laps &r: Amount of times players have to go through the course before winning - &7/lineation line option messagereach &r: Sets who the announcement messages will target + &7/lineation line option messagereach &r: Sets if messages will target all players, players in the area, players in the world, players a certain distance from the center of the area or send no messages. &7/lineation line option gamemodes &r: Comma or space seperated list of gamemodes players have to be in to be counted &7/lineation line option illegalarea add &r: Adds an area that will teleport players to the start line if teleport illegalarea is set to true &7/lineation line option illegalarea remove &r: Removes an illegal area From 1265b792f36369a3722972bfee9ddf0603d1e6ce Mon Sep 17 00:00:00 2001 From: diademiemi Date: Wed, 3 Nov 2021 17:39:05 +0100 Subject: [PATCH 7/9] Change README for messagereach --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4ccbee0..49fcebc 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ See more examples on the [Wiki](https://diademiemi.github.io/Lineation/wiki/inde - `/lineation line option removecommand ` - Removes a command by number - `/lineation line option laps ` - Amount of times players have to go through the course before winning (This requires at least one checkpoint to be set, place them appropriately around your course) -- `/lineation line option messagereach ` - Sets who the announcement messages will target +- `/lineation line option messagereach ` - Sets if messages will target all players, players in the area, players in the world, players a certain distance from the center of the area or send no messages. - `/ineation line option gamemodes ` - Comma seperated list of gamemodes players have to be in to be counted - `/lineation line option illegalarea add` - Adds an area that will teleport players to the start line if teleport illegalarea is set to true - `/lineation line option illegalarea remove ` - Removes an illegal area From 20f6b0f7687262923b6532769e27faabba2beef5 Mon Sep 17 00:00:00 2001 From: diademiemi Date: Wed, 3 Nov 2021 17:43:51 +0100 Subject: [PATCH 8/9] Change default messagereach to 250 blocks --- src/main/resources/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index a8af8e3..f031296 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -6,8 +6,8 @@ # Players wins can be wiped with /lineation config forget USERNAME linedefaults: option: - blocksequence: glass,red_stained_glass,yellow_stained_glass,lime_stained_glass - messagereach: world + blocksequence: glass, red_stained_glass, yellow_stained_glass, lime_stained_glass + messagereach: '250' maxwinners: 3 commands: [] gamemodes: SURVIVAL,ADVENTURE From fd13f1b48d10272dac05b73f7051e6d4ef967d47 Mon Sep 17 00:00:00 2001 From: diademiemi Date: Wed, 3 Nov 2021 17:44:55 +0100 Subject: [PATCH 9/9] More control over message reach - 1.2.0 --- build.gradle | 2 +- src/main/resources/plugin.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index dfd7dd9..6944097 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ plugins { } group 'me.diademiemi.lineation' -version '1.1.1' +version '1.2.0' repositories { /* diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index ee85b64..d6a1e56 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: Lineation description: Minecraft Spigot plugin for managing start and finish lines author: diademiemi -version: 1.1.1 +version: 1.2.0 main: me.diademiemi.lineation.Lineation api-version: 1.16 depend: [WorldEdit]