admin 发表于 2018-8-31 22:54:28

BanItem with NBT



适用服务端:
|Cauldron| |CraftBukkit| |Spigot|




功能
   ·根据多级NBT的值(支持JavaScript,正则表达式解析)来禁用物品和地上的方块
   ·在NBT上搜索,移除禁用物品
   ·玩家切换手上物品时检查物品权限
   ·玩家登陆时检查背包栏,和已经支持的mod的背包来检查物品权限
   当前支持的背包有 Baubles饰品背包,匠魂背包,旅行者装备背包
   ·使用命令检查指定玩家背包
   ·区块加载时没收黑名单方块(默认关闭,而且貌似有时候无效)
   ·没事无聊可以看看物品的NBT



3.2.36
   ·修复CatServer的支持问题
   ·对禁用配置中的物品名字在增加时进行非法字符的过滤防止非法字符造成的配置文件无法读取
   ·配置文件增加错误备份


3.2.35
   ·1.13支持
   *话说3.2.33以上的版本都是为了MC1.13的支持版本,
   所以1.7的那些服务器就不要升级,反正也没修什么BUG,没什么新功能
   不过还是很高兴你们能够反馈错误,虽然我并看不到图片
   ·修复了1.7服务再调用NBT相关功能的时候报错的问题


3.2.3
更新的内容
   ·新增新的免检查权限配置
    免检查权限的基本格式为 BanItem.bypass.禁用Flag.物品类型@物品子id@NBT禁用节点
    其中,禁用Flag,物品子id均可以替换为星号
    NBT禁用节点就是禁用配置里的那个NBT节点名字
   


    什么,为啥NBT禁用节点不能替换为星号,不写@NBT禁用节点不就等于是星号了么
   ·允许为NBTTagList与NBTTagCompound类型的NBT设置默认值,默认值必须严格遵循Json格式
    可以使用在线的Json格式检查器检查Json格式,注意,由于Json中会有中括号和大括号,配置到Yaml
    配置文件中时,请在json字符串两端加上单引号,不然会被解析成Yaml的配置结构,如果使用命令添
    加的,我觉得十有**会自动加上单引号

   
更新历史
领主论坛bbs.gmjaja.com



权限,所有权限op拥有(可以通过添加非权限取消)
领主论坛bbs.gmjaja.com


BanItem.*:
    BanItem所有权限
    权限默认所有者: 管理员
    子权限:
      BanItem.bypass: true
      BanItem.cmdcomplete: true
      BanItem.cmd: true
# 对于BanItem.bypass权限,配置文件中启用相应的配置
# 例如一个子id为0的箱子的use权限被禁了
# 启用Permission.CheckItemId,权限检查会检查BanItem.bypass.use.54这样的权限
# 启用Permission.CheckItemDamage,权限检查会检查BanItem.bypass.use.54@0这样的权限
# 两者都未启用,只会检查BanItem.bypass.use这样的权限
#免检查权限的基本格式为 BanItem.bypass.禁用Flag.物品类型@物品子id@NBT禁用节点
#NBT禁用节点就是禁用配置里的那个NBT节点名字
#其中,禁用Flag,物品子id均可以替换为星号
BanItem.bypass:
    跳过禁用物品检查的权限
    权限默认所有者: 管理员
    子权限:
      # 破坏方块的权限
      BanItem.bypass.break: true
      # 合成物品的权限
      # 此权限仅在玩家点击结果格子的物品时才会触发检查,例如工作台,炉子
      BanItem.bypass.craft: true
      # 拿着该物品的权限,此权限处理有缺点
      # 如果玩家快捷栏全是没有hold权限的物品,那么就没有意义了
      BanItem.bypass.hold: true
      # 与方块交互的权限
      BanItem.bypass.interact: true
      # 基本所有的权限,检查玩家背包,放置,点击,丢弃,切换,基本所有事件都需要检查该权限
      BanItem.bypass.inv: true
      # 放置方块的权限
      BanItem.bypass.place: true
      # 使用物品的权限
      BanItem.bypass.use: true
