【Lv:1】
使用后,坐骑虽然是飞行状态,但是只能很慢的滑动,在地面上也是很慢的滑动,走路都是直接没有了,也无法往高处飞,这是为什么继承NMS实体,比如FlyPig extends EntityPig
重写public void a(float f, float f1, float f2)
[MD] ```java @Override public void a(float strafe, float vertical, float forward) { if (this.isVehicle() && this.passengers != null && !this.passengers.isEmpty()) { EntityLiving rider = (EntityLiving) this.passengers.get(0); Field bd = EntityLiving.class.getDeclaredField("bd");bd.setAccessible(true); boolean riderJumping = bd.getBoolean(rider); if(riderJumping) { this.motY = 1D; this.move(EnumMoveType.SELF, this.motX, this.motY, this.motZ); } } } ``` [/MD]
你也可以依赖ProtocolLib,监听PacketType.Play.Client.STEER_VEHICLE包,
packet.getBooleans().read(0)获取玩家是否跳跃
player.getVehicle().setVelocity(new Vector(0,1,0));
【Lv:1】
[MD] ```java ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(Tianren.plugin, PacketType.Play.Client.STEER_VEHICLE) { @Override public void onPacketReceiving(PacketEvent event) { PacketContainer packet = event.getPacket(); float forward = packet.getFloat().read(1); float strafe = packet.getFloat().read(0); boolean isJumping = packet.getBooleans().read(0); double speed = 0.5D; double ascentSpeed = 0.5D; Player player = event.getPlayer(); Entity vehicle = player.getVehicle(); Vector direction = player.getEyeLocation().getDirection(); Vector moveVector = new Vector(0, 0, 0); if (forward != 0 || strafe != 0) { moveVector = direction.clone().multiply(Math.signum(forward) * speed); moveVector.add(new Vector(direction.getZ(), 0, -direction.getX()).normalize().multiply(Math.signum(strafe)* speed)); } moveVector.setY(vehicle.getVelocity().getY()*0.9); if(isJumping) moveVector.setY(ascentSpeed); vehicle.setVelocity(moveVector); } }); ``` [/MD]使用后,坐骑虽然是飞行状态,但是只能很慢的滑动,在地面上也是很慢的滑动,走路都是直接没有了,也无法往高处飞,这是为什么