Saltar al contenido principal

APIs compatibles

Existen algunas APIs compatibles las cuales Rtag puede interactuar con estas.

PersistentDataContainer de Bukkit​

La api de PersistentDataContainer fue introducida en la versión 1.14 de Bukkit para guardar tags custom en diferentes objetos como items, entidades y tile entity, haciendo la edición de los tags de NBT más fácil para muchos desarrolladores, básicamente la misma utilidad que Rtag pero limitada a solo editar tags custom, solamente compatible con los objetos compatibles y utilizando la instancia de un plugin, además de ser necesario el saber editar NBT para hacer algo funcional.

Con Rtag es posible editar objetos del PersistentDataContainer debido a que son guardados en rutas del tag:

  • Items y tile entities: PublicBukkitValues -> <plugin>:<key>.
  • Entidades: BukkitValues -> <plugin>:<key>.
  • Chunks: ChunkBukkitValues -> <plugin>:<key>.

Ejemplo​

Por ejemplo, si un plugin llamado "CoolPlugin" guarda el valor de un String en el key "asd" utilizando el API de PersistentDataContainer, podrás editarlo usando el siguiente método.

// Usando un item
RtagItem tag = new RtagItem(item);
// Usando un bloque
RtagBlock tag = new RtagBlock(block);

// Obtener
String value = tag.get("PublicBukkitValues", "coolplugin:asd");
// Establecer
String str = "Hello";
tag.get(str, "PublicBukkitValues", "coolplugin:asd");


// Usando una entidad
RtagEntity tag = new RtagEntity(entity);

// Obtener
String value = tag.get("BukkitValues", "coolplugin:asd");
// Establecer
String str = "Hello";
tag.get(str, "BukkitValues", "coolplugin:asd");

Inyector de NBT del Item-NBT-API​

La característica del inyector del Item-NBT-API permite guardar tags custom en las entidades y tile entity, lo mismo que PersistentDataContainer pero compatible con versiones más viejas que la 1.14 de Bukkit.

Con Rtag es posible editar esos tags custom debido a que están guardados en la ruta __extraData.

Ejemplo​

Las ediciones son las mismas, pero todas las rutas empiezan con __extraData.

// Usando una entidad
RtagEntity tag = new RtagEntity(entity);
// Usando un bloque
RtagBlock tag = new RtagBlock(block);

String str = "My String";
// Establecer en la ruta "my -> saved -> object"
tag.set(str, "__extraData", "my", "saved", "object");

// Obtener desde "my <- save <- object"
String sameStr = tag.get("__extraData", "my", "saved", "object");

// Obtener desde la ruta
tag.remove("__extraData", "my", "saved", "object");