RptPlaytimeReward —— 在线时长奖励 · 每日/每月/总计三个独立界面 · 字符矩阵自定义布局 · 可单独开关 · PAPI 变量 [1.21 ~ 26.3]

原创 付费 工具 娱乐 RptPlaytimeReward —— 在线时长奖励 · 每日/每月/总计三个独立界面 · 字符矩阵自定义布局 · 可单独开关 · PAPI 变量 [1.21 ~ 26.3] 1.0.0

请登录后获取
版权类型
原创
插件中文名称
RPT时长奖励
插件英文名称
RptPlaytimeReward
原帖地址
#
支持的核心(服务端)
  1. Paper
  2. Folia
语言支持
中文(简体)
适配版本(Java)
  1. 26.x
  2. 1.21

关于这个插件​

RptPlaytimeReward 是一套在线时长奖励系统。
它在服务端 tick 上给每个玩家记三个数:当日在线、当月累计、总累计。你在配置里给这三个维度各配一组"档位"——比如"每日在线满 30 分钟给 3 个钻石""本月累计满 50 小时给 3 个下界合金锭"。玩家打开对应界面,进度一目了然,到点就能点一下领走。
三个维度各是一个完全独立的界面:没有主菜单,界面之间也不互通 —— 输入 /rptpr daily 就是每日界面,/rptpr monthly 就是每月界面,/rptpr total 就是总计界面。每个维度还能用 enabled: true / false 单独开启或禁用:关掉之后玩家打不开那个界面,对应的档位也不发放(时长照常统计,随时改回来即可)。
奖励内容完全由你决定:档位的发放走"控制台执行指令",所以你写 give %player% diamond 1 就是发物品,写 eco give %player% 100 就是给钱,写你们服自己的称号指令就是发称号 —— 不绑任何特定插件。
计时口径是服务端 tick:不读客户端时钟,也不依赖玩家本地时间,所以改电脑时间这种小把戏没用。
d8aa5114-5e83-4837-87c1-965488d89863.webp
9fbc2c0d-d404-4ead-83d5-14fc927f0a86.webp
db3850af-4865-4b06-acb3-bcbfc2b30d1b.webp

功能说明​

1. 三个维度,三个独立界面,各自可开关​


维度指令说明重置
每日/rptpr daily当日在线时长每天到你配的时刻清零(reset.daily-at,支持非 0 点,比如 04:00)
每月/rptpr monthly当月累计每月到你配的日期清零(reset.monthly-day)
总计/rptpr total总累计在线永不清零
  • 三个界面互相独立:各有自己的标题、行数、布局、填充色,不设主菜单、界面之间没有任何跳转按钮。
  • 可单独启用 / 禁用:daily.enabled / monthly.enabled / total.enabled(在 gui.yml 里),默认都是 true。
    设成 false 时该界面的指令会提示"该维度已被关闭",对应档位也领不到(时长仍照常统计)。
  • 三个维度互不影响:今天的 30 分钟不会因为你昨天在线很久就自动"够了"。
  • 每个档位单独配置:需要多少分钟、图标、名字、说明、可选权限门槛、以及发放的指令列表。

2. 界面布局用「字符矩阵」画,一看就懂​

每个维度用自己的 layout 画界面 —— 一个字符串 = 一行(固定 9 格):
YAML:
layout:
  - "####@###*"     # # = 填充物   @ = 我的信息   * = 关闭按钮
  - "#A B C D#"     # A B C D = 第 1/2/3/4 档奖励
  - "#E F G H#"
  - "#J K L M#"
  - "#########"
  • 每个字符 = 界面上的一张"图",含义在下面两处定义:
    • icons.<字符> —— 普通图标(填充物、信息牌、关闭按钮…,可写 material / name / lore / action: close);
    • reward.<字符> —— 这一格是奖励档位(写 time 需要分钟数 + commands 点击执行什么)。
  • 同一个字符出现几次,就在几个格子里放它。空格 = 留空。
  • 奖励领取状态在 status 里配三种(unavailable 不可领取 / available 可领取 / taken 已领取):档位 material 写 %icon% 时图标随状态自动换 —— 默认配法是未领取统一用附魔瓶、已领取统一换成玻璃瓶,一眼就能分清哪些还没领。
  • 界面里的所有点击与拖拽都被拦下,图标拿不走;一次只领一档。

