Помогите Настройка хп игрока

  • Автор темы Автор темы RuVimer
  • Дата начала Дата начала

RuVimer

Ньюби
Баллы
1
Имя в Minecraft
RuVimer
Всем привет!
Нужна ваша помощь,
В Minecraft есть такая проблема как, много сердец которые закрывают пол экрана,
хочу сделать систему хп как на Hypixel, через %player_health% показывает полное хп, а сердца остались не тронутыми, уже 3 дня думаю как это сделать, есть идеи ?
 
Всем привет!
Нужна ваша помощь,
В Minecraft есть такая проблема как, много сердец которые закрывают пол экрана,
хочу сделать систему хп как на Hypixel, через %player_health% показывает полное хп, а сердца остались не тронутыми, уже 3 дня думаю как это сделать, есть идеи ?
Я не играл на Hypixel можно видео либо по подробнее объяснить
 
Я не играл на Hypixel можно видео либо по подробнее объяснить
Да, могу объяснить, у меня есть плагин который дает много жизней когда одеваешь определённую броню, примерно 500хп, когда у игрока 500хп то сердечки (хп) закрывают пол экрана, я бы хотел сократить количество сердец до 20, но при этом у игрока было 500хп, через API %player_health% можно увидеть хп игрока в виде double.
 
Думаю сделать именно так как ты это представляешь нельзя, смотри ты можешь сделать "искусственные" сердца, у игрока будет максимум 20 сердец(всегда), когда одеваешь то сердца добавляются в Map и при каждом получении урона(до 20 сердец) нечего не будет меняться, т.е игрок как бы будет получать урон но будут отниматься "искусственные" сердца
 
Думаю сделать именно так как ты это представляешь нельзя, смотри ты можешь сделать "искусственные" сердца, у игрока будет максимум 20 сердец(всегда), когда одеваешь то сердца добавляются в Map и при каждом получении урона(до 20 сердец) нечего не будет меняться, т.е игрок как бы будет получать урон но будут отниматься "искусственные" сердца
Вот именно так я и хотел :) а теперь скажи как это сделать :D
 
Как я и сказал ты делаешь Map, надевая эту броню ты делаешь не setMaxHealth, а map.put(name, map.get(name) + newHeart);
Получается, нужно сделать event где игрок будет одевать броню потом создать import java.util.Map; и всё туда запихать ? только не понял что такое name?
 
Получается, нужно сделать event где игрок будет одевать броню потом создать import java.util.Map; и всё туда запихать ? только не понял что такое name?
Map<K,V> : Это как банк с сейфами, Есть ячейка V(Value), но чтобы ее вытащить нужен ключ K(Key). Но чтобы было что вытаскивать ты должен сначала туда что-то поместить. У каждого игрока есть свой уникальный id(UUID),
это будет нашим ключем, а значением будет то сколько хп ты хочешь добавить
Код:
        Map<UUID, Double> PlayerHealth = new HashMap<UUID, Double>();
        PlayerHealth.put(Player.getUniqueId(), 500);
Дальше ты должен обрабатывать EntityDamageEvent, если в мапе есть игрок с хп то вычитаешь урон из хп в мапе, а сам урон сетаешь в 0. Еще тебе надо будет как-то от абуза этих сердец избавится, и возможно кастомный реген сердец в мапе сделать
 
Прям сейчас попытался сделать плагин, попробуй (вроде протестил, должен работать :D)

https://github.com/WhileInside/PublicPlugins/tree/master/HealthApi

Использование:
Код:
  HealthApi.setHealth(player, health)
  HealthApi.getHealth(player)
  HealthApi.getMaximumHealth(player)

Не забудь при выходе: (Это уже есть в HealthListener)
Код:
HealthApi.removeHealth(player);

В HealthListener при входе игрока ставится 40 хп, можешь убрать и сделать по своему.

P.S Можешь ещё попробывать setHealthScale (Если честно, мне ни разу не требовалось поменять максимальное хп игрока, так что как юзать setHealthScale я хз)

P.S.S не бейте за статики пж, делал по фасту, так что просто было лень делать без статиков :D
 
Map<K,V> : Это как банк с сейфами, Есть ячейка V(Value), но чтобы ее вытащить нужен ключ K(Key). Но чтобы было что вытаскивать ты должен сначала туда что-то поместить. У каждого игрока есть свой уникальный id(UUID),
это будет нашим ключем, а значением будет то сколько хп ты хочешь добавить
Код:
        Map<UUID, Double> PlayerHealth = new HashMap<UUID, Double>();
        PlayerHealth.put(Player.getUniqueId(), 500);
Дальше ты должен обрабатывать EntityDamageEvent, если в мапе есть игрок с хп то вычитаешь урон из хп в мапе, а сам урон сетаешь в 0. Еще тебе надо будет как-то от абуза этих сердец избавится, и возможно кастомный реген сердец в мапе сделать
@EventHandler
public void PlayerHealthFun(Player e)
{
Map<UUID, Double> PlayerHealth = new HashMap<UUID, Double>();
PlayerHealth.put(e.getUniqueId(), 500.0);
}

Вот так надо было ?
 
вот что бывает когда я использую setHealthScale в event PlayerJoinEvent
 

Вложения

  • 6666.PNG
    6666.PNG
    57,9 КБ · Просмотры: 21
  • 555.PNG
    555.PNG
    130,6 КБ · Просмотры: 20
Всем привет!
Нужна ваша помощь,
В Minecraft есть такая проблема как, много сердец которые закрывают пол экрана,
хочу сделать систему хп как на Hypixel, через %player_health% показывает полное хп, а сердца остались не тронутыми, уже 3 дня думаю как это сделать, есть идеи ?
Если не ошибаюсь то NBT тэги остаются даже после перезагрузки сервера, так что можешь попробовать сделать с помощью их, гараздо проще и приятнее работать(в зависимости от версии)
 
Назад
Верх