找回密码
 立即注册

微信登录

只需一步,快速开始

QQ登录

只需一步,快速开始

[全版本]ItemCommand —— 给物品绑定自定义动作吧 不只是命令~

像素搬运菌 2024-8-9 14:54:26 管理 阅读 174 | Edg | Windows 10 来自 中国广西玉林
服务器插件
中文名称:
英文名称: ItemCommand
插件来源: 转载
适用服务端: Spigot 
插件类型: 管理
语言支持: 中文 
适用版本: 全版本 
前置插件/mod:
下载地址: https://github.com/myunco/ItemCommand
原贴地址: https://github.com/myunco/ItemCommand

马上登录/注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x

插件介绍

这是一款功能齐全的物品动作插件,可以给任意物品绑定自定义动作。
可以用来实现例如称号兑换券、回城卷轴、金票银票等各种RPG物品、
每日礼包、每周礼包、每年礼包 各种礼包 等等···  请发挥你的想象。
几乎所有值都能使用变量,插件默认提供{player}变量代表当前玩家,只需安装PAPI即可使用海量变量。

功能介绍

可根据物品显示名/Lore/类型来匹配物品
可自定义物品使用的条件,例如要达到XX级才可以使用、生命值低于XX时可以使用
可选择物品的使用方式:左键/右键点击使用、手持时使用、物品栏内左键/右键点击使用
可以自定义使用物品后执行的动作,例如玩家执行命令、后台执行命令、发送全服公告、发送聊天消息
播放指定音效、发送Title、发送ActionBar、切换BC子服 等等···(详见物品配置文件)
下面列出各个版本可用的音效:

1.5 1.6.2 1.7.10 1.8.8 1.9.4 1.10.2 1.11.2 1.12.2 1.13.2 1.14.4 1.15.2 1.16.5 1.17.1 1.18.2 1.19.2 最新版

可以设置使用物品花费的金钱/点券/经验
可以设置使用物品需要的权限
可以设置需要消耗多少个物品才能使用
可以设置使用物品的冷却时间(每个物品单独计算)
在物品配置文件中详细讲解了插件功能,此处不再赘述,请看下面的物品配置文件
(不要看着字多就认为复杂··· 主要都是注释,用不到的功能完全可以忽略,一点也不复杂,真的!)
另外配置文件中的音效和命令都是根据高版本写的,

所以在低版本中会提示音效不存在和命令执行错误是正常情况,修改成低版本对应的音效和命令即可

命令/权限

命令列表:
/ItemCommand add —— 将手中的物品根据命令提供的参数添加到物品配置文件

详细用法: /ItemCommand add [name|lore|type] [lore-exact|condition|trigger|action|price|points|levels|permission|required-amount|cooldown]
[] = 可选参数  如果不提供参数,默认为 name 表示将手中物品的名称保存到配置文件
lore 表示将手中物品的lore保存到配置文件 type 表示将手中物品的类型保存到配置文件
name/lore/type 这三个参数 至少需要提供一个,如无特殊需求建议全部提供。
至于后面的那一堆参数,是添加物品到配置文件时默认带有的选项,不提供则需要到配置文件手动输入。
提供了就不用手动输入,只要修改值就行了。
注意:虽然add命令可以快速将物品添加到配置文件,但在1.18之前的版本会导致配置文件中的注释丢失,
所以请自行决定是使用命令添加还是手动修改配置文件添加。

/ItemCommand give —— 将物品配置文件中定义的物品给予指定玩家

详细用法: /ItemCommand give <玩家> <物品ID> <物品数量> [物品类型]
(物品类型参数仅在指定ID的物品配置中未指定物品类型时需要, 默认为石头)
<> = 必填参数 [] = 可选参数

