MC~蛟龙
Chemdah中相关的Kether脚本命令:
  1. inventory check {token} [amount {int}]
复制代码
  1. <span style="color: rgb(209, 211, 226); font-family: Nunito, sans-serif; background-color: rgb(248, 249, 252);">inventory (remove|take) {token} [amount {int}]</span>
复制代码



如果这样写
  1. <span style="box-sizing: border-box; font-weight: bolder; color: rgb(133, 135, 150); font-family: Nunito, sans-serif;">inventory take</span><span style="color: rgb(133, 135, 150); font-family: Nunito, sans-serif; background-color: rgb(234, 236, 244);"> "minecraft:diamond" </span><span style="box-sizing: border-box; font-weight: bolder; color: rgb(133, 135, 150); font-family: Nunito, sans-serif;">amount</span><span style="color: rgb(133, 135, 150); font-family: Nunito, sans-serif; background-color: rgb(234, 236, 244);"> 1</span>
复制代码
是没有问题的,但是,如果在 {token} 的地方引用了变量
  1. set mat to "minecraft:coal"
  2. set amt to 114514
  3. inventory take &mat amount &amt
复制代码
这样的话,&mat会被解析成&mat (没变)
而&amt会被解析成114514

这属于是Chemdah代码的问题 ({token}就是不允许使用变量)

Invero中扩展了一句:
  1. inventory give item &mat amt &amt
复制代码
其中两个变量 (&mat和&amt) 都可以被正常解析
但不知道A哥咋想的(也许已经修复了),限制了数量在0~64之间 (明明超过背包容量会自己掉落的。)

因为需求的问题,这句用不了

Vulpecula:

相关语句貌似不能用

PAPI扩展CheckItem:

超过背包容量会被吃掉,如果要判断背包空的地方的话
要这么长:
  1. set airleft to math papi %checkitem_amount_mat:air% * 64
  2. set itemleft to papi %checkitem_amount_mat:coal_ore%
  3. while check &itemleft < 64 then { set itemleft to math &itemleft -64 }
  4. tell math &airleft + &itemleft
复制代码



求合适的解决办法



FireworkPolymer
你明明可以不用chckitem的,却坚持这么用,我真的哭死





Neige
超过背包容量会被吃掉
你为什么不直接执行其他插件的指令给予物品?比如CMI,ESS

MC~蛟龙
Neige 发表于 2023-7-29 18:04
你为什么不直接执行其他插件的指令给予物品?比如CMI,ESS

测试了下,CMI的give若是超过限制,是丢弃背包内所有的物品,然后给予,还是会吞掉物品

Neige
MC~蛟龙 发表于 2023-7-30 10:32
测试了下,CMI的give还是有限制(2304),超过还是会吞掉物品至于ESS,用的CMI所以不想换
...

我可不可以理解为,现在你的问题已经简化成了“使用一条指令给予一定数量的原版物品,溢出背包的掉在脚下,不限制数量上限”

MC~蛟龙
FireworkPolymer 发表于 2023-7-29 18:03
你明明可以不用chckitem的,却坚持这么用,我真的哭死

显示的是格子数,具体可容纳数还是需要上面一长串计算
CheckItem是因为inventory的相关操作用不了

MC~蛟龙
Neige 发表于 2023-7-30 10:36
我可不可以理解为,现在你的问题已经简化成了“使用一条指令给予一定数量的原版物品,溢出背包的掉在脚下 ...

可以这样理解

Neige

一定要minecraft的物品id?bukkit的物品id可不可以

MC~蛟龙
Neige 发表于 2023-7-30 10:45
一定要minecraft的物品id?bukkit的物品id可不可以

额,这什么意思,Bukkit的不是和原版的一样吗

Neige
MC~蛟龙 发表于 2023-7-30 10:48
额,这什么意思,Bukkit的不是和原版的一样吗

低版本有差异,高版本没啥区别

MC~蛟龙
Neige 发表于 2023-7-30 10:57
低版本有差异,高版本没啥区别

版本1.20.1
所以有什么好点的解决办法吗

Neige
MC~蛟龙 发表于 2023-7-30 11:25
版本1.20.1
所以有什么好点的解决办法吗

装一下这个
https://www.mcbbs.net/thread-1364195-1-1.html

然后打开plugins/NeigeItems/Expansions文件夹,新建一个文本文档,改名"物品给予.js"
打开这个文件,输入以下文本:
  1. function enable() {
  2.     const ArrayList = Packages.java.util.ArrayList
  3.     const Comparator = Packages.java.util.Comparator
  4.     const ItemStack = Packages.org.bukkit.inventory.ItemStack
  5.     const Material = Packages.org.bukkit.Material

  6.     const materialIds = new ArrayList()
  7.     const materials = Material.values()
  8.     for (let index = 0; index < materials.length; index++) {
  9.         const material = materials[index]
  10.         try {
  11.             materialIds.add(material.key.toString())
  12.             materialIds.add(material.toString())
  13.         } catch (error) {}
  14.     }
  15.     materialIds.sort(Comparator.naturalOrder())

  16.     new Command("蛟龙给你物品")
  17.         .setPermission("蛟龙给你物品.command")
  18.         .setPermissionMessage("权限不足")
  19.         .setExecutor(function(sender, command, label, args) {
  20.             if (args.length < 2) {
  21.                 sender.sendMessage("/蛟龙给你物品 玩家ID 物品ID 物品数量")
  22.                 return true
  23.             }
  24.             const player = Bukkit.getPlayerExact(args[0])
  25.             if (player == null) {
  26.                 sender.sendMessage("玩家不在线或不存在")
  27.                 return true
  28.             }
  29.             let amount = 1
  30.             if (args.length > 2) {
  31.                 amount = parseInt(args[2])
  32.             }
  33.             if (isNaN(amount)) {
  34.                 sender.sendMessage(`无法解析的数量: ${args[2]}`)
  35.                 return true
  36.             }
  37.             let material
  38.             if (args[1].startsWith("minecraft:")) {
  39.                 material = Material.matchMaterial(args[1].substring(10).toUpperCase())
  40.             } else {
  41.                 material = Material.matchMaterial(args[1].toUpperCase())
  42.             }
  43.             if (material == null) {
  44.                 sender.sendMessage(`无法解析的物品材质: ${args[1]}`)
  45.                 return true
  46.             }
  47.             const itemStack = new ItemStack(material)
  48.             PlayerUtils.giveItems(player, itemStack, amount)
  49.             sender.sendMessage(`成功给予 ${args[0]} ${amount} 个 ${HookerManager.getParsedName(itemStack)}`)
  50.             return true
  51.         })
  52.         .setTabCompleter(function(sender, command, label, args) {
  53.             if (args.length == 1) {
  54.                 const onlinePlayers = new ArrayList()
  55.                 Bukkit.getOnlinePlayers().forEach(function(player) {
  56.                     onlinePlayers.add(player.name)
  57.                 })
  58.                 return onlinePlayers
  59.             } else if (args.length == 2) {
  60.                 return materialIds
  61.             } else if (args.length == 3) {
  62.                 return ["amount"]
  63.             }
  64.             return []
  65.         })
  66.         .register()
  67. }
复制代码
然后输入"/ni reload"重载,或者重启服务器,你就可以通过"/蛟龙给你物品 玩家ID 物品ID 物品数量"给物品了