BanItem.bypass.*.物品id
    此权限3.0.31及以后的版本才存在
    跳过某个物品所有禁用Flag检查的权限
    物品id支持数字id和文字id
    例如,以前版本,如果你禁了箱子的use和hold权限,这时候想给某个玩家用
    那么你必须同时给该玩家BanItem.bypass.use.54和BanItem.bypass.hold.54两个权限
    非常的繁琐,所以这时候就可以改用给该权限BanItem.bypass.*.54直接给所有Flag的权限
    不要忘记将配置中Permission.CheckItemId设置为true,否则此权限无效
BanItem.bypass.useintnbt
    在nbt中使用物品的权限,例如法杖核心,枪械mod的子弹
    权限默认所有者: 管理员
BanItem.cmdcomplete:
    自动补全命令的权限
    权限默认所有者: 管理员
BanItem.cmd
    所有命令的权限
    权限默认所有者: 管理员
    子权限:
      BanItem.cmd.help: true
      BanItem.cmd.item: true
      BanItem.cmd.nbt: true
      BanItem.cmd.nbtdump: true
      BanItem.cmd.reload: true
      BanItem.cmd.scan: true
      BanItem.cmd.show: true
      BanItem.cmd.param: true
BanItem.cmd.help:
    获取插件帮助的权限
    权限默认所有者: 管理员
BanItem.cmd.add:
    添加物品到禁用物品列表的权限
    权限默认所有者: 管理员
BanItem.cmd.remove:
    从禁用物品列表移除物品的权限
    权限默认所有者: 管理员
BanItem.cmd.nbt:
    操作NBT检查物品列表的权限
    权限默认所有者: 管理员
    子权限:
      BanItem.cmd.nbt.add: true
      BanItem.cmd.nbt.remove: true
      BanItem.cmd.nbt.show: true
BanItem.cmd.nbt.add:
    添加物品到NBT检查物品列表的权限
    权限默认所有者: 管理员
BanItem.cmd.nbt.remove:
    从NBT检查物品列表移除物品的权限
    权限默认所有者: 管理员
BanItem.cmd.nbt.show:
    显示NBT检查物品列表配置的权限
    权限默认所有者: 管理员
BanItem.cmd.nbtdump:
    获取物品NBT节点列表的权限
    权限默认所有者: 管理员
BanItem.cmd.param:
    查看参数帮助的权限
    权限默认所有者: 管理员
BanItem.cmd.reload:
    插件重载总权限
    权限默认所有者:管理员
    子权限:
      BanItem.cmd.reload.config: true
      BanItem.cmd.reload.help: true
      BanItem.cmd.reload.lang: true
      BanItem.cmd.reload.list: true
      BanItem.cmd.reload.plugin: true
BanItem.cmd.reload.plugin:
    重载插件的权限
    权限默认所有者: 管理员
BanItem.cmd.reload.config:
    重载插件配置的权限
    权限默认所有者: 管理员
BanItem.cmd.reload.help:
    获取重载命令帮助的权限
    权限默认所有者: 管理员
BanItem.cmd.reload.lang:
    重载插件语言文件的权限
    权限默认所有者: 管理员
BanItem.cmd.reload.list:
    重载禁用物品列表和NBT检查物品列表的权限
    权限默认所有者: 管理员
BanItem.cmd.scan:
    扫描玩家背包的权限
    权限默认所有者: 管理员
BanItem.cmd.show:
    显示禁用物品列表配置的权限
    权限默认所有者: 管理员




命令所有命令支持Tab自动补全
领主论坛bbs.gmjaja.com


命令规则
中括号[]包裹的表示该项可填可不填,尖括号<>包裹的表示该项为必填,
竖线|分隔的表示多个可选项,例如<false|true>,表示必填,可选值为false和true
可选参数为可写可不写的项,具体意义参考命令参数模块


/banitem add [参数:值]
    可选参数: item,damage,world,nbtlabel,nbtvalue,flag,reason,confiscate,preferlist,defnbtvalue
    添加物品配置到禁用物品列表

/banitem remove [参数:值]
    可选参数: item,damage,world,nbtlabel,nbtvalue,preferlist
    从禁用物品列表中移除物品配置

