🇧🇷 Português (Portuguese - Brazil)
🇧🇷 Português (Portuguese - Brazil)
Aparência
🇧🇷 Português (Portuguese - Brazil)
🇧🇷 Português (Portuguese - Brazil)
Aparência
This page is written for:
1.21
This page is written for:
1.21
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.
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:
{
"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.
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:
public static final RegistryKey<DamageType> TATER_DAMAGE = RegistryKey.of(RegistryKeys.DAMAGE_TYPE, Identifier.of("fabric-docs-reference", "tater"));
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.
DamageSource damageSource = new DamageSource(
world.getRegistryManager()
.get(RegistryKeys.DAMAGE_TYPE)
.entryOf(FabricDocsReferenceDamageTypes.TATER_DAMAGE));
Então, chamamos entity.damage()
com o nosso DamageSource
e uma quantidade.
entity.damage(damageSource, 5.0f);
A implementação completa do bloco:
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.
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.
"item.minecraft.potion.effect.tater": "Tater Potion",
Ao morrer devido ao nosso tipo de dano, você verá a seguinte mensagem:
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:
{
"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
.