diff --git a/src/fr/moribus/ImageOnMap/ImageOnMap.java b/src/fr/moribus/ImageOnMap/ImageOnMap.java index 4d312bf..5c78e61 100644 --- a/src/fr/moribus/ImageOnMap/ImageOnMap.java +++ b/src/fr/moribus/ImageOnMap/ImageOnMap.java @@ -1,6 +1,8 @@ package fr.moribus.ImageOnMap; import java.io.File; +import java.io.IOException; +import java.util.Set; import org.bukkit.plugin.java.JavaPlugin; @@ -18,12 +20,24 @@ public final class ImageOnMap extends JavaPlugin // On ajoute si besoin les params par défaut du plugin ImgUtility.CreeSectionConfig(this); + if(this.getConfig().getBoolean("collect-data")) + { + try + { + MetricsLite metrics = new MetricsLite(this); + metrics.start(); + System.out.println("Metrics launched for ImageOnMap"); + } catch (IOException e) { + // Failed to submit the stats :-( + } + } + if(dossierCree) { getCommand("tomap").setExecutor(new ImageRenduCommande(this)); - getCommand("rmmap").setExecutor(new ImageSupprCommande(this)); + //getCommand("rmmap").setExecutor(new ImageSupprCommande(this)); this.saveDefaultConfig(); - //ChargerMap(); + ChargerMap(); } else { @@ -38,23 +52,26 @@ public final class ImageOnMap extends JavaPlugin System.out.println("Stopping ImageOnMap"); } - /*public void ChargerMap() + public void ChargerMap() { Set cle = getConfig().getKeys(false); + int nbMap = 0, nbErr = 0; for (String s: cle) { if(getConfig().getStringList(s).size() >= 3) { - System.out.println("Loading " + s); - @SuppressWarnings("deprecation") - MapView carte = Bukkit.getMap(Short.parseShort(getConfig().getStringList(s).get(0))); - ImageRenderer.SupprRendu(carte); - if (getConfig().getStringList(s).size() == 4) - carte.addRenderer(new Rendu("./plugins/ImageOnMap/Image/" + getConfig().getStringList(s).get(1) + ".png", getConfig().getStringList(s).get(2), getConfig().getStringList(s).get(3))); - else if (getConfig().getStringList(s).size() == 3) - carte.addRenderer(new Rendu("./plugins/ImageOnMap/Image/" + getConfig().getStringList(s).get(1) + ".png", getConfig().getStringList(s).get(2), "True")); + SavedMap map = new SavedMap(this, Short.valueOf(getConfig().getStringList(s).get(0))); + + if(map.LoadMap()) + nbMap++; + else + nbErr++; } + } - }*/ + System.out.println(nbMap +" maps was loaded"); + if(nbErr != 0) + System.out.println(nbErr +" maps can't be loaded"); + } } diff --git a/src/fr/moribus/ImageOnMap/ImageRenderer.java b/src/fr/moribus/ImageOnMap/ImageRenderer.java index 000461a..8133a97 100644 --- a/src/fr/moribus/ImageOnMap/ImageRenderer.java +++ b/src/fr/moribus/ImageOnMap/ImageRenderer.java @@ -55,10 +55,10 @@ public class ImageRenderer extends Thread static void SupprRendu(MapView map) { - if (map.getRenderers().size() != 0) + if (map.getRenderers().size() > 0) { int i = 0, t = map.getRenderers().size(); - while (i < t ) + while (i < t) { map.removeRenderer(map.getRenderers().get(i)); i++; diff --git a/src/fr/moribus/ImageOnMap/ImageRenduCommande.java b/src/fr/moribus/ImageOnMap/ImageRenduCommande.java index a09698f..f9866e6 100644 --- a/src/fr/moribus/ImageOnMap/ImageRenduCommande.java +++ b/src/fr/moribus/ImageOnMap/ImageRenduCommande.java @@ -1,13 +1,11 @@ package fr.moribus.ImageOnMap; -import org.bukkit.Bukkit; import org.bukkit.ChatColor; -import org.bukkit.Material; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import org.bukkit.map.MapView; + public class ImageRenduCommande implements CommandExecutor { @@ -15,16 +13,12 @@ public class ImageRenduCommande implements CommandExecutor Player joueur; boolean renderName, imgSvg; ImageOnMap ca; - int nbMapServeur, nbMapJoueur; public ImageRenduCommande(ImageOnMap plugin) { ca = plugin; - nbMapServeur = ca.getConfig().getInt("Limit-map-by-server"); - nbMapJoueur = ca.getConfig().getInt("Limit-map-by-player"); } - @SuppressWarnings("deprecation") @Override public boolean onCommand(CommandSender sender, Command arg1, String arg2, String[] arg3) @@ -44,13 +38,6 @@ public class ImageRenduCommande implements CommandExecutor joueur.sendMessage("You are not allowed to use this command ( " + arg1.getName() + " )!"); return false; } - - - if(joueur.getItemInHand().getType() != Material.MAP) - { - joueur.sendMessage(ChatColor.RED + "You must hold a map !!"); - return false; - } if (arg3.length < 1) { @@ -58,42 +45,7 @@ public class ImageRenduCommande implements CommandExecutor return false; } - if (arg3.length == 2) - { - if (arg3[1].contains("true")) - renderName = true; - else - renderName = false; - } - else - renderName = false; - - // on crée une carte - MapView carte = Bukkit.getMap(joueur.getItemInHand().getDurability()); - - // On vérifie que le nombre limite de map par serveur n'a pas été atteint. - // Si la carte est déjà inscrite dans le fichier (== contient une image), on outrepasse la vérification - // vu que le nb de map n'augmentera pas. - // Si la limite = 0, on ignore cette vérification. - if(!ImgUtility.EstDansFichier(ca, carte.getId()) && nbMapServeur != 0 && ImgUtility.getNombreDeMaps(ca) >= nbMapServeur) - { - joueur.sendMessage(ChatColor.RED + "The limit of map's number per server (" + nbMapServeur + ") have been reached !"); - return true; - } - - // Même chose, mais par joueur cette fois - if(!ImgUtility.EstDansFichier(ca, carte.getId(), joueur.getName()) && nbMapJoueur != 0 && ImgUtility.getNombreDeMapsParJoueur(ca, joueur.getName()) >= nbMapJoueur) - { - joueur.sendMessage(ChatColor.RED + "You've reached the limit of maps per player (" + nbMapJoueur + ") ! Please delete or reuse one of your custom map."); - return true; - } - - imgSvg = true; - // On ajoute un rendu - //Rendu ren = new Rendu(arg3[0], imgSvg, ca, renderName); - ImageRenderer.SupprRendu(carte); - //carte.addRenderer(ren); - TacheTraitementImg tache = new TacheTraitementImg(joueur, arg3[0]); + TacheTraitementMap tache = new TacheTraitementMap(joueur, arg3[0], ca); tache.runTaskTimer(ca, 0, 10); return true; diff --git a/src/fr/moribus/ImageOnMap/ImgUtility.java b/src/fr/moribus/ImageOnMap/ImgUtility.java index a080c7d..d871bce 100644 --- a/src/fr/moribus/ImageOnMap/ImgUtility.java +++ b/src/fr/moribus/ImageOnMap/ImgUtility.java @@ -46,6 +46,8 @@ public class ImgUtility plugin.getConfig().set("Limit-map-by-server", 0); if(plugin.getConfig().get("Limit-map-by-player") == null) plugin.getConfig().set("Limit-map-by-player", 0); + if(plugin.getConfig().get("collect-data") == null) + plugin.getConfig().set("collect-data", true); plugin.saveConfig(); } diff --git a/src/fr/moribus/ImageOnMap/Rendu.java b/src/fr/moribus/ImageOnMap/Rendu.java index 70cb800..497db14 100644 --- a/src/fr/moribus/ImageOnMap/Rendu.java +++ b/src/fr/moribus/ImageOnMap/Rendu.java @@ -15,8 +15,6 @@ public class Rendu extends MapRenderer implements Runnable Image touhou; private Thread TRendu; public MapCanvas canvas; - MapView carte; - Player joueur; public Rendu(Image img) { @@ -28,8 +26,6 @@ public class Rendu extends MapRenderer implements Runnable public void render(MapView v, final MapCanvas mc, Player p) { canvas = mc; - carte = v; - joueur = p; if (!estRendu) // Si la map a déjà été rendu, on n'entre plus dans la fonction, ce qui évite de surcharger le serveur @@ -49,18 +45,4 @@ public class Rendu extends MapRenderer implements Runnable canvas.drawImage(0, 0, touhou); } - - /*@SuppressWarnings("deprecation") - void SvgMap(int IdMap, String nomImage, String nomJoueur) - { - System.out.println("Saving map " + carte.getId()); - ArrayList liste = new ArrayList(); - liste.add(String.valueOf(IdMap)); - liste.add(nomImage); - liste.add(nomJoueur); - liste.add(String.valueOf(renderName)); - plugin.getConfig().set("map" + IdMap, liste); - plugin.saveConfig(); - }*/ - } \ No newline at end of file diff --git a/src/fr/moribus/ImageOnMap/SavedMap.java b/src/fr/moribus/ImageOnMap/SavedMap.java new file mode 100644 index 0000000..3c646e3 --- /dev/null +++ b/src/fr/moribus/ImageOnMap/SavedMap.java @@ -0,0 +1,98 @@ +package fr.moribus.ImageOnMap; + +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Set; + +import javax.imageio.ImageIO; + +import org.bukkit.Bukkit; +import org.bukkit.map.MapPalette; +import org.bukkit.map.MapView; + +public class SavedMap +{ + ImageOnMap plugin; + String nomImg, nomJoueur; + short idMap; + BufferedImage image; + + SavedMap(ImageOnMap plug, String nomJ, short id, BufferedImage img) + { + plugin = plug; + nomJoueur = nomJ; + idMap = id; + image = img; + nomImg = "map" + id; + } + + SavedMap(ImageOnMap plug, short id) + { + idMap = id; + plugin = plug; + Set cle = plugin.getConfig().getKeys(false); + int tmp = 0; + for (String s: cle) + { + if(plugin.getConfig().getStringList(s).size() >= 3 && Short.valueOf(plugin.getConfig().getStringList(s).get(0)) == id) + { + tmp++; + //System.out.println(tmp); + //MapView carte = Bukkit.getMap(Short.parseShort(plugin.getConfig().getStringList(s).get(0))); + nomImg = plugin.getConfig().getStringList(s).get(1); + nomJoueur = plugin.getConfig().getStringList(s).get(2); + try { + image = ImageIO.read(new File("./plugins/ImageOnMap/Image/"+ nomImg + ".png")); + //System.out.println("Chargement de l'image fini"); + } catch (IOException e) { + System.out.println("Image "+ nomImg +".png doesn't exists in Image directory."); + } + } + } + if(tmp == 0) + { + System.out.println("No map was loaded"); + } + } + + Boolean SaveMap() + { + System.out.println("Saving map " + idMap); + + // Enregistrement de l'image sur le disque dur + try + { + File outputfile = new File("./plugins/ImageOnMap/Image/"+ nomImg + ".png"); + ImageIO.write(MapPalette.resizeImage(image), "png", outputfile); + } catch (IOException e) + { + e.printStackTrace(); + return false; + } + // Enregistrement de la map dans la config + ArrayList liste = new ArrayList(); + liste.add(String.valueOf(idMap)); + liste.add(nomImg); + liste.add(nomJoueur); + plugin.getConfig().set(nomImg, liste); + plugin.saveConfig(); + return true; + } + + @SuppressWarnings("deprecation") + Boolean LoadMap() + { + MapView carte = Bukkit.getMap(idMap); + if(carte != null) + { + ImageRenderer.SupprRendu(carte); + carte.addRenderer(new Rendu(image)); + return true; + } + else + return false; + } + +} diff --git a/src/fr/moribus/ImageOnMap/TacheTraitementImg.java b/src/fr/moribus/ImageOnMap/TacheTraitementMap.java similarity index 50% rename from src/fr/moribus/ImageOnMap/TacheTraitementImg.java rename to src/fr/moribus/ImageOnMap/TacheTraitementMap.java index f51859d..fc9d23f 100644 --- a/src/fr/moribus/ImageOnMap/TacheTraitementImg.java +++ b/src/fr/moribus/ImageOnMap/TacheTraitementMap.java @@ -1,6 +1,7 @@ package fr.moribus.ImageOnMap; import org.bukkit.Bukkit; +import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; @@ -9,21 +10,23 @@ import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.map.MapView; import org.bukkit.scheduler.BukkitRunnable; -public class TacheTraitementImg extends BukkitRunnable +public class TacheTraitementMap extends BukkitRunnable { int i; Player joueur; ImageRenderer renduImg; PlayerInventory inv; ItemStack map; + ImageOnMap plugin; - TacheTraitementImg(Player j, String u) + TacheTraitementMap(Player j, String u, ImageOnMap plug) { i = 0; joueur = j; renduImg = new ImageRenderer(u); renduImg.start(); inv = joueur.getInventory(); + plugin = plug; } @SuppressWarnings("deprecation") @@ -32,13 +35,28 @@ public class TacheTraitementImg extends BukkitRunnable { if(!renduImg.getStatut()) { - joueur.sendMessage("Nombre d'exécution depuis le lancement du timer : " + i); + //joueur.sendMessage("Nombre d'exécution depuis le lancement du timer : " + i); i++; + if(i > 42) + { + joueur.sendMessage("TIMEOUT: the render took too many time"); + cancel(); + } } else { cancel(); int nbImage = renduImg.getImg().getPoster().length; + if (plugin.getConfig().getInt("Limit-map-by-server") != 0 && nbImage + ImgUtility.getNombreDeMaps(plugin) > plugin.getConfig().getInt("Limit-map-by-server")) + { + joueur.sendMessage("ERROR: cannot render "+ nbImage +" picture(s): the limit of maps per server would be exceeded."); + return; + } + if (plugin.getConfig().getInt("Limit-map-by-player") != 0 && nbImage + ImgUtility.getNombreDeMapsParJoueur(plugin, joueur.getName()) > plugin.getConfig().getInt("Limit-map-by-player")) + { + joueur.sendMessage(ChatColor.RED +"ERROR: cannot render "+ nbImage +" picture(s): the limit of maps allowed for you (per player) would be exceeded."); + return; + } MapView carte; for (int i = 0; i < nbImage; i++) @@ -51,6 +69,10 @@ public class TacheTraitementImg extends BukkitRunnable meta.setDisplayName("Map (" +renduImg.getImg().NumeroMap.get(i) +")"); map.setItemMeta(meta); inv.addItem(map); + + //Svg de la map + SavedMap svg = new SavedMap(plugin, joueur.getName(), carte.getId(), renduImg.getImg().getPoster()[i]); + svg.SaveMap(); } joueur.sendMessage("Rendu de l'image fini"); }