/banitem show [参数:值]
    可选参数: item,damage,world
    显示指定物品id在禁用物品列表中的配置

/banitem nbt add [参数:值]
    可选参数: item,damage
    添加物品配置到NBT物品检查列表

/banitem nbt remove [参数:值]
    可选参数: item,damage
    从NBT物品检查列表移除物品配置

/banitem nbt show [参数:值]
    可选参数: item,damage
    显示指定物品id在NBT物品检查列表中的配置

/banitem nbtdump
    显示当前手上物品的NBT,若当前手上物品为空,将尝试显示鼠标所指方块的NBT

/banitem param [参数标签]
    显示命令参数的作用

/banItem help [页数]
    获取banitem插件命令的帮助

/banitem reload config
    重载插件主配置

/banitem reload lang
    重载插件语言文件

/banitem reload list
    重载禁用物品列表,NBT检查物品列表

/banitem reload
    重载插件




命令参数所有参数支持Tab自动补全
领主论坛bbs.gmjaja.com


很多人都不知道参数是干嘛用的,都认为很难理解,其实完全不用担心,比起一个需要输入一定
顺序的5+以上的命令参数,前缀可以指定你输入参数的作用意义而且不用考虑顺序

举个例子,我们要添加一个人,命令是/人 添加,但是人有很多属性,比如性别,年龄等
这时候我们就需要指定那些属性的值,然后命令就是/人 添加 年龄:100 性别:男
有时候,觉得性别这个词数量太多了,想要有个缩写,然后就变成了/人 添加 年龄:100 性:男
BanItem插件也是,类似

参数使用规则就是/命令 [子命令] 参数前缀:值...

各个参数介绍:

PreferList:(3.2.1版本及以上)
    简写: pl
    说明: 设置操作的自定义禁用列表
    默认值: 无默认值

DefNBTValue:(3.2.01版本及以上)
    简写: dnv
    说明: 设置在某个物品因为某个NBT节点被禁用时,将该NBT节点的值替换成的值
    3.2.3版本开始允许为NBTTagList与NBTTagCompound类型的NBT设置默认值,默认值必须严格遵循Json格式
    可以使用在线的Json格式检查器检查Json格式,注意,由于Json中会有中括号和大括号,配置到Yaml
    配置文件中时,请在json字符串两端加上单引号,不然会被解析成Yaml的配置结构
    应用: 例如植物魔法的泰拉镐,mana节点
    默认值: 无默认值

Confiscate:
    简写: c
    说明: 设置是否没收物品
    可用值: t,true,yes,f,false,no
    默认值: 无默认值

Damage:
    简写: d
    说明: 设置操作的物品的子id,-1代表全部子id
    默认值: 如果当前输入命令的是玩家,那么默认值会读取玩家手中物品的damage值,
      如果手中没有物品,或者是控制台发送的命令,那么damage将不设置值
      此时,如果使用例如/banitem remove i:54将会移除箱子节点下的所有配置
            3.0.03开始,如果玩家设置了NBTLabel的值,将会自动填充子id为手上物品的子id
      如果手上物品不存在,那么就设置为-1

Flag:
    简写: f
    说明:设置物品禁用的权限,用逗号分隔多个权限
    默认值:无默认值

Item:
    简写: i
    说明:设置操作的物品类型
    默认值:如果当前输入命令的是玩家,那么默认值会读取玩家手中物品类型
      如果手中没有物品,或者是控制台发送的命令,将会报错

NBTLabel:
    简写: nl
    说明: 设置操作的物品的NBT标签
    默认值: 无默认值

NBTValue:
    简写: nv
    说明: 设置操作的物品的NBT标签的值
    默认值: 无默认值,此值的格式有要求
      *,直接编辑配置文件的记得在两边加单引号,不然配置读取会报错,代表禁掉所有包含
            NBTLabel的NBT,此目的也可以通过不设置NBTValue的值来实现
      以normal|开头的正常NBT值,比如我要禁掉abc这个NBT,那么就要写成nv:normal|abc
      以reg|开头的正则表达式类型的NBT值,比如我要禁掉NBT全是数字时的NBT,那么
            就要写成nv:reg|\d+
      以js|开头的JavaScript类型的NBT值,变量名为value,及在使用js解析时,value是
            一个已经帮你填好值的变量,比如我要禁掉泰拉镐mana大于666的镐子,那么完
            整的命令(手拿镐子的情况下)/bi add d:-1 nl:mananv:js|value>666