3. 防重复领取​

  • 领取记录存在数据库里,每档每天 / 每月只能领一次,总累计档位则永只能领一次。
  • 每日 / 每月的档位在跨周期后会自动恢复可领(底层用的是"档位 + 周期"作为记录键,不是简单标记)。
  • 过期的领取记录会按 storage.keep-claims-days(默认 90 天)自动清理,总累计的记录永远保留。

4. 计时口径(防篡改)​

  • 全局调度器每 count.step-seconds(默认 10 秒)给所有在线玩家的三个计数器各加一次。
  • 纯服务端 tick 驱动,不读客户端时间 —— 玩家改本地时钟、用加速齿轮都没用。
  • 步长可调:想更精确就调小(更费一点),想更省就调大。
  • 时长内存里累加、定时批量落库(storage.save-interval-seconds),关服时在独立线程做阻塞收尾。

5. 对外暴露 PAPI 变量​

装了 PlaceholderAPI 就会自动注册 rptpr 扩展(软依赖,没装不影响插件本体)。变量覆盖面很全,共 22 个:
① 时长(格式化文本,直接显示用)


变量说明
%rptpr_daily%当日在线时长(如 2 小时 13 分)
%rptpr_monthly%当月累计在线时长
%rptpr_total%总累计在线时长


② 时长(纯数字,适合做条件判断 / 排序)

变量说明
%rptpr_daily_seconds% / %rptpr_daily_minutes%当日秒数 / 分钟数
%rptpr_monthly_seconds% / %rptpr_monthly_minutes%当月秒数 / 分钟数
%rptpr_total_seconds% / %rptpr_total_minutes% / %rptpr_total_hours%总秒数 / 分钟数 / 小时数


③ 档位进度

变量说明
%rptpr_next_daily%距下一档每日奖励还差多久(已全领完为 -)
%rptpr_next_monthly% / %rptpr_next_total%同上,对应每月 / 总计
%rptpr_progress_daily%当日档位进度百分比(0~100)
%rptpr_progress_monthly% / %rptpr_progress_total%同上,对应每月 / 总计
%rptpr_next_name_daily%下一档的名字(如 每日在线 30 分钟;已全领完为 -)
%rptpr_next_name_monthly% / %rptpr_next_name_total%同上,对应每月 / 总计

④ 领取数量

变量说明
%rptpr_claimable_daily%当前可领取(够时间且没领过)的档位数
%rptpr_claimable_monthly% / %rptpr_claimable_total%同上,对应每月 / 总计
%rptpr_claimed_daily%当前周期内已领取的档位数
%rptpr_claimed_monthly% / %rptpr_claimed_total%同上,对应每月 / 总计

玩法示例:菜单标题放 %rptpr_claimable_daily%,大于 0 时说明"有奖可领";记分板放 %rptpr_daily% 与 %rptpr_next_daily%,玩家一眼看到今天挂了多久、还差多少到下一档;%rptpr_progress_daily% 可以配合 TAB 做进度条。

支持版本与环境​

组件说明
Minecraft 版本1.21 ~ 26.3(同一个 jar 跨版本,字节码目标 Java 21)
服务端核心Paper、Folia(已声明 folia-supported: true)
Java 运行环境Java 21 及以上
前置插件无(必装项为零)。PlaceholderAPI 可选(不装就没有变量,插件本体照常跑)
数据库无外部依赖,使用内嵌 SQLite,不需要 MySQL
编译基线dev.folia:folia-api:26.2.build.1-beta

目标用户​

  • 想让玩家"待得住"的生存服 / 长期服服主 —— 挂机也有回报,但奖励由你设计。
  • 做签到 + 时长双重留存的服主 —— 签到靠动作,时长靠在线,两个维度互补。
  • 需要把在线时长展示在外面的服主 —— PAPI 变量可直接接记分板、TAB、菜单标题。
  • 正在用 Folia 核心的服主 —— 计时任务按 Folia 的线程规矩做。

