[关闭]
@satgo1546 2015-07-14T06:35:48.000000Z 字数 37286 阅读 10627

解读the Code III

Minecraft

剧透警告
本文含有the Code III的剧情和截图!
WIP警告
本文尚未正式对外发布。


0. 前言

the Code III是Jesper the End在Minecraft Forum中发布的一个Minecraft解谜地图。它运用了大量1.7新增特性。

the Code系列地图确实为Minecraft界不可多得的好地图。虽然1.8出现之后好玩的东西越来越多了。

本系列文章将为你解释大部分the Code III中谜题与机关的制作方法。

阅读这篇文章可能会需要的资源列表

本系列文章全文解谜路线按照上面列表中的文字攻略进行。请务必先阅读并通关此地图,剧透警告

本文更新记录

有关本文的说明

本文存放在Cmd Markdown上。由于这篇文章使用的最深的标题层数为第五级(<h5>,大纲级别5),而Cmd Markdown的样式表正文和标题5的字体大小一样,且不加粗,因此可能会无法分辨标题和内容。这个问题似乎没有解决方案。

本文中将“时钟”写成了“脉冲”。这是不正确的叫法,但是在写了一大半后才发现这一点,为了保证全文统一,于是没有改动……

目录

½. 通用技巧

在这个章节中我会介绍一些在Minecraft自定义地图(包括the Code系列)中普遍使用的技巧,下文中会直接引用本段中的内容,因此阅读并理解本章节内容是非常重要的。

相对坐标传送

如果可以,建议观看Jesper制作的这个视频

由于1.7还没有/clone命令并且这对多人游戏不友好,为了实现动画效果或者一些看似不可能的事情,会用这种方法实现。

例如,为了在一个虚空地图中造成玩家可以无限掉落的感觉,可以这样做:

tp @a[x=○,y=100,z=○,r=128] ~ ~100 ~

这样在指定坐标附近半径为128的球体内的玩家都会传送到相应的更高的位置,这样就可以避免Y坐标到达-48。

可能讲得不清楚,下面有个可能好一点的例子

超平坦2;0;1;

如果在超平坦预设里输入2;0;1;就会生成一个完全是空气构成的存档。使用空气可以有效减小存档体积并减少电脑卡顿现象。这一技巧在the Code的整个系列中都被用到了。

鱿鱼的妙用

在Jesper的1.7以后的作品中经常可以看到鱿鱼的身影(有时会是隐形的)。Jesper对此在这个视频2分25秒处有解释。

下面是大致的意思:

为什么是鱿鱼?

因为它们不会乱跑,也不会发出任何噪声。并且想用它们作为实体中介,只需要加上PersistenceRequired: 1Invulnerable: 1两个标签就可以了。

黑色羊毛大法

有些地方你看起来是一片黑色的虚空,但实际上只是一堆黑色羊毛而已了!由于黑色羊毛本身足够黑(在一般的材质包(包括原版)里比染色硬化粘土要黑),再加上光线不足,且在冒险模式中行为和真虚空基本相同,就造成了这是虚空的假象。

刷怪箱的世界

从the Code(I)开始,刷怪箱就被Jesper the End广泛使用。但是在这个系列地图中,每个地图使用方式均不同。大概如下:

地图 刷怪箱编辑方法 刷怪箱的用途
the Code In-game NBT Edit 刷出物品和生物(多数是村民)
the Code II In-game NBT Edit 刷出实体、检测玩家位置并处理(如加特效)
the Code III 命令方块直接生成 防止命令方块过多导致卡顿

具体防卡的方法是这样的:Minecraft判定玩家与刷怪箱的距离,如果在指定距离内那么就放出火焰特效并按照刷怪箱的机制开始刷怪。这个自定义刷怪箱是每隔1游戏刻刷出一个位置定义过的存活时间仅剩1游戏刻的经验球。这个经验球会刷在压力板上方,连接到可开关的比较器脉冲上。这样,只有玩家在作用范围附近的命令方块才会被激活,从而达到有效防卡的目的。

1. Introduction

出生点。

所以你就真的以为这个是出生点了?

然而,真正的出生点在远方。打开创造模式冲出去(破坏掉黑色羊毛),抬头看一下吧。

这是上去以后的截图。

此建筑物可远观而不可亵玩焉,所以我就远距离地拍了几张。这里可以看到上面有两块告示牌,具体内容么……用MCEdit看就可以了。

如果你飞上去的话,会立刻被转为冒险模式(如果服务器设置的默认游戏模式为生存的话)并且把你传送到那个“出生点”。

细节:为什么要建造这个建筑物?

由于设置好出生点(使用/spawnpoint命令)需要保存player.dat且不支持多人游戏,而/setworldspawn就可以支持多人游戏并且兼容性(也许?)更好。

固定位置的出生点是针对某个特定玩家的,但是世界出生点就可以让所有新进入服务器的玩家都到这点附近。所以如果要让所有玩家一开始就在一个特定位置的话,只能先让所有玩家到这个平台上,然后再传送。

向前走……

细节:Insert code

就在这里停下的话,打开漏斗会发现漏斗的标题是乱码。

为什么呢?原因不明。实际上在the Code(I)中有一个彩蛋:在11 "Infinity"中走到最上面,在还没真正到达2 "Return"前打开箱子,箱子的标题是彩蛋。

好了,往前走,身后变为了the Code I长廊。

细节:the Code I长廊的神秘尽头

走到30 "Last"告示牌下方的门前,门自动打开了!

走进去,你会发现一个按钮,上方是一个容器,并且在你的聊天记录中出现“35792”的字样。

打开容器,其中有一张空白的纸。

细心的话会注意到,长廊中的每一个房间内都有按钮,但只有30 "Last"有容器。

好像35792是the Code I中最后一关的密码。

这个细节也许是想让玩家先解开the Code I的最后一关后开始游戏,可能后来Jesper想要降低难度就删除了这个设定,不过内容一直保留着。

通常人都是直接把手里的纸扔进漏斗,但是……你还可以去点击提示按钮。

铁砧跳动起来了!为什么啊!这里跟铁砧没任何关系啊!

解说:跳动的铁砧

核心

FallingSand{Motion} + /setblock

命令解说

# 在铁砧位置生成一个FallingSand实体,并附加Motion标签来让此实体向上运动
summon FallingSand 0 28 1002 {TileID:145,Time:1,DropItem:0,Data:1,Motion:[0.0,0.3,0.0]}
# 设置铁砧所在方块为空气
setblock 0 28 1002 minecraft:air

至于为什么不用Time: 0来直接完成上面两件事:我测试后发现此命令在1.7中无效,1.8中有效,原因不明。

将纸扔进漏斗,出现了一个鞍。乘坐上去后,自动前进了!

解说:自动前进的浮空鞍

说明

为什么是鱿鱼?

核心

矿车移动 + 堆叠隐形鱿鱼 + 隐形猪。

命令解说

Part 1:漏斗
# 设置下图红石块位置为空气
setblock -2 2 1000 minecraft:air

# 设置下图红色玻璃位置为红石块
setblock 4 26 938 minecraft:redstone_block