Reason:
    简写: r
    说明:设置物品禁用的原因
    默认值:无默认值,在添加到配置文件之后,插件加载该配置时,如果未发现Reason这个配置
      将会尝试想他的父配置查找Reason这个配置,如果父节点也没有,那么将读取自配置

World:
    简写: w
    说明:设置操作的世界
    默认值:如果是玩家,那么默认值就是玩家所在的世界,如果是控制台,那么就是默认世界,
            那么,玩家如何指定默认世界呢?使用w:/default/,代表就是默认世界




所有物品禁用权限(Flag)
领主论坛bbs.gmjaja.com


Drop:
    需要3.0.31版本及以上才有该Flag
    描述: 物品丢弃
    适用事件: 物品丢弃事件,可以用来防止熊孩子乱丢铀238

Pickup:
    需要3.0.31版本及以上才有该Flag
    描述: 物品拾取
    适用事件: 物品拾取事件

Break:
    描述: 方块破坏
    适用事件: 方块破坏事件

Craft:
    描述: 取出合成物品
    适用事件: 背包点击事件

Hold:
    描述: 切换物品拿着东西事件
    适用事件: 切换物品事件

Interact:
    描述: 交互方块
    适用事件: 玩家交互事件

Inv:
    描述: 背包内存在
    适用事件: 几乎插件监听的所有事件适用

Place:
    描述: 方块放置
    适用事件: 方块放置事件

Use:
    描述: 使用物品
    适用事件: 玩家交互事件

UseInNBT:
    描述: 在NBT中使用的权限
    适用事件: 玩家交互事件




配置多世界继承
领主论坛bbs.gmjaja.com




配置例子


/default/:
    该节点不代表任何世界它指代全局设置
    如果别的世界未设置继承或者未配置过继承设置比如我有一个世界
    叫abc,但是未出现在上面的配置中那么abc这个世界的禁用物品配置
    将会默认继承自全局世界

Inhert节点:
    该节点设置此世界继承哪些世界的配置,例如上面的main世界继承
    world世界的设置

Perfer节点:
    该节点设置继承哪些禁用列表的配置,此处的禁用列表文件位置在插件目录的
    PreferItemList文件夹下,例如以上配置中world世界配置了此项,那么插件会到PreferItemList
    文件夹下查找名叫ic2.yml的禁用物品列表然后加载并和world中的禁用物品进行合并,
    合并只在内存中发生不会影响到world文件的配置

非继承配置例子:
    /default/
      Prefer
      - 只能主世界用
    world
      Prefer
      - -只能主世界用
这样配置之后,"只能主世界用"这个禁用列表里面的物品就只能在world世界用了


嗯,很多人反正就是怎样都看不懂上面的配置,我就直接举例子
1. 我要在main世界禁用某物品
    惯例管理会输入命令bi add w:main命令,然后插件会提示main世界未配置
    此时需要在配置中这么写
    InhertItemList:
      plot: {}
    也可以这么写
    InhertItemList:
      plot:
      Inhert:
      - /default/
    效果是一样的
    你说Inhert什么意思不知道,怎么用? 请用百度翻译
    其中/default/为默认配置,就是插件目录下面的那个禁用列表配置
    配置完了记得重载,重载,重载
