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

Стартап [ПЕРЕВОД] Звуковые константы и другое в разных версиях

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

  1. Автор темы
    Dexel

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

    Баллы:
    76
    Звуковые константы и другое в разных версиях
    Как использовать изменяющиеся константы, такие, как Sound, в мультиверсионном плагине
    --------------------------------------------------------------------------------------------------------------------
    Если вы хотите воспроизвести в плагине звук для игрока, это очень просто! Вам просто нужно выполнить
    Код:
    player.playSound(player.getEyeLocation(), Sound.BLOCK_NOTE_PLING, 1, 1);
    Но что тут не так? В 1.9 названия звуков в константах Sound были изменены на похожие на те, что мы используем в команде /playsound. Вы можете заметить это здесь:

    До 1.9
    После 1.9


    Так, любой плагин, сделанный для 1.7/1.8, больше не работает на 1.9! Итак... Как сделать плагин на 1.9 совместимым с предыдущими версиями? Ну, вы можете создать выражение if для номера версии... давайте попробуем!
    Код:
    if (Bukkit.getVersion().contains("1.9")) {
         player.playSound(player.getEyeLocation(), Sound.BLOCK_NOTE_PLING, 1, 1);
    } else {
         player.playSound(player.getEyeLocation(), Sound.NOTE_PLING, 1, 1);
    }
    Что ж, к сожалению, это тоже не будет работать. Почему? Потому что звук NOTE_PLING не существует в версии 1.9, а вы используете в качестве библиотеки 1.9! И не пытайтесь сменить версию, тогда не будет работать первый звук! И что теперь делать, использовать две библиотеки одновременно? Вообще, нет. Это было бы глупо. Вместо этого сделайте так:
    Код:
    if (Bukkit.getVersion().contains("1.9")) {
         player.playSound(player.getEyeLocation(), Sound.valueOf("BLOCK_NOTE_PLING"), 1, 1);
    } else {
         player.playSound(player.getEyeLocation(), Sound.valueOf("NOTE_PLING"), 1, 1);
    }
    Теперь это будет работать! Вы можете сжать это до одной строки, немного жертвуя читабельностью, вот так:
    Код:
    player.playSound(player.getEyeLocation(), Sound.valueOf(Bukkit.getVersion().contains("1.9") ? "BLOCK_NOTE_PLING" : "NOTE_PLING"), 1, 1);
    Если вы делаете что-то, что очень сильно использует звуки, вы можете сделать отдельный вспомогательный метод, который делает что-то в этом роде:
    Код:
    public static String getPre1_9Name(Sound sound) {
         switch (sound) {
              case BLOCK_NOTE_PLING: return "NOTE_PLING";
              case ENTITY_ITEM_BREAK: return "ITEM_BREAK";
         }
    }
    и так далее.

    Этот простой трюк сможет открыть ваш плагин для большей аудитории версии, продолжая использовать эти замечательные звуковые эффекты! (ваш плагин смогут юзать на школосерверах - прим.ред.)
     

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