# 设置难度为简单
difficulty 1
# 生成那块鞍
summon Pig 0 1 1000 {Saddle:1,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:Squid,ActiveEffects:[{Id:14,Duration:32000,Ambient:1}],Invulnerable:1,PersistenceRequired:1,Riding:{id:MinecartRideable}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
Part 2:设置为空气的那部分
## 以下命令连接脉冲
# 设置房间内的所有玩家的计分板“pigRiding”为0
scoreboard players set @a[0,28,1000,rm=7] pigRiding 0
# /effect命令时间为零,目的为清除房间内所有pigRiding≤0的玩家身上的速度状态效果
effect @a[0,28,1000,4,score_pigRiding=0] 1 0
# 给予房间内所有pigRiding≥1的玩家速度V状态效果
effect @a[0,28,1000,4,score_pigRiding_min=1] 1 20 4
# 检测房间内所有pigRiding≥1的玩家
testfor @a[0,28,1000,4,score_pigRiding_min=1]
    ## 检测到则执行
    # 取反输出到活塞
    <红石逻辑>
# 检测房间内所有pigRiding≤0的玩家
testfor @a[0,28,1000,4,score_pigRiding=0]
    ## 检测到则执行
    # 设置难度为简单
    difficulty 1
    # 取反输出到<红石逻辑A>
    <红石逻辑>
红石逻辑A
# 取反输出到<红石逻辑B>
红石逻辑B
# 延时9红石刻
<红石逻辑>
# 生成那块鞍
<命令同上面那一大堆>
红石逻辑C
## 以下需要矿车激活
# 输出到<红石逻辑A>
Part 3:设置为红石块的那部分

似乎没有什么东西……

Part 4:解释“生成那块鞍”的命令

生成的内容大约是下图那个样子。

当前pigRiding=0。

乘坐上后不断上升。

the Code的LOGO,很赞!如果电脑不卡的话建议将视野调大,效果更好。

终止在了220。估计之后的传送就是利用这个220数值来判定传送的时机的。我创造模式直接飞到the Code后面的墙壁上也传送了,所以应该不是利用这个判定传送条件的。

2. The Starting Room

点击按钮能进入地图房间。

解说:进入地图房间

核心

没有核心。

命令解说

# 设置出生点,来让玩家传送后可以通过岩浆回来
spawnpoint @a[r=7]
# 传送
tp @p[r=7] -26 76.0 -998

地图,这个是真的地图了。不像以前的the Code(I)的提示用的是Map it之类的滤器制作,这个地图为了达到实时更新的效果,是真的用黑色羊毛摆出来的。如果你拆房子就会发现地图所对应的那一块的黑色羊毛是阶梯状的,暂未弄明白是为什么。

细节:台阶而非方块

如果在创造模式中选择此方块,会发现它是双石英台阶。

为什么不是普通的石英块?因为石英方块底部的材质是一种平滑的不是方格的材质。但是数据值里有个二进制位元可以控制是只使用顶部材质。为了达到比较好的视觉效果,在天花板上的石英块使用这样的双台阶比较好。

如果你想获得一个这样的方块,只需要输入以下命令即可。

/give @a double_stone_slab 1 15

回到The Starting Room,毁掉泥土和木头,就出现了两个大洞。

解说:大洞是如何出现的?

核心

计分板 + 统计信息。

命令解说

输入命令:

/scoreboard objectives list

可以看到其中有如下两行:

- wood: displays as 'wood' and is type 'stat.mineBlock.17'
- dirt: displays as 'dirt' and is type 'stat.mineBlock.3'

好了,真相大白。只需要检测@a[score_dirt_min=1]@a[score_wood_min=1]就可以了。很容易就能找到下面两堆命令方块:

3. Yellow Dial Indicator

跳上去,就看到了Yellow Dial选择器。

解说:Dial选择器

核心

红石逻辑!

命令解说

就是/setblock而已。作为红石渣,给Jesper这红石大神给跪了……

4. Shears Dispenser Challenge

5. The Colours Room

6. Fireworks Puzzle Challenge

解说:Fireworks Puzzle/方块溜冰游戏

说明

脉冲的位置在(-20.5, 43.3, -233.5)附近,上下共4个,由一个刷怪箱生成。

核心

枚举方块的位置。

命令解说

总共有如下那么一大堆命令方块:

以向下移动方块的地板为例,也就是这一块:

# 检测是否只有玩家站在向下移动方块的地板上
testfor @a[-21,32,-212,1]
testfor @a[-23,32,-214,1]
testfor @a[-25,32,-212,1]
testfor @a[-23,32,-210,1]
<红石逻辑>
    ## 检测到则执行
    # 开启脉冲
    <红石逻辑>
        ## 以下命令连接脉冲
        # 检测方块是否在此位置
        testforblock -22 40 -217 155 1
            ## 检测到则执行
            # 删除方块以移动
            setblock -22 40 -217 0
            setblock -19 40 -217 0
            # 重置所有命令方块的输出为无信号
            # 为什么有两次?我也不知道
            setblock -18 60 -244 redstone_block
            setblock -18 60 -244 redstone_block
            # 失败后重置游戏,生成一个FallingSand来制造动画效果
            setblock -25 35 -220 minecraft:redstone_block
                # 实际上是执行了下面这个命令
                summon FallingSand -25 39 -217 {Time:1,DropItem:0,TileID:155,Data:1}
            # 生成一个FireworksRocketEntity,即烟花火箭来制造动画效果
            summon FireworksRocketEntity -19 40 -217 {LifeTime:18,Motion:[0.0,-0.85,0.0],FireworksItem:{id:401,tag:{Fireworks:{Explosions:[{Trail:1,Type:0,Colors:[16711680]}]}}}}
            # 延时7红石刻
            <红石逻辑>
            # 添加方块以移动
            setblock -22 34 -217 155 1
        # 检测方块是否在此位置
        testforblock -25 39 -217 155 1
            ## 检测到则执行
            ……

7. Red Dial Selector

8. Strange Corridors

神奇的走廊。

解说:神奇的走廊

如果可以,建议观看Jesper制作的这个视频

核心

相对坐标传送

演示版本

不断将站在云杉木板上的玩家传送到另一边对应的位置就可以了。

演示:

(好吧根本看不出来……自己搭一个试试就行了)

在此演示版本中的命令(连接脉冲来使用,坐标请自行调整):

tp @a[-84,76,-5,1] ~ ~ ~-8
tp @a[-81,76,-5,1] ~7 ~ ~-8
tp @a[-84,76,-12,1] ~ ~ ~8
tp @a[-74,76,-12,1] ~-7 ~ ~8

9. Green Code Room

检测纸上的内容真有这么难吗?

解说:检测纸上的内容

如果可以,建议观看Jesper制作的这个视频

核心

当漏斗有空格时,会吸收所有物品。

当漏斗的五个格子全部摆满时,只会吸收五个格子中所摆放的物品,因为如果再吸收其它物品,它就塞不进去了。

命令解说

实际上就这么一点点命令方块……

# 设置玩家§2[]的计分板colors(显示为绿色的[])为1
scoreboard players set §2[] colors 1
# 设置所有玩家的计分板cgreen为1
scoreboard players set @a cgreen 1
# 播放音效
setblock -35 69 -219 minecraft:redstone_block
    # 实际上是执行了下面这些命令
    playsound random.orb @a ~ ~ ~ 1 0.7
    playsound random.orb @a ~ ~ ~ 1 0.8
    playsound random.orb @a ~ ~ ~ 1 0.9
    playsound random.orb @a
    playsound random.orb @a ~ ~ ~ 1 1.1

10. Force Field Challenge

解说:力场

说明

脉冲的位置在(-60, 56, -202)。

核心

真的就是一堆/setblock加一点/summon来制作动画效果,没别的了。其它的也都是高级红石技术,我也不懂……

命令解说

主脉冲
# 用于脉冲
setblock -63 53 -204 minecraft:redstone_block
setblock ~ ~-1 ~ minecraft:air
层1
# 生成FallingSand实体来制造动画效果
# 在此房间内实际上HurtEntities: 1并无必要,因为有铁门挡着,并不会砸到任何玩家,但由于对多人游戏的兼容性,似乎可以保留
summon FallingSand ~ ~-17.5 ~ {DropItem:0,Time:1,TileID:159,Data:14,HurtEntities:1,FallHurtMax:40,FallHurtAmount:40}
层2(指的是有石头的那层)
# 确保所有玩家都聚在一起
testfor @a[-57,31,-210,rm=5]
<红石逻辑>
# 设置重生点
spawnpoint @a -58 31 -209
# 延时8红石刻
<红石逻辑>
# 把跑远了的玩家拽回来
tp @a[-57,31,-210,rm=5] -58 31 -209
层3
# 在指定的方向上删除铁门
setblock ~ ~-14 ~ minecraft:air
层4和层5
# 在指定的方向上添加铁门
setblock ~ ~-11 ~ minecraft:iron_door 2
setblock ~ ~-10 ~ minecraft:iron_door 2
层6
# 允许指定方向上的动画效果
setblock ~ ~14 ~ minecraft:redstone_wire
# 设置地毯颜色为红色
setblock ~ ~-7 ~ minecraft:carpet 14
另一堆命令方块

这一堆命令方块用于完成Force Field
Challenge。就是一大堆/setblock,比如删除压力板、删除铁门、删除中央的地毯,没什么好说的。

层7
# 禁止指定方向上的动画效果
setblock ~ ~17 ~ minecraft:air
# 设置地毯颜色为绿色
setblock ~ ~-4 ~ minecraft:carpet 5

 

细节:Force Field Challenge对多人游戏的兼容性

有一块红石电路是这样的:

输出的内容如下:

11. Under the Force Field

12. The Escher Cube

解说:无光照却明亮的Escher Cube

事实上玩家进入Escher Cube的时候会被附加上夜视效果,时间很短,所以可以保证玩家离开这里就会自动解除夜视效果。然而这也会让视野闪烁。

13. Colour Dial Settings

14. Dog-shaped Symbol

15. Purple Dial Selector

16. Parkour Pillars

创造模式玩家警告

在这个房间里有一处创造模式会被强制改为冒险模式并传送的地方。

这个地方正常游戏是无法到达的,但可能是神级跑酷玩家会到达的地方。为了防止这种情况发生,会将此类玩家传送。

17. World Flip Chamber

旋转的房间。其实做法还是相对坐标传送

解说:旋转的房间

说明

其实是一个逐帧动画。

而有岩浆却不流出来的那两帧,实际上是/setblock或使用MCEdit的产物(也就是说方块更新后会流出来)。

动画播放的核心是这一块。

核心

相对坐标传送

命令解说

# 设置在第一帧里的玩家的计分板tp1为1
scoreboard players set @a[-91,17,-224,3] tp1 1
# 设置在最后一帧里的玩家的计分板tp1为0(动画的最后一帧,即还没到真正的Parkour Pillars)
scoreboard players set @a[-91,17,-193,3] tp1 0

这样的话,就可以直接用计分板判断玩家是否将要结束动画了。由于最后一帧的传送目标位置不同,因此要分开处理。

# 延时4红石刻
<红石逻辑>
# 传送所有在动画播放过程中的玩家到下一帧
tp @a[score_tp1_min=1] ~ ~ ~6
# 传送所有在最后一帧里的玩家到真正的Parkour Pillars
tp @a[-91,17,-193,3,score_tp1=0] ~8 ~20 ~-30
# 播放音效
playsound mob.horse.leather @a ~ ~ ~ 1 0

表示不小心把岩浆给方块更新了……导致……

终于,我只能这么干了……

18. Upside-down Pillars

事实上正的世界和倒的世界是两个不同的房间而已了。

19. Mystery Letters Dispenser

上下颠倒的箱子的解说在

20. The Sapling Chamber

解说:只能放置一棵树苗

说明

脉冲的位置在(-16, 52, -250)附近,也就是在The Sapling Chamber的上方。

核心

/testforblock + /setblock + 比较器 + 利用漏斗输出指定大小的模拟信号。

命令解说

# 记录玩家探索了这个地方
scoreboard players set @a m15 1
# 检测是否有树苗放置
testforblock -16 28 -248 minecraft:sapling 3
testforblock -16 28 -252 minecraft:sapling 3
testforblock -14 28 -250 minecraft:sapling 3
testforblock -18 28 -250 minecraft:sapling 3
    ## 检测到则执行
    # 如果有两个以上的树苗
    <红石逻辑>
        ## 检测到则执行
        # 设置所有泥土上方为空气方块
        setblock -16 28 -248 minecraft:air
        setblock -16 28 -252 minecraft:air
        setblock -14 28 -250 minecraft:air
        setblock -18 28 -250 minecraft:air
# 检测存放树苗的容器内容是否为空
testforblock -16 27 -250 minecraft:dispenser 3 {Items:[]}
    ## 检测到则执行
    # 复原容器
    setblock -16 27 -250 minecraft:dispenser 3 destroy {CustomName:,Items:[{id:6,Damage:3,Count:1,Slot:4,tag:{display:{Name:}}}]}

解释一下那块红石逻辑,这也是很少的我能解释的红石了……

在漏斗旁边放个比较器,测得它输出的信号值为2。

在命令方块旁边放个比较器,测得它输出的信号值为1。

然后相减……

因此如果放置了两个以上的树苗,减完了剩余的信号就为零了。

然后在最后放个NOT gate,连上命令方块,完毕。

总感觉我这理解有误……

21. The Mystery Chest

话说为什么箱子里的东西是“R”“H”“J”“Y”“U”呢?谁知道告诉我一下。

22. Jump-boost Dispenser

23. Time Travel Chamber

没错,就是这个让我震惊的……

解说:时光机动画

如果可以,建议观看Jesper制作的这个视频

说明

脉冲的位置在(-11, 25, -233)。

核心

刷怪箱里的实体会旋转 + /setblock + /summon + /playsound + 大小为-1的史莱姆会直接死亡。

命令解说

# 记录玩家探索了这个地方
scoreboard players set @a m16 1
# 检测玩家是否聚在一起且底部的刷怪箱(脉冲)已开启
testfor @a[-23,21,-232,rm=11]
<红石逻辑>
    ## 检测到则执行
    # 放置下图中的红石块
    setblock -6 21 -233 minecraft:redstone_block

红石块部分:

# 播放音效
playsound portal.trigger @a ~ ~ ~ 1 0
# 各种无聊的初始化
setblock -55 21 -230 minecraft:double_stone_slab 15
setblock -55 22 -231 minecraft:double_stone_slab 15
setblock -83 35 -230 minecraft:double_stone_slab 15
setblock -83 34 -231 minecraft:double_stone_slab 15
setblock -55 22 -231 minecraft:double_stone_slab 15
# 防止玩家乱跑,如图设置铁门
setblock -34 21 -233 minecraft:iron_door 2
setblock -34 20 -232 minecraft:iron_door 2

# 设置刷怪箱
setblock -30 16 -233 minecraft:mob_spawner 0 destroy {SpawnCount:1,SpawnRange:1,Delay:500,MaxNearbyEntities:0,EntityId:MinecartRideable,SpawnData:{CustomDisplayTile:1,DisplayTile:1,DisplayOffset:250},RequiredPlayerRange:100}
# 延时8红石刻
<红石逻辑>
# 设置刷怪箱
setblock -3 18 -229 minecraft:mob_spawner 0 destroy {SpawnCount:1,SpawnRange:2,MinSpawnDelay:1,MaxSpawnDelay:1,MaxNearbyEntities:32000,EntityId:XPOrb,SpawnData:{Age:5980s},RequiredPlayerRange:500}
# 各种无聊的初始化:把一个“↓”符号的头删除
# 如果直接传送到此位置会导致下面两张图的结果
# 走出来会发现其实是一个头
setblock -41 20 -235 minecraft:air

# 启动动画的脉冲(下图中红色玻璃的位置)
setblock -5 21 -236 minecraft:redstone_block

    ## 脉冲内容如下
    # 生成大小为-1的史莱姆来制造烟雾效果(在1.7系列的某个版本失效,效果如图)
    summon Slime -28 20 -234 {Size:-1}
    summon Slime -31 20 -231 {Size:-1}
    summon Slime -28 20 -231 {Size:-1}
    summon Slime -31 20 -234 {Size:-1}

    # 把跑远了的玩家拽回来
    tp @a[-37,19,-231,4] -29.0 20.0 -232.0
    # 为了让钟旋转,不断加上1500刻的时间
    time add 1500
# 设置刷怪箱
setblock -30 17 -232 minecraft:mob_spawner 0 destroy {SpawnCount:1,SpawnRange:1,Delay:500,MaxNearbyEntities:0,EntityId:MinecartRideable,SpawnData:{CustomDisplayTile:1,DisplayTile:1,DisplayOffset:250},RequiredPlayerRange:100}
# 延时8红石刻
<红石逻辑>
# 设置刷怪箱
setblock -29 18 -232 minecraft:mob_spawner 0 destroy {SpawnCount:1,SpawnRange:1,Delay:500,MaxNearbyEntities:0,EntityId:MinecartRideable,SpawnData:{CustomDisplayTile:1,DisplayTile:1,DisplayOffset:250},RequiredPlayerRange:100}
setblock -29 26 -233 minecraft:mob_spawner 0 destroy {SpawnCount:1,SpawnRange:1,Delay:500,MaxNearbyEntities:0,EntityId:MinecartRideable,SpawnData:{CustomDisplayTile:1,DisplayTile:1,DisplayOffset:-200},RequiredPlayerRange:100}
# 延时12红石刻
<红石逻辑>
# 设置刷怪箱
setblock -30 26 -233 minecraft:mob_spawner 0 destroy {SpawnCount:1,SpawnRange:1,Delay:500,MaxNearbyEntities:0,EntityId:MinecartRideable,SpawnData:{CustomDisplayTile:1,DisplayTile:1,DisplayOffset:-170},RequiredPlayerRange:100}
setblock -30 27 -232 minecraft:mob_spawner 0 destroy {SpawnCount:1,SpawnRange:1,Delay:500,MaxNearbyEntities:0,EntityId:MinecartRideable,SpawnData:{CustomDisplayTile:1,DisplayTile:1,DisplayOffset:-170},RequiredPlayerRange:100}
# 延时16红石刻
<红石逻辑>
# 设置刷怪箱
setblock -29 28 -232 minecraft:mob_spawner 0 destroy {SpawnCount:1,SpawnRange:1,Delay:500,MaxNearbyEntities:0,EntityId:MinecartRideable,SpawnData:{CustomDisplayTile:1,DisplayTile:1,DisplayOffset:-200},RequiredPlayerRange:100}
# 从这里开始真正的动画
# 设置一个从林木方块
# log/15将产生一个六面都是树干的材质的木头方块,如图所示
# 并且它在游戏内的名字是Oak Wood,还是如图所示
setblock -26 19 -229 minecraft:log 15 destroy

# 生成一个FallingSand实体
# 由于原来那个方块就是double_stone_slab/15,因此不需要添加Time: 0(参见#解说:跳动的铁砧)
summon FallingSand -26 20 -228 {TileID:43,Data:15,DropItem:0}
# 各种/setblock和/summon
……
# 在动画结束的地方
# 延时12红石刻
<红石逻辑>
# 生成一个FallingSand实体(还是动画内容)
summon FallingSand -26 25 -231 {TileID:43,Data:15}
# 各种重置
setblock -27 25 -229 minecraft:air 0 destroy
setblock -26 25 -229 minecraft:air 0 destroy
# 设置时间为早上
time set day
# 各种重置
setblock -30 17 -232 minecraft:air
setblock -30 27 -232 minecraft:air
setblock -30 16 -233 minecraft:air
setblock -30 26 -233 minecraft:air
setblock -34 21 -233 minecraft:air
setblock -34 20 -232 minecraft:air
setblock -29 18 -232 minecraft:air
setblock -29 28 -232 minecraft:air
setblock -29 26 -233 minecraft:air
setblock -3 18 -229 minecraft:air

24. The Crumbled Passage

25. Aged Sapling Room

26. The Sapling Challenge

27. Papers Please Challenge

解说:Item position code lock

如果可以,建议观看Jesper制作的这个视频

说明

脉冲的位置在(-63, 9, -249)。

核心

检测NBT。

命令解说

# 检测是否按正确位置摆放
testforblock -63 33 -249 minecraft:dropper 3 {CustomName:,Items:[0:{id:339s,Slot:0b,Count:1b,Damage:1s,tag:{display:{Name:R}}},1:{id:339s,Slot:2b,Count:1b,Damage:1s,tag:{display:{Name:H}}},2:{id:339s,Slot:4b,Count:1b,Damage:1s,tag:{display:{Name:J}}},3:{id:339s,Slot:6b,Count:1b,Damage:1s,tag:{display:{Name:Y}}},4:{id:339s,Slot:8b,Count:1b,Damage:1s,tag:{display:{Name:U}}}]}
    ## 检测到则执行
    # 芝麻开门动画(大雾)
    # 由于开门时开着GUI,其实根本看不见动画效果
    summon FallingSand -63 26 -251 {TileID:43,Data:15,DropItem:0}
    summon FallingSand -63 27 -251 {TileID:155,Data:1,DropItem:0}
    summon FallingSand -63 28 -251 {TileID:43,Data:15,DropItem:0}
    # 芝麻开门
    setblock -63 25 -251 minecraft:quartz_block

28. Mirror Room Challenge

我在自我/kill的时候发现床不见了,于是就喜闻乐见地重来了……

……片头动画。

话说……这……

这个镜像房间我在第三次玩的时候也找了好久的找不同,现为了方便将不同之处放在下面:

共计⑨处不同。

解说:检测玩家破坏方块的趋势

如果可以,建议观看Jesper制作的这个视频

说明

“玩家破坏方块的趋势”就是玩家用左键点击方块……

由于大小为负数的史莱姆的BUG已经在1.7系列中的某个版本被修复,因此你不能在1.7.10中使用大小为负数的史莱姆来制造这个效果。这也是为什么Jesper在帖子中强调此地图不支持1.7.10的原因。

如果你真的作死地像我一样在1.7.10里玩这个地图(说明一下,我是在1.7.4的时候这个地图的),那么你一定会看到下面的情形。哦,天哪……我认为我只是调整了一下视野……

所以呢……嘿嘿……

不过呢,我后来又运行了下面的命令:

/scoreboard players set satgo1546 clicked 9

核心

隐形鱿鱼可以被攻击。使用生命恢复的状态效果来维持鱿鱼不受脱水伤害,然后给玩家力量的状态效果来一次攻击就能杀死鱿鱼。而鱿鱼体型足够大,塞入方块内部也可以在外面点到。烟雾效果则是玩家杀死鱿鱼后自带的效果。

但检测实体是否存在是1.8中的内容,因此利用Riding标签制作一个生物塔。鱿鱼在(技术上的)塔底,杀死之后会使得塔剩下的部分掉落。因此可以在下面加一个压力板就可以判定鱿鱼是否被杀死。

我使用的命令:

summon Pig ~ ~10 ~ {Riding: {id: Cow, Riding: {id: Chicken, Riding: {id: Sheep}}}}

结果:

杀死羊(塔底)后:

其它生物都掉下去了。

杀死塔顶后:

什么也没有发生……

之后利用大小为负数的史莱姆是倒置的的BUG来反转塔顶和塔底的关系,就可以直接用压力板检测了。

命令解说

主要子程序
# 记录玩家探索了这个地方
scoreboard players set @a m4 1
## 以下命令连接脉冲
    # 离开/将要进入房间时,解除玩家的力量、无敌、跳跃提升效果
    # 这里的跳跃提升效果应该来自于进入Fireworks Puzzle Challenge时
    effect @a[-11,31,-200,2] 5 0
    effect @a[-11,31,-200,2] 11 0
    effect @a[-11,31,-200,2] 8 0
    # 设置难度为简单
    difficulty 1
    # 给予玩家力量CCLVI和无敌CCLVI效果
    effect @a[-11,31,-193,4] 5 1000000 255
    effect @a[-11,31,-193,4] 11 1000000 255
# 核心命令模块化执行
setblock -7 19 -199 minecraft:redstone_block
setblock -9 19 -199 minecraft:redstone_block
setblock -14 20 -200 minecraft:redstone_block
setblock -4 20 -196 minecraft:redstone_block
setblock -11 20 -193 minecraft:redstone_block
setblock -3 20 -188 minecraft:redstone_block
setblock -11 21 -187 minecraft:redstone_block
setblock -18 20 -188 minecraft:redstone_block
setblock -15 20 -181 minecraft:redstone_block
# 延时1红石刻
<红石逻辑>
# 结束模块操作
setblock -7 19 -199 minecraft:air
setblock -9 19 -199 minecraft:air
...
模块
# 生成史莱姆与鱿鱼塔
/summon Slime ~1 ~13 ~1 {Size:0,Invulnerable:1,Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:0,Invulnerable:1,Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}],Riding:{id:Slime,Size:-2,Invulnerable:1,ActiveEffects:[{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}], Riding:{id:Squid,ActiveEffects:[{Id:6,Duration:2000000000,Amplifier:100,Ambient:1},{Id:14,Duration:2000000000,Amplifier:100,Ambient:1}] }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}
当模块上的鱿鱼被点击
# 修复错误的方块
setblock -7 31 -197 minecraft:quartz_stairs
# 标记玩家(又)找到了一处错误
scoreboard players add @a clicked 1
# 为了让史莱姆塔不再生成,在原来史莱姆塔踩着的压力板连的红石线上放一个红石块
setblock ~ ~-1 ~-1 minecraft:redstone_block

