🇮🇹 Italiano (Italian)
🇮🇹 Italiano (Italian)
Aspetto
🇮🇹 Italiano (Italian)
🇮🇹 Italiano (Italian)
Aspetto
Questa pagina si applica alla versione:
1.21.4
Questa pagina si applica alla versione:
1.21.4
Gli effetti di stato, anche noti come effetti, sono una condizione che interessa un'entità. Possono essere positivi, negativi o neutrali in natura. Il gioco base applica questi effetti in vari modi, come cibi, pozioni ecc.
Il comando /effect
può essere usato per applicare effetti su un'entità.
In questo tutorial aggiungeremo un nuovo effetto personalizzato chiamato Tater che ti darà un punto esperienza in ogni tick di gioco.
StatusEffect
Creiamo una classe per il nostro effetto personalizzato estendendo StatusEffect
, che è la classe base per tutti gli effetti.
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);
}
}
Come nella registrazione di blocchi e oggetti, usiamo Registry.register
per registrare i nostri effetti personalizzati nella registry STATUS_EFFECT
. Questo può essere fatto nel nostro initializer.
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() {
// ...
}
}
L'icona dell'effetto è un PNG 18x18. Posiziona la tua icona personalizzata in:
resources/assets/fabric-docs-reference/textures/mob_effect/tater.png
Come ogni altra traduzione, puoi aggiungere una voce con formato ID "effect.mod-id.effect-identifier": "Valore"
al file di lingua.
{
"effect.fabric-docs-reference.tater": "Tater"
}
Vale la pena di dare un'occhiata a come si aggiunge solitamente un effetto ad un'entità.
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
Per applicare un effetto internamente, vorrai usare il metodo LivingEntity#addStatusEffect
, che prende una StatusEffectInstance
, e restituisce un booleano, che indica se l'effetto è stato applicato con successo.
var instance = new StatusEffectInstance(FabricDocsReferenceEffects.TATER, 5 * 20, 0, false, true, true);
entity.addStatusEffect(instance);
Argomento | Tipo | Descrizione |
---|---|---|
effect | RegistryEntry<StatusEffect> | Una voce di registry che rappresenta l'effetto. |
duration | int | La durata dell'effetto in tick; non in secondi |
amplifier | int | L'amplificatore al livello dell'effetto. Non corrisponde al livello dell'effetto, ma è invece aggiunto al di sopra. Per cui un amplifier di 4 => livello 5 |
ambient | boolean | Questo è un po' complesso. In pratica indica che l'effetto è stato aggiunto dall'ambiente (per esempio un Faro) e non ha una causa diretta. Se true , l'icona dell'effetto nel HUD avrà un overlay color ciano. |
particles | boolean | Se si mostrano le particelle. |
icon | boolean | Se si mostra un'icona dell'effetto nel HUD. L'effetto sarà mostrato nell'inventario indipendentemente da questo valore. |
INFO
INFO
Per creare una pozione che usa questo effetto, per favore vedi la guida Pozioni.