飞行踢出优化

飞行踢出优化

一个模组,用于在玩家因飞行被服务器踢出时,将玩家传送至地面。

游戏机制

Flight Kick Bypass

Flight Kick Bypass 图标

Flight Kick Bypass 是一个适用于 Minecraft 的服务端模组。

当玩家即将因为原版服务器的"长时间悬空/飞行"检测而被断开连接时,该模组会先将玩家传送到当前位置 X/Z 下方第一个具有碰撞体的方块顶部。之后,根据服务器配置,它要么继续执行原版的踢出流程,要么让玩家保持在线。

为什么制作此模组

某些模组方块的模型或碰撞行为可能导致玩家停留在服务器反复触发原版飞行检测的位置。网络问题也可能导致类似的重复断开连接。一旦发生这种情况,玩家在重新连接后可能会立即再次被踢出,这通常需要管理员手动移动玩家或通过服务器工具进行干预。

此模组通过在飞行踢出处理之前将玩家移动到下方有效方块上,减少了这类恢复操作的工作量。

功能

  • 处理原版的 multiplayer.disconnect.flying 踢出路径。
  • 在踢出处理之前,将玩家传送到其当前 X/Z 位置下方最近的方块之上。
  • 传送后重置速度和坠落距离。
  • 支持普通玩家的悬空踢出和载具上的悬空踢出。
  • 可配置为在成功传送后让玩家保持在线。
  • 如果在玩家正下方未找到方块,可扩展搜索到可配置的正方形半径范围。
  • 在配置加载和重载时记录加载的配置状态。

配置

两个加载器实现使用相同的键和默认值。

NeoForge 将服务端配置写入 <world>/serverconfig/flightkickbypass-server.toml:

kickAfterTeleport = true
expandedSearchRadius = 0
disconnectMessageSuffix = "Teleported to the nearest safe position before disconnecting."
teleportMessage = "Flying was detected for too long, so you were teleported to the nearest safe position instead of being disconnected."

Fabric 写入 config/flightkickbypass.json:

{
  "kickAfterTeleport": true,
  "expandedSearchRadius": 0,
  "disconnectMessageSuffix": "Teleported to the nearest safe position before disconnecting.",
  "teleportMessage": "Flying was detected for too long, so you were teleported to the nearest safe position instead of being disconnected."
}

kickAfterTeleport 选项说明:

  • true 默认值:将玩家传送到地面,然后继续执行原版的踢出流程。
  • false:如果传送成功,则取消踢出并重置悬浮计数器。如果在玩家下方未找到有效方块,仍会执行原版踢出。

expandedSearchRadius 选项说明:

  • 0 默认值:仅在玩家正下方搜索。
  • 大于 0:如果正下方搜索失败,则在玩家当前方块位置周围的正方形区域内搜索。值为 r 时,搜索一个 (2r + 1) x (2r + 1) 的正方形范围。

面向玩家的消息:

  • disconnectMessageSuffix:当 kickAfterTeleport 为 true 且成功传送后,追加到飞行踢出原因的新一行中。将其设置为空字符串可禁用额外行。
  • teleportMessage:当 kickAfterTeleport 为 false 且成功传送后,作为系统消息发送给玩家。将其设置为空字符串可禁用此消息。

备注

此模组不授予飞行权限,也不更改原版的移动检测本身。它仅更改在原版飞行断开连接处理前立即发生的行为。

项目图标为 AI 生成的说明性美术图,并非游戏内截图。