Tipos de Daño
Los tipos de daño definen los tipos de daño que pueden tomar las entidades. Desde Minecraft 1.19.4, la creación de nuevos tipos de daño se ha vuelto basada en datos, lo que significa que se crean mediante archivos JSON.
Creando un Tipo de Daño
Procedamos a crear un nuevo tipo de daño llamado Tater. Empezaremos creando el archivo JSON para tu tipo de daño. Este archivo será puesto en el folder de data
de tu mod, en un sub-folder llamado damage_types
.
resources/data/fabric-docs-reference/damage_type/tater.json
Tiene la siguiente estructura:
json
{
"exhaustion": 0.1,
"message_id": "tater",
"scaling": "when_caused_by_living_non_player"
}
Este tipo de daño personalizado causa un aumento de 0.1 en cansancio de hambre cada vez que el jugador toma daño, cuando el daño es ocasionado por una fuente viviente que no sea otro jugador (por ejemplo, un bloque). Adicionalmente, la cantidad de daño dado dependerá de la dificultad del mundo
INFO
Verifica la Wiki de Minecraft para ver todas las posibles llaves y valores.
Accediendo los Tipos de Daño en El Código
Cuando necesitamos acceder nuestro tipo de daño en el código, necesitaremos usar su RegistryKey
(Llave de Registro) para crear una instancia de DamageSource
(Fuente de Daño).
El RegistryKey
puede ser obtenida de la siguiente manera:
java
public static final RegistryKey<DamageType> TATER_DAMAGE = RegistryKey.of(RegistryKeys.DAMAGE_TYPE, new Identifier("fabric-docs-reference", "tater"));
Usando los Tipos de Daño
Para demostrar el uso de tipos de daño personalizados, usaremos un bloque personalizado llamado Tater Block. Hagamos que cuando una entidad viviente pise sobre un Bloque de Tater, dará un daño de Tater.
Puedes anular el método onSteppedOn
para dar este daño.
Empezamos creando un DamageSource
de nuestro tipo de daño personalizado.
java
DamageSource damageSource = new DamageSource(
world.getRegistryManager()
.get(RegistryKeys.DAMAGE_TYPE)
.entryOf(FabricDocsReferenceDamageTypes.TATER_DAMAGE));
Después, llamamos entity.damage()
con nuestro DamageSource
y una cantidad.
java
entity.damage(damageSource, 5.0f);
La implementación del bloque completa:
java
public class TaterBlock extends Block {
public TaterBlock(Settings settings) {
super(settings);
}
@Override
public void onSteppedOn(World world, BlockPos pos, BlockState state, Entity entity) {
if (entity instanceof LivingEntity) {
DamageSource damageSource = new DamageSource(
world.getRegistryManager()
.get(RegistryKeys.DAMAGE_TYPE)
.entryOf(FabricDocsReferenceDamageTypes.TATER_DAMAGE));
entity.damage(damageSource, 5.0f);
}
}
}
Ahora cuando una entidad viviente pise sobre nuestro bloque personalizado, tomará 5 de daño (2.5 corazones) usando nuestro tipo de daño personalizado.
Mensaje de Muerte Personalizado
Puedes definir un mensje de muerte para el tipo de daño en el formato de death.attack.<message_id>
en nuestro archivo en_us.json
de nuestro mod.
json
"item.minecraft.potion.effect.tater": "Tater Potion"
Cuando suceda una muerta por nuestro tipo de daño, verás el siguiente mensaje:
Etiquetas de Tipo de Daño
Algunos tipos de daño pueden pasar por la armadura, efectos de estado, y similares. Los Tags (Etiquetas) controlan estos tipos de propiedades de los tipos de daño.
Puedes encontrar los tags de tipos de daño existentes en data/minecraft/tags/damage_type
.
INFO
Verifica la Wiki de Minecraft para una lista completa de los tags de tipo de daño.
Agreguemos nuestro tipo de daño de Tater al tag de bypasses_armor
.
Para agregar nuestro tipo de daño a uno de estos tags, crearemos un archivo JSON bajo el namespace de minecraft
.
data/minecraft/tags/damage_type/bypasses_armor.json
Con el siguiente contenido:
json
{
"replace": false,
"values": [
"fabric-docs-reference:tater"
]
}
Asegúrate que tu tag no reemplace el tag existente dándole un valor de false
a la llave de replace
.