/ItemCommand list —— 查看已加载物品
/ItemCommand reload —— 查看插件版本
/ItemCommand type —— 查看物品类型
/ItemCommand version —— 重载插件配置
以上/ItemCommand 可以缩写为/ic
所有命令不区分大小写、所有命令支持TAB补全
权限列表:
itemcommand.admin —— 可使用/ItemCommand命令,默认OP拥有
itemcommand.cooldown.bypass —— 使用物品无视冷却时间,默认OP拥有
itemcommand.price.free —— 使用物品无需花费金钱,默认OP拥有
itemcommand.points.free —— 使用物品无需花费点券,默认OP拥有
itemcommand.levels.free —— 使用物品无需花费经验等级,默认OP拥有

配置文件

#配置文件版本号 请勿修改
version: 1

#语言 默认为简体中文
language: 'zh_cn'

#检查更新 (十二小时检查一次)
checkUpdate: true

#左键使用物品后是否取消点击事件
cancelLeftEvent: true

#右键使用物品后是否取消点击事件
cancelRightEvent: true

#切换手持时使用物品后是否取消切换手持事件
cancelHeldEvent: false

#物品栏内左键使用物品后是否取消点击事件
cancelInvLeftEvent: true

#物品栏内右键使用物品后是否取消点击事件
cancelInvRightEvent: true

物品配置文件

