我的世界命名牌右键研究分析详解
我的世界命名牌右键研究分析详解.那下面给大家解析的就是关于我的世界中的命名牌的右键,那到底命名牌右键点击实体或会发什么样的变化呢?那下面就一起来看看下面玩家的检测分析吧!
游戏园我的世界官方群:325049520 二群:256070479 欢迎各路喜爱我的世界的小伙伴们加入讨论!
玩服务器的小伙伴们可以加入:464651602 群一起联机玩游戏哦!
如果你有心仪的作品或者心得分享的话,欢迎来游戏园投稿,大家可以点击>>>投稿<<<进行投稿哦~ 有奖品哦~
传送门:我的世界1.9更新内容汇总
name_tag,即命名牌,是一种修改实体自定义名称的物品。
其对应的nbt tag很简单,就是物品本身的display:
-
(nbt)...{display:{Name:"xxx"}}
-
那么,当你右键命名实体后,其nbt tag就会变成:
-
(nbt)...{CustomName:"xxx"}
-
相比于萝卜钓竿、地图这些物品,命名牌支持更加缤纷的选项,因为它便于重置,而且String里面的内容完全是自定义也就是说可以从它引申出无限个右键的检测,这是萝卜钓竿等完全不能比拟的。
这段时间,我在着手制作一件名为"Chalk 白垩"的战衣,其中的核心即为命名牌右键检测。由于不同模式下有不同技能,单单的萝卜钓竿已经无法满足如此多的不同种类的右键判定,于是我想到了命名牌。
以其的夜视模式(Night Vision)为例,共有四个"按钮",即命名牌:
-
slot.hotbar.0:一个名为"Perspective",即透视的命名牌;
slot.hotbar.1:"Invisibility",即隐身;
slot.hotbar.2:"Overlook",即眺望;
slot.hotbar.8:"Closing",即关闭夜视模式。
-
可以看到,光是夜视模式就需要四种不同的右键判定。我们可以通过高频replaceitem来强制玩家的物品栏必须持有这些物品;如果需要清空(禁止玩家在这些格子放置其他物品)那么就使用air吧。注意使用Marker来标记,因为后面会调用到这些cb,例如:
-
mark:I(Invisibility缩写)
rcb:replaceitem entity @a[tag=NIghtVision] name_tag 1 0 {display:{Name:"Invisibility"}}
-
在开头我们已经解释了命名牌的原理,那么我们就可以通过检测生物CustomName的方法来触发模块,且这个环节是完全开放的,你甚至可以通过添加更多的自定义名称检测来自己添加功能。
首先我们需要一只可供我们检测的生物载体,在Chalk里面我选择了僵尸猪人(Zombie Pigman),原因有二。其一,猪人的高度与玩家相等,如果二者靠近那么成功命名的几率就会很大;其二,猪人是中立生物,且不会受到太阳/岩浆的伤害(其实这不是重点,因为其身上有Invulnerable),不容易受到外界的影响(可以对比村民右键参考)。
所以我们需要的nbt tag有:
-
//无AI,无声,无敌,隐身,以及特定tag
(nbt)...{CustomName:"",NoAI:1b,Silent:1b,Invulnerable:1b,ActiveEffects:[{Id:14b,Duration:1000000,ShowParticle:0b}],Tags:["rightClick"]}
-
tag是便于选择器检测,空的CustomName是为了理解方便,其他的大家都懂。
就像村民右键检测那样,我们需要让这只猪人跟随玩家,在这里我用夜视模式下的玩家做示范(夜视模式下,玩家会被加上"NightVision"标签)。
首先是常见的高频tp,将这只猪人传送到带有tag的玩家处:
-
rcb:tp @e[tag=rightClick] @a[tag=NightVision]
-
那么现在还有一个问题:如果玩家退出了夜视,那么这只猪人该去哪呢?
所以我们需要一个供猪人返回的Marker,你可以随便选一个地方设置,建议在cb链内部:
-
mark:returnMarker
rcb:execute @a[tag=!NightVision] ~ ~ ~ tp @e[tag=rightClick] @e[type=ArmorStand,name=returnMarker]
-
很好,现在tp部分已经完成了,但是二者直接会有碰撞,怎么办?
这时候需要用到队伍的一些设置:
-
//创建队伍
init:scb teams add rightClickTeam
//首先把玩家与猪人加入队伍
init:scb teams join rightClickTeam @a @e[tag=rightClick]
//关闭队伍碰撞
init:scb teams option rightClickTeam collisionRule never
//关闭名称显示(防止玩家看到猪人名称)
init:scb teams option rightClickTeam nametagVisibility never
//关闭隐身显示(防止玩家看到隐身的猪人的轮廓)
init:scb teams option rightClickTeam seeFriendlyInvisibility false
//关闭队伍攻击(其实Invulnerable已经足够,但还是以防万一)
init:scb teams option rightClickTeam friendlyfire false
-
现在准备工作已经完成,只要玩家处于隐身模式(拥有tag)就可以进行右键检测。接下来就是完全自定义的多样化右键检测了,以下以右键隐身为例:
-
//如果猪人被命名为"Invisibility"(也就是说玩家拿着对应的命名牌右键)之后,给予玩家隐身效果
rcb:execute @e[tag=rightClick,name=Invisibility] ~ ~ ~ effect @a[tag=NightVision] Invisibility 10000000 0 true
-
所以基本的格式就是:
-
execute @e[tag=(载体tag),name=(对应的命名牌名称)] ~ ~ ~ (自定义命令)
-
记得注意选择器的使用范围。
但是你会发现,这样只有单向性,也就是说和一次性没什么两样——需要做到再次右键关闭隐身,那么就需要一个重置的东西了。
在前期的准备里面,我们使用了几个高频replaceitem来锁定玩家物品栏,所以我们现在就需要改变这个replaceitem的内容:
-
//当玩家右键时,调整replaceitem那个cb的内容("I"是那个cb的Marker)
rcb:execute @e[tag=rightClick,name=Invisibility] ~ ~ ~ execute @e[name=I] ~ ~ ~ blockdata ~ ~ ~ {Command:"replaceitem entity @a[tag=NIghtVision] name_tag 1 0 {display:{Name:"Invisibility-Off"}}"}
-
可以看到,这里将cb的内容改变了,也就是说现在开始你的对应命名牌的名字会变成"Invisibility-Off"(注意转义)而不再是原来的"Invisibility"。这样一来,就能区分开/关了,你只需要仿照开启的格式重新写一段关闭的即可,例如说清除玩家身上的隐身效果:
-
rcb:execute @e[tag=rightClick,name=Invisibility-Off] ~ ~ ~ effect @a[tag=NightVision] Invisibility 0 0 true
-
另外如果需要冷却时间,可以设置为"...-Reloading"(只是例子,不强制要求)来标识为"正在冷却",此时如果再右键则不会有任何效果;或者你也可以通过调用一段tellraw来提示玩家,如:
-
//以下为被调用的cb
mark:test
icb:blockdata ~ ~ ~ {auto:0b}
tellraw @a[tag=NightVision] ["",{"text":"Reloading!"}](这是例子,当然你也可以利用score做出倒数提醒)
//这个是调用上面cb用的
rcb:execute @e[tag=rightClick,name=Invisibility-Reloading] ~ ~ ~ execute @e[name=test] ~ ~ ~ blockdata ~ ~ ~ {auto:1b}
-
然后连接scb/其他类型的时钟即可,时间一到就把命名牌恢复正常的名字,如此循环。
其他形式的模块大家也可以去尝试,我在这里只是举了两个很小的例子。相比于其他的右键检测,这种方法开放性更强、性能更高,而且调用起来也比较方便。
PS:在此非常感谢我的世界玩家651547166的分享。
以上就是我的世界命名牌右键研究分析详解。更多精彩尽在游戏园我的世界专区。
相关攻略推荐:
我的世界命名牌右键研究分析详解.那下面给大家解析的就是关于我的世界中的命名牌的右键,那到底命名牌右键点击实体或会发什么样的变化呢?那下面就一起来看看下面玩家的检测分析吧!
游戏园我的世界官方群:325049520 二群:256070479 欢迎各路喜爱我的世界的小伙伴们加入讨论!
玩服务器的小伙伴们可以加入:464651602 群一起联机玩游戏哦!
如果你有心仪的作品或者心得分享的话,欢迎来游戏园投稿,大家可以点击>>>投稿<<<进行投稿哦~ 有奖品哦~
传送门:我的世界1.9更新内容汇总
name_tag,即命名牌,是一种修改实体自定义名称的物品。
其对应的nbt tag很简单,就是物品本身的display:
-
(nbt)...{display:{Name:"xxx"}}
-
那么,当你右键命名实体后,其nbt tag就会变成:
-
(nbt)...{CustomName:"xxx"}
-
相比于萝卜钓竿、地图这些物品,命名牌支持更加缤纷的选项,因为它便于重置,而且String里面的内容完全是自定义也就是说可以从它引申出无限个右键的检测,这是萝卜钓竿等完全不能比拟的。
这段时间,我在着手制作一件名为"Chalk 白垩"的战衣,其中的核心即为命名牌右键检测。由于不同模式下有不同技能,单单的萝卜钓竿已经无法满足如此多的不同种类的右键判定,于是我想到了命名牌。
以其的夜视模式(Night Vision)为例,共有四个"按钮",即命名牌:
-
slot.hotbar.0:一个名为"Perspective",即透视的命名牌;
slot.hotbar.1:"Invisibility",即隐身;
slot.hotbar.2:"Overlook",即眺望;
slot.hotbar.8:"Closing",即关闭夜视模式。
-
可以看到,光是夜视模式就需要四种不同的右键判定。我们可以通过高频replaceitem来强制玩家的物品栏必须持有这些物品;如果需要清空(禁止玩家在这些格子放置其他物品)那么就使用air吧。注意使用Marker来标记,因为后面会调用到这些cb,例如:
-
mark:I(Invisibility缩写)
rcb:replaceitem entity @a[tag=NIghtVision] name_tag 1 0 {display:{Name:"Invisibility"}}
-
在开头我们已经解释了命名牌的原理,那么我们就可以通过检测生物CustomName的方法来触发模块,且这个环节是完全开放的,你甚至可以通过添加更多的自定义名称检测来自己添加功能。
首先我们需要一只可供我们检测的生物载体,在Chalk里面我选择了僵尸猪人(Zombie Pigman),原因有二。其一,猪人的高度与玩家相等,如果二者靠近那么成功命名的几率就会很大;其二,猪人是中立生物,且不会受到太阳/岩浆的伤害(其实这不是重点,因为其身上有Invulnerable),不容易受到外界的影响(可以对比村民右键参考)。
所以我们需要的nbt tag有:
-
//无AI,无声,无敌,隐身,以及特定tag
(nbt)...{CustomName:"",NoAI:1b,Silent:1b,Invulnerable:1b,ActiveEffects:[{Id:14b,Duration:1000000,ShowParticle:0b}],Tags:["rightClick"]}
-
tag是便于选择器检测,空的CustomName是为了理解方便,其他的大家都懂。
就像村民右键检测那样,我们需要让这只猪人跟随玩家,在这里我用夜视模式下的玩家做示范(夜视模式下,玩家会被加上"NightVision"标签)。
首先是常见的高频tp,将这只猪人传送到带有tag的玩家处:
-
rcb:tp @e[tag=rightClick] @a[tag=NightVision]
-
那么现在还有一个问题:如果玩家退出了夜视,那么这只猪人该去哪呢?
所以我们需要一个供猪人返回的Marker,你可以随便选一个地方设置,建议在cb链内部:
-
mark:returnMarker
rcb:execute @a[tag=!NightVision] ~ ~ ~ tp @e[tag=rightClick] @e[type=ArmorStand,name=returnMarker]
-
很好,现在tp部分已经完成了,但是二者直接会有碰撞,怎么办?
这时候需要用到队伍的一些设置:
-
//创建队伍
init:scb teams add rightClickTeam
//首先把玩家与猪人加入队伍
init:scb teams join rightClickTeam @a @e[tag=rightClick]
//关闭队伍碰撞
init:scb teams option rightClickTeam collisionRule never
//关闭名称显示(防止玩家看到猪人名称)
init:scb teams option rightClickTeam nametagVisibility never
//关闭隐身显示(防止玩家看到隐身的猪人的轮廓)
init:scb teams option rightClickTeam seeFriendlyInvisibility false
//关闭队伍攻击(其实Invulnerable已经足够,但还是以防万一)
init:scb teams option rightClickTeam friendlyfire false
-
现在准备工作已经完成,只要玩家处于隐身模式(拥有tag)就可以进行右键检测。接下来就是完全自定义的多样化右键检测了,以下以右键隐身为例:
-
//如果猪人被命名为"Invisibility"(也就是说玩家拿着对应的命名牌右键)之后,给予玩家隐身效果
rcb:execute @e[tag=rightClick,name=Invisibility] ~ ~ ~ effect @a[tag=NightVision] Invisibility 10000000 0 true
-
所以基本的格式就是:
-
execute @e[tag=(载体tag),name=(对应的命名牌名称)] ~ ~ ~ (自定义命令)
-
记得注意选择器的使用范围。
但是你会发现,这样只有单向性,也就是说和一次性没什么两样——需要做到再次右键关闭隐身,那么就需要一个重置的东西了。
在前期的准备里面,我们使用了几个高频replaceitem来锁定玩家物品栏,所以我们现在就需要改变这个replaceitem的内容:
-
//当玩家右键时,调整replaceitem那个cb的内容("I"是那个cb的Marker)
rcb:execute @e[tag=rightClick,name=Invisibility] ~ ~ ~ execute @e[name=I] ~ ~ ~ blockdata ~ ~ ~ {Command:"replaceitem entity @a[tag=NIghtVision] name_tag 1 0 {display:{Name:"Invisibility-Off"}}"}
-
可以看到,这里将cb的内容改变了,也就是说现在开始你的对应命名牌的名字会变成"Invisibility-Off"(注意转义)而不再是原来的"Invisibility"。这样一来,就能区分开/关了,你只需要仿照开启的格式重新写一段关闭的即可,例如说清除玩家身上的隐身效果:
-
rcb:execute @e[tag=rightClick,name=Invisibility-Off] ~ ~ ~ effect @a[tag=NightVision] Invisibility 0 0 true
-
另外如果需要冷却时间,可以设置为"...-Reloading"(只是例子,不强制要求)来标识为"正在冷却",此时如果再右键则不会有任何效果;或者你也可以通过调用一段tellraw来提示玩家,如:
-
//以下为被调用的cb
mark:test
icb:blockdata ~ ~ ~ {auto:0b}
tellraw @a[tag=NightVision] ["",{"text":"Reloading!"}](这是例子,当然你也可以利用score做出倒数提醒)
//这个是调用上面cb用的
rcb:execute @e[tag=rightClick,name=Invisibility-Reloading] ~ ~ ~ execute @e[name=test] ~ ~ ~ blockdata ~ ~ ~ {auto:1b}
-
然后连接scb/其他类型的时钟即可,时间一到就把命名牌恢复正常的名字,如此循环。
其他形式的模块大家也可以去尝试,我在这里只是举了两个很小的例子。相比于其他的右键检测,这种方法开放性更强、性能更高,而且调用起来也比较方便。
PS:在此非常感谢我的世界玩家651547166的分享。
以上就是我的世界命名牌右键研究分析详解。更多精彩尽在游戏园我的世界专区。
相关攻略推荐:
相关文章
更多+热门搜索
手游排行榜
- 最新排行
- 最热排行
- 评分最高
-
应用软件 大小:12.6M
-
动作塔防 大小:179.27M
-
其他游戏 大小:90.47MB
-
其他游戏 大小:21.61mb
-
冒险解谜 大小:789.63 MB