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

Помогите Поменять механику дыхания

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

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

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

    Баллы:
    66
    Имя в Minecraft:
    just_l0fe
    Хочу изменить механику дыхания так, что-бы под водой игрок мог чувствовать себя отлично, а на суше задыхаться. Саму механику я сделал так:

    Создал HashMap где храняться данные сколько игрок находиться на воздухе
    Код:
    private final HashMap<String, Integer> airTicks;
    Каждую секунду сделал вот такой код для определенного массива игроков:
    Код:
    @Override public void secondTick() {
            for(String string : ...) {
                Player target = Bukkit.getPlayer(string);
                if(target != null) {
                    if(target.isInWaterOrBubbleColumn()) airTicks.remove(string);
                    else {
                        airTicks.putIfAbsent(string, 0);
                        int airTick = airTicks.get(string);
                        airTick++;
                       
                        if(airTick >= (target.isInRain() ? 100 : 60))
                            target.damage(1);
                        airTicks.put(string, airTick);
                    }
                }
            }
        }
    Остаётся один вопрос. Хочу сделать отображение пузырьков воды - на воздухе, и что-бы они соотвественно пропадали в зависимости от времени нахождения на воздухе. И что-бы они не показывались когда игрок находится под водой.
    upload_2023-12-8_12-19-31.png
     
  2. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    player.setRemainingAir(150); // Значение от 0 до 300

    Но может мерцать, поскольку клиент сам изменяет это значение для себя при необходимости, если не наложены эффекты WATER_BREATHING и CONDUIT_POWER.
    Лично мне удавалось сократить количество мерцаний, когда я считал значение remaining air по такой формуле:
    (bubbles * 30) - 20
    Где bubbles - количество пузырьков от 0 до 10.

    Но есть альтернативный вариант - скрыть ванильные пузырьки ресурспаком и отображать свои собственные в нужный момент
     
    Последнее редактирование: 8 дек 2023

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