TCG - 执行指令组插件 |  (条件、冷却、多功能)

原创 开源 工具 TCG - 执行指令组插件 | (条件、冷却、多功能) 1.2

请登录后获取
版权类型
原创
插件中文名称
汤圆指令组
插件英文名称
TyCommandGroup
原帖地址
#
支持的核心(服务端)
  1. Spigot
  2. Paper
语言支持
中文(简体)
前置组件
[以下前置均为非必需的软前置]
PlaceholderAPI
DragonCore
MythicMobs
LyInventory
Vault
PlayerPoints
适配版本(Java)
  1. 1.16
  2. 1.15
  3. 1.14
  4. 1.13
  5. 1.12
  6. 1.11
  7. 1.10
定位:高自由度条件指令调度引擎,不局限单一触发源,可被指令、物品、GUI、技能、菜单、自定义触发器调用,用 YAML 批量管理成套执行逻辑;RPG 服、礼包系统、装备被动、权限校验、任务判定、奖励分发都能用。
指令: /tcg 权限: tcg.run / tcg.reload

重要提示:插件自带示例配置每次重载会刷新覆盖,不要直接修改示例 yaml;自定义逻辑请在group下新建文件夹 /yml 编写,避免配置丢失。
​


一、核心架构:指令组(Group)​

最小调度单元为指令组 ID(全局唯一,不可重复),每个组由三块构成:
  1. condition:多重条件链,全部通过才进入冷却与成功动作;条件失败直接走fail-actions,不触发冷却
  2. 冷却配置(可选):全局冷却 + 玩家独立双冷却,分层控制频率
  3. success-actions / fail-actions:两套动作分支;成功分支支持延时、多类型执行、变量表达式;失败分支用于提示 / 拒绝逻辑

二、条件系统(Condition)​

支持多类条件混合叠加,全部满足才放行;每条条件可附加<=>自定义失败提示消息。

1. PAPI变量条件​

  • 原生支持and/or布尔逻辑、四则运算、三元表达式
  • 字符串相等判断、数值大小比较

2. 玩家权限条件​

3. 玩家背包/手持物品/龙核物品等其他仓库物品条件​


三、双冷却机制(Cooldown)​

两种冷却独立配置,优先全局冷却,再校验玩家私人冷却,且支持跨服和本地存储;均可完全删除(无冷却)。
  • global-cooldown:指令组全局共享冷却(单位秒,全服共用 CD,适合全服每日礼包)
  • player-cooldown:玩家独立冷却(单人限制,适合个人技能、个人礼包)
  • 支持自定义冷却提示消息,内置<cooldown>剩余时间变量
  • global-cooldown: 10
  • global-cooling-msg: '当前指令组全局冷却中,剩余冷却时间 <cooldown>'
  • player-cooldown: 5
  • player-cooling-msg: '当前指令组冷却中,剩余冷却时间 <cooldown>'


四、版本所有内置执行器 (Action)​
message给玩家发送消息action-bar发送快捷栏上方消息
delay在某个执行后延迟closeInventory关闭当前打开的箱子
console通过控制台发出指令drop#MM物品#数量玩家脚下生成MM物品
op通过OP权限发出指令exp玩家脚下生成经验球
player玩家自身发出指令vault给予玩家金币
title发送一个标题points给予玩家积分/点券


五、配置文件 (config.yml)​
YAML:
prefix: '&6[TyCommandGroup] '
debug: false

# 指令 /tcg
# 权限: tcg.run / tcg.reload
# 这个插件玩法很多,自己可以按照脑洞拓展,你甚至可以利用执行组的特性在指令组里套指令组,只要不是相同的指令组(会死循环)

# 数据存储源,type支持: LOCAL (YML存储)  SQLITE(本地db文件)  MYSQL
# !每次修改数据源必须重启服务器!
datasource:
  type: LOCAL
  # 启用SQLite时需要指定source的name,YML和MYSQL无需
  source:
    name: data
    # 当你启用了MYSQL,这里要填写
    #database: 'mydb'
    #username: 'root'
    #password: 'root'
    #ip: '127.0.0.1'
    #port: '3306'
  # 玩家表示存储类型,支持UUID和NAME,正式投入生产环境后别再修改!
  index: 'UUID'


