Corrections de bugs liés au chargement des images

This commit is contained in:
Coutume 2014-01-06 10:31:51 +01:00
parent ea018da66c
commit f3510b1d3f
7 changed files with 158 additions and 85 deletions

View File

@ -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<String> 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");
}
}

View File

@ -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++;

View File

@ -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;

View File

@ -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();
}

View File

@ -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<String> liste = new ArrayList<String>();
liste.add(String.valueOf(IdMap));
liste.add(nomImage);
liste.add(nomJoueur);
liste.add(String.valueOf(renderName));
plugin.getConfig().set("map" + IdMap, liste);
plugin.saveConfig();
}*/
}

View File

@ -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<String> 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<String> liste = new ArrayList<String>();
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;
}
}

View File

@ -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");
}