- Баллы
- 66
qq форум!
Нужно сделать так, чтобы вагонетка залезала на блок когда к нему подъезжает.
Однако всё не просто так: для перемещения я использую PacketEvent STEER_VEHICLE
Если использовать VehicleBlockCollisionEvent, то эвент работать как надо не будет. Вернее, работать будет, но только тогда, когда игрок не жмёт на W.
То есть игрок едет, жмет W, упирается в блок, должен отжать W и только потом вагонетка "подпрыгивает" на 1 блок.
Если возможно телепортировать вагонетку - скажите как, у меня ни один метод teleport не работает.
Нужно сделать так, чтобы вагонетка залезала на блок когда к нему подъезжает.
Однако всё не просто так: для перемещения я использую 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());
}
}