Chemdah中相关的Kether脚本命令:复制代码复制代码
如果这样写
复制代码是没有问题的,但是,如果在 {token} 的地方引用了变量
复制代码这样的话,&mat会被解析成&mat (没变)
而&amt会被解析成114514
这属于是Chemdah代码的问题 ({token}就是不允许使用变量)
Invero中扩展了一句:
复制代码其中两个变量 (&mat和&amt) 都可以被正常解析
但不知道A哥咋想的(也许已经修复了),限制了数量在0~64之间 (明明超过背包容量会自己掉落的。)
因为需求的问题,这句用不了
Vulpecula:
相关语句貌似不能用
PAPI扩展CheckItem:
超过背包容量会被吃掉,如果要判断背包空的地方的话
要这么长:
复制代码
求合适的解决办法
- inventory check {token} [amount {int}]
- <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>
 
如果这样写
- <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>
 
- set mat to "minecraft:coal"
 
- set amt to 114514
 
- inventory take &mat amount &amt
而&amt会被解析成114514
这属于是Chemdah代码的问题 ({token}就是不允许使用变量)
Invero中扩展了一句:
- inventory give item &mat amt &amt
但不知道A哥咋想的(也许已经修复了),限制了数量在0~64之间 (明明超过背包容量会自己掉落的。)
因为需求的问题,这句用不了
Vulpecula:
相关语句貌似不能用
PAPI扩展CheckItem:
超过背包容量会被吃掉,如果要判断背包空的地方的话
要这么长:
- set airleft to math papi %checkitem_amount_mat:air% * 64 
 
- set itemleft to papi %checkitem_amount_mat:coal_ore% 
 
- while check &itemleft < 64 then { set itemleft to math &itemleft -64 } 
 
- tell math &airleft + &itemleft
求合适的解决办法
你明明可以不用chckitem的,却坚持这么用,我真的哭死
 
 
 
超过背包容量会被吃掉
Neige 发表于 2023-7-29 18:04
你为什么不直接执行其他插件的指令给予物品?比如CMI,ESS
测试了下,CMI的give若是超过限制,是丢弃背包内所有的物品,然后给予,还是会吞掉物品
MC~蛟龙 发表于 2023-7-30 10:32
测试了下,CMI的give还是有限制(2304),超过还是会吞掉物品至于ESS,用的CMI所以不想换
...
我可不可以理解为,现在你的问题已经简化成了“使用一条指令给予一定数量的原版物品,溢出背包的掉在脚下,不限制数量上限”
FireworkPolymer 发表于 2023-7-29 18:03
你明明可以不用chckitem的,却坚持这么用,我真的哭死
显示的是格子数,具体可容纳数还是需要上面一长串计算
CheckItem是因为inventory的相关操作用不了
Neige 发表于 2023-7-30 10:36
我可不可以理解为,现在你的问题已经简化成了“使用一条指令给予一定数量的原版物品,溢出背包的掉在脚下 ...
可以这样理解
MC~蛟龙 发表于 2023-7-30 10:39
可以这样理解
一定要minecraft的物品id?bukkit的物品id可不可以
Neige 发表于 2023-7-30 10:45
一定要minecraft的物品id?bukkit的物品id可不可以
额,这什么意思,Bukkit的不是和原版的一样吗
MC~蛟龙 发表于 2023-7-30 10:48
额,这什么意思,Bukkit的不是和原版的一样吗
低版本有差异,高版本没啥区别
MC~蛟龙 发表于 2023-7-30 11:25
版本1.20.1
所以有什么好点的解决办法吗
装一下这个
https://www.mcbbs.net/thread-1364195-1-1.html
然后打开plugins/NeigeItems/Expansions文件夹,新建一个文本文档,改名"物品给予.js"
打开这个文件,输入以下文本:
- function enable() {
 
-     const ArrayList = Packages.java.util.ArrayList
 
-     const Comparator = Packages.java.util.Comparator
 
-     const ItemStack = Packages.org.bukkit.inventory.ItemStack
 
-     const Material = Packages.org.bukkit.Material
 
 
-     const materialIds = new ArrayList()
 
-     const materials = Material.values()
 
-     for (let index = 0; index < materials.length; index++) {
 
-         const material = materials[index]
 
-         try {
 
-             materialIds.add(material.key.toString())
 
-             materialIds.add(material.toString())
 
-         } catch (error) {}
 
-     }
 
-     materialIds.sort(Comparator.naturalOrder())
 
 
-     new Command("蛟龙给你物品")
 
-         .setPermission("蛟龙给你物品.command")
 
-         .setPermissionMessage("权限不足")
 
-         .setExecutor(function(sender, command, label, args) {
 
-             if (args.length < 2) {
 
-                 sender.sendMessage("/蛟龙给你物品 玩家ID 物品ID 物品数量")
 
-                 return true
 
-             }
 
-             const player = Bukkit.getPlayerExact(args[0])
 
-             if (player == null) {
 
-                 sender.sendMessage("玩家不在线或不存在")
 
-                 return true
 
-             }
 
-             let amount = 1
 
-             if (args.length > 2) {
 
-                 amount = parseInt(args[2])
 
-             }
 
-             if (isNaN(amount)) {
 
-                 sender.sendMessage(`无法解析的数量: ${args[2]}`)
 
-                 return true
 
-             }
 
-             let material
 
-             if (args[1].startsWith("minecraft:")) {
 
-                 material = Material.matchMaterial(args[1].substring(10).toUpperCase())
 
-             } else {
 
-                 material = Material.matchMaterial(args[1].toUpperCase())
 
-             }
 
-             if (material == null) {
 
-                 sender.sendMessage(`无法解析的物品材质: ${args[1]}`)
 
-                 return true
 
-             }
 
-             const itemStack = new ItemStack(material)
 
-             PlayerUtils.giveItems(player, itemStack, amount)
 
-             sender.sendMessage(`成功给予 ${args[0]} ${amount} 个 ${HookerManager.getParsedName(itemStack)}`)
 
-             return true
 
-         })
 
-         .setTabCompleter(function(sender, command, label, args) {
 
-             if (args.length == 1) {
 
-                 const onlinePlayers = new ArrayList()
 
-                 Bukkit.getOnlinePlayers().forEach(function(player) {
 
-                     onlinePlayers.add(player.name)
 
-                 })
 
-                 return onlinePlayers
 
-             } else if (args.length == 2) {
 
-                 return materialIds
 
-             } else if (args.length == 3) {
 
-                 return ["amount"]
 
-             }
 
-             return []
 
-         })
 
-         .register()
 
- }