#物品ID 用英文单引号括起来 内容随意 不要重复 不要包含 . 和空格
'001':

  #匹配物品显示名 可选 支持变量 没有此项则不限物品显示名
  name: '§6示例物品'

  #匹配物品Lore 可选 支持变量 没有此项则不限物品Lore
  lore:
    - '§3示例Lore'

  #是否精确匹配物品Lore 可选 没有此项默认为true 表示需要Lore完全一致 false表示不管实际物品有多少行Lore, 只要含有配置里存在的行即可
  #例如在配置中设置:
  #lore:
  # - 'AA'
  # - 'CC'
  #实际物品:
  # - 'AA'
  # - 'BB'
  # - 'CC'
  #如果使用精确匹配(true) 会认为这个物品不符合条件 因为不完全一致
  #如果使用包含匹配(false) 会认为这个物品符合条件 因为包含AA和CC
  lore-exact: true

  #匹配物品类型 可选 没有此项则不限物品类型 (虽然name,lore,type都是可选的,但至少要提供一个)
  #如果你不知道某个物品的类型是什么 可以使用 /ic type 命令查看手持物品的类型
  type: 'PAPER'

  #使用物品需要满足的条件 一行一个条件 可选 支持变量 格式为 类型:表达式,不满足条件时显示的消息(不想显示消息的话 只写,即可)
  #类型有三种: s = 字符串比较 、 d = 数值比较 、 直接逻辑值(不指定类型就会被认为是直接逻辑值)
  #字符串比较可使用的运算符 =(等于) !=(不等于) ==(忽略大小写等于) !==(忽略大小写不等于) >(大于) >=(大于等于) <(小于) <=(小于等于)
  #数值比较可使用的运算符 =(等于) !=(不等于) >(大于) >=(大于等于) <(小于) <=(小于等于)
  #直接逻辑值可使用的运算符 !(逻辑取反 单目运算符) 什么是直接逻辑值? 可用的逻辑值有true false yes(等于true) no(等于false) 其他字符串=false
  #什么是满足条件? 表达式执行后产生的结果如果为true 则满足条件 如果为false 则不满足条件
  condition:
    #运算符两边必须有空格, !(单目运算符)除外
    #字符串比较示例
    - 's:{player} != notch, §c你的名字是notch 不能使用此物品!'
    - 's:{player} != NOTCH, §c你的名字是NOTCH 不能使用此物品!'
    - 's:{player} !== notch, §c别以为换了大小写我就不认识你了 你还是不能使用此物品!'
    #数值比较示例(因为用到了PAPI变量, 所以需要安装PAPI并启用Player扩展才能正常执行)
    - 'd:%player_level% >= 30, §6等级达到30级才能使用此物品!'
    #直接逻辑值示例(因为用到了PAPI变量, 所以需要安装PAPI并启用Player扩展才能正常执行)
    # %player_is_flying% 会返回yes(飞行)或no(未飞行) 由于使用了!运算符进行取反 所以飞行时不能使用 去掉!就是飞行时才能使用了
    - '!%player_is_flying%, §e由于你正在飞行 不能使用此物品。'

  #触发方式 可同时选择多种触发方式 一行一种 可选 默认为right
  #支持的触发方式有: left(左键点击), right(右键点击), held(手持时), inv_left(物品栏内左键点击), inv_right(物品栏内右键点击)
  trigger:
    - 'left'
    - 'right'

  #物品使用后执行的动作 一行一个动作 支持变量 可选 没有此项则不执行任何动作
  #可选的动作有: cmd, op, console, tell, chat, sound, sound-all, broadcast, give-money, give-points,
  #  title, title-all, action-bar, action-bar-all, server 不指定默认为cmd
  #格式为 动作: 值 (动作后面需要紧跟一个英文冒号 否则无法识别出正确动作会默认为整行都是cmd动作的值)
  action:
    #cmd = 让使用物品的玩家执行命令 命令不需要加 /
    - 'cmd: help'
    #op = 让使用物品的玩家以op身份执行命令 同样不需要加 /
    - 'op: list'
    #console = 让控制台执行命令
    - 'console: say hi {player}'
    #tell = 给使用物品的玩家发送消息
    - 'tell: hi {player}'
    #chat = 让使用物品的玩家发送聊天消息
    - 'chat: 我使用了§6示例物品'
    #sound = 给使用物品的玩家播放指定音效
    - 'sound: ENTITY_EXPERIENCE_ORB_PICKUP'
    #sound-all = 给全服玩家播放指定音效
    - 'sound-all: ENTITY_EXPERIENCE_ORB_PICKUP'
    #broadcast = 给全服玩家发送消息(公告)
    - 'broadcast: {player}使用了§6示例物品'
    #give-money = 给予使用物品的玩家指定数量的钱 只能为正整数 使用此功能需要安装Vault以及支持Vault的经济插件
    - 'give-money: 10'
    #give-points = 给予使用物品的玩家指定数量的点券 只能为正整数 使用此功能需要安装PlayerPoints插件
    - 'give-points: 10'
    #title = 给使用物品的玩家发送Title消息 格式 标题,副标题,显示时间(秒) 注意 逗号为英文逗号 1.10及以下版本会无视显示时间 1.8以下版本不支持此动作
    - 'title: HiHiHi,没人看得到我 因为会被覆盖,10'
    #title-all = 给全服玩家发送Title消息 格式同上 注意 新的Title会覆盖没显示完的Title 所以这条Title会覆盖掉上面那一条
    - 'title-all: Hi,{player}使用了§6示例物品,10'
    #action-bar = 给使用物品的玩家发送ActionBar消息 1.8及以下版本不支持此动作 并且使用此动作需要使用Spigot或其衍生服务端 如Paper
    - 'action-bar: hi 没人看得到我'
    #action-bar-all = 给全服玩家发送ActionBar消息 注意 新的ActionBar会覆盖没显示完的ActionBar 所以这条ActionBar会覆盖掉上面那一条
    - 'action-bar-all: {player}使用了§6示例物品'
    #server = 让使用物品的玩家切换到指定的BC子服 如果你不知道这是什么 那么你不需要此功能
    - 'server: login'

  #使用物品需要花费的钱 可选 支持变量 不能为负数
  price: 10

  #使用物品需要花费的点券 可选 支持变量 不能为负数
  points: 10

  #使用物品需要花费的经验等级 可选 支持变量 不能为负数
  levels: 10

  #使用物品需要的权限 可选 支持变量
  permission: '示例权限'

  #使用物品会消耗的数量 可选 支持变量 不能为负数 物品数量不足不能使用 提供0或没有此项则不消耗物品
  required-amount: 1

  #冷却时间 单位秒 可选 支持变量 不能为负数 如果设置了冷却时间 表示使用此物品后必须等待指定的时间后才能再次使用此物品(冷却时间每个物品ID单独计算)
  cooldown: 10

