Minecraft(我的世界)中文论坛

标题: 修改玩家背包物品信息(免穷举)

作者: ruhuasiyu    时间: 2019-4-28 13:21
标题: 修改玩家背包物品信息(免穷举)
本帖最后由 ruhuasiyu 于 2020-4-26 06:28 编辑

起因是我在做物品处理机,处理任意64个物品压缩成1个带64× Lore的物品时,发现输出到箱子内时,如果要用loot insert的话,必须要解决动态物品id的问题。然后我发现似乎用"type": "minecraft:dynamic"类型配合挖掘潜影箱的战利品表,可以做到这一点。

例如玩家手持64个物品,我们想把其数量修改为32。
execute as @a[nbt={SelectedItem:{Count:64b}}] run function test:modify

test:modify
  1. setblock ~ 255 ~ shulker_box{Items:[{Slot:0b,id:"minecraft:stone",Count:32b}]}
  2. data modify block ~ 255 ~ Items[0].id set from entity @s SelectedItem.id
  3. data modify block ~ 255 ~ Items[0].tag set from entity @s SelectedItem.tag
  4. replaceitem entity @s weapon.mainhand air
  5. loot replace entity @s weapon.mainhand 1 mine ~ 255 ~ minecraft:diamond_pickaxe{isShulkerMarker:1b}
  6. setblock ~ 255 ~ air
复制代码

修改minecraft/loot_tables/blocks/shulker_box.json为使用特定nbt的镐挖掘时,掉落内含物而且不掉落潜影盒。
  1. {
  2.     "type": "minecraft:block",
  3.     "pools": [
  4.         {
  5.             "rolls": 1,
  6.             "entries": [
  7.                 {
  8.                     "type": "minecraft:alternatives",
  9.                     "children": [
  10.                         {
  11.                             "type": "minecraft:dynamic",
  12.                             "name": "minecraft:contents",
  13.                             "conditions": [
  14.                                 {
  15.                                     "condition": "minecraft:match_tool",
  16.                                     "predicate": {
  17.                                         "nbt":"{isShulkerMarker:1b}"
  18.                                     }
  19.                                 }
  20.                             ]
  21.                         },
  22.                         {
  23.                             "type": "minecraft:item",
  24.                             "functions": [
  25.                                 {
  26.                                     "function": "minecraft:copy_name",
  27.                                     "source": "block_entity"
  28.                                 },
  29.                                 {
  30.                                     "function": "minecraft:copy_nbt",
  31.                                     "source": "block_entity",
  32.                                     "ops": [
  33.                                         {
  34.                                             "source": "Lock",
  35.                                             "target": "BlockEntityTag.Lock",
  36.                                             "op": "replace"
  37.                                         },
  38.                                         {
  39.                                             "source": "LootTable",
  40.                                             "target": "BlockEntityTag.LootTable",
  41.                                             "op": "replace"
  42.                                         },
  43.                                         {
  44.                                             "source": "LootTableSeed",
  45.                                             "target": "BlockEntityTag.LootTableSeed",
  46.                                             "op": "replace"
  47.                                         }
  48.                                     ]
  49.                                 },
  50.                                 {
  51.                                     "function": "minecraft:set_contents",
  52.                                     "entries": [
  53.                                         {
  54.                                             "type": "minecraft:dynamic",
  55.                                             "name": "minecraft:contents"
  56.                                         }
  57.                                     ]
  58.                                 }
  59.                             ],
  60.                             "name": "minecraft:shulker_box"
  61.                         }
  62.                     ]
  63.                 }
  64.             ]
  65.         }
  66.     ]
  67. }
复制代码

具体想修改物品信息的情形,可以通过直接修改潜影盒内物品实现,这里不做赘述。
唯一的缺点就是,需要在255高度引入额外的方块潜影盒,这会导致原有的位于255高度的方块消失。


作者: ⊙v⊙    时间: 2019-4-28 16:18
本帖最后由 ⊙v⊙ 于 2019-4-27 22:28 编辑

这方法有一段时间了
不过想说的是...修改玩家背包这东西十分,十分有用,且使用频率很高,建议找个地方长期存放盒子。

↓ ↓ ↓ 最重要的id得不到就有点菜,且没什么意义了...

作者: ruhuasiyu    时间: 2019-4-28 16:20
⊙v⊙ 发表于 2019-4-28 16:18
这方法有一段时间了
不过想说的是...修改玩家背包这东西十分,十分有用,且使用频率很高,建议找个地方长期 ...

