一款变量系统
介绍
这是一个 积分系统 支持复杂的查询与管理 排序 默认值 过期时间等功能
可以满足绝大多数服务器与开发者的需求
可以实现 全局变量 与 个人变量
指令
请注意 ,对于修改玩家数据 仅推荐使用 abpe ed <action> 的形式。
主要唤起指令是 /abolethplus 也可以使用别名 /abp
子指令也可以通过全程和别名进行唤醒 /abolethplusedit 可以简写为/abpe
/abpe 修改
/abps 查询与排序
/abpg 设置变量编组
/abpd 设置变量默认值
修改 /abpe
set <变量名> <变量值> <目标>
设置变量
getAll <目标>
获取某个目标的全部变量
get <变量名> <目标>
获取某个目标的某个变量
edit <目标> <变量名> <动作> <值> <过期时间>
修改目标变量的值 允许不填写过期时间
可以使用这里面的所有动作(有补全)
过期时间写法:
例如 2d3h4s 或 2s 或 5天
overTime <目标> <变量名> <过期时间>
设置过期时间
removeAll <目标>
删除某个人的所有变量
removeKey <变量名>
删除所有人的某个变量
ed <语法>
Abolethplus 标准化语法 EditED
看下面的介绍
默认值 /abpd
get <变量名>
获取某个变量的默认值
getAll
获取所有变量的默认值
set <变量名> <默认值>
设置某个变量的默认值
remove <变量名>
删除某个变量的默认值
查询 /abps
get <目标> <变量名>
获取某个变量名
group <目标>
根据group索引目标的所有变量
sort <变量名> [可选 <正序/倒序>] [可选<获取多少名>]
获取变量排行榜
关于全局变量
插件抽象了个玩家 叫做 BukkitServer 别名 server (已封禁这两个玩家ID)
对这两个ID进行操作即可操作全局变量 相当于是操作服务器的变量
Base数据对象 - 4.0
对于以往而言数据的复杂管理是非常头痛的,所以在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%"
数据更新 - update
进行enable启用后 填写周期 在特定周期 (Cron语法) 即可进行刷新
注:刷新需要依赖默认值
条件表达式 - condition
支持 数字,文字的比较 支持 () && || > < >= <= == != 符号
例如
// 测试用例
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'"
默认值 - default
设置默认值后 会在首次进入游戏后进行设置
边界/极限值 - interval
控制最大最小值的范围 如果你的数据是0然后出现了问题请使用边界来限制
映射 - shadow
用于解析其他papi变量数据
AbolethPlusEditED 语法
这是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 一条备注
这会在你的数据库中进行体现
让数据 +1
-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>"
类型
online
全体在线玩家没有就不执行 支持变量<target.name> <target.uuid> action语法: kether
online ed
全体在线 支持变量<target.name> <target.uuid> action语法: aboEdit的 abpe ed 语法
all
全体用户 包括离线 语法 aboEdit的 abpe ed 语法
server
服务器 语法 aboEdit的 abpe ed 语法
command
服务器执行命令
kether
执行kether 如果有玩家会选取一个玩家作为载体 没有就不执行
player
当玩家进入游戏后 增加一个跟随的调度器 玩家离开后 调度器 结束 语法:Kether
注:player模式下 cron位置填写 tick
进入游戏后 延迟 tick 然后触发一次 然后接下来 按照这个频率进行周期调度
调度为同步调度 无异步操作
Cron 时间区间
采用了 标准的 cron 区间写法 让你可以100% 达到想要的需求
介绍 https://juejin.cn/post/7262982840019124284
使用 cron 表达式 你可以做到 每分钟 每个工作日的十二点的第一分钟 等等具体操作
action 动作
根据 type类型 选择在 kether edited command 中选择
<target.uuid> 代表了执行者的UUID
<target.name> 代表了执行者的name
papi变量
本次直接弃用简单版本的Papi变量 使用灵活的 变量模式
速记: %abp_get% 与 %abp_sort%
参数与缩写
本次增加了大量的参数别名
你可以使用参数的 首字母 大写或缩写
例外: Default 与 Desc的缩写 是 D = default dc = desc
key
default
format
type
desc
比如 Key 可以缩写为 K k
注意 Id无法使用缩写 Type中的参数也无法缩写
获取 - get
后面写参数即可 如果遇到不可以写空格的场景使用
<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 不填默认为 value
例子
%abp_get -k TEST -t time -f YYY-SSS%
%abp_get -k TEST -f ##.###%
排序 - Sort
获取变量排行榜
%abp_sort -key Key -limit 10 -desc true -def Def -type User/Value%
参数
key (必填) 变量名
default 默认值 为空返回默认值 默认为 ""
limit 获取第几名
type 返回值类型 value / user 默认为 value
求和 - sum
求全服玩家某个变量的和
%abp_sum -key Key -format #.00%
参数
key (必填) 变量名
format 格式 小数格式
获取调度器时间
%abp_task -id TaskPlayer -format yyyy-MM-dd_hh:mm:ss -type next/last%
获取调度器的上一次时间 与下一次时间 可以自定义格式
Kether (@嘿鹰)
新版Kether
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
API
如何基于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.RedisCache
package 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 元 联系开发者进行购买