是否付费​

付费插件。 具体定价与授权方式以资源页「售价」项为准。
  • 插件不含任何联网校验、授权服务器或机器绑定,购买后安装即用,离线环境照常运行。
  • 不区分免费版 / 高级版,买到的就是完整功能(三个维度 + PAPI + 面板)。
  • 插件未做任何混淆,欢迎安全审查。

获取作者帮助​

途径内容
交流群QQ 群 1124248111
作者 QQ2221899680
游戏内输入 /rptpr help 查看全部指令与说明

使用教程​

安装​

  1. 把 RptPlaytimeReward-1.0.0.jar 放进服务端 plugins/ 目录。
  2. (可选)想用变量就装 PlaceholderAPI。
  3. 重启服务端(换 jar / 新装插件不支持热加载)。
  4. 首次启动会生成 plugins/RptPlaytimeReward/ 下的 config.yml(存储 / 计时 / 重置 / 消息)+ gui.yml(三个维度的界面与奖励档位)+ playtime.db(数据)。
    ★ 默认配置里的档位是示例,奖励发的是原版物品,请按自己服务器的经济与玩法改。
  5. 改完 config.yml 或 gui.yml 执行 /rptpr reload 生效,不需要重启服务端。
玩家最快的上手方式:/rptpr daily。

指令列表​

指令权限说明
/rptpr dailyrptpr.use打开【每日】奖励界面
/rptpr monthlyrptpr.use打开【每月】奖励界面
/rptpr totalrptpr.use打开【总计】奖励界面
/rptpr menurptpr.use打开第一个已启用的维度界面(等价于该维度的指令)
/rptpr timerptpr.use查看自己的三个维度在线时长
/rptpr time <玩家>rptpr.admin查看某人的在线时长
/rptpr reset <玩家> <维度>rptpr.admin把某人的某个维度清零(daily / monthly / total)
/rptpr help免权限显示指令帮助
/rptpr reloadrptpr.admin重载 config.yml 与 gui.yml
主指令为 /rptpr,别名 /playtimereward。三个维度界面互相独立,没有主菜单、界面之间不能互相跳转。

权限节点​

默认口径:普通玩家默认没有任何功能权限(避免白嫖),OP 默认全部拥有(服主开箱即用)。
要给普通玩家开放,用权限插件授予即可,例如 LuckPerms:
/lp user <玩家> permission set rptpr.use true
权限默认值说明
rptpr.use仅 OP打开面板、领取奖励、查自己的时长
rptpr.admin仅 OP查任意玩家时长 / 清零 / 重载
(档位自带)—每个档位可写 permission,作为领取门槛(例如只让 VIP 领某一档)

主要配置项​

界面 + 奖励档位看 gui.yml,统计规则 / 消息看 config.yml —— 两个文件分开,各管各的。
config.yml(存储 / 计时 / 重置时刻 / 消息)

配置项默认值说明
storage.database-fileplaytime.dbSQLite 数据文件名
storage.save-interval-seconds60内存时长落库间隔(秒)
storage.keep-claims-days90过期领取记录保留天数(总累计记录永久保留)
reset.daily-at"00:00"每日清零时刻(支持非 0 点,如 04:00)
reset.monthly-day1每月几号清零
count.step-seconds10计时步长(秒)
messages.*见默认文件全部提示文案,支持 MiniMessage

gui.yml(三个维度的界面 + 奖励档位)

配置项默认值说明
daily / monthly / total见默认文件三个维度的独立界面配置,每段含 enabled / title / rows / layout / icons / status / reward

维度界面字段(gui.yml 的 <维度> 段下):

