一款变量系统
这是一个 积分系统 支持复杂的查询与管理 排序 默认值 过期时间等功能
可以满足绝大多数服务器与开发者的需求
可以实现 全局变量 与 个人变量
请注意 ,对于修改玩家数据 仅推荐使用 abpe ed <action> 的形式。

主要唤起指令是 /abolethplus 也可以使用别名 /abp
子指令也可以通过全程和别名进行唤醒 /abolethplusedit 可以简写为/abpe
/abpe 修改
/abps 查询与排序
/abpg 设置变量编组
/abpd 设置变量默认值

set <变量名> <变量值> <目标>
设置变量
getAll <目标>
获取某个目标的全部变量
get <变量名> <目标>
获取某个目标的某个变量
edit <目标> <变量名> <动作> <值> <过期时间>
修改目标变量的值 允许不填写过期时间

可以使用这里面的所有动作(有补全)
过期时间写法:

例如 2d3h4s 或 2s 或 5天
overTime <目标> <变量名> <过期时间>
设置过期时间
removeAll <目标>
删除某个人的所有变量
removeKey <变量名>
删除所有人的某个变量
ed <语法>
Abolethplus 标准化语法 EditED
看下面的介绍

get <变量名>
获取某个变量的默认值
getAll
获取所有变量的默认值
set <变量名> <默认值>
设置某个变量的默认值
remove <变量名>
删除某个变量的默认值

get <目标> <变量名>
获取某个变量名
group <目标>
根据group索引目标的所有变量
sort <变量名> [可选 <正序/倒序>] [可选<获取多少名>]
获取变量排行榜
插件抽象了个玩家 叫做 BukkitServer 别名 server (已封禁这两个玩家ID)
对这两个ID进行操作即可操作全局变量 相当于是操作服务器的变量
对于以往而言数据的复杂管理是非常头痛的,所以在4.0采用配置的形式创建出了数据集
来协助用户对复杂数据进行管理
找到文件夹 > base > [可任意创建yaml]
体力恢复:
key: "体力"
# 是否启用定时刷新,启用后每隔一段时间会设置为默认值
# true: 启用,false: 不启用
update:
enable: true
# 额外条件表达式
# 用于判断是否需要更新 不满足将会略过本次刷新 等待下一周期
# 支持 () && || > < >= <= == !=
# 此处解析持有者的PAPI,公共变量会随机选取一个玩家作为载体
condition: "{value} <= 100 && {value} >= 20"
# 每天早上八点
period: "0 0 8 * * *"
# 默认值 (none则为不接管)
# 首次进入时会设置为这个值
default: "500"
# 极限值
# 设置某个变量的最大值和最小值
# 值为none(不填写)时表示不限制
interval:
min: "0"
max: "1000"
玩家名:
key: "玩家名"
update:
enable: false
default: "none"
# 映射变量
# 用于将某个变量映射到另一个变量上
shadow: "%player_name%"
进行enable启用后 填写周期 在特定周期 (Cron语法) 即可进行刷新
注:刷新需要依赖默认值
支持 数字,文字的比较 支持 () && || > < >= <= == != 符号
例如
// 测试用例
val expressions = listOf(
"1 > 2",
"2 <= 2",
"3 == 3",
"4 != 5",
"1 < 2 && 2 < 3",
"1 > 2 || 2 < 3",
"( 1 < 2 && 2 < 3 ) || 4 == 4",
"'hello' == 'hello'",
"'apple' < 'banana'",
"'abc' != 'def'",
"'test' == 'test' && 3 > 2",
"( 'a' < 'b' ) && ( 2 <= 2 )"
)表达式中使用 {value} 代表当前值 (若当前无值则为默认值)
&& 并且,|| 或者 ,> 大于,< 小于,>= 大于等于,<= 小于等于,== 等于,!= 不等于
例如 "{value} <= 100 && {value} >= 20"
翻译为 要求当前值 小于等于 100 并且 当前值 大于等于 20 才进行刷新
注意,对于字符类型的 需要用单引号进行标记 例如 "'{value}'=='test'"
设置默认值后 会在首次进入游戏后进行设置
控制最大最小值的范围 如果你的数据是0然后出现了问题请使用边界来限制
用于解析其他papi变量数据
这是AbolethPlus 的一种写法 应用于 Task 与 edit ed 命令