#一个简单的匹配物品显示名的例子:
'002':
  #注意 所有用到颜色符号的地方请使用 § 而不是 &
  name: '§6银票'
  action:
    - 'give-money: 100'
    - 'tell: §b你使用了一张§6银票§b, 获得了100银币.'
    - 'sound: ENTITY_EXPERIENCE_ORB_PICKUP'
  required-amount: 1

#一个匹配物品显示名和物品类型的例子:
'003':
  #注意 这里就不要再用 '§6银票' 这个名称了, 因为上面那个例子只要求物品名称一致并且触发方式都是默认的right 这里再这样写就完全符合上面那个例子的匹配条件了
  #name: '§6银票'
  name: '§6真·银票'
  #类型为纸
  type: 'PAPER'
  action:
    - 'give-money: 1000'
    - 'tell: §b你使用了一张§6真·银票§b, 获得了1000银币.'
    - 'sound: ENTITY_EXPERIENCE_ORB_PICKUP'
  required-amount: 1

#一个匹配物品显示名和Lore以及物品类型的例子:
'004':
  name: '§6传送卷轴'
  lore:
    - '§a类型: §d消耗品'
    - '§b使用后可以在当前世界内随机传送。'
  type: 'PAPER'
  action:
    - 'op: tpr'
    - 'sound: ITEM_BOOK_PAGE_TURN'
  required-amount: 1

#同一种物品不同触发方式执行不同动作的例子(005、006):
'005':
  name: '§6§l新手保护券'
  lore:
    - '§d持有此保护券可在死亡时保留物品栏以及经验。'
    - '§a使用方法: §b放在物品栏中自动生效'
    - '§3仅限{player}本人使用'
    - '§5类型: §c消耗品'
    - ''
    - '§7注: 本券为消耗品,每张仅能使用一次。'
  type: 'PAPER'
  trigger:
    #手持时触发
    - 'held'
  action:
    - 'tell: §a用不到新手保护券?右键使用每张可兑换10级经验。'

#虽然006和005的name、lore、type相同,但是触发方式并不重叠,所以不会冲突。
'006':
  name: '§6§l新手保护券'
  lore:
    - '§d持有此保护券可在死亡时保留物品栏以及经验。'
    - '§a使用方法: §b放在物品栏中自动生效'
    - '§3仅限{player}本人使用'
    - '§5类型: §c消耗品'
    - ''
    - '§7注: 本券为消耗品,每张仅能使用一次。'
  type: 'PAPER'
  trigger:
    #右键点击触发
    - 'right'
  action:
    - 'console: xp add {player} 10 levels'
    - 'tell: §a你使用一张新手保护券兑换了10级经验。'
    - 'sound: ENTITY_EXPERIENCE_ORB_PICKUP'
  required-amount: 1

语言文件

#语言文件版本号 请勿修改
version: 2