2. 我要在m1,m2,m3,m4里面都禁用某个配置
    首先,按第一个条的,四个世界都配置起来,看起来应该像下面这样子
    InhertItemList:
      m1: {}
      m2: {}
      m3: {}
      m4: {}
    然后你就开始在四个世界输入命令了,到第二个世界突然想起来,不是有Inhert这个功能么
    嗯,可以在世界m1中禁用,然后其他世界继承m1世界的配置就好了吧,然后就是下面这个样子
    InhertItemList:
      m1: {}
      m2:
      Inhert:
      - m1
      m3:
      Inhert:
      - m1
      m4:
      Inhert:
      - m1
    然后你想想又有些地方不对,我m1世界有些别的禁用东西不需要在其他世界禁用,但是确实有
    很多相同的东西只要在这四个世界禁用
    这时候Prefer配置项就起到作用了
    比如这四个世界都要禁用的东西我给他取个名字,叫"四世界禁用列表"
    然后你会使用.bi add pl:四世界禁用列表来为这个列表增加禁用配置
    在接着配置继承列表,像下面这样子
    InhertItemList:
      m1:
      Prefer:
      - 四世界禁用列表
      m2:
      Prefer:
      - 四世界禁用列表
      m3:
      Prefer:
      - 四世界禁用列表
      m4:
      Prefer:
      - 四世界禁用列表




如何配置防止法杖使用禁用核心(类似还有枪,植物魔法透镜)
领主论坛bbs.gmjaja.com


1.先手上拿着法杖输入/banitem nbt add d:-1
    不用担心上面这个命令,上面这个并不是ban物品的命令,只是把法杖加到nbt检查列表
2.拿着要ban的核心输入/banitem add f:useinnbt
    此命令值禁止了核心在NBT中使用的权限
    如果想要设置没收,/banitem add f:useinnbt c:true

操作完毕之后,核心上到法杖上后,插件会到法杖的nbt中查找被禁用的物品
如果配置了核心没收,那么法杖会一起被没收
如果你不想法杖被一起没收,可到主配置文件中设置配置节点RemoveBanedItemFromNBT为true
这样只要法杖本身没被禁,就只会移除被禁用的核心,法杖不会被没收




如何配置相同id的[物品/方块(地上的)]
领主论坛bbs.gmjaja.com


----------------==物品篇==----------------

1.手上先拿着要ban的物品,输入/banitem nbtdump,结果如下(这是一把拔刀)



2.鼠标移到复制那里,点一下就能快速生成禁用该物品某个NBT节点的命令了,拔刀的话选CurrentItemName
    说明一下生成的命令的意思
    add就是添加
    nl:CustmonMaxDamage,nl指NBTLabel也可以用全拼,后面的就是NBT标签
    nv:flammpfeil.slashblade.named.nihilul,nv指NBTValue,后面就是对应NBT标签的值,这里的nv值还加了normal|的前缀,指示这是一个普通的nbt
    还可以更改子id参数为-1,-->d:-1,因为拔刀有耐久
    如果你手动输入到了/banitem ban add nl:    按一下Tab就可以出提示,效果和这个差不多

3. 回车后还会有提示,你添加了什么样的物品配置到了文件



4.如果还觉得不清楚,你还可以使用/banitem show命令显示这个物品都ban了什么子id和NBT
    对于上面的例子,手里拿着的东西不变,输入/banitem show
    show命令可用的参数有三个
      世界,如果没有设置,默认当前玩家世界
      物品,如果没有设置,默认使用手上的,可以是数字,也可以是英文
       子id,如果没有设置,默认打印全部的子id



    输完命令后出来的结果就是这样子,点击蓝色的字体可以快速生成删除该配置节点的命令
----------------==物品篇结束==----------------


----------------==方块篇==----------------

除非你不想玩家和这个方块交互,不然ban相同id的方块并没啥用,对于植物魔法,就算把地上的花ban了,只要撸掉下面的土还是可以的

1.鼠标对着要ban的方块输入/banitem nbtdump此时你手上不能拿着东西

2.比如以下的植物魔法



3.接下来就和ban物品一样了,植物魔法方块区别类别的就是subTileName

4.然后地上的花直接撸就不能撸掉了

----------------==方块篇结束==----------------





如何设置物品NBT值来使用JS解析(Ban附魔和泰拉镐为例子)
领主论坛bbs.gmjaja.com


插件如何判断是使用正常的字符串匹配来比较还是用js解析呢,如果是js脚本,你的nbt值中必须以js|为开头,然
后在进行JS语法的解析,再根据解析结果来确定这个物品的NBT是不是被禁用的,nbt的值将通过value这个变量传入

