Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Эффект с кастомным названием

  • Автор темы Автор темы kris13
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

kris13

Активный участник
Пользователь
Баллы
78
Нужно наложить на игрока эффект с мною заданным названием. Сейчас имею
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() так же реализованы
}
Теперь о проблеме. Перегрузка getName() ни чего не дала т.к. смотрим в код оберток(PotionEffectTypeWrapper) и видим
Код:
@Override
public String getName() {
    return getType().getName();
}
public PotionEffectType getType() {
    return PotionEffectType.getById(getId());
}
Т.е. имя он берет то которое прописано по нашему id в дефолтных эффектах.
Метод registerPotionEffectType(PotionEffectType type) так же не спасает, т.к. перезаписывает дефолтные эффекты, и в силу модификаторов private и final у массива эффектов мы не можем его расширить для ухода от перезаписи.
Как быть?
 
С каких пор final и private мешает что- то сделать в переменной?
 
Самое топорное и простое решение - рефлексия.
 
Самое топорное и простое решение - рефлексия.
Ну просто очень не хочется использовать reflection, да и не будет ли проблем в передачи этого модифицированного добра. Т.е. очевидный вариант - увеличить массив стандартных эффектов и тут тот самый вопрос "а не полагается ли майн где-то что размерность этого массива ровно 24?", хоть и странно, но вдруг. А этот косяк в обертке, насколько я знаю java, не изменить.
 
А вообще ты не сможешь дать потионэффекту кастомное имя потому что оно гвозядми прибито в клиенте, имя изменится только на сервере.
 
А вообще ты не сможешь дать потионэффекту кастомное имя потому что оно гвозядми прибито в клиенте, имя изменится только на сервере.
Меня не пугают модификации клиента. Кстати это заявление побудило меня посмотреть код майна, вот что забавно в клиенте(1.5.2) массив эффектов имеет размерность 32. Ну и да, названия пришиты. На этом думается надо закрыть тему.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх