Minecraft(我的世界)中文论坛

 找回密码
 注册(register)

!header_login!

只需一步,立刻登录

查看: 1856|回复: 4

[命令方块] 自定义NBT(附例子)

[复制链接]
发表于 2015-7-4 15:43:41 | 显示全部楼层 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
本帖最后由 pca006132 于 2016-1-10 15:43 编辑

这边也有人在研究这个自定义NBT的东西,帖子:http://tieba.baidu.com/p/3867857649作者:12142e
大家都知道,minecraft里有很多nbt,不过那些nbt都是mojang定义了的
那么自定义NBT是否可行呢?
其实是可以的,你在自定义的时候需要注意几点。
首先,有没有相同名字的NBT存在,如果有,你这个NBT就不能使用(因为你赋值给他会赋值到majang设定的那个)
第二,你需要给一个数据类型他,比如字串的话就要“”,byte(数值)的话就要b,之类,否则就不能探测到
第三,只能给物品使用(tag:{}),不然的话会马上消失
这个自定义NBT并不会消失,和普通的NBT类似

可能有人说,自定义NBT并没有什么用,那么我现在便提供一个例子吧
这个例子就是为剑提供一些属性,让拿着那把剑的玩家会有一些效果
我这个例子的效果有4个,分别是攻击敌人时会回血、夜视、把附近的生物减速和令自己无敌(只会吸收虚空伤害)

例子的OCS(一条命令) 1.8



使用方法:把以上命令放到一个命令方块里,然后用红石块激活
先把一个钻石剑扔出来,如果你扔一个金萝卜给它,当你拿着那个剑的时候,你就会有夜视效果
如果你扔一个幽灵之泪给他,当你拿着他打生物时,你就会会2.5格心
如果你扔一个冰给他,当你拿着他的时候,附近的生物都会减速(减速是相当明显而且那个范围挺大的)
如果你扔一组(64)附魔金苹果给他(贵的很),当你拿着他的时候你就会有满级的抗性(不会受到虚空以外的伤害)

这些效果可以配合,比如你可以一把剑有几个效果
但是这些效果的等级只有1级(因为我懒2333)

原理:
当你合成的时候,系统会为那把剑加入自定义的NBT
当你拿着它的时候,系统会检测你拿着的物品有没有指定的NBT,有的话就执行某个命令

计分板:
  1. scoreboard objectives add Effect dummy
复制代码
  1. scoreboard objectives add Item dummy
复制代码
  1. scoreboard objectives add damageDealt stat.damageDealt
复制代码

指令:

详细解释:
  1. scoreboard players set @e[type=Item] Item 2 {Item:{id:"minecraft:ice",Count:1b}}
  2. scoreboard players set @e[type=Item] Item 3 {Item:{id:"minecraft:golden_carrot",Count:1b}}
  3. scoreboard players set @e[type=Item] Item 5 {Item:{id:"minecraft:golden_apple",Damage:1s,Count:64b}}
  4. scoreboard players set @e[type=Item] Item 6 {Item:{id:"minecraft:ghast_tear",Count:1b}}
复制代码

这四个命令就是为所有的材料加分(除了剑),分别是冰、金萝卜、64个金苹果、幽灵之泪
以分辨材料

  1. scoreboard players set @e[type=Item] Item 0 {Item:{id:"minecraft:diamond_sword",Count:1b,Damage:0s}}
  2. scoreboard players set @e[type=Item] Item 8 {Item:{id:"minecraft:diamond_sword",Count:1b,Damage:0s,tag:{Slow:1b}}}
  3. execute @e[score_Item_min=0,score_Item=0] ~ ~ ~ execute @e[score_Item_min=2,score_Item=2,r=0] ~ ~ ~ scoreboard players set @e[r=0,score_Item=0,score_Item_min=0] Item 20
  4. entitydata @e[score_Item_min=20,score_Item=20] {Item:{tag:{Slow:1b}}}
  5. execute @e[score_Item_min=20,score_Item=20] ~ ~ ~ execute @e[score_Item_min=2,score_Item=2,r=0] ~ ~ ~ kill @e[r=0,score_Item_min=2,score_Item=2]
复制代码
基本上所有合成都是类似的模式
首先是把钻石剑的分数设定为0
然后把有了Slow:1b这个自定义NBT的剑排除掉(把分数设定为8)
然后让分数为0的物品检测1格内有没有分数为2的物品(冰),有的话就把钻石剑的分数设为20
之后把分数为20的钻石剑加入Slow:1b的自定义NBT
最后把那个材料给杀了(合成需要消耗那个材料)

