Skip to content

Tipos de Dano

Os tipos de dano definem os tipos de dano que as entidades podem sofrer. A partir do Minecraft 1.19.4, a criação de novos tipos de dano passou a ser baseada em dados, o que significa que eles são criados usando arquivos JSON.

Criando um Tipo de Dano

Vamos criar um tipo de dano customizado chamado Tater. Começaremos criando um arquivo JSON para seu dano. Este arquivo será colocado na pasta data do seu mod, em uma subpasta chamada damage_type.

resources/data/fabric-docs-reference/damage_type/tater.json

Ele terá a seguinte estrutura:

json
{
  "exhaustion": 0.1,
  "message_id": "tater",
  "scaling": "when_caused_by_living_non_player"
}

Esse tipo de dano causa aumento de 0.1 na exaustão de fome toda vez que um jogador sofrer dano, quando o dano for causado por uma fonte viva que não seja um jogador (ex: um bloco). Além disso, a quantidade de dano causado escalonará com a dificuldade do mundo.

INFO

Consulte a Wiki do Minecraft para todas as chaves e valores possíveis.

Acessando Tipos de Dano Através de Código

Quando precisarmos acessar nosso tipo de dano através de código, usaremos a sua RegistryKey (Chave de Registro) para construir uma instância de DamageSource (Fonte de Dano).

A RegistryKey pode ser obtida da seguinte maneira:

java
public static final RegistryKey<DamageType> TATER_DAMAGE = RegistryKey.of(RegistryKeys.DAMAGE_TYPE, new Identifier("fabric-docs-reference", "tater"));

Usando Tipos de Dano

Para demonstrar o uso de tipos de dano personalizados, usaremos um bloco personalizado chamado Tater Block. Façamos com que quando uma entidade viva pisar em um Tater Block, ele causará dano de Tater.

Você pode substituir onSteppedOn para infligir este dano.

Começaremos criando uma DamageSource do nosso tipo de dano customizado.

java
DamageSource damageSource = new DamageSource(
		world.getRegistryManager()
				.get(RegistryKeys.DAMAGE_TYPE)
				.entryOf(FabricDocsReferenceDamageTypes.TATER_DAMAGE));

Então, chamamos entity.damage() com o nosso DamageSourcee uma quantidade.

java
entity.damage(damageSource, 5.0f);

A implementação completa do bloco:

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);
		}
	}
}

Agora, quando uma entidade viva pisar no nosso bloco, ela sofrerá 5 de dano (2,5 corações) usando nosso tipo de dano personalizado.

Mensagem de Morte Personalizada

Você pode definir uma mensagem de morte para o tipo de dano no formato de death.attack.<message_id> no arquivo en_us.json do mod.

json
"item.minecraft.potion.effect.tater": "Tater Potion"

Ao morrer devido ao nosso tipo de dano, você verá a seguinte mensagem:

Efeito no inventário do jogador

Tags de Tipo de Dano

Alguns danos podem ignorar a armadura, efeitos de estado, e similares. Tags (etiquetas) são usadas para controlar tais propriedades dos tipos de dano.

As tags de tipo de dano existentes se encontram em data/minecraft/tags/damage_type.

INFO

Consulte a Wiki do Minecraft para uma lista compreensiva de tags de tipos de dano.

Vamos adicionar nosso dano Tater para a tag bypasses_armor (ignora armadura).

Para adicionar nosso dano a uma dessas tags, criamos um arquivo JSON sob o namespace de minecraft.

data/minecraft/tags/damage_type/bypasses_armor.json

Com o seguinte conteúdo:

json
{
  "replace": false,
  "values": [
    "fabric-docs-reference:tater"
  ]
}

Certifique-se de que sua tag não substitua a tag existente definindo a chave replace como false.