From b192214609c50adb1c8e310672bf822437821283 Mon Sep 17 00:00:00 2001 From: Prokopyl Date: Tue, 31 Mar 2015 20:04:56 +0200 Subject: [PATCH] * BUG: Maps are correctly updated if there are map objects already loaded when the plugin is enabled. --- .../fr/moribus/imageonmap/ImageOnMap.java | 1 + .../imageonmap/image/MapInitEvent.java | 36 ++++++++++++++----- 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/main/java/fr/moribus/imageonmap/ImageOnMap.java b/src/main/java/fr/moribus/imageonmap/ImageOnMap.java index bc3a0de..a214078 100644 --- a/src/main/java/fr/moribus/imageonmap/ImageOnMap.java +++ b/src/main/java/fr/moribus/imageonmap/ImageOnMap.java @@ -85,6 +85,7 @@ public final class ImageOnMap extends JavaPlugin MapManager.init(); Commands.init(this); getServer().getPluginManager().registerEvents(new MapInitEvent(), this); + MapInitEvent.init(); } @Override diff --git a/src/main/java/fr/moribus/imageonmap/image/MapInitEvent.java b/src/main/java/fr/moribus/imageonmap/image/MapInitEvent.java index 7ce8534..fcad286 100644 --- a/src/main/java/fr/moribus/imageonmap/image/MapInitEvent.java +++ b/src/main/java/fr/moribus/imageonmap/image/MapInitEvent.java @@ -22,8 +22,10 @@ import fr.moribus.imageonmap.ImageOnMap; import java.io.File; import org.bukkit.Bukkit; import org.bukkit.Material; +import org.bukkit.World; import org.bukkit.entity.Entity; import org.bukkit.entity.ItemFrame; +import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerItemHeldEvent; @@ -33,6 +35,21 @@ import org.bukkit.map.MapView; public class MapInitEvent implements Listener { + static public void init() + { + for(World world : Bukkit.getWorlds()) + { + for(ItemFrame frame : world.getEntitiesByClass(ItemFrame.class)) + { + initMap(frame.getItem()); + } + } + + for(Player player : Bukkit.getOnlinePlayers()) + { + initMap(player.getItemInHand()); + } + } @EventHandler public void onChunkLoad(ChunkLoadEvent event) @@ -41,12 +58,7 @@ public class MapInitEvent implements Listener { if (entity instanceof ItemFrame) { - ItemStack item = ((ItemFrame)entity).getItem(); - if (item.getType() == Material.MAP) - { - MapView map = Bukkit.getMap(item.getDurability()); - if(!Renderer.isHandled(map)) initMap(map); - } + initMap(((ItemFrame)entity).getItem()); } } } @@ -55,16 +67,22 @@ public class MapInitEvent implements Listener public void onPlayerInv(PlayerItemHeldEvent event) { ItemStack item = event.getPlayer().getInventory().getItem(event.getNewSlot()); - + initMap(item); + } + + static protected void initMap(ItemStack item) + { if (item != null && item.getType() == Material.MAP) { MapView map = Bukkit.getMap(item.getDurability()); - if (!Renderer.isHandled(map)) initMap(map); + initMap(map); } } - protected void initMap(MapView map) + static protected void initMap(MapView map) { + if(Renderer.isHandled(map)) return; + File imageFile = ImageOnMap.getPlugin().getImageFile(map.getId()); if(imageFile.isFile()) {