风梭
本帖最后由 ouqianwei 于 2015-6-8 10:41 编辑
--All About Command--

[Sacrwind工作室]O_fengxin出品
看不懂或者其它原因问题可下载地图


前    言

>>preface<<

写这些不会看着很奇葩吧2333

咳咳,严肃(完全不)

从这个帖子开始我就要开始写CB教程了

不过我不并不会将每个指令都讲解一遍并展示它的一般用法

而是展示我个人的创意(如有雷同= =...随便吧)

希望能给大家制作地图的思路

让大家看了有种“原来还可以这样玩”(233)的感觉

望大神勿喷 喜欢的话 就别吝啬人气哟~



展     示
>>demonstrate<<




终于!我到达旅行的目的地了
跟随这张地图(世界地图?!)我终于来到了这个神秘的房子
据说里面有神秘的东西
现在就让我进去一探究竟




哎哟,我勒个去
门打不开真是蛋疼
不过没事,凭我多年的冒险经验
一定有什么机关
让我探索一下




打开旁边的箱子
里面有两把剑



左边的一把似乎有特殊的凹槽
右边仅仅是一把普通的木剑




嗯...
接着我发现门旁边这个地方...
有点可疑!石头强度不高...
仿佛还是空心的?




成功用剑捣碎了这个石头
不过木剑还不能开门呢
要特殊的这把剑才能开





原  理
>>Principle<<
想必同学们看到插入石头里面时都明白了
这是利用盔甲架



  1. summon ArmorStand ~ ~1 ~ {ShowArms:1, NoGravity:1, Invulnerable:1, CustomName:"Slot"}
复制代码
说是生成带手臂的盔甲架,其实根本不仅仅如此

summon是召唤实体应该不用说了吧,ArmorStand就是盔甲架,~ ~1 ~是指位置,~是代指当前坐标

~1就是当前坐标+1

这些应该都知道吧,{}就是NBT标签了

ShowArms就是为1时让盔甲架显示手臂的标签

NoGravity就是为1时让盔甲架完全不动(不受重力影响)的标签,为了让你能随便把它摆哪

Invulnerable是让其无敌,生存冒险模式破坏不了

CustomName是指定它的名字,引号里面的可以随便改,主要是为了方便之后的操纵



其实这一步可以省略,因为summon的时候你就可以设置好

当然如果你没办法或者懒得在summon之前计算好它的姿势你就可以之后用一些指令来进行若干次修改

首先调整它的位置就是用tp了

  1. tp @e[name=Slot] x y z
复制代码
这里就体现了之前那个CustomName有什么用,可以方便的选中实体

x y z就是相应坐标,你当然可以让其为小数来精确设定,而这也是NoGravity的用处所在

之后我们就要调整它手臂的姿势了

  1. entitydata @e[name=Slot] {Pose:{RightArm:[0:numf,1:numf,2:numf]}}
复制代码
其中num是指数字,不是什么需要的,把它换成数字,就是更改手臂的角度

另外Pose(姿势)标签的一个说明:




一切都准备好后我们把我们用以触发机关的东西塞它手上

然后让它隐身(隐身也是summon的时候如果你计算好了可以直接加的标签)

  1. entitydata @e[name=Slot] {Invisible:1}
复制代码
MC修改完它的NBT标签的同时会在聊天框提示



然后我们可以看到盔甲架拿着我的剑时有一条标签

Equipment:[0:{id:"minecraft:wooden_sword",Count:1,tag:{display:{Name:"异质残剑"}}}]

这个我们之后有用


一切都准备好了!

我们就开始制作核心系统吧!



首先我们需要一个时钟电路

嗯 我自然推荐fill大法



fill大法是什么呢

你需要知道一个知识

大概是mc会先执行坐标x轴上的命令方块 其中先执行坐标x值小的然后大的

x执行完了再执行y轴,同上

最后是z轴

(可能语言有误,大家自己去试试就懂了)

因此,我们可以在白色命令方块(先执行的)那里输入

  1. fill ~1 ~ ~ ~1 ~ ~10 stone 0 replace redstone_block
复制代码
将旁边那一列填充为石头

接着再在黑色命令方块(后执行的)那里输入

  1. fill ~-1 ~ ~ ~-1 ~ ~10 redstone 0 replace stone
复制代码

最后在那一列放一个红石块就行了

会先执行白色,红石块会被替换成石头,不过接着还要执行黑色的

于是一瞬间石头又被替换回红石块,又执行白色,以此循环,周而复返

等等,replace好像没必要啊?

这是为了方便你拆除和增加刷新的红石块


时钟准备好了我们就要做真正的检测器了

我们得用计分板

首先增加一个分数

  1. scoreboard objectives add gotKey dummy
复制代码
增加一个名为gotKey的变量

其中gotKey只是变量名,可随便你改


接下来我们在红色命令方块那里输入

scoreboard players set @e[name=Slot] gotKey 0

不断清零盔甲架的分数

对面那个命令方块则输入

  1. scoreboard players set @e[name=Slot] gotKey 1 {Equipment:[0:{id:"minecraft:wooden_sword",Count:1b,tag:{display:{Name:"异质残剑"}}}]}
复制代码
这里前面的@e[]搜索一个叫Slot的实体,然后后面{}里的仍然是NBT标签

这里是用来探测的

你可以发现这里NBT标签就是我之前留下来的那条

因为Equipment就是指定拿(穿、戴)着什么东西的标签
而Equipment里面的{}就是我们的相应物品的NBT标签

如果检测叫做Slot的实体的标签符合以上的话 就会将它的gotKey分数设为1


前面我们说了 x轴较大的会后执行,所以当检测到它拿着相应东西时

前面那个命令方块虽然在不断重置盔甲架的分数,但瞬间(比其它任何命令都先)又执行后面这个命令方块将其设为1

所以分数可以总认作为1


最后两个命令方块就是不一定的了,随便你设定
可以说前面才是触发装置 才是我讲的 后面输出端就是另外一回事了

比如我这里是要开门

那么我就需要当它没拿着相应物品时关门

拿着时开门

则当分数gotKey为1时开门,为0时关门

那么我们就需要两个命令方块(这里顺序已经无所谓了)

  1. execute @e[name=Slot,score_gotKey_min=1] ~ ~ ~ fill x1 y1 z1 x2 y2 z2 redstone_torch
复制代码
  1. execute @e[name=Slot,score_gotKey=0] ~ ~ ~ fill x1 y1 z1 x2 y2 z2 air
复制代码
这里的x1 y1 z1 x2 y2 z2就是指铁门下两层的那两个方块

redstone_torch就是红石火把 air是空气



到这里大家应该完全明白了吧!

不知道对你有没有什么帮助呢?

如果有就别吝啬人气啊,感谢~

欢迎转载,只需要注明作者是谁就好


那么 这期就到这了 大家下次再见~

--SEE YOU NEXT TIME--



YSM123
感觉就是好腻害a.a!红石小白傻了

jiang282
完全不明觉厉的我居然看完了(然并卵QWQ)

heyuxuan
好帖子,必须收藏,推荐好友。

chyx
  1. scoreboard players set @e[name=Slot] gotKey 1 {Equipment:[0:{id:"minecraft:wooden_sword",Count:1,tag:{display:{Name:"异质残剑"}}}]}
复制代码

这里Count:1需要Count:1b吧

风梭
chyx 发表于 2015-6-6 21:31
这里Count:1需要Count:1b吧

呃。。没注意  做地图的时候我根本没写Count
233

风梭
我去这就沉了= =

CREALANE
{:10_499:}可以实现惊人的效果,感谢分享。

风梭
顶一下233

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