Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

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

Discussion in 'Разработка плагинов для новичков' started by kris13, Mar 10, 2014.

Thread Status:
Not open for further replies.
  1. Автор темы
    kris13

    kris13 Активный участник Пользователь

    Trophy Points:
    78
    Нужно наложить на игрока эффект с мною заданным названием. Сейчас имею
    MyEffect effect = new MyEffect(id, modifier, name, instant);
    PotionEffect potionEffect = new PotionEffect(effect, time, amplifier);
    player.addPotionEffect(potionEffect);
    Code:
    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) и видим
    Code:
    @Override
    public String getName() {
        return getType().getName();
    }
    public PotionEffectType getType() {
        return PotionEffectType.getById(getId());
    }
    Т.е. имя он берет то которое прописано по нашему id в дефолтных эффектах.
    Метод registerPotionEffectType(PotionEffectType type) так же не спасает, т.к. перезаписывает дефолтные эффекты, и в силу модификаторов private и final у массива эффектов мы не можем его расширить для ухода от перезаписи.
    Как быть?
     
  2. Хостинг MineCraft
    <
  3. Shevchik

    Shevchik Старожил Пользователь

    Trophy Points:
    173
    Имя в Minecraft:
    _Shevchik_
    С каких пор final и private мешает что- то сделать в переменной?
     
  4. Sirse

    Sirse Старожил Пользователь

    Trophy Points:
    173
    Имя в Minecraft:
    Sirse
    Самое топорное и простое решение - рефлексия.
     
    Den_Abr and ql_Nik_lp like this.
  5. Автор темы
    kris13

    kris13 Активный участник Пользователь

    Trophy Points:
    78
    Ну просто очень не хочется использовать reflection, да и не будет ли проблем в передачи этого модифицированного добра. Т.е. очевидный вариант - увеличить массив стандартных эффектов и тут тот самый вопрос "а не полагается ли майн где-то что размерность этого массива ровно 24?", хоть и странно, но вдруг. А этот косяк в обертке, насколько я знаю java, не изменить.
     
  6. Shevchik

    Shevchik Старожил Пользователь

    Trophy Points:
    173
    Имя в Minecraft:
    _Shevchik_
    А вообще ты не сможешь дать потионэффекту кастомное имя потому что оно гвозядми прибито в клиенте, имя изменится только на сервере.
     
    Den_Abr likes this.
  7. Автор темы
    kris13

    kris13 Активный участник Пользователь

    Trophy Points:
    78
    Меня не пугают модификации клиента. Кстати это заявление побудило меня посмотреть код майна, вот что забавно в клиенте(1.5.2) массив эффектов имеет размерность 32. Ну и да, названия пришиты. На этом думается надо закрыть тему.
     
Thread Status:
Not open for further replies.

Share This Page