Plugin Crée item frame custom

Kenda

Architecte en herbe
16 Juillet 2016
316
1
2
125
33
www.youtube.com
Bonjour,
Je suis en train de faire un projet de survie privé avec un système de quêtes. J'aimerai savoir comment je pourrais crée un/des items frames custom qui afficherais une image en grande comme ce screen:

Exemple
J'avais pensé à un textures pack, mais je pense que c'est possible de faire sans.

Merci de l'aide :)
 
Bonjour,

Un item frame s’agrandit pour prendre toute la surface du bloc lorsqu'il a une carte comme item, donc l'idée est juste de répartir l'image en plusieurs cartes.
Java:
ItemStack map = new ItemStack(Material.FILLED_MAP);
MapMeta meta = (MapMeta) map.getItemMeta();

MapView view = meta.getMapView();
view.getRenderers().clear();
view.addRenderer(new MapRenderer() {
    @Override
    public void render(MapView view, MapCanvas canvas, Player player) {
        canvas.drawImage(x, y, image);
    }
});

meta.setMapView(view);
map.setItemMeta(meta);
Pas testé.

Cordialement,
ShE3py
 
Bonjour,

Un item frame s’agrandit pour prendre toute la surface du bloc lorsqu'il a une carte comme item, donc l'idée est juste de répartir l'image en plusieurs cartes.
Java:
ItemStack map = new ItemStack(Material.FILLED_MAP);
MapMeta meta = (MapMeta) map.getItemMeta();

MapView view = meta.getMapView();
view.getRenderers().clear();
view.addRenderer(new MapRenderer() {
    @Override
    public void render(MapView view, MapCanvas canvas, Player player) {
        canvas.drawImage(x, y, image);
    }
});

meta.setMapView(view);
map.setItemMeta(meta);
Pas testé.

Cordialement,
ShE3py

Bojnour,
Merci pour l'explication, mais alors ducoup, comment je peux importer mon image custom :confused:

Merci
 
Tu convertis les dimensions de ton image en pixels² vers des cartes² en sachant qu'une carte fait 128 pixels × 128 pixels :
Java:
BufferedImage image = ImageIO.read(new File(plugin.getDataFolder(), "image.png"));

// on rajoute 127/128 pour transformer l'arrondi inférieur en un arrondi supérieur
int width = (image.getWidth() + 127) / 128;
int height = (image.getHeight() + 127) / 128;

Puis après tu crées tes cartes :
Java:
ItemStack[][] maps = new ItemStack[width][height];

for(int x = 0; x < width; ++x) {
    for(int y = 0; y < height; ++y) {
        ItemStack map = new ItemStack(Material.FILLED_MAP);
        BufferedImage texture = image.getSubimage(x * 128, y * 128, 128, 128);
       
        // TODO: dessiner la texture dans la map
      
        maps[x][y] = map;
    }
}
 
Tu convertis les dimensions de ton image en pixels² vers des cartes² en sachant qu'une carte fait 128 pixels × 128 pixels :
Java:
BufferedImage image = ImageIO.read(new File(plugin.getDataFolder(), "image.png"));

// on rajoute 127/128 pour transformer l'arrondi inférieur en un arrondi supérieur
int width = (image.getWidth() + 127) / 128;
int height = (image.getHeight() + 127) / 128;

Puis après tu crées tes cartes :
Java:
ItemStack[][] maps = new ItemStack[width][height];

for(int x = 0; x < width; ++x) {
    for(int y = 0; y < height; ++y) {
        ItemStack map = new ItemStack(Material.FILLED_MAP);
        BufferedImage texture = image.getSubimage(x * 128, y * 128, 128, 128);
      
        // TODO: dessiner la texture dans la map
     
        maps[x][y] = map;
    }
}
(désolé de la réponse tardive)
Donc si je prend une image de X par X pixels (imaginons 800 x 600), il faut la transformer pour qu'elle prenne X items frame de haut et de bas ?
Donc si j'ai 6 items frames en long et 2 en hauteur, il faut que ça fasse (128 * 6), et (128 * 2) en arrondi ?


Merci
 
Pour du 800 × 600 px :
  1. Tu divises les deux composantes par 128, ce qui donne 6.25 × 4.6875 cartes
  2. Ça va être un peu difficile de placer 6.25 cadres en longueur, donc tu fais un arrondi supérieur, ce qui donne 7 × 5
  3. Tu remultiplies par 128 pour trouver la nouvelle taille de l'image : 896 × 640 px
  4. Tu agrandis ton image originelle vers ces dimensions, probablement en la centrant et en mettant un cadre blanc/noir autour
Si tu ne veux pas t'emmerder, tu peux juste assumer que la longueur et la hauteur de l'image sont tous deux divisibles par 128.
 
Salut,

Quand tu fais ce genre de chose, hésite pas à aller voir ce que d'autres ont déjà fait ;)

Y a toujours plus d'idée dans 2 têtes que dans une (même si parfois c'est pas toujours "LA" bonne idée, c'est une idée quand même).


Cordialement,
Detobel36