Vamos a ver como modificar Items más complejos en Spigot Minecraft, como fuegos artificiales, cabezas, o cuero.
¿Hay más ItemMeta
?
Si nos fijamos en la documentación del ItemMeta
, veremos como hay muchas clases que implementan esta misma, entre ellas FireworkMeta
, LeatherArmorMeta
, SkullMeta
, que son las que usaremos para probar las diferencias.
Crear cabezas customizadas
Una de las funciones más utilizadas en servidores es la utilización de cabezas con símbolos, letras, o incluso texturas que representan diferentes cosas como comida, etc. Todas estas cabezas las podemos encontrar en diferentes webs (como mcheads.ru
). Una vez encontremos una cabeza que nos guste, podemos pasar al siguiente paso. En mi caso, he escogido una cabeza de hamburguesa

Cabeza de hamburguesa de Minecraft
ItemStack
con el material PLAYER_HEAD
. Luego, obtendremos el ItemMeta
, y lo casteamos a SkullMeta
:
ItemStack cabeza = new ItemStack(Material.PLAYER_HEAD);
SkullMeta meta = (SkullMeta) cabeza.getItemMeta();
Con el SkullMeta
, hemos de hacer un poco de magia negra para poner la textura en la cabeza. Primero pongo el código y luego vemos que pasa:
ItemStack cabeza = new ItemStack(Material.PLAYER_HEAD);
SkullMeta meta = (SkullMeta) cabeza.getItemMeta();
PlayerProfile dummyProfile = Bukkit.createProfile(UUID.randomUUID(), "hamburguesa");
dummyProfile.setProperty(new ProfileProperty("textures", "TEXTURA"));
meta.setPlayerProfile(dummyProfile);
cabeza.setItemMeta(meta);
En
"TEXTURA"
hay que poner el texto de símbolos "aleatorios" de la cabeza que hemos elegido. En el caso de mcheads.ru se encuentra aquí:Lo que está ocurriendo en el código es que estamos creando un perfil falso de un jugador, y luego le ponemos la textura dentro. A continuación usamos una técnica que en Java se llama Reflection, que nos permite acceder a sitios donde no hay método accesible para nosotros. Al final del todo estamos poniendo el SkullMeta al ItemStack, y con esto ya estaría.Captura de pantalla de la web mcheads.ru para obtener la texture id
Si probamos a ejecutar este código estando dentro del servidor, veremos como tendremos una cabeza con la textura de hamburguesa 😁.
Crear armaduras de cuero con colores customizados
Vamos a obtener armadura de cuero con un color propio, añadido por nosotros.
Para empezar, crearemos un ItemStack
, y obtendremos el ItemMeta, pero lo castearemos a LeatherArmorMeta
.
ItemStack pechera = new ItemStack(Material.LEATHER_CHESTPLATE);
LeatherArmorMeta meta = (LeatherArmorMeta) pechera.getItemMeta();
¡Ojo! El material que usemos ha de ser una pieza de armadura de cuero.
Una vez tengamos nuestro meta
, si comprobamos la documentación veremos que existe el método setColor
, que es el que usaremos para darle color. En mi caso, quiero darle un amarillo fluorescente, que en formato hex sería #CCFF00
.
ItemStack pechera = new ItemStack(Material.LEATHER_CHESTPLATE);
LeatherArmorMeta meta = (LeatherArmorMeta) pechera.getItemMeta();
meta.setColor(Color.fromRGB(0xCCFF00));
pechera.setItemMeta(meta);
¡Y con esto ya estaría!
Fuegos artificiales customizados
Con los ItemMeta específicos también tenemos uno para customizar fuegos artificiales. Vamos a ver que se puede hacer.
Para empezar, crearemos un ItemStack
de fuego artificial, y obtendremos el ItemMeta, pero lo castearemos a FireworkMeta
.
ItemStack fuegoArtificial = new ItemStack(Material.FIREWORK_ROCKET);
FireworkMeta meta = (FireworkMeta) fuegoArtificial.getItemMeta();
Con el FireworkMeta
podemos añadir efectos con addEffect
, y poner su potencia con setPower
. Vamos a añadir un efecto de Creeper de color verde, solo para ver como funciona. Si nos fijamos en addEffect
acepta un FirewordEffect
, el cual hemos de crear con un método estático.
ItemStack fuegoArtificial = new ItemStack(Material.FIREWORK_ROCKET);
FireworkMeta meta = (FireworkMeta) fuegoArtificial.getItemMeta();
meta.addEffect(
FireworkEffect.builder()
.trail(true)
.withColor(Color.GREEN)
.with(FireworkEffect.Type.CREEPER)
.build()
);
fuegoArtificial.setItemMeta(meta);
Si ahora lanzamos el fuego artificial dentro del juego, veremos como incluye el efecto que le hemos dado.