Как сделать проверку на прыжок не больше половины блока

Ght

Пользователь
Сообщения
157
Решения
11
Название темы должно быть информативным, максимально четко отражая смысл проблемы
Привет всем, пишу плагин для РП сервера, на анти-бхоп (спринт+прыжок)
И столкнулся с двумя проблемами.
1 - Не возвращает на блок с которого был совершен прыжок, а лишь отменяет прыжок после самого прыжка
Например: человек прыгнул, его координата достигла 64.5 и прыжок отменяется (дальше его координата выше не растёт)
А должен быть полный возврат на ту же координату откуда был совершён прыжок, либо перехватывать прыжок и отменять его ещё ДО самого изменения координаты
2 - Трудно объяснить, вот видео -
You must be registered for see medias

@EventHandler
public void onPlayerMove(PlayerMoveEvent e) {
Player p = e.getPlayer();
Location loc = e.getFrom(), to = e.getTo();
if (p.getGameMode() == GameMode.CREATIVE || p.getGameMode() == GameMode.SPECTATOR)
return;

if (to.getBlockY() > loc.getBlockY() && e.getPlayer().isSprinting())
{
e.setCancelled(true);
p.playSound(p.getLocation(), Sound.BLOCK_NOTE_BLOCK_BASS, 1, 0);
p.sendActionBar(ChatColor.RED + "Баннихоп запрещён!");
p.sendTitle(ChatColor.RED + "ERROR", ChatColor.WHITE + "Баннихоп запрещён" + ChatColor.RED + "!", 2, 20, 10);
}
}

Объединено

И такая проблема не только со ступенями, если мотыгой или лопатой вскопать землю, если зажать спринт и выбежать с вскопанной земли, будет происходить тоже самое
 
Последнее редактирование:
Глупый вопрос, но каким способом?
e.getTo().setY(loc.getBlockY())
e.getTo().setY(loc.getBlockY()) ?
Объединено

так просто телепортируйте на первоначальные координаты, откуда это произошло.
Хорошо, а что по поводу первого бага?
 
- телепортировать игрока в заданную локацию (заданной будет предыдущая, то есть e.getFrom()).
Хорошо, но как быть с тем что на ступеньках и вскопанной земле, не даёт со спринтом пробежаться
 
Убрать проверку на координаты или спринт из if'а...
Я не понимаю, что требуется из этого
Но тогда вопрос, как мне сделать проверку что бы не было бхопа? (Спринт+прыжок)? Если я уберу проверку координаты, то будет лишь проверка спринта.. и наоборот
 
Если вам нужно запрещать прыгать выше .5 (половины) блока, то делайте проверку на эту долю блока, а не просто сравнение выше/ниже
А вот с этим я затрудняюсь. Не подскажите как конкретно это сделать?
 
Как минимум один способ решения есть:
double fractionalY = loc.getY() - loc.getBlockY() - вернёт дробное число 0.y
Его сравнивайте if (fractionalY больше меньше равно и т.д. какое-то дробное число 0.y, например 0.5)

Вообще, есть ещё метод player.isOnGround(), который показывает, находится игрок на земле или в воздухе, с ним тоже стоит попробовать создать нужную вам механику.
 
Второй метод мне больше подошёл. Но теперь другая проблемка, со ступенек спускаться со спринтом нельзя. Возможно ли как-это и это исправить?
Объединено

UP
 
Последнее редактирование:
Назад
Сверху Снизу