不用盒子的方法,chyx在 http://www.mcbbs.net/thread-837334-1-1.html 中发过,但是要穷举物品id
作者: w186429780    时间: 2019-4-28 16:49
我感觉说的对牛逼6666
作者: ruhuasiyu    时间: 2019-4-28 17:24
⊙v⊙ 发表于 2019-4-28 16:18
这方法有一段时间了
不过想说的是...修改玩家背包这东西十分,十分有用,且使用频率很高,建议找个地方长期 ...

穷举指的是在loot_table中穷举,function中用的时候是不需要穷举的
作者: ⊙v⊙    时间: 2019-4-28 17:29
本帖最后由 ⊙v⊙ 于 2019-4-27 23:30 编辑
ruhuasiyu 发表于 2019-4-27 23:24
穷举指的是在loot_table中穷举,function中用的时候是不需要穷举的

lt中穷举也是很不好(且十分不建议的)啊...
作者: Ruainbow_    时间: 2019-4-28 22:44
高度0是基岩来着,替换基岩似乎比有可能替换玩家建筑要赚一点?
作者: ruhuasiyu    时间: 2019-4-29 06:51
Ruainbow_ 发表于 2019-4-28 22:44
高度0是基岩来着,替换基岩似乎比有可能替换玩家建筑要赚一点?

不是所有地图高度0都是基岩的……
作者: buhuichongfu    时间: 2019-4-29 07:50
一涉及到指令,看着就有点吃力。
指令一般是用来做RPG地图吗?这类指令,感觉建筑和生存都不会用到。
作者: 1042102543    时间: 2019-4-29 12:49
大佬啊我去,什么鬼代码
作者: Ruainbow_    时间: 2019-4-29 13:02
ruhuasiyu 发表于 2019-4-29 06:51
不是所有地图高度0都是基岩的……

彳亍口巴23333
那么在世界边界或者非常遥远的地方加载区块然后使用呢?
作者: ruhuasiyu    时间: 2019-4-29 17:04
Ruainbow_ 发表于 2019-4-29 13:02
彳亍口巴23333
那么在世界边界或者非常遥远的地方加载区块然后使用呢?

加载是问题。你要是想手动强制加载,然后固定坐标或许可以。一般谁会把建筑放在255啊……
作者: ruhuasiyu    时间: 2019-4-29 17:05
buhuichongfu 发表于 2019-4-29 07:50
一涉及到指令,看着就有点吃力。
指令一般是用来做RPG地图吗?这类指令,感觉建筑和生存都不会用到。 ...

做原版模组和rpg都可能会用到,不过rpg基本固定物品所以可能不需要这样的技巧也可以实现。
作者: (=°ω°)丿    时间: 2019-5-1 08:45
本帖最后由 Teenager_Yang 于 2019-5-1 18:15 编辑

data modify 是个好东西。
就是不知道用驴的箱子可不可以……
赶紧去试一下……
跑#
  1. summon minecraft:donkey ~ ~ ~ {Tags:["test"],ChestedHorse:1b,Items:[{Slot:2b,id:"minecraft:stone",Count:32b}]}
  2. data modify entity @e[tag=test,limit=1] Items[0].id set from entity @s SelectedItem.id
  3. data modify entity @e[tag=test,limit=1] Items[0].id set from entity @s SelectedItem.tag
  4. replaceitem entity @s weapon.mainhand air
  5. kill @e[tag=test]
复制代码
貌似是可以的。
唯一的缺点就是,需要在255高度引入额外的方块潜影盒,这会导致原有的位于255高度的方块消失。

就是不知道用驴的箱子有什么有什么缺点,反正不用引入额外的方块潜影盒就对了。
写的稍微有点简陋,dalao 稍微改一下就好了。对 loot table 一窍不通。

帖子没看完,谢罪谢罪
不对,是帖子没仔细看
(总感觉自己最近这几天好像有哪不大对劲)

作者: chyx    时间: 2019-5-1 12:00
Teenager_Yang 发表于 2019-5-1 08:45
data modify 是个好东西。
就是不知道用驴的箱子可不可以……
赶紧去试一下……

你写的是什么。。。。
根本没体现出楼主的作用啊。。。