五、指令组默认文件 (group/默认组.yml)​
YAML:
# 指令组ID,唯一不能重复
默认指令组:
  # 指令组条件,满足条件才会执行指令内容和冷却机制,不需要可删除,无任何条件
  condition:
    # v1.1更新内容: PAPI变量支持四则运算和布尔条件and 和 or,玩家名是汤圆并且(and)等级+1大于5
    # 如果你的PAPI变量结果不是数字,请使用以下格式
    - "papi:{'%player_name%' == '汤圆' and (%player_level% + 1 > 5)}<=>你不是汤圆而且等级不够"
    - 'papi:{%player_level% == 1 or %player_level% == 100}<=>你的等级不是1或者100' # 当等级是1或者等级是100即通过
    - 'papi:{%player_level% > 3}' # PAPI变量解析,如果玩家等级大于3,那么满足
    - 'permission:{tcg.默认}' # 当有这个权限且其他条件也满足,那么满足
    - 'notPermission:{tcg.Ban默认}' # 当有这个权限,那不满足
    # ############### 玩家槽位物品检测 (括号内是检测的物品) ###############
    # 检测物品支持:
    # Origin#mainHand-主手  Origin#offHand-副手  Origin#helmet-帽子 Origin#chestplate-衣服 Origin#leggings-裤子 Origin#boots-鞋子 Origin#inventory#1 - 玩家背包的第1格物品
    # 龙核物品检测:DragonCore#槽位名
    # 离渊背包自定义槽位:LyInventory#背包ID#槽位ID
    ###################################################################
    - 'itemNameEquals(Origin#mainHand):{&c&l汤圆}<=>&7你的主手物品不叫 &f[&c&l汤圆&f]' # 如果玩家主手的物品名为&c&l汤圆,则满足,如果不满足则对玩家执行后方的消息
    - 'itemNameContains(Origin#offHand):{汤圆}' # 如果玩家副手物品名包含汤圆,则满足
    - 'itemLoreEquals(Origin#helmet):{&7圆滚滚的汤圆来了}<=>&7你的头盔不满足条件...' # 如果玩家帽子物品的Lore有一行是 &7圆滚滚的汤圆来了 ,则满足
    - 'itemLoreContains(Origin#chestplate):{圆滚滚的}' # 如果玩家衣服物品的Lore有一行包含圆滚滚的,则满足
    - 'itemNbtEquals(DragonCore#宠物):{name=&c&l汤圆}' # 如果龙核槽位的宠物物品的NBT有name属性,且值为 &c&l汤圆 ,则满足
    - 'itemNbtContains(LyInventory#饰品#项链):{level=1}' # 如果离渊背包的饰品仓库的项链物品的NBT有level属性,且值包含 1 ,则满足
  # 全局冷却,单位秒,这下面的不需要可删除,优先全局冷却,后私人冷却,你也可以不要全局冷却,也可以不要私人冷却,甚至都不要
  global-cooldown: 10
  # 全局指令冷却中给玩家发送的消息
  global-cooling-msg: '当前指令组全局冷却中,剩余冷却时间 <cooldown>'
  # 玩家私人冷却
  player-cooldown: 5
  # 玩家私人指令冷却中给玩家发送的消息
  player-cooling-msg: '当前指令组冷却中,剩余冷却时间 <cooldown>'

  # 满足上方的条件和冷却的执行,支持PAPI变量
  success-actions:
    # v1.2更新内容: 执行组里可以使用表达式了! 格式${表达式~%.0f} ~%.2f代表保留两位小数 默认为不保留任何小数点
    - 'console: mm i give %player_name% 测试道具 ${%player_level% / 1.5 ~%.0f}' # 通过MM给予玩家 (当前等级除1.5并且不保留小数) 数量的测试道具物品
    # v1.2更新内容: 新增执行动作(vault) - 给予金币,需要前置Vault,当然你也可以在表达式里使用随机数来给予金币 ${random.nextInt(3) + 1} 生成1-3的随机数
    - 'vault: ${random.nextInt(3) + 1}' # 给予执行该指令组的玩家1-3个金币
    # v1.2更新内容: 新增执行动作(points) - 给予点券,需要前置PlayerPoints
    - 'points: ${%player_level% > 10 ? 100 : 10}' # 玩家等级大于10级给予100个点券,否则只给10个!
    # v1.1更新内容,执行组能够接受指令里的参数了! (示例: tcg run TangYuan 默认指令组 &c我是参数1 &e我是参数2)
    - 'message: 接收到指令传递参数 ^{0} 和 ^{1}' # 给玩家发送的内容为: <接收到指令参数 §c我是参数1 §e我是参数2>
    - 'message: 我不吃牛肉' # 给玩家发送一段内容为 (我不吃牛肉) 的消息
    - 'delay: 20' # 延迟20tick = 1s
    - 'console: tell %player_name% &c指令组 默认指令组 执行成功' # 控制台执行一段指令
    - 'op: tell %player_name% &c指令组 默认指令组 执行成功' # 玩家OP权限执行一段指令
    - 'player: tell %player_name% &c指令组 默认指令组 执行成功' # 玩家自身执行一段指令 (无OP权限)
    - 'title: &c终于等完这1秒了 <=> &d开始你的游戏吧 #10@50@10' #给玩家发送一段标题: (主标题)<=>(副标题)#淡入时间@停留时间@淡出时间
    - 'action-bar: &d欢迎来到主城,%player_name%' # 给玩家发送装备栏上的消息
    - 'closeInventory' # 关闭当前打开的箱子
    - 'drop:MM物品ID#数量' # 在玩家脚下掉落物品
    - 'exp:10' # 在玩家脚下生成经验值为10的经验球
  # 不满足条件时执行的指令,不满足是不会进入冷却的 (仅仅是不满足条件的执行,不包括冷却)
  fail-actions:
    - 'message: 不是哥们?'

# 你甚至什么都可以不要,单纯执行:(success-actions这个是必要的),其他的需要什么就添加什么
默认指令组2:
  success-actions:
    - 'message: 我执行了默认指令组2'
后退
顶部 底部