- Баллы
- 78
Нужно наложить на игрока эффект с мною заданным названием. Сейчас имею
MyEffect effect = new MyEffect(id, modifier, name, instant);
PotionEffect potionEffect = new PotionEffect(effect, time, amplifier);
player.addPotionEffect(potionEffect);
Теперь о проблеме. Перегрузка getName() ни чего не дала т.к. смотрим в код оберток(PotionEffectTypeWrapper) и видим
Т.е. имя он берет то которое прописано по нашему id в дефолтных эффектах.
Метод registerPotionEffectType(PotionEffectType type) так же не спасает, т.к. перезаписывает дефолтные эффекты, и в силу модификаторов private и final у массива эффектов мы не можем его расширить для ухода от перезаписи.
Как быть?
MyEffect effect = new MyEffect(id, modifier, name, instant);
PotionEffect potionEffect = new PotionEffect(effect, time, amplifier);
player.addPotionEffect(potionEffect);
Код:
public class MyEffect extends PotionEffectType {
private String name;
private double mod;
private boolean inst;
protected MyEffect(int id, double modifier, String name, boolean instant) {
super(id);
this.mod = modifier;
this.name = name;
this.inst = instant;
}
@Override
public String getName() {
return name;
}
// isInstant() и getDurationModifier() так же реализованы
}
Код:
@Override
public String getName() {
return getType().getName();
}
public PotionEffectType getType() {
return PotionEffectType.getById(getId());
}
Метод registerPotionEffectType(PotionEffectType type) так же не спасает, т.к. перезаписывает дефолтные эффекты, и в силу модификаторов private и final у массива эффектов мы не можем его расширить для ухода от перезаписи.
Как быть?