Skip to content

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:

Efecto en el inventario del jugador

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.