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

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

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
 
player.setRemainingAir(150); // Значение от 0 до 300

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

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

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

Назад
Верх