🇪🇸 Español (Spanish)
🇪🇸 Español (Spanish)
Appearance
🇪🇸 Español (Spanish)
🇪🇸 Español (Spanish)
Appearance
This page is written for:
1.21
This page is written for:
1.21
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.
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:
{
"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.
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:
public static final RegistryKey<DamageType> TATER_DAMAGE = RegistryKey.of(RegistryKeys.DAMAGE_TYPE, Identifier.of("fabric-docs-reference", "tater"));
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.
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.
entity.damage(damageSource, 5.0f);
La implementación del bloque completa:
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.
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.
"item.minecraft.potion.effect.tater": "Tater Potion",
Cuando suceda una muerta por nuestro tipo de daño, verás el siguiente mensaje:
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:
{
"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
.