log-prefix: '[ItemCommand] '
message-prefix: '§8[§3ItemCommand§8] '
language-version-error: '§c语言文件版本错误: '
language-version-outdated: '§e当前语言文件版本:§a{0} §c最新版本:§b{1} §6需要更新.'
language-update-complete: '§a语言文件更新完成!'
config-version-error: '§c配置文件版本错误: '
config-version-outdated: '§e当前配置文件版本:§a{0} §c最新版本:§b{1} §6需要更新.'
config-update-complete: '§a配置文件更新完成!'
update-found-new-version: '§c发现新版本可用! §b当前版本: {0} §d最新版本: {1}'
update-major-update: '§e(有大更新)'
update-download-link: '§a下载地址: '
update-check-failure: '§e检查更新失败, 状态码: '
update-check-exception: '§4检查更新时发生IO异常.'
load-item-error-not-match: '§4加载 {0} 时出错! name、lore、type 至少需要提供一个, 当前全未提供'
load-item-error-unknown-type: '§e加载 {0} 时出错! 未知的物品类型: type: {1}'
load-item-error-not-found-operator: '§e加载条件时出错! 在条件中未找到运算符: {0}'
load-item-error-unknown-trigger: '§e加载 {0} 时出错! 未知的触发方式: {1}'
action-execute-error-sound: '§e错误: 无法执行 sound(-all) 动作! 原因: 指定的音效 {0} 不存在'
action-execute-error-give-money-not-found-economy: '§e未找到经济插件, 无法执行 give-money 动作!'
action-execute-error-give-money-not-found-economy-tip: '§e请检查是否正确安装Vault插件以及经济提供插件! (如Essentials、CMI、Economy等)'
action-execute-error-give-money-invalid-value: '§e错误: 无法执行 give-money 动作! 原因: 无效的数字格式: {0}'
action-execute-error-give-points-not-found-points: '§e未找到点券插件, 无法执行 give-points 动作!'
action-execute-error-give-points-not-found-points-tip: '§e请检查是否正确安装PlayerPoints插件!'
action-execute-error-give-points-invalid-value: '§e错误: 无法执行 give-points 动作! 原因: 无效的数字格式: {0}'
action-execute-error-title-args-error: '§e错误: 无法执行 title(-all) 动作! 原因: 无效的参数格式: {0}'
action-execute-error-title-not-support: '§e错误: 无法执行 title(-all) 动作! 原因: 当前服务端不支持此操作'
action-execute-error-title-invalid-time: '§e错误: 无法执行 title(-all) 动作! 原因: 无效的显示时间: {0}'
action-execute-error-action-bar-not-support: '§e错误: 无法执行 action-bar(-all) 动作! 原因: 当前服务端不支持此操作'
use-item-cooling: '§4使用冷却: §c{0}§4秒。'
use-item-condition-invalid-number: '§e解析条件时出错! 在数值比较表达式中发现无效数字: {0}'
use-item-error-price: '§e解析 {0} 时出错! 无效的花费: price: {1}'
use-item-error-points: '§e解析 {0} 时出错! 无效的花费: points: {1}'
use-item-error-levels: '§e解析 {0} 时出错! 无效的花费: levels: {1}'
use-item-error-required-amount: '§e解析 {0} 时出错! 无效的需求数量: required-amount: {1}'
use-item-error-cooldown: '§e解析 {0} 时出错! 无效的冷却时间: cooldown: {1}'
use-item-error-not-economy: '§c错误: 未找到经济插件,无法扣除余额。'
use-item-error-not-points: '§c错误: 未找到点券插件,无法扣除点券。'
use-item-not-enough-money: '§c你没有足够的金钱({0})使用此物品。'
use-item-not-enough-points: '§c你没有足够的点券({0})使用此物品。'
use-item-not-enough-levels: '§c你没有足够的等级({0})使用此物品。'
use-item-not-enough-permission: '§c你没有权限使用此物品。'
use-item-not-enough-amount: '§c你没有足够数量的物品可以使用。 (需要{0}个)'
command-list: '§6已加载的物品ID列表: §a{0}'
command-reload: '§a配置文件重载完成。'
command-version: '§a当前版本: §b{0}'
command-unknown: '§6未知的子命令'
command-add-not-item: '§d你确定你手里有物品?'
command-add-not-name: '§a你手中的物品没有显示名称, 无法添加name项。'
command-add-not-lore: '§a你手中的物品没有Lore, 无法添加lore项。'
command-add-console: '§a控制台无法使用此命令。'
command-add: '§a已添加到配置文件, ID为: {0}, 快去修改吧!'
command-give-usage: '§6用法: /ic give <玩家> <物品ID> <物品数量> [物品类型]'
command-give-tip1: '§7(物品类型参数仅在指定ID的物品配置中未指定物品类型时需要, 默认为石头)'
command-give-tip2: '§b<> = 必填参数 [] = 可选参数'
command-give-not-found-player: '§c指定的玩家不在线或不存在!'
command-give-not-found-id: '§c指定的ID不存在或未能正确加载。'
command-give-invalid-amount: '§c参数错误: 无效的数量: {0}'
command-give-error-amount: '§c错误: 物品数量不能小于1'
command-give-invalid-type: '§c错误: 无效的物品类型: {0}'
command-give: '§a已将§b{0}§a个{1}§a添加到§c{2}§a的物品栏.'
command-type-not-item: '§d你确定你手里有物品?'
command-type-console: '§a控制台无法使用此命令。'
command-type: '§a当前手持物品的类型是: §b{0}'

