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.
Benutzerdefinierte Statuseffekte
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.
java
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);
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Deinen benutzerdefinierten Effekt registrieren
Ä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.
java
public class FabricDocsReferenceEffects implements ModInitializer {
public static final RegistryEntry<StatusEffect> TATER =
Registry.registerReference(Registries.STATUS_EFFECT, Identifier.of(FabricDocsReference.MOD_ID, "tater"), new TaterEffect());
@Override
public void onInitialize() {
// ...
}
}1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
Texturen
Das Statuseffekt-Symbol ist ein 18x18 PNG. Platziere dein eigenes Icon in:
resources/assets/fabric-docs-reference/textures/mob_effect/tater.pngÜbersetzungen
Wie jede andere Übersetzung kannst du einen Eintrag mit dem ID-Format "effect.mod-id.effect-identifier": "Wert" zur Sprachdatei hinzufügen.
json
{
"effect.fabric-docs-reference.tater": "Tater"
}1
2
3
2
3
Einen Effekt anwenden
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:
mcfunction
effect give @p fabric-docs-reference:tater1
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.
java
var instance = new StatusEffectInstance(FabricDocsReferenceEffects.TATER, 5 * 20, 0, false, true, true);
entity.addStatusEffect(instance);1
2
2
| 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.