作者: ruhuasiyu    时间: 2019-5-1 12:31
Teenager_Yang 发表于 2019-5-1 08:45
data modify 是个好东西。
就是不知道用驴的箱子可不可以……
赶紧去试一下……

我无语了……我要的是把这个物品送到玩家手上或者背包指定的槽位,你给我生成一个掉落物干嘛……
修改掉落物的nbt有什么可讨论的……
作者: Jokey_钥匙    时间: 2019-5-2 18:54
终于,存读档玩家背包的功能实现了(大雾)
作者: Jokey_钥匙    时间: 2019-5-12 08:18
本帖最后由 467440721 于 2019-5-12 08:24 编辑

没用啊?(指战利品表)
到手一个潜影盒
路径block改成blocks又什么都不掉了
楼主路径的确有问题【
是blocks不是block
战利品表用不了是论坛的锅(直接复制有空格导致游戏无法识别)

作者: 无情王少    时间: 2019-5-15 14:15
我看不懂,什么意思哦
作者: cf6513272991    时间: 2019-5-25 13:04
指令一般是用来做RPG地图吗?
作者: chyx    时间: 2019-10-18 00:56
本帖最后由 chyx 于 2019-10-18 00:58 编辑
无情王少 发表于 2019-5-15 14:15
我看不懂,什么意思哦

因为mojang不让直接修改实体的NBT。

我听说这样做是因为在内存里,一个运行中的实体对象并不是一棵NBTCompound。
只有在存档里,它才是。

所以,我们修改实体NBT,其实是把这个实体保存了,保存成一棵NBT,把命令里要改的NBTmerge进去,再加载merge了的那棵NBT。

而玩家不好这样做。


之前可以改物品的tag里面的原因也是这个。因为tag还真是时时刻刻都是一棵NBT


作者: guo143042    时间: 2019-10-18 09:20
受教了,还能这么搞
作者: 阡喏    时间: 2019-10-19 23:07
牛逼就完事了
作者: Ph-苯    时间: 2020-3-12 21:13
本帖最后由 七刀月复 于 2020-3-13 08:57 编辑

反馈bug
版本:20w10a/11a(不排除之前的版本也有)
当替换主手物品时,潜影盒Slot:1b的物品会替换掉副手位,2b会替换掉靴子,3b会替换掉护腿,4b会替换掉胸甲,5b会替换掉头盔。如果上述潜影盒槽位为空,那么玩家对应槽位物品会被清除。

-----------------------------------------------------------------
基本命令都忘了,太丢人了

作者: ruhuasiyu    时间: 2020-3-12 21:26
七刀月复 发表于 2020-3-12 21:13
反馈bug
版本:20w10a/11a(不排除之前的版本也有)
当替换主手物品时,潜影盒Slot:1b的物品会替换掉副手位 ...

你少写了个1吧? https://www.mcbbs.net/thread-874755-1-1.html
作者: Ph-苯    时间: 2020-3-12 21:38
本帖最后由 七刀月复 于 2020-3-13 09:07 编辑
ruhuasiyu 发表于 2020-3-12 21:26
你少写了个1吧? https://www.mcbbs.net/thread-874755-1-1.html

可能是我被命令提示给迷惑了,我有时间看看。————————————————————————————————
我真的被命令提示迷惑了,以为只有这一种格式……

作者: 秋亦风云    时间: 2020-3-17 17:31
大佬,这个代码真的看不懂,虽然只是针对于服主,但是一涉及到指令就睁眼瞎了
作者: 麦克吊    时间: 2020-3-17 20:04
提示: 作者被禁止或删除 内容自动屏蔽
作者: 麦克吊    时间: 2020-3-17 21:32
提示: 作者被禁止或删除 内容自动屏蔽
作者: DJSouth    时间: 2020-3-18 11:26
很多地方都需要。。。。
作者: 黑黑大    时间: 2020-4-13 09:42
额,那个玩家的末影箱有办法吗
作者: 三十晴天    时间: 2020-4-13 16:07
厉害厉害(py人气√)
作者: ruhuasiyu    时间: 2020-4-13 22:16
黑黑大 发表于 2020-4-13 09:42
额,那个玩家的末影箱有办法吗

类似操作,末影箱也属于玩家的slot,将玩家末影箱内容复制到潜影盒后,用特定镐子挖掘并replace 玩家的末影箱栏位的第0格,而且指定覆盖栏位数量为27即可
作者: 12tianxun    时间: 2020-4-14 13:55
讲详细点,都啥意思,(一脸闷逼不懂数据包的我)
作者: 2629761830    时间: 2020-5-3 23:05
ruhuasiyu 发表于 2019-4-28 17:24
穷举指的是在loot_table中穷举,function中用的时候是不需要穷举的

