拥有管理员权限或开启作弊的单人模式玩家可以在聊天框内输入命令/give@scommand_block来获得命令方块。
使用选择器可以代替使用实体名称:
命令方块有各种各样的用途,如改变难度,改变天气的状态,或者给你指定的物品。它们只能在作弊为开启时才能使用。
以下列出了一些使用实例:
这个装置会给予一个随机玩家五个曲奇,然后告诉所有人。
首先创建一个记分板(名字任意,注意除非你在测试,否则不要显示它),比如说“cookie”。
/scoreboardobjectivesaddcookiedummy{"text":"cookie"}[仅Java版]或/scoreboardobjectivesaddcookiedummycookie[仅基岩版]
第一个命令方块的命令:
/scoreboardplayersset@rcookie1
第二个和第三个命令(两者可颠倒,但要同时被激活):
/say@a[scores={cookie=1}]已被给予五个曲奇。
/give@a[scores={cookie=1}]minecraft:cookie5[仅Java版]或/give@a[scores={cookie=1}]cookie5
第四个命令方块的命令:
/scoreboardplayersset@a[scores={cookie=1}]cookie0
上图中I代表输入红石信号源。(建议可使用永动红石电路)
你可以通过使用/tp
命令方块也可以制作安全系统。只要在建筑物入口的铁门前放置一个压力板,并于命令方块中输入命令:/tp@p[r=<半径>,name=!<你的玩家名>]
类似于电梯的概念,用于使实体往x或z坐标移动。
可以通过以下方式建造:
现在站到填充的方块上,你就会自动向指定的方向移动。
命令中的~-0.1~~可以替换为你想要的坐标,但不要改为~~0.1~或~~-0.1~。
命令方块被触发时,会自动在聊天栏中输出一条信息,如:“[@]:已召唤1个实体”。
您可以通过此命令屏蔽命令方块输出:/gameruleCommandBlockOutputfalse。
屏蔽命令方块输出可以给玩家带来更好的游戏体验。但将会使玩家难以直接了解命令方块的执行结果。
用/gameruleCommandBlockOutputtrue来恢复命令方块输出。
通过使用蜘蛛网和矿车,你可以使用/timeset0跳过夜晚。一个矿车需要31秒穿过一个蜘蛛网。因此,通过使用23个堆叠的蜘蛛网和探测铁轨和几个充能铁轨来达成永昼。
这两种方法都要求保持区块加载以使系统工作。可以通过在机器上使用/forceloadadd~~命令来保持机械所在区块常加载。
或者你可以将命令方块连接到一个重复的红石脉冲,例如一个5分钟,某种类型的循环,或者如右图所示的阳光探测器。为了防止聊天框被刷屏,使用命令/gameruleCommandBlockOutputfalse关闭命令方块在聊天框上的消息输出。注意:这个方法可以使用不同的命令来设置各种各样的东西。(比如,要使天气永远晴朗,在循环中添加另一个命令方块,并使用命令/weatherclear。)
为了可以在不同功能之间切换,可以在命令方块前设置一个与门,在一边放置一个拉杆,在另一边设置一些电路。
使用阳光探测器是永昼的一种更直接的方法。
还有一种更紧凑的设计。如果你把一个阳光探测器作为一个红石比较器的第一个输入,一个强度为15的红石线(红石块或红石火把)放在比较端,然后将比较器设置为比较模式(前段火把熄灭),则比较器将会在中午之后立即启动。
在命令方块上放置阳光探测器,然后按下使用键,将其设置为夜光探测器。将命令/timesetday添加到命令方块中。或者如果你希望永远是夜晚,你可以添加一个阳光探测器,不要右键单击它,然后将/timesetnight添加到命令方块中。
可以使用命令方块和记分板系统实现无线红石。该过程涉及使用记分板变量,该变量由附加到时钟电路输出的命令方块进行搜索。然后在无线输出命令方块上使用红石比较器,该命令方块在发现变量为正时触发。
无线红石也可以通过使用对象而不是变量来实现。如果输出命令块设置为尝试删除一个不存在的对象,则可以通过通过命令块或聊天命令添加saidobjective来创建红石信号。这种方法对于变量法的优点是它不依赖于参与者。
为此,在在输入处放置一个命令方块,并键入命令/scoreboardobjectivesadd<对象名>dummy,在输出位置放置一个命令块,输入/scoreboardobjectivesremove<对象名>(两个对象名要一致),将其连接到时钟电路上,然后在命令方块外面放一个红石比较器,然后放一个红石中继器。然后使用红石中继器作为输出。
停止状态。
触发状态。
触发状态命令。
停止状态命令。
设置无线输出。
无线输出命令。
另一种使用/call命令的无线红石。这里使用的命令是/summonFallingSand-118150-60.5{TileID:76,Time:1,DropItem:0}(已于Java版1.12失效)。
你还可以通过使用/setblock命令实现无线红石,而不是通过计分板系统。你所要做的就是让命令方块将一个与任何不输出信号的方块相邻的红石块的坐标设置为目标坐标,并且与一个连接到反向信号的命令方块一起设置为相同的坐标。
从技术上讲,这可以在任何方块上完成,但是按钮、拉杆和其他可以交互的方块会增加有趣的效果。虽然在服务器上非常神秘,但它其实很简单。它使用了/execute命令。它使用了一个命令方块、一个将命令转换为红石信号的红石比较器、一个要测试的方块和一个重复激活命令方块的时钟电路。这是一个无线按钮的示例:/executeifblock12312123stone_button[powered=true](按钮坐标是123,12,123)。输入要测试的特定方块的坐标和名称,在本例中是位于12312123的石质按钮。这可以使用在任何可更改方块状态的方块上。
注意:这个值根据方块状态变化,关于数据值的详细内容,请见按钮#数据值与拉杆#数据值。
通过使用参数[gamemode=<模式名称>],你可以在(服务器)地图上制作一个只能获得一次的套件,首先,在地上挖3个方格,然后放置一行命令方块(工具包中的每个物品一个)。在命令方块的界面中,输入/give@p[gamemode=<初始游戏模式>]<物品ID><数量>。这样他们会获得你所希望给予他们的物品。在一个额外的命令方块里面输入/gamemode<非初始游戏模式><对象>,然后潜行后用红石连接整个命令方块串。将洞填起来然后放上压力板。当玩家走过去,他们会得到他们应得的工具包,他们因为更改了他们的游戏模式所以他们不会获得更多的套件。
(注意:此命令也可以透过记分板的方式完成,首先建立一个记分板并命名它,如/scoreboardobjectivesadd<名称>dummy[<显示名称>],然后,给予记分板数值为0的玩家要给予的物品,如/give@p[scores={<记分板名称>=0}]<物品>[<数量>],最后将他的记分板数值设为非0的值,如下/scoreboardplayersadd@p<记分板名称><任意非0的数值>。同时,你也可以通过不同的记分板名称重复以上步骤。)
是不是已经厌烦了压力板只有四种材质可用了呢(石质,木质,铁质和金质)?现在你可以不再为这个问题困扰了。你可以使用包含命令/execute,区域大小的带有时钟电路的命令方块来代替压力板了。命令/executeas@aat@sifblock~~-1~#sandruntp~~3~[仅Java版]会检测任意沙子上是否有玩家并将他向上传送三格。同样你也可以修改run后的命令来达到不同效果,也可以更改sand至其他方块。
详见:/execute
通过/gamemode也可以使你在单机非创造性地图中使用命令方块,简单的切换游戏模式可以使用/gamemodecreative然后将命令方块的命令设置为您想要的任何内容,最后使用/gamemodesurvival切换回生存模式。命令方块只是需要在创造模式下设置,但切换至生存模式仍然可以正常运作。
如果一个人希望创造一个单人玩家的探险家地图,执行/publish命令来让其他的命令(见下方)被使用。
这个章节详细介绍了命令方块在多人游戏中的应用。
通过/tp命令,可以制作一个所有人都可以使用的传送装置。可以在每个地方都使用。例如,在整个世界里做一个庞大的传送系统,所有的传送点入口都汇集到传送大厅中,而传送大厅可以进入每个传送点入口处进而达到出口。这样就可以建造一个“快速交通中心”了。
用/give@r命令,可以创造一个抽奖。但是记住,/give命令是直接把物品放进他们的背包,而不是放在他们面前。
通过连接高频红石到一个命令方块和用/tp命令,你可以强制玩家留在某个地方。如果你想让这个方法成为可行的,在你的聊天窗内使用命令/gamerulecommandBlockOutputfalse。使用选择器r和rm[仅基岩版]或选择器distance[仅Java版],你可以在玩家离开一定距离后再将他们传送回来。
如果使用参数[gamemode=creative],那么只有创造模式的玩家才会受到这条命令的影响,当然输入[gamemode=survival]既只对生存模式的玩家有效。
注:使用AutoMessage等服务端插件就可以达到自动公告的功能。
通过在命令方块中使用/me,可以创造一个无人自动广播(需要连接循环红石等不断发出激活信号的红石元件),不需要OP,用Java版1.7+的新命令/tellraw{text:"<信息>"可以免除开头的[@]并且可以做到悬浮事件和点击事件等。
注:大部分服务器管理插件支持封禁危险物品。
使用/clear命令,你可以清除玩家背包中的某物品。具体步骤是这样的,使用/clear<@a|玩家名称><清除的物品名>。如果想实现自动清理危险品需要连接循环红石。
使用/say@p,命令方块就能报告最近的玩家。如果命令方块放在终点线后,他会很方便的说出赢家,但是/say会给所有玩家发送信息,为了防止刷屏,建议使用/tell或/tellraw。
注:Residence等服务器领地插件的拓展插件可以实现领地内游戏模式的变化。
你可以通过命令方块创造一个“创造/生存模式区域”,但是很繁琐。可以通过用命令方块的范围限制来制作一个“围栏”,通过围栏的玩家会变成生存或创造模式。在命令方块中输入命令:/gamemodeadventure@a[x=<区域中心坐标>y=<区域中心坐标>z=<区域中心坐标>distance=<最小的玩家搜索半径>..<最大的玩家搜索半径>]这样放置两个搜索区域不重合的命令方块,就可以将规定半径内的玩家改变模式。
使用命令/gamerulekeepInventorytrue来关闭玩家死亡后的物品掉落(同样在重生后会保留物品和经验等,所以需要在玩家重生后清空背包)。使用/give@p<物品ID>可以给予玩家武器(可以添加NBT标签),你可以设计一套完善的职业系统,玩家选择不同的职业会有不同的装备。使用/spawnpoint
你可以很简单的使用命令方块给予新手包且不需任何插件:/give@p[distance=..2]stone_pickaxe。为防止玩家按下两次按钮获得两个新手包,您可以设置按钮后的两个命令方块:1./give@p[distance=..2,gamemode=adventure]stone_pickaxe,2./gamemodesurvival@p[distance=..2]。(玩家一开始是冒险模式,获得工具包后调成生存模式,然后再限定工具包仅限冒险模式能拿即可)
同时/tellraw可以直接利用“color”等参数来弄出彩色字体。
当玩家走上压力板时,他能触发命令方块/say@p<警告内容>。
如果某个玩家在服务器有着特别的贡献或者有元老资历,但却不足给他管理员权限,你可以奖励他一组钻石或者一些奇怪的东西。创建一个只有通过传送命令才能进入的房间,将有卓越贡献的玩家传送进去,玩家会激活房间中的命令方块从而获得奖励,然后他又会被另一个命令方块传送回原地,如果服务器允许/back的话,连续2次传送到原点,这样/back就无效了。(可以避免玩家重复领取奖励)
使用/toggledownfall和/weatherthunder来开始或者结束降雨(雷雨)合理安排这些命令的话会十分有用,你可以随自己的意愿开始或停止降雨。这个技术可以用于村民和一些由降水控制的红石机械,不用输入任何命令就可以控制天气(需要管理员激活命令方块自动执行),合理利用将会十分有效,比如在森林火灾时或者在雨天刷怪。
可以使用/tp@p和/give@p命令制作一个障碍赛跑或者有奖迷宫,游戏结束后就将玩家传送回出生点或其他地方。
使用命令/executeas@aat@sifblock~~-1~#woodrunsummontnt~~~检测到有玩家站在木头上时就召唤TNT!砰!
通过使用/executeifentity@p[distance=..5,name=<玩家名>][仅Java版]或/testfor@p[r=5,name=<玩家名>][仅基岩版],命令方块会在一定范围内检测指定玩家并且为他开门,也只会为他开门。
(注:命令方块的/execute[仅Java版]或/testfor[仅基岩版]命令为一次性命令,命令方块检测到一次就会一直输出信号。)
这一节详细介绍了命令方块在自定义地图的应用。
{{#ev:youtube|_f2brU8hBWc|425|}}
{{#ev:youtube|jryJkWcqmzM|425|}}
在地图中控制命令方块不输出提示信息很重要,这可以保持玩家对地图的未知性和剧情的隐蔽性,如果玩家看到了各种命令的提示信息,地图将会索然无味。关闭命令方块输出信息(除非是/say这类的命令)使用/gamerulecommandBlockOutputfalse就可以实现。
使用压力板或者绊线(以安全城堡为例)设置进入城堡内的玩家为和平难度(对于不同区域视情况而定)。城堡大门可以有连接命令方块的绊线,命令方块上写/difficultypeaceful,玩家一旦走过绊线(或压力板),激活命令方块,就会变为和平难度,这样就可以创造一个“避难所”。反之,你可以用同样的方法创造一个“困难难度区域”,当玩家进入会变为困难难度。
使用值[gamemode=creative]你就可以设置命令只对创造模式的玩家有效,生存模式就是[gamemode=survival]。例:传送所有创造模式的玩家到254,47,-874,使用的命令为/tp@a[gamemode=creative]25447-874。
建造至少两个建筑物,在房间的入口或者出口设置一个/tp命令的命令方块,你不必将你的建筑都在同一个地方建设,它们可以在任何地方,只需要入口的命令方块传送过去,玩家会忽然觉得外面感觉很小的建筑内部空间竟如此之大。用这种方法联合多个建筑,可用作与服务器或单人地图中的场景瞬移。
使用/spawnpoint可以设定玩家出生地点。(应用十分广泛,PVP地图,RPG地图等等)
之前的内容提到过,/gamerulekeepInventorytrue可以在玩家死后保存背包物品。在跑酷地图的出发点设置一个这样的命令方块,就可以使掉落熔岩死亡的玩家不会丢失物品,同时记录点可以用/spawnpoint来做。
比方说,你的地图开始在一个寒冷的暴风雨之夜,你可以设置突然天晴了,外面有灿烂的阳光!或者,如果你想开始一个光明的一天,想让雨突然下起来又没办法?不要怕,有/weather命令。只需使用/weather,输入就行了!你也可以使用/timeset输入:0是凌晨,6000是中午,12000是黄昏,18000是午夜。
创建一个攻击型生物,把它放在压力板上。(请确保它会保持始终按下状态,所以一定要确保它不能跳或走开)。做一个红石电路,让压力板在没有接收到红石信号的时候激活命令方块。命令方块里设置一个消息,通知玩家的地图由于难度切换到了和平难度导致损坏,需要的怪物已经消失,请重新下载这个地图。你甚至可以做一个隐形传输命令方块,把那些故意切换到创造模式的玩家换成冒险模式后传送到一间基岩屋内,并让他不能使用/kill或/tp命令,并把他的重生点设在那个房子里,让他永生见不得光明!(单人的话,可以点“对局域网开放”,或用修改器编辑)
/say命令可以直接给玩家发送消息。用命令方块将会更好,这样你就不需要放很多的告示牌和页码多到不行的书来告诉玩家游戏规则。你只需要把命令方块放成一条线然后在中间铺中继器来弄各个语段之间的延迟(以防命令输出提示顺序错乱),接着你就可以把那堆告示牌和放着书的箱子移走。
有一些是和NPC配合使用的。想象一下你进了铁匠铺并且你想要让里面的铁匠说些什么。在命令方块出现之前,你需要一些书和告示牌来充当对话的效果,然后在铁匠铺里造些房间并放些杂物,这样会让这个铁匠铺看起来变得非常乱。但是现在,你只需要使用/say命令来制造铁匠说话的效果。也许柜台后面的猪会求饶!让我们再举另外一个例子:你在一家工厂里,一个报警铃的声音提示说工厂陷入危险了。用这个方法在聊天框中告诉玩家,以便保持一个紧张的气氛,特别是如果文字很长时应当用此方法。这同样可以用在定时炸弹装置,如果玩家看到了聊天框中的倒计时,他将可以更好地把情绪带进地图。
最后一点并非不重要,它可以更容易地建立一个任务系统,来让我们的玩家开始进行任务。玩家通过压力板后会激活RSNOR锁存器(所以它不能被再次激活),然后用一个有/say命令的命令方块去表达屠夫对玩家的要求。他需要去杀一只猪。当玩家杀死站在石质压力板上的猪时电路就会关闭,使玩家回到屠宰场之后会激活另一个电路,包含另一个RS或锁存器和两个带有命令的命令方块。第一个命令是屠夫感谢玩家的/say命令,另一个命令是使玩家获得奖励的/give命令。除此之外,别忘了使用目标选择器@p,使屠夫说出玩家的名字。例如,将命令方块设置为:/say谢谢,@p。你帮我杀了那头猪。,聊天框就会显示:[@]:谢谢,<玩家>。你帮我杀了那头猪。这让地图变得更酷,看起来像是为玩家制作的,因为上面写着他/她的名字!
通过使用/give@p[level=<''等级''>..]<物品><数量>和/experienceadd@p[level=<''等级''>..]<等级>levels命令可以建立一个商店,举例来说,如果你放了两个命令方块,一个输入/give@p[level=5..]grass_block64命令,另外一个输入/experienceadd@p[level=5..]-5levels命令,并连接到相同的红石电路,当命令方块被激活后,会从等级高于5等的玩家扣除5等等级,并给玩家64个草方块。
可以使用命令方块创建出售任何物品的自定义村民。例如:/summonvillager~-2~0~0{Profession:3,CustomName:BLACKSMITH,CustomNameVisible:0,Offers:{Recipes:[{maxUses:13,buy:{id:388,Count:5},sell:{id:283,Count:1,tag:{ench:[{id:16,lvl:9},{id:20,lvl:6}],display:{Name:MoltenGoldSword}}}},{maxUses:13,buy:{id:388,Count:1},sell:{id:280,Count:1,tag:{ench:[{id:16,lvl:5}],display:{Name:WhuppinStick}}}},{maxUses:13,buy:{id:388,Count:2},sell:{id:369,Count:1,tag:{ench:[{id:16,lvl:5},{id:20,lvl:10}],display:{Name:RadioactiveWhuppinStick}}}},]}}
你可以通过/setblock命令放置刷怪笼,例如:/setblock~1~-1~0mob_spawner{EntityId:Zombie,SpawnData:{Equipment:[{id:"minecraft:iron_sword",Count:1}]}}会放置产生拿着铁剑的僵尸的刷怪笼。几乎所有除了玩家的实体都可以透过自定义刷怪笼产生,包含了矿车、火球、箭、雪球、末影珍珠、喷溅药水、烟花火箭、点燃的TNT、掉落的沙子、掉落的红沙、掉落的沙砾、画、物品展示框、经验球甚至是掉落物。
如果你没有想要指定特别的玩家,可以使用@a(所有玩家)、@p(最近的玩家)或是@r(随机玩家)参数,而不是<玩家名称>。请记住,你可以在玩家发出的命令中使用@p(最近的玩家)或@s(自己)作为一个比输入自己名字更好的替换,因为你对于自己来说最近的玩家将永远是你。
以下的命令会于X坐标加2的格子放置一个召唤僵尸的刷怪笼:
/setblock~2~~minecraft:mob_spawner{EntityId:Zombie}
下面的基础命令包含了6种可设置参数:
/setblock~~-1~-3mob_spawner{EntityId:Skeleton,SpawnRange:4,RequiredPlayerRange:16,SpawnCount:4,MaxNearbyEntities:6,MinSpawnDelay:200,MaxSpawnDelay:800}
提醒:
下一步要做的是修改生成数据。生成数据告诉刷怪笼你想要一个非标配的怪物,比如带有钻石剑和锁链头盔的僵尸:
/setblock~~1~mob_spawner{EntityId:Zombie,SpawnData:{Equipment:[{id:"diamond_sword",Count:1},{},{},{},{id:"minecraft:chain_helmet",Count:1}]}}
使用~代替坐标的值,由于使用了上一个示例中的这6个参数,因此它们都是默认值。注意:那五个槽顺序分别为Hand(手)、Boots(靴子)、Legs(护腿)、Chest(胸甲)和Helmet(头盔)。注意你必须也指定空的槽,除非它以后都是空的槽,例如,若只要指定武器,后面四个槽可以省略;但如要指定头盔,五个槽都必须打出来;若要指定靴子和护腿,第一、二和三的槽都必须显示,四和五的槽可以省去。请记住,尽管是损坏的头盔,只要戴上它,那些会因阳光而燃烧的生物,就可以存活。虽然大多数的代码中允许你忽略count标签,但是count标签本身十分重要。一个没有count标签的物品是一个零栈(更通俗的叫法是“幽灵物品”)。幽灵物品会在玩家第一次使用时消失(这是一个失败),但怪物可以不受影响地使用幽灵物品(这就是为什么有时代码会遗漏掉它们)。如果怪物掉落了这些物品,拾起它们的玩家也无法使用这些物品,因此强烈建议使用count标签。
/setblock~2~1~2spawnerreplace{EntityId:Skeleton,SpawnData:{Equipment:[{id:261,Count:1,tag:{ench:[{id:50,lvl:1}]}},{},{},{},{id:397,Count:1,Damage:3,tag:{ench:[{id:0,lvl:2}],SkullOwner:MHF_Spider}}],Riding:{id:"EntityHorse",Type:4,Tame:1,SaddleItem:{id:329,Count:1,Damage:0}}}}
严格来说,骷髅仅仅是坐在马上,因为骷髅的移动取决于它骑着的马,而马并不会与你敌对。注意不要把僵尸(或其他近战生物如僵尸猪人)放在马背上,它们的攻击范围不够,因此只能坐在马上什么也不干。所幸无论马如何移动,骷髅都可以进行射击。至于马本身,它的类型为4(骷髅马),驯服被设置为1(是),并装备有一个马鞍(事实上,它们让我们指定哪种鞍座暗示着它们最终可能有不止一种类型)。从技术层面来说,你可以设置一个多级骑乘的生物,但你很快就会意识到这么做并不明智。
我们可以在刷怪笼中使用SpawnPotentials标签来生成多种实体。当计时器重置时(生成前一个生物的后一秒钟),它会随机选择一个标签进行生成。由于这些代码包含多个生物,所以它们往往是相当长的代码。多亏了一位YouTuber(Dragnoz),我们知道了代码可以被“分解”的事实(命令方块忽略换行符,因此,您可以开始一个新的行来使一个部分在哪里结束、另一个部分在哪里开始变得更清楚明白,而且这不会破坏您的代码)。以下是一个SpawnPotentials代码的例子,看起来更加“赏心悦目”:
这个命令包含了许多代码,因为它实际上是6个独立的生物。其中有:
除了那个忍者,这里一共有5种不同的剑和盔甲。注意Weight标签,其需要在每个SpawnPotentials中的生物名称后使用。这决定了该生物被选中并生成的几率。具体的数字没有什么意义,有意义的只是数字之间的比例。例如,如果你想让所有预置生物等概率生成,则可以将每个Weight都设置为1,将它们全部改成8也没有什么不同(它们之间的比例仍然是相同的),但是将除了某一个之外的所有其他Weight更改为8则会使其中1/8的可能性与其余的1/8相同。在这段代码中,默认值是4,而忍者只有2(使它被选中的可能性减半),FakeHB只有1。
/setblock~~1~spawner{EntityId:MinecartRideable(orBoat),SpawnData:{Riding:{id:
提示:
/scoreboardobjectivesaddcounterdummy/scoreboardplayerssettarget_countcounter YouTuber“SethBling”使用地图当作通关依据(scroll),当空白地图被使用时,会变成一般地图,那时,命令会立即将地图从玩家的物品栏清除,并执行命令(召唤生物、传送玩家),同时关卡通过。 优点 缺点 机制建设 玩家可以更改项目的显示名称,让玩家更好地了解对象并使用工具提示显示。使用以下命令为玩家提供自定义命名地图:/give<玩家>map{display:{Name:"<名称>",Lore:[" 检测地图的激活 /clear<玩家>filled_map 进阶 /clear命令可以检验其他可交互的物品: /clear<玩家>fishing_rod{Damage:2}请注意如果钓到了地面或者生物时,钓鱼竿可能会损失不少于2点耐久度,所以对每2点耐久度都进行一次检验。