1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Сохранение эффектов зелий 1.15.2

Тема в разделе "Разработка плагинов для новичков", создана пользователем Qencels, 25 авг 2020.

Статус темы:
Закрыта.
  1. Автор темы
    Qencels

    Qencels Новичок

    Баллы:
    16
    Имя в Minecraft:
    Qencels
    Здравствуйте, форумчане.
    Недавно решил написать свой первый плагин, я уже видел подобный вопрос на форуме, но ответа там не нашёл.

    Суть проста: есть массив эффектов PotionEffectType с эффектами, которые можно сохранять (Например, PotionEffectType.SPEED). Эффекты на игроке есть уже заранее. Нужно отследить, какой эффект был на игроке до смерти и выдать его ему при респавне.

    Мне непонятно, как и когда сохранить конкретный эффект, потому что PlayerDeathEvent не сработал. Заранее спасибо!
     
  2. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Попробуй EntityDamageEvent с приоритетом monitor. Если event.getFinalDamage() больше или равен хп игрока, то можно сохранять.
     
  3. Автор темы
    Qencels

    Qencels Новичок

    Баллы:
    16
    Имя в Minecraft:
    Qencels
    А как мне найти игрока? Там только Entity, у которого нельзя посмотреть активные эффекты
     
  4. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Кастовать надо.
    Player player = (Player) entity;

    А почему PlayerDeathEvent не сработал? Не вызывался или на игроке уже эффектов не было в этот момент?
     
  5. Автор темы
    Qencels

    Qencels Новичок

    Баллы:
    16
    Имя в Minecraft:
    Qencels
    Спасибо, сейчас попробую. PlayerDeathEvent похоже что уже не было эффектов, на всякий случай оба варианта сейчас проверю ещё раз
     
  6. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Не забудь проверить тип сущности для EDE, иначе ошибку словишь.
     
  7. Автор темы
    Qencels

    Qencels Новичок

    Баллы:
    16
    Имя в Minecraft:
    Qencels
    Появилась другая проблема.
    effects = player.getActivePotionEffects();
    дальше в PlayerRespawnEvent у меня стоит: player.addPotionEffects(effects);

    Он не работает. Да, это выдача сразу всех эффектов, но я хотел хотя бы её сделать. Подскажите, что не так) По неопытности просто не вижу проблему.
     
  8. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Попробуй выдавать на тик позже
    Код:
    Bukkit.getServer().getScheduler().runTaskLater(plugin, () -> player.addPotionEffects(effects), 1L);
    или на 2 тика (2L). plugin - твой JavaPlugin.
     
  9. Автор темы
    Qencels

    Qencels Новичок

    Баллы:
    16
    Имя в Minecraft:
    Qencels
    Надеюсь это последний такой глупый вопрос... Я вписываю название плагина, он показывает ошибку cannot be resolved to a variable, погуглил, там у некоторых стоит .getPlugin(), тоже выдаёт ошибку
     
  10. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    А это уже проблемы с базовыми познаниями языка. Если у тебя этот код в классе JavaPlugin, то тебе достаточно заменить plugin на ключевое слово this. Если нет - воспользуйся паттерном Dependency injection. Например
    PHP:
    public class MyPlugin extends JavaPlugin {
        @
    Override
        
    public void onEnable() {
            
    //...
            
    MyListener listenter = new MyListener(this);
            
    bukkit.getPluginManager().registerEvents(listenerthis);
        }
    }

    public class 
    MyListener implements Listener {
        
    // ...
        
    private final Plugin plugin;
        
        public 
    MyListener(Plugin plugin) {
            
    this.plugin plugin;
            
    // ...
        
    }
        
       
    // ...
    }
     
  11. Автор темы
    Qencels

    Qencels Новичок

    Баллы:
    16
    Имя в Minecraft:
    Qencels
    Только что увидел это на зарубежном форуме. Всё работает. Огромное спасибо!
     
Статус темы:
Закрыта.

Поделиться этой страницей