Ghost_Last
本帖最后由 Ghost_Last 于 2021-2-7 19:16 编辑
前言
   众所周知,/data指令是无法更改玩家的背包的。虽然BBS上最近出现了/item指令,但是那个指令似乎比较麻烦,要写json(据说)。还有潜影盒的方法来达成目的。但是接下来将呈现一种方法,可以简便流畅的更改玩家背包物品数据。  


    优点:数据精简,制作方便,运行流畅(仅需5~10行指令实现)。
    缺点:输出不能指定栏位 放在27~35格背包的物品无法进行修改。


效果图

    Tip:这是一张我近期做的地图,名字为迷失海域,若想了解,测试欢迎加入QQ群聊(1050041857)

原理描述

      在自身高一格的位置生成一个容器,然后将背包需要修改的物品利用/data复制进容器,再对复制进的物品进行修改,最后再将容器打碎,击杀容器掉落物仅剩已修改的物品,完成输出。
    效果如前文所说,仅仅不能指定栏位,还有放在27~35的物品那它没辙以外,见效果图。你可以发现生成的容器看都看不到,且自身高一格的方块本应使玩家触发趴下,但是没有此效果。声音且击碎粒子都可以去材质文件将它们全部消除。并且所担心的靠太近误抢输出物的问题,除非高频tp此玩家,不然根本没机会捡到输出物。(若想彻底根绝此问题可以调整ownerNBT)

   
    对于效果图的步骤,用的也是此方法。但是是利用捡起掉落物物品若后无叠加,排序会从前到后,若后能叠加,则加于后的性质做的。并没有在箱子里修改掉落物。这种方法同样可以用来限制玩家背包栏个数。如果全部用物品来限制背包栏会引发一系列的bug,效果不仅人意,甚至需要定上规则来让人不将背包玩坏。


操作步骤
1.在玩家头顶处生成容器(拿木箱为例)
setblock ~ ~1 ~ minecraft:barrel
2.将特定栏位物品存放容器(容器中的指定的Slot:1b输入栏位是无效的,但是不加指令会失败,所以务必加上)
data modify block ~ ~1 ~ Items[{Slot:1b}] set from entity @s Inventory[{Slot:9b}]
*容器中指定栏位到底与什么有关?

如图所示,若物品在红线上,输入箱子栏位如图所示。例如三角形和长方形输入栏位和原栏位可以当做例子

3.在容器中修改输入物的NBT数据
/data modify block ~ ~ ~ Items[{Slot:9b}].tag.Damage set value 100
4.将未输入的原有物品清空
replaceitem entity @s inventory.0 air
5.破坏容器,获得物品
setblock ~ ~1 ~ minecraft:air destroy
6.清除距离最近的一个容器物品
kill @e[type=minecraft:item,nbt={Item:{id:"minecraft:barrel"}},sort=nearest,limit=1]
7.成功修改物品

材质部分

1.将sounds附件放入以下目录的材质包里来完成消音步骤



2.将木箱材质换成无色透明(这个简单,不会真没辙了)

结语
   
    这个方案是我写指令中无意想出来的,若有大佬方法更好,欢迎大家评论区来进行补充。然后对于这种方法我还是非常赞成使用的,毕竟消耗低易上手,随便会点data的人都能做。并且还可以做出类似原版附魔,武器升级,背包限制等一系列的东西。





















冰尘-三色堇
啊这.....奇怪的知识增加了

ruhuasiyu
item写锤子json,item就是把玩家物品复制到箱子,然后修改,然后复制回来就行了

(=°ω°)丿
你说的要写 json 可能指的是 物品修饰器(是可选参数)


https://wiki.biligame.com/mc/%E5%91%BD%E4%BB%A4/item


item block 0 0 0 container.0 copy entity @s weapon.mainhand
data modify block 0 0 0 Items[0].tag set ...
item entity @s weapon.mainhand copy block 0 0 0 container.0

胡珂大王
啊这.....奇怪的知识增加了

夕阳红熊猫
有个小小的问题,我怎么做成用成就解锁的那种

第一页 上一页 下一页 最后一页