----====泰拉镐例子====----


泰拉镐子根据等级不同可以挖不同数量的方块,所以一些服务器会想办法禁掉高等级的泰拉镐,但是
泰拉稿子的等级是根据魔力的多少来决定的,是一个范围型的NBT,banitem插件不可能把每个数字都
加到禁用列表里,这时候就需要使用JS解析功能,这样输入

/banitem add d:-1 nl:mana nv:js|value>99999999


nv参数的值设置为js|value>9999999,意思就是这个物品的NBT中mana节点的值只要大于9999999都会被禁用
当然你也可以使用正则表达式,reg|\d{8,}匹配到8位数字,那就肯定是大于9999999



添加结果


添加之后,如果nv参数中的值以js|开头,会对这个值进行JS解析的数字和字符串变量替换的测试,如果两项测试都没有通过,那么就认为这个js脚本写错了,需要重写


测试不通过的情况


另外,在版本3.2.0中新出的DefaultNBTValue参数,可以将禁用命令稍加修改为
/banitem add d:-1 nl:mana nv:js|value>99999999 c:f dnv:99999999
这样可以自动将高等级的泰拉镐修改到允许的等级,而不是全盘的禁用导致玩家再也无法使用该镐子


----====Ban附魔====----


随便拿一个带附魔的物品,然后输入/banitem add nl:ench nv:,然后按一下tab,nv的值就会填上了
我这里的值nv:[{lvl:3,id:16},{lvl:2,id:21}] ,一个锋利3,一个抢夺2



我们就拿ban锋利的例子来,锋利的附魔id是16,以上字符串中id就是附魔id,lvl就是附魔等级,
然后我们改一下命令,变成/banitem add nl:ench nv:js|value.indexOf("id:16")!=-1,然后回车



value.indexOf("id:16")!=-1这句话的意思就是把NBT值作为字符串,然后使用JS语法里字符串的indexOf方法来确定id:16这个字符串的位置,如果返回-1,说物品NBT中的ench节点的值不包含id为16的附魔

当然JS解析器的功能肯定不止这么一点,你可以写复杂的语言,不过相对应的耗时就会增加,value变量可以写多个

这里一个复杂的JS解析例子
js|var a=false,b=eval("("+value+")");if(b instanceof Array){for(var i in b){if(b.id==16&&b.lvl>2){a=true;break}}}a;

var a = false,b =eval("(" + value + ")");
if (b instanceof Array) {
    for (var i in b) {
      if (b.id == 16 && b.lvl > 2) {
            a = true;
            break
      }
    }
}
a;




由于ench这个节点的值比较特殊,可以转换成数组,所以可以使用遍历,这段js的作用就是,查找id为16的附魔,如果等级大于2就禁用,只要在js语句最后一句话放上你要返回的结果就可以获取到比较结果了

编辑JS脚本的几个注意事项
   ·js语句内不能return
   ·js内的字符串中的特殊字符需要转义,例如var regx="\d{1,}"需要写成var regx="\\d{1,}"
   ·如果js语句太长了想要直接编辑文件,一定要注意单引号的转义,单引号是配置文件的边界符号,所以如果字符串
       中包含了单引号,写到文件里一定要改成两个,所以可以的话,尽量不要使用单引号,可以使用双引号代替单引号





常见问题与回答
领主论坛bbs.gmjaja.com


注意,此问答只针对3.x版本的banitem插件


问: 怎么禁用镐子等有耐久的物品
答: 手拿要禁用的物品,输入/banitem add damage:-1,
    damage:-1表示所有子id,3.1.03版本允许使用damage:*
    命令的简单写法为/bi add d:-1

问: 怎么禁止物品使用,但是还能参与合成
答: 手拿要禁用的物品,输入/banitem add flag:use confiscate:false,
    flag:,就是要禁用的权限,use就禁用使用权限,多个权限用逗号分隔
    confiscate:,设置是否没收,false或者f或者no表示不没收
    命令的简单写法为/bi add f:use c:f

