Skip to content

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 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, useremo 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"));

Usare i Tipi di Danno

Per mostrare l'utilizzo dei tipi di danno personalizzati, useremo 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) usando 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:

Effetto nell'inventario del giocatore

Tag dei Tipi di Danno

Alcuni tipi di danno possono bypassare armatura, bypassare effetti di stato, o simili. I tag sono usati 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 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 a 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.