@SubscribeEvent fun receive(ev: PacketReceiveEvent){ if (ev.isCancelled) return if (ev.packet.name != "PacketPlayInSteerVehicle") return val vehicle = ev.player.vehicle?: return val actionType = vehicle.getMeta("drive")?: return // 1.16.5及以下分别是a b c val list = if (MinecraftVersion.isUniversal) listOf("c", "d", "e") else listOf("a", "b", "c") val swSpeed = ev.packet.read<Float>(list[0])?: return// 前进速度 val adSpeed = ev.packet.read<Float>(list[1])?: return// 横向速度 val jumping = ev.packet.read<Boolean>(list[2])?: return val pLoc = ev.player.location vehicle.setRotation(pLoc.yaw, pLoc.pitch) val forwardDir = pLoc.direction val sideways = forwardDir.clone().crossProduct(Vector(0, -1, 0)) val total = forwardDir.multiply(adSpeed/10).add(sideways.multiply(swSpeed/5)) if (actionType == ModelManager.ActionType.FLY) { total.y = if (jumping) 0.5else0.0 }else { total.y = (if (jumping && vehicle.isOnGround) 0.5else0.0) } if (!vehicle.isOnGround) total.multiply(0.4) vehicle.velocity = vehicle.velocity.add(total) }