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 MobEffect {
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(MobEffectCategory.BENEFICIAL, 0xe9b8b3);
}
// Called every tick to check if the effect can be applied or not
@Override
public boolean shouldApplyEffectTickThisTick(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 applyEffectTick(ServerLevel world, LivingEntity entity, int amplifier) {
if (entity instanceof Player) {
((Player) entity).giveExperiencePoints(1 << amplifier); // Higher amplifier gives you experience faster
}
return super.applyEffectTick(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 ExampleModEffects implements ModInitializer {
public static final Holder<MobEffect> TATER =
Registry.registerForHolder(BuiltInRegistries.MOB_EFFECT, ResourceLocation.fromNamespaceAndPath(ExampleMod.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
Übersetzungen und Texturen
Du kannst deinem Statuseffekt einen Namen geben und ein Textursymbol erstellen, das in der Inventaroberfläche des Spielers angezeigt wird.
Texturen
Das Statuseffekt-Symbol ist ein 18x18 PNG. Platziere dein eigenes Icon in:
resources/assets/example-mod/textures/mob_effect/tater.png
Übersetzungen
Wie jede andere Übersetzung kannst du einen Eintrag mit dem ID-Format "effect.example-mod.<effect-identifier>": "Wert" zur Sprachdatei hinzufügen.