下载地址

本插件已在1.5.2/1.6.4/1.7.2/1.7.10/1.8.8/1.9.4/1.10.2/1.11.2/1.12.2/1.13.2/1.14.4/1.15.2/1.16/1.17/1.18/1.19/1.20测试通过
插件理论兼容Minecraft 2.0.0版本之前的任何新版本,所以即使是本帖没有标明的新版本通常也能正常使用。
备用下载地址:百度网盘 提取码: xcpc
如果使用金币 需要安装Vault插件以及支持Vault的经济插件(如Essentials、CMI、Economy等)
Vault下载地址:SpigotMC   MCBBS
如果使用点券 需要安装PlayerPoints插件
PlayerPoints下载地址:SpigotMC(1.8-1.18)   Dev-Bukkit(1.2-1.10)
如果使用PAPI变量 需要安装PlaceholderAPI插件并启用对应的变量扩展

更新日志

2022-02-13 1.0.3版本发布

  • 将"title-all"和"action-bar-all"动作中解析变量的玩家改为使用物品的玩家
  • 新增"sound-all"动作用来给全服玩家播放指定音效
  • 新增"/ic type"命令用来查看手持物品的类型
  • 其他细节修正和优化
    2022-02-10 1.0.2版本发布
  • 修复右键使用空地图时即使设置了取消右键点击事件仍会变成地图的问题
  • 其他细节修正和优化
    2022-02-07 1.0.1版本发布
  • 新增"lore-exact"选项用来选择Lore的匹配方式, 详见物品配置文件
    2022-01-30 1.0.0版本发布

(0)
像素搬运菌板块版主

帖子地址: 

发表回复

使用道具 举报

评论列表(2条)

xiao13 | Edg | Windows 10 来自 中国广东深圳

举报

Could not load 'plugins\[权限]ItemCommand-1.1.0.jar' in folder 'plugins'
org.bukkit.plugin.InvalidPluginException: java.lang.ClassNotFoundException: Failed to remap class ml.mcos.itemcommand.ItemCommand
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:194)
        at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:307)
        at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:231)
        at org.bukkit.craftbukkit.v1_6_R3.CraftServer.loadPlugins(CraftServer.java:231)
        at cpw.mods.fml.common.event.FMLServerAboutToStartEvent.<init>(FMLServerAboutToStartEvent.java:29)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at cpw.mods.fml.common.LoaderState.getEvent(LoaderState.java:84)
        at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:112)
        at cpw.mods.fml.common.Loader.serverAboutToStart(Loader.java:817)
        at cpw.mods.fml.common.FMLCommonHandler.handleServerAboutToStart(FMLCommonHandler.java:309)
        at net.minecraft.server.dedicated.DedicatedServer.func_71197_b(DedicatedServer.java:222)
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:630)
        at net.minecraft.server.ThreadMinecraftServer.run(ThreadMinecraftServer.java:16)
Caused by: java.lang.ClassNotFoundException: Failed to remap class ml.mcos.itemcommand.ItemCommand
        at org.bukkit.plugin.java.PluginClassLoader.remappedFindClass(PluginClassLoader.java:539)
        at org.bukkit.plugin.java.PluginClassLoader.findClass0(PluginClassLoader.java:456)
        at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:234)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:183)
        ... 15 more
Caused by: java.lang.IllegalArgumentException
        at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        at org.objectweb.asm.ClassReader.<init>(Unknown Source)
        at net.md_5.specialsource.RemapperPreprocessor.preprocess(RemapperPreprocessor.java:83)
        at org.bukkit.plugin.java.PluginClassLoader.remappedFindClass(PluginClassLoader.java:495)
        ... 22 more           
这是啥问题
回复 · 2024-8-12 19:59:11
有插件冲突了吧,前置安装齐了吗? 
2024-8-12 21:36