棱镜中继

棱镜中继

通过捕捉独特的双属性宝可梦,在时间耗尽前连锁宝可梦类型。

Prism Relay

Prism Relay 是一个服务端权威的 Pixelmon 属性连锁小游戏,适用于 Minecraft 1.21.1、NeoForge 21.1.200+ 以及 Pixelmon 9.3.16+。

玩家携带一个宝可梦属性作为接力棒,在限时路线中完成一系列独特的双属性捕获。服务器掌管所有规则、分数、奖励、存档、权限检查和排行榜记录。可选的客户端伴侣模组添加了响应式动画界面、Pixelmon 精灵图、辅助功能控制以及专属的 Top 10 显示。

模组套件

Prism Relay 以两个独立的 jar 文件分发:

  • prism_relay-1.0.0.jar 是必需的服务器模组。它包含游戏逻辑、命令、配置、奖励、持久化存储、权限、箱子界面和网络功能。
  • prism_relay_client-1.0.0.jar 是可选的客户端伴侣模组。它包含 30 个自定义界面和视觉设置。

服务器 jar 无需客户端伴侣即可运行。没有安装客户端伴侣的玩家可以使用受保护的原版箱子菜单。将服务器 jar 放在专用服务器上,玩家客户端只需安装伴侣 jar。

两个 jar 均需要 Pixelmon。伴侣协议为版本 4;替换构建时请同步更新服务器和客户端 jar。

游戏玩法

开始一轮游戏会随机分配 18 种标准宝可梦属性中的一种作为首个接力棒。要创建连锁:

  1. 捕获一只包含当前接力棒属性的独特双属性宝可梦。
  2. 该宝可梦的另一属性成为下一个接力棒。
  3. 继续此过程,直到完成配置的连锁数量、时间耗尽或超过单属性宽限次数。

示例:

水 -> 莲叶童子 -> 草 -> 妙蛙种子 -> 毒 -> 超音蝠 -> 飞行

默认情况下,一轮游戏需要在三十分钟内完成八个连锁。同一轮游戏中不能重复使用相同物种。

单属性宽限

捕获与当前接力棒属性相同的单属性宝可梦不会推进路线,也永远不会获得积分。它会消耗一次宽限次数。使用默认的 game.monotype-grace-strikes: 2 设置:

  1. 第一次匹配的单属性记录为第 1/2 次并警告玩家。
  2. 第二次记录为第 2/2 次并警告再有一次将结束本轮游戏。
  3. 第三次立即将本轮状态改为 FAILED。

该值可设置为 0 到 10。设为 0 时,第一次匹配的单属性即导致失败。

捕获来源

野生捕获、团战捕获和孵蛋可以分别开启。默认值:

来源 启用
野生捕获 是
团战捕获 是
孵蛋 否

默认计分和速度倍率

有效连锁组件 原始积分
有效接力连锁 100
首次到达目标属性 40
闪光捕获 500
传说或幻之宝可梦捕获 150
团战捕获 50

原始总分根据剩余游戏时间进行倍乘。默认情况下,在开始时捕获的连锁获得 2.00x 倍率,中途为 1.50x,截止时为 1.00x。倍率线性递减,适用于基础连锁分以及新属性、闪光、传说和团战加成。最终积分四舍五入到最接近的整数。

所有积分值以及最小/最大时间倍率均可配置。

安装

专用服务器

  1. 安装 Minecraft 1.21.1、NeoForge 21.1.200 或更高版本,以及 Pixelmon 9.3.16 或更高版本。
  2. 将 server/build/libs/prism_relay-1.0.0.jar 放入服务器的 mods 目录。
  3. 启动服务器一次以生成 config/PrismRelay/config.yml 和 messages.yml。
  4. 编辑生成的文件并运行 /relay reload 或重启服务器。

可选的客户端伴侣

  1. 在客户端安装匹配的 Minecraft、NeoForge 和 Pixelmon 版本。
  2. 将 client/build/libs/prism_relay_client-1.0.0.jar 放入客户端的 mods 目录。
  3. 不要在客户端安装主服务器 jar。

伴侣模组通过可选的握手进行标识。缺少伴侣模组不会阻止服务器模组加载,除非启用了 ui.require-client。

玩家命令

别名:/relay、/prismrelay 和 /pr。

命令 用途
/relay 打开首选界面
/relay start 开始新一轮限时游戏
/relay status 在聊天中显示接力棒、计时器、分数、连锁数、宽限次数和记录
/relay abandon 结束当前进行中的游戏而不完成
/relay top 打开自定义 Top 10 界面或箱子备用界面
/relay chest 强制打开仅服务器的接力箱子界面
/relay client 在已安装时打开伴侣界面
/relay help 显示简要游戏规则和命令

管理命令

命令 用途
/relay reload 重新加载 config.yml 和 messages.yml
/relay reset <player> 删除玩家的进行中游戏和终生记录
/relay forcecomplete <player> 通过正常奖励路径完成进行中的游戏
/relay settype <player> <type> 替换当前接力棒属性;建议使用标准属性 ID