问: 使用/banitem nbtdump后,点击复制生成的命令提示nv参数无效
答: 一般上生成的命令为/banitem add d:0 nl:xxxxxx nv:yyyyyyy
    无效的原因是因为nv参数即nbtvalue需要指定类型(参考命令参数模块的说明)
    所以在复制命令后,需要将nv:yyyyyyy改为nv:normal|yyyyyyy
    3.1.03版本不强制添加normal前缀,默认则为此类型的NBT

问: 我禁了泥土(比较**的例子),然后玩家一点地上的泥土就消失了,我不想它消失,但是背包里还是要没收
答: 将泥土的id添加到主配置文件中的BanItem.BlocksNotSetToAir节点即可

问: 我用命令/bi add禁了某个物品,怎么给某个玩家权限
答: 首先,你需要将主配置Permission.CheckItemId设置为true
    然后,给该玩家添加BanItem.bypass.*.物品id 的权限,物品id可以是数字id
    或者文字id,如果只想给使用权限怎么办,使用权限是BanItem.bypass.use.物品id
    use就是使用Flag的名字

问: 怎么禁止熊孩子在主城丢铀238害人
答: 可以通过禁掉drop权限达到目的/bi add flag:drop confiscate:false
    flag:,就是要禁用的权限,use就禁用使用权限,多个权限用逗号分隔
    confiscate:,设置是否没收,false或者f或者no表示不没收,当然为了惩戒熊孩子,也可以设置为没收
    最好配置一下多世界继承,只在主城禁止丢弃
    你也可以使用贵重物品插件来达到相同目的

问: 为什么我禁了法杖核心的useinnbt权限,玩家还是能在法杖中使用核心
答: 禁了法杖核心的权限之后,你还需要将法杖添加到NBT物品检查列表
    手拿法杖输入/bi nbt add d:-1,那是不是所有的法杖都要拿手上打一次指令
    呢?不用的,一般上法杖的大id都是一样得,既然命令里指定了damage:-1这个
    参数,那么就是指所有的子id也包括了
    这条命令的就是将法杖添加到nbt检查列表,这个列表的作用就是在玩家使用
    该物品时,会在该物品的nbt中检索物品是否被禁用

问: 为什么我禁了某个物品,但是该物品已经放置在地上的方块不没收
答: 三种可能
      第一种 原本物品是没有子id的,但是放置到地上之后就有了子id
    但是,直接手拿物品输入/bi add只ban了0这个子id,地上的其他物品子id没ban,所以
    不会没收,这时候,你需要将命令改成/bi add d:-1,当然要确定其他子id没有其他
    物品,防止误ban,典型的就是箱子
      第二种 你手上的物品与地上的物品id根本就不是一样的,典型的就是木牌
      第三种 如果你是用NBT ban的物品,那么就是可能物品的标志名称变了,典型的
    就是植物魔法的花,植物魔法的花物品状态在手上时,区分类型的nbt名字是type,但
    是在地上时是subTileName,这时候两种NBT就都需要ban一遍,具体可以用nbtdump
    命令查看一下





关于判断优先度以及判断方法
领主论坛bbs.gmjaja.com

1.如果物品本身是禁用的物品
    检查物品自身的id以及damage是否符合禁用列表
    符合的话再进行NBT值的匹配
2.检查自身的id以及damage是否符合NBT搜索列表内的物品
    符合的话对NBT进行禁用物品搜索
    NBT搜索规则:
      如果存在名字叫id的int类型的nbt标签,将这个的值作为物品的id
      如果存在名字叫type的string类型的nbt标签,将这个的值作为物品的id
      如果存在名字叫damage或meta的short类型的nbt标签,将这个的值作为物品的子id
      如果存在名字叫Tag的NBTTagCompound类型的节点,将这个的值作为物品的NBT进行NBT值匹配

下载
链接:https://pan.baidu.com/s/1oro18tPgp2n_JwmSas8nnA 密码:pvuy

q244642926 发表于 2018-10-8 13:27:21

怎么办一个东西在工作台不能合成但可以参与别的物品的合成

q1436698454 发表于 2020-10-30 03:06:26

发生内部错误怎么解决吗?重装了插件还是没用!!求大佬解答
页: [1]
查看完整版本: BanItem with NBT