Tipos de dano 26.2
Aprenda a adicionar tipos de dano personalizados.
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.
text
resources/data/example-mod/damage_type/tater.jsonEle terá a seguinte estrutura:
json
{
"exhaustion": 0.1,
"message_id": "tater",
"scaling": "when_caused_by_living_non_player"
}1
2
3
4
5
2
3
4
5
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 precisamos acessar os nossos tipos de dano personalizados pelo código, nós usaremos o seu ResourceKey para construir uma instância do DamageSource.
O ResourceKey pode ser obtido da seguinte maneira:
java
public static final ResourceKey<DamageType> TATER_DAMAGE = ResourceKey.create(Registries.DAMAGE_TYPE, ExampleMod.id("tater"));1
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 sobrescrever stepOn para causar esse dano.
Começaremos criando uma DamageSource do nosso tipo de dano customizado.
java
DamageSource damageSource = new DamageSource(
level.registryAccess()
.lookupOrThrow(Registries.DAMAGE_TYPE)
.get(ExampleModDamageTypes.TATER_DAMAGE.identifier()).orElseThrow());1
2
3
4
2
3
4
Então, nós chamamos entity.hurtServer() com o nível atual, o nosso DamageSource e uma quantia.
java
entity.hurtServer(serverLevel, damageSource, 5.0f);1
A implementação completa do bloco:
java
public class TaterBlock extends Block {
public TaterBlock(Properties settings) {
super(settings);
}
@Override
public void stepOn(Level level, BlockPos pos, BlockState state, Entity entity) {
if (entity instanceof LivingEntity && level instanceof ServerLevel serverLevel) {
DamageSource damageSource = new DamageSource(
level.registryAccess()
.lookupOrThrow(Registries.DAMAGE_TYPE)
.get(ExampleModDamageTypes.TATER_DAMAGE.identifier()).orElseThrow());
entity.hurtServer(serverLevel, damageSource, 5.0f);
}
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
{
"death.attack.tater": "%1$s morreu por dano de Bolinho de Batata!"
}1
2
3
2
3
Ao morrer devido ao nosso tipo de dano, você verá a seguinte mensagem:

Tags de Tipo de Dano
Alguns tipos de danos podem ignorar armadura, efeitos de criaturas e coisas do gênero. 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
Recorra à Minecraft Wiki 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.
text
data/minecraft/tags/damage_type/bypasses_armor.jsonCom o seguinte conteúdo:
json
{
"values": [
"example-mod:tater"
]
}1
2
3
4
5
2
3
4
5
Certifique-se de que sua tag não substitua a tag existente definindo a chave replace como false.