管理权限默认使用 commands.admin-permission,默认为操作员等级 2。

权限

Prism Relay 注册了原生的 NeoForge 权限节点。LuckPerms 和其他兼容的权限提供者可以覆盖它们。

玩家节点默认允许。管理节点默认使用配置的操作员等级。

权限节点 控制 默认
prism_relay.prismrelay.play 游戏参与和捕获进度 所有人
prism_relay.prismrelay.open /relay 所有人
prism_relay.prismrelay.help /relay help 所有人
prism_relay.prismrelay.start 从命令或界面开始游戏 所有人
prism_relay.prismrelay.status /relay status 所有人
prism_relay.prismrelay.abandon 放弃游戏 所有人
prism_relay.prismrelay.top Top 10 排行榜 所有人
prism_relay.prismrelay.chest 服务器箱子界面 所有人
prism_relay.prismrelay.client 可选的客户端界面 所有人
prism_relay.prismrelay.reload 配置重新加载 操作员
prism_relay.prismrelay.reset 重置玩家数据 操作员
prism_relay.prismrelay.forcecomplete 强制完成游戏 操作员
prism_relay.prismrelay.settype 更改玩家的接力棒 操作员

命令、服务器菜单、客户端操作数据包和捕获进度会独立检查权限。修改过的客户端无法绕过服务器规则。

界面

仅服务器箱子界面

服务器提供两个受保护的行原版菜单:

  • 接力控制台:游戏状态、接力棒、路线、分数、单属性宽限、速度计分、控制、帮助和界面选择。
  • Top 10 排行榜:领奖台、第 4-10 名、最佳分数、最快时间、完成次数、个人排名、刷新和导航。

显示槽位拒绝放置、拾取、快速移动、拖动和全部拾取操作。

客户端伴侣

伴侣显示服务端权威的快照。它可以请求操作,但无法在本地更改游戏、分数、奖励或排行榜。

常用控制:

输入 操作
R 刷新接力快照
方向键 查看上一条或下一条路线连锁
鼠标滚轮 滚动浏览路线连锁
M 在服务器动画启用时切换减少动态效果
S 在服务器声音启用时切换本地 UI 声音
L 切换紧凑排行榜的可见性

本地偏好设置存储在 config/prism_relay_client.json 中。

两个旗舰主题都遵循服务器动画设置和玩家的减少动态效果偏好。减少动态效果会立即解析所有过渡,而不会移除信息或控制。

UI 主题

工作人员通过 config/PrismRelay/config.yml 中的 ui.theme 选择一个主题。玩家无法覆盖服务器选择的主题。

主题 ID 界面概念
constellation 天体链式导航器和遥测档案
field_journal 双页博物学家日志和野外笔记
wanted_poster 边境悬赏墙和中央接力棒海报
radar_sweep 战术捕获瞄准镜和实时接触信息流
dna_lab 双属性基因组工作站和螺旋路线
pokedex_handheld 实体双屏宝可梦图鉴接力设备
guild_board 软木和绳线合同墙,带固定任务
orbital_holo 带移动宝可梦轨道的立体天文台
biome_atlas 羊皮纸地形测量和探险航点
minimal_bento 简洁模块化操作仪表板
clockwork_relay 黄铜擒纵机构和齿轮传动路线
arcade_cabinet CRT 计分柜、扫描线和最高分滑轨
train_signal 铁路发车时刻表和调度清单
weather_station 气象工作站和移动属性锋面
crystal_cavern 晶洞腔室和多面信号水晶
deep_sea_sonar 深海声纳扫描和深度接触日志
volcanic_forge 砖砌铸造厂、熔融接力棒熔炉和传送带
royal_tapestry 纹章继承宫廷和皇家接力棒徽章
postal_route 挂号包裹地图、路由和邮票
cassette_mixer 实体磁带机、卷轴、计量表和波形
noir_casefile 侦探证据板、红绳和案件笔记
dream_cloud 柔和梦幻天空、云朵和漂浮路线气泡
circuit_board PCB 布线主板、芯片、总线和寄存器
temporal_archive 钟面年表和时间线档案
festival_lanterns 夜市巡游和悬挂灯笼
skyship_navigation 空中测绘桌、指南针和飞行路径
mosaic_temple 镶嵌朝圣殿堂和棱镜祭坛
quantum_terminal 纠缠粒子处理器和遥测

Top 10 排行榜

/relay top 和界面中的 Top 10 按钮会打开专用菜单,而不是在聊天中打印排名。

  • 伴侣玩家会获得主题化的自定义排行榜界面。
  • 其他玩家会获得受保护的箱子排行榜。
  • 每位玩家出现一次,使用他们的个人最佳完成记录。
  • 分数越高排名越靠前。
  • 分数相同时使用更快的完成时间。
  • ui.leaderboard-cooldown-seconds 限制每位玩家的菜单重新打开和刷新频率。