29. Green Dial Selector

解说:可以穿过的墙壁

如果可以,建议观看Jesper制作的这个视频

核心

FallingSand实体可以被玩家穿过。

命令解说

脉冲在这里。

当有玩家的计分板clicked达到9的时候,会在下图的红色玻璃板的位置放置一个红石粉。

而实际上对于生成非固体方块的命令就下面这点:

## 以下命令连接脉冲
# 生成一个石英块的FallingSand实体
summon FallingSand -11 31 -179 {TileID:155,DropItem:0,Time:1}
# 生成一个点亮的红石灯的FallingSand实体
summon FallingSand -11 32 -179 {TileID:124,DropItem:0,Time:1}

30. Yellow Code Room

31. Coloured Beam Challenge

终于完成这个谜题了!

哦不!我把命令方块弄坏了!

解说:Coloured Beam Challenge中的无线红石

说明

为什么断定是无线红石呢?

由于拉杆下方的红石灯是亮的,那么这个红石灯一定被充能了。如果拉杆下方的红石灯自身被任何形式强充能,那么拉杆唯一的效果就是继续给这个红石灯强充能,因此不能判断拉杆状态。如果拉杆下方的红石灯是被弱充能的话,那么它毗邻的6个方块一定至少有一个被强充能。然而,由于它上方是拉杆,四周是楼梯,均为透明方块,不能被强充能,所以只可能是下方的方块被强充能。这样,也无法判断拉杆状态。因此一定是无线红石。

