CannonRTP 配置
CannonRTP 使用一个全局配置文件加上每个炮台一个配置文件。
文件布局
- 全局配置:
plugins/CannonRTP/config.yml - 炮台配置:
plugins/CannonRTP/custom/fun_rtps/<id>.yml
插件还附带一个名为 example_world_cannon 的示例炮台包。默认禁用。
全局配置结构
主配置组织在:
runtime.*landing.*messages.*protection.*
运行时设置
| 键 | 默认值 | 行为 |
|---|---|---|
runtime.scanIntervalTicks | 2 | 炮台检查附近玩家的频率(最小 2) |
runtime.particleIntervalTicks | 15 | 闲置炮台粒子渲染频率(最小 5) |
着陆搜索设置
| 键 | 默认值 | 行为 |
|---|---|---|
landing.searchAttemptsPerTick | 2 | 预加载期间每炮台每刻的搜索尝试次数(最小 1) |
landing.preloadedLocationsPerCannon | 10 | 插件尝试为每个炮台在队列中保持的安全目的地总数(最小 1) |
landing.chargedLocationsPerCannon | 5 | 炮台被视为充能完成和发射就绪所需的位置数(最小 1,上限为 preloadedLocationsPerCannon) |
landing.searchTimeoutSeconds | 1000 | 仍在搜索的炮台被标记为耗尽之前的时间(秒)(最小 10) |
landing.slowFallingSeconds | 60 | 到达后缓慢下降持续时间(秒);玩家着地时效果提前移除(最小 1) |
landing.failOpenOnProtectionErrors | false | 如果保护 API 报错,默认阻止着陆 |
着陆音效
以下音效键可配置:
landing.sounds.levitationStart.sound(默认:BLOCK_BEACON_ACTIVATE)landing.sounds.levitationStart.volume(默认:1.0)landing.sounds.levitationStart.pitch(默认:1.15)landing.sounds.blastOff.sound(默认:ENTITY_GENERIC_EXPLODE)landing.sounds.blastOff.volume(默认:1.0)landing.sounds.blastOff.pitch(默认:0.9)
音效值使用 Bukkit 的 Sound 注册名或命名空间键。无效的音效名会被记录为警告,音效会被静默跳过。
不安全材料列表
CannonRTP 根据两个材料列表拒绝着陆候选点:
landing.unsafeGroundMaterials-- 绝不应该站立其上的方块landing.unsafeBodyMaterials-- 绝不应该占据脚部或头部空间的方块
默认不安全地面材料:
LAVAMAGMA_BLOCKCAMPFIRESOUL_CAMPFIRECACTUSPOWDER_SNOW
默认不安全身体材料:
LAVAWATERFIRESOUL_FIRESWEET_BERRY_BUSHPOWDER_SNOWCOBWEB
消息设置
所有消息支持 MagmaCore 渐变、MiniMessage 标签和旧版颜色代码。$prefix 占位符会被替换为配置的前缀值。
消息键、占位符和描述的完整列表请参考英文文档 -- 配置键不会被翻译。
预热期间的坐标预览不会显示实际目的地 -- 它显示炮台搜索区域内的随机坐标作为视觉效果。真实目的地仅在确认标题中揭示。
炮台配置字段
每个炮台文件(plugins/CannonRTP/custom/fun_rtps/<id>.yml)存储以下字段:
| 字段 | 默认值 | 说明 |
|---|---|---|
isEnabled | 新创建的炮台为 true | 禁用的炮台不会触发 |
displayName | CannonRTP(或创建时提供的名称) | 用于消息、状态输出和浮动标签 |
cannonLocation | 必填 | 炮台触发器的位置 |
targetWorld | 创建时的当前世界 | 运行时必须已加载 |
searchCenter | null(回退到目标世界的出生点) | 未设置时,插件使用目标世界的出生点位置 |
triggerRadius | 1.75 | 检测附近玩家的半径(最小 0.5) |
minSearchRadius | 500 | 从搜索中心的最小着陆搜索距离(最小 0) |
maxSearchRadius | 5000 | 从搜索中心的最大着陆搜索距离(始终至少为 minSearchRadius + 1) |
launchWarmupSeconds | 6 | 发射前的漂浮/倒计时时间(最小 0;为 0 时立即发射) |
verticalBoostTicks | 45 | 传送前的向上速度刻数(最小 0) |
verticalBoostVelocity | 1.35 | 发射时施加的向上速度(最小 0) |
enableParticles | true | 控制闲置炮台粒子动画 |
requiredPermission | 空 | 此特定炮台的可选额外权限门控 |
customModel | 空 | 在炮台位置显示的可选 FreeMinecraftModels 模型名 |
炮台创建默认值
当你执行 /wc create <id> 时:
- 炮台 ID 会转换为小写,
a-z、0-9、_和-以外的字符会被替换为_ - 显示名未指定时默认为
CannonRTP,或提供的名称中下划线转换为空格 cannonLocation设置为你的当前位置targetWorld设置为你的当前世界searchCenter未设置(回退到目标世界的出生点)
创建后,插件会输出配置文件路径并建议手动编辑以下字段:displayName、customModel、requiredPermission、launchWarmupSeconds、verticalBoostTicks 和 verticalBoostVelocity。
FreeMinecraftModels 集成
如果炮台配置将 customModel 设置为有效的 FreeMinecraftModels 模型名且 FreeMinecraftModels 已安装:
- 在炮台位置生成静态模型实体
- 浮动文本标签会抬高以避免与模型重叠
- 如果名为
fire的模型也存在,则使用替代发射动画:玩家被传送到炮台座位,在 3 秒(60 刻)充能序列中保持不动,然后以爆炸粒子效果发射
运行时验证行为
CannonRTP 在以下任何检查失败时拒绝着陆候选点:
- 目标世界未加载
- 搜索中心无效
- 随机样本落在世界边界之外
- 未找到安全的固体表面
- 脚部或头部空间被堵塞
- 地形或身体方块与配置的不安全材料列表匹配
- 保护集成阻止着陆
如果炮台在 landing.searchTimeoutSeconds 之前找不到足够的有效位置,它会变为耗尽状态,开始返回配置的失败消息而不是发射玩家。失败消息包含最常见拒绝原因的摘要。
炮台的搜索窗口在需要补充已消耗的位置时会重新启动(例如玩家发射后空出了一个槽位)。
交互冷却
CannonRTP 对每个玩家强制执行 3 秒的交互冷却。无论交互是成功发射、权限拒绝还是其他炮台检查,此冷却均适用。冷却时间不可配置。