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

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

Dexel

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
SiRiuS_OSiRiuS
Звуковые константы и другое в разных версиях
Как использовать изменяющиеся константы, такие, как Sound, в мультиверсионном плагине
--------------------------------------------------------------------------------------------------------------------
​
Если вы хотите воспроизвести в плагине звук для игрока, это очень просто! Вам просто нужно выполнить
Java:
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 для номера версии... давайте попробуем!
Java:
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! И не пытайтесь сменить версию, тогда не будет работать первый звук! И что теперь делать, использовать две библиотеки одновременно? Вообще, нет. Это было бы глупо. Вместо этого сделайте так:
Java:
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);
}
Теперь это будет работать! Вы можете сжать это до одной строки, немного жертвуя читабельностью, вот так:
Java:
player.playSound(player.getEyeLocation(), Sound.valueOf(Bukkit.getVersion().contains("1.9") ? "BLOCK_NOTE_PLING" : "NOTE_PLING"), 1, 1);
Если вы делаете что-то, что очень сильно использует звуки, вы можете сделать отдельный вспомогательный метод, который делает что-то в этом роде:
Java:
public static String getPre1_9Name(Sound sound) {
     switch (sound) {
          case BLOCK_NOTE_PLING: return "NOTE_PLING";
          case ENTITY_ITEM_BREAK: return "ITEM_BREAK";
     }
}
и так далее.

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

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

Назад
Верх