Помогите "залезающая" вагонетка 1.16.2

Vlad_007WOLFYATINA

Активный участник
Пользователь
Баллы
66
qq форум!
Нужно сделать так, чтобы вагонетка залезала на блок когда к нему подъезжает.
Однако всё не просто так: для перемещения я использую PacketEvent STEER_VEHICLE
Если использовать VehicleBlockCollisionEvent, то эвент работать как надо не будет. Вернее, работать будет, но только тогда, когда игрок не жмёт на W.
То есть игрок едет, жмет W, упирается в блок, должен отжать W и только потом вагонетка "подпрыгивает" на 1 блок.
Если возможно телепортировать вагонетку - скажите как, у меня ни один метод teleport не работает.

Код:
@Override
    public void onEnable()
    {
        Bukkit.getServer().getPluginManager().registerEvents(this, this);
        protocolManager = ProtocolLibrary.getProtocolManager();
        protocolManager.addPacketListener(
                  new PacketAdapter(this, ListenerPriority.LOW,
                          PacketType.Play.Client.STEER_VEHICLE) {
                    @Override
                    public void onPacketReceiving(PacketEvent event) {
                        if(event.getPacketType() == PacketType.Play.Client.STEER_VEHICLE)
                        {
                            PacketContainer container = event.getPacket();
                            Player player = event.getPlayer();
                            Float forward = container.getFloat().read(1);
                            Minecart cart = (Minecart)player.getVehicle();
                            cart.setMaxSpeed(20);
                            cart.setRotation(player.getEyeLocation().getYaw() + 90, 0);
                            //0.22582692197254187 - player.getEyeLocation().getDirection().normalize().getY()
                            Vector path = new Vector(player.getEyeLocation().getDirection().getX(), player.getVelocity().getY(), player.getEyeLocation().getDirection().getZ());
                            if(cart.getLocation().getBlock().getType() == Material.WATER)
                            {
                                for(Entity en : cart.getPassengers())
                                {
                                    cart.removePassenger(en);
                                }
                                minecarts.remove(player.getVehicle());
                                player.getVehicle().setInvulnerable(true);
                            }
                            if(manager.isForward(forward) == true)
                            {
                                cart.setVelocity(path.normalize());
                                player.getLocation().getWorld().playEffect(player.getLocation(), Effect.SMOKE, 9);
                            }
                        }
                    }
                });
    }

@EventHandler(priority = EventPriority.HIGHEST)
    public void onMinecartCollision(VehicleBlockCollisionEvent event)
    {
        if(event.getBlock().getType() != Material.GRASS && event.getBlock().getType() != Material.TALL_GRASS && event.getBlock().getType() != Material.RED_TULIP && event.getBlock().getType() != Material.ORANGE_TULIP && event.getBlock().getType() != Material.WHITE_TULIP && event.getBlock().getType() != Material.WHITE_TULIP && event.getBlock().getType() != Material.DANDELION && event.getBlock().getType() != Material.AZURE_BLUET && event.getBlock().getType() != Material.OXEYE_DAISY && event.getBlock().getType() != Material.LARGE_FERN && event.getBlock().getType() != Material.FERN
        && event.getBlock().getType() != Material.PINK_TULIP)
        {
            Player p = (Player)event.getVehicle().getPassengers().get(0);
            Vector path = p.getLocation().getDirection().normalize().multiply(-1);
            //Vector vector = new Vector(path);
            for(Player pl : Bukkit.getOnlinePlayers())
            {
                pl.sendMessage(path.toString());
            }
            event.getVehicle().setVelocity(path.normalize());
        }
    }
 
Вагонетки они ваще неадекватные, юзай хак контроллера через BKCommonLib, сможешь напрямую управлять поведением вагонетки.
 
С BK никогда не работал, можешь сказать что мне нужно использовать хотя бы?
Естественно с документацией ознакомплюсь, просто чтобы не тыкаться как дураку и не тратить много времени
 
С BK никогда не работал, можешь сказать что мне нужно использовать хотя бы?
Естественно с документацией ознакомплюсь, просто чтобы не тыкаться как дураку и не тратить много времени
Вроде та ссылочка
https://www.spigotmc.org/resources/bkcommonlib.39590/
Там тычки на документации по возможностям есть.
 
Последнее редактирование:
Вроде та ссылочка
https://www.spigotmc.org/resources/bkcommonlib.39590/
Там тычки на документации по возможностям есть.
Не могу ничего сделать(
Можете помочь?
По документации пробовал onBlockCollision, но к сожалению не смог ни переместить вагонетку, ни что-либо сделать.
Использовал CommonMinecart
P.S.
Документация - блок с которым происходит коллизия и сторона блока BlockFace.
Пробовал и телепортировать CommonMinecart, и использовать методы setChunkX (и аналогичные ему), ничего не помогло
 
Ну все - выбрасывай. Если даже этим плагином ничего не смог..
 
Назад
Верх