示例 Minecraft 版本:
Bedrock 1.20.80C -> S表示客户端发往服务器的数据包S -> C表示服务器发往客户端的数据包
飞行/Fly
- 修改
S -> Cupdate_abilities数据包
- 如果数据包的
entity_unique_id与当前玩家的 entity_unique_id 一致,则遍历abilities字段获得 ability 实例 - 把每个 ability 中
allowed字段的may_fly设为true - 把每个 ability 中
enabled字段的may_fly设为true
- 构造
S -> Cupdate_abilities数据包
- 把
entity_unique_id设为当前玩家的entity_unique_id - 把
abilities修改项与上一步一致 - 发送数据包给客户端
此方法会受到摔落伤害
速度/Speed
- 修改
S -> Cupdate_abilities数据包- 如果数据包的
entity_unique_id与当前玩家的 entity_unique_id 一致,则遍历abilities字段获得 ability 实例 - 修改每个 ability 的
walk_speed字段(默认是0.1)
- 如果数据包的
- 修改
S -> Cupdate_attributes数据包- 如果数据包的
runtime_entity_id与当前玩家的 runtime_entity_id 一致,则遍历attributes字段获得 attribute 实例 - 如果 attribute 的
name为minecraft:movement,则修改 attribute 的current和default字段(默认是0.1)
- 如果数据包的
传送/Teleport
构造 S -> C move_player 数据包
runtime_id设为当前玩家的runtime_entity_idposition设为目标位置的 Vec3{x, y, z}teleport可填
1 | { |
- 发送数据包给客户端
自动疾跑/AutoSprint
修改 C -> S player_input 数据包
- 设置
input_data中的start_sprinting为true
转头/SpinBot
修改 C -> S player_input 数据包
- 设置
head_yaw为目标头部偏航角 - 设置
yaw为目标偏航角 - 设置
pitch为目标俯仰角
设置角度为随机值即可实现乱转
此方法不影响当前客户端视角和移动
后记
- 通过
S -> Cstart_game数据包的runtime_entity_id字段获得当前玩家的 runtime_entity_id - 通过第一个
S -> Cupdate_abilities数据包的entity_unique_id字段获得当前玩家的 entity_unique_id