mirror of
https://github.com/zDevelopers/ImageOnMap.git
synced 2024-09-30 15:37:40 +02:00
V1.9 = Beta de la 2.0. Changelog à venir...
This commit is contained in:
parent
525cc12d79
commit
09608e5bf5
@ -26,7 +26,7 @@ public final class ImageOnMap extends JavaPlugin
|
||||
getCommand("tomap").setExecutor(new ImageRenduCommande(this));
|
||||
getCommand("rmmap").setExecutor(new ImageSupprCommande(this));
|
||||
this.saveDefaultConfig();
|
||||
ChargerMap();
|
||||
//ChargerMap();
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -41,7 +41,7 @@ public final class ImageOnMap extends JavaPlugin
|
||||
System.out.println("Stopping ImageOnMap");
|
||||
}
|
||||
|
||||
public void ChargerMap()
|
||||
/*public void ChargerMap()
|
||||
{
|
||||
Set<String> cle = getConfig().getKeys(false);
|
||||
for (String s: cle)
|
||||
@ -51,13 +51,13 @@ public final class ImageOnMap extends JavaPlugin
|
||||
System.out.println("Loading " + s);
|
||||
@SuppressWarnings("deprecation")
|
||||
MapView carte = Bukkit.getMap(Short.parseShort(getConfig().getStringList(s).get(0)));
|
||||
Rendu.SupprRendu(carte);
|
||||
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"));
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
}
|
||||
|
67
src/fr/moribus/ImageOnMap/ImageRenderer.java
Normal file
67
src/fr/moribus/ImageOnMap/ImageRenderer.java
Normal file
@ -0,0 +1,67 @@
|
||||
package fr.moribus.ImageOnMap;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
|
||||
import org.bukkit.map.MapView;
|
||||
|
||||
|
||||
public class ImageRenderer extends Thread
|
||||
{
|
||||
private String URL;
|
||||
private BufferedImage imgSrc;
|
||||
private Poster img;
|
||||
private boolean estPrete = false;
|
||||
boolean erreur = false;
|
||||
|
||||
ImageRenderer(String u)
|
||||
{
|
||||
URL = u;
|
||||
}
|
||||
|
||||
public BufferedImage[] getImg()
|
||||
{
|
||||
if (estPrete)
|
||||
return img.getPoster();
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
public Boolean getStatut()
|
||||
{
|
||||
return estPrete;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
try
|
||||
{
|
||||
imgSrc = ImageIO.read(URI.create(URL).toURL().openStream());
|
||||
img = new Poster(imgSrc);
|
||||
}
|
||||
catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
erreur = true;
|
||||
}
|
||||
estPrete = true;
|
||||
|
||||
}
|
||||
|
||||
static void SupprRendu(MapView map)
|
||||
{
|
||||
if (map.getRenderers().size() != 0)
|
||||
{
|
||||
int i = 0, t = map.getRenderers().size();
|
||||
while (i < t )
|
||||
{
|
||||
map.removeRenderer(map.getRenderers().get(i));
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -7,7 +7,6 @@ import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandExecutor;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.map.MapView;
|
||||
|
||||
public class ImageRenduCommande implements CommandExecutor
|
||||
@ -49,7 +48,7 @@ public class ImageRenduCommande implements CommandExecutor
|
||||
|
||||
if(joueur.getItemInHand().getType() != Material.MAP)
|
||||
{
|
||||
joueur.sendMessage(ChatColor.RED + "Vous devez tenir une map en main !!");
|
||||
joueur.sendMessage(ChatColor.RED + "You must hold a map !!");
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -91,10 +90,11 @@ public class ImageRenduCommande implements CommandExecutor
|
||||
|
||||
imgSvg = true;
|
||||
// On ajoute un rendu
|
||||
Rendu ren = new Rendu(arg3[0], imgSvg, ca, renderName);
|
||||
Rendu.SupprRendu(carte);
|
||||
carte.addRenderer(ren);
|
||||
joueur.setItemInHand(new ItemStack(Material.MAP, 1, carte.getId()));
|
||||
//Rendu ren = new Rendu(arg3[0], imgSvg, ca, renderName);
|
||||
ImageRenderer.SupprRendu(carte);
|
||||
//carte.addRenderer(ren);
|
||||
TacheTraitementImg tache = new TacheTraitementImg(joueur, arg3[0]);
|
||||
tache.runTaskTimer(ca, 0, 10);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -54,7 +54,7 @@ public class ImageSupprCommande implements CommandExecutor
|
||||
{
|
||||
if(carte.getId() == Short.parseShort(plugin.getConfig().getStringList(s).get(0)))
|
||||
{
|
||||
Rendu.SupprRendu(carte);
|
||||
ImageRenderer.SupprRendu(carte);
|
||||
plugin.getConfig().set(s, null);
|
||||
plugin.saveConfig();
|
||||
new File("./plugins/ImageOnMap/" + s + ".png").delete();
|
||||
|
91
src/fr/moribus/ImageOnMap/Poster.java
Normal file
91
src/fr/moribus/ImageOnMap/Poster.java
Normal file
@ -0,0 +1,91 @@
|
||||
package fr.moribus.ImageOnMap;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
|
||||
/* Class which represents a picture cut into several parts */
|
||||
public class Poster
|
||||
{
|
||||
BufferedImage src;
|
||||
BufferedImage ImgDecoupe[];
|
||||
int nbPartie;
|
||||
|
||||
Poster(BufferedImage img)
|
||||
{
|
||||
src = img;
|
||||
DecoupeImg();
|
||||
}
|
||||
|
||||
public BufferedImage[] getPoster()
|
||||
{
|
||||
return ImgDecoupe;
|
||||
}
|
||||
|
||||
private void DecoupeImg()
|
||||
{
|
||||
int ligne, colonne;
|
||||
int x = 0, y = 0;
|
||||
int index = 0;
|
||||
int resteX = src.getWidth() % 128;
|
||||
int resteY = src.getHeight() % 128;
|
||||
if(src.getWidth() / 128 <= 0)
|
||||
ligne = 1;
|
||||
else if(src.getWidth() % 128 != 0)
|
||||
ligne = src.getWidth() / 128 + 1;
|
||||
else
|
||||
ligne = src.getWidth() / 128;
|
||||
|
||||
if(src.getHeight() <= 0)
|
||||
colonne = 1;
|
||||
else if(src.getHeight() % 128 != 0)
|
||||
colonne = src.getHeight() / 128 + 1;
|
||||
else
|
||||
colonne = src.getHeight() / 128;
|
||||
|
||||
nbPartie = ligne * colonne;
|
||||
ImgDecoupe = new BufferedImage[nbPartie];
|
||||
|
||||
for(int lig = 0; lig < ligne; lig++)
|
||||
{
|
||||
y = 0;
|
||||
if(lig == ligne - 1 && resteX != 0 )
|
||||
{
|
||||
for(int col = 0; col < colonne; col++)
|
||||
{
|
||||
if(col == colonne - 1 && resteY != 0)
|
||||
{
|
||||
ImgDecoupe[index] = src.getSubimage(x, y, resteX, resteY);
|
||||
index++;
|
||||
}
|
||||
else
|
||||
{
|
||||
ImgDecoupe[index] = src.getSubimage(x, y, resteX, 128);
|
||||
index++;
|
||||
y += 128;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for(int col = 0; col < colonne; col++)
|
||||
{
|
||||
if(col == colonne - 1 && resteY != 0)
|
||||
{
|
||||
ImgDecoupe[index] = src.getSubimage(x, y, 128, resteY);
|
||||
index++;
|
||||
}
|
||||
else
|
||||
{
|
||||
ImgDecoupe[index] = src.getSubimage(x, y, 128, 128);
|
||||
index++;
|
||||
y += 128;
|
||||
}
|
||||
|
||||
}
|
||||
x += 128;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -1,50 +1,29 @@
|
||||
package fr.moribus.ImageOnMap;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.Image;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.map.MapCanvas;
|
||||
import org.bukkit.map.MapPalette;
|
||||
import org.bukkit.map.MapRenderer;
|
||||
import org.bukkit.map.MapView;
|
||||
import org.bukkit.map.MinecraftFont;
|
||||
|
||||
|
||||
public class Rendu extends MapRenderer implements Runnable
|
||||
{
|
||||
|
||||
boolean estRendu, estSVGee, hasFail, renderName, local = false;
|
||||
BufferedImage touhou, resizedImage;
|
||||
boolean estRendu;
|
||||
Image touhou;
|
||||
private Thread TRendu;
|
||||
public MapCanvas canvas;
|
||||
MapView carte;
|
||||
String URLImage, nomJoueur;
|
||||
Player joueur;
|
||||
ImageOnMap plugin;
|
||||
|
||||
public Rendu(String url, boolean svg, ImageOnMap plug, boolean rn)
|
||||
|
||||
public Rendu(Image img)
|
||||
{
|
||||
estRendu = true;
|
||||
estSVGee = svg;
|
||||
URLImage = url;
|
||||
plugin = plug;
|
||||
renderName = rn;
|
||||
estRendu = false;
|
||||
touhou = img;
|
||||
}
|
||||
|
||||
public Rendu(String url, String pseudo, String boolRN)
|
||||
{
|
||||
estRendu = true;
|
||||
estSVGee = false;
|
||||
URLImage = url;
|
||||
local = true; // Sert à indiquer que le rendu a été lancé par le plugin au démarrage, et non par un joueur en jeu.
|
||||
nomJoueur = pseudo;
|
||||
renderName = Boolean.parseBoolean(boolRN);
|
||||
}
|
||||
@Override
|
||||
public void render(MapView v, final MapCanvas mc, Player p)
|
||||
{
|
||||
@ -53,85 +32,25 @@ public class Rendu extends MapRenderer implements Runnable
|
||||
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
|
||||
if (!estRendu) // Si la map a déjà été rendu, on n'entre plus dans la fonction, ce qui évite de surcharger le serveur
|
||||
{
|
||||
// On instancie et démarre le thread de rendu
|
||||
TRendu = new Thread(this);
|
||||
TRendu.start();
|
||||
estRendu = false;
|
||||
estRendu = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Le chargement et le rendu de l'image se font dans un thread afin d'éviter le lag..
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
// chargement de l'image seulement si elle n'est pas déjà chargée
|
||||
if (touhou == null && local == false)
|
||||
{
|
||||
try
|
||||
{
|
||||
touhou = ImageIO.read(URI.create(URLImage).toURL().openStream());
|
||||
System.out.println(touhou.getWidth() + " " + touhou.getHeight());
|
||||
//System.out.println("chargement de l'image");
|
||||
}
|
||||
catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
hasFail = true;
|
||||
}
|
||||
}
|
||||
if (touhou == null && local == true)
|
||||
{
|
||||
try
|
||||
{
|
||||
touhou = ImageIO.read(new File(URLImage));
|
||||
//System.out.println("chargement de l'image");
|
||||
}
|
||||
catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
hasFail = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (estSVGee)
|
||||
{
|
||||
try
|
||||
{
|
||||
File outputfile = new File("./plugins/ImageOnMap/Image/map" + carte.getId() + ".png");
|
||||
ImageIO.write(MapPalette.resizeImage(touhou), "png", outputfile);
|
||||
hasFail = false;
|
||||
} catch (IOException e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
hasFail = true;
|
||||
}
|
||||
}
|
||||
if(!hasFail && local == false)
|
||||
{
|
||||
SvgMap(carte.getId(), "map" + carte.getId(), joueur.getName());
|
||||
}
|
||||
|
||||
//System.out.println("Rendu de l'image..");
|
||||
|
||||
// on dessine l'image redimensionnée dans le canvas (et donc, sur la map !)
|
||||
canvas.drawImage(0, 0, MapPalette.resizeImage(touhou));
|
||||
|
||||
// On écrit le pseudo du joueur qui a téléchargé l'image
|
||||
if (renderName)
|
||||
{
|
||||
if(!local)
|
||||
canvas.drawText(2, 120, MinecraftFont.Font, new String("(" + joueur.getName() + ")"));
|
||||
else
|
||||
canvas.drawText(2, 120, MinecraftFont.Font, new String("(" + nomJoueur + ")"));
|
||||
}
|
||||
|
||||
//System.out.println("Rendu de l'image fini");
|
||||
canvas.drawImage(0, 0, touhou);
|
||||
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
/*@SuppressWarnings("deprecation")
|
||||
void SvgMap(int IdMap, String nomImage, String nomJoueur)
|
||||
{
|
||||
System.out.println("Saving map " + carte.getId());
|
||||
@ -142,19 +61,6 @@ public class Rendu extends MapRenderer implements Runnable
|
||||
liste.add(String.valueOf(renderName));
|
||||
plugin.getConfig().set("map" + IdMap, liste);
|
||||
plugin.saveConfig();
|
||||
}
|
||||
|
||||
static void SupprRendu(MapView map)
|
||||
{
|
||||
if (map.getRenderers().size() != 0)
|
||||
{
|
||||
int i = 0, t = map.getRenderers().size();
|
||||
while (i < t )
|
||||
{
|
||||
map.removeRenderer(map.getRenderers().get(i));
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}*/
|
||||
|
||||
}
|
54
src/fr/moribus/ImageOnMap/TacheTraitementImg.java
Normal file
54
src/fr/moribus/ImageOnMap/TacheTraitementImg.java
Normal file
@ -0,0 +1,54 @@
|
||||
package fr.moribus.ImageOnMap;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
import org.bukkit.map.MapView;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
|
||||
public class TacheTraitementImg extends BukkitRunnable
|
||||
{
|
||||
int i;
|
||||
Player joueur;
|
||||
ImageRenderer renduImg;
|
||||
PlayerInventory inv;
|
||||
|
||||
TacheTraitementImg(Player j, String u)
|
||||
{
|
||||
i = 0;
|
||||
joueur = j;
|
||||
renduImg = new ImageRenderer(u);
|
||||
renduImg.start();
|
||||
inv = joueur.getInventory();
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
if(!renduImg.getStatut())
|
||||
{
|
||||
joueur.sendMessage("Nombre d'exécution depuis le lancement du timer : " + i);
|
||||
i++;
|
||||
}
|
||||
else
|
||||
{
|
||||
System.out.println("ohlala ?");
|
||||
cancel();
|
||||
int nbImage = renduImg.getImg().length;
|
||||
MapView carte;
|
||||
|
||||
for (int i = 0; i < nbImage; i++)
|
||||
{
|
||||
carte = Bukkit.createMap(joueur.getWorld());
|
||||
ImageRenderer.SupprRendu(carte);
|
||||
carte.addRenderer(new Rendu(renduImg.getImg()[i]));
|
||||
inv.addItem(new ItemStack(Material.MAP, 1, carte.getId()));
|
||||
}
|
||||
joueur.sendMessage("Rendu de l'image fini");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user