自定义排行榜支持按 R 刷新,按 Backspace 返回接力界面。

配置

服务器会生成:

  • config/PrismRelay/config.yml:游戏规则、计分、捕获来源、奖励、界面行为、所有主题 ID、奖励占位符、冷却时间和管理员默认设置。
  • config/PrismRelay/messages.yml:面向玩家的文本、帮助、状态输出、错误和排行榜消息。
  • config/PrismRelay/data/players/<uuid>.properties:玩家存档和排行榜记录。

编辑任一 YAML 文件后运行 /relay reload。

已在进行中的游戏会保留其开始时的目标长度和截止时间。重新加载配置不会静默重写进行中的目标。

重要游戏设置

设置 用途
enabled 主游戏开关
game.target-links 所需路线长度,限制在 3 到 14
game.duration-seconds 游戏时间限制
game.restart-cooldown-seconds 单个玩家两次游戏开始之间的最短时间
game.monotype-grace-strikes 在下一个匹配单属性导致失败前可被原谅的次数;0-10
game.require-unique-species 一轮游戏中拒绝重复物种
game.notify-invalid-captures 显示被拒绝捕获的说明
scoring.time-scaling.minimum-percent 截止时的连锁倍率;默认为 100(1.00x)
scoring.time-scaling.maximum-percent 开始时的连锁倍率;默认为 200(2.00x)
ui.prefer-client 检测到时优先打开伴侣界面
ui.allow-chest-fallback 允许仅服务器备用菜单
ui.require-client 主接力界面需要伴侣模组
ui.theme 工作人员选择的界面主题
ui.sounds 允许伴侣 UI 声音控制
ui.animations 允许伴侣动画和减少动态效果控制
ui.leaderboard-cooldown-seconds Top 10 打开/刷新冷却时间

将任一冷却时间设为 0 可禁用。

奖励

奖励命令从服务器控制台运行,可以调用原版、Pixelmon、经济、权限、宝箱或其他已安装的命令系统。

支持三种奖励触发条件:

  1. rewards.link-commands:每次有效双属性连锁后。
  2. rewards.completion-commands:游戏完成时一次。
  3. rewards.score-ranges:游戏完成时匹配一个最终分数段。

基础完成命令和匹配的分数段都会执行。

示例:

rewards:
  broadcast-completion: true
  link-commands:
    - "experience add %player% 2 points"
    - "give %player% minecraft:amethyst_shard 1"
  completion-commands:
    - "experience add %player% 100 points"
    - "give %player% minecraft:diamond 3"
  score-ranges:
    0-999:
      - "give %player% minecraft:iron_ingot 8"
    1000-1499:
      - "give %player% minecraft:gold_ingot 8"
    1500-1999:
      - "give %player% minecraft:diamond 5"
    2000+:
      - "give %player% minecraft:netherite_ingot 1"

分数段包含边界值。支持的关键字:

  • 0-999
  • 0..999
  • 0_to_999
  • 500 表示精确分数
  • 2000+ 表示无上限范围

保持分数段不重叠。如果配置的范围重叠,只按分数升序授予第一个匹配项。

奖励占位符

以下占位符可用于连锁、完成和分数段命令:

类别 占位符
玩家 %player%、%uuid%
游戏 %state%、%state_colored%、%links%、%target%、%score%、%points%、%raw_points%
单属性宽限 %grace_strikes%、%grace_limit%、%grace_remaining%、%monotypes_until_failure%
时间和速度 %remaining%、%duration%、%time_bonus%、%time_multiplier%、%time_multiplier_percent%、%speed_percent%
终生记录 %best_score%、%best_duration%、%completions%、%attempts%
起始属性 %starting_type%、%starting_type_id%、%starting_type_colored%
当前属性 %current_type%、%current_type_id%、%current_type_colored%
连锁起点 %from_type%、%from_type_id%、%from_type_colored%
连锁终点 %to_type%、%to_type_id%、%to_type_colored%
捕获的宝可梦 %pokemon%、%dex%、%shiny%、%legendary%、%source%

分数段命令额外接收 %reward_range%、%reward_min% 和 %reward_max%。

命令可以以 / 开头,但不是必须的。

消息

messages.yml 支持:

  • 传统 & 格式代码。
  • 十六进制颜色,如 <#8B5CF6>。
  • 双色渐变,如 <gradient:#8B5CF6:#22D3EE>Prism Relay</gradient>。
  • 相关游戏事件提供的相同上下文占位符。

持久化和排行榜安全

每位玩家独立保存在 UTF-8 properties 文件中。存档包括:

  • 进行中的游戏状态和截止时间。
  • 起始和当前接力棒属性。
  • 精确的路线连锁和已使用物种。
  • 单属性宽限次数和最终的 FAILED 状态。
  • 时间缩放后的连锁得分。
  • 尝试次数和完成次数。
  • 个人最佳成绩和最快匹配完成时间。

写入使用临时文件和原子替换(在支持的情况下)。格式错误的单个路线记录会被跳过,而不是阻止其余档案加载。