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"