From 637fc6f15c532645a5a428aa50a1a2ab932dcf0e Mon Sep 17 00:00:00 2001 From: Vlammar Date: Sat, 12 Dec 2020 13:47:26 +0100 Subject: [PATCH 01/38] started rewrite of rename command --- .../commands/maptool/RenameCommand.java | 71 ++++++++++++++++--- 1 file changed, 63 insertions(+), 8 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/RenameCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/RenameCommand.java index e4b23e6..d347df7 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/RenameCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/RenameCommand.java @@ -21,27 +21,82 @@ package fr.moribus.imageonmap.commands.maptool; import fr.moribus.imageonmap.Permissions; import fr.moribus.imageonmap.commands.IoMCommand; import fr.moribus.imageonmap.map.ImageMap; +import fr.moribus.imageonmap.map.MapManager; import fr.zcraft.quartzlib.components.commands.CommandException; import fr.zcraft.quartzlib.components.commands.CommandInfo; import fr.zcraft.quartzlib.components.i18n.I; +import fr.zcraft.quartzlib.tools.PluginLogger; +import java.util.ArrayList; import java.util.List; import org.bukkit.command.CommandSender; @CommandInfo(name = "rename", usageParameters = " ") public class RenameCommand extends IoMCommand { + + private ArrayList getArgs() { + ArrayList arguments = new ArrayList<>(); + + //State of the automaton, can read word like: + //name_here; "name here" + int state = 0; + StringBuilder s = new StringBuilder(); + for (String arg : args) { + + PluginLogger.info("arg " + arg); + switch (state) { + case 0: + if (arg.startsWith("\"")) { + PluginLogger.info("start with "); + state = 1; + arg = arg.substring(1); + + s = s.append(arg); + } else { + PluginLogger.info("not start with "); + arguments.add(arg.toString()); + } + break; + case 1: + if (arg.endsWith("\"")) { + PluginLogger.info("end with "); + arg = arg.substring(0, arg.length() - 1); + s = s.append(" " + arg); + arguments.add(s.toString()); + s = new StringBuilder(); + state = 0; + } else { + PluginLogger.info("not end with "); + s = s.append(" " + arg); + } + break; + default: + throw new IllegalStateException("Unexpected value: " + state); + } + //arguments.add(arg.toString()); + + + } + return arguments; + } + @Override protected void run() throws CommandException { - if (args.length != 4) { + + ArrayList argList = getArgs(); + + if (argList.size() != 2) { warning(I.t("Not enough or too many arguments! Usage: /maptool rename ")); return; } - //if(args.length == 2) - //{ - ImageMap map = getMapFromArgs(); - map.rename(args[2]); - // } else { - // info(I.t("Not enough or too many arguments")); - // } + + + ImageMap map = MapManager.getMap(playerSender().getUniqueId(), argList.get(0)); + if (map == null) { + error(I.t("This map does not exist.")); + return; + } + map.rename(argList.get(1)); + } @Override From cbb03e7827017f26995f12275d597850ba4ce5e2 Mon Sep 17 00:00:00 2001 From: Vlammar Date: Sat, 12 Dec 2020 14:10:02 +0100 Subject: [PATCH 02/38] refactor of rename command --- .../imageonmap/commands/IoMCommand.java | 37 +++++++++++++++ .../commands/maptool/RenameCommand.java | 47 ------------------- 2 files changed, 37 insertions(+), 47 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java b/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java index 4bbb6e4..00868b1 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java @@ -53,6 +53,43 @@ public abstract class IoMCommand extends Command { return getMapFromArgs(playerSender(), 0, true); } + protected ArrayList getArgs() { + ArrayList arguments = new ArrayList<>(); + + //State of the automaton, can read word like: + //name_here; "name here" + int state = 0; + StringBuilder s = new StringBuilder(); + for (String arg : args) { + switch (state) { + case 0: + if (arg.startsWith("\"")) { + state = 1; + arg = arg.substring(1); + + s = s.append(arg); + } else { + arguments.add(arg.toString()); + } + break; + case 1: + if (arg.endsWith("\"")) { + arg = arg.substring(0, arg.length() - 1); + s = s.append(" " + arg); + arguments.add(s.toString()); + s = new StringBuilder(); + state = 0; + } else { + s = s.append(" " + arg); + } + break; + default: + throw new IllegalStateException("Unexpected value: " + state); + } + } + return arguments; + } + //TODO:Add the quote system to zlib and refactor this protected ImageMap getMapFromArgs(Player player, int index) throws CommandException { if (args.length <= index) { diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/RenameCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/RenameCommand.java index d347df7..f6c89f9 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/RenameCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/RenameCommand.java @@ -25,7 +25,6 @@ import fr.moribus.imageonmap.map.MapManager; import fr.zcraft.quartzlib.components.commands.CommandException; import fr.zcraft.quartzlib.components.commands.CommandInfo; import fr.zcraft.quartzlib.components.i18n.I; -import fr.zcraft.quartzlib.tools.PluginLogger; import java.util.ArrayList; import java.util.List; import org.bukkit.command.CommandSender; @@ -33,52 +32,6 @@ import org.bukkit.command.CommandSender; @CommandInfo(name = "rename", usageParameters = " ") public class RenameCommand extends IoMCommand { - private ArrayList getArgs() { - ArrayList arguments = new ArrayList<>(); - - //State of the automaton, can read word like: - //name_here; "name here" - int state = 0; - StringBuilder s = new StringBuilder(); - for (String arg : args) { - - PluginLogger.info("arg " + arg); - switch (state) { - case 0: - if (arg.startsWith("\"")) { - PluginLogger.info("start with "); - state = 1; - arg = arg.substring(1); - - s = s.append(arg); - } else { - PluginLogger.info("not start with "); - arguments.add(arg.toString()); - } - break; - case 1: - if (arg.endsWith("\"")) { - PluginLogger.info("end with "); - arg = arg.substring(0, arg.length() - 1); - s = s.append(" " + arg); - arguments.add(s.toString()); - s = new StringBuilder(); - state = 0; - } else { - PluginLogger.info("not end with "); - s = s.append(" " + arg); - } - break; - default: - throw new IllegalStateException("Unexpected value: " + state); - } - //arguments.add(arg.toString()); - - - } - return arguments; - } - @Override protected void run() throws CommandException { From 5c02a287dd1b458205d4508c13b482a7f9f91972 Mon Sep 17 00:00:00 2001 From: Vlammar Date: Sat, 12 Dec 2020 23:04:19 +0100 Subject: [PATCH 03/38] merged List and ListOther --- .../fr/moribus/imageonmap/ImageOnMap.java | 10 +- .../imageonmap/commands/IoMCommand.java | 83 ++++++------ .../commands/maptool/ListCommand.java | 52 +++++-- .../commands/maptool/ListOtherCommand.java | 128 ------------------ .../commands/maptool/NewCommand.java | 31 +++-- .../commands/maptool/RenameCommand.java | 1 - 6 files changed, 103 insertions(+), 202 deletions(-) delete mode 100644 src/main/java/fr/moribus/imageonmap/commands/maptool/ListOtherCommand.java diff --git a/src/main/java/fr/moribus/imageonmap/ImageOnMap.java b/src/main/java/fr/moribus/imageonmap/ImageOnMap.java index c110d87..9817b16 100644 --- a/src/main/java/fr/moribus/imageonmap/ImageOnMap.java +++ b/src/main/java/fr/moribus/imageonmap/ImageOnMap.java @@ -46,7 +46,6 @@ import fr.moribus.imageonmap.commands.maptool.GetOtherCommand; import fr.moribus.imageonmap.commands.maptool.GetRemainingCommand; import fr.moribus.imageonmap.commands.maptool.GiveCommand; import fr.moribus.imageonmap.commands.maptool.ListCommand; -import fr.moribus.imageonmap.commands.maptool.ListOtherCommand; import fr.moribus.imageonmap.commands.maptool.MigrateCommand; import fr.moribus.imageonmap.commands.maptool.NewCommand; import fr.moribus.imageonmap.commands.maptool.RenameCommand; @@ -74,6 +73,7 @@ public final class ImageOnMap extends QuartzPlugin { private static ImageOnMap plugin; private final File mapsDirectory; private File imagesDirectory; + private CommandWorkers commandWorker; public ImageOnMap() { imagesDirectory = new File(this.getDataFolder(), IMAGES_DIRECTORY_NAME); @@ -97,6 +97,9 @@ public final class ImageOnMap extends QuartzPlugin { return new File(imagesDirectory, "map" + mapID + ".png"); } + public CommandWorkers getCommandWorker() { + return commandWorker; + } @SuppressWarnings("unchecked") @Override @@ -113,9 +116,9 @@ public final class ImageOnMap extends QuartzPlugin { saveDefaultConfig(); - + commandWorker = loadComponent(CommandWorkers.class); loadComponents(I18n.class, Gui.class, Commands.class, PluginConfiguration.class, ImageIOExecutor.class, - ImageRendererExecutor.class, CommandWorkers.class); + ImageRendererExecutor.class); //Init all the things ! I18n.setPrimaryLocale(PluginConfiguration.LANG.get()); @@ -129,7 +132,6 @@ public final class ImageOnMap extends QuartzPlugin { "maptool", NewCommand.class, ListCommand.class, - ListOtherCommand.class, GetCommand.class, GetOtherCommand.class, RenameCommand.class, diff --git a/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java b/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java index 00868b1..70e7dbe 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java @@ -49,47 +49,6 @@ import org.bukkit.entity.Player; public abstract class IoMCommand extends Command { - protected ImageMap getMapFromArgs() throws CommandException { - return getMapFromArgs(playerSender(), 0, true); - } - - protected ArrayList getArgs() { - ArrayList arguments = new ArrayList<>(); - - //State of the automaton, can read word like: - //name_here; "name here" - int state = 0; - StringBuilder s = new StringBuilder(); - for (String arg : args) { - switch (state) { - case 0: - if (arg.startsWith("\"")) { - state = 1; - arg = arg.substring(1); - - s = s.append(arg); - } else { - arguments.add(arg.toString()); - } - break; - case 1: - if (arg.endsWith("\"")) { - arg = arg.substring(0, arg.length() - 1); - s = s.append(" " + arg); - arguments.add(s.toString()); - s = new StringBuilder(); - state = 0; - } else { - s = s.append(" " + arg); - } - break; - default: - throw new IllegalStateException("Unexpected value: " + state); - } - } - return arguments; - } - //TODO:Add the quote system to zlib and refactor this protected ImageMap getMapFromArgs(Player player, int index) throws CommandException { if (args.length <= index) { @@ -135,6 +94,10 @@ public abstract class IoMCommand extends Command { return map; } + protected ImageMap getMapFromArgs() throws CommandException { + return getMapFromArgs(playerSender(), 0, true); + } + protected ImageMap getMapFromArgs(Player player, int index, boolean expand) throws CommandException { if (args.length <= index) { throwInvalidArgument(I.t("You need to give a map name.")); @@ -159,6 +122,44 @@ public abstract class IoMCommand extends Command { return map; } + protected ArrayList getArgs() { + ArrayList arguments = new ArrayList<>(); + + //State of the automaton, can read word like: + //name_here; "name here" + int state = 0; + StringBuilder s = new StringBuilder(); + for (String arg : args) { + switch (state) { + case 0: + if (arg.startsWith("\"")) { + state = 1; + arg = arg.substring(1); + + s = s.append(arg); + } else { + arguments.add(arg.toString()); + } + break; + case 1: + if (arg.endsWith("\"")) { + arg = arg.substring(0, arg.length() - 1); + s = s.append(" " + arg); + arguments.add(s.toString()); + s = new StringBuilder(); + state = 0; + } else { + s = s.append(" " + arg); + } + break; + default: + throw new IllegalStateException("Unexpected value: " + state); + } + } + return arguments; + } + + protected List getMatchingMapNames(Player player, String prefix) { return getMatchingMapNames(MapManager.getMapList(player.getUniqueId()), prefix); } diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java index 29751dc..6f305f8 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java @@ -36,6 +36,7 @@ package fr.moribus.imageonmap.commands.maptool; +import fr.moribus.imageonmap.ImageOnMap; import fr.moribus.imageonmap.Permissions; import fr.moribus.imageonmap.commands.IoMCommand; import fr.moribus.imageonmap.map.ImageMap; @@ -47,6 +48,7 @@ import fr.zcraft.quartzlib.components.i18n.I; import fr.zcraft.quartzlib.components.rawtext.RawText; import fr.zcraft.quartzlib.components.rawtext.RawTextPart; import fr.zcraft.quartzlib.tools.text.RawMessage; +import java.util.ArrayList; import java.util.List; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; @@ -56,25 +58,49 @@ import org.bukkit.entity.Player; public class ListCommand extends IoMCommand { @Override protected void run() throws CommandException { - Player player = playerSender(); - List mapList = MapManager.getMapList(player.getUniqueId()); - - if (mapList.isEmpty()) { - info(I.t("No map found.")); + ArrayList arguments = getArgs(); + if (arguments.size() > 1) { + warning(I.t("Too many parameters! Usage: /maptool list [playername]")); return; } - info(I.tn("{white}{bold}{0} map found.", "{white}{bold}{0} maps found.", mapList.size())); + String playerName; + if (arguments.size() == 1) { + if (!Permissions.LISTOTHER.grantedTo(sender)) { + info(sender, I.t("You can't use this command")); + return; + } - RawTextPart rawText = new RawText(""); - rawText = addMap(rawText, mapList.get(0)); - - for (int i = 1, c = mapList.size(); i < c; i++) { - rawText = rawText.then(", ").color(ChatColor.GRAY); - rawText = addMap(rawText, mapList.get(i)); + playerName = arguments.get(0); + } else { + playerName = playerSender().getName(); } - RawMessage.send(player, rawText.build()); + final Player sender = playerSender(); + //TODO passer en static + ImageOnMap.getPlugin().getCommandWorker().OfflineNameFetch(playerName, uuid -> { + List mapList = MapManager.getMapList(uuid); + + if (uuid == null || mapList.isEmpty()) { + info(sender, I.t("No map found.")); + return; + } + String message = I.tn("{white}{bold}{0} map found.", + "{white}{bold}{0} maps found.", + mapList.size()); + + info(sender, I.tn("{white}{bold}{0} map found.", "{white}{bold}{0} maps found.", mapList.size())); + + RawTextPart rawText = new RawText(""); + rawText = addMap(rawText, mapList.get(0)); + + for (int i = 1, c = mapList.size(); i < c; i++) { + rawText = rawText.then(", ").color(ChatColor.GRAY); + rawText = addMap(rawText, mapList.get(i)); + } + RawMessage.send(sender, rawText.build()); + + }); } private RawTextPart addMap(RawTextPart rawText, ImageMap map) { diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/ListOtherCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/ListOtherCommand.java deleted file mode 100644 index 658e580..0000000 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/ListOtherCommand.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright or © or Copr. Moribus (2013) - * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2020) - * Copyright or © or Copr. Vlammar (2019 – 2020) - * - * This software is a computer program whose purpose is to allow insertion of - * custom images in a Minecraft world. - * - * This software is governed by the CeCILL-B license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/ or redistribute the software under the terms of the CeCILL-B - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL-B license and that you accept its terms. - */ - -package fr.moribus.imageonmap.commands.maptool; - - -import fr.moribus.imageonmap.Permissions; -import fr.moribus.imageonmap.commands.IoMCommand; -import fr.moribus.imageonmap.map.ImageMap; -import fr.moribus.imageonmap.map.MapManager; -import fr.moribus.imageonmap.map.PosterMap; -import fr.zcraft.quartzlib.components.commands.CommandException; -import fr.zcraft.quartzlib.components.commands.CommandInfo; -import fr.zcraft.quartzlib.components.i18n.I; -import fr.zcraft.quartzlib.components.rawtext.RawText; -import fr.zcraft.quartzlib.components.rawtext.RawTextPart; -import fr.zcraft.quartzlib.tools.text.RawMessage; -import java.util.List; -import java.util.UUID; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.OfflinePlayer; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - - -@CommandInfo(name = "listother", usageParameters = "") -public class ListOtherCommand extends IoMCommand { - @Override - protected void run() throws CommandException { - if (args.length < 1) { - warning(I.t("Not enough parameters! Usage: /maptool listother ")); - return; - } - - - Player player = null; - UUID uuid = null; - player = Bukkit.getPlayer(args[0]); - if (player == null) { - OfflinePlayer op = Bukkit.getOfflinePlayer(args[0]); - if (op.hasPlayedBefore()) { - uuid = op.getUniqueId(); - } else { - warning(I.t("We've never seen that player before!")); - } - } else { - uuid = player.getUniqueId(); - } - - List mapList = null; - try { - mapList = MapManager.getMapList(uuid); - } catch (Exception e) { - return; - } - - if (mapList.isEmpty()) { - info(I.t("No map found.")); - return; - } - - info(I.tn("{white}{bold}{0} map found.", "{white}{bold}{0} maps found.", mapList.size())); - - RawTextPart rawText = new RawText(""); - rawText = addMap(rawText, mapList.get(0)); - - for (int i = 1, c = mapList.size(); i < c; i++) { - rawText = rawText.then(", ").color(ChatColor.GRAY); - rawText = addMap(rawText, mapList.get(i)); - } - - RawMessage.send(playerSender(), rawText.build()); - } - - private RawTextPart addMap(RawTextPart rawText, ImageMap map) { - final String size = map.getType() == ImageMap.Type.SINGLE ? "1 × 1" : - ((PosterMap) map).getColumnCount() + " × " + ((PosterMap) map).getRowCount(); - - return rawText - .then(map.getId()) - .color(ChatColor.WHITE) - .command(GetCommand.class, map.getId()) - .hover(new RawText() - .then(map.getName()).style(ChatColor.BOLD, ChatColor.GREEN).then("\n") - .then(map.getId() + ", " + size).color(ChatColor.GRAY).then("\n\n") - .then(I.t("{white}Click{gray} to get this map")) - ); - } - - @Override - public boolean canExecute(CommandSender sender) { - return Permissions.LISTOTHER.grantedTo(sender); - } -} diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java index d7c0e25..2f59a5d 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java @@ -57,6 +57,21 @@ import org.bukkit.entity.Player; @CommandInfo(name = "new", usageParameters = " [resize]") public class NewCommand extends IoMCommand { + + private ImageUtils.ScalingType resizeMode() throws CommandException { + switch (args[1]) { + case "resize": + return ImageUtils.ScalingType.CONTAINED; + case "resize-stretched": + return ImageUtils.ScalingType.STRETCHED; + case "resize-covered": + return ImageUtils.ScalingType.COVERED; + default: + throwInvalidArgument(I.t("Invalid Stretching mode.")); + return ImageUtils.ScalingType.NONE; + } + } + @Override protected void run() throws CommandException { final Player player = playerSender(); @@ -81,21 +96,7 @@ public class NewCommand extends IoMCommand { width = Integer.parseInt(args[2]); height = Integer.parseInt(args[3]); } - - switch (args[1]) { - case "resize": - scaling = ImageUtils.ScalingType.CONTAINED; - break; - case "resize-stretched": - scaling = ImageUtils.ScalingType.STRETCHED; - break; - case "resize-covered": - scaling = ImageUtils.ScalingType.COVERED; - break; - default: - throwInvalidArgument(I.t("Invalid Stretching mode.")); - break; - } + scaling = resizeMode(); } try { ActionBar.sendPermanentMessage(player, ChatColor.DARK_GREEN + I.t("Rendering...")); diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/RenameCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/RenameCommand.java index f6c89f9..49fcc2c 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/RenameCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/RenameCommand.java @@ -42,7 +42,6 @@ public class RenameCommand extends IoMCommand { return; } - ImageMap map = MapManager.getMap(playerSender().getUniqueId(), argList.get(0)); if (map == null) { error(I.t("This map does not exist.")); From 50008de052e6c5fd095410efffca507c9115cc86 Mon Sep 17 00:00:00 2001 From: Vlammar Date: Sat, 12 Dec 2020 23:52:48 +0100 Subject: [PATCH 04/38] Merged get and getother --- .../fr/moribus/imageonmap/ImageOnMap.java | 2 - .../commands/maptool/GetCommand.java | 47 ++++++++- .../commands/maptool/GetOtherCommand.java | 99 ------------------- .../commands/maptool/ListCommand.java | 8 +- 4 files changed, 49 insertions(+), 107 deletions(-) delete mode 100644 src/main/java/fr/moribus/imageonmap/commands/maptool/GetOtherCommand.java diff --git a/src/main/java/fr/moribus/imageonmap/ImageOnMap.java b/src/main/java/fr/moribus/imageonmap/ImageOnMap.java index 9817b16..562e4c8 100644 --- a/src/main/java/fr/moribus/imageonmap/ImageOnMap.java +++ b/src/main/java/fr/moribus/imageonmap/ImageOnMap.java @@ -42,7 +42,6 @@ import fr.moribus.imageonmap.commands.maptool.DeleteOtherCommand; import fr.moribus.imageonmap.commands.maptool.ExploreCommand; import fr.moribus.imageonmap.commands.maptool.ExploreOtherCommand; import fr.moribus.imageonmap.commands.maptool.GetCommand; -import fr.moribus.imageonmap.commands.maptool.GetOtherCommand; import fr.moribus.imageonmap.commands.maptool.GetRemainingCommand; import fr.moribus.imageonmap.commands.maptool.GiveCommand; import fr.moribus.imageonmap.commands.maptool.ListCommand; @@ -133,7 +132,6 @@ public final class ImageOnMap extends QuartzPlugin { NewCommand.class, ListCommand.class, GetCommand.class, - GetOtherCommand.class, RenameCommand.class, DeleteCommand.class, DeleteOtherCommand.class, diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java index 4876853..45d1736 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java @@ -36,11 +36,15 @@ package fr.moribus.imageonmap.commands.maptool; +import fr.moribus.imageonmap.ImageOnMap; import fr.moribus.imageonmap.Permissions; import fr.moribus.imageonmap.commands.IoMCommand; +import fr.moribus.imageonmap.map.ImageMap; +import fr.moribus.imageonmap.map.MapManager; import fr.zcraft.quartzlib.components.commands.CommandException; import fr.zcraft.quartzlib.components.commands.CommandInfo; import fr.zcraft.quartzlib.components.i18n.I; +import java.util.ArrayList; import java.util.List; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -49,11 +53,46 @@ import org.bukkit.entity.Player; public class GetCommand extends IoMCommand { @Override protected void run() throws CommandException { - Player player = playerSender(); - if (getMapFromArgs().give(player)) { - info(I.t("The requested map was too big to fit in your inventory.")); - info(I.t("Use '/maptool getremaining' to get the remaining maps.")); + ArrayList arguments = getArgs(); + if (arguments.size() > 2) { + warning(I.t("Too many parameters! Usage: /maptool getother [playername] ")); + return; } + + final String playerName; + final String mapName; + final Player sender = playerSender(); + if (arguments.size() == 2) { + if (!Permissions.GETOTHER.grantedTo(sender)) { + info(sender, I.t("You can't use this command")); + return; + } + + playerName = arguments.get(0); + mapName = arguments.get(1); + } else { + playerName = sender.getName(); + mapName = arguments.get(0); + } + + //TODO passer en static + ImageOnMap.getPlugin().getCommandWorker().OfflineNameFetch(playerName, uuid -> { + if (uuid == null) { + info(sender, I.t("The player {0} does not exist.", playerName)); + return; + } + ImageMap map = MapManager.getMap(uuid, mapName); + + if (map == null) { + info(sender, I.t("This map does not exist.")); + return; + } + + if (map.give(sender)) { + info(I.t("The requested map was too big to fit in your inventory.")); + info(I.t("Use '/maptool getremaining' to get the remaining maps.")); + } + }); } @Override diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetOtherCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetOtherCommand.java deleted file mode 100644 index 39581ce..0000000 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetOtherCommand.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright or © or Copr. Moribus (2013) - * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2020) - * Copyright or © or Copr. Vlammar (2019 – 2020) - * - * This software is a computer program whose purpose is to allow insertion of - * custom images in a Minecraft world. - * - * This software is governed by the CeCILL-B license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/ or redistribute the software under the terms of the CeCILL-B - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL-B license and that you accept its terms. - */ - -package fr.moribus.imageonmap.commands.maptool; - - -import fr.moribus.imageonmap.Permissions; -import fr.moribus.imageonmap.commands.IoMCommand; -import fr.moribus.imageonmap.map.ImageMap; -import fr.moribus.imageonmap.map.MapManager; -import fr.zcraft.quartzlib.components.commands.CommandException; -import fr.zcraft.quartzlib.components.commands.CommandInfo; -import fr.zcraft.quartzlib.components.i18n.I; -import java.util.UUID; -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - - -@CommandInfo(name = "getother", usageParameters = " ") -public class GetOtherCommand extends IoMCommand { - - @Override - protected void run() throws CommandException { - if (args.length < 2) { - warning(I.t("Not enough parameters! Usage: /maptool getother ")); - return; - } - - Player player = null; - UUID uuid = null; - player = Bukkit.getPlayer(args[0]); - - if (player == null) { - OfflinePlayer op = Bukkit.getOfflinePlayer(args[0]); - if (op.hasPlayedBefore()) { - uuid = op.getUniqueId(); - } else { - warning(I.t("We've never seen that player before!")); - } - return; - } else { - uuid = player.getUniqueId(); - } - ImageMap map = null; - String mapName = ""; - mapName = args[1]; - if (args.length > 2) { - for (int i = 2; i < args.length; i++) { - mapName += (" " + args[i - 1]); - } - } - map = MapManager.getMap(uuid, mapName); - if (map != null) { - map.give(playerSender()); - } else { - warning(I.t("Unknown map {0}", mapName)); - } - } - - @Override - public boolean canExecute(CommandSender sender) { - return Permissions.GETOTHER.grantedTo(sender); - } -} diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java index 6f305f8..7823d5e 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java @@ -77,11 +77,15 @@ public class ListCommand extends IoMCommand { } final Player sender = playerSender(); + //TODO passer en static ImageOnMap.getPlugin().getCommandWorker().OfflineNameFetch(playerName, uuid -> { List mapList = MapManager.getMapList(uuid); - - if (uuid == null || mapList.isEmpty()) { + if (uuid == null) { + info(sender, I.t("Player {} not found.", playerName)); + return; + } + if (mapList.isEmpty()) { info(sender, I.t("No map found.")); return; } From fbab58ff10d06f01b262e21ef473adb4774dc1cc Mon Sep 17 00:00:00 2001 From: Vlammar Date: Sun, 13 Dec 2020 10:59:59 +0100 Subject: [PATCH 05/38] Merged delete and deleteother --- .../fr/moribus/imageonmap/ImageOnMap.java | 2 - .../commands/maptool/DeleteCommand.java | 83 ++++++++++--- .../commands/maptool/DeleteOtherCommand.java | 113 ------------------ src/main/resources/plugin.yml | 4 +- 4 files changed, 67 insertions(+), 135 deletions(-) delete mode 100644 src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteOtherCommand.java diff --git a/src/main/java/fr/moribus/imageonmap/ImageOnMap.java b/src/main/java/fr/moribus/imageonmap/ImageOnMap.java index 562e4c8..4baa53f 100644 --- a/src/main/java/fr/moribus/imageonmap/ImageOnMap.java +++ b/src/main/java/fr/moribus/imageonmap/ImageOnMap.java @@ -38,7 +38,6 @@ package fr.moribus.imageonmap; import fr.moribus.imageonmap.commands.maptool.DeleteCommand; -import fr.moribus.imageonmap.commands.maptool.DeleteOtherCommand; import fr.moribus.imageonmap.commands.maptool.ExploreCommand; import fr.moribus.imageonmap.commands.maptool.ExploreOtherCommand; import fr.moribus.imageonmap.commands.maptool.GetCommand; @@ -134,7 +133,6 @@ public final class ImageOnMap extends QuartzPlugin { GetCommand.class, RenameCommand.class, DeleteCommand.class, - DeleteOtherCommand.class, GiveCommand.class, GetRemainingCommand.class, ExploreCommand.class, diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java index 021cdd7..9fd2a66 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java @@ -36,6 +36,7 @@ package fr.moribus.imageonmap.commands.maptool; +import fr.moribus.imageonmap.ImageOnMap; import fr.moribus.imageonmap.Permissions; import fr.moribus.imageonmap.commands.IoMCommand; import fr.moribus.imageonmap.map.ImageMap; @@ -47,6 +48,8 @@ import fr.zcraft.quartzlib.components.commands.WithFlags; import fr.zcraft.quartzlib.components.i18n.I; import fr.zcraft.quartzlib.components.rawtext.RawText; import fr.zcraft.quartzlib.tools.PluginLogger; +import fr.zcraft.quartzlib.tools.text.RawMessage; +import java.util.ArrayList; import java.util.List; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; @@ -56,7 +59,7 @@ import org.bukkit.entity.Player; @WithFlags({"confirm"}) public class DeleteCommand extends IoMCommand { - private static RawText deleteMsg(Class klass, ImageMap map) { + private static RawText deleteMsg(Class klass, Player sender, ImageMap map) { return new RawText(I.t("You are going to delete") + " ") .then(map.getId()) .color(ChatColor.GOLD) @@ -65,29 +68,73 @@ public class DeleteCommand extends IoMCommand { .then(I.t("[Confirm]")) .color(ChatColor.GREEN) .hover(new RawText(I.t("{red}This map will be deleted {bold}forever{red}!"))) - .command(klass, map.getId(), "--confirm") + .command(klass, sender.getName(), map.getId(), "--confirm") .build(); } @Override protected void run() throws CommandException { - ImageMap map = getMapFromArgs(); - - if (!hasFlag("confirm")) { - RawText msg = deleteMsg(getClass(), map); - send(msg); - } else { - Player player = playerSender(); - MapManager.clear(player.getInventory(), map); - - try { - MapManager.deleteMap(map); - info(I.t("Map successfully deleted.")); - } catch (MapManagerException ex) { - PluginLogger.warning(I.t("A non-existent map was requested to be deleted", ex)); - warning(I.t("This map does not exist.")); - } + ArrayList arguments = getArgs(); + final boolean confirm = hasFlag("confirm"); + for (String s : arguments) { + info(sender, s); } + + if (arguments.size() > 3 || (arguments.size() > 2 && !confirm)) { + warning(I.t("Too many parameters! Usage: /maptool delete [playername] ")); + return; + } + + final String playerName; + final String mapName; + final Player sender = playerSender(); + info(sender, "" + arguments.size()); + if (arguments.size() == 2 || arguments.size() == 3) { + if (!Permissions.DELETEOTHER.grantedTo(sender)) { + info(sender, I.t("You can't use this command")); + return; + } + + playerName = arguments.get(0); + mapName = arguments.get(1); + } else { + playerName = sender.getName(); + mapName = arguments.get(0); + } + + //TODO passer en static + ImageOnMap.getPlugin().getCommandWorker().OfflineNameFetch(playerName, uuid -> { + if (uuid == null) { + info(sender, I.t("The player {0} does not exist.", playerName)); + return; + } + ImageMap map = MapManager.getMap(uuid, mapName); + + if (map == null) { + info(sender, I.t("This map does not exist.")); + return; + } + + if (!confirm) { + RawText msg = deleteMsg(getClass(), sender, map); + RawMessage.send(sender, msg); + } else { + + MapManager.clear(sender.getInventory(), map); + + try { + MapManager.deleteMap(map); + info(sender, I.t("Map successfully deleted.")); + } catch (MapManagerException ex) { + PluginLogger.warning(I.t("A non-existent map was requested to be deleted", ex)); + warning(sender, I.t("This map does not exist.")); + } + } + + + }); + + } @Override diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteOtherCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteOtherCommand.java deleted file mode 100644 index 86d2318..0000000 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteOtherCommand.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright or © or Copr. Moribus (2013) - * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2020) - * Copyright or © or Copr. Vlammar (2019 – 2020) - * - * This software is a computer program whose purpose is to allow insertion of - * custom images in a Minecraft world. - * - * This software is governed by the CeCILL-B license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/ or redistribute the software under the terms of the CeCILL-B - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL-B license and that you accept its terms. - */ - -package fr.moribus.imageonmap.commands.maptool; - -import fr.moribus.imageonmap.Permissions; -import fr.moribus.imageonmap.commands.IoMCommand; -import fr.moribus.imageonmap.map.ImageMap; -import fr.moribus.imageonmap.map.MapManager; -import fr.moribus.imageonmap.map.MapManagerException; -import fr.zcraft.quartzlib.components.commands.CommandException; -import fr.zcraft.quartzlib.components.commands.CommandInfo; -import fr.zcraft.quartzlib.components.commands.WithFlags; -import fr.zcraft.quartzlib.components.i18n.I; -import fr.zcraft.quartzlib.tools.PluginLogger; -import java.util.List; -import java.util.UUID; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.OfflinePlayer; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -@CommandInfo(name = "deleteother", usageParameters = " ") -@WithFlags({"confirm"}) -public class DeleteOtherCommand extends IoMCommand { - @Override - protected void run() throws CommandException { - if (args.length < 2) { - warning(I.t("Not enough parameters! Usage: /maptool deleteother ")); - return; - } - - Player player = null; - UUID uuid = null; - OfflinePlayer op = null; - player = Bukkit.getPlayer(args[0]); - if (player == null) { - op = Bukkit.getOfflinePlayer(args[0]); - if (op.hasPlayedBefore()) { - uuid = op.getUniqueId(); - } else { - warning(I.t("We've never seen that player before!")); - } - } else { - uuid = player.getUniqueId(); - } - if (player == null) { - warning(I.t("Player not found")); - return; - } - ImageMap map = getMapFromArgs(player, 1, true); - - //if (player != null) { - MapManager.clear(player.getInventory(), map); - //} - - try { - MapManager.deleteMap(map); - info(I.t("{gray}Map successfully deleted.")); - } catch (MapManagerException ex) { - PluginLogger.warning(I.t("A non-existent map was requested to be deleted", ex)); - warning(ChatColor.RED + (I.t("This map does not exist."))); - } - } - - @Override - protected List complete() throws CommandException { - if (args.length == 1) { - return getMatchingMapNames(playerSender(), args[0]); - } - - return null; - } - - @Override - public boolean canExecute(CommandSender sender) { - return Permissions.DELETEOTHER.grantedTo(sender); - } -} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 3c00f16..c9ecd77 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -32,11 +32,11 @@ permissions: imageonmap.rename: true imageonmap.removesplattermap: true imageonmap.delete: true - imageonmap.deleteother: false + imageonmap.deleteother: true imageonmap.bypasssize: false imageonmap.give: false imageonmap.update: true - imageonmap.updateother: false + imageonmap.updateother: true imageonmap.userender: description: "Allows you to use /tomap and related commands (/maptool getremaining). Alias of imageonmap.new." From 7764662a232dd74ea561654631e43a6a236a3f99 Mon Sep 17 00:00:00 2001 From: Vlammar Date: Sun, 13 Dec 2020 13:02:03 +0100 Subject: [PATCH 06/38] Fixed a bug when there are not enougth arguments --- .../commands/maptool/DeleteCommand.java | 7 +- .../commands/maptool/GetCommand.java | 6 +- .../commands/maptool/UpdateOtherCommand.java | 136 ------------------ 3 files changed, 9 insertions(+), 140 deletions(-) delete mode 100644 src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateOtherCommand.java diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java index 9fd2a66..19d2f1e 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java @@ -76,14 +76,15 @@ public class DeleteCommand extends IoMCommand { protected void run() throws CommandException { ArrayList arguments = getArgs(); final boolean confirm = hasFlag("confirm"); - for (String s : arguments) { - info(sender, s); - } if (arguments.size() > 3 || (arguments.size() > 2 && !confirm)) { warning(I.t("Too many parameters! Usage: /maptool delete [playername] ")); return; } + if (arguments.size() < 1) { + warning(I.t("Too few parameters! Usage: /maptool delete [playername] ")); + return; + } final String playerName; final String mapName; diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java index 45d1736..cd0b956 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java @@ -55,7 +55,11 @@ public class GetCommand extends IoMCommand { protected void run() throws CommandException { ArrayList arguments = getArgs(); if (arguments.size() > 2) { - warning(I.t("Too many parameters! Usage: /maptool getother [playername] ")); + warning(I.t("Too many parameters! Usage: /maptool get [playername] ")); + return; + } + if (arguments.size() < 1) { + warning(I.t("Too few parameters! Usage: /maptool get [playername] ")); return; } diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateOtherCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateOtherCommand.java deleted file mode 100644 index 224859e..0000000 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateOtherCommand.java +++ /dev/null @@ -1,136 +0,0 @@ -/* - * Copyright or © or Copr. Moribus (2013) - * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2020) - * Copyright or © or Copr. Vlammar (2019 – 2020) - * - * This software is a computer program whose purpose is to allow insertion of - * custom images in a Minecraft world. - * - * This software is governed by the CeCILL-B license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/ or redistribute the software under the terms of the CeCILL-B - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL-B license and that you accept its terms. - */ - -package fr.moribus.imageonmap.commands.maptool; - -import fr.moribus.imageonmap.Permissions; -import fr.moribus.imageonmap.commands.IoMCommand; -import fr.moribus.imageonmap.image.ImageRendererExecutor; -import fr.moribus.imageonmap.image.ImageUtils; -import fr.moribus.imageonmap.map.ImageMap; -import fr.moribus.imageonmap.map.MapManager; -import fr.zcraft.quartzlib.components.commands.CommandException; -import fr.zcraft.quartzlib.components.commands.CommandInfo; -import fr.zcraft.quartzlib.components.i18n.I; -import fr.zcraft.quartzlib.components.worker.WorkerCallback; -import fr.zcraft.quartzlib.tools.PluginLogger; -import fr.zcraft.quartzlib.tools.text.ActionBar; -import fr.zcraft.quartzlib.tools.text.MessageSender; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.HashMap; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -@CommandInfo(name = "update", usageParameters = " [stretched|covered] \"\"") -public class UpdateOtherCommand extends IoMCommand { - @Override - protected void run() throws CommandException { - //TODO separer les deux update(update et update other) - final Player player = playerSender(); - ImageUtils.ScalingType scaling; - - URL url; - - if (args.length < 1) { - throwInvalidArgument(I.t("You must give an URL and a map name to update.")); - } - if (args.length < 2) { - throwInvalidArgument(I.t("You must give a map name to update.")); - } - - switch (args[1]) { - - case "stretched": - scaling = ImageUtils.ScalingType.STRETCHED; - break; - case "covered": - scaling = ImageUtils.ScalingType.COVERED; - break; - default: - scaling = ImageUtils.ScalingType.CONTAINED; - } - ImageMap map; - if (scaling.equals(ImageUtils.ScalingType.CONTAINED)) { - map = getMapFromArgs(player, 1); - } else { - map = getMapFromArgs(player, 2); - } - try { - url = new URL(args[0]); - MapManager.load(); - - Integer[] size = {1, 1}; - if (map.getType() == ImageMap.Type.POSTER) { - size = map.getSize(new HashMap(), map.getUserUUID(), map.getId()); - } - int width = size[0]; - int height = size[1]; - try { - ActionBar.sendPermanentMessage(player, ChatColor.DARK_GREEN + I.t("Updating...")); - ImageRendererExecutor - .update(url, scaling, player.getUniqueId(), map, width, height, new WorkerCallback() { - @Override - public void finished(ImageMap result) { - ActionBar.removeMessage(player); - MessageSender.sendActionBarMessage(player, - ChatColor.DARK_GREEN + I.t("The map was updated using the new image!")); - } - - @Override - public void errored(Throwable exception) { - player.sendMessage(I.t("{ce}Map rendering failed: {0}", exception.getMessage())); - - PluginLogger.warning("Rendering from {0} failed: {1}: {2}", - player.getName(), - exception.getClass().getCanonicalName(), - exception.getMessage()); - } - }); - } finally { - ActionBar.removeMessage(player); - } - } catch (MalformedURLException ex) { - throwInvalidArgument(I.t("Invalid URL.")); - } - } - - @Override - public boolean canExecute(CommandSender sender) { - return Permissions.UPDATEOTHER.grantedTo(sender); - } -} From 01b11df62cbab25da93fc4aee70ddd120a18bfb1 Mon Sep 17 00:00:00 2001 From: Vlammar Date: Sun, 13 Dec 2020 14:20:20 +0100 Subject: [PATCH 07/38] Merged update and updateother --- .../commands/maptool/UpdateCommand.java | 171 +++++++++++++----- 1 file changed, 123 insertions(+), 48 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java index 09e0b3e..d8b718b 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java @@ -36,6 +36,7 @@ package fr.moribus.imageonmap.commands.maptool; +import fr.moribus.imageonmap.ImageOnMap; import fr.moribus.imageonmap.Permissions; import fr.moribus.imageonmap.commands.IoMCommand; import fr.moribus.imageonmap.image.ImageRendererExecutor; @@ -51,28 +52,87 @@ import fr.zcraft.quartzlib.tools.text.ActionBar; import fr.zcraft.quartzlib.tools.text.MessageSender; import java.net.MalformedURLException; import java.net.URL; +import java.util.ArrayList; import java.util.HashMap; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -@CommandInfo(name = "update", usageParameters = " [stretched|covered] \"\"") +@CommandInfo(name = "update", usageParameters = "[playername] [stretched|covered] ") public class UpdateCommand extends IoMCommand { @Override protected void run() throws CommandException { - final Player player = playerSender(); - ImageUtils.ScalingType scaling; - URL url; - - if (args.length < 1) { - throwInvalidArgument(I.t("You must give an URL and a map name to update.")); + ArrayList arguments = getArgs(); + String warningMsg; + if (arguments.size() > 4) { + warningMsg = "Too many parameters!" + + " Usage: /maptool update [playername] [stretched|covered] "; + warning(I.t(warningMsg)); + return; } - if (args.length < 2) { - throwInvalidArgument(I.t("You must give a map name to update.")); + if (arguments.size() < 2) { + warningMsg = + "Too few parameters! Usage: /maptool update [playername] [stretched|covered] "; + warning(I.t(warningMsg)); + return; + } + final String playerName; + final String mapName; + final String url; + final String resize; + final Player sender = playerSender(); + + + if (arguments.size() == 2) { + resize = ""; + playerName = sender.getName(); + mapName = arguments.get(1); + url = arguments.get(0); + } else { + if (arguments.size() == 4) { + if (!Permissions.UPDATEOTHER.grantedTo(sender)) { + info(sender, I.t("You can't use this command")); + return; + } + + playerName = arguments.get(0); + url = arguments.get(1); + resize = arguments.get(2); + mapName = arguments.get(3); + } else { + if (arguments.size() == 3) { + if (arguments.get(1).equals("covered") || arguments.get(1).equals("stretched")) { + + playerName = sender.getName(); + url = arguments.get(0); + resize = arguments.get(1); + mapName = arguments.get(2); + + } else { + if (!Permissions.UPDATEOTHER.grantedTo(sender)) { + info(sender, I.t("You can't use this command")); + return; + } + playerName = arguments.get(0); + url = arguments.get(1); + resize = ""; + mapName = arguments.get(2); + } + } else { + resize = ""; + playerName = ""; + url = ""; + mapName = ""; + } + } } - switch (args[1]) { + + final ImageUtils.ScalingType scaling; + + + switch (resize) { case "stretched": scaling = ImageUtils.ScalingType.STRETCHED; @@ -83,50 +143,65 @@ public class UpdateCommand extends IoMCommand { default: scaling = ImageUtils.ScalingType.CONTAINED; } - ImageMap map; - if (scaling.equals(ImageUtils.ScalingType.CONTAINED)) { - map = getMapFromArgs(player, 1); - } else { - map = getMapFromArgs(player, 2); - } - try { - url = new URL(args[0]); - MapManager.load(); - Integer[] size = {1, 1}; - if (map.getType() == ImageMap.Type.POSTER) { - size = map.getSize(new HashMap(), map.getUserUUID(), map.getId()); + + //TODO passer en static + ImageOnMap.getPlugin().getCommandWorker().OfflineNameFetch(playerName, uuid -> { + if (uuid == null) { + info(sender, I.t("The player {0} does not exist.", playerName)); + return; } - //assert size != null; - int width = size[0]; - int height = size[1]; + ImageMap map = MapManager.getMap(uuid, mapName); + + if (map == null) { + info(sender, I.t("This map does not exist.")); + return; + } + + URL url1; try { - ActionBar.sendPermanentMessage(player, ChatColor.DARK_GREEN + I.t("Updating...")); - ImageRendererExecutor - .update(url, scaling, player.getUniqueId(), map, width, height, new WorkerCallback() { - @Override - public void finished(ImageMap result) { - ActionBar.removeMessage(player); - MessageSender.sendActionBarMessage(player, - ChatColor.DARK_GREEN + I.t("The map was updated using the new image!")); - } + url1 = new URL(url); + MapManager.load(); - @Override - public void errored(Throwable exception) { - player.sendMessage(I.t("{ce}Map rendering failed: {0}", exception.getMessage())); + Integer[] size = {1, 1}; + if (map.getType() == ImageMap.Type.POSTER) { + size = map.getSize(new HashMap(), map.getUserUUID(), map.getId()); + } + //assert size != null; + int width = size[0]; + int height = size[1]; + try { + ActionBar.sendPermanentMessage(sender, ChatColor.DARK_GREEN + I.t("Updating...")); + ImageRendererExecutor + .update(url1, scaling, uuid, map, width, height, new WorkerCallback() { + @Override + public void finished(ImageMap result) { + ActionBar.removeMessage(sender); + MessageSender.sendActionBarMessage(sender, + ChatColor.DARK_GREEN + I.t("The map was updated using the new image!")); + } - PluginLogger.warning("Rendering from {0} failed: {1}: {2}", - player.getName(), - exception.getClass().getCanonicalName(), - exception.getMessage()); - } - }); - } finally { - ActionBar.removeMessage(player); + @Override + public void errored(Throwable exception) { + sender.sendMessage(I.t("{ce}Map rendering failed: {0}", exception.getMessage())); + + PluginLogger.warning("Rendering from {0} failed: {1}: {2}", + sender.getName(), + exception.getClass().getCanonicalName(), + exception.getMessage()); + } + }); + } finally { + ActionBar.removeMessage(sender); + } + } catch (MalformedURLException ex) { + warning(sender, I.t("Invalid URL.")); } - } catch (MalformedURLException ex) { - throwInvalidArgument(I.t("Invalid URL.")); - } + + + }); + + } @Override From 6c45abb6701988a6840504533eff9162de92824d Mon Sep 17 00:00:00 2001 From: Vlammar Date: Sun, 13 Dec 2020 15:23:02 +0100 Subject: [PATCH 08/38] refactor of give command --- .../fr/moribus/imageonmap/ImageOnMap.java | 2 +- .../commands/maptool/GiveCommand.java | 84 ++++++++++++++----- src/main/resources/plugin.yml | 4 +- 3 files changed, 66 insertions(+), 24 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/ImageOnMap.java b/src/main/java/fr/moribus/imageonmap/ImageOnMap.java index 4baa53f..cb2eed2 100644 --- a/src/main/java/fr/moribus/imageonmap/ImageOnMap.java +++ b/src/main/java/fr/moribus/imageonmap/ImageOnMap.java @@ -143,7 +143,7 @@ public final class ImageOnMap extends QuartzPlugin { Commands.registerShortcut("maptool", NewCommand.class, "tomap"); Commands.registerShortcut("maptool", ExploreCommand.class, "maps"); - Commands.registerShortcut("maptool", GiveCommand.class, "mapgive"); + Commands.registerShortcut("maptool", GiveCommand.class, "givemap"); if (PluginConfiguration.CHECK_FOR_UPDATES.get()) { UpdateChecker.boot("imageonmap.26585"); diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java index 44eac1e..e4aa598 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java @@ -36,6 +36,7 @@ package fr.moribus.imageonmap.commands.maptool; +import fr.moribus.imageonmap.ImageOnMap; import fr.moribus.imageonmap.Permissions; import fr.moribus.imageonmap.commands.IoMCommand; import fr.moribus.imageonmap.map.ImageMap; @@ -43,6 +44,9 @@ import fr.moribus.imageonmap.map.MapManager; import fr.zcraft.quartzlib.components.commands.CommandException; import fr.zcraft.quartzlib.components.commands.CommandInfo; import fr.zcraft.quartzlib.components.i18n.I; +import fr.zcraft.quartzlib.tools.mojang.UUIDFetcher; +import java.io.IOException; +import java.util.ArrayList; import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; @@ -54,14 +58,14 @@ import org.bukkit.entity.Player; public class GiveCommand extends IoMCommand { //TODO passer avec une reconnaissance player/UUID, par défaut + /** * Parse an argument given at a specific index, it will return a player depending on the given prefixe. * Can be player:< username > or uuid:< uuid > * * @param index The index. * @return The retrieved player. - * @throws CommandException If the value is invalid. - * + * @throws CommandException If the value is invalid. */ private OfflinePlayer parse(int index) throws CommandException { @@ -119,26 +123,64 @@ public class GiveCommand extends IoMCommand { throwInvalidArgument(I.t("You must give a valid player name and a map name.")); } - final Player p = getPlayerParameter(0); - - ImageMap map; - //TODO add support for map name with spaces "cool name" or name or "name" "cool name with a \" and some stuff" - // should work - OfflinePlayer player = null; - - if (args.length < 4) { - if (args.length == 2) { - player = playerSender(); - } - if (args.length == 3) { - player = parse(2); - } - map = MapManager.getMap(player.getUniqueId(), args[1]); - if (map == null) { - throwInvalidArgument(I.t("Map not found")); - } - map.give(p); + ArrayList arguments = getArgs(); + if (arguments.size() > 3) { + warning(I.t("Too many parameters! Usage: /maptool give [playerFrom] ")); + return; } + if (arguments.size() < 1) { + warning(I.t("Too few parameters! Usage: /maptool give [playerFrom] ")); + return; + } + final String mapName; + final String from; + final String playerName; + final Player sender = playerSender(); + if (arguments.size() == 2) { + from = sender.getName(); + playerName = arguments.get(0); + mapName = arguments.get(1); + } else { + if (arguments.size() == 3) { + from = arguments.get(0); + playerName = arguments.get(1); + mapName = arguments.get(2); + } else { + from = ""; + playerName = ""; + mapName = ""; + } + } + + //TODO passer en static + ImageOnMap.getPlugin().getCommandWorker().OfflineNameFetch(from, uuid -> { + if (uuid == null) { + info(sender, I.t("The player {0} does not exist.", from)); + return; + } + final ImageMap map = MapManager.getMap(uuid, mapName); + + if (map == null) { + info(sender, I.t("This map does not exist.")); + return; + } + try { + UUID uuid2 = UUIDFetcher.fetch(playerName); + if (uuid2 == null) { + info(sender, I.t("The player {0} does not exist.", playerName)); + return; + } + if (map.give(Bukkit.getPlayer(uuid2))) { + info(I.t("The requested map was too big to fit in your inventory.")); + info(I.t("Use '/maptool getremaining' to get the remaining maps.")); + } + + } catch (IOException | InterruptedException e) { + info(sender, I.t("The player {0} does not exist.", playerName)); + return; + } + }); + } @Override diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index c9ecd77..7f19970 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -12,9 +12,9 @@ commands: description: Manage maps maps: description: Manage maps through a GUI - mapgive: + givemap: description: give a map to a player from a player map store, by default take from the player that make the command - usage: / player_to map_name [player_from] + usage: / [player_from] player_to map_name permissions: imageonmap.*: From 2a577dd8d25c9f81b98aefa9936df9c073c40598 Mon Sep 17 00:00:00 2001 From: Vlammar Date: Sun, 13 Dec 2020 15:47:52 +0100 Subject: [PATCH 09/38] Merged explore and exploreother --- .../fr/moribus/imageonmap/ImageOnMap.java | 2 - .../commands/maptool/ExploreCommand.java | 55 ++++++------ .../commands/maptool/ExploreOtherCommand.java | 86 ------------------- .../fr/moribus/imageonmap/gui/MapListGui.java | 3 +- 4 files changed, 31 insertions(+), 115 deletions(-) delete mode 100644 src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreOtherCommand.java diff --git a/src/main/java/fr/moribus/imageonmap/ImageOnMap.java b/src/main/java/fr/moribus/imageonmap/ImageOnMap.java index cb2eed2..241b0ea 100644 --- a/src/main/java/fr/moribus/imageonmap/ImageOnMap.java +++ b/src/main/java/fr/moribus/imageonmap/ImageOnMap.java @@ -39,7 +39,6 @@ package fr.moribus.imageonmap; import fr.moribus.imageonmap.commands.maptool.DeleteCommand; import fr.moribus.imageonmap.commands.maptool.ExploreCommand; -import fr.moribus.imageonmap.commands.maptool.ExploreOtherCommand; import fr.moribus.imageonmap.commands.maptool.GetCommand; import fr.moribus.imageonmap.commands.maptool.GetRemainingCommand; import fr.moribus.imageonmap.commands.maptool.GiveCommand; @@ -136,7 +135,6 @@ public final class ImageOnMap extends QuartzPlugin { GiveCommand.class, GetRemainingCommand.class, ExploreCommand.class, - ExploreOtherCommand.class, MigrateCommand.class, UpdateCommand.class ); diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java index be6ebfe..97449b3 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java @@ -37,6 +37,7 @@ package fr.moribus.imageonmap.commands.maptool; +import fr.moribus.imageonmap.ImageOnMap; import fr.moribus.imageonmap.Permissions; import fr.moribus.imageonmap.commands.IoMCommand; import fr.moribus.imageonmap.gui.MapListGui; @@ -44,7 +45,7 @@ import fr.zcraft.quartzlib.components.commands.CommandException; import fr.zcraft.quartzlib.components.commands.CommandInfo; import fr.zcraft.quartzlib.components.gui.Gui; import fr.zcraft.quartzlib.components.i18n.I; -import fr.zcraft.quartzlib.tools.PluginLogger; +import java.util.ArrayList; import org.bukkit.Bukkit; import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; @@ -55,31 +56,35 @@ import org.bukkit.entity.Player; public class ExploreCommand extends IoMCommand { @Override protected void run() throws CommandException { - if (args.length < 1) { - Gui.open(playerSender(), new MapListGui(playerSender())); - } else { - if (Permissions.LISTOTHER.grantedTo(sender)) { - String name = args[0]; - Player sender = playerSender(); - offlinePlayerParameter(0, uuid -> { - if (uuid == null) { - try { - throwInvalidArgument(I.t("Player not found.")); - } catch (CommandException e) { - PluginLogger.error("CommandException " + e); - return; - } - } - - OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuid); - if (offlinePlayer != null) { - Gui.open(sender, new MapListGui(offlinePlayer, name)); - } else { - PluginLogger.warning(I.t("Can't find player")); - } - }); - } + ArrayList arguments = getArgs(); + if (arguments.size() > 1) { + warning(I.t("Too many parameters! Usage: /maptool get [playername] ")); + return; } + final String playerName; + + final Player sender = playerSender(); + if (arguments.size() == 1) { + if (!Permissions.LISTOTHER.grantedTo(sender)) { + info(sender, I.t("You can't use this command")); + return; + } + playerName = arguments.get(0); + } else { + playerName = sender.getName(); + } + + //TODO passer en static + ImageOnMap.getPlugin().getCommandWorker().OfflineNameFetch(playerName, uuid -> { + if (uuid == null) { + info(sender, I.t("The player {0} does not exist.", playerName)); + return; + } + OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuid); + Gui.open(sender, new MapListGui(offlinePlayer)); + + }); + } @Override diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreOtherCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreOtherCommand.java deleted file mode 100644 index d28b4e8..0000000 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreOtherCommand.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright or © or Copr. Moribus (2013) - * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2020) - * Copyright or © or Copr. Vlammar (2019 – 2020) - * - * This software is a computer program whose purpose is to allow insertion of - * custom images in a Minecraft world. - * - * This software is governed by the CeCILL-B license under French law and - * abiding by the rules of distribution of free software. You can use, - * modify and/ or redistribute the software under the terms of the CeCILL-B - * license as circulated by CEA, CNRS and INRIA at the following URL - * "http://www.cecill.info". - * - * As a counterpart to the access to the source code and rights to copy, - * modify and redistribute granted by the license, users are provided only - * with a limited warranty and the software's author, the holder of the - * economic rights, and the successive licensors have only limited - * liability. - * - * In this respect, the user's attention is drawn to the risks associated - * with loading, using, modifying and/or developing or reproducing the - * software by the user in light of its specific status of free software, - * that may mean that it is complicated to manipulate, and that also - * therefore means that it is reserved for developers and experienced - * professionals having in-depth computer knowledge. Users are therefore - * encouraged to load and test the software's suitability as regards their - * requirements in conditions enabling the security of their systems and/or - * data to be ensured and, more generally, to use and operate it in the - * same conditions as regards security. - * - * The fact that you are presently reading this means that you have had - * knowledge of the CeCILL-B license and that you accept its terms. - */ - -package fr.moribus.imageonmap.commands.maptool; - -import fr.moribus.imageonmap.Permissions; -import fr.moribus.imageonmap.commands.IoMCommand; -import fr.moribus.imageonmap.gui.MapListGui; -import fr.zcraft.quartzlib.components.commands.CommandException; -import fr.zcraft.quartzlib.components.commands.CommandInfo; -import fr.zcraft.quartzlib.components.gui.Gui; -import fr.zcraft.quartzlib.components.i18n.I; -import fr.zcraft.quartzlib.tools.PluginLogger; -import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - - -@CommandInfo(name = "exploreother") -public class ExploreOtherCommand extends IoMCommand { - @Override - protected void run() throws CommandException { - if (args.length < 1) { - warning(I.t("Not enough parameters! Usage: /maptool exploreother ")); - return; - } - String name = args[0]; - Player sender = playerSender(); - offlinePlayerParameter(0, uuid -> { - if (uuid == null) { - try { - throwInvalidArgument(I.t("Player not found.")); - } catch (CommandException e) { - PluginLogger.error("CommandException " + e); - return; - } - } - OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuid); - if (offlinePlayer != null) { - Gui.open(sender, new MapListGui(offlinePlayer, name)); - } else { - PluginLogger.warning(I.t("Can't find player")); - return; - } - }); - } - - @Override - public boolean canExecute(CommandSender sender) { - return Permissions.LISTOTHER.grantedTo(sender); - } -} diff --git a/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java b/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java index 9681f2d..f8230dd 100644 --- a/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java +++ b/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java @@ -51,7 +51,6 @@ import fr.zcraft.quartzlib.tools.items.ItemStackBuilder; import org.bukkit.Color; import org.bukkit.Material; import org.bukkit.OfflinePlayer; -import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.MapMeta; @@ -60,7 +59,7 @@ public class MapListGui extends ExplorerGui { private OfflinePlayer offplayer; private String name; - public MapListGui(Player sender) { + public MapListGui(OfflinePlayer sender) { this.offplayer = sender; this.name = sender.getName(); } From d8b7be43e96cd93e542eab1a3a61ad3be5d5522f Mon Sep 17 00:00:00 2001 From: Vlammar Date: Sun, 13 Dec 2020 15:52:45 +0100 Subject: [PATCH 10/38] Error in the usage msg --- .../fr/moribus/imageonmap/commands/maptool/ExploreCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java index 97449b3..2e3d5f9 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java @@ -58,7 +58,7 @@ public class ExploreCommand extends IoMCommand { protected void run() throws CommandException { ArrayList arguments = getArgs(); if (arguments.size() > 1) { - warning(I.t("Too many parameters! Usage: /maptool get [playername] ")); + warning(I.t("Too many parameters! Usage: /maptool explore [playername]")); return; } final String playerName; From d429be44bc3eb35b0b9c2c4c8cabdb5567e61623 Mon Sep 17 00:00:00 2001 From: Vlammar Date: Sun, 13 Dec 2020 15:57:03 +0100 Subject: [PATCH 11/38] dead code and usage --- .../commands/maptool/GiveCommand.java | 62 +------------------ 1 file changed, 1 insertion(+), 61 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java index e4aa598..62146a7 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java @@ -49,73 +49,13 @@ import java.io.IOException; import java.util.ArrayList; import java.util.UUID; import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -@CommandInfo(name = "give", usageParameters = " or ") +@CommandInfo(name = "give", usageParameters = "[playerFrom] ") public class GiveCommand extends IoMCommand { - //TODO passer avec une reconnaissance player/UUID, par défaut - - /** - * Parse an argument given at a specific index, it will return a player depending on the given prefixe. - * Can be player:< username > or uuid:< uuid > - * - * @param index The index. - * @return The retrieved player. - * @throws CommandException If the value is invalid. - */ - private OfflinePlayer parse(int index) throws CommandException { - - String s = args[index].trim(); - String[] subs = s.split(":"); - //try { - // - if (subs.length == 1) { - return null;//temp - //return offlinePlayerParameter(index); - } - - switch (subs[0]) { - case "player": - return null;//temp - // return offlinePlayerParameter(subs[1]); - - case "uuid": - StringBuffer string = new StringBuffer(subs[1].toLowerCase()); - //if there are no '-' - if (string.length() == 32) { - //we try to fix it by adding - at pos 8,12,16,20 - Integer[] pos = {20, 16, 12, 8}; - for (int i : pos) { - string = string.insert(i, "-"); - } - } - - //if the given uuid is well formed with 8-4-4-4-12 = 36 chars in length (including '-') - if (string.length() == 36) { - return Bukkit.getOfflinePlayer(UUID.fromString(string.toString())); - } - - throwInvalidArgument( - I.t("Invalid uuid, please provide an uuid of this form xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" - + " or xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")); - break; - case "bank": - throwInvalidArgument(I.t("Not supported yet")); - break; - - default: - throwInvalidArgument(I.t("Invalid prefix, valid one are: player | uuid")); - } - /*} catch (InterruptedException | ExecutionException e) { - PluginLogger.warning(I.t("Can't access to mojang API to check the player UUID")); - }*/ - return null; - } - @Override protected void run() throws CommandException { From 7eb646f1a17e1ae553e7a4c80ec9649642727d46 Mon Sep 17 00:00:00 2001 From: Vlammar Date: Wed, 16 Dec 2020 18:55:02 +0100 Subject: [PATCH 12/38] unused code removed --- .../imageonmap/commands/IoMCommand.java | 46 ----------------- .../commands/maptool/GetCommand.java | 50 +++++++++++++------ 2 files changed, 35 insertions(+), 61 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java b/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java index 70e7dbe..96bdf1b 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java @@ -43,56 +43,10 @@ import fr.zcraft.quartzlib.components.commands.CommandException; import fr.zcraft.quartzlib.components.i18n.I; import java.util.ArrayList; import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import org.bukkit.entity.Player; public abstract class IoMCommand extends Command { - //TODO:Add the quote system to zlib and refactor this - protected ImageMap getMapFromArgs(Player player, int index) throws CommandException { - if (args.length <= index) { - throwInvalidArgument(I.t("You need to give a map name.")); - } - - - StringBuilder mapName = new StringBuilder(args[index]); - for (int i = index + 1, c = args.length; i < c; i++) { - mapName.append(" ").append(args[i]); - } - String regex = "((\"([^\\\"]*(\\\\\\\")*)*([^\\\\\\\"]\"))|([^\\\"\\s\\\\]*(\\\\\\s)*[\\\\]*)*\"?)"; - - Pattern pattern = Pattern.compile(regex); - Matcher matcher = pattern.matcher(mapName.toString()); - - StringBuilder result = new StringBuilder(); - - //matcher.find(); - result.append(matcher.group(0)); - if (result != null) { - if (result.charAt(0) == '\"') { - if (result.length() == 1) { - result.deleteCharAt(0); - } else if (result.charAt(result.length() - 1) == '\"') { - result = result.deleteCharAt(result.length() - 1); - if (result != null && !result.equals("") && result.charAt(0) == '\"') { - mapName = new StringBuilder(result.deleteCharAt(0).toString()); - } - - } - } - } - - - mapName = new StringBuilder(mapName.toString().trim()); - ImageMap map; - map = MapManager.getMap(player.getUniqueId(), mapName.toString()); - - if (map == null) { - error(I.t("This map does not exist.")); - } - return map; - } protected ImageMap getMapFromArgs() throws CommandException { return getMapFromArgs(playerSender(), 0, true); diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java index cd0b956..5208990 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java @@ -54,31 +54,51 @@ public class GetCommand extends IoMCommand { @Override protected void run() throws CommandException { ArrayList arguments = getArgs(); - if (arguments.size() > 2) { - warning(I.t("Too many parameters! Usage: /maptool get [playername] ")); + + if (arguments.size() > 1) { + warning(I.t("Too many parameters! Usage: /maptool get [playername]:")); return; } if (arguments.size() < 1) { - warning(I.t("Too few parameters! Usage: /maptool get [playername] ")); + warning(I.t("Too few parameters! Usage: /maptool get [playername]:")); return; } - final String playerName; final String mapName; final Player sender = playerSender(); - if (arguments.size() == 2) { - if (!Permissions.GETOTHER.grantedTo(sender)) { - info(sender, I.t("You can't use this command")); + String[] prefixes = arguments.get(0).split(":"); + + switch (prefixes.length) { + case 1: + playerName = sender.getName(); + mapName = prefixes[0]; + break; + case 2: + if (!Permissions.GETOTHER.grantedTo(sender)) { + info(sender, I.t("You can't use this command")); + return; + } + playerName = prefixes[0]; + mapName = prefixes[1]; + break; + case 3: + if (prefixes[0].equals("p")) { + if (!Permissions.GETOTHER.grantedTo(sender)) { + info(sender, I.t("You can't use this command")); + return; + } + playerName = prefixes[1]; + mapName = prefixes[2]; + } + //insert bank support after + info(sender, I.t("Error in the prefix used, valid ones are ['p:']")); return; - } - - playerName = arguments.get(0); - mapName = arguments.get(1); - } else { - playerName = sender.getName(); - mapName = arguments.get(0); + //break; + default: + playerName = "Error found"; + mapName = "Error found"; } - + //TODO passer en static ImageOnMap.getPlugin().getCommandWorker().OfflineNameFetch(playerName, uuid -> { if (uuid == null) { From 0058dba6803f596c1bd1b0a38e5cc6b7671fef24 Mon Sep 17 00:00:00 2001 From: Vlammar Date: Mon, 11 Jan 2021 22:52:07 +0100 Subject: [PATCH 13/38] Commands now support prefix --- pom.xml | 2 +- .../imageonmap/commands/IoMCommand.java | 58 +++++++++++-------- .../commands/maptool/DeleteCommand.java | 2 +- .../commands/maptool/ExploreCommand.java | 4 +- .../commands/maptool/GetCommand.java | 2 +- .../commands/maptool/GiveCommand.java | 48 +++++++++++---- .../commands/maptool/ListCommand.java | 2 +- .../commands/maptool/UpdateCommand.java | 2 +- 8 files changed, 76 insertions(+), 44 deletions(-) diff --git a/pom.xml b/pom.xml index e927e37..9407c79 100644 --- a/pom.xml +++ b/pom.xml @@ -93,7 +93,7 @@ fr.zcraft quartzlib - 0.0.1 + 0.0.2 org.bstats diff --git a/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java b/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java index 96bdf1b..4bbc798 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java @@ -82,32 +82,40 @@ public abstract class IoMCommand extends Command { //State of the automaton, can read word like: //name_here; "name here" int state = 0; - StringBuilder s = new StringBuilder(); - for (String arg : args) { - switch (state) { - case 0: - if (arg.startsWith("\"")) { - state = 1; - arg = arg.substring(1); + StringBuilder s; - s = s.append(arg); - } else { - arguments.add(arg.toString()); - } - break; - case 1: - if (arg.endsWith("\"")) { - arg = arg.substring(0, arg.length() - 1); - s = s.append(" " + arg); - arguments.add(s.toString()); - s = new StringBuilder(); - state = 0; - } else { - s = s.append(" " + arg); - } - break; - default: - throw new IllegalStateException("Unexpected value: " + state); + for (String arg : args) { + s = new StringBuilder(); + for (char c : arg.toCharArray()) { + switch (state) { + case 0: + if (c == '\"') { + state = 1; + } else { + //If we read a : that means that we are on a new argument example:"hello" + if (c == ':') { + arguments.add(s.toString()); + s = new StringBuilder(); + } else { + s = s.append(c); + } + } + break; + case 1: + if (c == '\"') { + arguments.add(s.toString()); + s = new StringBuilder(); + state = 0; + } else { + s = s.append(c); + } + break; + default: + throw new IllegalStateException("Unexpected value: " + state); + } + } + if (s.length() > 0) { + arguments.add(s.toString()); } } return arguments; diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java index 19d2f1e..ab6d99d 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java @@ -104,7 +104,7 @@ public class DeleteCommand extends IoMCommand { } //TODO passer en static - ImageOnMap.getPlugin().getCommandWorker().OfflineNameFetch(playerName, uuid -> { + ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> { if (uuid == null) { info(sender, I.t("The player {0} does not exist.", playerName)); return; diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java index 2e3d5f9..abede90 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java @@ -75,13 +75,13 @@ public class ExploreCommand extends IoMCommand { } //TODO passer en static - ImageOnMap.getPlugin().getCommandWorker().OfflineNameFetch(playerName, uuid -> { + ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> { if (uuid == null) { info(sender, I.t("The player {0} does not exist.", playerName)); return; } OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuid); - Gui.open(sender, new MapListGui(offlinePlayer)); + Gui.open(sender, new MapListGui(offlinePlayer,playerName)); }); diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java index 5208990..55bc9de 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java @@ -100,7 +100,7 @@ public class GetCommand extends IoMCommand { } //TODO passer en static - ImageOnMap.getPlugin().getCommandWorker().OfflineNameFetch(playerName, uuid -> { + ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> { if (uuid == null) { info(sender, I.t("The player {0} does not exist.", playerName)); return; diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java index 62146a7..5022017 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java @@ -44,6 +44,7 @@ import fr.moribus.imageonmap.map.MapManager; import fr.zcraft.quartzlib.components.commands.CommandException; import fr.zcraft.quartzlib.components.commands.CommandInfo; import fr.zcraft.quartzlib.components.i18n.I; +import fr.zcraft.quartzlib.tools.PluginLogger; import fr.zcraft.quartzlib.tools.mojang.UUIDFetcher; import java.io.IOException; import java.util.ArrayList; @@ -53,7 +54,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -@CommandInfo(name = "give", usageParameters = "[playerFrom] ") +@CommandInfo(name = "give", usageParameters = " [playerFrom]:") public class GiveCommand extends IoMCommand { @Override @@ -64,26 +65,41 @@ public class GiveCommand extends IoMCommand { } ArrayList arguments = getArgs(); + + for (String arg : arguments) { + PluginLogger.info(arg); + } + if (arguments.size() > 3) { - warning(I.t("Too many parameters! Usage: /maptool give [playerFrom] ")); + warning(I.t("Too many parameters! Usage: /maptool give [playerFrom]:")); return; } if (arguments.size() < 1) { - warning(I.t("Too few parameters! Usage: /maptool give [playerFrom] ")); + warning(I.t("Too few parameters! Usage: /maptool give [playerFrom]:")); return; } final String mapName; final String from; final String playerName; - final Player sender = playerSender(); + final Player playerSender; + Player playerSender1; + try { + playerSender1 = playerSender(); + } catch (CommandException ignored) { + if (arguments.size() == 2) { + throwInvalidArgument(I.t("Usage: /maptool give :")); + } + playerSender1 = null; + } + playerSender = playerSender1; if (arguments.size() == 2) { - from = sender.getName(); + from = playerSender.getName(); playerName = arguments.get(0); mapName = arguments.get(1); } else { if (arguments.size() == 3) { - from = arguments.get(0); - playerName = arguments.get(1); + from = arguments.get(1); + playerName = arguments.get(0); mapName = arguments.get(2); } else { from = ""; @@ -93,21 +109,27 @@ public class GiveCommand extends IoMCommand { } //TODO passer en static - ImageOnMap.getPlugin().getCommandWorker().OfflineNameFetch(from, uuid -> { + ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(from, uuid -> { if (uuid == null) { - info(sender, I.t("The player {0} does not exist.", from)); + if (playerSender != null) { + info(playerSender, I.t("The player {0} does not exist.", from)); + } return; } final ImageMap map = MapManager.getMap(uuid, mapName); if (map == null) { - info(sender, I.t("This map does not exist.")); + if (playerSender != null) { + info(playerSender, I.t("This map does not exist.")); + } return; } try { UUID uuid2 = UUIDFetcher.fetch(playerName); if (uuid2 == null) { - info(sender, I.t("The player {0} does not exist.", playerName)); + if (playerSender != null) { + info(playerSender, I.t("The player {0} does not exist.", playerName)); + } return; } if (map.give(Bukkit.getPlayer(uuid2))) { @@ -116,7 +138,9 @@ public class GiveCommand extends IoMCommand { } } catch (IOException | InterruptedException e) { - info(sender, I.t("The player {0} does not exist.", playerName)); + if (playerSender != null) { + info(playerSender, I.t("The player {0} does not exist.", playerName)); + } return; } }); diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java index 7823d5e..27e7529 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java @@ -79,7 +79,7 @@ public class ListCommand extends IoMCommand { final Player sender = playerSender(); //TODO passer en static - ImageOnMap.getPlugin().getCommandWorker().OfflineNameFetch(playerName, uuid -> { + ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> { List mapList = MapManager.getMapList(uuid); if (uuid == null) { info(sender, I.t("Player {} not found.", playerName)); diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java index d8b718b..0218614 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java @@ -146,7 +146,7 @@ public class UpdateCommand extends IoMCommand { //TODO passer en static - ImageOnMap.getPlugin().getCommandWorker().OfflineNameFetch(playerName, uuid -> { + ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> { if (uuid == null) { info(sender, I.t("The player {0} does not exist.", playerName)); return; From 918f51e76b9fa8415564e36dcb4be87d89a8afe0 Mon Sep 17 00:00:00 2001 From: Vlammar Date: Tue, 12 Jan 2021 23:45:06 +0100 Subject: [PATCH 14/38] All commands now support the prefix and most can be used on a commandblock or terminal (except delete and create) --- .../imageonmap/commands/IoMCommand.java | 4 + .../commands/maptool/DeleteCommand.java | 4 +- .../commands/maptool/GetCommand.java | 45 +++---- .../commands/maptool/GiveCommand.java | 5 - .../commands/maptool/RenameCommand.java | 1 - .../commands/maptool/UpdateCommand.java | 118 +++++++++++------- .../fr/moribus/imageonmap/map/ImageMap.java | 2 +- .../fr/moribus/imageonmap/map/MapManager.java | 10 +- 8 files changed, 104 insertions(+), 85 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java b/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java index 4bbc798..ce21902 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java @@ -85,6 +85,10 @@ public abstract class IoMCommand extends Command { StringBuilder s; for (String arg : args) { + if (arg.startsWith("http:") || arg.startsWith("https:")) { + arguments.add(arg); + continue; + } s = new StringBuilder(); for (char c : arg.toCharArray()) { switch (state) { diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java index ab6d99d..5e769e8 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java @@ -78,11 +78,11 @@ public class DeleteCommand extends IoMCommand { final boolean confirm = hasFlag("confirm"); if (arguments.size() > 3 || (arguments.size() > 2 && !confirm)) { - warning(I.t("Too many parameters! Usage: /maptool delete [playername] ")); + warning(I.t("Too many parameters! Usage: /maptool delete [playername]:")); return; } if (arguments.size() < 1) { - warning(I.t("Too few parameters! Usage: /maptool delete [playername] ")); + warning(I.t("Too few parameters! Usage: /maptool delete [playername]:")); return; } diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java index 55bc9de..c025181 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java @@ -55,7 +55,7 @@ public class GetCommand extends IoMCommand { protected void run() throws CommandException { ArrayList arguments = getArgs(); - if (arguments.size() > 1) { + if (arguments.size() > 2) { warning(I.t("Too many parameters! Usage: /maptool get [playername]:")); return; } @@ -66,39 +66,22 @@ public class GetCommand extends IoMCommand { final String playerName; final String mapName; final Player sender = playerSender(); - String[] prefixes = arguments.get(0).split(":"); - switch (prefixes.length) { - case 1: - playerName = sender.getName(); - mapName = prefixes[0]; - break; - case 2: - if (!Permissions.GETOTHER.grantedTo(sender)) { - info(sender, I.t("You can't use this command")); - return; - } - playerName = prefixes[0]; - mapName = prefixes[1]; - break; - case 3: - if (prefixes[0].equals("p")) { - if (!Permissions.GETOTHER.grantedTo(sender)) { - info(sender, I.t("You can't use this command")); - return; - } - playerName = prefixes[1]; - mapName = prefixes[2]; - } - //insert bank support after - info(sender, I.t("Error in the prefix used, valid ones are ['p:']")); + if (arguments.size() == 1) { + playerName = sender.getName(); + mapName = arguments.get(0); + } else { + if (!Permissions.GETOTHER.grantedTo(sender)) { + info(sender, I.t("You can't use this command")); return; - //break; - default: - playerName = "Error found"; - mapName = "Error found"; + } + playerName = arguments.get(0); + mapName = arguments.get(1); } - + + + + //TODO passer en static ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> { if (uuid == null) { diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java index 5022017..3177904 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java @@ -44,7 +44,6 @@ import fr.moribus.imageonmap.map.MapManager; import fr.zcraft.quartzlib.components.commands.CommandException; import fr.zcraft.quartzlib.components.commands.CommandInfo; import fr.zcraft.quartzlib.components.i18n.I; -import fr.zcraft.quartzlib.tools.PluginLogger; import fr.zcraft.quartzlib.tools.mojang.UUIDFetcher; import java.io.IOException; import java.util.ArrayList; @@ -66,10 +65,6 @@ public class GiveCommand extends IoMCommand { ArrayList arguments = getArgs(); - for (String arg : arguments) { - PluginLogger.info(arg); - } - if (arguments.size() > 3) { warning(I.t("Too many parameters! Usage: /maptool give [playerFrom]:")); return; diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/RenameCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/RenameCommand.java index 49fcc2c..ec89ac4 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/RenameCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/RenameCommand.java @@ -48,7 +48,6 @@ public class RenameCommand extends IoMCommand { return; } map.rename(argList.get(1)); - } @Override diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java index 0218614..86e2191 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java @@ -53,27 +53,26 @@ import fr.zcraft.quartzlib.tools.text.MessageSender; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; -import java.util.HashMap; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -@CommandInfo(name = "update", usageParameters = "[playername] [stretched|covered] ") +@CommandInfo(name = "update", usageParameters = "[player name]: [stretched|covered] ") public class UpdateCommand extends IoMCommand { @Override protected void run() throws CommandException { - + //TODO fix the issue where to many quick usage of offlineNameFetch will return null ArrayList arguments = getArgs(); String warningMsg; if (arguments.size() > 4) { warningMsg = "Too many parameters!" - + " Usage: /maptool update [playername] [stretched|covered] "; + + " Usage: /maptool update [player name]: [stretched|covered]"; warning(I.t(warningMsg)); return; } if (arguments.size() < 2) { warningMsg = - "Too few parameters! Usage: /maptool update [playername] [stretched|covered] "; + "Too few parameters! Usage: /maptool update [player name]: [stretched|covered]"; warning(I.t(warningMsg)); return; } @@ -81,43 +80,56 @@ public class UpdateCommand extends IoMCommand { final String mapName; final String url; final String resize; - final Player sender = playerSender(); + final Player playerSender; + Player playerSender1; + try { + playerSender1 = playerSender(); + } catch (CommandException ignored) { + if (arguments.size() == 2) { + throwInvalidArgument( + I.t("Usage: /maptool update [player name]: [stretched|covered]")); + } + playerSender1 = null; + } + playerSender = playerSender1; + //Sent by a non player and not enough arguments + if (arguments.size() == 2 && playerSender == null) { + PluginLogger.warning("Usage: /maptool update [player name]: [stretched|covered]"); + return; + } if (arguments.size() == 2) { resize = ""; - playerName = sender.getName(); - mapName = arguments.get(1); - url = arguments.get(0); + playerName = playerSender.getName(); + mapName = arguments.get(0); + url = arguments.get(1); } else { if (arguments.size() == 4) { - if (!Permissions.UPDATEOTHER.grantedTo(sender)) { - info(sender, I.t("You can't use this command")); + if (playerSender != null && !Permissions.UPDATEOTHER.grantedTo(playerSender)) { + info(playerSender, I.t("You can't use this command")); return; } - playerName = arguments.get(0); - url = arguments.get(1); - resize = arguments.get(2); - mapName = arguments.get(3); + mapName = arguments.get(1); + url = arguments.get(2); + resize = arguments.get(3); } else { if (arguments.size() == 3) { - if (arguments.get(1).equals("covered") || arguments.get(1).equals("stretched")) { - - playerName = sender.getName(); - url = arguments.get(0); - resize = arguments.get(1); - mapName = arguments.get(2); - + if (arguments.get(2).equals("covered") || arguments.get(2).equals("stretched")) { + playerName = playerSender.getName(); + mapName = arguments.get(0); + url = arguments.get(1); + resize = arguments.get(2); } else { - if (!Permissions.UPDATEOTHER.grantedTo(sender)) { - info(sender, I.t("You can't use this command")); + if (playerSender != null && !Permissions.UPDATEOTHER.grantedTo(playerSender)) { + info(playerSender, I.t("You can't use this command")); return; } playerName = arguments.get(0); - url = arguments.get(1); + mapName = arguments.get(1); + url = arguments.get(2); resize = ""; - mapName = arguments.get(2); } } else { resize = ""; @@ -128,10 +140,8 @@ public class UpdateCommand extends IoMCommand { } } - final ImageUtils.ScalingType scaling; - switch (resize) { case "stretched": @@ -144,61 +154,81 @@ public class UpdateCommand extends IoMCommand { scaling = ImageUtils.ScalingType.CONTAINED; } - //TODO passer en static ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> { if (uuid == null) { - info(sender, I.t("The player {0} does not exist.", playerName)); + if (playerSender != null) { + info(playerSender, I.t("The player {0} does not exist.", playerName)); + } else { + PluginLogger.info(I.t("The player {0} does not exist.", playerName)); + } return; } ImageMap map = MapManager.getMap(uuid, mapName); if (map == null) { - info(sender, I.t("This map does not exist.")); + if (playerSender != null) { + info(playerSender, I.t("This map does not exist.")); + } else { + PluginLogger.info(I.t("This map does not exist.")); + ; + } return; } URL url1; try { url1 = new URL(url); - MapManager.load(); + //TODO replace by a check of the load status.(if not loaded load the mapmanager) + MapManager.load(false);//we don't want to spam the console each time we reload the mapManager Integer[] size = {1, 1}; if (map.getType() == ImageMap.Type.POSTER) { - size = map.getSize(new HashMap(), map.getUserUUID(), map.getId()); + size = map.getSize(map.getUserUUID(), map.getId()); } //assert size != null; int width = size[0]; int height = size[1]; try { - ActionBar.sendPermanentMessage(sender, ChatColor.DARK_GREEN + I.t("Updating...")); + if (playerSender != null) { + ActionBar.sendPermanentMessage(playerSender, ChatColor.DARK_GREEN + I.t("Updating...")); + } ImageRendererExecutor .update(url1, scaling, uuid, map, width, height, new WorkerCallback() { @Override public void finished(ImageMap result) { - ActionBar.removeMessage(sender); - MessageSender.sendActionBarMessage(sender, - ChatColor.DARK_GREEN + I.t("The map was updated using the new image!")); + if (playerSender != null) { + ActionBar.removeMessage(playerSender); + MessageSender.sendActionBarMessage(playerSender, + ChatColor.DARK_GREEN + I.t("The map was updated using the new image!")); + } } @Override public void errored(Throwable exception) { - sender.sendMessage(I.t("{ce}Map rendering failed: {0}", exception.getMessage())); - + if (playerSender != null) { + playerSender + .sendMessage( + I.t("{ce}Map rendering failed: {0}", exception.getMessage())); + } PluginLogger.warning("Rendering from {0} failed: {1}: {2}", - sender.getName(), + playerSender.getName(), exception.getClass().getCanonicalName(), exception.getMessage()); } }); } finally { - ActionBar.removeMessage(sender); + if (playerSender != null) { + ActionBar.removeMessage(playerSender); + } } } catch (MalformedURLException ex) { - warning(sender, I.t("Invalid URL.")); + if (playerSender != null) { + warning(playerSender, I.t("Invalid URL.")); + } else { + PluginLogger.warning(I.t("Invalid URL.")); + } } - - }); diff --git a/src/main/java/fr/moribus/imageonmap/map/ImageMap.java b/src/main/java/fr/moribus/imageonmap/map/ImageMap.java index bb9e5dc..2230aa1 100644 --- a/src/main/java/fr/moribus/imageonmap/map/ImageMap.java +++ b/src/main/java/fr/moribus/imageonmap/map/ImageMap.java @@ -108,7 +108,7 @@ public abstract class ImageMap implements ConfigurationSerializable { } } - public static Integer[] getSize(Map map, UUID playerUUID, String id) { + public static Integer[] getSize(UUID playerUUID, String id) { ConfigurationSection section = MapManager.getPlayerMapStore(playerUUID).getToolConfig().getConfigurationSection("PlayerMapStore"); diff --git a/src/main/java/fr/moribus/imageonmap/map/MapManager.java b/src/main/java/fr/moribus/imageonmap/map/MapManager.java index c20caad..66a16dc 100644 --- a/src/main/java/fr/moribus/imageonmap/map/MapManager.java +++ b/src/main/java/fr/moribus/imageonmap/map/MapManager.java @@ -260,7 +260,13 @@ public abstract class MapManager { } } + //Silent load public static void load() { + load(true); + } + + //Loading + public static void load(boolean verbose) { int loadedFilesCount = 0; for (File file : ImageOnMap.getPlugin().getMapsDirectory().listFiles()) { UUID uuid = getUUIDFromFile(file); @@ -271,7 +277,9 @@ public abstract class MapManager { ++loadedFilesCount; } - PluginLogger.info("Loaded {0} player map files.", loadedFilesCount); + if (verbose) { + PluginLogger.info("Loaded {0} player map files.", loadedFilesCount); + } } public static void save() { From f488bc5d341e5c70ba62b4f5192019eb67ad66b5 Mon Sep 17 00:00:00 2001 From: Vlammar <36545324+Vlammar@users.noreply.github.com> Date: Fri, 5 Feb 2021 16:39:22 +0100 Subject: [PATCH 15/38] Update src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java Co-authored-by: Amaury Carrade --- .../java/fr/moribus/imageonmap/commands/maptool/GetCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java index c025181..e1e33b1 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java @@ -85,7 +85,7 @@ public class GetCommand extends IoMCommand { //TODO passer en static ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> { if (uuid == null) { - info(sender, I.t("The player {0} does not exist.", playerName)); + warning(sender, I.t("The player {0} does not exist.", playerName)); return; } ImageMap map = MapManager.getMap(uuid, mapName); From 8e33588a1448cb137aa45fd25a46542422a97f98 Mon Sep 17 00:00:00 2001 From: Vlammar <36545324+Vlammar@users.noreply.github.com> Date: Fri, 5 Feb 2021 16:39:32 +0100 Subject: [PATCH 16/38] Update src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java Co-authored-by: Amaury Carrade --- .../java/fr/moribus/imageonmap/commands/maptool/GetCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java index e1e33b1..edf7d6f 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java @@ -91,7 +91,7 @@ public class GetCommand extends IoMCommand { ImageMap map = MapManager.getMap(uuid, mapName); if (map == null) { - info(sender, I.t("This map does not exist.")); + warning(sender, I.t("This map does not exist.")); return; } From 9bac0bfa5e99e26b61c5b59528fe1806f1308805 Mon Sep 17 00:00:00 2001 From: Vlammar <36545324+Vlammar@users.noreply.github.com> Date: Fri, 5 Feb 2021 16:39:47 +0100 Subject: [PATCH 17/38] Update src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java Co-authored-by: Amaury Carrade --- .../moribus/imageonmap/commands/maptool/ExploreCommand.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java index abede90..a4b3332 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java @@ -81,7 +81,9 @@ public class ExploreCommand extends IoMCommand { return; } OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuid); - Gui.open(sender, new MapListGui(offlinePlayer,playerName)); + if (sender.isOnline()) { + Gui.open(sender, new MapListGui(offlinePlayer,playerName)); + } }); From 05b70e1f2a24aa99dfceddf926c7cef66509a4e4 Mon Sep 17 00:00:00 2001 From: Vlammar <36545324+Vlammar@users.noreply.github.com> Date: Fri, 5 Feb 2021 16:40:00 +0100 Subject: [PATCH 18/38] Update src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java Co-authored-by: Amaury Carrade --- .../fr/moribus/imageonmap/commands/maptool/GiveCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java index 3177904..95f2ddf 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java @@ -82,7 +82,7 @@ public class GiveCommand extends IoMCommand { playerSender1 = playerSender(); } catch (CommandException ignored) { if (arguments.size() == 2) { - throwInvalidArgument(I.t("Usage: /maptool give :")); + throwInvalidArgument(I.t("Player name is required from the console")); } playerSender1 = null; } From 2ea35e0875d83f8c5cbb2c4e87fab2e7da97072a Mon Sep 17 00:00:00 2001 From: Vlammar <36545324+Vlammar@users.noreply.github.com> Date: Fri, 5 Feb 2021 16:40:24 +0100 Subject: [PATCH 19/38] Update src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java Co-authored-by: Amaury Carrade --- .../fr/moribus/imageonmap/commands/maptool/GiveCommand.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java index 95f2ddf..a6874ee 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java @@ -122,9 +122,7 @@ public class GiveCommand extends IoMCommand { try { UUID uuid2 = UUIDFetcher.fetch(playerName); if (uuid2 == null) { - if (playerSender != null) { - info(playerSender, I.t("The player {0} does not exist.", playerName)); - } + warning(sender, I.t("The player {0} does not exist.", playerName)); return; } if (map.give(Bukkit.getPlayer(uuid2))) { From 0d008126a39e0c7a16b01fdad3cd96860993c92e Mon Sep 17 00:00:00 2001 From: Vlammar <36545324+Vlammar@users.noreply.github.com> Date: Fri, 5 Feb 2021 16:40:37 +0100 Subject: [PATCH 20/38] Update src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java Co-authored-by: Amaury Carrade --- .../fr/moribus/imageonmap/commands/maptool/GiveCommand.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java index a6874ee..f3fb9e7 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java @@ -106,9 +106,7 @@ public class GiveCommand extends IoMCommand { //TODO passer en static ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(from, uuid -> { if (uuid == null) { - if (playerSender != null) { - info(playerSender, I.t("The player {0} does not exist.", from)); - } + warning(sender, I.t("The player {0} does not exist.", from)); return; } final ImageMap map = MapManager.getMap(uuid, mapName); From eae2e48a35c6eeb02db63dd11c22542fecf1df3e Mon Sep 17 00:00:00 2001 From: Vlammar <36545324+Vlammar@users.noreply.github.com> Date: Fri, 5 Feb 2021 16:40:50 +0100 Subject: [PATCH 21/38] Update src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java Co-authored-by: Amaury Carrade --- .../fr/moribus/imageonmap/commands/maptool/GiveCommand.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java index f3fb9e7..d7688a6 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java @@ -112,9 +112,7 @@ public class GiveCommand extends IoMCommand { final ImageMap map = MapManager.getMap(uuid, mapName); if (map == null) { - if (playerSender != null) { - info(playerSender, I.t("This map does not exist.")); - } + warning(sender, I.t("This map does not exist.")); return; } try { From f94bd9c720520286a72731e0a0e9054363815f50 Mon Sep 17 00:00:00 2001 From: Vlammar <36545324+Vlammar@users.noreply.github.com> Date: Fri, 5 Feb 2021 16:40:59 +0100 Subject: [PATCH 22/38] Update src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java Co-authored-by: Amaury Carrade --- .../fr/moribus/imageonmap/commands/maptool/GiveCommand.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java index d7688a6..1410de2 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java @@ -127,9 +127,7 @@ public class GiveCommand extends IoMCommand { } } catch (IOException | InterruptedException e) { - if (playerSender != null) { - info(playerSender, I.t("The player {0} does not exist.", playerName)); - } + warning(sender, I.t("The player {0} does not exist.", playerName)); return; } }); From 3b4af2146b1ee86b3a9178a5310733b22d96431c Mon Sep 17 00:00:00 2001 From: Vlammar <36545324+Vlammar@users.noreply.github.com> Date: Fri, 5 Feb 2021 16:43:25 +0100 Subject: [PATCH 23/38] Update src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java Co-authored-by: Amaury Carrade --- .../moribus/imageonmap/commands/maptool/UpdateCommand.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java index 86e2191..bcd454c 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java @@ -223,11 +223,7 @@ public class UpdateCommand extends IoMCommand { } } } catch (MalformedURLException ex) { - if (playerSender != null) { - warning(playerSender, I.t("Invalid URL.")); - } else { - PluginLogger.warning(I.t("Invalid URL.")); - } + warning(sender, I.t("Invalid URL.")); } }); From 413353deea73d1a5f1eacd5c44028c6589a40f6d Mon Sep 17 00:00:00 2001 From: Vlammar <36545324+Vlammar@users.noreply.github.com> Date: Fri, 5 Feb 2021 16:52:20 +0100 Subject: [PATCH 24/38] Update src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java Co-authored-by: Amaury Carrade --- .../java/fr/moribus/imageonmap/commands/maptool/GetCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java index edf7d6f..c505055 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java @@ -72,7 +72,7 @@ public class GetCommand extends IoMCommand { mapName = arguments.get(0); } else { if (!Permissions.GETOTHER.grantedTo(sender)) { - info(sender, I.t("You can't use this command")); + throwNotAuthorized(); return; } playerName = arguments.get(0); From e5bd1fd805383b68e9a4994bc34687a6cf09702b Mon Sep 17 00:00:00 2001 From: Vlammar <36545324+Vlammar@users.noreply.github.com> Date: Fri, 5 Feb 2021 16:52:35 +0100 Subject: [PATCH 25/38] Update src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java Co-authored-by: Amaury Carrade --- .../fr/moribus/imageonmap/commands/maptool/ExploreCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java index a4b3332..d5bce6b 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java @@ -77,7 +77,7 @@ public class ExploreCommand extends IoMCommand { //TODO passer en static ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> { if (uuid == null) { - info(sender, I.t("The player {0} does not exist.", playerName)); + warning(sender, I.t("The player {0} does not exist.", playerName)); return; } OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuid); From 003643e3cd4ed97eb5b142759973e4b466928a27 Mon Sep 17 00:00:00 2001 From: Vlammar <36545324+Vlammar@users.noreply.github.com> Date: Fri, 5 Feb 2021 16:52:50 +0100 Subject: [PATCH 26/38] Update src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java Co-authored-by: Amaury Carrade --- .../java/fr/moribus/imageonmap/commands/maptool/GetCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java index c505055..520df43 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java @@ -60,7 +60,7 @@ public class GetCommand extends IoMCommand { return; } if (arguments.size() < 1) { - warning(I.t("Too few parameters! Usage: /maptool get [playername]:")); + throwInvalidArgument(I.t("Too few parameters!")); return; } final String playerName; From 8da7f86978e9e28623f69d20c17f5fb8fe9f90f3 Mon Sep 17 00:00:00 2001 From: Vlammar <36545324+Vlammar@users.noreply.github.com> Date: Fri, 5 Feb 2021 16:53:08 +0100 Subject: [PATCH 27/38] Update src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java Co-authored-by: Amaury Carrade --- .../java/fr/moribus/imageonmap/commands/maptool/GetCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java index 520df43..3ddc46e 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java @@ -56,7 +56,7 @@ public class GetCommand extends IoMCommand { ArrayList arguments = getArgs(); if (arguments.size() > 2) { - warning(I.t("Too many parameters! Usage: /maptool get [playername]:")); + throwInvalidArgument(I.t("Too many parameters!")); return; } if (arguments.size() < 1) { From ded83688824b7f1a092178c561ad0098eb07ebfa Mon Sep 17 00:00:00 2001 From: Vlammar <36545324+Vlammar@users.noreply.github.com> Date: Fri, 5 Feb 2021 16:53:32 +0100 Subject: [PATCH 28/38] Update src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java Co-authored-by: Amaury Carrade --- .../fr/moribus/imageonmap/commands/maptool/ExploreCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java index d5bce6b..5be1f9d 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java @@ -58,7 +58,7 @@ public class ExploreCommand extends IoMCommand { protected void run() throws CommandException { ArrayList arguments = getArgs(); if (arguments.size() > 1) { - warning(I.t("Too many parameters! Usage: /maptool explore [playername]")); + throwInvalidArgument(I.t("Too many parameters!")); return; } final String playerName; From 26e5b5c538e7ab0d98d4ffe9825ebef66db0d32c Mon Sep 17 00:00:00 2001 From: Vlammar <36545324+Vlammar@users.noreply.github.com> Date: Fri, 5 Feb 2021 16:53:46 +0100 Subject: [PATCH 29/38] Update src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java Co-authored-by: Amaury Carrade --- .../fr/moribus/imageonmap/commands/maptool/ExploreCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java index 5be1f9d..007a14f 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java @@ -66,7 +66,7 @@ public class ExploreCommand extends IoMCommand { final Player sender = playerSender(); if (arguments.size() == 1) { if (!Permissions.LISTOTHER.grantedTo(sender)) { - info(sender, I.t("You can't use this command")); + throwNotAuthorized(); return; } playerName = arguments.get(0); From 3c3ca165db5127e02d4c89c17ea10aeefa55ed16 Mon Sep 17 00:00:00 2001 From: Vlammar <36545324+Vlammar@users.noreply.github.com> Date: Fri, 5 Feb 2021 16:58:56 +0100 Subject: [PATCH 30/38] Apply suggestions from code review Co-authored-by: Amaury Carrade --- .../commands/maptool/DeleteCommand.java | 12 +++++----- .../commands/maptool/GetCommand.java | 1 + .../commands/maptool/GiveCommand.java | 4 ++-- .../commands/maptool/ListCommand.java | 4 ++-- .../commands/maptool/UpdateCommand.java | 23 ++++++------------- src/main/resources/plugin.yml | 4 ++-- 6 files changed, 20 insertions(+), 28 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java index 5e769e8..9136152 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java @@ -78,11 +78,11 @@ public class DeleteCommand extends IoMCommand { final boolean confirm = hasFlag("confirm"); if (arguments.size() > 3 || (arguments.size() > 2 && !confirm)) { - warning(I.t("Too many parameters! Usage: /maptool delete [playername]:")); + throwInvalidArgument(I.t("Too many parameters!")); return; } if (arguments.size() < 1) { - warning(I.t("Too few parameters! Usage: /maptool delete [playername]:")); + throwInvalidArgument(I.t("Too few parameters!")); return; } @@ -92,7 +92,7 @@ public class DeleteCommand extends IoMCommand { info(sender, "" + arguments.size()); if (arguments.size() == 2 || arguments.size() == 3) { if (!Permissions.DELETEOTHER.grantedTo(sender)) { - info(sender, I.t("You can't use this command")); + throwNotAuthorized(); return; } @@ -106,13 +106,13 @@ public class DeleteCommand extends IoMCommand { //TODO passer en static ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> { if (uuid == null) { - info(sender, I.t("The player {0} does not exist.", playerName)); + warning(sender, I.t("The player {0} does not exist.", playerName)); return; } ImageMap map = MapManager.getMap(uuid, mapName); if (map == null) { - info(sender, I.t("This map does not exist.")); + warning(sender, I.t("This map does not exist.")); return; } @@ -125,7 +125,7 @@ public class DeleteCommand extends IoMCommand { try { MapManager.deleteMap(map); - info(sender, I.t("Map successfully deleted.")); + success(sender, I.t("Map successfully deleted.")); } catch (MapManagerException ex) { PluginLogger.warning(I.t("A non-existent map was requested to be deleted", ex)); warning(sender, I.t("This map does not exist.")); diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java index 3ddc46e..0127099 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java @@ -84,6 +84,7 @@ public class GetCommand extends IoMCommand { //TODO passer en static ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> { + if (!sender.isOnline()) return; if (uuid == null) { warning(sender, I.t("The player {0} does not exist.", playerName)); return; diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java index 1410de2..fc95c10 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java @@ -66,11 +66,11 @@ public class GiveCommand extends IoMCommand { ArrayList arguments = getArgs(); if (arguments.size() > 3) { - warning(I.t("Too many parameters! Usage: /maptool give [playerFrom]:")); + throwInvalidArgument(I.t("Too many parameters!")); return; } if (arguments.size() < 1) { - warning(I.t("Too few parameters! Usage: /maptool give [playerFrom]:")); + throwInvalidArgument(I.t("Too few parameters!")); return; } final String mapName; diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java index 27e7529..d25277b 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java @@ -60,14 +60,14 @@ public class ListCommand extends IoMCommand { protected void run() throws CommandException { ArrayList arguments = getArgs(); if (arguments.size() > 1) { - warning(I.t("Too many parameters! Usage: /maptool list [playername]")); + throwInvalidArgument(I.t("Too many parameters!")); return; } String playerName; if (arguments.size() == 1) { if (!Permissions.LISTOTHER.grantedTo(sender)) { - info(sender, I.t("You can't use this command")); + throwNotAuthorized(); return; } diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java index bcd454c..a7ea1fd 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java @@ -95,7 +95,7 @@ public class UpdateCommand extends IoMCommand { //Sent by a non player and not enough arguments if (arguments.size() == 2 && playerSender == null) { - PluginLogger.warning("Usage: /maptool update [player name]: [stretched|covered]"); + throwInvalidArgument("Usage: /maptool update [player name]: [stretched|covered]"); return; } @@ -106,8 +106,8 @@ public class UpdateCommand extends IoMCommand { url = arguments.get(1); } else { if (arguments.size() == 4) { - if (playerSender != null && !Permissions.UPDATEOTHER.grantedTo(playerSender)) { - info(playerSender, I.t("You can't use this command")); + if (!Permissions.UPDATEOTHER.grantedTo(sender)) { + throwNotAuthorized(); return; } playerName = arguments.get(0); @@ -122,8 +122,8 @@ public class UpdateCommand extends IoMCommand { url = arguments.get(1); resize = arguments.get(2); } else { - if (playerSender != null && !Permissions.UPDATEOTHER.grantedTo(playerSender)) { - info(playerSender, I.t("You can't use this command")); + if (!Permissions.UPDATEOTHER.grantedTo(sender)) { + throwNotAuthorized(); return; } playerName = arguments.get(0); @@ -157,22 +157,13 @@ public class UpdateCommand extends IoMCommand { //TODO passer en static ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> { if (uuid == null) { - if (playerSender != null) { - info(playerSender, I.t("The player {0} does not exist.", playerName)); - } else { - PluginLogger.info(I.t("The player {0} does not exist.", playerName)); - } + warning(sender, I.t("The player {0} does not exist.", playerName)); return; } ImageMap map = MapManager.getMap(uuid, mapName); if (map == null) { - if (playerSender != null) { - info(playerSender, I.t("This map does not exist.")); - } else { - PluginLogger.info(I.t("This map does not exist.")); - ; - } + warning(sender, I.t("This map does not exist.")); return; } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 7f19970..c38c08a 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -32,11 +32,11 @@ permissions: imageonmap.rename: true imageonmap.removesplattermap: true imageonmap.delete: true - imageonmap.deleteother: true + imageonmap.deleteother: false imageonmap.bypasssize: false imageonmap.give: false imageonmap.update: true - imageonmap.updateother: true + imageonmap.updateother: false imageonmap.userender: description: "Allows you to use /tomap and related commands (/maptool getremaining). Alias of imageonmap.new." From de0390c04623b903a3a8189fbf197d5102b6afd0 Mon Sep 17 00:00:00 2001 From: Vlammar Date: Sun, 7 Feb 2021 12:31:17 +0100 Subject: [PATCH 31/38] added usage parameters in command info --- .../moribus/imageonmap/commands/maptool/DeleteCommand.java | 2 +- .../moribus/imageonmap/commands/maptool/ExploreCommand.java | 2 +- .../fr/moribus/imageonmap/commands/maptool/GetCommand.java | 6 ++++-- .../fr/moribus/imageonmap/commands/maptool/GiveCommand.java | 2 +- .../fr/moribus/imageonmap/commands/maptool/ListCommand.java | 2 +- 5 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java index 9136152..3c49c87 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java @@ -55,7 +55,7 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -@CommandInfo(name = "delete", usageParameters = " [--confirm]") +@CommandInfo(name = "delete", usageParameters = "[player name]: [--confirm]") @WithFlags({"confirm"}) public class DeleteCommand extends IoMCommand { diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java index 007a14f..f57c2f7 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java @@ -52,7 +52,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -@CommandInfo(name = "explore") +@CommandInfo(name = "explore",usageParameters = "[player name]") public class ExploreCommand extends IoMCommand { @Override protected void run() throws CommandException { diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java index 0127099..3486c3c 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java @@ -49,7 +49,7 @@ import java.util.List; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -@CommandInfo(name = "get") +@CommandInfo(name = "get",usageParameters = "[player name]:") public class GetCommand extends IoMCommand { @Override protected void run() throws CommandException { @@ -84,7 +84,9 @@ public class GetCommand extends IoMCommand { //TODO passer en static ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> { - if (!sender.isOnline()) return; + if (!sender.isOnline()) { + return; + } if (uuid == null) { warning(sender, I.t("The player {0} does not exist.", playerName)); return; diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java index fc95c10..1935a33 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java @@ -53,7 +53,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -@CommandInfo(name = "give", usageParameters = " [playerFrom]:") +@CommandInfo(name = "give", usageParameters = " [playerFrom]:") public class GiveCommand extends IoMCommand { @Override diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java index d25277b..f64c11f 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java @@ -54,7 +54,7 @@ import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -@CommandInfo(name = "list") +@CommandInfo(name = "list", usageParameters = "[player name]") public class ListCommand extends IoMCommand { @Override protected void run() throws CommandException { From 54e30cc0207c0612747d57712259d193f923879e Mon Sep 17 00:00:00 2001 From: Vlammar Date: Sun, 7 Feb 2021 12:36:26 +0100 Subject: [PATCH 32/38] added check to make sure sender is still online --- .../moribus/imageonmap/commands/maptool/DeleteCommand.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java index 3c49c87..f239b10 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java @@ -120,8 +120,9 @@ public class DeleteCommand extends IoMCommand { RawText msg = deleteMsg(getClass(), sender, map); RawMessage.send(sender, msg); } else { - - MapManager.clear(sender.getInventory(), map); + if (sender != null && sender.isOnline() && sender.getInventory() != null) { + MapManager.clear(sender.getInventory(), map); + } try { MapManager.deleteMap(map); From 2339bf5bb0df115bc9097d44a1f1ed8c0d6f548c Mon Sep 17 00:00:00 2001 From: Vlammar Date: Sun, 7 Feb 2021 12:48:51 +0100 Subject: [PATCH 33/38] Updated comments and error messages --- .../moribus/imageonmap/commands/maptool/ListCommand.java | 7 ++++++- .../moribus/imageonmap/commands/maptool/UpdateCommand.java | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java index f64c11f..d0c1076 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java @@ -82,7 +82,11 @@ public class ListCommand extends IoMCommand { ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> { List mapList = MapManager.getMapList(uuid); if (uuid == null) { - info(sender, I.t("Player {} not found.", playerName)); + try { + throwInvalidArgument(I.t("Player {} not found.", playerName)); + } catch (CommandException e) { + e.printStackTrace(); + } return; } if (mapList.isEmpty()) { @@ -98,6 +102,7 @@ public class ListCommand extends IoMCommand { RawTextPart rawText = new RawText(""); rawText = addMap(rawText, mapList.get(0)); + //TODO pagination chat for (int i = 1, c = mapList.size(); i < c; i++) { rawText = rawText.then(", ").color(ChatColor.GRAY); rawText = addMap(rawText, mapList.get(i)); diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java index a7ea1fd..84343bd 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java @@ -177,7 +177,7 @@ public class UpdateCommand extends IoMCommand { if (map.getType() == ImageMap.Type.POSTER) { size = map.getSize(map.getUserUUID(), map.getId()); } - //assert size != null; + int width = size[0]; int height = size[1]; try { From 92b727ff2149313ea533215afc87c5180c80ad89 Mon Sep 17 00:00:00 2001 From: Vlammar Date: Sun, 7 Feb 2021 13:18:39 +0100 Subject: [PATCH 34/38] updated old doc --- .../fr/moribus/imageonmap/ui/SplatterMapManager.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java b/src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java index a4f3cad..6bab582 100644 --- a/src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java +++ b/src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java @@ -169,7 +169,7 @@ public abstract class SplatterMapManager { } /** - * Return true if it is a platter map + * Return true if it is a splatter map * * @param itemStack The item to check. * @return True if is a splatter map @@ -182,7 +182,13 @@ public abstract class SplatterMapManager { } - //TODO doc a faire + /** + * Return true if it has a specified splatter map + * + * @param player The player to check. + * @param map The map to check. + * @return True if the player has this map + */ public static boolean hasSplatterMap(Player player, PosterMap map) { Inventory playerInventory = player.getInventory(); From e1647037402834001e034553023a1506d4c63d50 Mon Sep 17 00:00:00 2001 From: Vlammar Date: Sun, 7 Feb 2021 19:53:13 +0100 Subject: [PATCH 35/38] bug fix in maptool get --- .../java/fr/moribus/imageonmap/commands/maptool/GetCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java index 3486c3c..87aae99 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java @@ -55,7 +55,7 @@ public class GetCommand extends IoMCommand { protected void run() throws CommandException { ArrayList arguments = getArgs(); - if (arguments.size() > 2) { + if (args.length > 1) { throwInvalidArgument(I.t("Too many parameters!")); return; } From 202ae4ea9348b07a660cc77809270c0d59820b5f Mon Sep 17 00:00:00 2001 From: Vlammar Date: Wed, 10 Feb 2021 22:22:30 +0100 Subject: [PATCH 36/38] bug fix with argument reading --- .../fr/moribus/imageonmap/commands/IoMCommand.java | 11 ++++++++--- .../imageonmap/commands/maptool/GiveCommand.java | 12 ++++++++++-- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java b/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java index ce21902..6517cb9 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java @@ -82,14 +82,18 @@ public abstract class IoMCommand extends Command { //State of the automaton, can read word like: //name_here; "name here" int state = 0; - StringBuilder s; + StringBuilder s = new StringBuilder(); for (String arg : args) { if (arg.startsWith("http:") || arg.startsWith("https:")) { arguments.add(arg); continue; } - s = new StringBuilder(); + if (state == 0) { + s = new StringBuilder(); + } else { + s.append(" "); + } for (char c : arg.toCharArray()) { switch (state) { case 0: @@ -118,9 +122,10 @@ public abstract class IoMCommand extends Command { throw new IllegalStateException("Unexpected value: " + state); } } - if (s.length() > 0) { + if (s.length() > 0 && state != 1) { arguments.add(s.toString()); } + } return arguments; } diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java index 1935a33..ebae186 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java @@ -61,6 +61,7 @@ public class GiveCommand extends IoMCommand { if (args.length < 2) { throwInvalidArgument(I.t("You must give a valid player name and a map name.")); + return; } ArrayList arguments = getArgs(); @@ -103,6 +104,8 @@ public class GiveCommand extends IoMCommand { } } + final Player sender = playerSender(); + //TODO passer en static ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(from, uuid -> { if (uuid == null) { @@ -121,13 +124,18 @@ public class GiveCommand extends IoMCommand { warning(sender, I.t("The player {0} does not exist.", playerName)); return; } - if (map.give(Bukkit.getPlayer(uuid2))) { + if (Bukkit.getPlayer((uuid2)) != null && Bukkit.getPlayer((uuid2)).isOnline() + && map.give(Bukkit.getPlayer(uuid2))) { info(I.t("The requested map was too big to fit in your inventory.")); info(I.t("Use '/maptool getremaining' to get the remaining maps.")); } } catch (IOException | InterruptedException e) { - warning(sender, I.t("The player {0} does not exist.", playerName)); + try { + throwInvalidArgument(I.t("The player {0} does not exist.", playerName)); + } catch (CommandException ex) { + ex.printStackTrace(); + } return; } }); From 9abea9d315b02244599d7aab024bbbf5c56d73b2 Mon Sep 17 00:00:00 2001 From: Vlammar Date: Thu, 11 Feb 2021 00:29:18 +0100 Subject: [PATCH 37/38] various bug fixes --- .../imageonmap/commands/maptool/DeleteCommand.java | 10 ++++------ .../imageonmap/commands/maptool/GetCommand.java | 2 +- .../imageonmap/commands/maptool/GiveCommand.java | 4 ++++ src/main/resources/help/maptool.txt | 3 +++ src/main/resources/plugin.yml | 14 +++++++------- 5 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java index f239b10..033277d 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java @@ -59,7 +59,7 @@ import org.bukkit.entity.Player; @WithFlags({"confirm"}) public class DeleteCommand extends IoMCommand { - private static RawText deleteMsg(Class klass, Player sender, ImageMap map) { + private static RawText deleteMsg(Class klass, String playerName, ImageMap map) { return new RawText(I.t("You are going to delete") + " ") .then(map.getId()) .color(ChatColor.GOLD) @@ -68,7 +68,7 @@ public class DeleteCommand extends IoMCommand { .then(I.t("[Confirm]")) .color(ChatColor.GREEN) .hover(new RawText(I.t("{red}This map will be deleted {bold}forever{red}!"))) - .command(klass, sender.getName(), map.getId(), "--confirm") + .command(klass, playerName + ":" + "\"" + map.getId() + "\"", "--confirm") .build(); } @@ -89,7 +89,6 @@ public class DeleteCommand extends IoMCommand { final String playerName; final String mapName; final Player sender = playerSender(); - info(sender, "" + arguments.size()); if (arguments.size() == 2 || arguments.size() == 3) { if (!Permissions.DELETEOTHER.grantedTo(sender)) { throwNotAuthorized(); @@ -109,6 +108,7 @@ public class DeleteCommand extends IoMCommand { warning(sender, I.t("The player {0} does not exist.", playerName)); return; } + ImageMap map = MapManager.getMap(uuid, mapName); if (map == null) { @@ -117,7 +117,7 @@ public class DeleteCommand extends IoMCommand { } if (!confirm) { - RawText msg = deleteMsg(getClass(), sender, map); + RawText msg = deleteMsg(getClass(), playerName, map); RawMessage.send(sender, msg); } else { if (sender != null && sender.isOnline() && sender.getInventory() != null) { @@ -132,8 +132,6 @@ public class DeleteCommand extends IoMCommand { warning(sender, I.t("This map does not exist.")); } } - - }); diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java index 87aae99..3486c3c 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java @@ -55,7 +55,7 @@ public class GetCommand extends IoMCommand { protected void run() throws CommandException { ArrayList arguments = getArgs(); - if (args.length > 1) { + if (arguments.size() > 2) { throwInvalidArgument(I.t("Too many parameters!")); return; } diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java index ebae186..cea3735 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java @@ -124,6 +124,10 @@ public class GiveCommand extends IoMCommand { warning(sender, I.t("The player {0} does not exist.", playerName)); return; } + if (Bukkit.getPlayer((uuid2)) == null || !Bukkit.getPlayer((uuid2)).isOnline()) { + warning(sender, I.t("The player {0} is not connected.", playerName)); + return; + } if (Bukkit.getPlayer((uuid2)) != null && Bukkit.getPlayer((uuid2)).isOnline() && map.give(Bukkit.getPlayer(uuid2))) { info(I.t("The requested map was too big to fit in your inventory.")); diff --git a/src/main/resources/help/maptool.txt b/src/main/resources/help/maptool.txt index 9b83e58..d3e0845 100644 --- a/src/main/resources/help/maptool.txt +++ b/src/main/resources/help/maptool.txt @@ -10,5 +10,8 @@ list: Lists all the map you currently have. listother: list all the map of another player. explore: Opens a GUI to see and manage your maps. exploreother: Opens a GUI to see and manage another player maps. +give: Give a specified player a map +rename: Rename an ImageOnMap +update: Update a specified ImageOnMap migrate: Lauches the migration process from V2.7 to V3.x. help : Use help for more information about a command. diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index c38c08a..c29e5ec 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -24,11 +24,11 @@ permissions: imageonmap.userender: true imageonmap.new: true imageonmap.list: true - imageonmap.listother: true + imageonmap.listother: false imageonmap.get: true - imageonmap.getother: true + imageonmap.getother: false imageonmap.explore: true - imageonmap.exploreother: true + imageonmap.exploreother: false imageonmap.rename: true imageonmap.removesplattermap: true imageonmap.delete: true @@ -52,7 +52,7 @@ permissions: imageonmap.listother: description: "Allows you to list the images a player have rendered." - default: false + default: op imageonmap.get: description: "Allows you to get a new map among the ones you already rendered, and related commands (/maptool getremaining)." @@ -60,7 +60,7 @@ permissions: imageonmap.getother: description: "Allows you to get a new map among the ones a player have already rendered." - default: false + default: op imageonmap.explore: description: "Allows you to open a GUI with all your maps." @@ -68,7 +68,7 @@ permissions: imageonmap.exploreother: description: "Allows you to open a GUI with all of the player maps." - default: false + default: op imageonmap.rename: description: "Allows you to rename a map you rendered in the past." @@ -84,7 +84,7 @@ permissions: imageonmap.deleteother: description: "Allows you to delete a map a player rendered in the past." - default: false + default: op imageonmap.removesplattermap: description: "Allows you to remove a splatter map from a wall by sneaking and breaking a map." From ae3337e00304069cf50f294c7b36ea47f19d2384 Mon Sep 17 00:00:00 2001 From: Vlammar Date: Thu, 11 Feb 2021 00:43:31 +0100 Subject: [PATCH 38/38] readded .hideallattributs --- .../java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java | 3 +-- src/main/java/fr/moribus/imageonmap/gui/MapListGui.java | 2 +- src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java | 6 +++--- .../java/fr/moribus/imageonmap/ui/SplatterMapManager.java | 2 +- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java b/src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java index 9362b22..ec81127 100644 --- a/src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java +++ b/src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java @@ -123,9 +123,8 @@ public class ConfirmDeleteMapGui extends ActionGui { .lore(I.t(getPlayerLocale(), "{gray}Name: {white}{0}", mapToDelete.getName())) .lore(I.t(getPlayerLocale(), "{gray}Map ID: {white}{0}", mapToDelete.getId())) .lore(I.t(getPlayerLocale(), "{gray}Maps inside: {white}{0}", mapToDelete.getMapsIDs().length)) - + .hideAllAttributes() ); - //.hideAllAttributes() /* ** Buttons ** */ diff --git a/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java b/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java index f8230dd..121329a 100644 --- a/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java +++ b/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java @@ -224,7 +224,7 @@ public class MapListGui extends ExplorerGui { mapPartLeft)); } - //statistics.hideAllAttributes(); + statistics.hideAllAttributes(); action("", getSize() - 5, statistics); } diff --git a/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java b/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java index c8ffe32..e87a804 100644 --- a/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java +++ b/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java @@ -165,12 +165,12 @@ public class MapItemManager implements Listener { if (goldTitle) { mapItem = new ItemStackBuilder(Material.FILLED_MAP) .title(ChatColor.GOLD, text) - //.hideAllAttributes() + .hideAllAttributes() .item(); } else { mapItem = new ItemStackBuilder(Material.FILLED_MAP) .title(text) - //.hideAllAttributes() + .hideAllAttributes() .item(); } final MapMeta meta = (MapMeta) mapItem.getItemMeta(); @@ -312,7 +312,7 @@ public class MapItemManager implements Listener { frame.setItem(new ItemStackBuilder(item) .title(getMapTitle(item)) - //.hideAllAttributes() + .hideAllAttributes() .item()); } diff --git a/src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java b/src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java index 6bab582..dc8c026 100644 --- a/src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java +++ b/src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java @@ -95,7 +95,7 @@ public abstract class SplatterMapManager { .loreLine() .longLore(ChatColor.GRAY + I.t("Shift-click one of the placed maps to remove the whole poster in one shot."), 40) - //.hideAllAttributes() + .hideAllAttributes() .craftItem(); final MapMeta meta = (MapMeta) splatter.getItemMeta();