Saltar al contenido principal

RtagItem

Antes de continuar

Para entender esta página primero debes ver la guía de RtagEditor.

Para entender sobre los tags comunes en los items se sugiere visitar la página de la wiki de Minecraft.

El RtagItem es una instancia de RtagEditor, así que utiliza los mismos métodos para editar, cargar y actualizar los cambios como un editor de tags.

Crear

Existen multiples maneras de crear una instancia de RtagItem.

Instancia

Usando un constructor simple que acepta cualquier tipo de ItemStack.

ItemStack item = ...;

RtagItem tag = new RtagItem(item);

O especificando la instancia de Rtag que se utilizará para manejar el NBT.

ItemStack item = ...;
Rtag rtag = ...;

RtagItem tag = new RtagItem(rtag, item);

Método

Usando un método simple que acepta cualquier tipo de ItemStack.

ItemStack item = ...;

RtagItem tag = RtagItem.of(item);

O especificando la instancia de Rtag que se utilizará para manejar el NBT.

ItemStack item = ...;
Rtag rtag = ...;

RtagItem tag = RtagItem.of(rtag, item);

Función

Usando funciones es la forma más fácil de editar NBT manejando el RtagItem.

Puedes editar el ItemStack proporcionado sin necesidad de reemplazarlo.

ItemStack item = ...;

// Editar el item
RtagItem.edit(item, tag -> {
tag.set(123, "path");
});

// Especificar la instancia de Rtag
Rtag rtag = ...;
RtagItem.edit(rtag, item, tag -> {
tag.set(123, "path");
});

Tomar en cuenta que el método devuelve el propio ItemStack con los cambios cargados.

ItemStack item = ...;

// Editar el item
ItemStack sameItem = RtagItem.edit(item, tag -> {
tag.set(123, "path");
});

// Especificar la instancia de Rtag
Rtag rtag = ...;
ItemStack sameItem = RtagItem.edit(rtag, item, tag -> {
tag.set(123, "path");
});

Además puedes devolver cualquier tipo de objeto especificado en la función.

ItemStack item = ...;

// Obtener una copia del item con los cambios cargados
ItemStack itemWithChanges = RtagItem.edit(item, tag -> {
tag.set(123, "path");
return tag.loadCopy();
});

// Obtenerlo como quieras desde la instancia del RtagEditor
int number = RtagItem.edit(item, tag -> {
return tag.get("path");
});

Editar

Existen algunos métodos dentro de RtagItem que el RtagEditor no tiene.

Función

Como las funciones explicadas anteriormente, el RtagItem actual puede se editado utilizando una función que devuelve su propia instancia.

RtagItem tag = ...;

tag.edit(tag -> {
tag.set(123, "path");
tag.set("Hello", "greeting");
});

Métodos de instancia

Existen algunos métodos fáciles de utilizar para editar tags conocidos del item de una manera simple, teniendo soporte para una amplia variedad de versiones de Minecraft.

Encantamientos: El RtagItem tiene soporte para cualquier encantamiento, ya sea manejado por el enum de Enchantment, el nombre en String o el id como un Number en cualquier versión de Minecraft compatible con Rtag.

RtagItem tag = ...;

tag.addEnchantment("Mending", 1);

boolean bool = tag.hasEnchantment(70); // Devuelve true porque el ID del Mending es 70
// Lo mismo de arriba pero utilizando el nombre del encantamiento
boolean bool = tag.hasEnchantment("Mending");

// También puedes utilizar el enum Enchantment de Bukkit correctamente
tag.removeEnchantment(Enchantment.MENDING);

tag.addEnchantment("Mending", 1);

int level = tag.getEnchantmentLevel("Mending");

// Obtener todos los encantamientos como un Map
Map<EnchantmentTag, Integer> enchants = tag.getEnchantments();

Irrompibilidad: Manejar el estado de irrompibilidad del item (fue agregado en la versión 1.7 de Minecraft, pero solo puede ser editado con Bukkit desde la versión 1.11).

RtagItem tag = ...;

tag.setUnbreakable(true);

boolean bool = tag.isUnbreakable();

CustomModelData: Editar el custom model data introducido en la versión 1.14 desde cualquier versión.

RtagItem tag = ...;

tag.setCustomModelData(40);

int model = tag.getCustomModelData();

Costo de reparación: Editar el costo de reparación del item en el yunque.

RtagItem tag = ...;

tag.setRepairCost(10);

int cost = tag.getRepairCost();

Serialización: Arreglar cualquier item mal serializado en Bukkit 1.14 o superior.

info

En Minecraft 1.14, los strings del lore del item fueron movidos a utilizar el formato de componente de chat, así que los items serializados en Bukkit de alguna forma no pueden ser comparados con otros items utilizando el método ItemStack#isSimilar() ya que el componente de chat del lore del item serializado no contiene varios tags sin utilizar.

RtagItem tag = ...;

tag.fixSerialization();

Flags: Mejor conocidas como HideFlags, en el RtagItem las flags son manejadas por sus valores ordinales.

Esta es una característica obsoleta y se eliminará en una versión futura.

Desde la versión 1.20.5, todos los métodos de flags se convierten en componentes de datos.

  1. Enchantments - Encantamientos
  2. AttributeModifiers - Modificadores (como el daño)
  3. Unbreakable - Estado de irrompibilidad
  4. CanDestroy - Información sobre posibilidad de romper algo
  5. CanPlaceOn - Información sobre posibilidad de colocarse en algún lugar
  6. Other information - Encantamientos en libros, efectos de poción, generación, autor del libro, tipo de explosión y efectos de fuego artificial.
  7. Dyed - Tintado del item
  8. Palette information - El trim de las armaduras
RtagItem tag = ...;

tag.addHideFlags(2, 4, 6);

boolean bool = tag.hasHideFlags(2, 6); // devuelve true

tag.removeHideFlags(6);

tag.setHideFlags(4);

Components

Esto es una característica experimental.

Cualquier uso se puede cambiar/eliminar en una versión futura; no se recomienda usarlo a menos de que implementes Rtag en tu proyecto.

Desde Minecraft 1.20.5, el formato de los items cambió para implementar un mejor rendimiento con los tags vanilla, asímismo utilizando componentes de datos.

Con RtagItem puedes editar componentes de forma sencilla como si fueran objetos normales de Java.

RtagItem tag = ...;

if (tag.hasComponent("minecraft:custom_model_data")) {
tag.removeComponent("minecraft:custom_model_data");
} else {
tag.setComponent("minecraft:custom_model_data", 40);
}

final Object component = tag.getComponent("minecraft:custom_model_data");
final Integer number = ComponentType.encodeJava("minecraft:custom_model_data", component).orElse(null);

Cargar

Los cambios realizados en el RtagItem pueden ser cargados de formas diferentes a diferencia del RtagEditor.

Obtener una copia

Envés de cargar los cambios en el ItemStack proporcionado, puedes crear una copia del item con los cambios cargados.

ItemStack original = ...;

// Crear el editor
RtagItem tag = new RtagItem(original);

// Editar el tag
tag.set(123, "path");

// Obtener una copia del item con los cambios cargados
ItemStan newItem = tag.loadCopy();