P.S.如果不把已经有自定义NBT的剑排除掉,那个物品也会合成,然而就是白白的消耗了一个材料,而出来的物品也是一样

这个折叠的内容就是下方3个合成的解释(和上方这个的分别就是几个NBT和分数,所以可以不看)

然后这个部分便是检测玩家拿着的东西的NBT并给予反应的指令
  1. scoreboard players set @a Effect 0
  2. scoreboard players set @a Effect 1 {SelectedItem:{tag:{Slow:1b}}}
  3. execute @a[score_Effect_min=1,score_Effect=1] ~ ~ ~ effect @e[r=10,type=!Player] minecraft:slowness 2 2 true

  4. scoreboard players set @a Effect 0
  5. scoreboard players set @a Effect 1 {SelectedItem:{tag:{NightVision:1b}}}
  6. effect @a[score_Effect_min=1,score_Effect=1] minecraft:night_vision 20 0 true
  7. effect @a[score_Effect_min=0,score_Effect=0] minecraft:night_vision 0 1 true

  8. scoreboard players set @a Effect 0</div><div>scoreboard players set @a Effect 1 {SelectedItem:{tag:{OP:1b}}}
  9. effect @a[score_Effect_min=1,score_Effect=1] minecraft:resistance 2 5 true

  10. scoreboard players set @a Effect 0
  11. scoreboard players set @a Effect 1 {SelectedItem:{tag:{LifeSteal:1b}}}
  12. effect @a[score_Effect_min=1,score_Effect=1,score_damageDealt_min=1] minecraft:instant_health 1 0 true
  13. scoreboard players set @a damageDealt 0
复制代码

方法很简单,就是把每个玩家的Effect分数清0
然后检测拿着的物品有没有这个NBT({SelectedItem:{tag:{自定义的NBT}}}),有的话就把他的分数设置为1
然后对分数为1的玩家做出某些命令
比如有Slow:1b的玩家便是execute @a[score_Effect_min=1,score_Effect=1] ~ ~ ~ effect @e[r=10,type=!Player] minecraft:slowness 2 2 true
用途便是把玩家10格范围内玩家以外的生物减速

有LifeSteal的玩家在攻击了生物(damageDealt计分板的分数大于0就是攻击了生物)后就会给一个瞬间回复的效果


其实这个不用自定义NBT也可以做到,然而工作量会变得更多(因为你需要穷举其组合,然后加到某个NBT里,比如物品的名字/物品的描述)
用自定义NBT的话你就可以为每个属性加入一个NBT,然后逐个检测,这样便可以节省很多的运算





来自群组: Command Block Logic

评分

参与人数 10人气 +13 金粒 +113 收起 理由
唱片机 + 1 + 7 纪念
oo672135848 + 1 + 3 很棒的作品!
@@Leo + 1 + 15 看不懂,很厉害的样子,赞一个.
ghyzhi10086 + 1 科技·黑
lzs1234 + 2 黑科技
F空 + 1 Mcbbs有你更精彩~
kongbaiyo + 1 + 15 有用XDDDDDDDDDD把数据存到物品里XDD.
乙烯_中国 + 2 + 22 本来想劝你好好修改的,但是老是审核.
kakagou12 + 1 + 1 大略说说怎么自定义先。。
FHC红石 + 2 + 50 很棒的作品!

查看全部评分

回复

使用道具 举报

发表于 2015-7-4 19:41:07 | 显示全部楼层
你这篇博客的注释太乱了。。。
回复

使用道具 举报

发表于 2015-7-4 22:24:43 | 显示全部楼层
有那么多的已有tag 哪个都可以吗 (我记得保存没有的tag好像是1.8更新记录里看见过)
回复

使用道具 举报

发表于 2015-7-12 09:42:42 | 显示全部楼层
自定义的nbt有什么要求吗,是不是什么都可以
回复

使用道具 举报

发表于 2015-7-12 12:13:22 | 显示全部楼层
黑科技万岁{:10_523:}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 手机版本

GMT+8, 2017-9-25 08:46 , Processed in 0.287107 second(s), 7 queries , Memcache On.

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标。本站与Mojang以及微软公司没有从属关系。

© 2010-2017 我的世界中文论坛 版权所有。本站原创图文内容版权属于原创作者,未经许可不得转载。

快速回复 返回顶部 返回列表