diff --git a/src/main/java/fr/moribus/imageonmap/image/ImageRendererExecutor.java b/src/main/java/fr/moribus/imageonmap/image/ImageRendererExecutor.java index 3fe780b..8a5fec9 100644 --- a/src/main/java/fr/moribus/imageonmap/image/ImageRendererExecutor.java +++ b/src/main/java/fr/moribus/imageonmap/image/ImageRendererExecutor.java @@ -86,31 +86,32 @@ public class ImageRendererExecutor extends Worker static private ImageMap RenderSingle(final BufferedImage image, final UUID playerUUID) throws Throwable { - final short mapID = instance.submitToMainThread(new Callable() + Future futureMapID = instance.submitToMainThread(new Callable() { @Override public Short call() throws Exception { return MapManager.getNewMapsIds(1)[0]; } - }).get(); + }); final BufferedImage finalImage = ResizeImage(image, ImageMap.WIDTH, ImageMap.HEIGHT); + final short mapID = futureMapID.get(); ImageIOExecutor.saveImage(mapID, finalImage); - final ImageMap newMap = instance.submitToMainThread(new Callable() + instance.submitToMainThread(new Callable() { @Override - public ImageMap call() throws Exception + public Void call() throws Exception { Renderer.installRenderer(finalImage, mapID); - return MapManager.createMap(playerUUID, mapID); + return null; } - }).get(); + }); - return newMap; + return MapManager.createMap(playerUUID, mapID); } static private ImageMap RenderPoster(final BufferedImage image, final UUID playerUUID) throws Throwable @@ -133,18 +134,18 @@ public class ImageRendererExecutor extends Worker ImageIOExecutor.saveImage(mapsIDs, poster); - final ImageMap newMap = instance.submitToMainThread(new Callable() + instance.submitToMainThread(new Callable() { @Override - public ImageMap call() throws Exception + public Void call() throws Exception { Renderer.installRenderer(poster, mapsIDs); - return MapManager.createMap(poster, playerUUID, mapsIDs); + return null; } - }).get(); + }); - return newMap; + return MapManager.createMap(poster, playerUUID, mapsIDs); } static private BufferedImage ResizeImage(BufferedImage source, int destinationW, int destinationH) diff --git a/src/main/java/fr/moribus/imageonmap/map/ImageMap.java b/src/main/java/fr/moribus/imageonmap/map/ImageMap.java index 143bdb4..d6457aa 100644 --- a/src/main/java/fr/moribus/imageonmap/map/ImageMap.java +++ b/src/main/java/fr/moribus/imageonmap/map/ImageMap.java @@ -119,9 +119,9 @@ public abstract class ImageMap implements ConfigurationSerializable public Map serialize() { Map map = new HashMap(); - map.put("id", id); + map.put("id", getId()); map.put("type", mapType.toString()); - map.put("name", name); + map.put("name", getName()); this.postSerialize(map); return map; } @@ -153,17 +153,17 @@ public abstract class ImageMap implements ConfigurationSerializable return userUUID; } - public String getName() + public synchronized String getName() { return name; } - public String getId() + public synchronized String getId() { return id; } - public void rename(String id, String name) + public synchronized void rename(String id, String name) { this.id = id; this.name = name; @@ -171,8 +171,7 @@ public abstract class ImageMap implements ConfigurationSerializable public void rename(String name) { - if(this.name.equals(name)) return; - this.id = MapManager.getNextAvailableMapID(name, userUUID); - this.name = name; + if(getName().equals(name)) return; + rename(MapManager.getNextAvailableMapID(name, getUserUUID()), name); } } diff --git a/src/main/java/fr/moribus/imageonmap/map/PlayerMapStore.java b/src/main/java/fr/moribus/imageonmap/map/PlayerMapStore.java index d964d98..ab56c52 100644 --- a/src/main/java/fr/moribus/imageonmap/map/PlayerMapStore.java +++ b/src/main/java/fr/moribus/imageonmap/map/PlayerMapStore.java @@ -45,7 +45,7 @@ public class PlayerMapStore implements ConfigurationSerializable this.playerUUID = playerUUID; } - public boolean managesMap(short mapID) + public synchronized boolean managesMap(short mapID) { for(ImageMap map : mapList) { @@ -54,7 +54,7 @@ public class PlayerMapStore implements ConfigurationSerializable return false; } - public boolean managesMap(ItemStack item) + public synchronized boolean managesMap(ItemStack item) { for(ImageMap map : mapList) { @@ -63,19 +63,19 @@ public class PlayerMapStore implements ConfigurationSerializable return false; } - public void addMap(ImageMap map) + public synchronized void addMap(ImageMap map) { mapList.add(map); notifyModification(); } - public void deleteMap(ImageMap map) + public synchronized void deleteMap(ImageMap map) { mapList.remove(map); notifyModification(); } - public boolean mapExists(String id) + public synchronized boolean mapExists(String id) { for(ImageMap map : mapList) { @@ -98,12 +98,12 @@ public class PlayerMapStore implements ConfigurationSerializable return mapId + "-" + id; } - public List getMapList() + public synchronized List getMapList() { return new ArrayList(mapList); } - public ImageMap getMap(String mapId) + public synchronized ImageMap getMap(String mapId) { for(ImageMap map : mapList) { @@ -120,12 +120,12 @@ public class PlayerMapStore implements ConfigurationSerializable return playerUUID; } - public boolean isModified() + public synchronized boolean isModified() { return modified; } - public void notifyModification() + public synchronized void notifyModification() { this.modified = true; } @@ -137,7 +137,7 @@ public class PlayerMapStore implements ConfigurationSerializable { Map map = new HashMap(); ArrayList list = new ArrayList(); - synchronized(mapList) + synchronized(this) { for(ImageMap tMap : mapList) { @@ -153,18 +153,17 @@ public class PlayerMapStore implements ConfigurationSerializable if(section == null) return; List> list = (List>) section.getList("mapList"); if(list == null) return; - synchronized(mapList) + + for(Map tMap : list) { - for(Map tMap : list) + try { - try - { - mapList.add(ImageMap.fromConfig(tMap, playerUUID)); - } - catch(InvalidConfigurationException ex) - { - PluginLogger.LogWarning("Could not load map data : " + ex.getMessage()); - } + ImageMap newMap = ImageMap.fromConfig(tMap, playerUUID); + synchronized(this) {mapList.add(newMap);} + } + catch(InvalidConfigurationException ex) + { + PluginLogger.LogWarning("Could not load map data : " + ex.getMessage()); } } } @@ -205,6 +204,6 @@ public class PlayerMapStore implements ConfigurationSerializable PluginLogger.LogError("Could not save maps file for player " + playerUUID.toString(), ex); } PluginLogger.LogInfo("Saving maps file for " + playerUUID.toString()); - modified = false; + synchronized(this) {modified = false;} } } diff --git a/src/main/java/fr/moribus/imageonmap/map/PosterMap.java b/src/main/java/fr/moribus/imageonmap/map/PosterMap.java index f99b544..daee3c8 100644 --- a/src/main/java/fr/moribus/imageonmap/map/PosterMap.java +++ b/src/main/java/fr/moribus/imageonmap/map/PosterMap.java @@ -25,9 +25,9 @@ import org.bukkit.configuration.InvalidConfigurationException; public class PosterMap extends ImageMap { - protected short[] mapsIDs; - protected int columnCount; - protected int rowCount; + protected final short[] mapsIDs; + protected final int columnCount; + protected final int rowCount; public PosterMap(UUID userUUID, short[] mapsIDs, int columnCount, int rowCount) { diff --git a/src/main/java/fr/moribus/imageonmap/map/SingleMap.java b/src/main/java/fr/moribus/imageonmap/map/SingleMap.java index 18e4bd0..f384a51 100644 --- a/src/main/java/fr/moribus/imageonmap/map/SingleMap.java +++ b/src/main/java/fr/moribus/imageonmap/map/SingleMap.java @@ -24,7 +24,7 @@ import org.bukkit.configuration.InvalidConfigurationException; public class SingleMap extends ImageMap { - protected short mapID; + protected final short mapID; public SingleMap(UUID ownerUUID, short mapID) {