1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Vlad_007WOLFYATINA, 8 ноя 2020.

  1. Автор темы
    Vlad_007WOLFYATINA

    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());
            }
        }
     
  2. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Вагонетки они ваще неадекватные, юзай хак контроллера через BKCommonLib, сможешь напрямую управлять поведением вагонетки.
     
  3. Автор темы
    Vlad_007WOLFYATINA

    Vlad_007WOLFYATINA Активный участник Пользователь

    Баллы:
    66
    С BK никогда не работал, можешь сказать что мне нужно использовать хотя бы?
    Естественно с документацией ознакомплюсь, просто чтобы не тыкаться как дураку и не тратить много времени
     
  4. ifxandy

    ifxandy Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    witwar
    Вроде та ссылочка
    https://www.spigotmc.org/resources/bkcommonlib.39590/
    Там тычки на документации по возможностям есть.
     
    Последнее редактирование: 8 ноя 2020
  5. Автор темы
    Vlad_007WOLFYATINA

    Vlad_007WOLFYATINA Активный участник Пользователь

    Баллы:
    66
    Не могу ничего сделать(
    Можете помочь?
    По документации пробовал onBlockCollision, но к сожалению не смог ни переместить вагонетку, ни что-либо сделать.
    Использовал CommonMinecart
    P.S.
    Документация - блок с которым происходит коллизия и сторона блока BlockFace.
    Пробовал и телепортировать CommonMinecart, и использовать методы setChunkX (и аналогичные ему), ничего не помогло
     
  6. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ну все - выбрасывай. Если даже этим плагином ничего не смог..
     

Поделиться этой страницей