字段说明
enabled是否启用该界面(true / false,默认 true)。关掉后指令提示"该维度已关闭",档位也不发放
display-name维度显示名(消息里的 <scope> 用,如「每日」)
title / rows该界面的标题 / 行数(1~6)
layout字符矩阵:每行 9 个字符,字符含义由 icons / reward 定义;空格 = 留空
icons.<字符>普通图标:material / name / lore / action: close(可写 slot 定位,或直接用字符)
status.<状态>三种领取状态的图标与文字:unavailable / available / taken,各有 icon 与 name
reward.<字符>奖励档位:material(可写 %icon% 按状态换图标)/ name / lore / time(需要分钟)/ permission / commands

档位字段(reward.<字符> 下):

字段说明
time该维度累计到多少分钟可领(必填)
material图标材质。写 %icon% 时按领取状态自动换(取自 status.<状态>.icon)
name条目名称(支持 MiniMessage 与 &a 旧式颜色)
lore说明行(可选)
permission可选:领取需要的权限
commands领取后执行的指令:console: 控制台指令 / message: 发给玩家;%player% 替换为玩家名

档位里可用的占位符(写在 name / lore,以及 messages 的领取提示里):

占位符含义
%minutes%该档需要多少分钟(如 60)
%status%当前状态文字(不可领取 / 点击领取 / 已领取,取自 status.<状态>.name)
<current> / <required> / <percent>当前时长 / 需要时长 / 进度百分比
<player> / <scope> / <name>玩家名 / 维度名 / 档位名

界面图标与聊天提示共用同一套占位符展开,所以在 messages.claim-ok 里写 %minutes% 也会正确显示成分钟数,不会漏出 %minutes% 这样的字面量。
配置写错(缺 time、图标名无效)时,只跳过那一条并在控制台告警,其余档位照常工作。

常见问题​

  • 时长为什么是 10 秒的倍数? 因为计时按 count.step-seconds 走(默认 10 秒加一次)。想要更细就把它调小。
  • 玩家改电脑时间有用吗? 没用。计时完全由服务端 tick 驱动,跟客户端时钟无关。
  • 每日 / 每月几点重置? 由 reset.daily-at(默认 00:00,可以设成 04:00 这种非零点)和 reset.monthly-day 决定。
  • 三个界面能互相跳转吗? 不能,也没有主菜单 —— 这是刻意的设计:/rptpr daily、/rptpr monthly、/rptpr total 各开各的,互不干扰。
  • 界面怎么改? 改 gui.yml 对应维度的 layout:一个字一个格子,字符是 icons 里的图标还是 reward 里的档位你说了算,改完 /rptpr reload。
  • 只想开其中一两个维度? 把不想开的那个设 enabled: false 就行,时长照样统计,随时改回 true 立刻恢复。
  • 奖励发什么? 你在档位的 commands 里写指令。发物品 give %player% diamond 1、给钱 eco give %player% 100(需装 Vault 经济)、发称号就写你们服的称号指令。
  • 能只让 VIP 领某一档吗? 能,给那一档写 permission。
  • 图标为什么有的瓶子有的玻璃瓶? 这是领取状态自动换的:没领的是附魔瓶、领过的是玻璃瓶。想换别的材质,改 status.<状态>.icon 即可。
  • 会不会重复领? 不会。每档每天/每月只能领一次,总累计档位一辈子一次(按"档位 + 周期"记录)。
  • PAPI 变量有哪些? 见上面「对外暴露 PAPI 变量」一节;没装 PlaceholderAPI 就没有这些变量,但插件本体不受影响。
  • 数据在哪、怎么备份? plugins/RptPlaytimeReward/playtime.db,复制该文件即可备份全部时长与领取记录。
  • 想给某个玩家清零重来? /rptpr reset <玩家> daily|monthly|total。

声明​

  • 本插件为原创作品,保留所有权利,默认不允许转载与整合。如需转载或整合进服务端整合包,请先通过上方交流群或作者 QQ 联系获取授权。
  • 本插件未使用任何混淆手段,欢迎安全审查。
  • 本插件不含任何后门、病毒或远程控制代码,不含任何联网校验,所有数据仅保存在服务器本地 plugins/RptPlaytimeReward/ 目录中。
作者
RPT
查看
75
首次发布
最后更新

评分

0.00 星 0 次评分

RPT 的其他资源

后退
顶部 底部