target [ t , T , target , id ] 变量持有者 指令模式下 不填写默认为指令触发者
message [ message , msg , Message , Msg , m , M] 是否显示提示
key [ key , k , Key , K ] 变量名
value [ value , Value , v , V ] 变量值 不填为删除变量
overTime [ overTime , overtime , o , O ] 过期时间 格式 为 1d2h3m4s
papi [ papi, P, Papi, p ] 解析Value中的Papi,对象为Target指定的目标
action [ action , a , Action , A ] 动作 参考指令部分
-key Key
当 value 为空时 就删除了变量
-k 变量名 -v 值
当 value 不等于空的时候 那么久设置这个变量的值
-key 变量名 -v 值 -m 一条备注
这会在你的数据库中进行体现
-k 变量名 -v 1 -a +
action 为 + 可以参考指令模块
-k 变量名 -o 1d
设置变量一天后过期
继承了 1.0 的所有设计思路 然后配合 企业级 任务调度器框架 - quartz
进行的高精度高性能调度器 咱们要玩就玩真的 直接上企业级框架捏
框架使用动态加载形式 在开启服务器时下载
也是调度器的一种使用方式 但是给抽离出来了 单独封装好提供给用户使用 只需要在配置文件 update.yml 里面书写 K:Value 就可以啦
yaml
体力: 200如此简单 然后就会进行刷新? 其实刷新的说法并不准确 实际上是一个调度器 然后每秒去判断玩家的 Update_Key 变量时间 不等于当日就进行刷新
只需要在 task/ 目录下创建一个 yaml 支持多yaml与嵌套
yaml
TaskPlayer:
group: 'default'
type: 'command'
cron: "0/5 * * * * ?"
action:
- "say Hello <target.name>"全体在线玩家没有就不执行 支持变量<target.name> <target.uuid> action语法: kether
全体在线 支持变量<target.name> <target.uuid> action语法: aboEdit的 abpe ed 语法
全体用户 包括离线 语法 aboEdit的 abpe ed 语法
服务器 语法 aboEdit的 abpe ed 语法
服务器执行命令
执行kether 如果有玩家会选取一个玩家作为载体 没有就不执行
当玩家进入游戏后 增加一个跟随的调度器 玩家离开后 调度器 结束 语法:Kether
注:player模式下 cron位置填写 tick
进入游戏后 延迟 tick 然后触发一次 然后接下来 按照这个频率进行周期调度
调度为同步调度 无异步操作
采用了 标准的 cron 区间写法 让你可以100% 达到想要的需求
介绍 https://juejin.cn/post/7262982840019124284
使用 cron 表达式 你可以做到 每分钟 每个工作日的十二点的第一分钟 等等具体操作
根据 type类型 选择在 kether edited command 中选择
<target.uuid> 代表了执行者的UUID
<target.name> 代表了执行者的name
本次直接弃用简单版本的Papi变量 使用灵活的 变量模式
速记: %abp_get% 与 %abp_sort%
本次增加了大量的参数别名
你可以使用参数的 首字母 大写或缩写
例外: Default 与 Desc的缩写 是 D = default dc = desc
key
default
format
type
desc
比如 Key 可以缩写为 K k
注意 Id无法使用缩写 Type中的参数也无法缩写
后面写参数即可 如果遇到不可以写空格的场景使用
<r>即可代替空格
例如 查询玩家 Ray_Hughes 的 TEST 变量
%abp_get -id Ray_Hughes -key TEST%
也可以使用缩写
%abp_get -id Ray_Hughes -k TEST%
不写空格可以用 以下方式
%abp_get<r>-id<r>Ray_Hughes<r>-k<r>TEST%
具体参数如下:
id 变量的持有者 不填为变量获取者
key (必填) 变量名
default 默认值 为空返回默认值 默认为 ""
format 格式 当Type = Value时 代表小数格式 当 Type = time时 表示时间格式
type 返回值格式 可选 time / value / over(过期时间) 不填默认为 value
%abp_get -k TEST -t time -f YYY-SSS%
%abp_get -k TEST -f ##.###%
获取变量排行榜
%abp_sort -key Key -limit 10 -desc true -def Def -type User/Value%key (必填) 变量名
default 默认值 为空返回默认值 默认为 ""
limit 获取第几名
type 返回值类型 value / user 默认为 value
求全服玩家某个变量的和
%abp_sum -key Key -format #.00%key (必填) 变量名
format 格式 小数格式
%abp_task -id TaskPlayer -format yyyy-MM-dd_hh:mm:ss -type next/last%
获取调度器的上一次时间 与下一次时间 可以自定义格式
用于获取配置文件的参数,经过papi的计算后的结果
%abp_base -id Target -Key 配置文件 -Type 类型%
类型列表:
updatecondition 更新条件公式
updatetime 更新时间
defaultvalue 默认值
minvalue 最小值
maxvalue 最大值
shadow 映射的值
abp {action} [(-t|target) {action}] [def {action}]
abp {action} (edit|ed) {action} to {action} [(-t|target) {action}] [time {long}]
abp key def "默认值"
abp key -t "目标ID" def "默认值"
abp key edit "-" to 1 target "目标" time 10公有语句: abolethplusedit (别名: abpe)
abpe 变量名 (操作符) 变量值 [可选: @ (sever|玩家ID)] [可选: mark "操作记录"]
编辑 玩家 / server 变量
abpe key = value @ server -> 设 abpe key + value @ otherPlayerID mark "" -> 加 abpe key - value mark "" -> 减 abpe key * value -> 乘 abpe key / value -> 除
删除 玩家 / server 变量
abpe key ~ val @ server abpe key ~ val @ otherPlayerID abpe key ~ val
编辑 / 删除 变量名 的默认值
abpe key ~ def -> 删除 key 的全局默认值 abpe key def value -> 设置 key 的全局默认值为 value
公有语句: abolethplusget (别名: abpg)
abpg {action} [def [{action}]] [@ (server|ID)]
获取 玩家 / server 变量值
abpg key @ server abpg key def value @ server abpg key @ otherPlayerID abpg key def value @ otherPlayerID abpg key abpg key def value
获取 变量名 的默认值
abpg key def
如何基于AbolethPlus 开发附属呢?
购买 AbolethPlus
下载群内的 AbolethPlus-4.xx.xx-api.jar
使用此Jar进行开发
// 核心API类 - Kotlin
ray.mintcat.abolethplus.api.AbolethPlusAPI
// 核心API类 - Java
ray.mintcat.abolethplus.api.AbolethAPI
// 缓存操作类
ray.mintcat.abolethplus.utils.RedisCachepackage ray.mintcat.abolethplus.api;
import org.bukkit.command.CommandSender;
import ray.mintcat.abolethplus.database.AbolethMeta;
import ray.mintcat.abolethplus.database.edit.EditAction;
import java.util.UUID;
public class AbolethAPI {
// 添加
public static void add(UUID user, String key, String value) {
AbolethPlusAPI.INSTANCE.editValue(user, key, value, EditAction.ADD);
}
// 减少
public static void take(UUID user, String key, String value) {
AbolethPlusAPI.INSTANCE.editValue(user, key, value, EditAction.TAKE);
}
// 除以
public static void divide(UUID user, String key, String value) {
AbolethPlusAPI.INSTANCE.editValue(user, key, value, EditAction.DIVIDE);
}
// 乘以
public static void multiply(UUID user, String key, String value) {
AbolethPlusAPI.INSTANCE.editValue(user, key, value, EditAction.MULTIPLY);
}
// 移除
public static void remove(UUID user, String key, String value) {
AbolethPlusAPI.INSTANCE.editValue(user, key, value, EditAction.REMOVE);
}
// 设置
public static void set(UUID user, String key, String value) {
AbolethPlusAPI.INSTANCE.editValue(user, key, value, EditAction.SET);
}
// 使用editaction
public static void edit(UUID user, String key, String value, EditAction action) {
AbolethPlusAPI.INSTANCE.editValue(user, key, value, action);
}
// 获取
public static String get(UUID user, String key, String defaultValue) {
return AbolethPlusAPI.INSTANCE.getValueString(user, key, defaultValue);
}
// getMeta
public static AbolethMeta getMeta(UUID user, String key) {
return AbolethPlusAPI.INSTANCE.getMeta(user, key);
}
// 运行ED语句
public static void runED(CommandSender user, String ed) {
AbolethPlusAPI.INSTANCE.evalString(user, ed);
}
// 设置过期时间
public static void setExpire(UUID user, String key, long time) {
AbolethPlusAPI.INSTANCE.setExpire(user, key, time);
}
}
价格为 150 元 联系开发者进行购买