Skip to content

Schadensarten

Schadensarten definieren die Arten von Schaden, die Entitäten erleiden können. Seit Minecraft 1.19.4 ist die Erstellung neuer Schadensarten datengesteuert, das heißt sie werden mithilfe von JSON-Dateien erstellt.

Eine Schadensart erstellen

Lass uns eine benutzerdefinierte Schadensart mit dem Namen Tater erstellen. Wir beginnen mit der Erstellung einer JSON-Datei für deinen benutzerdefinierten Schaden. Diese Datei wird im data-Verzeichnis deines Mods in einem Unterverzeichnis mit dem Namen damage_type abgelegt.

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

Sie hat folgende Struktur:

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

Diese benutzerdefinierte Schadensart verursacht jedes Mal, wenn ein Spieler Schaden erleidet, einen Anstieg von 0,1 an Erschöpfung, wenn der Schaden von einer lebenden Nicht-Spieler-Quelle (z.B. einem Block) verursacht wird. Weiterhin skaliert sich die Höhe des verursachten Schadens mit dem Schwierigkeitsgrad der Welt.

INFO

Im Minecraft Wiki findest du alle möglichen Schlüssel und Werte.

Auf eine Schadensart durch Code zugreifen

Wenn wir über den Code auf unsere benutzerdefinierte Schadensart zugreifen müssen, verwenden wir seinen RegistryKey, um eine Instanz von DamageSource zu erstellen.

Der RegistryKey kann wie folgt ermittelt werden:

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

Schadensarten verwenden

Um die Verwendung von benutzerdefinierten Schadensarten zu demonstrieren, werden wir einen benutzerdefinierten Block mit dem Namen Tater-Block verwenden. Wenn eine lebende Entität auf einen Tater-Block tritt, verursacht er Tater Schaden.

Du kannst onSteppedOn überschreiben, um diesen Schaden zu zuzufügen.

Wir beginnen mit der Erstellung einer DamageSource unserer benutzerdefinierten Schadensart.

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

Dann rufen wir entity.damage() mit unserer DamageSource und einem Betrag auf.

java
entity.damage(damageSource, 5.0f);

Die vollständige Implementierung des Blocks:

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

Wenn nun eine lebende Entität auf unseren benutzerdefinierten Block tritt, erleidet sie mit unserer benutzerdefinierten Schadensart 5 Schaden (2,5 Herzen).

Benutzerdefinierte Todesnachricht

Du kannst eine Todesnachricht für die Schadensart im Format death.attack.<message_id> in der Datei en_us.json unseres Mods definieren.

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

Beim Tod durch unsere Schadensart wirst du die folgende Todesnachricht sehen:

Effekt im Inventar eines Spielers

Schadensart-Tags

Einige Schadensarten können Rüstung, Statuseffekte usw. umgehen. Tags werden verwendet, um diese Art von Eigenschaften von Schadensarten zu kontrollieren.

Vorhandene Schadensarten-Tags kannst du in data/minecraft/tags/damage_type finden.

INFO

Im Minecraft Wiki kannst du eine umfassende Liste der Schadensarten-Tags finden.

Fügen wir unsere Tater-Schadensart dem Schadensart-Tag bypasses_armor hinzu.

Um unsere Schadensart zu einem dieser Tags hinzuzufügen, erstellen wir eine JSON-Datei im Namespace minecraft.

data/minecraft/tags/damage_type/bypasses_armor.json

Mit folgendem Inhalt:

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

Stelle sicher, dass dein Tag das bestehende Tag nicht ersetzt, indem du den Schlüssel replace auf false setzt.