From bd2c5d7a9a96fca82d952ef090c8362cb9155d27 Mon Sep 17 00:00:00 2001 From: Brokkonaut Date: Wed, 25 May 2016 23:50:33 +0200 Subject: [PATCH 01/18] Don't remove map if not allowed to damage item frames there If the EntityDamageByEntityEvent is cancelled (for example by a plugin like WorldGuard) the maps should not be removed. This is on high priority, to allow other plugins to cancel the event first. --- src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java b/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java index 9131539..c9ed61f 100644 --- a/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java +++ b/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java @@ -31,6 +31,7 @@ import org.bukkit.Material; import org.bukkit.entity.ItemFrame; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; @@ -239,9 +240,10 @@ public class MapItemManager implements Listener } - @EventHandler + @EventHandler(priority = EventPriority.HIGH) static public void onEntityDamage(EntityDamageByEntityEvent event) { + if(event.isCancelled()) return; if(!(event.getEntity() instanceof ItemFrame)) return; if(!(event.getDamager() instanceof Player)) return; From 68495fb65cf6d28cf3e6107e1d00c8c95d218068 Mon Sep 17 00:00:00 2001 From: Adrien Prokopowicz Date: Mon, 4 Jul 2016 03:45:29 +0200 Subject: [PATCH 02/18] Some fixes for the migration tool. * BUG: Names are now correctly requested for both posters and small maps. * BUG: Names cannot be requested twice anymore. --- .../java/fr/moribus/imageonmap/migration/V3Migrator.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java b/src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java index 047a428..f4037b5 100644 --- a/src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java +++ b/src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java @@ -304,8 +304,9 @@ public class V3Migrator implements Runnable try { oldPoster = new OldSavedPoster(oldPosters.get(key), key); - userNamesToFetch.add(oldPoster.getUserName()); postersToMigrate.add(oldPoster); + if(!userNamesToFetch.contains(oldPoster.getUserName())) + userNamesToFetch.add(oldPoster.getUserName()); } catch(InvalidConfigurationException ex) { @@ -327,6 +328,9 @@ public class V3Migrator implements Runnable oldMap = new OldSavedMap(oldMaps.get(key)); if(!posterContains(oldMap)) mapsToMigrate.add(oldMap); + + if(!userNamesToFetch.contains(oldMap.getUserName())) + userNamesToFetch.add(oldMap.getUserName()); } catch(InvalidConfigurationException ex) { From a90418d3a1d3a6d17723ee3a231b99dd13685131 Mon Sep 17 00:00:00 2001 From: Adrien Prokopowicz Date: Wed, 6 Jul 2016 00:03:02 +0200 Subject: [PATCH 03/18] * BUG: Fix item frame events priority and cancellation handling. --- src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java b/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java index c9ed61f..e2e7388 100644 --- a/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java +++ b/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java @@ -240,7 +240,7 @@ public class MapItemManager implements Listener } - @EventHandler(priority = EventPriority.HIGH) + @EventHandler(priority = EventPriority.HIGHEST) static public void onEntityDamage(EntityDamageByEntityEvent event) { if(event.isCancelled()) return; @@ -250,9 +250,10 @@ public class MapItemManager implements Listener onItemFrameRemove((ItemFrame)event.getEntity(), (Player)event.getDamager(), event); } - @EventHandler + @EventHandler(priority = EventPriority.HIGHEST) static public void onEntityInteract(PlayerInteractEntityEvent event) { + if(event.isCancelled()) return; if(!(event.getRightClicked() instanceof ItemFrame)) return; onItemFramePlace((ItemFrame)event.getRightClicked(), event.getPlayer(), event); From db8d1d95516011e64b78b46ea9f4b32d2672c513 Mon Sep 17 00:00:00 2001 From: Adrien Prokopowicz Date: Thu, 7 Jul 2016 02:04:13 +0200 Subject: [PATCH 04/18] Added proper support for older posters without dimensions. * NEW: MapDetailGui: Use regular items to represent Single maps, so the user can retrieve them. * NEW: MapDetailGui: Added support for posters without dimensions. * NEW: MapListGui: Added support for posters without dimensions. * NEW: MapItemManager: Added support for posters without dimensions. * BUG: SplatterMapManager: Prevent the use of splatter maps with posters without dimensions. * BUG: PlayerMapStore: Fix the console warning when loading a map store that exceeds the quotas. * BUG: Minor fixes to the french translation. --- .../moribus/imageonmap/gui/MapDetailGui.java | 42 +++++++++++++++-- .../fr/moribus/imageonmap/gui/MapListGui.java | 26 ++++++++-- .../imageonmap/map/PlayerMapStore.java | 2 +- .../moribus/imageonmap/ui/MapItemManager.java | 47 ++++++++++++++----- .../imageonmap/ui/SplatterMapManager.java | 1 + src/main/resources/i18n/fr_FR.po | 2 +- 6 files changed, 99 insertions(+), 21 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java b/src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java index 10e4454..dbf615f 100644 --- a/src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java +++ b/src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java @@ -29,11 +29,12 @@ import fr.zcraft.zlib.components.gui.PromptGui; import fr.zcraft.zlib.components.i18n.I; import fr.zcraft.zlib.tools.Callback; import fr.zcraft.zlib.tools.items.ItemStackBuilder; +import org.apache.commons.lang.ArrayUtils; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; -public class MapDetailGui extends ExplorerGui +public class MapDetailGui extends ExplorerGui { private final ImageMap map; @@ -58,6 +59,22 @@ public class MapDetailGui extends ExplorerGui .item(); } + @Override + protected ItemStack getViewItem(Short mapId) + { + int index = ((PosterMap) map).getIndex(mapId); + Material partMaterial = Material.PAPER; + if(index % 2 == 0) + partMaterial = Material.EMPTY_MAP; + + return new ItemStackBuilder(partMaterial) + .title(I.t("{green}Map part")) + .lore(I.t("{gray}Part: {white}{0}", index + 1)) + .loreLine() + .lore(I.t("{gray}» {white}Click{gray} to get only this part")) + .item(); + } + @Override protected ItemStack getPickedUpItem(int x, int y) { @@ -73,6 +90,13 @@ public class MapDetailGui extends ExplorerGui throw new IllegalStateException("Unsupported map type: " + map.getType()); } + @Override + protected ItemStack getPickedUpItem(Short mapId) + { + PosterMap poster = (PosterMap) map; + return MapItemManager.createMapItem(poster, poster.getIndex(mapId)); + } + @Override protected ItemStack getEmptyViewItem() { @@ -91,9 +115,21 @@ public class MapDetailGui extends ExplorerGui setKeepHorizontalScrollingSpace(true); if(map instanceof PosterMap) - setDataShape(((PosterMap) map).getColumnCount(), ((PosterMap) map).getRowCount()); + { + PosterMap poster = (PosterMap) map; + if(poster.hasColumnData()) + { + setDataShape(poster.getColumnCount(), poster.getRowCount()); + } + else + { + setData(ArrayUtils.toObject(poster.getMapsIDs())); + } + } else - setData(null); // Fallback to the empty view item. + { + setDataShape(1,1); + } action("rename", getSize() - 7, new ItemStackBuilder(Material.BOOK_AND_QUILL) diff --git a/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java b/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java index f8b70a7..d70b0b0 100644 --- a/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java +++ b/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java @@ -39,12 +39,24 @@ public class MapListGui extends ExplorerGui { String mapDescription; if (map instanceof SingleMap) + { /// Displayed subtitle description of a single map on the list GUI mapDescription = I.t("{white}Single map"); + } else - /// Displayed subtitle description of a poster map on the list GUI (columns × rows in english) - mapDescription = I.t("{white}Poster map ({0} × {1})", ((PosterMap) map).getColumnCount(), ((PosterMap) map).getRowCount()); - + { + PosterMap poster = (PosterMap) map; + if(poster.hasColumnData()) + { + /// Displayed subtitle description of a poster map on the list GUI (columns × rows in english) + mapDescription = I.t("{white}Poster map ({0} × {1})", poster.getColumnCount(), poster.getRowCount()); + } + else + { + /// Displayed subtitle description of a poster map without column data on the list GUI + mapDescription = I.t("{white}Poster map ({0} parts)", poster.getMapCount()); + } + } return new ItemStackBuilder(Material.MAP) /// Displayed title of a map on the list GUI .title(I.t("{green}{bold}{0}", map.getName())) @@ -84,7 +96,13 @@ public class MapListGui extends ExplorerGui } else if (map instanceof PosterMap) { - return SplatterMapManager.makeSplatterMap((PosterMap) map); + PosterMap poster = (PosterMap) map; + + if(poster.hasColumnData()) + return SplatterMapManager.makeSplatterMap((PosterMap) map); + + MapItemManager.giveParts(getPlayer(), poster); + return null; } MapItemManager.give(getPlayer(), map); diff --git a/src/main/java/fr/moribus/imageonmap/map/PlayerMapStore.java b/src/main/java/fr/moribus/imageonmap/map/PlayerMapStore.java index 54e1f6b..0c8d531 100644 --- a/src/main/java/fr/moribus/imageonmap/map/PlayerMapStore.java +++ b/src/main/java/fr/moribus/imageonmap/map/PlayerMapStore.java @@ -223,7 +223,7 @@ public class PlayerMapStore implements ConfigurationSerializable try { checkMapLimit(0); } catch(MapManagerException ex) { - PluginLogger.warning("Map limit exceeded for player '{0}' ({1} maps loaded)", + PluginLogger.warning("Map limit exceeded for player {0} ({1} maps loaded)", playerUUID.toString(),mapList.size()); } } diff --git a/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java b/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java index e2e7388..1a606ef 100644 --- a/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java +++ b/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java @@ -73,9 +73,32 @@ public class MapItemManager implements Listener static public boolean give(Player player, PosterMap map) { + if(!map.hasColumnData()) + return giveParts(player, map); return give(player, SplatterMapManager.makeSplatterMap(map)); } + static public boolean giveParts(Player player, PosterMap map) + { + boolean inventoryFull = false; + + ItemStack mapPartItem; + for(int i = 0, c = map.getMapCount(); i < c; i++) + { + if(map.hasColumnData()) + { + mapPartItem = createMapItem(map, map.getRowAt(i), map.getColumnAt(i)); + } + else + { + mapPartItem = createMapItem(map, i); + } + inventoryFull = give(player, mapPartItem) || inventoryFull; + } + + return inventoryFull; + } + static public int giveCache(Player player) { Queue cache = getCache(player); @@ -110,19 +133,16 @@ public class MapItemManager implements Listener return createMapItem(map.getMapsIDs()[0], map.getName()); } + static public ItemStack createMapItem(PosterMap map, int index) + { + /// The name of a map item given to a player, if splatter maps are not used. 0 = map name; 1 = index. + return createMapItem(map.getMapIdAt(index), I.t("{0} (part {1})", map.getName(), index + 1)); + } + static public ItemStack createMapItem(PosterMap map, int x, int y) { - String mapName; - if(map.hasColumnData()) - { - /// The name of a map item given to a player, if splatter maps are not used. 0 = map name; 1 = row; 2 = column. - mapName = I.t("{0} (row {1}, column {2})", map.getName(), x, y); - } - else - { - mapName = map.getName(); - } - return createMapItem(map.getMapIdAt(x, y), mapName); + /// The name of a map item given to a player, if splatter maps are not used. 0 = map name; 1 = row; 2 = column. + return createMapItem(map.getMapIdAt(x, y), I.t("{0} (row {1}, column {2})", map.getName(), x + 1, y + 1)); } static public ItemStack createMapItem(short mapID, String text) @@ -192,7 +212,10 @@ public class MapItemManager implements Listener { PosterMap poster = (PosterMap) map; int index = poster.getIndex(item.getDurability()); - return I.t("{0} (row {1}, column {2})", map.getName(), poster.getRowAt(index), poster.getColumnAt(index)); + if(poster.hasColumnData()) + return I.t("{0} (row {1}, column {2})", map.getName(), poster.getRowAt(index) + 1, poster.getColumnAt(index) + 1); + + return I.t("{0} (part {1})", map.getName(), index + 1); } } diff --git a/src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java b/src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java index 9b4c335..9f70cdc 100644 --- a/src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java +++ b/src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java @@ -117,6 +117,7 @@ abstract public class SplatterMapManager ImageMap map = MapManager.getMap(startFrame.getItem()); if(map == null || !(map instanceof PosterMap)) return null; PosterMap poster = (PosterMap) map; + if(!poster.hasColumnData()) return null; FlatLocation loc = new FlatLocation(startFrame.getLocation(), startFrame.getFacing()); ItemFrame[] matchingFrames = PosterWall.getMatchingMapFrames(poster, loc, startFrame.getItem().getDurability()); if(matchingFrames == null) return null; diff --git a/src/main/resources/i18n/fr_FR.po b/src/main/resources/i18n/fr_FR.po index 7dd9019..d3c8176 100644 --- a/src/main/resources/i18n/fr_FR.po +++ b/src/main/resources/i18n/fr_FR.po @@ -237,7 +237,7 @@ msgstr "{gray}Identifiant : {white}{0}" #: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:57 msgid "{gray}» {white}Left-click{gray} to get this map" -msgstr "{gray}» {white}Cliquez droit{gray} pour récupérer cette carte" +msgstr "{gray}» {white}Cliquez gauche{gray} pour récupérer cette carte" #: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:58 msgid "{gray}» {white}Right-click{gray} for details and options" From 7de48ef7cee4a7a8d26601ee96e4b33cbdaac74e Mon Sep 17 00:00:00 2001 From: Adrien Prokopowicz Date: Thu, 7 Jul 2016 23:17:49 +0200 Subject: [PATCH 05/18] * BUG: Fixed splatter maps removing when in survival mode. --- .../java/fr/moribus/imageonmap/ui/MapItemManager.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java b/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java index 1a606ef..fe317c7 100644 --- a/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java +++ b/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java @@ -249,11 +249,10 @@ public class MapItemManager implements Listener if(poster != null) { event.setCancelled(true); - if(player.getGameMode() == GameMode.CREATIVE) - { - if(!SplatterMapManager.hasSplatterMap(player, poster)) - poster.give(player); - } + + if(player.getGameMode() != GameMode.CREATIVE || !SplatterMapManager.hasSplatterMap(player, poster)) + poster.give(player); + return; } } From 97e62c1a1425b2ec4038a821cc5afa35f20de589 Mon Sep 17 00:00:00 2001 From: Adrien Prokopowicz Date: Thu, 7 Jul 2016 23:28:17 +0200 Subject: [PATCH 06/18] * BUG: Fixed splatter maps removing when in survival mode. --- src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java b/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java index fe317c7..29757ab 100644 --- a/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java +++ b/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java @@ -223,10 +223,12 @@ public class MapItemManager implements Listener { if(frame.getItem().getType() != Material.AIR) return; if(!MapManager.managesMap(player.getItemInHand())) return; + event.setCancelled(true); if(SplatterMapManager.hasSplatterAttributes(player.getItemInHand())) { - SplatterMapManager.placeSplatterMap(frame, player); + if(!SplatterMapManager.placeSplatterMap(frame, player)) + return; } else { @@ -234,7 +236,6 @@ public class MapItemManager implements Listener frame.setItem(is); } - event.setCancelled(true); ItemUtils.consumeItem(player); } From 225c76de7cf60fe8e4a500dd68e96696f25170ba Mon Sep 17 00:00:00 2001 From: Adrien Prokopowicz Date: Fri, 8 Jul 2016 01:15:02 +0200 Subject: [PATCH 07/18] Better Management for missing maps. * NEW: Migration now ignores maps that are missing from the save. * BUG: Fix NPEs being thrown when trying to handle missing maps. * BUG: Fix some typos in the french translation. --- .../fr/moribus/imageonmap/image/Renderer.java | 12 ++++++++- .../fr/moribus/imageonmap/map/MapManager.java | 17 ++++++++++++ .../imageonmap/migration/OldSavedMap.java | 6 +++++ .../imageonmap/migration/OldSavedPoster.java | 12 +++++++++ .../imageonmap/migration/V3Migrator.java | 26 ++++++++++++++++--- src/main/resources/i18n/fr_FR.po | 6 ++--- 6 files changed, 72 insertions(+), 7 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/image/Renderer.java b/src/main/java/fr/moribus/imageonmap/image/Renderer.java index 8cf4d8a..1aa306f 100644 --- a/src/main/java/fr/moribus/imageonmap/image/Renderer.java +++ b/src/main/java/fr/moribus/imageonmap/image/Renderer.java @@ -18,6 +18,7 @@ package fr.moribus.imageonmap.image; +import fr.zcraft.zlib.tools.PluginLogger; import java.awt.image.BufferedImage; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -29,6 +30,7 @@ public class Renderer extends MapRenderer { static public boolean isHandled(MapView map) { + if(map == null) return false; for(MapRenderer renderer : map.getRenderers()) { if(renderer instanceof Renderer) return true; @@ -46,7 +48,15 @@ public class Renderer extends MapRenderer static public void installRenderer(BufferedImage image, short mapID) { - installRenderer(Bukkit.getMap(mapID)).setImage(image); + MapView map = Bukkit.getMap(mapID); + if(map == null) + { + PluginLogger.warning("Could not install renderer for map {0} : the Minecraft map does not exist", mapID); + } + else + { + installRenderer(map).setImage(image); + } } static public Renderer installRenderer(MapView map) diff --git a/src/main/java/fr/moribus/imageonmap/map/MapManager.java b/src/main/java/fr/moribus/imageonmap/map/MapManager.java index eb59656..fa58f99 100644 --- a/src/main/java/fr/moribus/imageonmap/map/MapManager.java +++ b/src/main/java/fr/moribus/imageonmap/map/MapManager.java @@ -307,6 +307,23 @@ abstract public class MapManager return mapCount; } + /** + * Returns if the given map ID is valid and exists in the current save. + * @param mapId the map ID. + * @return true if the given map ID is valid and exists in the current save, false otherwise. + */ + static public boolean mapIdExists(short mapId) + { + try + { + return Bukkit.getMap(mapId) != null; + } + catch(Throwable ex) + { + return false; + } + } + static private PlayerMapStore getPlayerMapStore(UUID playerUUID) { PlayerMapStore store; diff --git a/src/main/java/fr/moribus/imageonmap/migration/OldSavedMap.java b/src/main/java/fr/moribus/imageonmap/migration/OldSavedMap.java index 39d99f3..6751aa9 100644 --- a/src/main/java/fr/moribus/imageonmap/migration/OldSavedMap.java +++ b/src/main/java/fr/moribus/imageonmap/migration/OldSavedMap.java @@ -19,6 +19,7 @@ package fr.moribus.imageonmap.migration; import fr.moribus.imageonmap.map.ImageMap; +import fr.moribus.imageonmap.map.MapManager; import fr.moribus.imageonmap.map.SingleMap; import java.util.ArrayList; import java.util.List; @@ -73,6 +74,11 @@ class OldSavedMap configuration.set(mapName, data); } + public boolean isMapValid() + { + return MapManager.mapIdExists(mapId); + } + public short getMapId() {return mapId;} public String getUserName() {return userName;} } diff --git a/src/main/java/fr/moribus/imageonmap/migration/OldSavedPoster.java b/src/main/java/fr/moribus/imageonmap/migration/OldSavedPoster.java index df7b47c..0c1b7d5 100644 --- a/src/main/java/fr/moribus/imageonmap/migration/OldSavedPoster.java +++ b/src/main/java/fr/moribus/imageonmap/migration/OldSavedPoster.java @@ -19,6 +19,7 @@ package fr.moribus.imageonmap.migration; import fr.moribus.imageonmap.map.ImageMap; +import fr.moribus.imageonmap.map.MapManager; import fr.moribus.imageonmap.map.PosterMap; import java.util.ArrayList; import java.util.List; @@ -94,5 +95,16 @@ class OldSavedPoster } + public boolean isMapValid() + { + for(short mapId : mapsIds) + { + if(!MapManager.mapIdExists(mapId)) + return false; + } + return true; + } + public String getUserName() {return userName;} + public short[] getMapsIds() {return mapsIds;} } diff --git a/src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java b/src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java index ccde458..3c37e97 100644 --- a/src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java +++ b/src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java @@ -39,9 +39,12 @@ import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayDeque; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashSet; import java.util.Map; import java.util.UUID; +import org.apache.commons.lang.ArrayUtils; +import org.apache.commons.lang.StringUtils; /** * This class represents and executes the ImageOnMap v3.x migration process @@ -241,7 +244,7 @@ public class V3Migrator implements Runnable */ private void backupMapData() throws IOException { - PluginLogger.info("Backing up map data before migrating..."); + PluginLogger.info(I.t("Backing up map data before migrating...")); if(!backupsPrev3Directory.exists()) backupsPrev3Directory.mkdirs(); if(!backupsPostv3Directory.exists()) backupsPostv3Directory.mkdirs(); @@ -265,7 +268,7 @@ public class V3Migrator implements Runnable verifiedBackupCopy(mapFile, backupFile); } - PluginLogger.info("Backup complete."); + PluginLogger.info(I.t("Backup complete.")); } /** @@ -307,7 +310,7 @@ public class V3Migrator implements Runnable } catch(InvalidConfigurationException ex) { - PluginLogger.warning("Could not read poster data for key '{0}'", ex, key); + PluginLogger.warning("Could not read poster data for key {0}", ex, key); } } } @@ -424,6 +427,8 @@ public class V3Migrator implements Runnable ArrayDeque remainingMaps = new ArrayDeque<>(); ArrayDeque remainingPosters = new ArrayDeque<>(); + ArrayDeque missingMapIds = new ArrayDeque<>(); + UUID playerUUID; OldSavedMap map; while(!mapsToMigrate.isEmpty()) @@ -434,6 +439,10 @@ public class V3Migrator implements Runnable { remainingMaps.add(map); } + else if(!map.isMapValid()) + { + missingMapIds.add(map.getMapId()); + } else { MapManager.insertMap(map.toImageMap(playerUUID)); @@ -450,12 +459,23 @@ public class V3Migrator implements Runnable { remainingPosters.add(poster); } + else if(!poster.isMapValid()) + { + missingMapIds.addAll(Arrays.asList(ArrayUtils.toObject(poster.getMapsIds()))); + } else { MapManager.insertMap(poster.toImageMap(playerUUID)); } } postersToMigrate.addAll(remainingPosters); + + if(!missingMapIds.isEmpty()) + { + PluginLogger.warning(I.tn("{0} registered minecraft map is missing from the save.", "{0} registered minecraft maps are missing from the save.", missingMapIds.size())); + PluginLogger.warning(I.t("These maps will not be migrated, but this could mean the save has been altered or corrupted.")); + PluginLogger.warning(I.t("The following maps are missing : {0} ", StringUtils.join(missingMapIds, ','))); + } } private void saveChanges() diff --git a/src/main/resources/i18n/fr_FR.po b/src/main/resources/i18n/fr_FR.po index d3c8176..0a81ed3 100644 --- a/src/main/resources/i18n/fr_FR.po +++ b/src/main/resources/i18n/fr_FR.po @@ -403,7 +403,7 @@ msgstr "Terminé." #: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:229 msgid "Backup directories already exists." -msgstr "Les répertoires de sauvegarde existe déjà." +msgstr "Les répertoires de sauvegarde existent déjà." #: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:230 msgid "" @@ -441,7 +441,7 @@ msgstr "Le processus de migration a été interrompu." msgid "Fetching done. {0} UUID have been retrieved." msgid_plural "Fetching done. {0} UUIDs have been retrieved." msgstr[0] "Récupération achevée. {0} UUID a été retrouvé." -msgstr[1] "Récupération achevée. {0} UUID ont été retrouvé." +msgstr[1] "Récupération achevée. {0} UUIDs ont été retrouvés." #: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:371 #, java-format @@ -511,7 +511,7 @@ msgstr[1] "{0} posters n'ont pas pu être migrés." msgid "Data that has not been migrated will be kept in the old data files." msgstr "" "Les données qui n'ont pas été migrées seront conservées dans les vieux " -"fichiers de donnée." +"fichiers de données." #. The name of a map item given to a player, if splatter maps are not used. 0 = map name; 1 = row; 2 = column. #: src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java:118 From a730aab1f1ee63cf782d59cc78f82cf05b15f0ce Mon Sep 17 00:00:00 2001 From: Adrien Prokopowicz Date: Fri, 8 Jul 2016 04:45:08 +0200 Subject: [PATCH 08/18] More minor fixes. * NEW: GUIs are now translated according to the player's locale. * BUG: Fix some usage parameters. * BUG: Fix Map initialisation on startup if the map is invalid. * BUG: PosterMap: remove a debugging message. * BUG: Fix the command error message for the french locale. --- .../maptool/DeleteConfirmCommand.java | 2 +- .../imageonmap/gui/ConfirmDeleteMapGui.java | 12 +++--- .../moribus/imageonmap/gui/MapDetailGui.java | 34 ++++++++-------- .../fr/moribus/imageonmap/gui/MapListGui.java | 40 +++++++++---------- .../imageonmap/image/MapInitEvent.java | 1 + .../fr/moribus/imageonmap/map/PosterMap.java | 1 - .../fr/moribus/imageonmap/ui/PosterWall.java | 2 - src/main/resources/i18n/fr_FR.po | 2 +- 8 files changed, 46 insertions(+), 48 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java b/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java index d7c169b..0414eca 100644 --- a/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java +++ b/src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java @@ -28,7 +28,7 @@ import org.bukkit.ChatColor; import java.util.List; -@CommandInfo (name = "delete", usageParameters = "[tool name]") +@CommandInfo (name = "delete", usageParameters = "[map name]") public class DeleteConfirmCommand extends IoMCommand { @Override diff --git a/src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java b/src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java index 184ea90..83c5890 100644 --- a/src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java +++ b/src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java @@ -99,7 +99,7 @@ public class ConfirmDeleteMapGui extends ActionGui protected void onUpdate() { /// The title of the map deletion GUI. {0}: map name. - setTitle(I.t("{0} » {black}Confirm deletion", mapToDelete.getName())); + setTitle(I.t(getPlayerLocale(), "{0} » {black}Confirm deletion", mapToDelete.getName())); setSize(6 * 9); @@ -107,13 +107,13 @@ public class ConfirmDeleteMapGui extends ActionGui action("", 13, new ItemStackBuilder(Material.EMPTY_MAP) /// The title of the map deletion item - .title(I.t("{red}You're about to destroy this map...")) + .title(I.t(getPlayerLocale(), "{red}You're about to destroy this map...")) /// The end, in the lore, of a title starting with “You're about to destroy this map...”. - .lore(I.t("{red}...{italic}forever{red}.")) + .lore(I.t(getPlayerLocale(), "{red}...{italic}forever{red}.")) .loreLine() - .lore(I.t("{gray}Name: {white}{0}",mapToDelete.getName())) - .lore(I.t("{gray}Map ID: {white}{0}", mapToDelete.getId())) - .lore(I.t("{gray}Maps inside: {white}{0}", mapToDelete.getMapsIDs().length)) + .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)) .hideAttributes() ); diff --git a/src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java b/src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java index dbf615f..7ce724c 100644 --- a/src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java +++ b/src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java @@ -51,11 +51,11 @@ public class MapDetailGui extends ExplorerGui partMaterial = Material.EMPTY_MAP; return new ItemStackBuilder(partMaterial) - .title(I.t("{green}Map part")) - .lore(I.t("{gray}Column: {white}{0}", y + 1)) - .lore(I.t("{gray}Row: {white}{0}", x + 1)) + .title(I.t(getPlayerLocale(), "{green}Map part")) + .lore(I.t(getPlayerLocale(), "{gray}Column: {white}{0}", y + 1)) + .lore(I.t(getPlayerLocale(), "{gray}Row: {white}{0}", x + 1)) .loreLine() - .lore(I.t("{gray}» {white}Click{gray} to get only this part")) + .lore(I.t(getPlayerLocale(), "{gray}» {white}Click{gray} to get only this part")) .item(); } @@ -68,10 +68,10 @@ public class MapDetailGui extends ExplorerGui partMaterial = Material.EMPTY_MAP; return new ItemStackBuilder(partMaterial) - .title(I.t("{green}Map part")) - .lore(I.t("{gray}Part: {white}{0}", index + 1)) + .title(I.t(getPlayerLocale(), "{green}Map part")) + .lore(I.t(getPlayerLocale(), "{gray}Part: {white}{0}", index + 1)) .loreLine() - .lore(I.t("{gray}» {white}Click{gray} to get only this part")) + .lore(I.t(getPlayerLocale(), "{gray}» {white}Click{gray} to get only this part")) .item(); } @@ -111,7 +111,7 @@ public class MapDetailGui extends ExplorerGui protected void onUpdate() { /// Title of the map details GUI - setTitle(I.t("Your maps » {black}{0}", map.getName())); + setTitle(I.t(getPlayerLocale(), "Your maps » {black}{0}", map.getName())); setKeepHorizontalScrollingSpace(true); if(map instanceof PosterMap) @@ -133,15 +133,15 @@ public class MapDetailGui extends ExplorerGui action("rename", getSize() - 7, new ItemStackBuilder(Material.BOOK_AND_QUILL) - .title(I.t("{blue}Rename this image")) - .longLore(I.t("{gray}Click here to rename this image; this is used for your own organization.")) + .title(I.t(getPlayerLocale(), "{blue}Rename this image")) + .longLore(I.t(getPlayerLocale(), "{gray}Click here to rename this image; this is used for your own organization.")) ); action("delete", getSize() - 6, new ItemStackBuilder(Material.BARRIER) - .title("{red}Delete this image") - .longLore(I.t("{gray}Deletes this map {white}forever{gray}. This action cannot be undone!")) + .title(I.t(getPlayerLocale(), "{red}Delete this image")) + .longLore(I.t(getPlayerLocale(), "{gray}Deletes this map {white}forever{gray}. This action cannot be undone!")) .loreLine() - .longLore(I.t("{gray}You will be asked to confirm your choice if you click here.")) + .longLore(I.t(getPlayerLocale(), "{gray}You will be asked to confirm your choice if you click here.")) ); @@ -153,8 +153,8 @@ public class MapDetailGui extends ExplorerGui backSlot++; action("back", backSlot, new ItemStackBuilder(Material.EMERALD) - .title(I.t("{green}« Back")) - .lore(I.t("{gray}Go back to the list.")) + .title(I.t(getPlayerLocale(), "{green}« Back")) + .lore(I.t(getPlayerLocale(), "{gray}Go back to the list.")) ); } @@ -169,12 +169,12 @@ public class MapDetailGui extends ExplorerGui { if (newName == null || newName.isEmpty()) { - getPlayer().sendMessage(I.t("{ce}Map names can't be empty.")); + I.sendT(getPlayer(), "{ce}Map names can't be empty."); return; } map.rename(newName); - getPlayer().sendMessage(I.t("{cs}Map successfully renamed.")); + I.sendT(getPlayer(), "{cs}Map successfully renamed."); } }, map.getName(), this); } diff --git a/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java b/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java index d70b0b0..c8e50ea 100644 --- a/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java +++ b/src/main/java/fr/moribus/imageonmap/gui/MapListGui.java @@ -41,7 +41,7 @@ public class MapListGui extends ExplorerGui if (map instanceof SingleMap) { /// Displayed subtitle description of a single map on the list GUI - mapDescription = I.t("{white}Single map"); + mapDescription = I.t(getPlayerLocale(), "{white}Single map"); } else { @@ -49,25 +49,25 @@ public class MapListGui extends ExplorerGui if(poster.hasColumnData()) { /// Displayed subtitle description of a poster map on the list GUI (columns × rows in english) - mapDescription = I.t("{white}Poster map ({0} × {1})", poster.getColumnCount(), poster.getRowCount()); + mapDescription = I.t(getPlayerLocale(), "{white}Poster map ({0} × {1})", poster.getColumnCount(), poster.getRowCount()); } else { /// Displayed subtitle description of a poster map without column data on the list GUI - mapDescription = I.t("{white}Poster map ({0} parts)", poster.getMapCount()); + mapDescription = I.t(getPlayerLocale(), "{white}Poster map ({0} parts)", poster.getMapCount()); } } return new ItemStackBuilder(Material.MAP) /// Displayed title of a map on the list GUI - .title(I.t("{green}{bold}{0}", map.getName())) + .title(I.t(getPlayerLocale(), "{green}{bold}{0}", map.getName())) .lore(mapDescription) .loreLine() /// Map ID displayed in the tooltip of a map on the list GUI - .lore(I.t("{gray}Map ID: {0}", map.getId())) + .lore(I.t(getPlayerLocale(), "{gray}Map ID: {0}", map.getId())) .loreLine() - .lore(I.t("{gray}» {white}Left-click{gray} to get this map")) - .lore(I.t("{gray}» {white}Right-click{gray} for details and options")) + .lore(I.t(getPlayerLocale(), "{gray}» {white}Left-click{gray} to get this map")) + .lore(I.t(getPlayerLocale(), "{gray}» {white}Right-click{gray} for details and options")) .item(); } @@ -76,8 +76,8 @@ public class MapListGui extends ExplorerGui protected ItemStack getEmptyViewItem() { return new ItemStackBuilder(Material.BARRIER) - .title(I.t("{red}You don't have any map.")) - .longLore(I.t("{gray}Get started by creating a new one using {white}/tomap [resize]{gray}!")) + .title(I.t(getPlayerLocale(), "{red}You don't have any map.")) + .longLore(I.t(getPlayerLocale(), "{gray}Get started by creating a new one using {white}/tomap [resize]{gray}!")) .item(); } @@ -115,7 +115,7 @@ public class MapListGui extends ExplorerGui ImageMap[] maps = MapManager.getMaps(getPlayer().getUniqueId()); setData(maps); /// The maps list GUI title - setTitle(I.t("{black}Your maps {reset}({0})", maps.length)); + setTitle(I.t(getPlayerLocale(), "{black}Your maps {reset}({0})", maps.length)); setKeepHorizontalScrollingSpace(true); @@ -144,24 +144,24 @@ public class MapListGui extends ExplorerGui double percentageUsed = mapPartLeft < 0 ? 0 : ((double) mapPartCount) / ((double) (mapPartCount + mapPartLeft)) * 100; ItemStackBuilder statistics = new ItemStackBuilder(Material.ENCHANTED_BOOK) - .title(I.t("{blue}Usage statistics")) + .title(I.t(getPlayerLocale(), "{blue}Usage statistics")) .loreLine() - .lore(I.tn("{white}{0}{gray} image rendered", "{white}{0}{gray} images rendered", imagesCount)) - .lore(I.tn("{white}{0}{gray} Minecraft map used", "{white}{0}{gray} Minecraft maps used", mapPartCount)); + .lore(I.tn(getPlayerLocale(), "{white}{0}{gray} image rendered", "{white}{0}{gray} images rendered", imagesCount)) + .lore(I.tn(getPlayerLocale(), "{white}{0}{gray} Minecraft map used", "{white}{0}{gray} Minecraft maps used", mapPartCount)); if(mapPartLeft >= 0) { statistics - .lore("", I.t("{blue}Minecraft maps limits"), "") + .lore("", I.t(getPlayerLocale(), "{blue}Minecraft maps limits"), "") .lore(mapGlobalLimit == 0 - ? I.t("{gray}Server-wide limit: {white}unlimited") - : I.t("{gray}Server-wide limit: {white}{0}", mapGlobalLimit)) + ? I.t(getPlayerLocale(), "{gray}Server-wide limit: {white}unlimited") + : I.t(getPlayerLocale(), "{gray}Server-wide limit: {white}{0}", mapGlobalLimit)) .lore(mapPersonalLimit == 0 - ? I.t("{gray}Per-player limit: {white}unlimited") - : I.t("{gray}Per-player limit: {white}{0}", mapPersonalLimit)) + ? I.t(getPlayerLocale(), "{gray}Per-player limit: {white}unlimited") + : I.t(getPlayerLocale(), "{gray}Per-player limit: {white}{0}", mapPersonalLimit)) .loreLine() - .lore(I.t("{white}{0} %{gray} of your quota used", (int) Math.rint(percentageUsed))) - .lore(I.tn("{white}{0}{gray} map left", "{white}{0}{gray} maps left", mapPartLeft)); + .lore(I.t(getPlayerLocale(), "{white}{0} %{gray} of your quota used", (int) Math.rint(percentageUsed))) + .lore(I.tn(getPlayerLocale(), "{white}{0}{gray} map left", "{white}{0}{gray} maps left", mapPartLeft)); } statistics.hideAttributes(); diff --git a/src/main/java/fr/moribus/imageonmap/image/MapInitEvent.java b/src/main/java/fr/moribus/imageonmap/image/MapInitEvent.java index 4c83978..556c8f7 100644 --- a/src/main/java/fr/moribus/imageonmap/image/MapInitEvent.java +++ b/src/main/java/fr/moribus/imageonmap/image/MapInitEvent.java @@ -106,6 +106,7 @@ public class MapInitEvent implements Listener static protected void initMap(MapView map) { + if(map == null) return; if(Renderer.isHandled(map)) return; File imageFile = ImageOnMap.getPlugin().getImageFile(map.getId()); diff --git a/src/main/java/fr/moribus/imageonmap/map/PosterMap.java b/src/main/java/fr/moribus/imageonmap/map/PosterMap.java index 7b4d17b..525eaf2 100644 --- a/src/main/java/fr/moribus/imageonmap/map/PosterMap.java +++ b/src/main/java/fr/moribus/imageonmap/map/PosterMap.java @@ -140,7 +140,6 @@ public class PosterMap extends ImageMap { int x = index % (columnCount); int y = index / (columnCount); - System.out.println(x + " : " + (rowCount - y - 1) + " (" + index); return getMapIdAt(x, rowCount - y - 1); } diff --git a/src/main/java/fr/moribus/imageonmap/ui/PosterWall.java b/src/main/java/fr/moribus/imageonmap/ui/PosterWall.java index 4d48812..7c7a429 100644 --- a/src/main/java/fr/moribus/imageonmap/ui/PosterWall.java +++ b/src/main/java/fr/moribus/imageonmap/ui/PosterWall.java @@ -87,8 +87,6 @@ public class PosterWall { for(int x = 0; x < map.getColumnCount(); ++x) { - //Location newLocation = WorldUtils.addToLocation(topLeftLocation, x, -y, facing); - //System.out.println("Checking : " + loc); int mapIndex = map.getIndexAt(x, y); ItemFrame frame = getMapFrameAt(loc, map); if(frame != null) frames[mapIndex] = frame; diff --git a/src/main/resources/i18n/fr_FR.po b/src/main/resources/i18n/fr_FR.po index 0a81ed3..e1fa384 100644 --- a/src/main/resources/i18n/fr_FR.po +++ b/src/main/resources/i18n/fr_FR.po @@ -20,7 +20,7 @@ msgstr "" #: src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java:40 msgid "You need to give a map name." -msgstr "Vous devez donner un nom à la carte." +msgstr "Vous devez donner le nom d'une carte." #: src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java:57 #: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteNoConfirmCommand.java:51 From 7ccccb2c0e5830ba9be50c0df3b2e25f000c5eb4 Mon Sep 17 00:00:00 2001 From: Adrien Prokopowicz Date: Fri, 8 Jul 2016 06:34:40 +0200 Subject: [PATCH 09/18] * BUG: Fix map parts items row/column indexing. --- src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java b/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java index 29757ab..c6c55c1 100644 --- a/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java +++ b/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java @@ -169,10 +169,7 @@ public class MapItemManager implements Listener { if(map instanceof PosterMap && ((PosterMap) map).hasColumnData()) { - return MapItemManager.createMapItem( - ((PosterMap) map).getMapIdAt(x, y), - I.t("{0} (row {1}, column {2})", map.getName(), y + 1, x + 1) - ); + return MapItemManager.createMapItem((PosterMap) map, x, y); } else { @@ -213,7 +210,7 @@ public class MapItemManager implements Listener PosterMap poster = (PosterMap) map; int index = poster.getIndex(item.getDurability()); if(poster.hasColumnData()) - return I.t("{0} (row {1}, column {2})", map.getName(), poster.getRowAt(index) + 1, poster.getColumnAt(index) + 1); + return I.t("{0} (row {1}, column {2})", map.getName(), poster.getRowAt(index), poster.getColumnAt(index)); return I.t("{0} (part {1})", map.getName(), index + 1); } From cf272a47edcebc9b553c304de6137463468d4588 Mon Sep 17 00:00:00 2001 From: Adrien Prokopowicz Date: Sat, 9 Jul 2016 02:55:13 +0200 Subject: [PATCH 10/18] * NEW: Updated french translation. --- src/main/resources/i18n/fr_FR.po | 425 +++++++++++++++---------------- 1 file changed, 207 insertions(+), 218 deletions(-) diff --git a/src/main/resources/i18n/fr_FR.po b/src/main/resources/i18n/fr_FR.po index e1fa384..3f93000 100644 --- a/src/main/resources/i18n/fr_FR.po +++ b/src/main/resources/i18n/fr_FR.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-05-21 20:34+0200\n" -"PO-Revision-Date: 2016-05-21 20:38+0100\n" +"POT-Creation-Date: 2016-07-09 02:10+0200\n" +"PO-Revision-Date: 2016-07-09 02:43+0200\n" "Last-Translator: Amaury Carrade\n" "Language-Team: \n" "Language: fr_FR\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 1.7.5\n" +"X-Generator: Poedit 1.8.7.1\n" #: src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java:40 msgid "You need to give a map name." @@ -124,188 +124,10 @@ msgstr "" msgid "{ce}Map rendering failed: {0}" msgstr "{ce}Impossible de faire le rendu de la carte : {0}" -#. The title of the map deletion GUI. {0}: map name. -#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:102 -msgid "{0} » {black}Confirm deletion" -msgstr "{0} » {black}Confirmation de suppression" - -#. The title of the map deletion item -#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:110 -msgid "{red}You're about to destroy this map..." -msgstr "{red}Vous êtes sur le point de supprimer cette carte..." - -#. The end, in the lore, of a title starting with “You're about to destroy this map...”. -#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:112 -msgid "{red}...{italic}forever{red}." -msgstr "{red}...{italic}pour toujours{red}." - -#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:114 -msgid "{gray}Name: {white}{0}" -msgstr "{gray}Nom : {white}{0}" - -#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:115 -msgid "{gray}Map ID: {white}{0}" -msgstr "{gray}Identifiant : {white}{0}" - -#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:116 -msgid "{gray}Maps inside: {white}{0}" -msgstr "{gray}Cartes : {white}{0}" - #: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:178 msgid "{gray}Map successfully deleted." msgstr "{gray}Carte supprimée avec succès." -#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:53 -msgid "{green}Map part" -msgstr "{green}Extrait de carte" - -#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:54 -msgid "{gray}Column: {white}{0}" -msgstr "{gray}Colonne : {white}{0}" - -#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:55 -msgid "{gray}Row: {white}{0}" -msgstr "{gray}Ligne : {white}{0}" - -#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:57 -msgid "{gray}» {white}Click{gray} to get only this part" -msgstr "{gray}» {white}Cliquez{gray} pour récupérer cette partie" - -#. Title of the map details GUI -#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:90 -msgid "Your maps » {black}{0}" -msgstr "Vos cartes » {black}{0}" - -#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:100 -msgid "{blue}Rename this image" -msgstr "{blue}Renommer cette image" - -#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:101 -msgid "" -"{gray}Click here to rename this image; this is used for your own " -"organization." -msgstr "" -"{gray}Cliquez ici pour renommer cette image ; ceci ne sert qu'à votre " -"organisation personnelle." - -#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:106 -msgid "" -"{gray}Deletes this map {white}forever{gray}. This action cannot be undone!" -msgstr "" -"{gray}Supprime cette carte {white}pour toujours{gray}. Cette action ne peut " -"être annulée !" - -#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:108 -msgid "{gray}You will be asked to confirm your choice if you click here." -msgstr "{gray}Une confirmation sera demandée si vous cliquez ici." - -#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:120 -msgid "{green}« Back" -msgstr "{green}« Retour" - -#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:121 -msgid "{gray}Go back to the list." -msgstr "{gray}Retourner à la liste." - -#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:136 -msgid "{ce}Map names can't be empty." -msgstr "{ce}Les noms de cartes ne peuvent être vide." - -#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:141 -msgid "{cs}Map successfully renamed." -msgstr "{cs}Carte renommée avec succès." - -#. Displayed subtitle description of a single map on the list GUI -#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:43 -msgid "{white}Single map" -msgstr "{white}Carte unique" - -#. Displayed subtitle description of a poster map on the list GUI (columns × rows in english) -#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:46 -msgid "{white}Poster map ({0} × {1})" -msgstr "{white}Poster ({0} × {1})" - -#. Displayed title of a map on the list GUI -#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:50 -msgid "{green}{bold}{0}" -msgstr "{green}{bold}{0}" - -#. Map ID displayed in the tooltip of a map on the list GUI -#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:55 -msgid "{gray}Map ID: {0}" -msgstr "{gray}Identifiant : {white}{0}" - -#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:57 -msgid "{gray}» {white}Left-click{gray} to get this map" -msgstr "{gray}» {white}Cliquez gauche{gray} pour récupérer cette carte" - -#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:58 -msgid "{gray}» {white}Right-click{gray} for details and options" -msgstr "{gray}» {white}Cliquez droit{gray} pour détails et options" - -#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:67 -msgid "{red}You don't have any map." -msgstr "{red}Vous n'avez aucune carte." - -#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:68 -msgid "" -"{gray}Get started by creating a new one using {white}/tomap [resize]" -"{gray}!" -msgstr "" -"{gray}Commencez par en créer une nouvelle avec {white}/tomap [resize]" -"{gray} !" - -#. The maps list GUI title -#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:100 -msgid "{black}Your maps {reset}({0})" -msgstr "{black}Vos cartes {reset}({0})" - -#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:129 -msgid "{blue}Usage statistics" -msgstr "{blue}Statistiques d'utilisation" - -#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:131 -msgid "{white}{0}{gray} image rendered" -msgid_plural "{white}{0}{gray} images rendered" -msgstr[0] "{white}{0}{gray} image rendue" -msgstr[1] "{white}{0}{gray} images rendues" - -#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:132 -msgid "{white}{0}{gray} Minecraft map used" -msgid_plural "{white}{0}{gray} Minecraft maps used" -msgstr[0] "{white}{0}{gray} carte Minecraft utilisée" -msgstr[1] "{white}{0}{gray} cartes Minecraft utilisées" - -#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:137 -msgid "{blue}Minecraft maps limits" -msgstr "{blue}Limites de cartes Minecraft" - -#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:139 -msgid "{gray}Server-wide limit: {white}unlimited" -msgstr "{gray}Limite du serveur : {white}illimité" - -#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:140 -msgid "{gray}Server-wide limit: {white}{0}" -msgstr "{gray}Limite du serveur : {white}{0}" - -#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:142 -msgid "{gray}Per-player limit: {white}unlimited" -msgstr "{gray}Limite individuelle : {white}illimité" - -#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:143 -msgid "{gray}Per-player limit: {white}{0}" -msgstr "{gray}Limite individuelle : {white}{0}" - -#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:145 -msgid "{white}{0} %{gray} of your quota used" -msgstr "{white}{0} %{gray} de votre quota utilisé" - -#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:146 -msgid "{white}{0}{gray} map left" -msgid_plural "{white}{0}{gray} maps left" -msgstr[0] "{white}{0}{gray} carte restante" -msgstr[1] "{white}{0}{gray} cartes restantes" - #: src/main/java/fr/moribus/imageonmap/image/ImageRendererExecutor.java:73 #, java-format msgid "HTTP error : {0} {1}" @@ -349,25 +171,25 @@ msgstr "" "Le thread a été interrompu durant l'attente de la fin de la migration. Cette " "dernière pourrait s'être achevée anormalement." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:173 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:176 msgid "Error while preparing migration" msgstr "Une erreur est survenue lors de la préparation de la migration." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:174 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:177 msgid "Aborting migration. No change has been made." msgstr "La migration est annulée. Aucun changement n'a été effectué." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:186 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:189 msgid "Error while migrating" msgstr "Erreur lors de la migration" -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:187 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:190 msgid "Aborting migration. Some changes may already have been made." msgstr "" "La migration est annulée. Certains changements ont pu être effectués malgré " "tout." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:188 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:191 msgid "" "Before trying to migrate again, you must recover player files from the " "backups, and then move the backups away from the plugin directory to avoid " @@ -378,34 +200,34 @@ msgstr "" "déplacer les sauvegardes hors du dossier du plugin afin d'éviter de les " "écraser." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:200 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:203 msgid "Looking for configuration files to migrate..." msgstr "Recherche de fichiers de configuration à migrer..." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:203 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:206 #, java-format msgid "Detected former posters file {0}" msgstr "Vieux fichier de posters détecté : {0}" -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:206 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:209 #, java-format msgid "Detected former maps file {0}" msgstr "Vieux fichier de carte détecté : {0}" -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:210 -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:409 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:213 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:416 msgid "There is nothing to migrate. Stopping." msgstr "Il n'y a rien à migrer. Le processus est arrêté." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:215 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:218 msgid "Done." msgstr "Terminé." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:229 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:232 msgid "Backup directories already exists." msgstr "Les répertoires de sauvegarde existent déjà." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:230 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:233 msgid "" "This means that a migration has already been done, or may not have ended " "well." @@ -413,7 +235,7 @@ msgstr "" "Cela signifie qu'une migration a déjà été faite, ou qu'elle n'a possiblement " "pas terminé correctement." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:231 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:234 msgid "" "To start a new migration, you must move away the backup directories so they " "are not overwritten." @@ -421,36 +243,44 @@ msgstr "" "Pour démarrer une nouvelle migration, vous devez déplacer les répertoires de " "sauvegarde afin qu'ils ne soit pas écrasés." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:345 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:247 +msgid "Backing up map data before migrating..." +msgstr "Sauvegarde des données des cartes avant la migration…" + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:271 +msgid "Backup complete." +msgstr "Sauvegarde terminée." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:352 msgid "Fetching UUIDs from Mojang..." msgstr "Récupération des UUID depuis Mojang..." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:352 -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:380 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:359 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:387 msgid "An error occurred while fetching the UUIDs from Mojang" msgstr "" "Une erreur est survenue lors de la récupération des UUIDs depuis Mojang." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:357 -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:385 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:364 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:392 msgid "The migration worker has been interrupted" msgstr "Le processus de migration a été interrompu." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:360 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:367 #, java-format msgid "Fetching done. {0} UUID have been retrieved." msgid_plural "Fetching done. {0} UUIDs have been retrieved." msgstr[0] "Récupération achevée. {0} UUID a été retrouvé." msgstr[1] "Récupération achevée. {0} UUIDs ont été retrouvés." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:371 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:378 #, java-format msgid "Mojang did not find UUIDs for {0} player at the current time." msgid_plural "Mojang did not find UUIDs for {0} players at the current time." msgstr[0] "Mojang n'a pas trouvé d'UUID pour {0} joueur à l'heure actuelle." msgstr[1] "Mojang n'a pas trouvé d'UUID pour {0} joueurs à l'heure actuelle." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:372 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:379 msgid "" "The Mojang servers limit requests rate at one per second, this may take some " "time..." @@ -458,65 +288,93 @@ msgstr "" "Les serveurs de Mojang limitent les requêtes à une par seconde, cette étape " "risque de durer un petit moment..." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:391 -#, java-format +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:398 msgid "Mojang did not find player data for {0} player" msgid_plural "Mojang did not find player data for {0} players" msgstr[0] "Mojang n'a pas trouvé de données pour {0} joueur." msgstr[1] "Mojang n'a pas trouvé de données pour {0} joueurs." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:393 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:400 msgid "The following players do not exist or do not have paid accounts :" msgstr "Les joueurs suivant n'existent pas ou n'ont pas de compte payant :" -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:408 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:415 msgid "Mojang could not find any of the registered players." msgstr "Mojang n'a pu trouver aucun des joueurs enregistrés." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:418 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:425 msgid "Merging map data..." msgstr "Fusion des données des cartes..." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:459 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:475 +#, java-format +msgid "{0} registered minecraft map is missing from the save." +msgid_plural "{0} registered minecraft maps are missing from the save." +msgstr[0] "" +"{0} carte Minecraft enregistrée n'a pas été retrouvée dans la sauvegarde." +msgstr[1] "" +"{0} cartes Minecraft enregistrées n'ont pas été retrouvées dans la " +"sauvegarde." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:476 +msgid "" +"These maps will not be migrated, but this could mean the save has been " +"altered or corrupted." +msgstr "" +"Ces cartes ne seront pas migrées, mais cela peut signifier que votre " +"sauvegarde a été modifiée ou corrompue." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:477 +#, java-format +msgid "The following maps are missing : {0} " +msgstr "Les cartes suivantes sont manquantes : {0} " + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:483 msgid "Saving changes..." msgstr "Sauvegarde des changements..." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:465 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:489 msgid "Cleaning up old data files..." msgstr "Nettoyage des vieux fichiers de données..." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:472 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:496 msgid "Deleting old map data file..." msgstr "Suppression du vieux fichier de données des cartes..." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:477 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:501 #, java-format msgid "{0} map could not be migrated." msgid_plural "{0} maps could not be migrated." msgstr[0] "{0} carte n'a pas pu être migrée." msgstr[1] "{0} cartes n'ont pas pu être migrées." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:495 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:519 msgid "Deleting old poster data file..." msgstr "Suppression du vieux fichier de données des posters..." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:500 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:524 #, java-format msgid "{0} poster could not be migrated." msgid_plural "{0} posters could not be migrated." msgstr[0] "{0} poster n'a pas pu être migré." msgstr[1] "{0} posters n'ont pas pu être migrés." -#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:513 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:537 msgid "Data that has not been migrated will be kept in the old data files." msgstr "" "Les données qui n'ont pas été migrées seront conservées dans les vieux " "fichiers de données." +#. The name of a map item given to a player, if splatter maps are not used. 0 = map name; 1 = index. +#: src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java:139 +#: src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java:215 +#, java-format +msgid "{0} (part {1})" +msgstr "{0} (partie {1})" + #. The name of a map item given to a player, if splatter maps are not used. 0 = map name; 1 = row; 2 = column. -#: src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java:118 -#: src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java:153 -#: src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java:194 +#: src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java:145 +#: src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java:213 #, java-format msgid "{0} (row {1}, column {2})" msgstr "{0} (ligne {1}, colonne {2})" @@ -558,3 +416,134 @@ msgstr "Cliquez accroupi l'une des cartes du poster pour le retirer d'un coup." #: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:101 msgid "{ce}There is not enough space to place this map ({0} × {1})." msgstr "{ce}Il n'y a pas assez d'espace pour accueillir ce poster ({0} × {1})." + +#~ msgid "{0} » {black}Confirm deletion" +#~ msgstr "{0} » {black}Confirmation de suppression" + +#~ msgid "{red}You're about to destroy this map..." +#~ msgstr "{red}Vous êtes sur le point de supprimer cette carte..." + +#~ msgid "{red}...{italic}forever{red}." +#~ msgstr "{red}...{italic}pour toujours{red}." + +#~ msgid "{gray}Name: {white}{0}" +#~ msgstr "{gray}Nom : {white}{0}" + +#~ msgid "{gray}Map ID: {white}{0}" +#~ msgstr "{gray}Identifiant : {white}{0}" + +#~ msgid "{gray}Maps inside: {white}{0}" +#~ msgstr "{gray}Cartes : {white}{0}" + +#~ msgid "{green}Map part" +#~ msgstr "{green}Extrait de carte" + +#~ msgid "{gray}Column: {white}{0}" +#~ msgstr "{gray}Colonne : {white}{0}" + +#~ msgid "{gray}Row: {white}{0}" +#~ msgstr "{gray}Ligne : {white}{0}" + +#~ msgid "{gray}» {white}Click{gray} to get only this part" +#~ msgstr "{gray}» {white}Cliquez{gray} pour récupérer cette partie" + +#~ msgid "Your maps » {black}{0}" +#~ msgstr "Vos cartes » {black}{0}" + +#~ msgid "{blue}Rename this image" +#~ msgstr "{blue}Renommer cette image" + +#~ msgid "" +#~ "{gray}Click here to rename this image; this is used for your own " +#~ "organization." +#~ msgstr "" +#~ "{gray}Cliquez ici pour renommer cette image ; ceci ne sert qu'à votre " +#~ "organisation personnelle." + +#~ msgid "" +#~ "{gray}Deletes this map {white}forever{gray}. This action cannot be undone!" +#~ msgstr "" +#~ "{gray}Supprime cette carte {white}pour toujours{gray}. Cette action ne " +#~ "peut être annulée !" + +#~ msgid "{gray}You will be asked to confirm your choice if you click here." +#~ msgstr "{gray}Une confirmation sera demandée si vous cliquez ici." + +#~ msgid "{green}« Back" +#~ msgstr "{green}« Retour" + +#~ msgid "{gray}Go back to the list." +#~ msgstr "{gray}Retourner à la liste." + +#~ msgid "{ce}Map names can't be empty." +#~ msgstr "{ce}Les noms de cartes ne peuvent être vide." + +#~ msgid "{cs}Map successfully renamed." +#~ msgstr "{cs}Carte renommée avec succès." + +#~ msgid "{white}Single map" +#~ msgstr "{white}Carte unique" + +#~ msgid "{white}Poster map ({0} × {1})" +#~ msgstr "{white}Poster ({0} × {1})" + +#~ msgid "{green}{bold}{0}" +#~ msgstr "{green}{bold}{0}" + +#~ msgid "{gray}Map ID: {0}" +#~ msgstr "{gray}Identifiant : {white}{0}" + +#~ msgid "{gray}» {white}Left-click{gray} to get this map" +#~ msgstr "{gray}» {white}Cliquez gauche{gray} pour récupérer cette carte" + +#~ msgid "{gray}» {white}Right-click{gray} for details and options" +#~ msgstr "{gray}» {white}Cliquez droit{gray} pour détails et options" + +#~ msgid "{red}You don't have any map." +#~ msgstr "{red}Vous n'avez aucune carte." + +#~ msgid "" +#~ "{gray}Get started by creating a new one using {white}/tomap [resize]" +#~ "{gray}!" +#~ msgstr "" +#~ "{gray}Commencez par en créer une nouvelle avec {white}/tomap " +#~ "[resize]{gray} !" + +#~ msgid "{black}Your maps {reset}({0})" +#~ msgstr "{black}Vos cartes {reset}({0})" + +#~ msgid "{blue}Usage statistics" +#~ msgstr "{blue}Statistiques d'utilisation" + +#~ msgid "{white}{0}{gray} image rendered" +#~ msgid_plural "{white}{0}{gray} images rendered" +#~ msgstr[0] "{white}{0}{gray} image rendue" +#~ msgstr[1] "{white}{0}{gray} images rendues" + +#~ msgid "{white}{0}{gray} Minecraft map used" +#~ msgid_plural "{white}{0}{gray} Minecraft maps used" +#~ msgstr[0] "{white}{0}{gray} carte Minecraft utilisée" +#~ msgstr[1] "{white}{0}{gray} cartes Minecraft utilisées" + +#~ msgid "{blue}Minecraft maps limits" +#~ msgstr "{blue}Limites de cartes Minecraft" + +#~ msgid "{gray}Server-wide limit: {white}unlimited" +#~ msgstr "{gray}Limite du serveur : {white}illimité" + +#~ msgid "{gray}Server-wide limit: {white}{0}" +#~ msgstr "{gray}Limite du serveur : {white}{0}" + +#~ msgid "{gray}Per-player limit: {white}unlimited" +#~ msgstr "{gray}Limite individuelle : {white}illimité" + +#~ msgid "{gray}Per-player limit: {white}{0}" +#~ msgstr "{gray}Limite individuelle : {white}{0}" + +#~ msgid "{white}{0} %{gray} of your quota used" +#~ msgstr "{white}{0} %{gray} de votre quota utilisé" + +#~ msgid "{white}{0}{gray} map left" +#~ msgid_plural "{white}{0}{gray} maps left" +#~ msgstr[0] "{white}{0}{gray} carte restante" +#~ msgstr[1] "{white}{0}{gray} cartes restantes" From e7fe35b94e775fc752deb0951187748ea37a3401 Mon Sep 17 00:00:00 2001 From: Adrien Prokopowicz Date: Sun, 10 Jul 2016 03:29:04 +0200 Subject: [PATCH 11/18] Added and fixed missing translations for fr_FR and en_US. --- src/main/resources/i18n/en_US.po | 589 +++++++++++++++++++++++++++++++ src/main/resources/i18n/fr_FR.po | 319 ++++++++++------- 2 files changed, 779 insertions(+), 129 deletions(-) create mode 100644 src/main/resources/i18n/en_US.po diff --git a/src/main/resources/i18n/en_US.po b/src/main/resources/i18n/en_US.po new file mode 100644 index 0000000..1cf486b --- /dev/null +++ b/src/main/resources/i18n/en_US.po @@ -0,0 +1,589 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-07-10 03:07+0200\n" +"PO-Revision-Date: 2016-07-10 03:08+0200\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: en_US\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 1.8.7.1\n" + +#: src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java:40 +msgid "You need to give a map name." +msgstr "You need to give a map name." + +#: src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java:57 +#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteNoConfirmCommand.java:51 +msgid "This map does not exist." +msgstr "This map does not exist." + +#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java:39 +msgid "You are going to delete" +msgstr "You are going to delete" + +#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java:42 +msgid "Are you sure ? " +msgstr "Are you sure ? " + +#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java:44 +msgid "[Confirm]" +msgstr "[Confirm]" + +#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java:46 +msgid "{red}This map will be deleted {bold}forever{red}!" +msgstr "{red}This map will be deleted {bold}forever{red}!" + +#: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteNoConfirmCommand.java:46 +msgid "Map successfully deleted." +msgstr "Map successfully deleted." + +#: src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java:38 +msgid "The requested map was too big to fit in your inventory." +msgstr "The requested map was too big to fit in your inventory." + +#: src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java:39 +#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:71 +msgid "Use '/maptool getremaining' to get the remaining maps." +msgstr "Use '/maptool getremaining' to get the remaining maps." + +#: src/main/java/fr/moribus/imageonmap/commands/maptool/GetRemainingCommand.java:38 +msgid "You have no remaining map." +msgstr "You have no remaining map." + +#: src/main/java/fr/moribus/imageonmap/commands/maptool/GetRemainingCommand.java:46 +msgid "" +"Your inventory is full! Make some space before requesting the remaining maps." +msgstr "" +"Your inventory is full! Make some space before requesting the remaining maps." + +#: src/main/java/fr/moribus/imageonmap/commands/maptool/GetRemainingCommand.java:50 +#, java-format +msgid "There is {0} map remaining." +msgid_plural "There are {0} maps remaining." +msgstr[0] "There is {0} map remaining." +msgstr[1] "There are {0} maps remaining." + +#: src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java:49 +msgid "No map found." +msgstr "No map found." + +#: src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java:53 +msgid "{white}{bold}{0} map found." +msgid_plural "{white}{bold}{0} maps found." +msgstr[0] "{white}{bold}{0} map found." +msgstr[1] "{white}{bold}{0} maps found." + +#: src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java:79 +msgid "{white}Click{gray} to get this map" +msgstr "{white}Click{gray} to get this map" + +#: src/main/java/fr/moribus/imageonmap/commands/maptool/MigrateCommand.java:36 +msgid "A migration process is already running. Check console for details." +msgstr "A migration process is already running. Check console for details." + +#: src/main/java/fr/moribus/imageonmap/commands/maptool/MigrateCommand.java:40 +msgid "Migration started. See console for details." +msgstr "Migration started. See console for details." + +#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:44 +msgid "You must give an URL to take the image from." +msgstr "You must give an URL to take the image from." + +#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:52 +msgid "Invalid URL." +msgstr "Invalid URL." + +#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:61 +msgid "Rendering..." +msgstr "Rendering..." + +#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:67 +msgid "{cst}Rendering finished!" +msgstr "{cst}Rendering finished!" + +#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:70 +msgid "The rendered map was too big to fit in your inventory." +msgstr "The rendered map was too big to fit in your inventory." + +#: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:78 +msgid "{ce}Map rendering failed: {0}" +msgstr "{ce}Map rendering failed: {0}" + +#. The title of the map deletion GUI. {0}: map name. +#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:102 +msgid "{0} » {black}Confirm deletion" +msgstr "{0} » {black}Confirm deletion" + +#. The title of the map deletion item +#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:110 +msgid "{red}You're about to destroy this map..." +msgstr "{red}You're about to destroy this map..." + +#. The end, in the lore, of a title starting with “You're about to destroy this map...”. +#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:112 +msgid "{red}...{italic}forever{red}." +msgstr "{red}...{italic}forever{red}." + +#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:114 +msgid "{gray}Name: {white}{0}" +msgstr "{gray}Name: {white}{0}" + +#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:115 +msgid "{gray}Map ID: {white}{0}" +msgstr "{gray}Map ID: {white}{0}" + +#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:116 +msgid "{gray}Maps inside: {white}{0}" +msgstr "{gray}Maps inside: {white}{0}" + +#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:178 +msgid "{gray}Map successfully deleted." +msgstr "{gray}Map successfully deleted." + +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:54 +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:71 +msgid "{green}Map part" +msgstr "{green}Map part" + +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:55 +msgid "{gray}Column: {white}{0}" +msgstr "{gray}Column: {white}{0}" + +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:56 +msgid "{gray}Row: {white}{0}" +msgstr "{gray}Row: {white}{0}" + +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:58 +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:74 +msgid "{gray}» {white}Click{gray} to get only this part" +msgstr "{gray}» {white}Click{gray} to get only this part" + +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:72 +msgid "{gray}Part: {white}{0}" +msgstr "{gray}Part: {white}{0}" + +#. Title of the map details GUI +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:114 +msgid "Your maps » {black}{0}" +msgstr "Your maps » {black}{0}" + +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:136 +msgid "{blue}Rename this image" +msgstr "{blue}Rename this image" + +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:137 +msgid "" +"{gray}Click here to rename this image; this is used for your own " +"organization." +msgstr "" +"{gray}Click here to rename this image; this is used for your own " +"organization." + +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:141 +msgid "{red}Delete this image" +msgstr "{red}Delete this image" + +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:142 +msgid "" +"{gray}Deletes this map {white}forever{gray}. This action cannot be undone!" +msgstr "" +"{gray}Deletes this map {white}forever{gray}. This action cannot be undone!" + +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:144 +msgid "{gray}You will be asked to confirm your choice if you click here." +msgstr "{gray}You will be asked to confirm your choice if you click here." + +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:156 +msgid "{green}« Back" +msgstr "{green}« Back" + +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:157 +msgid "{gray}Go back to the list." +msgstr "{gray}Go back to the list." + +#. Displayed subtitle description of a single map on the list GUI +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:44 +msgid "{white}Single map" +msgstr "{white}Single map" + +#. Displayed subtitle description of a poster map on the list GUI (columns × rows in english) +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:52 +msgid "{white}Poster map ({0} × {1})" +msgstr "{white}Poster map ({0} × {1})" + +#. Displayed subtitle description of a poster map without column data on the list GUI +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:57 +msgid "{white}Poster map ({0} parts)" +msgstr "{white}Poster map ({0} parts)" + +#. Displayed title of a map on the list GUI +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:62 +msgid "{green}{bold}{0}" +msgstr "{green}{bold}{0}" + +#. Map ID displayed in the tooltip of a map on the list GUI +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:67 +msgid "{gray}Map ID: {0}" +msgstr "{gray}Map ID: {0}" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:69 +msgid "{gray}» {white}Left-click{gray} to get this map" +msgstr "{gray}» {white}Left-click{gray} to get this map" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:70 +msgid "{gray}» {white}Right-click{gray} for details and options" +msgstr "{gray}» {white}Right-click{gray} for details and options" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:79 +msgid "{red}You don't have any map." +msgstr "{red}You don't have any map." + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:80 +msgid "" +"{gray}Get started by creating a new one using {white}/tomap [resize]" +"{gray}!" +msgstr "" +"{gray}Get started by creating a new one using {white}/tomap [resize]" +"{gray}!" + +#. The maps list GUI title +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:119 +msgid "{black}Your maps {reset}({0})" +msgstr "{black}Your maps {reset}({0})" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:148 +msgid "{blue}Usage statistics" +msgstr "{blue}Usage statistics" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:150 +msgid "{white}{0}{gray} image rendered" +msgid_plural "{white}{0}{gray} images rendered" +msgstr[0] "{white}{0}{gray} image rendered" +msgstr[1] "{white}{0}{gray} images rendered" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:151 +msgid "{white}{0}{gray} Minecraft map used" +msgid_plural "{white}{0}{gray} Minecraft maps used" +msgstr[0] "{white}{0}{gray} Minecraft map used" +msgstr[1] "{white}{0}{gray} Minecraft maps used" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:156 +msgid "{blue}Minecraft maps limits" +msgstr "{blue}Minecraft maps limits" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:158 +msgid "{gray}Server-wide limit: {white}unlimited" +msgstr "{gray}Server-wide limit: {white}unlimited" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:159 +msgid "{gray}Server-wide limit: {white}{0}" +msgstr "{gray}Server-wide limit: {white}{0}" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:161 +msgid "{gray}Per-player limit: {white}unlimited" +msgstr "{gray}Per-player limit: {white}unlimited" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:162 +msgid "{gray}Per-player limit: {white}{0}" +msgstr "{gray}Per-player limit: {white}{0}" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:164 +msgid "{white}{0} %{gray} of your quota used" +msgstr "{white}{0} %{gray} of your quota used" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:165 +msgid "{white}{0}{gray} map left" +msgid_plural "{white}{0}{gray} maps left" +msgstr[0] "{white}{0}{gray} map left" +msgstr[1] "{white}{0}{gray} maps left" + +#: src/main/java/fr/moribus/imageonmap/image/ImageRendererExecutor.java:73 +#, java-format +msgid "HTTP error : {0} {1}" +msgstr "HTTP error : {0} {1}" + +#: src/main/java/fr/moribus/imageonmap/image/ImageRendererExecutor.java:79 +msgid "The given URL is not a valid image" +msgstr "The given URL is not a valid image" + +#. The default display name of a map +#: src/main/java/fr/moribus/imageonmap/map/ImageMap.java:44 +msgid "Map" +msgstr "Map" + +#: src/main/java/fr/moribus/imageonmap/map/MapManagerException.java:29 +#, java-format +msgid "You have too many maps (maximum : {0})." +msgstr "You have too many maps (maximum : {0})." + +#: src/main/java/fr/moribus/imageonmap/map/MapManagerException.java:30 +msgid "The server ImageOnMap limit has been reached." +msgstr "The server ImageOnMap limit has been reached." + +#: src/main/java/fr/moribus/imageonmap/map/MapManagerException.java:31 +msgid "The given map does not exist." +msgstr "The given map does not exist." + +#: src/main/java/fr/moribus/imageonmap/migration/MigratorExecutor.java:34 +msgid "Migration is already running." +msgstr "Migration is already running." + +#: src/main/java/fr/moribus/imageonmap/migration/MigratorExecutor.java:50 +msgid "Waiting for migration to finish..." +msgstr "Waiting for migration to finish..." + +#: src/main/java/fr/moribus/imageonmap/migration/MigratorExecutor.java:58 +msgid "" +"Migration thread has been interrupted while waiting to finish. It may not " +"have ended correctly." +msgstr "" +"Migration thread has been interrupted while waiting to finish. It may not " +"have ended correctly." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:176 +msgid "Error while preparing migration" +msgstr "Error while preparing migration" + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:177 +msgid "Aborting migration. No change has been made." +msgstr "Aborting migration. No change has been made." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:189 +msgid "Error while migrating" +msgstr "Error while migrating" + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:190 +msgid "Aborting migration. Some changes may already have been made." +msgstr "Aborting migration. Some changes may already have been made." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:191 +msgid "" +"Before trying to migrate again, you must recover player files from the " +"backups, and then move the backups away from the plugin directory to avoid " +"overwriting them." +msgstr "" +"Before trying to migrate again, you must recover player files from the " +"backups, and then move the backups away from the plugin directory to avoid " +"overwriting them." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:203 +msgid "Looking for configuration files to migrate..." +msgstr "Looking for configuration files to migrate..." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:206 +#, java-format +msgid "Detected former posters file {0}" +msgstr "Detected former posters file {0}" + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:209 +#, java-format +msgid "Detected former maps file {0}" +msgstr "Detected former maps file {0}" + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:213 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:416 +msgid "There is nothing to migrate. Stopping." +msgstr "There is nothing to migrate. Stopping." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:218 +msgid "Done." +msgstr "Done." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:232 +msgid "Backup directories already exists." +msgstr "Backup directories already exists." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:233 +msgid "" +"This means that a migration has already been done, or may not have ended " +"well." +msgstr "" +"This means that a migration has already been done, or may not have ended " +"well." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:234 +msgid "" +"To start a new migration, you must move away the backup directories so they " +"are not overwritten." +msgstr "" +"To start a new migration, you must move away the backup directories so they " +"are not overwritten." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:247 +msgid "Backing up map data before migrating..." +msgstr "Backing up map data before migrating..." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:271 +msgid "Backup complete." +msgstr "Backup complete." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:352 +msgid "Fetching UUIDs from Mojang..." +msgstr "Fetching UUIDs from Mojang..." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:359 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:387 +msgid "An error occurred while fetching the UUIDs from Mojang" +msgstr "An error occurred while fetching the UUIDs from Mojang" + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:364 +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:392 +msgid "The migration worker has been interrupted" +msgstr "The migration worker has been interrupted" + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:367 +#, java-format +msgid "Fetching done. {0} UUID have been retrieved." +msgid_plural "Fetching done. {0} UUIDs have been retrieved." +msgstr[0] "Fetching done. {0} UUID have been retrieved." +msgstr[1] "Fetching done. {0} UUIDs have been retrieved." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:378 +#, java-format +msgid "Mojang did not find UUIDs for {0} player at the current time." +msgid_plural "Mojang did not find UUIDs for {0} players at the current time." +msgstr[0] "Mojang did not find UUIDs for {0} player at the current time." +msgstr[1] "Mojang did not find UUIDs for {0} players at the current time." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:379 +msgid "" +"The Mojang servers limit requests rate at one per second, this may take some " +"time..." +msgstr "" +"The Mojang servers limit requests rate at one per second, this may take some " +"time..." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:398 +#, java-format +msgid "Mojang did not find player data for {0} player" +msgid_plural "Mojang did not find player data for {0} players" +msgstr[0] "Mojang did not find player data for {0} player" +msgstr[1] "Mojang did not find player data for {0} players" + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:400 +msgid "The following players do not exist or do not have paid accounts :" +msgstr "The following players do not exist or do not have paid accounts :" + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:415 +msgid "Mojang could not find any of the registered players." +msgstr "Mojang could not find any of the registered players." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:425 +msgid "Merging map data..." +msgstr "Merging map data..." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:475 +#, java-format +msgid "{0} registered minecraft map is missing from the save." +msgid_plural "{0} registered minecraft maps are missing from the save." +msgstr[0] "{0} registered minecraft map is missing from the save." +msgstr[1] "{0} registered minecraft maps are missing from the save." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:476 +msgid "" +"These maps will not be migrated, but this could mean the save has been " +"altered or corrupted." +msgstr "" +"These maps will not be migrated, but this could mean the save has been " +"altered or corrupted." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:477 +#, java-format +msgid "The following maps are missing : {0} " +msgstr "The following maps are missing : {0} " + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:483 +msgid "Saving changes..." +msgstr "Saving changes..." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:489 +msgid "Cleaning up old data files..." +msgstr "Cleaning up old data files..." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:496 +msgid "Deleting old map data file..." +msgstr "Deleting old map data file..." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:501 +#, java-format +msgid "{0} map could not be migrated." +msgid_plural "{0} maps could not be migrated." +msgstr[0] "{0} map could not be migrated." +msgstr[1] "{0} maps could not be migrated." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:519 +msgid "Deleting old poster data file..." +msgstr "Deleting old poster data file..." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:524 +#, java-format +msgid "{0} poster could not be migrated." +msgid_plural "{0} posters could not be migrated." +msgstr[0] "{0} poster could not be migrated." +msgstr[1] "{0} posters could not be migrated." + +#: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:537 +msgid "Data that has not been migrated will be kept in the old data files." +msgstr "Data that has not been migrated will be kept in the old data files." + +#. The name of a map item given to a player, if splatter maps are not used. 0 = map name; 1 = index. +#: src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java:139 +#: src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java:215 +#, java-format +msgid "{0} (part {1})" +msgstr "{0} (part {1})" + +#. The name of a map item given to a player, if splatter maps are not used. 0 = map name; 1 = row; 2 = column. +#: src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java:145 +#: src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java:213 +#, java-format +msgid "{0} (row {1}, column {2})" +msgstr "{0} (row {1}, column {2})" + +#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:44 +msgid "Splatter Map" +msgstr "Splatter Map" + +#. Title in a splatter map tooltip +#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:48 +msgid "Item frames needed" +msgstr "Item frames needed" + +#. Size of a map stored in a splatter map +#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:50 +#, java-format +msgid "{0} × {1}" +msgstr "{0} × {1}" + +#. Title in a splatter map tooltip +#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:53 +msgid "How to use this?" +msgstr "How to use this?" + +#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:54 +msgid "" +"Place empty item frames on a wall, enough to host the whole map. Then, right-" +"click on the bottom-left frame with this map." +msgstr "" +"Place empty item frames on a wall, enough to host the whole map. Then, right-" +"click on the bottom-left frame with this map." + +#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:56 +msgid "" +"Shift-click one of the placed maps to remove the whole poster in one shot." +msgstr "" +"Shift-click one of the placed maps to remove the whole poster in one shot." + +#: src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java:101 +msgid "{ce}There is not enough space to place this map ({0} × {1})." +msgstr "{ce}There is not enough space to place this map ({0} × {1})." diff --git a/src/main/resources/i18n/fr_FR.po b/src/main/resources/i18n/fr_FR.po index 3f93000..6fbf437 100644 --- a/src/main/resources/i18n/fr_FR.po +++ b/src/main/resources/i18n/fr_FR.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-09 02:10+0200\n" -"PO-Revision-Date: 2016-07-09 02:43+0200\n" +"POT-Creation-Date: 2016-07-10 00:59+0200\n" +"PO-Revision-Date: 2016-07-10 01:01+0200\n" "Last-Translator: Amaury Carrade\n" "Language-Team: \n" "Language: fr_FR\n" @@ -124,10 +124,195 @@ msgstr "" msgid "{ce}Map rendering failed: {0}" msgstr "{ce}Impossible de faire le rendu de la carte : {0}" +#. The title of the map deletion GUI. {0}: map name. +#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:102 +msgid "{0} » {black}Confirm deletion" +msgstr "{0} » {black}Confirmation de suppression" + +#. The title of the map deletion item +#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:110 +msgid "{red}You're about to destroy this map..." +msgstr "{red}Vous êtes sur le point de supprimer cette carte..." + +#. The end, in the lore, of a title starting with “You're about to destroy this map...”. +#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:112 +msgid "{red}...{italic}forever{red}." +msgstr "{red}...{italic}pour toujours{red}." + +#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:114 +msgid "{gray}Name: {white}{0}" +msgstr "{gray}Nom : {white}{0}" + +#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:115 +msgid "{gray}Map ID: {white}{0}" +msgstr "{gray}Identifiant : {white}{0}" + +#: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:116 +msgid "{gray}Maps inside: {white}{0}" +msgstr "{gray}Cartes : {white}{0}" + #: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:178 msgid "{gray}Map successfully deleted." msgstr "{gray}Carte supprimée avec succès." +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:54 +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:71 +msgid "{green}Map part" +msgstr "{green}Extrait de carte" + +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:55 +msgid "{gray}Column: {white}{0}" +msgstr "{gray}Colonne : {white}{0}" + +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:56 +msgid "{gray}Row: {white}{0}" +msgstr "{gray}Ligne : {white}{0}" + +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:58 +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:74 +msgid "{gray}» {white}Click{gray} to get only this part" +msgstr "{gray}» {white}Cliquez{gray} pour récupérer cette partie" + +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:72 +msgid "{gray}Part: {white}{0}" +msgstr "{gray}Partie: {white}{0}" + +#. Title of the map details GUI +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:114 +msgid "Your maps » {black}{0}" +msgstr "Vos cartes » {black}{0}" + +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:136 +msgid "{blue}Rename this image" +msgstr "{blue}Renommer cette image" + +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:137 +msgid "" +"{gray}Click here to rename this image; this is used for your own " +"organization." +msgstr "" +"{gray}Cliquez ici pour renommer cette image ; ceci ne sert qu'à votre " +"organisation personnelle." + +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:141 +msgid "{red}Delete this image" +msgstr "{red}Supprimer cette carte" + +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:142 +msgid "" +"{gray}Deletes this map {white}forever{gray}. This action cannot be undone!" +msgstr "" +"{gray}Supprime cette carte {white}pour toujours{gray}. Cette action ne peut " +"être annulée !" + +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:144 +msgid "{gray}You will be asked to confirm your choice if you click here." +msgstr "{gray}Une confirmation sera demandée si vous cliquez ici." + +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:156 +msgid "{green}« Back" +msgstr "{green}« Retour" + +#: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:157 +msgid "{gray}Go back to the list." +msgstr "{gray}Retourner à la liste." + +#. Displayed subtitle description of a single map on the list GUI +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:44 +msgid "{white}Single map" +msgstr "{white}Carte unique" + +#. Displayed subtitle description of a poster map on the list GUI (columns × rows in english) +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:52 +msgid "{white}Poster map ({0} × {1})" +msgstr "{white}Poster ({0} × {1})" + +#. Displayed subtitle description of a poster map without column data on the list GUI +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:57 +msgid "{white}Poster map ({0} parts)" +msgstr "{white}Poster ({0} parties)" + +#. Displayed title of a map on the list GUI +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:62 +msgid "{green}{bold}{0}" +msgstr "{green}{bold}{0}" + +#. Map ID displayed in the tooltip of a map on the list GUI +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:67 +msgid "{gray}Map ID: {0}" +msgstr "{gray}Identifiant : {white}{0}" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:69 +msgid "{gray}» {white}Left-click{gray} to get this map" +msgstr "{gray}» {white}Cliquez gauche{gray} pour récupérer cette carte" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:70 +msgid "{gray}» {white}Right-click{gray} for details and options" +msgstr "{gray}» {white}Cliquez droit{gray} pour détails et options" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:79 +msgid "{red}You don't have any map." +msgstr "{red}Vous n'avez aucune carte." + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:80 +msgid "" +"{gray}Get started by creating a new one using {white}/tomap [resize]" +"{gray}!" +msgstr "" +"{gray}Commencez par en créer une nouvelle avec {white}/tomap [resize]" +"{gray} !" + +#. The maps list GUI title +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:119 +msgid "{black}Your maps {reset}({0})" +msgstr "{black}Vos cartes {reset}({0})" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:148 +msgid "{blue}Usage statistics" +msgstr "{blue}Statistiques d'utilisation" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:150 +msgid "{white}{0}{gray} image rendered" +msgid_plural "{white}{0}{gray} images rendered" +msgstr[0] "{white}{0}{gray} image rendue" +msgstr[1] "{white}{0}{gray} images rendues" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:151 +msgid "{white}{0}{gray} Minecraft map used" +msgid_plural "{white}{0}{gray} Minecraft maps used" +msgstr[0] "{white}{0}{gray} carte Minecraft utilisée" +msgstr[1] "{white}{0}{gray} cartes Minecraft utilisées" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:156 +msgid "{blue}Minecraft maps limits" +msgstr "{blue}Limites de cartes Minecraft" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:158 +msgid "{gray}Server-wide limit: {white}unlimited" +msgstr "{gray}Limite du serveur : {white}illimité" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:159 +msgid "{gray}Server-wide limit: {white}{0}" +msgstr "{gray}Limite du serveur : {white}{0}" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:161 +msgid "{gray}Per-player limit: {white}unlimited" +msgstr "{gray}Limite individuelle : {white}illimité" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:162 +msgid "{gray}Per-player limit: {white}{0}" +msgstr "{gray}Limite individuelle : {white}{0}" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:164 +msgid "{white}{0} %{gray} of your quota used" +msgstr "{white}{0} %{gray} de votre quota utilisé" + +#: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:165 +msgid "{white}{0}{gray} map left" +msgid_plural "{white}{0}{gray} maps left" +msgstr[0] "{white}{0}{gray} carte restante" +msgstr[1] "{white}{0}{gray} cartes restantes" + #: src/main/java/fr/moribus/imageonmap/image/ImageRendererExecutor.java:73 #, java-format msgid "HTTP error : {0} {1}" @@ -289,10 +474,11 @@ msgstr "" "risque de durer un petit moment..." #: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:398 +#, java-format msgid "Mojang did not find player data for {0} player" msgid_plural "Mojang did not find player data for {0} players" -msgstr[0] "Mojang n'a pas trouvé de données pour {0} joueur." -msgstr[1] "Mojang n'a pas trouvé de données pour {0} joueurs." +msgstr[0] "Mojang did not find player data for {0} player" +msgstr[1] "Mojang did not find player data for {0} players" #: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:400 msgid "The following players do not exist or do not have paid accounts :" @@ -417,133 +603,8 @@ msgstr "Cliquez accroupi l'une des cartes du poster pour le retirer d'un coup." msgid "{ce}There is not enough space to place this map ({0} × {1})." msgstr "{ce}Il n'y a pas assez d'espace pour accueillir ce poster ({0} × {1})." -#~ msgid "{0} » {black}Confirm deletion" -#~ msgstr "{0} » {black}Confirmation de suppression" - -#~ msgid "{red}You're about to destroy this map..." -#~ msgstr "{red}Vous êtes sur le point de supprimer cette carte..." - -#~ msgid "{red}...{italic}forever{red}." -#~ msgstr "{red}...{italic}pour toujours{red}." - -#~ msgid "{gray}Name: {white}{0}" -#~ msgstr "{gray}Nom : {white}{0}" - -#~ msgid "{gray}Map ID: {white}{0}" -#~ msgstr "{gray}Identifiant : {white}{0}" - -#~ msgid "{gray}Maps inside: {white}{0}" -#~ msgstr "{gray}Cartes : {white}{0}" - -#~ msgid "{green}Map part" -#~ msgstr "{green}Extrait de carte" - -#~ msgid "{gray}Column: {white}{0}" -#~ msgstr "{gray}Colonne : {white}{0}" - -#~ msgid "{gray}Row: {white}{0}" -#~ msgstr "{gray}Ligne : {white}{0}" - -#~ msgid "{gray}» {white}Click{gray} to get only this part" -#~ msgstr "{gray}» {white}Cliquez{gray} pour récupérer cette partie" - -#~ msgid "Your maps » {black}{0}" -#~ msgstr "Vos cartes » {black}{0}" - -#~ msgid "{blue}Rename this image" -#~ msgstr "{blue}Renommer cette image" - -#~ msgid "" -#~ "{gray}Click here to rename this image; this is used for your own " -#~ "organization." -#~ msgstr "" -#~ "{gray}Cliquez ici pour renommer cette image ; ceci ne sert qu'à votre " -#~ "organisation personnelle." - -#~ msgid "" -#~ "{gray}Deletes this map {white}forever{gray}. This action cannot be undone!" -#~ msgstr "" -#~ "{gray}Supprime cette carte {white}pour toujours{gray}. Cette action ne " -#~ "peut être annulée !" - -#~ msgid "{gray}You will be asked to confirm your choice if you click here." -#~ msgstr "{gray}Une confirmation sera demandée si vous cliquez ici." - -#~ msgid "{green}« Back" -#~ msgstr "{green}« Retour" - -#~ msgid "{gray}Go back to the list." -#~ msgstr "{gray}Retourner à la liste." - #~ msgid "{ce}Map names can't be empty." #~ msgstr "{ce}Les noms de cartes ne peuvent être vide." #~ msgid "{cs}Map successfully renamed." #~ msgstr "{cs}Carte renommée avec succès." - -#~ msgid "{white}Single map" -#~ msgstr "{white}Carte unique" - -#~ msgid "{white}Poster map ({0} × {1})" -#~ msgstr "{white}Poster ({0} × {1})" - -#~ msgid "{green}{bold}{0}" -#~ msgstr "{green}{bold}{0}" - -#~ msgid "{gray}Map ID: {0}" -#~ msgstr "{gray}Identifiant : {white}{0}" - -#~ msgid "{gray}» {white}Left-click{gray} to get this map" -#~ msgstr "{gray}» {white}Cliquez gauche{gray} pour récupérer cette carte" - -#~ msgid "{gray}» {white}Right-click{gray} for details and options" -#~ msgstr "{gray}» {white}Cliquez droit{gray} pour détails et options" - -#~ msgid "{red}You don't have any map." -#~ msgstr "{red}Vous n'avez aucune carte." - -#~ msgid "" -#~ "{gray}Get started by creating a new one using {white}/tomap [resize]" -#~ "{gray}!" -#~ msgstr "" -#~ "{gray}Commencez par en créer une nouvelle avec {white}/tomap " -#~ "[resize]{gray} !" - -#~ msgid "{black}Your maps {reset}({0})" -#~ msgstr "{black}Vos cartes {reset}({0})" - -#~ msgid "{blue}Usage statistics" -#~ msgstr "{blue}Statistiques d'utilisation" - -#~ msgid "{white}{0}{gray} image rendered" -#~ msgid_plural "{white}{0}{gray} images rendered" -#~ msgstr[0] "{white}{0}{gray} image rendue" -#~ msgstr[1] "{white}{0}{gray} images rendues" - -#~ msgid "{white}{0}{gray} Minecraft map used" -#~ msgid_plural "{white}{0}{gray} Minecraft maps used" -#~ msgstr[0] "{white}{0}{gray} carte Minecraft utilisée" -#~ msgstr[1] "{white}{0}{gray} cartes Minecraft utilisées" - -#~ msgid "{blue}Minecraft maps limits" -#~ msgstr "{blue}Limites de cartes Minecraft" - -#~ msgid "{gray}Server-wide limit: {white}unlimited" -#~ msgstr "{gray}Limite du serveur : {white}illimité" - -#~ msgid "{gray}Server-wide limit: {white}{0}" -#~ msgstr "{gray}Limite du serveur : {white}{0}" - -#~ msgid "{gray}Per-player limit: {white}unlimited" -#~ msgstr "{gray}Limite individuelle : {white}illimité" - -#~ msgid "{gray}Per-player limit: {white}{0}" -#~ msgstr "{gray}Limite individuelle : {white}{0}" - -#~ msgid "{white}{0} %{gray} of your quota used" -#~ msgstr "{white}{0} %{gray} de votre quota utilisé" - -#~ msgid "{white}{0}{gray} map left" -#~ msgid_plural "{white}{0}{gray} maps left" -#~ msgstr[0] "{white}{0}{gray} carte restante" -#~ msgstr[1] "{white}{0}{gray} cartes restantes" From 02bf05823f0edb2eaf780ede0c7073e740ead2e7 Mon Sep 17 00:00:00 2001 From: Adrien Prokopowicz Date: Sun, 10 Jul 2016 15:39:21 +0200 Subject: [PATCH 12/18] * BUG: Fix the plural script for the en_US locale. --- src/main/resources/i18n/en_US.po | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/i18n/en_US.po b/src/main/resources/i18n/en_US.po index 1cf486b..3a09331 100644 --- a/src/main/resources/i18n/en_US.po +++ b/src/main/resources/i18n/en_US.po @@ -9,13 +9,13 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-07-10 03:07+0200\n" "PO-Revision-Date: 2016-07-10 03:08+0200\n" -"Last-Translator: \n" +"Last-Translator: Adrien Prokopowicz\n" "Language-Team: \n" "Language: en_US\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=2; plural=(n < 1 || n > 1);\n" "X-Generator: Poedit 1.8.7.1\n" #: src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java:40 From 5027f5bf71c4498299651be9d5c71461dbb95120 Mon Sep 17 00:00:00 2001 From: Adrien Prokopowicz Date: Sun, 10 Jul 2016 16:13:09 +0200 Subject: [PATCH 13/18] * BUG: Fix splatter maps not initializing their maps properly. --- .../fr/moribus/imageonmap/image/MapInitEvent.java | 14 ++++++++++---- .../moribus/imageonmap/ui/SplatterMapManager.java | 5 ++++- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/image/MapInitEvent.java b/src/main/java/fr/moribus/imageonmap/image/MapInitEvent.java index 556c8f7..ca8e078 100644 --- a/src/main/java/fr/moribus/imageonmap/image/MapInitEvent.java +++ b/src/main/java/fr/moribus/imageonmap/image/MapInitEvent.java @@ -28,8 +28,10 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.ItemFrame; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerItemHeldEvent; import org.bukkit.event.player.PlayerPickupItemEvent; import org.bukkit.event.world.ChunkLoadEvent; @@ -95,16 +97,20 @@ public class MapInitEvent implements Listener } } - static protected void initMap(ItemStack item) + static public void initMap(ItemStack item) { if (item != null && item.getType() == Material.MAP) { - MapView map = Bukkit.getMap(item.getDurability()); - initMap(map); + initMap(item.getDurability()); } } - static protected void initMap(MapView map) + static public void initMap(short id) + { + initMap(Bukkit.getMap(id)); + } + + static public void initMap(MapView map) { if(map == null) return; if(Renderer.isHandled(map)) return; diff --git a/src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java b/src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java index 9f70cdc..ba7b930 100644 --- a/src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java +++ b/src/main/java/fr/moribus/imageonmap/ui/SplatterMapManager.java @@ -18,6 +18,7 @@ package fr.moribus.imageonmap.ui; +import fr.moribus.imageonmap.image.MapInitEvent; import fr.moribus.imageonmap.map.ImageMap; import fr.moribus.imageonmap.map.MapManager; import fr.moribus.imageonmap.map.PosterMap; @@ -105,7 +106,9 @@ abstract public class SplatterMapManager int i = 0; for(ItemFrame frame : wall.frames) { - frame.setItem(new ItemStack(Material.MAP, 1, poster.getMapIdAtReverseY(i))); + short id = poster.getMapIdAtReverseY(i); + frame.setItem(new ItemStack(Material.MAP, 1, id)); + MapInitEvent.initMap(id); ++i; } From d9bd6ff867dadc459ce0ea0233779ef19f45efba Mon Sep 17 00:00:00 2001 From: Adrien Prokopowicz Date: Sun, 10 Jul 2016 17:16:04 +0200 Subject: [PATCH 14/18] * BUG: Fix the metadata of item map parts. --- .../moribus/imageonmap/gui/MapDetailGui.java | 4 +-- .../fr/moribus/imageonmap/map/PosterMap.java | 4 +-- .../moribus/imageonmap/ui/MapItemManager.java | 26 ++++++++++++++----- .../fr/moribus/imageonmap/ui/PosterWall.java | 2 +- 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java b/src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java index 7ce724c..c2f7f29 100644 --- a/src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java +++ b/src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java @@ -52,8 +52,8 @@ public class MapDetailGui extends ExplorerGui return new ItemStackBuilder(partMaterial) .title(I.t(getPlayerLocale(), "{green}Map part")) - .lore(I.t(getPlayerLocale(), "{gray}Column: {white}{0}", y + 1)) - .lore(I.t(getPlayerLocale(), "{gray}Row: {white}{0}", x + 1)) + .lore(I.t(getPlayerLocale(), "{gray}Row: {white}{0}", y + 1)) + .lore(I.t(getPlayerLocale(), "{gray}Column: {white}{0}", x + 1)) .loreLine() .lore(I.t(getPlayerLocale(), "{gray}» {white}Click{gray} to get only this part")) .item(); diff --git a/src/main/java/fr/moribus/imageonmap/map/PosterMap.java b/src/main/java/fr/moribus/imageonmap/map/PosterMap.java index 525eaf2..37199ef 100644 --- a/src/main/java/fr/moribus/imageonmap/map/PosterMap.java +++ b/src/main/java/fr/moribus/imageonmap/map/PosterMap.java @@ -108,13 +108,13 @@ public class PosterMap extends ImageMap public int getColumnAt(int i) { if(columnCount == 0) return 0; - return (i % columnCount) + 1; + return (i % columnCount); } public int getRowAt(int i) { if(columnCount == 0) return 0; - return (i / columnCount) + 1; + return (i / columnCount); } public int getIndexAt(int col, int row) diff --git a/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java b/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java index c6c55c1..6f9309b 100644 --- a/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java +++ b/src/main/java/fr/moribus/imageonmap/ui/MapItemManager.java @@ -87,7 +87,7 @@ public class MapItemManager implements Listener { if(map.hasColumnData()) { - mapPartItem = createMapItem(map, map.getRowAt(i), map.getColumnAt(i)); + mapPartItem = createMapItem(map, map.getColumnAt(i), map.getRowAt(i)); } else { @@ -136,13 +136,23 @@ public class MapItemManager implements Listener static public ItemStack createMapItem(PosterMap map, int index) { /// The name of a map item given to a player, if splatter maps are not used. 0 = map name; 1 = index. - return createMapItem(map.getMapIdAt(index), I.t("{0} (part {1})", map.getName(), index + 1)); + return createMapItem(map.getMapIdAt(index), getMapTitle(map, index)); } static public ItemStack createMapItem(PosterMap map, int x, int y) { /// The name of a map item given to a player, if splatter maps are not used. 0 = map name; 1 = row; 2 = column. - return createMapItem(map.getMapIdAt(x, y), I.t("{0} (row {1}, column {2})", map.getName(), x + 1, y + 1)); + return createMapItem(map.getMapIdAt(x, y), getMapTitle(map, y, x)); + } + + static public String getMapTitle(PosterMap map, int row, int column) + { + return I.t("{0} (row {1}, column {2})", map.getName(), row + 1, column + 1); + } + + static public String getMapTitle(PosterMap map, int index) + { + return I.t("{0} (part {1})", map.getName(), index + 1); } static public ItemStack createMapItem(short mapID, String text) @@ -210,9 +220,9 @@ public class MapItemManager implements Listener PosterMap poster = (PosterMap) map; int index = poster.getIndex(item.getDurability()); if(poster.hasColumnData()) - return I.t("{0} (row {1}, column {2})", map.getName(), poster.getRowAt(index), poster.getColumnAt(index)); + return getMapTitle(poster, poster.getRowAt(index), poster.getColumnAt(index)); - return I.t("{0} (part {1})", map.getName(), index + 1); + return getMapTitle(poster, index); } } @@ -256,7 +266,11 @@ public class MapItemManager implements Listener } if(!MapManager.managesMap(frame.getItem())) return; - frame.setItem(ItemUtils.setDisplayName(item, getMapTitle(item))); + + frame.setItem(new ItemStackBuilder(item) + .title(getMapTitle(item)) + .hideAttributes() + .item()); } diff --git a/src/main/java/fr/moribus/imageonmap/ui/PosterWall.java b/src/main/java/fr/moribus/imageonmap/ui/PosterWall.java index 7c7a429..8db4630 100644 --- a/src/main/java/fr/moribus/imageonmap/ui/PosterWall.java +++ b/src/main/java/fr/moribus/imageonmap/ui/PosterWall.java @@ -75,7 +75,7 @@ public class PosterWall int mapIndex = map.getIndex(mapId); int x = map.getColumnAt(mapIndex), y = map.getRowAt(mapIndex); - return getMatchingMapFrames(map, location.clone().add(-x + 1, y - 1)); + return getMatchingMapFrames(map, location.clone().add(-x, y)); } static public ItemFrame[] getMatchingMapFrames(PosterMap map, FlatLocation location) From cea9c1ad4b5f2f456d870d22166bcec18733d723 Mon Sep 17 00:00:00 2001 From: Adrien Prokopowicz Date: Mon, 18 Jul 2016 19:00:43 +0200 Subject: [PATCH 15/18] Version 3.0 ! --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5794457..f013a4c 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 fr.moribus ImageOnMap - 2.99 + 3.0 jar From 99fe014708dc7d70bb6d044e7ea6726f9ee6f864 Mon Sep 17 00:00:00 2001 From: Adrien Prokopowicz Date: Tue, 19 Jul 2016 00:37:43 +0200 Subject: [PATCH 16/18] Added a new icon for ImageOnMap --- icon.png | Bin 0 -> 16585 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 icon.png diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1ba7aad93c339cb9944983e5a74c58d2a9c642cf GIT binary patch literal 16585 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 literal 0 HcmV?d00001 From 67847ea6f4601ef428d4f5318849e199922811f2 Mon Sep 17 00:00:00 2001 From: Adrien Prokopowicz Date: Tue, 19 Jul 2016 16:02:22 +0200 Subject: [PATCH 17/18] * BUG: Fix the plugin's version number. --- src/main/resources/plugin.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index f96bc59..a1acf4b 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,6 +1,6 @@ name: ImageOnMap main: fr.moribus.imageonmap.ImageOnMap -version: 2.99 +version: 3.0 commands: tomap: From 255eb5b4cd5e96c0f0ecd3d0bb26e801290ea6f7 Mon Sep 17 00:00:00 2001 From: Adrien Prokopowicz Date: Tue, 19 Jul 2016 16:15:42 +0200 Subject: [PATCH 18/18] * NEW: Some minor fixes and changes to the french translation. --- src/main/resources/i18n/fr_FR.po | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/main/resources/i18n/fr_FR.po b/src/main/resources/i18n/fr_FR.po index 6fbf437..e3b7909 100644 --- a/src/main/resources/i18n/fr_FR.po +++ b/src/main/resources/i18n/fr_FR.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-07-10 00:59+0200\n" -"PO-Revision-Date: 2016-07-10 01:01+0200\n" +"PO-Revision-Date: 2016-07-19 16:15+0200\n" "Last-Translator: Amaury Carrade\n" "Language-Team: \n" "Language: fr_FR\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 1.8.7.1\n" +"X-Generator: Poedit 1.8.8\n" #: src/main/java/fr/moribus/imageonmap/commands/IoMCommand.java:40 msgid "You need to give a map name." @@ -33,7 +33,7 @@ msgstr "Vous êtes sur le point de supprimer" #: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java:42 msgid "Are you sure ? " -msgstr "Êtes-vous sûr ?" +msgstr "Êtes-vous sûr(e) ?" #: src/main/java/fr/moribus/imageonmap/commands/maptool/DeleteConfirmCommand.java:44 msgid "[Confirm]" @@ -50,7 +50,7 @@ msgstr "Carte supprimée avec succès." #: src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java:38 msgid "The requested map was too big to fit in your inventory." msgstr "" -"La carte demandée est trop grosse et ne rentre pas dans votre inventaire." +"La carte demandée est trop grande et ne rentre pas dans votre inventaire." #: src/main/java/fr/moribus/imageonmap/commands/maptool/GetCommand.java:39 #: src/main/java/fr/moribus/imageonmap/commands/maptool/NewCommand.java:71 @@ -77,13 +77,13 @@ msgstr[1] "Il y a {0} cartes restantes." #: src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java:49 msgid "No map found." -msgstr "Aucune carte." +msgstr "Aucune carte trouvée." #: src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java:53 msgid "{white}{bold}{0} map found." msgid_plural "{white}{bold}{0} maps found." -msgstr[0] "{white}{bold}{0} carte." -msgstr[1] "{white}{bold}{0} cartes." +msgstr[0] "{white}{bold}{0} carte trouvée." +msgstr[1] "{white}{bold}{0} cartes trouvées." #: src/main/java/fr/moribus/imageonmap/commands/maptool/ListCommand.java:79 msgid "{white}Click{gray} to get this map" @@ -127,7 +127,7 @@ msgstr "{ce}Impossible de faire le rendu de la carte : {0}" #. The title of the map deletion GUI. {0}: map name. #: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:102 msgid "{0} » {black}Confirm deletion" -msgstr "{0} » {black}Confirmation de suppression" +msgstr "{0} » {black}Confirmez la suppression" #. The title of the map deletion item #: src/main/java/fr/moribus/imageonmap/gui/ConfirmDeleteMapGui.java:110 @@ -175,7 +175,7 @@ msgstr "{gray}» {white}Cliquez{gray} pour récupérer cette partie" #: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:72 msgid "{gray}Part: {white}{0}" -msgstr "{gray}Partie: {white}{0}" +msgstr "{gray}Partie : {white}{0}" #. Title of the map details GUI #: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:114 @@ -207,7 +207,7 @@ msgstr "" #: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:144 msgid "{gray}You will be asked to confirm your choice if you click here." -msgstr "{gray}Une confirmation sera demandée si vous cliquez ici." +msgstr "{gray}Une confirmation vous sera demandée si vous cliquez ici." #: src/main/java/fr/moribus/imageonmap/gui/MapDetailGui.java:156 msgid "{green}« Back" @@ -248,7 +248,7 @@ msgstr "{gray}» {white}Cliquez gauche{gray} pour récupérer cette carte" #: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:70 msgid "{gray}» {white}Right-click{gray} for details and options" -msgstr "{gray}» {white}Cliquez droit{gray} pour détails et options" +msgstr "{gray}» {white}Cliquez droit{gray} pour des détails et options" #: src/main/java/fr/moribus/imageonmap/gui/MapListGui.java:79 msgid "{red}You don't have any map." @@ -353,8 +353,8 @@ msgid "" "Migration thread has been interrupted while waiting to finish. It may not " "have ended correctly." msgstr "" -"Le thread a été interrompu durant l'attente de la fin de la migration. Cette " -"dernière pourrait s'être achevée anormalement." +"Le fil d'exécution (thread) a été interrompu durant l'attente de la fin de " +"la migration. Cette dernière pourrait ne pas s'être terminée correctement." #: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:176 msgid "Error while preparing migration" @@ -381,7 +381,7 @@ msgid "" "overwriting them." msgstr "" "Avant de re-tenter la migration, vous devez récupérer les fichiers des " -"joueurs depuis la sauvegarde qu'a été effectuée automatiquement, puis " +"joueurs depuis la sauvegarde qui a été effectuée automatiquement, puis " "déplacer les sauvegardes hors du dossier du plugin afin d'éviter de les " "écraser." @@ -402,7 +402,7 @@ msgstr "Vieux fichier de carte détecté : {0}" #: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:213 #: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:416 msgid "There is nothing to migrate. Stopping." -msgstr "Il n'y a rien à migrer. Le processus est arrêté." +msgstr "Il n'y a rien à migrer. Arrêt." #: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:218 msgid "Done." @@ -482,7 +482,7 @@ msgstr[1] "Mojang did not find player data for {0} players" #: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:400 msgid "The following players do not exist or do not have paid accounts :" -msgstr "Les joueurs suivant n'existent pas ou n'ont pas de compte payant :" +msgstr "Les joueurs suivants n'existent pas ou n'ont pas de compte payant :" #: src/main/java/fr/moribus/imageonmap/migration/V3Migrator.java:415 msgid "Mojang could not find any of the registered players."