Tipi di Danno
I tipi di danno definiscono tipi di danno che le entità possono subire. A partire da Minecraft 1.19.4, la creazione di nuovi tipi di danno è basata sui dati, per cui essi sono creati tramite file JSON.
Creare un Tipo di Danno
Creiamo un tipo di danno personalizzato chiamato Tater. Inizieremo creando un file JSON per il tuo danno personalizzato. Il file sarà posizionato nella cartella data
della tua mod, in una sottocartella chiamata damage_type
.
resources/data/fabric-docs-reference/damage_type/tater.json
Ha la struttura seguente:
json
{
"exhaustion": 0.1,
"message_id": "tater",
"scaling": "when_caused_by_living_non_player"
}
Questo tipo di danno personalizzato causa un aumento di 0.1 nel livello di esaurimento (exhaustion level) ogni volta che il giocatore prende danno, quando il danno è causato da una fonte vivente che non sia un giocatore (per esempio un blocco). Inoltre, la quantità di danno subita cambierà a seconda della difficoltà del mondo
INFO
Affidati alla Minecraft Wiki (in inglese) per tutte le possibili chiavi e valori.
Accedere ai Tipi di Danno Tramite Codice
Quando abbiamo bisogno di accedere al nostro tipo di danno personalizzato tramite codice, utilizzeremo la sua RegistryKey
per costruire un'istanza di DamageSource
.
La RegistryKey
può essere ottenuta nel modo seguente:
java
public static final RegistryKey<DamageType> TATER_DAMAGE = RegistryKey.of(RegistryKeys.DAMAGE_TYPE, new Identifier("fabric-docs-reference", "tater"));
Utilizzare i Tipi di Danno
Per mostrare l'utilizzo dei tipi di danno personalizzati, utilizzeremo un blocco personalizzato chiamato Blocco di Tater. Facciamo in modo che quando un'entità calpesta un Blocco di Tater, esso causa danno Tater.
Puoi fare override di onSteppedOn
per infliggere questo danno.
Cominciamo creando una DamageSource
del nostro tipo di danno personalizzato.
java
DamageSource damageSource = new DamageSource(
world.getRegistryManager()
.get(RegistryKeys.DAMAGE_TYPE)
.entryOf(FabricDocsReferenceDamageTypes.TATER_DAMAGE));
Poi, chiamiamo entity.damage()
con la nostra DamageSource
e con una quantità.
java
entity.damage(damageSource, 5.0f);
L'intera implementazione del blocco:
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);
}
}
}
Ora quando un'entità vivente calpesta il nostro blocco personalizzato, subirà 5 di danno (2.5 cuori) utilizzando il nostro tipo di danno personalizzato.
Messaggio di Morte Personalizzato
Puoi definire un messaggio di morte per il tipo di danno nel formato death.attack.<message_id>
nel file en_us.json
della nostra mod.
json
"item.minecraft.potion.effect.tater": "Tater Potion"
Al momento della morte dal nostro tipo di danno personalizzato, vedrete il messaggio di morte seguente:
Tag dei Tipi di Danno
Alcuni tipi di danno possono bypassare armatura, bypassare effetti di stato, o simili. I tag sono utilizzati per controllare questo genere di proprietà dei tipi di danno.
Puoi trovare tipi di danno già esistenti in data/minecraft/tags/damage_type
.
INFO
Affidati alla Minecraft Wiki (in inglese) per una lista completa dei tag dei tipi di danno.
Aggiungiamo il nostro tipo di danno Tater al tag bypasses_armor
dei tipi di danno.
Per aggiungere il nostro tipo di danno ad uno di questi tag, creeremo un file JSON nel namespace minecraft
.
data/minecraft/tags/damage_type/bypasses_armor.json
Con il contenuto seguente:
json
{
"replace": false,
"values": [
"fabric-docs-reference:tater"
]
}
Assicurati che il tuo tag non sostituisca il tag esistente impostando la chiave replace
a false
.