Помогите Удар без потери HP, ограничение события Областью

Petrmax

Ньюби
Баллы
1
Имя в Minecraft
XYZ
Здравствуйте, столкнулся с такой проблемой, что не могу настроить пвп между игроками так, чтобы их HP не изменялось, при setHealth(20) плагин учитывает сначала установку HP, только потом урон от атакующего. Получается что здоровье колебается на 8-19 еденицах. Также не имею представления, как выделить область где будет выполняться данное событие. (К примеру на x y z, x2 y2 z2 координатах игроки будут драться без потери HP)


Кусок кода.

@EventHandler(priority = EventPriority.HIGHEST)
public void spawnFights(EntityDamageByEntityEvent event){

Entity damager = event.getDamager();
Entity damaged = event.getEntity();

if ((damaged instanceof Player) && (damager instanceof Player)) {

((Player) damaged).setHealth(20);
((Player) damager).setHealth(20);

}
}

Я ньюби, не бейте.
 
Также не имею представления, как выделить область где будет выполняться данное событие. (К примеру на x y z, x2 y2 z2 координатах игроки будут драться без потери HP
Советую освоить начальный школьный курс геометрии
 
Что я не так написал-то? Лучше бы помогли, весь интернет перерыл.
setHealth делай в отдельном таске без задержки. Тогда оно будет выполнятся после события.
Подробнее о тасках:
https://bukkit.gamepedia.com/Scheduler_Programming
Пример:
Код:
Bukkit.getScheduler().runTask(() -> {
    // setHealth
}
 
setHealth делай в отдельном таске без задержки. Тогда оно будет выполнятся после события.
Подробнее о тасках:
https://bukkit.gamepedia.com/Scheduler_Programming
Пример:
Код:
Bukkit.getScheduler().runTask(() -> {
    // setHealth
}
Спасибо, а есть какой-то источник насчёт ограничения событий областью на карте?
 
Мне кажется, что будет уместно выставить количество наносимого урона в 0 при помощи метода
void setDamage(double damage). По поводу локаций: нужно проверить, что координаты x1 > xтекущ > x2, тоже самое с y и z, где x1 -- максимальная X координата локации, x2 -- минимальная X координата локации, а xтекущ -- соответственно, текущая X координата игрока. И да, это школьный курс геометрии.
 
Спасибо, а есть какой-то источник насчёт ограничения событий областью на карте?
Нет, это самые обычные if проверки, которые ты можешь сделать и в нужный случай отменить событие.
 
Делается всё немного проще.
1. Если нужна область - задаёшь ее либо вручную координатами, либо делаешь для этого отдельный предмет, чтобы выделять область в процессе игры, заносишь область в базу, и потом, при получении игрокОМ урона смотришь, принадлежат ли его координаты выше записанной области.
2. Чтобы отменить урон от удара - просто отмени ивент: event.setCancelled(true)
 
2. Чтобы отменить урон от удара - просто отмени ивент: event.setCancelled(true)

Пробовал так, если отменить ивент, то не только пропадёт урон, но и сам удар.

Нормально инфы накидали, думаю разберусь, спасибо.
 
Назад
Верх