是否可以把玩家的手持数据转移到潜影盒当中,然后再执行后面的loot呢
(我要做副手物品自动转主手)
作者: ruhuasiyu    时间: 2020-5-4 09:51
2629761830 发表于 2020-5-3 23:05
是否可以把玩家的手持数据转移到潜影盒当中,然后再执行后面的loot呢
(我要做副手物品自动转主手 ...

当然可以,loot到副手并指定只输出1个栏位
作者: Chara404    时间: 2020-5-30 15:03
这条指令我放1.15测试好像无效啊

作者: Chara404    时间: 2020-5-30 15:09
本帖最后由 Chara404 于 2020-5-30 16:46 编辑
Chara404 发表于 2020-5-30 15:03
这条指令我放1.15测试好像无效啊

是我忘了改json了抱歉(但是改了还是没用啊???)
我测试的结果是改了战利品表后仍不会对NBT起反应,但是生成的潜影盒里会带另一个潜影盒(迷惑)

作者: lianqiuchen    时间: 2020-5-30 19:16
完全没看懂大佬说的什么意思~
作者: 理智反迷你    时间: 2020-7-12 13:08
我觉得直接用clear加give不就可以了....

作者: 名字没有?    时间: 2020-7-15 22:36
谢谢分享!!!
作者: 1539776978    时间: 2020-7-16 10:48
哇,厉害,之前总有人偷东西,不知道可不可以查到别人背包东西
作者: mchengxiaozi    时间: 2020-7-18 21:20
本帖最后由 mchengxiaozi 于 2020-7-18 21:22 编辑

潜影盒如果在高度0的地方可以吗???(如果有人问过了请无视QAQ)
作者: tingting9554132    时间: 2020-7-26 07:00
老老实实 玩生存 看着就花
作者: 毁灭解说    时间: 2020-7-26 10:48
谢谢楼主的分享
作者: jjuyalp    时间: 2020-7-26 12:07
mcbbs有你更精彩
作者: Eternally_yali    时间: 2020-7-26 12:09
代码我看不懂咋办
作者: AppleCarrot    时间: 2020-7-28 20:44
来考考古
其实1.16有了自定义维度,也就没必要把0,255,0的方块替换掉了
完全可以建立一个维度,替换那个维度0,255,0的方块


作者: JunYun    时间: 2020-7-28 22:25
总有一天,我会肉体将会归于尘埃,我的意志亦会随着落英飞散,而你,我的孩子,你终将继承大统!
DND测出是守序善良怎么破?这也太偏了吧
小黑屋随身带
语句可点
来看看我的草稿纸吧
我记忆中最完美的水帖,可惜了,BGM崩了。
目前在Steam方面决定实行改革开放。

作者: 625062218    时间: 2020-7-29 08:11
大佬牛逼 感谢感谢
作者: wansn    时间: 2020-8-16 19:23
炒鸡好用的原版模组,我不仅自己用,还推荐给我的朋友用,大家都说好,强烈推荐!!!(五毛一条,记得删括号)
作者: 永爱不忘    时间: 2020-8-20 11:28
代码  复制好了   人在哪里领
作者: 胖虎123    时间: 2020-8-22 00:28
新萌看了表示无奈看不懂qaq
作者: 430843842    时间: 2020-8-22 01:15
大佬,完全看不明白
作者: lxt123qwe    时间: 2020-8-22 11:37
新萌看不懂hhh
作者: 806の蜗牛    时间: 2020-8-27 10:46
谢谢楼主分享
作者: Dearq    时间: 2020-8-27 11:44
我记得不是有个叫背包编辑器的东西吗。。。
作者: hahaha936    时间: 2020-8-27 14:45
sssssssssssssssssssssss
作者: 执笔抚琴弦    时间: 2020-8-29 10:33
这数据看的脑壳子疼
作者: Jokey_钥匙    时间: 2020-11-12 08:58
RIP rua影盒
1.14-20w46a
作者: Rechard_xu    时间: 2020-12-3 18:04
感觉一涉及到代码我就头大,不愧是大佬,就是感觉穷举ID的话无论是手动还是自动哪个工作量都很大啊