From 822c98781e601d7af1a0241f7e5d3c001f7275f2 Mon Sep 17 00:00:00 2001 From: Amaury Carrade Date: Sun, 14 Jun 2020 13:27:56 +0200 Subject: [PATCH] refactor and changed the header to 2022 --- .../fr/moribus/imageonmap/ImageOnMap.java | 48 +++-- .../fr/moribus/imageonmap/Permissions.java | 29 +-- .../imageonmap/PluginConfiguration.java | 24 +-- .../imageonmap/commands/IoMCommand.java | 4 +- .../commands/maptool/DeleteCommand.java | 5 +- .../commands/maptool/ExploreCommand.java | 17 +- .../commands/maptool/GetCommand.java | 40 ++-- .../commands/maptool/GetRemainingCommand.java | 4 +- .../commands/maptool/GiveCommand.java | 34 ++-- .../commands/maptool/ListCommand.java | 4 +- .../commands/maptool/MigrateCommand.java | 4 +- .../commands/maptool/NewCommand.java | 18 +- .../commands/maptool/RenameCommand.java | 5 +- .../commands/maptool/UpdateCommand.java | 134 +++++++------ .../imageonmap/gui/ConfirmDeleteMapGui.java | 4 +- .../moribus/imageonmap/gui/MapDetailGui.java | 8 +- .../fr/moribus/imageonmap/gui/MapListGui.java | 4 +- .../fr/moribus/imageonmap/gui/RenderGui.java | 180 ++++++++++++++++++ .../imageonmap/image/ImageIOExecutor.java | 4 +- .../image/ImageRendererExecutor.java | 55 +++++- .../moribus/imageonmap/image/ImageUtils.java | 4 +- .../imageonmap/image/MapInitEvent.java | 4 +- .../moribus/imageonmap/image/PosterImage.java | 4 +- .../fr/moribus/imageonmap/image/Renderer.java | 4 +- .../fr/moribus/imageonmap/map/ImageMap.java | 10 +- .../fr/moribus/imageonmap/map/MapManager.java | 11 +- .../imageonmap/map/MapManagerException.java | 4 +- .../imageonmap/map/PlayerMapStore.java | 44 ++--- .../fr/moribus/imageonmap/map/PosterMap.java | 6 +- .../fr/moribus/imageonmap/map/SingleMap.java | 4 +- .../migration/MigratorExecutor.java | 4 +- .../imageonmap/migration/OldSavedMap.java | 6 +- .../imageonmap/migration/OldSavedPoster.java | 6 +- .../imageonmap/migration/V3Migrator.java | 4 +- .../moribus/imageonmap/ui/MapItemManager.java | 4 +- .../imageonmap/ui/PosterOnASurface.java | 4 +- .../fr/moribus/imageonmap/ui/PosterWall.java | 4 +- .../imageonmap/ui/SplatterMapManager.java | 35 ++-- 38 files changed, 528 insertions(+), 259 deletions(-) create mode 100644 src/main/java/fr/moribus/imageonmap/gui/RenderGui.java diff --git a/src/main/java/fr/moribus/imageonmap/ImageOnMap.java b/src/main/java/fr/moribus/imageonmap/ImageOnMap.java index 321c3de..b402f7a 100644 --- a/src/main/java/fr/moribus/imageonmap/ImageOnMap.java +++ b/src/main/java/fr/moribus/imageonmap/ImageOnMap.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. @@ -60,18 +60,24 @@ import fr.zcraft.quartzlib.tools.PluginLogger; import fr.zcraft.quartzlib.tools.UpdateChecker; import java.io.File; import java.io.IOException; +import java.util.HashMap; +import java.util.Map; import org.bstats.bukkit.Metrics; public final class ImageOnMap extends QuartzPlugin { private static final String IMAGES_DIRECTORY_NAME = "images"; + private static final String RENDERS_DIRECTORY_NAME = "renders"; private static final String MAPS_DIRECTORY_NAME = "maps"; private static ImageOnMap plugin; - private final File mapsDirectory; private File imagesDirectory; + + private File rendersDirectory; + private File mapsDirectory; private CommandWorkers commandWorker; public ImageOnMap() { imagesDirectory = new File(this.getDataFolder(), IMAGES_DIRECTORY_NAME); + rendersDirectory = new File(this.getDataFolder(), RENDERS_DIRECTORY_NAME); mapsDirectory = new File(this.getDataFolder(), MAPS_DIRECTORY_NAME); plugin = this; } @@ -84,6 +90,10 @@ public final class ImageOnMap extends QuartzPlugin { return imagesDirectory; } + public File getRendersDirectory() { + return rendersDirectory; + } + public File getMapsDirectory() { return mapsDirectory; } @@ -92,20 +102,34 @@ public final class ImageOnMap extends QuartzPlugin { return new File(imagesDirectory, "map" + mapID + ".png"); } + public File getRenderFile(int mapID) { + return new File(rendersDirectory, "render" + mapID + ".png"); + } + public CommandWorkers getCommandWorker() { return commandWorker; } - @SuppressWarnings("unchecked") + private Map checkDirs() throws IOException { + Map dirs = new HashMap<>(); + dirs.put("mapsDirectory", checkPluginDirectory(mapsDirectory)); + dirs.put("rendersDirectory", checkPluginDirectory(rendersDirectory)); + dirs.put("imagesDirectory", checkPluginDirectory(imagesDirectory)); + return dirs; + } + @Override public void onEnable() { // Creating the images and maps directories if necessary try { //imagesDirectory = checkPluginDirectory(imagesDirectory, V3Migrator.getOldImagesDirectory(this)); - checkPluginDirectory(mapsDirectory); - checkPluginDirectory(imagesDirectory); + Map directories = checkDirs(); + mapsDirectory = directories.get("mapsDirectory"); + rendersDirectory = directories.get("rendersDirectory"); + imagesDirectory = directories.get("imagesDirectory"); } catch (final IOException ex) { PluginLogger.error("FATAL: " + ex.getMessage()); + //disable the plugin this.setEnabled(false); return; } @@ -123,9 +147,9 @@ public final class ImageOnMap extends QuartzPlugin { MapInitEvent.init(); MapItemManager.init(); - + String commandGroupName = "maptool"; Commands.register( - "maptool", + commandGroupName, NewCommand.class, ListCommand.class, GetCommand.class, @@ -138,16 +162,16 @@ public final class ImageOnMap extends QuartzPlugin { UpdateCommand.class ); - Commands.registerShortcut("maptool", NewCommand.class, "tomap"); - Commands.registerShortcut("maptool", ExploreCommand.class, "maps"); - Commands.registerShortcut("maptool", GiveCommand.class, "givemap"); + Commands.registerShortcut(commandGroupName, NewCommand.class, "tomap"); + Commands.registerShortcut(commandGroupName, ExploreCommand.class, "maps"); + Commands.registerShortcut(commandGroupName, GiveCommand.class, "givemap"); if (PluginConfiguration.CHECK_FOR_UPDATES.get()) { UpdateChecker.boot("imageonmap.26585"); } if (PluginConfiguration.COLLECT_DATA.get()) { - final Metrics metrics = new Metrics(this,5920); + final Metrics metrics = new Metrics(this, 5920); metrics.addCustomChart(new Metrics.SingleLineChart("rendered-images", MapManager::getImagesCount)); metrics.addCustomChart(new Metrics.SingleLineChart("used-minecraft-maps", MapManager::getMapCount)); } else { diff --git a/src/main/java/fr/moribus/imageonmap/Permissions.java b/src/main/java/fr/moribus/imageonmap/Permissions.java index cf079c2..d978d30 100644 --- a/src/main/java/fr/moribus/imageonmap/Permissions.java +++ b/src/main/java/fr/moribus/imageonmap/Permissions.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. @@ -40,6 +40,7 @@ package fr.moribus.imageonmap; import fr.zcraft.quartzlib.components.i18n.I; import fr.zcraft.quartzlib.tools.PluginLogger; import java.util.Set; +import org.bukkit.entity.Player; import org.bukkit.permissions.Permissible; import org.bukkit.permissions.PermissionAttachmentInfo; @@ -79,6 +80,12 @@ public enum Permissions { * @return {@code true} if this permission is granted to the permissible. */ public boolean grantedTo(Permissible permissible) { + //true only if not a player. If the console or a command block as send the command we can assume that it has + //enough privilege + if (permissible == null || permissible.isOp()) { + return true; + } + if (permissible.hasPermission(permission)) { return true; } @@ -103,17 +110,13 @@ public enum Permissions { String prefix = String.format("imageonmap.%slimit.", type.name()); for (PermissionAttachmentInfo pai : perms) { String permString = pai.getPermission().toLowerCase(); - if (permString.startsWith(prefix)) { - if (pai.getValue()) { - try { - int limit = Integer.parseInt(permString.split(prefix)[1].trim()); - return limit; - } catch (Exception e) { - PluginLogger.warning( - I.t("The correct syntax for setting map limit node is: ImageOnMap.mapLimit.X " - + "where you can replace X with the limit of map a player is allowed to have")); - } - + if (permString.startsWith(prefix) && pai.getValue()) { + try { + return Integer.parseInt(permString.split(prefix)[1].trim()); + } catch (Exception e) { + PluginLogger.warning( + I.t("The correct syntax for setting map limit node is: ImageOnMap.mapLimit.X " + + "where you can replace X with the limit of map a player is allowed to have")); } } } diff --git a/src/main/java/fr/moribus/imageonmap/PluginConfiguration.java b/src/main/java/fr/moribus/imageonmap/PluginConfiguration.java index c5f0bae..319f8f2 100644 --- a/src/main/java/fr/moribus/imageonmap/PluginConfiguration.java +++ b/src/main/java/fr/moribus/imageonmap/PluginConfiguration.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. @@ -46,22 +46,24 @@ import java.util.Locale; public final class PluginConfiguration extends Configuration { - public static ConfigurationItem LANG = item("lang", Locale.class); + public static final ConfigurationItem LANG = item("lang", Locale.class); - public static ConfigurationItem COLLECT_DATA = item("collect-data", true); + public static final ConfigurationItem COLLECT_DATA = item("collect-data", true); - public static ConfigurationItem CHECK_FOR_UPDATES = item("check-for-updates", true); + public static final ConfigurationItem CHECK_FOR_UPDATES = item("check-for-updates", true); - public static ConfigurationItem MAP_GLOBAL_LIMIT = item("map-global-limit", 0, "Limit-map-by-server"); - public static ConfigurationItem MAP_PLAYER_LIMIT = item("map-player-limit", 0, "Limit-map-by-player"); + public static final ConfigurationItem MAP_GLOBAL_LIMIT = + item("map-global-limit", 0, "Limit-map-by-server"); + public static final ConfigurationItem MAP_PLAYER_LIMIT = + item("map-player-limit", 0, "Limit-map-by-player"); - public static ConfigurationItem SAVE_FULL_IMAGE = item("save-full-image", true); + public static final ConfigurationItem SAVE_FULL_IMAGE = item("save-full-image", true); - public static ConfigurationItem LIMIT_SIZE_X = item("limit-map-size-x", 0); - public static ConfigurationItem LIMIT_SIZE_Y = item("limit-map-size-y", 0); + public static final ConfigurationItem LIMIT_SIZE_X = item("limit-map-size-x", 0); + public static final ConfigurationItem LIMIT_SIZE_Y = item("limit-map-size-y", 0); - public static ConfigurationList IMAGES_HOSTNAMES_WHITELIST = + public static final ConfigurationList IMAGES_HOSTNAMES_WHITELIST = list("images-hostnames-whitelist", String.class); } diff --git a/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java b/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java index cc06be2..45d7bc1 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. 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 5141061..8b6f85a 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteCommand.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. @@ -55,7 +55,6 @@ import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import org.bukkit.permissions.Permissible; @CommandInfo(name = "delete", usageParameters = "[player name]: [--confirm]") @WithFlags({"confirm"}) 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 ae05a3d..7990fa1 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/ExploreCommand.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. @@ -44,7 +44,6 @@ 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; @@ -74,14 +73,10 @@ public class ExploreCommand extends IoMCommand { playerName = sender.getName(); } - retrieveUUID(playerName, uuid -> { - - OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(uuid); - if (sender.isOnline()) { - Gui.open(sender, new MapListGui(offlinePlayer, playerName)); - } - - }); + OfflinePlayer offlinePlayer = Bukkit.getOfflinePlayer(playerName); + if (sender.isOnline()) { + 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 e527a31..e37d191 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. @@ -36,7 +36,6 @@ 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; @@ -46,6 +45,8 @@ import fr.zcraft.quartzlib.components.commands.CommandInfo; import fr.zcraft.quartzlib.components.i18n.I; import java.util.ArrayList; import java.util.List; +import java.util.UUID; +import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -59,7 +60,7 @@ public class GetCommand extends IoMCommand { throwInvalidArgument(I.t("Too many parameters!")); return; } - if (arguments.size() < 1) { + if (arguments.isEmpty()) { throwInvalidArgument(I.t("Too few parameters!")); return; } @@ -79,28 +80,23 @@ public class GetCommand extends IoMCommand { mapName = arguments.get(1); } + UUID uuid = Bukkit.getOfflinePlayer(playerName).getUniqueId(); + if (!sender.isOnline()) { + return; + } + ImageMap map = MapManager.getMap(uuid, mapName); + if (map == null) { + warning(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.")); + } - retrieveUUID(playerName, uuid -> { - - if (!sender.isOnline()) { - return; - } - - ImageMap map = MapManager.getMap(uuid, mapName); - - if (map == null) { - warning(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/GetRemainingCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetRemainingCommand.java index 7a8c29f..2dc8bef 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GetRemainingCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GetRemainingCommand.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. 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 2751ab2..fa28f92 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/GiveCommand.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. @@ -44,6 +44,7 @@ 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.UUID; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -66,7 +67,7 @@ public class GiveCommand extends IoMCommand { throwInvalidArgument(I.t("Too many parameters!")); return; } - if (arguments.size() < 1) { + if (arguments.isEmpty()) { throwInvalidArgument(I.t("Too few parameters!")); return; } @@ -101,23 +102,22 @@ public class GiveCommand extends IoMCommand { } final Player sender = playerSender(); + UUID uuid = Bukkit.getOfflinePlayer(from).getUniqueId(); + UUID uuid2 = Bukkit.getOfflinePlayer(playerName).getUniqueId(); - retrieveUUID(from, uuid -> { - final ImageMap map = MapManager.getMap(uuid, mapName); + final ImageMap map = MapManager.getMap(uuid, mapName); - if (map == null) { - warning(sender, I.t("This map does not exist.")); - return; - } + if (map == null) { + warning(sender, I.t("This map does not exist.")); + return; + } - retrieveUUID(playerName, 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.")); - } - }); - }); + + 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.")); + } } 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 c3527bb..75b886d 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/MigrateCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/MigrateCommand.java index 993f337..7c04e5d 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/MigrateCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/MigrateCommand.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. 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 bef3a49..36a2a84 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. @@ -38,6 +38,7 @@ package fr.moribus.imageonmap.commands.maptool; import fr.moribus.imageonmap.Permissions; import fr.moribus.imageonmap.commands.IoMCommand; +import fr.moribus.imageonmap.gui.RenderGui; import fr.moribus.imageonmap.image.ImageRendererExecutor; import fr.moribus.imageonmap.image.ImageUtils; import fr.moribus.imageonmap.map.ImageMap; @@ -45,6 +46,7 @@ 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.gui.Gui; import fr.zcraft.quartzlib.components.i18n.I; import fr.zcraft.quartzlib.components.worker.WorkerCallback; import fr.zcraft.quartzlib.tools.PluginLogger; @@ -122,6 +124,16 @@ public class NewCommand extends IoMCommand { return; } + // TODO Add a per-player toggle for the GUI. + if (args.length >= 2) { + ImageRendererExecutor.renderAndNotify(url, scaling, player.getUniqueId(), width, height); + } else { + Gui.open(player, new RenderGui(url)); + } + //I try to test if the gui is run correctly + //keep the following as a fallback and for cmd made by console + + /* if (args.length >= 2) { if (args.length >= 3) { try { @@ -182,6 +194,8 @@ public class NewCommand extends IoMCommand { } finally { ActionBar.removeMessage(player); } + */ + } @Override 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 1059eb7..80c1b0e 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/RenameCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/RenameCommand.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. @@ -88,7 +88,6 @@ public class RenameCommand extends IoMCommand { @Override protected List complete() throws CommandException { - if (args.length == 1) { return getMatchingMapNames(playerSender(), args[0]); } 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 3e843b5..4c75d8e 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/UpdateCommand.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. @@ -52,6 +52,8 @@ import fr.zcraft.quartzlib.tools.text.MessageSender; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; +import java.util.UUID; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @@ -153,73 +155,81 @@ public class UpdateCommand extends IoMCommand { scaling = ImageUtils.ScalingType.CONTAINED; } - //TODO passer en static - //ImageOnMap.getPlugin().getCommandWorker().offlineNameFetch(playerName, uuid -> { - retrieveUUID(playerName, uuid -> { - ImageMap map = MapManager.getMap(uuid, mapName); + UUID uuid = Bukkit.getOfflinePlayer(playerName).getUniqueId(); + ImageMap map = MapManager.getMap(uuid, mapName); - if (map == null) { - warning(sender, I.t("This map does not exist.")); + if (map == null) { + warning(sender, I.t("This map does not exist.")); + return; + } + + URL url1; + try { + url1 = new URL(url); + if (!Permissions.BYPASS_WHITELIST.grantedTo(playerSender) && !checkHostnameWhitelist(url1)) { + throwInvalidArgument(I.t("This hosting website is not trusted, if you think that this is an error " + + " contact your server administrator")); return; } - URL url1; - try { - url1 = new URL(url); - if (!Permissions.BYPASS_WHITELIST.grantedTo(playerSender) && !checkHostnameWhitelist(url1)) { - throwInvalidArgument(I.t("This hosting website is not trusted, if you think that this is an error " - + " contact your server administrator")); - return; - } + //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 - //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(map.getUserUUID(), map.getId()); - } - - int width = size[0]; - int height = size[1]; - try { - 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) { - 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) { - if (playerSender != null) { - playerSender - .sendMessage( - I.t("{ce}Map rendering failed: {0}", exception.getMessage())); - } - PluginLogger.warning("Rendering from {0} failed: {1}: {2}", - playerSender.getName(), - exception.getClass().getCanonicalName(), - exception.getMessage()); - } - }); - } finally { - if (playerSender != null) { - ActionBar.removeMessage(playerSender); - } - } - } catch (MalformedURLException | CommandException ex) { - warning(sender, I.t("Invalid URL.")); + Integer[] size = {1, 1}; + if (map.getType() == ImageMap.Type.POSTER) { + size = map.getSize(map.getUserUUID(), map.getId()); } - }); + + if (size.length == 0) { + size = new Integer[] {1, 1}; + } + int width = size[0]; + int height = size[1]; + try { + String msg = I.t("Updating..."); + if (playerSender != null) { + //TODO tester si player humain + ActionBar.sendPermanentMessage(playerSender, ChatColor.DARK_GREEN + msg); + } else { + PluginLogger.info(msg); + } + ImageRendererExecutor + .update(url1, scaling, uuid, map, width, height, new WorkerCallback() { + @Override + public void finished(ImageMap result) { + String msg = I.t("The map was updated using the new image!"); + if (playerSender != null) { + //TODO tester si player humain + ActionBar.removeMessage(playerSender); + MessageSender.sendActionBarMessage(playerSender, + ChatColor.DARK_GREEN + msg); + } else { + PluginLogger.info(msg); + } + } + + @Override + public void errored(Throwable exception) { + if (playerSender != null) { + playerSender + .sendMessage( + I.t("{ce}Map rendering failed: {0}", exception.getMessage())); + } + PluginLogger.warning("Rendering from {0} failed: {1}: {2}", + playerSender.getName(), + exception.getClass().getCanonicalName(), + exception.getMessage()); + } + }); + } finally { + if (playerSender != null) { + ActionBar.removeMessage(playerSender); + } + } + } catch (MalformedURLException | CommandException ex) { + warning(sender, I.t("Invalid URL.")); + } } diff --git a/src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java b/src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java index 5695a33..445ae59 100644 --- a/src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java +++ b/src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. diff --git a/src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java b/src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java index f224b19..fb7ff80 100644 --- a/src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java +++ b/src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. @@ -57,8 +57,8 @@ import org.bukkit.inventory.ItemStack; public class MapDetailGui extends ExplorerGui { private final ImageMap map; - private OfflinePlayer offplayer; - private String name; + private final OfflinePlayer offplayer; + private final String name; public MapDetailGui(ImageMap map, OfflinePlayer p, String name) { super(); diff --git a/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java b/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java index 476ccd7..5ee374b 100644 --- a/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java +++ b/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. diff --git a/src/main/java/fr/moribus/imageonmap/gui/RenderGui.java b/src/main/java/fr/moribus/imageonmap/gui/RenderGui.java new file mode 100644 index 0000000..720eed3 --- /dev/null +++ b/src/main/java/fr/moribus/imageonmap/gui/RenderGui.java @@ -0,0 +1,180 @@ +/* + * Plugin UHCReloaded : Alliances + * + * Copyright ou © ou Copr. Amaury Carrade (2016) + * Idées et réflexions : Alexandre Prokopowicz, Amaury Carrade, "Vayan". + * + * Ce logiciel est régi par la licence CeCILL soumise au droit français et + * respectant les principes de diffusion des logiciels libres. Vous pouvez + * utiliser, modifier et/ou redistribuer ce programme sous les conditions + * de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA + * sur le site "http://www.cecill.info". + * + * En contrepartie de l'accessibilité au code source et des droits de copie, + * de modification et de redistribution accordés par cette licence, il n'est + * offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons, + * seule une responsabilité restreinte pèse sur l'auteur du programme, le + * titulaire des droits patrimoniaux et les concédants successifs. + * + * A cet égard l'attention de l'utilisateur est attirée sur les risques + * associés au chargement, à l'utilisation, à la modification et/ou au + * développement et à la reproduction du logiciel par l'utilisateur étant + * donné sa spécificité de logiciel libre, qui peut le rendre complexe à + * manipuler et qui le réserve donc à des développeurs et des professionnels + * avertis possédant des connaissances informatiques approfondies. Les + * utilisateurs sont donc invités à charger et tester l'adéquation du + * logiciel à leurs besoins dans des conditions permettant d'assurer la + * sécurité de leurs systèmes et ou de leurs données et, plus généralement, + * à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. + * + * Le fait que vous puissiez accéder à cet en-tête signifie que vous avez + * pris connaissance de la licence CeCILL, et que vous en avez accepté les + * termes. + */ + +package fr.moribus.imageonmap.gui; + +import fr.moribus.imageonmap.image.ImageUtils; +import fr.zcraft.quartzlib.components.gui.ActionGui; +import fr.zcraft.quartzlib.components.i18n.I; +import fr.zcraft.quartzlib.tools.items.ItemStackBuilder; +import fr.zcraft.quartzlib.tools.items.TextualBanners; +import java.net.URL; +import org.bukkit.ChatColor; +import org.bukkit.DyeColor; +import org.bukkit.Material; + + +public class RenderGui extends ActionGui { + final URL url; + + boolean resize = false; + int width = 0; + int height = 0; + + boolean originalSizeLoaded = false; + int originalWidth = 0; + int originalHeight = 0; + + ImageUtils.ScalingType scaling = ImageUtils.ScalingType.NONE; + + public RenderGui(URL url) { + this.url = url; + } + + @Override + protected void onUpdate() { + setTitle(I.t("Image Editor")); + setHeight(6); + + action("toggle_resize", 0, new ItemStackBuilder(Material.PAINTING) + .title(ChatColor.LIGHT_PURPLE, ChatColor.BOLD + I.t("Resize image")) + .loreLine(ChatColor.DARK_GRAY, resize ? I.t("Enabled") : I.t("Disabled")) + .loreSeparator() + .longLore(ChatColor.GRAY, + I.t("You can automatically resize the image to a certain number of blocks (or item frames).")) + .loreSeparator() + .loreLine(ChatColor.BLUE, I.t("Original size (in blocks)")) + .loreLine(ChatColor.GRAY, + originalSizeLoaded ? I.t("{0} × {1}", originalWidth, originalHeight) : I.t("Loading...")) + .loreSeparator() + .longLore(resize ? I.t("{gray}» {white}Click{gray} to disable resize") : + I.t("{gray}» {white}Click{gray} to enable resize")) + ); + + injectSizeEditor(2, true); + injectSizeEditor(11, false); + } + + /** + * Injects the size editor in the GUI. + * + * @param slot The slot where the editor must start. + * @param isWidth True to inject a width-size editor; false to inject a height-editor. + */ + private void injectSizeEditor(int slot, final boolean isWidth) { + final String action_key = isWidth ? "width_" : "height_"; + final String currentSize = ChatColor.DARK_GRAY + I.t("Current size: {0} × {1}", width, height); + + action(action_key + "_decrement_10", slot++, getBannerButton(false, true, resize) + .title(ChatColor.RED, I.t("- 10")) + .loreLine(currentSize) + .loreSeparator() + .longLore(isWidth + ? I.t("{gray}» {white}Click{gray} to decrease the image's width by 10 blocks") + : I.t("{gray}» {white}Click{gray} to decrease the image's height by 10 blocks") + ) + ); + + action(action_key + "_decrement_1", slot++, getBannerButton(false, false, resize) + .title(ChatColor.RED, I.t("- 1")) + .loreLine(currentSize) + .loreSeparator() + .longLore(isWidth + ? I.t("{gray}» {white}Click{gray} to decrease the image's width by one block") + : I.t("{gray}» {white}Click{gray} to decrease the image's height by one block") + ) + ); + + action(action_key + "_increment_1", slot++, getBannerButton(true, false, resize) + .title(ChatColor.GREEN, I.t("+ 1")) + .loreLine(currentSize) + .loreSeparator() + .longLore(isWidth + ? I.t("{gray}» {white}Click{gray} to increase the image's width by one block") + : I.t("{gray}» {white}Click{gray} to increase the image's height by one block") + ) + ); + + action(action_key + "_increment_10", slot++, getBannerButton(true, true, resize) + .title(ChatColor.GREEN, I.t("+ 10")) + .loreLine(currentSize) + .loreSeparator() + .longLore(isWidth + ? I.t("{gray}» {white}Click{gray} to increase the image's width by 10 blocks") + : I.t("{gray}» {white}Click{gray} to increase the image's height by 10 blocks") + ) + ); + + + /*(action_key + "_set_values", slot++, getBannerButton(false, false, resize) + .title(ChatColor.BLUE, I.t("set the size")) + .loreLine(currentSize) + .loreSeparator() + .longLore(isWidth + ? I.t("{gray}» {white}Click{gray} to set the image's width") + : I.t("{gray}» {white}Click{gray} to set the image's height") + ) + );*/ + slot++; + } + + /** + * Creates a banner for the +/- buttons. + * + are green, - are red + * short steps are light, long steps are dark + * disabled banners are in grayscale + * + * @param positive true for a + banner + * @param longStep true for a darker banner + * @param disabled true for a grayscale banner + * @return The banner in a builder. + */ + private ItemStackBuilder getBannerButton(boolean positive, boolean longStep, boolean disabled) { + //final char symbol = positive ? '+' : '-'; //TODO this need rework have something that work but need QL update + final char symbol = positive ? '*' : '-'; + final DyeColor background; + + if (disabled) { + background = longStep ? DyeColor.BLACK : DyeColor.GRAY; + } else { + if (positive) { + background = longStep ? DyeColor.GREEN : DyeColor.LIME; + } else { + background = longStep ? DyeColor.RED : DyeColor.PINK; + } + } + + return new ItemStackBuilder(TextualBanners.getCharBanner(symbol, background, DyeColor.BLACK)); + } +} diff --git a/src/main/java/fr/moribus/imageonmap/image/ImageIOExecutor.java b/src/main/java/fr/moribus/imageonmap/image/ImageIOExecutor.java index 7f6cd17..5d258ae 100644 --- a/src/main/java/fr/moribus/imageonmap/image/ImageIOExecutor.java +++ b/src/main/java/fr/moribus/imageonmap/image/ImageIOExecutor.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. diff --git a/src/main/java/fr/moribus/imageonmap/image/ImageRendererExecutor.java b/src/main/java/fr/moribus/imageonmap/image/ImageRendererExecutor.java index 2321f38..50ea7fa 100644 --- a/src/main/java/fr/moribus/imageonmap/image/ImageRendererExecutor.java +++ b/src/main/java/fr/moribus/imageonmap/image/ImageRendererExecutor.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. @@ -36,15 +36,20 @@ package fr.moribus.imageonmap.image; + import fr.moribus.imageonmap.Permissions; import fr.moribus.imageonmap.PluginConfiguration; import fr.moribus.imageonmap.map.ImageMap; import fr.moribus.imageonmap.map.MapManager; +import fr.moribus.imageonmap.map.PosterMap; import fr.zcraft.quartzlib.components.i18n.I; import fr.zcraft.quartzlib.components.worker.Worker; import fr.zcraft.quartzlib.components.worker.WorkerAttributes; import fr.zcraft.quartzlib.components.worker.WorkerCallback; import fr.zcraft.quartzlib.components.worker.WorkerRunnable; +import fr.zcraft.quartzlib.tools.PluginLogger; +import fr.zcraft.quartzlib.tools.text.ActionBar; +import fr.zcraft.quartzlib.tools.text.MessageSender; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.InputStream; @@ -56,9 +61,47 @@ import java.util.concurrent.Callable; import java.util.concurrent.Future; import javax.imageio.ImageIO; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.entity.Player; + + @WorkerAttributes(name = "Image Renderer", queriesMainThread = true) public class ImageRendererExecutor extends Worker { + public static void renderAndNotify(final URL url, final ImageUtils.ScalingType scaling, final UUID playerUUID, + final int width, final int height) { + final Player player = Bukkit.getPlayer(playerUUID); + if (player == null) { + return; + } + + ActionBar.sendPermanentMessage(player, ChatColor.DARK_GREEN + I.t("Rendering...")); + + render(url, scaling, player.getUniqueId(), width, height, new WorkerCallback() { + @Override + public void finished(ImageMap result) { + ActionBar.removeMessage(player); + MessageSender.sendActionBarMessage(player, ChatColor.DARK_GREEN + I.t("Rendering finished!")); + + if (result.give(player) && (result instanceof PosterMap && !((PosterMap) result).hasColumnData())) { + player.sendMessage(ChatColor.GRAY + I.t("The rendered map was too big to fit in your inventory.")); + player.sendMessage(ChatColor.GRAY + I.t("Use '/maptool getremaining' to get the remaining maps.")); + } + } + + @Override + public void errored(Throwable exception) { + ActionBar.removeMessage(player); + 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()); + } + }); + } + private static URLConnection connecting(URL url) throws IOException { final URLConnection connection = url.openConnection(); connection.addRequestProperty("User-Agent", @@ -94,6 +137,7 @@ public class ImageRendererExecutor extends Worker { public static void render(final URL url, final ImageUtils.ScalingType scaling, final UUID playerUUID, final int width, final int height, WorkerCallback callback) { submitQuery(new WorkerRunnable() { + @Override public ImageMap run() throws Throwable { @@ -144,12 +188,13 @@ public class ImageRendererExecutor extends Worker { } // Limits are in place and the player does NOT have rights to avoid them. checkSizeLimit(playerUUID, image); + final BufferedImage resizedImage; if (scaling != ImageUtils.ScalingType.NONE && height <= 1 && width <= 1) { - ImageMap ret = renderSingle(scaling.resize(image, ImageMap.WIDTH, ImageMap.HEIGHT), playerUUID); + resizedImage = scaling.resize(image, ImageMap.WIDTH * width, ImageMap.HEIGHT * height); image.flush();//Safe to free - return ret; + return renderSingle(resizedImage, playerUUID); } - final BufferedImage resizedImage = + resizedImage = scaling.resize(image, ImageMap.WIDTH * width, ImageMap.HEIGHT * height); image.flush();//Safe to free return renderPoster(resizedImage, playerUUID); diff --git a/src/main/java/fr/moribus/imageonmap/image/ImageUtils.java b/src/main/java/fr/moribus/imageonmap/image/ImageUtils.java index 191408c..57825af 100644 --- a/src/main/java/fr/moribus/imageonmap/image/ImageUtils.java +++ b/src/main/java/fr/moribus/imageonmap/image/ImageUtils.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. diff --git a/src/main/java/fr/moribus/imageonmap/image/MapInitEvent.java b/src/main/java/fr/moribus/imageonmap/image/MapInitEvent.java index f2f27e8..769f92a 100644 --- a/src/main/java/fr/moribus/imageonmap/image/MapInitEvent.java +++ b/src/main/java/fr/moribus/imageonmap/image/MapInitEvent.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. diff --git a/src/main/java/fr/moribus/imageonmap/image/PosterImage.java b/src/main/java/fr/moribus/imageonmap/image/PosterImage.java index 253530d..8fca720 100644 --- a/src/main/java/fr/moribus/imageonmap/image/PosterImage.java +++ b/src/main/java/fr/moribus/imageonmap/image/PosterImage.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. diff --git a/src/main/java/fr/moribus/imageonmap/image/Renderer.java b/src/main/java/fr/moribus/imageonmap/image/Renderer.java index 4854212..29aff7f 100644 --- a/src/main/java/fr/moribus/imageonmap/image/Renderer.java +++ b/src/main/java/fr/moribus/imageonmap/image/Renderer.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. diff --git a/src/main/java/fr/moribus/imageonmap/map/ImageMap.java b/src/main/java/fr/moribus/imageonmap/map/ImageMap.java index c6c8e5a..54a74e8 100644 --- a/src/main/java/fr/moribus/imageonmap/map/ImageMap.java +++ b/src/main/java/fr/moribus/imageonmap/map/ImageMap.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. @@ -114,11 +114,11 @@ public abstract class ImageMap implements ConfigurationSerializable { MapManager.getPlayerMapStore(playerUUID).getToolConfig().getConfigurationSection("PlayerMapStore"); if (section == null) { - return null; + return new Integer[0]; } List> list = (List>) section.getList("mapList"); if (list == null) { - return null; + return new Integer[0]; } for (Map tmpMap : list) { @@ -126,7 +126,7 @@ public abstract class ImageMap implements ConfigurationSerializable { return new Integer[] {(Integer) tmpMap.get("columns"), (Integer) tmpMap.get("rows")}; } } - return null; + return new Integer[0]; } protected static T getFieldValue(Map map, String fieldName) diff --git a/src/main/java/fr/moribus/imageonmap/map/MapManager.java b/src/main/java/fr/moribus/imageonmap/map/MapManager.java index 4645224..22db80f 100644 --- a/src/main/java/fr/moribus/imageonmap/map/MapManager.java +++ b/src/main/java/fr/moribus/imageonmap/map/MapManager.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. @@ -45,6 +45,7 @@ import fr.zcraft.quartzlib.tools.PluginLogger; import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.Material; @@ -157,7 +158,7 @@ public abstract class MapManager { public static void notifyModification(UUID playerUUID) { getPlayerMapStore(playerUUID).notifyModification(); if (autosaveTask == null) { - Bukkit.getScheduler().runTaskLater(ImageOnMap.getPlugin(), new AutosaveRunnable(), SAVE_DELAY); + Bukkit.getScheduler().runTaskLater(ImageOnMap.getPlugin(), new AutoSaveRunnable(), SAVE_DELAY); } } @@ -268,7 +269,7 @@ public abstract class MapManager { //Loading public static void load(boolean verbose) { int loadedFilesCount = 0; - for (File file : ImageOnMap.getPlugin().getMapsDirectory().listFiles()) { + for (File file : Objects.requireNonNull(ImageOnMap.getPlugin().getMapsDirectory().listFiles())) { UUID uuid = getUUIDFromFile(file); if (uuid == null) { continue; @@ -373,7 +374,7 @@ public abstract class MapManager { return null; } - private static class AutosaveRunnable implements Runnable { + private static class AutoSaveRunnable implements Runnable { @Override public void run() { synchronized (playerMaps) { diff --git a/src/main/java/fr/moribus/imageonmap/map/MapManagerException.java b/src/main/java/fr/moribus/imageonmap/map/MapManagerException.java index 231483f..1fd29c4 100644 --- a/src/main/java/fr/moribus/imageonmap/map/MapManagerException.java +++ b/src/main/java/fr/moribus/imageonmap/map/MapManagerException.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. diff --git a/src/main/java/fr/moribus/imageonmap/map/PlayerMapStore.java b/src/main/java/fr/moribus/imageonmap/map/PlayerMapStore.java index 3eb13be..77cba5c 100644 --- a/src/main/java/fr/moribus/imageonmap/map/PlayerMapStore.java +++ b/src/main/java/fr/moribus/imageonmap/map/PlayerMapStore.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. @@ -54,10 +54,11 @@ import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.serialization.ConfigurationSerializable; import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; public class PlayerMapStore implements ConfigurationSerializable { private final UUID playerUUID; - private final ArrayList mapList = new ArrayList(); + private final ArrayList mapList = new ArrayList<>(); private boolean modified = false; private int mapCount = 0; private FileConfiguration mapConfig = null; @@ -67,6 +68,7 @@ public class PlayerMapStore implements ConfigurationSerializable { this.playerUUID = playerUUID; } + //TODO maybe usefull to merge with the other manages map public synchronized boolean managesMap(int mapID) { for (ImageMap map : mapList) { if (map.managesMap(mapID)) { @@ -83,13 +85,7 @@ public class PlayerMapStore implements ConfigurationSerializable { if (item.getType() != Material.FILLED_MAP) { return false; } - - for (ImageMap map : mapList) { - if (map.managesMap(item)) { - return true; - } - } - return false; + return managesMap(MapManager.getMapIdFromItemStack(item)); } public synchronized void addMap(ImageMap map) throws MapManagerException { @@ -108,33 +104,27 @@ public class PlayerMapStore implements ConfigurationSerializable { } public synchronized void deleteMap(ImageMap map) throws MapManagerException { - remove_Map(map); + delete_Map(map); notifyModification(); } - private void remove_Map(ImageMap map) throws MapManagerException { + private void delete_Map(ImageMap map) throws MapManagerException { if (!mapList.remove(map)) { throw new MapManagerException(Reason.IMAGEMAP_DOES_NOT_EXIST); } mapCount -= map.getMapCount(); } - public synchronized boolean mapExists(String id) { - for (ImageMap map : mapList) { - if (map.getId().equals(id)) { - return true; - } - } - - return false; + public synchronized boolean mapExists(String mapId) { + return getMap(mapId) != null; } public String getNextAvailableMapID(String mapId) { + //TODO check if the value is always greater than the id count if (!mapExists(mapId)) { return mapId; } int id = 0; - do { id++; } while (mapExists(mapId + "-" + id)); @@ -143,11 +133,12 @@ public class PlayerMapStore implements ConfigurationSerializable { } public synchronized List getMapList() { - return new ArrayList(mapList); + return new ArrayList<>(mapList); } + //TODO refactor to arraylist instead of an array public synchronized ImageMap[] getMaps() { - return mapList.toArray(new ImageMap[mapList.size()]); + return mapList.toArray(new ImageMap[0]); } public synchronized ImageMap getMap(String mapId) { @@ -156,7 +147,6 @@ public class PlayerMapStore implements ConfigurationSerializable { return map; } } - return null; } @@ -202,9 +192,9 @@ public class PlayerMapStore implements ConfigurationSerializable { /* ****** Configuration Files management ***** */ @Override - public Map serialize() { - Map map = new HashMap(); - ArrayList list = new ArrayList(); + public @NotNull Map serialize() { + Map map = new HashMap<>(); + ArrayList list = new ArrayList<>(); synchronized (this) { for (ImageMap tmpMap : mapList) { list.add(tmpMap.serialize()); diff --git a/src/main/java/fr/moribus/imageonmap/map/PosterMap.java b/src/main/java/fr/moribus/imageonmap/map/PosterMap.java index 72e1a05..391c72c 100644 --- a/src/main/java/fr/moribus/imageonmap/map/PosterMap.java +++ b/src/main/java/fr/moribus/imageonmap/map/PosterMap.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. @@ -158,6 +158,7 @@ public class PosterMap extends ImageMap { public int getMapIdAtReverseZ(int index, BlockFace orientation, BlockFace bf) { + //TODO maybe a bug there why don't use orientation? int x = 0; int y = 0; switch (bf) { @@ -193,7 +194,6 @@ public class PosterMap extends ImageMap { return i; } } - throw new IllegalArgumentException("Invalid map ID"); } diff --git a/src/main/java/fr/moribus/imageonmap/map/SingleMap.java b/src/main/java/fr/moribus/imageonmap/map/SingleMap.java index 442ef04..adbaeb1 100644 --- a/src/main/java/fr/moribus/imageonmap/map/SingleMap.java +++ b/src/main/java/fr/moribus/imageonmap/map/SingleMap.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. diff --git a/src/main/java/fr/moribus/imageonmap/migration/MigratorExecutor.java b/src/main/java/fr/moribus/imageonmap/migration/MigratorExecutor.java index 1f681ab..d06b1ad 100644 --- a/src/main/java/fr/moribus/imageonmap/migration/MigratorExecutor.java +++ b/src/main/java/fr/moribus/imageonmap/migration/MigratorExecutor.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. diff --git a/src/main/java/fr/moribus/imageonmap/migration/OldSavedMap.java b/src/main/java/fr/moribus/imageonmap/migration/OldSavedMap.java index f4edbb6..c1df51c 100644 --- a/src/main/java/fr/moribus/imageonmap/migration/OldSavedMap.java +++ b/src/main/java/fr/moribus/imageonmap/migration/OldSavedMap.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. @@ -76,7 +76,7 @@ class OldSavedMap { } public void serialize(Configuration configuration) { - ArrayList data = new ArrayList(); + ArrayList data = new ArrayList<>(); data.add(Short.toString(mapId)); data.add(mapName); data.add(userName); diff --git a/src/main/java/fr/moribus/imageonmap/migration/OldSavedPoster.java b/src/main/java/fr/moribus/imageonmap/migration/OldSavedPoster.java index b471c26..6049b9c 100644 --- a/src/main/java/fr/moribus/imageonmap/migration/OldSavedPoster.java +++ b/src/main/java/fr/moribus/imageonmap/migration/OldSavedPoster.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. @@ -97,7 +97,7 @@ class OldSavedPoster { } public void serialize(Configuration configuration) { - ArrayList data = new ArrayList(); + ArrayList data = new ArrayList<>(); data.add(userName); for (short mapId : mapsIds) { diff --git a/src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java b/src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java index 128baab..0305cab 100644 --- a/src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java +++ b/src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. diff --git a/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java b/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java index f1921a8..c5c82eb 100644 --- a/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java +++ b/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. diff --git a/src/main/java/fr/moribus/imageonmap/ui/PosterOnASurface.java b/src/main/java/fr/moribus/imageonmap/ui/PosterOnASurface.java index 1a7e335..f3389d9 100644 --- a/src/main/java/fr/moribus/imageonmap/ui/PosterOnASurface.java +++ b/src/main/java/fr/moribus/imageonmap/ui/PosterOnASurface.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. diff --git a/src/main/java/fr/moribus/imageonmap/ui/PosterWall.java b/src/main/java/fr/moribus/imageonmap/ui/PosterWall.java index 0758ede..e49047d 100644 --- a/src/main/java/fr/moribus/imageonmap/ui/PosterWall.java +++ b/src/main/java/fr/moribus/imageonmap/ui/PosterWall.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. diff --git a/src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java b/src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java index d6c257c..4d20185 100644 --- a/src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java +++ b/src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java @@ -1,8 +1,8 @@ /* * Copyright or © or Copr. Moribus (2013) * Copyright or © or Copr. ProkopyL (2015) - * Copyright or © or Copr. Amaury Carrade (2016 – 2021) - * Copyright or © or Copr. Vlammar (2019 – 2021) + * Copyright or © or Copr. Amaury Carrade (2016 – 2022) + * Copyright or © or Copr. Vlammar (2019 – 2022) * * This software is a computer program whose purpose is to allow insertion of * custom images in a Minecraft world. @@ -43,13 +43,9 @@ import fr.moribus.imageonmap.map.ImageMap; import fr.moribus.imageonmap.map.MapManager; import fr.moribus.imageonmap.map.PosterMap; import fr.zcraft.quartzlib.components.i18n.I; -import fr.zcraft.quartzlib.components.nbt.NBT; -import fr.zcraft.quartzlib.components.nbt.NBTCompound; -import fr.zcraft.quartzlib.components.nbt.NBTList; import fr.zcraft.quartzlib.tools.PluginLogger; import fr.zcraft.quartzlib.tools.items.GlowEffect; import fr.zcraft.quartzlib.tools.items.ItemStackBuilder; -import fr.zcraft.quartzlib.tools.reflection.NMSException; import fr.zcraft.quartzlib.tools.runners.RunTask; import fr.zcraft.quartzlib.tools.text.MessageSender; import fr.zcraft.quartzlib.tools.world.FlatLocation; @@ -59,12 +55,14 @@ import org.bukkit.ChatColor; import org.bukkit.Color; import org.bukkit.Material; import org.bukkit.Rotation; +import org.bukkit.attribute.AttributeModifier; import org.bukkit.block.BlockFace; import org.bukkit.entity.ItemFrame; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.MapMeta; //TODO rework splatter effect, using ID is far more stable than nbt tags. @@ -140,7 +138,8 @@ public abstract class SplatterMapManager { * @return True if the attribute was detected. */ public static boolean hasSplatterAttributes(ItemStack itemStack) { - + return MapManager.managesMap(itemStack); //TODO only test if bottom left corner + /* try { final NBTCompound nbt = NBT.fromItemStack(itemStack); if (!nbt.containsKey("Enchantments")) { @@ -154,7 +153,7 @@ public abstract class SplatterMapManager { } catch (NMSException e) { PluginLogger.error("Unable to get Splatter Map attribute on item", e); return false; - } + }*/ } /** @@ -198,6 +197,7 @@ public abstract class SplatterMapManager { * @param player Player placing map * @return true if the map was correctly placed */ + @SuppressWarnings("checkstyle:VariableDeclarationUsageDistance") public static boolean placeSplatterMap(ItemFrame startFrame, Player player, PlayerInteractEntityEvent event) { ImageMap map = MapManager.getMap(player.getInventory().getItemInMainHand()); @@ -229,8 +229,6 @@ public abstract class SplatterMapManager { int i = 0; for (ItemFrame frame : surface.frames) { - BlockFace bf = WorldUtils.get4thOrientation(player.getLocation()); - int id = poster.getMapIdAtReverseZ(i, bf, startFrame.getFacing()); Rotation rot = Rotation.NONE; switch (frame.getFacing()) { case UP: @@ -241,12 +239,25 @@ public abstract class SplatterMapManager { default: //throw new IllegalStateException("Unexpected value: " + frame.getFacing()); } + BlockFace bf = WorldUtils.get4thOrientation(player.getLocation()); + int id = poster.getMapIdAtReverseZ(i, bf, startFrame.getFacing()); //Rotation management relative to player rotation the default position is North, // when on ceiling we flipped the rotation RunTask.later(() -> { addPropertiesToFrames(player, frame); - frame.setItem( - new ItemStackBuilder(Material.FILLED_MAP).nbt(ImmutableMap.of("map", id)).craftItem()); + + ItemStack item = new ItemStack(Material.MAP, 1); + ItemMeta meta = item.getItemMeta(); + PluginLogger.info(meta.getAttributeModifiers().toString()); + + for (AttributeModifier value : meta.getAttributeModifiers().values()) { + PluginLogger.info("blabla"); + PluginLogger.info("" + value); + } + item.setItemMeta(meta); + frame.setItem(item); + + //new ItemStackBuilder(Material.FILLED_MAP).nbt(ImmutableMap.of("map", id)).craftItem()); }, 5L); if (i == 0) {