核心

/testforblock + /testforblock + /testforblock + /testforblock + /testforblock + /testforblock……

/setblock + /setblock + /setblock + /setblock + /setblock + /setblock……

命令解说

# 记录玩家探索了这个地方
scoreboard players set @a m7 1
# 检测是否有玩家跑远了
testfor @a[-35,49,-196,12]
    ## 检测到则执行
    # 把跑远了的玩家拽回来
    tp @a[-35,49,-196,12] -27 49 -209
# 蓝色染色粘土
# 检测拉杆是否没有充能
testforblock -27 46 -188 minecraft:lever 5
    ## 检测到则执行
    # 切换路径
    setblock -35 60 -192 minecraft:redstone_block
    setblock -35 60 -200 minecraft:air
    ## 没检测到则执行
    # 切换路径
    setblock -35 60 -200 minecraft:redstone_block
    setblock -35 60 -192 minecraft:air
# 其余颜色同理

Minecraft Wiki在这个页面上解释了数据值5和13。

  • 0x8: If this bit is set, the lever has been thrown and is providing power.

Wall levers:

  • 0x1: Facing east
  • 0x2: Facing west
  • 0x3: Facing south
  • 0x4: Facing north

Ground levers:

  • 0x5: Lever points south when off.
  • 0x6: Lever points east when off. (Note that unlike the other types of switch, this version didn't power wires around the block it was sitting on. This bug was fixed in Beta 1.6)

Ceiling levers:

  • 0x7: Lever points south when off.
  • 0x0: Lever points east when off.

32. Orange Dial Selector

33. Yellow Dial Selector

34. Narrow Hallway

解说:奇怪的符号

核心

/tellraw + §符号。

命令解说

以这货为例。

由于工具提示目前还不能使用JSON格式的彩色文字,因此直接用§符号代替(1.7可以使用§符号,1.8仍然可以通过强制更改制作)。至于为什么能用JSON格式的“§k2”也使用§符号,因为如果真的使用obfuscated: true的话Multiplayer Settings中的Colors选项就不起作用了!不过这应该是个bug。

tellraw @a {text:'§k2',hoverEvent:{action:show_text,value:'§6___ m____p____r ____r_'}}

所以说Jesper的又一个神奇的产物……上下翻转的压力板。

解说:上下翻转的压力板

核心

矿车 + 刷怪箱。

制作方法

倒置的压力板

参见这个命令方块。

summon MinecartFurnace ~ ~-1 ~ {CustomDisplayTile:1,DisplayTile:70,DisplayOffset:-40}

实验场地:

激活命令方块后:

可以看到压力板距离树叶方块有一定的缝隙。那为什么之前没看见呢?因为这一定要在侧面才看得见,而在那个位置是无法看见压力板侧面的。说白了就是Jesper偷懒没调整好DisplayOffset……

解说
  • CustomDisplayTile指明了这个矿车要显示自定义的方块,而不是熔炉;
  • DisplayTile指定了要显示的方块;
  • DisplayOffset指定了方块距离矿车有多远,正为上,负为下,默认为0。

而由于压力板不管正还是倒,看起来都一样,因此没必要再倒置矿车了,直接把DisplayOffset设置为负数即可。

触发倒置的压力板

就是这一堆。

解说

玩家触发了刷怪箱,于是在压力板上产生一个XPOrb实体,触发了这个压力板,于是触发了旁边的命令方块。

因此其实是触发了刷怪箱。而这里并没有进一步确认玩家在那个位置,因为如果不开启作弊的话,只有那个位置可以触发刷怪箱。

矿车塔……

35. Shrinking Potion Challenge

解说:缩小药水

如果可以,建议观看Jesper制作的这个视频

核心

FallingSand + /scoreboard + /clear + /effect + 相对坐标传送 +
命令方块执行成功就会给比较器输出。

命令解说

Part 1:主脉冲
# 重置计分板Timer1为0
scoreboard players set @a[21,37,-565,10] Timer1 0
# 日常传送
tp @a[17,37,-564,1] ~ ~ ~30
# 尝试清除玩家物品栏中的“█ --> █”药水
# 这种药水数据值为potion/0
clear @a[21,37,-565,1] 373 0
    ## 执行成功则执行
    # 给予玩家“█ --> ■”药水
    # 这种药水的数据值为potion/7
    give @a[21,37,-565,1] 373 1 7 {display:{Name:█ --> ■},CustomPotionEffects:[{Id:3,Duration:5,Ambient:1}]}
# 尝试清除玩家身上的急迫状态效果(“█ --> ■”其实是急迫药水)
effect @a[29,37,-561,11] 3 0
    ## 执行成功则执行
    # 传送玩家到
    tp @a[29,37,-561,11] ~30 ~ ~
    # 清空玩家身上的所有药水
    clear @a[r=40] 373
    clear @a[r=40] 374
    # 启动脉冲,内容见下
    setblock 36 33 -560 152
# 尝试清除玩家物品栏中的“█ --> ■”药水
clear @a[21,37,-568,1] 373 7
    ## 执行成功则执行
    # 给予玩家“█ --> █”药水
    give @a[21,37,-568,1] 373 1 0 {display:{Name:█ --> █}}
# 尝试清除玩家物品栏中的“█ --> █”药水
clear @a[21,37,-561,1] 373 0
    ## 执行成功则执行
    # 给予玩家“█ --> ■”药水
    give @a[21,37,-561,1] 373 1 7 {display:{Name:█ --> ■},CustomPotionEffects:[{Id:3,Duration:5,Ambient:1}]}
# 尝试清除玩家物品栏中的“█ --> ■”药水
clear @a[21,37,-558,1] 373 7
    ## 执行成功则执行
    # 给予玩家“█ --> █”药水
    give @a[21,37,-558,1] 373 1 0 {display:{Name:█ --> █}}
Part 2:脉冲内容
# 给予玩家隐身的状态效果
effect @a[58,36,-561,16] 14 1000000
# 给计分板Timer1加1
scoreboard players add @a[58,36,-561,16] Timer1 1
# 给予计分板Timer1在1~2之间的玩家速度II状态效果
effect @a[58,36,-561,16,score_Timer1_min=1,score_Timer1=2] 1 1000000 1
# 给予计分板Timer1在3~4之间的玩家速度III状态效果
effect @a[58,36,-561,16,score_Timer1_min=3,score_Timer1=4] 1 1000000 2
# 给予计分板Timer1在5~6之间的玩家速度IV状态效果
effect @a[58,36,-561,16,score_Timer1_min=5,score_Timer1=6] 1 1000000 3
# 给予计分板Timer1在7~8之间的玩家速度V状态效果
effect @a[58,36,-561,16,score_Timer1_min=7,score_Timer1=8] 1 1000000 4
# 给予计分板Timer1在9~10之间的玩家速度VI状态效果
effect @a[58,36,-561,16,score_Timer1_min=9,score_Timer1=10] 1 1000000 5
# 给予计分板Timer1≥11的玩家速度XLI状态效果
effect @a[58,36,-561,16,score_Timer1_min=11] 1 1000000 40
# 当动画效果结束的时候
<红石逻辑>
    ## 检测到则执行
    # 停止脉冲
    setblock 36 33 -560 0
    # 重置计分板Timer1为0
    scoreboard players set @a[58,36,-561,16] Timer1 0

36. Red Code Room

解说:放大的世界上的纸上的内容检测

由于制作缩小药水已经占用了漏斗下方的空间,因此不能用一般的方法来检测纸上的内容。

自己缩小了,因此世界就是放大的了……

核心

/testforblock

命令解说

装置如图所示。

其中这一块是播放音效。

# 记录玩家探索了这个地方
scoreboard players set @a fred 1
# 检测下面的漏斗是否*不是*初始状态
testforblock 57 35 -550 minecraft:hopper 0 {Items:[{Count:1b,Slot:0b,Damage:0s,id:339s,tag:{RepairCost:2,display:{Name:"29275"}}},{Count:1b,Slot:1b,Damage:0s,id:339s,tag:{RepairCost:2,display:{Name:"29275"}}},{Count:1b,Slot:2b,Damage:0s,id:339s,tag:{RepairCost:2,display:{Name:"29275"}}},{Count:1b,Slot:3b,Damage:0s,id:339s,tag:{RepairCost:2,display:{Name:"29275"}}},{Count:1b,Slot:4b,Damage:0s,id:339s,tag:{RepairCost:2,display:{Name:"29275"}}}]}
<红石逻辑>
    ## 检测到则执行
    # 设置所有玩家的计分板cred为1
    scoreboard players set @a cred 1
    # 播放音效
    setblock 69 40 -556 minecraft:redstone_block
    # 设置玩家§c[]的计分板colors为1
    scoreboard players set §c[] colors 1
# 检测上面的漏斗是否*不是*初始状态
testforblock 57 36 -550 minecraft:hopper 0 {CustomName:" ",Items:[]}
<红石逻辑>
    ## 检测到则执行
    # 启动脉冲
    <红石逻辑>
        ## 脉冲内容如下
        # 重置上面的漏斗
        setblock 57 36 -550 minecraft:hopper 0 destroy {CustomName:" "}

37. Shears for Escher

其实如果真的是解谜的话,用之前容器里的纸更好用,因为可以叠加。但必须拿一个剪刀,因为要用剪刀才能破坏羊毛。

38. Green Code Room

39. Red Wool

终于到了这非常不科学的巨大方块了……先来张全景。

好了不要吐槽为什么视野那么近。Steve是近视眼!

首先……众所周知的事实,只有相应颜色的Code Room填完了之后才能破坏。我试过在一个Code Room都不填的情况下是无法破坏羊毛的(弄坏了它还会给你装回去)。

以红绿蓝三色的羊毛为例(其实是因为这三种颜色的判定都在一起)。

解说:Escher Cube的羊毛

说明

脉冲的位置在(-52, 76, -298)。

(此图左边的黑紫色矩形方块上有个洞!)

核心

/testforblock + /setblock + /summon + /testfor + 计分板……

计分板确实是个好东西。1.8之后也更好用了。

命令解说

首先,在Code Room没填上之前,也就是一开始,下图中的三块红色玻璃板的位置都是红石粉。

(是的你没看错洞被我填上了!)

所以这些命令被连上了脉冲。反正默认的/setblock命令就是replace模式,也不用先判定是不是空气方块了。

setblock -60 50 -298 minecraft:wool 14
setblock -53 50 -305 minecraft:wool 5
setblock -53 43 -298 minecraft:wool 3

然后就是这一堆命令方块。

以蓝色的命令方块为例。

# 检测是否有玩家的计分板cblue为1
# 也就是蓝色的Code Room已经填上
testfor @a[score_cblue_min=1]
    ## 检测到则执行
    # 将之前的连接蓝色的命令方块的红石粉删除
    setblock -52 76 -300 minecraft:air
    # 设置一个比较器来允许检测蓝色羊毛方块所在的方块是否为空气
    setblock -47 75 -298 minecraft:unpowered_comparator 1

再然后是这一堆命令方块。

用来检测羊毛是否被破坏。还是以蓝色的羊毛为例:

# 检测蓝色羊毛是否被破坏
testforblock -53 43 -298 minecraft:air
    ## 检测到则执行
    # 生成烟花来制造动画效果
    summon FireworksRocketEntity -53 43 -298 {LifeTime:0,FireworksItem:{id:401,tag:{Fireworks:{Explosions:[{Trail:1,Type:0,Colors:[27860]}]}}}}
    # 设置玩家§9[]的计分板colors为0来让玩家知道任务已完成
    scoreboard players set §9[] colors 0
    # 到下图的位置标记蓝色的羊毛已破坏
    setblock -48 83 -330 minecraft:redstone_block

40. Cross-shaped Symbol

41. Green Wool

42. Yellow Wool

43. Orange Code Room

44. Checking The Dials

45. Purple Code Room

解说:判断所有Dial都正确

核心

红石?

命令解说

在Dial设置的地方,如果设置到了正确的位置会依次执行下列命令(以紫色的Dial为例):

# 设置所有玩家的计分板r4为1
scoreboard players set @a r4 1
# 设置此Dial的红石状态为正确
setblock -57 35 -224 minecraft:redstone_block
# 在Colour Dial Settings中设置好红石灯
# 不需要用lit_redstone_lamp,因为这个命令本身就会产生方块更新
setblock -48 33 -232 minecraft:redstone_lamp

就是这么一大块:

其中第二条命令会导致下面这块红石产生更新,这块红石的位置在(-60, 36, -224),如下图。

如果Dial不全部正确,则会执行:

# 堵上Colour Dial Settings房间中的Purple Code Room
setblock -57 26 -222 minecraft:quartz_block
setblock -57 27 -222 minecraft:quartz_block
(等7条命令)

否则执行:

# 打开Colour Dial Settings房间中的Purple Code Room
setblock -57 26 -222 minecraft:air
setblock -57 27 -222 minecraft:air
(等7条命令)

46. Collapsed Code Room

解说:树的生成

核心

SetBlock Structure滤器!

不过由于它生成的命令方块用的是方块ID而非名称,因此不能在1.8以上使用。但1.8出现了新命令/clone,基本可以替代这个滤器。还好,1.7可以用方块ID。

可以看到在时光机的动画旁边有一大堆命令方块,就是滤器生成的了。

旁边还有一大堆,就是判断树苗的位置。

命令解说

都是/setblock没什么好说的……你可以试试一个个打开看看是不是都是/setblock命令……

制作方法

首先,你需要如下物品:

  • MCEdit(我不知道新版本的MCEdit能不能用旧版的滤器,因为下面这个滤器是用于MCEdit 0.1版的)
  • SetBlock Structure滤器脚本(这里有介绍)

步骤如下:

  1. 制造一堆建筑

    我偷懒,直接用Forester了……

  2. 选中

  3. 使用SetBlock Structure滤器

    先这样……

    然后再这样……

    就会这样……

    然后把建筑物删掉,进入Minecraft,点击按钮就能看到效果了。

我又弄坏了……

解说:年久失修的Code Room的动画

说明

脉冲的位置在(-32, 26, -273)。

核心

/setblock + FallingSand实体。

命令解说

# 检测动画还没有发生且有玩家进入此房间
# 使用某一个特定的方块来检测动画是否发生过了
testforblock -24 22 -254 minecraft:quartz_stairs
testfor @a[-26,24,-262,9]
<红石逻辑>
    ## 检测到则执行
    # 播放音效
    playsound mob.zombie.woodbreak @a
    # 动画效果
    setblock -28 22 -255 minecraft:air 0 destroy
    setblock -27 22 -254 minecraft:air 0 destroy
    setblock -26 22 -255 minecraft:air 0 destroy
    setblock -27 22 -255 minecraft:air 0 destroy
    # 延时1红石刻
    <红石逻辑>
    # 动画效果
    setblock -26 22 -253 minecraft:air 0 destroy
    summon FallingSand -25 21 -254 {TileID:43,Data:15}
    summon FallingSand -27 22 -253 {TileID:155,Data:1}
    # 延时1红石刻
    <红石逻辑>
    # 动画效果
    setblock -26 22 -254 minecraft:air 0 destroy
    summon FallingSand -25 22 -253 {TileID:155,Data:4}
    setblock -24 22 -254 minecraft:air 0 destroy
    # 延时1红石刻
    <红石逻辑>
    # 动画效果
    summon FallingSand -25 22 -255 {TileID:155,Data:1}
    summon FallingSand -26 21 -254 {TileID:155,Data:1}
    setblock -27 22 -254 minecraft:air 0 destroy

47. Blue Code Room

48. Blue Wool

49. Orange Wool

50. Purple Wool

51. The End

解说:the Code炸了!

说明

这个效果用了两个红黑相间的房间。为了方便叙述,下面将内部有一个Escher Cube的房间称为房间A,另一个内部为空的房间称为房间B。

核心

爬行者制造小型爆炸效果,末影龙制造大型爆炸散射光芒效果,FallingSand制造最终方块爆炸特效。物品展示框制造安全出口标记。

命令解说

主要子程序1

在所有的羊毛都被剪掉之后,这里的红石判定就会为真,启动这个子程序。

# 传送所有玩家到房间A里的Escher Cube上方一角(为啥是上方?)
tp @a -47 58 -346
# 给予所有玩家夜视与无敌效果
effect @a 16 1000000
effect @a 11 1000000 126
# 日常清理物品栏
clear @a
# 延时4红石刻
<红石逻辑>
# 启动普通爆炸效果子程序
setblock -39 75 -335 minecraft:redstone_block
# 启动较大爆炸效果子程序
setblock -40 75 -335 minecraft:redstone_block
# 延时32红石刻
<红石逻辑>
# 关闭较大爆炸效果子程序,获得“爆发前的宁静”
setblock -40 75 -335 minecraft:air
# 延时80红石刻
<红石逻辑>
# 关闭普通爆炸效果子程序
setblock -39 75 -335 minecraft:air
# 继续下一步执行
setblock -39 75 -334 minecraft:redstone_block
普通爆炸效果

脉冲速度非常缓慢,但连接了很多命令方块。

# 通过生成立刻爆炸的爬行者来产生爆炸效果
# 由于设置了游戏规则doMobLoot = false,因此不会炸坏任何东西
# 由于玩家此时具有无敌效果,因此不会伤及玩家
# 为了防止还没爆炸就被后面具有较大爆炸半径的爬行者炸死,设置了无敌属性
summon Creeper -53 50 -332 {Fuse:0,Invulnerable:1}
summon Creeper -41 50 -352 {Fuse:0,Invulnerable:1}
...
较大爆炸效果

脉冲速度正常。

# 生成立刻爆炸且爆炸半径较大的爬行者
summon Creeper -53 58 -352 {Fuse:0,ExplosionRadius:50}
主要子程序2

脉冲速度比较缓慢。

一开始会执行各种奇怪的禁止破坏的命令,用途不明防止爆炸后留下下面这个没用的建筑。

末地传送门

# 保持Escher Cube上方1×1的柱形为空气
setblock -53 68 -352 minecraft:air
setblock -53 67 -352 minecraft:air
setblock -53 66 -352 minecraft:air
setblock -53 65 -352 minecraft:air
setblock -53 64 -352 minecraft:air
setblock -53 63 -352 minecraft:air
# 保护房间A上表面中央的近似圆形区域不受破坏
setblock ~-4 ~-4 ~-21 minecraft:wool 2
# 保持Escher Cube上方一个扁平圆形区域为空气
setblock ~-12 ~-10 ~-25 minecraft:air
# 等待一段时间后
<红石逻辑>
# 生成一条已死亡的叫做“the Code”的末影龙
# 骑着一只还剩10秒就会消失的无敌经验球
# (为啥?我测试了不加Riding标签,似乎没有什么不同)
# 这条命令由于红石时序,会被执行正好5次
summon EnderDragon -53 49 -352 {HealF:0,CustomName:"the Code",Riding:{id:XPOrb,Age:5800,Invulnerable:1}}

执行5次后(用一堆中继器计时的),会将数据写入这个只写锁存器中。

写完后,就会让执行命令用的中继器停止工作。

# 上面执行5次完毕后,等待一段时间
<红石逻辑>
# 停止这个子程序(主要子程序2)的脉冲
setblock -39 75 -334 minecraft:air
# 在Escher Cube内部中心放置岩浆,这样就可以自动处理掉末影龙掉下来的一大堆经验球
setblock -53 47 -352 minecraft:lava
# 延时4红石刻
<红石逻辑>
# 将所有在房间A的玩家对应地传送到房间B
tp @a[-53,50,-352,34] ~-53 ~ ~
# 然后在房间B继续下一步执行
setblock -100 90 -353 minecraft:redstone_block
# 延时20红石刻
<红石逻辑>
# 把在Escher Cube内部中心放置的岩浆收回
setblock -53 47 -352 minecraft:air
# 重置5次执行循环结束标记的只写锁存器,断开红石线让其中信号自然消除
setblock -29 75 -333 minecraft:air
# 延时4红石刻
<红石逻辑>
# 把锁存器的线连回去
setblock -29 75 -333 minecraft:redstone_wire
主要子程序3

这个子程序只执行一次。

## 只有下面这条命令连接了脉冲,脉冲为一般的比较器脉冲,速度很快
# 产生偏大的爆炸效果
summon Creeper -105 50 -352 {Fuse:0,ExplosionRadius:10}
# 延时1红石刻(用于同时执行下列4个命令)
<红石逻辑>
# 激活命令方块立方体四面的红石,来执行整个命令方块立方体中的命令
setblock -106 81 -341 minecraft:redstone_block
setblock -106 81 -363 minecraft:redstone_block
setblock -95 81 -352 minecraft:redstone_block
setblock -117 81 -352 minecraft:redstone_block

这个命令方块立方体使用了各种红石技巧来让每个命令方块都被充能。反正都充能到了,加上本人红石并不怎么样,我就不解说这里用了什么红石技巧了。

# 延时20红石刻
<红石逻辑>
# 重置这个子程序(主要子程序3)的启动用红石块
setblock -100 90 -353 minecraft:air
# 开个出口
setblock -126 31 -370 minecraft:air
setblock -126 32 -370 minecraft:air
# 用物品展示框里放地图的方法标记“安全出口”
summon ItemFrame -125 33 -370 {TileX:-126,TileY:33,TileZ:-370,Dir:3,Item:{id:358,Data:0},Invulnerable:1}

命令方块立方体

其实这么多命令方块都是复制的,总共就一条命令。

# 在房间B中产生运动轨迹为抛物线的双石英台阶FallingSand实体
# 因为运动会受到中间爬行者爆炸的影响,因此此处无需指定运动方向
# 这也是这个爆炸效果看起来比较真实的原因:直接使用了游戏的物理
summon FallingSand ~ ~-30 ~ {TileID:43,Data:15,Time:1,DropItem:0,Motion:[0.0,0.3,0.0]}

解说:the End?

说明

安全出口附近会触发脉冲,位置在(-114, 35, -376)。

命令解说

# 给进入安全出口通道的玩家添加夜视效果
effect @a[-128,31,-370,2] 16 1000000
# 清除玩家的夜视和无敌效果
effect @a[-128,31,-375,2] 16 0
effect @a[-128,41,-375,2] 16 0
effect @a[-128,31,-375,2] 11 0
effect @a[-128,41,-375,2] 11 0
# 检测任何玩家的位置是否处在给定的值附近
testfor @a[-138,31,-376,4]
<红石逻辑>
    ## 检测到则按顺序执行
    me Special thanks to @a for playing this map :D
    give @a 387 1 0 {title:who,pages:[:"thanks␊theqmagnet␊jellewie␊Jorickjuhh␊simpelwegjasper␊texelelf␊SimplySarc␊Squirtdude␊sethbling␊Sacheverell␊CaptainSparklez␊Datassette␊bb089␊daanboer95␊and you :D"]}
    tellraw @a {text:' '}
    tellraw @a {text:'*  Check out my youtube to see how I did everything'}
    tellraw @a {text:'youtube.com/jespertheend2',color:'blue',underlined:true,hoverEvent:{action:show_text,value:'click me :D'},clickEvent:{action:open_url,value:"http://www.youtube.com/jespertheend2"}}

 

 

细节:End ?

我第一次玩的时候,大概眼力太差,根本没看到那个暗色的问号。

亮色是挖空的,这样后面阳光照亮的石英块就透出来了。暗色则是凹陷下去的石英块。

在最后,地图全景的切换应该不需要解释了吧?就是相对坐标传送啦。

52. 最后,结束了。

存活确认时间!

这篇文章已经临近尾声了。也许你已经能看到马上要触及底端的滚动条,不过在最后的这点时间里,我还是想回顾一下……

我们已经了解了这么多机关的原理。几乎在the Code III中出现的每一个命令方块我们都研究过。这可是大约5000个命令方块啊!

那么,下一步你可以干什么呢?

没有人能阻止你。也许你只是一个Minecraft新手,或者是创造命令方块艺术很不错的人,都没有什么关系。你也可以在看完这篇文章后怒删游戏,或者一笑了之——不过,继续吧,你可以在Minecraft无尽的世界中探索与开辟新纪元,或者是任何其它的一切……

53. 后记

根据Cmd Markdown给出的数据,这篇文章是在2014-8-19 14:30开始编写的。在我写到这一章节的时候,已经是2015-7-9。将近一年的时间里,Minecraft也已经从1.7更新到1.8。一开始几乎是每天都写,这写作动力一直持续到将近最后,终于坑了。之后搁置了很长一段时间,但我要感谢zhaoxingeabc的催更,让这篇文章终于完成了。另外,据统计,这篇文章有近30000字,也许是我写过的最长的文章。无论如何,我对这篇文章能够不弃坑地写完感到无比高兴。

啊,这篇文章的WIP标记终于可以撤掉了,真是太令人开心了呢。

satgo1546
2015年7月10日

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注