Plugin Crée item frame custom

Kenda

Architecte en herbe
16 Juillet 2016
292
1
2
125
32
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 :)
 

ShE3py

Enbogueuse
Support
26 Septembre 2015
4 139
163
464
247
21
Mìlhüsa
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
 

Kenda

Architecte en herbe
16 Juillet 2016
292
1
2
125
32
www.youtube.com
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
 

ShE3py

Enbogueuse
Support
26 Septembre 2015
4 139
163
464
247
21
Mìlhüsa
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;
    }
}
 

Kenda

Architecte en herbe
16 Juillet 2016
292
1
2
125
32
www.youtube.com
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
 

ShE3py

Enbogueuse
Support
26 Septembre 2015
4 139
163
464
247
21
Mìlhüsa
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.
 

Detobel36

Créateur de plugins (PhoenixRebirth)
Support
17 Août 2012
10 531
24
2 247
347
28
Bruxelles - Belgique
www.phoenix-rebirth.fr
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