Вопрос Проверка на прыжок + бег по снегу

Версия Minecraft
1.16.X

Ght

Пользователь
Сообщения
157
Решения
11
Пару месяцев назад писал плагин, на анти-бхоп. Но недавно обнаружил такую проблему что на полу-блоках и снегу(minecraft:snow) код не реагирует, и соответственно отмена прыжка - не происходит


Java:
            if (e.getTo().getY() > e.getFrom().getY()) {
                if (e.getPlayer().isSprinting() && p.getLocation().subtract(0, 0.1, 0).getBlock().getType().equals(Material.AIR) && !p.isOnGround()) {
                    e.setCancelled(true);
                    p.teleport(e.getFrom());
                    p.playSound(p.getLocation(), Sound.BLOCK_NOTE_BLOCK_BASS, 1, 0);
                    p.sendActionBar(msgbar);
                    p.sendTitle(msgtitle, msgsubtitle, 2, 20, 10);
                }
            }

А так же хотелось бы узнать, как сделать моментальную проверку и выполнение кода, то есть будто игрок не может прыгать вовсе
 
Решение
Полный код вот так выглядит если кто хочет знать
Java:
    public void onPlayerMoveEvent(PlayerMoveEvent e) {
        Player p = e.getPlayer();
        String msgbar = ChatColor.translateAlternateColorCodes('&', Config.getConfig().getString("Action-bar"));
        String msgtitle = ChatColor.translateAlternateColorCodes('&', Config.getConfig().getString("Title"));
        String msgsubtitle = ChatColor.translateAlternateColorCodes('&', Config.getConfig().getString("Subtitle"));
        if (AbhCommand.status == false) {
            return;
        }
        if (p.getGameMode() == GameMode.CREATIVE || p.getGameMode() == GameMode.SPECTATOR || p.hasPermission("abh.access")) {
            return;
        }

        if (e.isCancelled()) {...
Java:
public void onPlayerMove(PlayerMoveEvent event) {
    Player player = event.getPlayer();
    Location from = event.getFrom();
    Location to = event.getTo();
    Block blockUnder = to.subtract(0, 1, 0).getBlock();
   
    if (blockUnder.getType() == Material.SNOW || blockUnder.getType().isSolid() && !blockUnder.getType().isOccluding()) {
        if (to.getY() > from.getY()) {
            event.setCancelled(true);
            player.teleport(from);
            player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_BASS, 1, 0);
            p.sendActionBar(msgbar);
            p.sendTitle(msgtitle, msgsubtitle, 2, 20, 10);
        }
    }
}
 
Java:
public void onPlayerMove(PlayerMoveEvent event) {
    Player player = event.getPlayer();
    Location from = event.getFrom();
    Location to = event.getTo();
    Block blockUnder = to.subtract(0, 1, 0).getBlock();
  
    if (blockUnder.getType() == Material.SNOW || blockUnder.getType().isSolid() && !blockUnder.getType().isOccluding()) {
        if (to.getY() > from.getY()) {
            event.setCancelled(true);
            player.teleport(from);
            player.playSound(player.getLocation(), Sound.BLOCK_NOTE_BLOCK_BASS, 1, 0);
            p.sendActionBar(msgbar);
            p.sendTitle(msgtitle, msgsubtitle, 2, 20, 10);
        }
    }
}
Проверил - бесконечно опускает на 1 блок вплоть до 5-й высоты
 
Полный код вот так выглядит если кто хочет знать
Java:
    public void onPlayerMoveEvent(PlayerMoveEvent e) {
        Player p = e.getPlayer();
        String msgbar = ChatColor.translateAlternateColorCodes('&', Config.getConfig().getString("Action-bar"));
        String msgtitle = ChatColor.translateAlternateColorCodes('&', Config.getConfig().getString("Title"));
        String msgsubtitle = ChatColor.translateAlternateColorCodes('&', Config.getConfig().getString("Subtitle"));
        if (AbhCommand.status == false) {
            return;
        }
        if (p.getGameMode() == GameMode.CREATIVE || p.getGameMode() == GameMode.SPECTATOR || p.hasPermission("abh.access")) {
            return;
        }

        if (e.isCancelled()) {
            return;
        }

            if (e.getTo().getY() > e.getFrom().getY()) {
                if (e.getPlayer().isSprinting() && p.getLocation().subtract(0, 0.1, 0).getBlock().getType().equals(Material.AIR) && !p.isOnGround()) {
                    e.setCancelled(true);
                    p.teleport(e.getFrom());
                    p.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 30, 5000));
                    p.playSound(p.getLocation(), Sound.BLOCK_NOTE_BLOCK_BASS, 1, 0);
                    p.sendActionBar(msgbar);
                    p.sendTitle(msgtitle, msgsubtitle, 2, 20, 10);
                }
            }
    }
Объединено

Решил проблему изменил
Java:
p.getLocation().subtract(0, 0.1, 0) -> p.getLocation().subtract(0, 0, 0)
 
Назад
Сверху Снизу