🇩🇪 Deutsch (German)
🇩🇪 Deutsch (German)
Erscheinungsbild
🇩🇪 Deutsch (German)
🇩🇪 Deutsch (German)
Erscheinungsbild
Diese Seite ist für folgende Version geschrieben:
1.21.4
Diese Seite ist für folgende Version geschrieben:
1.21.4
Statuseffekte, auch Effekte genannt, sind ein Zustand, der eine Entität beeinflussen kann. Sie können positiver, negativer oder neutraler Natur sein. Das Basisspiel wendet diese Effekte auf verschiedene Weise an, zum Beispiel durch Nahrung, Tränke usw.
Der Befehl /effect
kann verwendet werden, um Effekte auf eine Entität anzuwenden.
In diesem Tutorial fügen wir einen neuen benutzerdefinierten Effekt namens Tater hinzu, der dir einen Erfahrungspunkt pro Spieltick gibt.
StatusEffect
erweitern Lasst uns eine benutzerdefinierte Effektklasse erstellen, indem wir StatusEffect
erweitern, die die Basisklasse für alle Effekte ist.
public class TaterEffect extends StatusEffect {
protected TaterEffect() {
// category: StatusEffectCategory - describes if the effect is helpful (BENEFICIAL), harmful (HARMFUL) or useless (NEUTRAL)
// color: int - Color is the color assigned to the effect (in RGB)
super(StatusEffectCategory.BENEFICIAL, 0xe9b8b3);
}
// Called every tick to check if the effect can be applied or not
@Override
public boolean canApplyUpdateEffect(int duration, int amplifier) {
// In our case, we just make it return true so that it applies the effect every tick
return true;
}
// Called when the effect is applied.
@Override
public boolean applyUpdateEffect(ServerWorld world, LivingEntity entity, int amplifier) {
if (entity instanceof PlayerEntity) {
((PlayerEntity) entity).addExperience(1 << amplifier); // Higher amplifier gives you experience faster
}
return super.applyUpdateEffect(world, entity, amplifier);
}
}
Ähnlich wie bei der Registrierung von Blöcken und Items verwenden wir Registry.register
, um unseren benutzerdefinierten Effekt in der STATUS_EFFECT
-Registry zu registrieren. Dies kann in unserem Initialisierer geschehen.
public class FabricDocsReferenceEffects implements ModInitializer {
public static final RegistryEntry<StatusEffect> TATER;
static {
TATER = Registry.registerReference(Registries.STATUS_EFFECT, Identifier.of("fabric-docs-reference", "tater"), new TaterEffect());
}
@Override
public void onInitialize() {
// ...
}
}
Das Statuseffekt-Symbol ist ein 18x18 PNG. Platziere dein eigenes Icon in:
resources/assets/fabric-docs-reference/textures/mob_effect/tater.png
Wie jede andere Übersetzung kannst du einen Eintrag mit dem ID-Format "effect.<mod-id>.<effect-identifier>": "Wert"
zur Sprachdatei hinzufügen.
{
"effect.fabric-docs-reference.tater": "Tater"
}
Es lohnt sich, einen Blick darauf zu werfen, wie man normalerweise einen Effekt auf eine Entität anwendet.
TIP
For a quick test, it might be a better idea to use the previously mentioned /effect
command:
effect give @p fabric-docs-reference:tater
Um einen Effekt intern anzuwenden, sollte man die Methode LivingEntity#addStatusEffect
verwenden, die eine eine StatusEffectInstance
entgegennimmt und einen boolean zurückgibt, der angibt, ob der Effekt erfolgreich angewendet wurde.
var instance = new StatusEffectInstance(FabricDocsReferenceEffects.TATER, 5 * 20, 0, false, true, true);
entity.addStatusEffect(instance);
Argument | Typ | Beschreibung |
---|---|---|
effect | RegistryEntry<StatusEffect> | Ein Registrierungseintrag, der den Effekt repräsentiert. |
duration | int | Die Dauer des Effekts in Ticks, nicht in Sekunden |
amplifier | int | Der Verstärker auf das Level des Effekts. Es entspricht nicht dem Level des Effekts, sondern wird zusätzlich zu diesem hinzugefügt. Folglich, amplifier von 4 => Level von 5 |
ambient | v | Dies ist ein schwieriger. Es gibt im Grunde an, dass der Effekt durch die Umgebung (z. B. ein Leuchtfeuer) hinzugefügt wurde und keine direkte Ursache hat. Wenn true , wird das Icon des Effekts im HUD mit einer türkiesen Überlagerung erscheinen. |
particles | v | Ob Partikel angezeigt werden sollen. |
icon | v | Ob das Icon des Effekts im HUD angezeigt werden soll. Der Effekt wird im Inventar unabhängig von dieser Flag angezeigt. |
INFO
Um einen Trank zu erstellen, der diesen Effekt nutzt, lies bitte die Anleitung Tränke.