这是本人第一次写如此长的教程,若有不好的地方,请多多指教!
本教程适于各位服主(腐竹)阅读,各位死磕单机MOD的请绕道。
本帖图片均未挂,但是刷得较慢,请耐心等待。
§1 前言
我相信很多在座的服主的服务器中都会有一些小游戏,这些小游戏绝大多数都是插件。这些小游戏非常占资源而且自定义程度非常低,远远达不到各位的要求。所以,我写这篇文章,为了教各位,如何用红石和一些十分基础的插件,做出一些功能十分强大的游戏。本教程依附于现在主流的1.6.2水龙头/水桶客户端,使用官方原版的请绕道。最后请各位记住一句话:有了红石,没有什么做不到的。
§2 准备工作
这一章我将列举出一些你所需要的基础插件,因为往往原版的红石是达不到你的需求的,比如说你要弄一个能自动恢复地图的游戏:如果使用官方原版,我唯一想到的方法就是用刷怪笼(你能想象你不断地把服务器地图下载下来然后用MCEdit和NBTEdit龟速地修改刷怪笼的数据让它能刷出数以万计的方块不卡还得把这个数G的地图文件用FTP龟速上传上去?),然而使用WE(创世)和SB(脚本方块)可以非常完美地解决这个问题。以下就将列出各种非常有用的基本插件。
1、基础插件 Essentials 必要程度:★★★★★
这个插件太重要了,功能什么的不需要我解释了吧。
2、领地插件 Residence 必要程度:★★★☆☆
有人可能会问,领地插件干什么用?我告诉你,可有用了,在没有多世界的情况下,保护你的游戏建筑基本上全部依赖于领地插件,并且领地插件强大的子领地系统可以非常完美地解决区域允许PVP问题,实在是很重要。
3、多世界 Multiverse-Core 必要程度:★★★★☆
在资源允许的情况下,尽可能让所有的游戏到别的世界里面去,配合权限组来减少各种权限问题。
4、创世 WorldEdit 必要程度:★★★★☆
没有它,你可能要点100,000下鼠标右键来创建一个巨大的区域,鼠标不坏你手也坏了。
5、脚本方块 ScriptBlock 必要程度:★★★☆☆
这个插件可以做的事情绝大多数命令方块也能做,但是个别要把自己取为对象的命令除外,用这个插件配合上创世的//schematic load //paste 简直是神器,后面会详细介绍。
6、方块查询 CoreProtect 必要程度:★★☆☆☆
这个插件对于正常服务器帮助极大,非常重要,但是对于小游戏来说,主要功能就是当你一不小心打掉了一个有非常长的文字的牌子或者一个非常复杂的命令方块时可以用来局部回档。
§3 一个简单的范例:简单跑酷
假设我们现在要在服务器中建一个跑酷小游戏,要把所有到达终点的玩家传送到起点,并且给钱。这个任务看上去非常简单,但是还是有几个问题的。比如说边界问题:如果你在周围建立高高的基岩墙,你能想象有多么难看吗?所以个人推荐的方法是:首先你先搞一个新的超平坦世界(/mv create)然后,设置一个2000*256*2000的领地(个人推荐100%可行的方法是用 //wand 召唤出WE里面的木斧,然后TP到-1000 20 -1000,左键选择脚下的方块,然后TP到1000 20 1000,再右键选择脚下的方块,然后输入这些命令:/res select worldedit ; /res select sky ; /res select bedrock ; /resadmin create MyFirstProtection,有必要注意的是这个/resadmin,如果你不希望你的资产从1,000,000,000,000,000变成0的话,最好还是用这个,避免了出现类似“权限不足”的情况)。创建完了之后,直接输入//set 0将整个区域全部变成虚空。然后利用/jump 0来创建一个悬空的玻璃并开始你的跑道建设。站在起点处输入/setwarp XXX来创建地标,方便玩家参加。跑道的终点,利用ScriptBlock来建立给钱系统,例如/sbwalk create [@bypass /warp XXX][@bypass /eco give <player> 1000000000]。如果你看不懂这个命令请自己去看ScriptBlock教程。因为这个命令比较简单,我来解释一下:强制玩家传送到地标XXX,并且给自己1000000000元钱。这个范例中需要注意的就是新世界的权限配置,请保证玩家没有以下这几个权限中的任何一个:使用所有home相关的命令,res相关的命令以及/back命令。
§4 Box与Clock
想必大家一看就能理解上述简单范例,那么本章就是对接下来相对较复杂的教程的前提。本章将会介绍Box与Clock,两个在小游戏中非常重要的两种元件。
第一个:Box。Box是指一个十分狭小的2*2*2的空间(推荐2*2*2,如果是1*2*1的话会有问题,后面会介绍)。这个空间用于将玩家传送进去再进行一系列处理比如给予物品或者设置权限之类的。因为MC的坐标格点就是每个方块的顶点而不是中心,所以如果你使用的是1*2*1的Box,那么要把玩家传送到里面就必须使用类似传送到5.5,20,7.5这种带0.5的坐标。然而因为部分服务端不支持传送到带0.5的坐标,所以请你使用2*2*2的Box,这样就可以把玩家传送到正中间。

上图为1*2*1的Box(左)和2*2*2的Box(右)。图中玻璃仅为演示方便,请替换为铁块,下同。
Box分为2种:主动Box与被动Box。主动Box是地板上铺有踏板的,当玩家传送进来踩到踏板而触发接下来一些列处理的装置;而被动Box是一个没有踏板的,利用外部红石来对里面的玩家进行处理的装置。两者都是为了处理玩家,目的相同,原理不同,自然各有利弊。主动Box的好处是可以大大减少红石结构的复杂性,不需要大老远地把红石线铺过来,极大地减少了延迟,但是缺点也是有的,玩家传送过来时有一定几率卡了一下,没踩到踏板,掉线了,这下完了,没踩到踏板就无法激活下面的操作,可能一个极其复杂的游戏就卡死在这里无法进展了。然而被动Box虽然会增加红石复杂程度,但是却可以保证就算出现了玩家掉线,也能正常继续游戏(可能会出现0玩家的情况,但总比结构卡死,等着玩家传送好)。两种Box视情况使用,个人推荐用被动的,因为MC传送的时候是最容易掉线的。

上图为被动Box(左)和主动Box(右)。
下面介绍第二个:Clock。Clock就是脉冲,换句话说就是各位服主们最害怕的高频红石。说实在的,做小游戏不一定要用高频红石,用低频的没什么关系,但是我可以确定低频和高频对服务器造成的负载是差不多的。有的服主看到这里立刻就摆摆手说:“啊呀,那么消耗资源啊,算了我不做了..”,对,很耗资源,但是别慌!首先你要知道MC里面没有人的区块是不加载的,里面就算有1000000个高频红石也不会对服务器造成任何负载,也就是没有玩家在你的游戏场地时,它是不会运行的。而且Clock往往是和/testfor配合起来统计剩余人数的,也就是只有很少一部分时间在运行,关于需要长期运作的自动开游戏Clock的自重新激活(就是从没有被加载苏醒过来)的方法下面会介绍。首先我们要知道一点,做小游戏用的Clock和普通的高频红石不一样,我们绝对绝对不能用普通的一连串中继器首位相接,这样可控性极差,而且完全无法自重新激活!我们需要使用的方法就是下图中右边那个,左边那个就是绝对不行的范例。

上图为绝对不行的范例(左)和推荐使用(右)。其中金块下面有一个红石火把被挡住了,向钻石上的红石发送一个脉冲即可自重新激活。金块下面的红石火把十分重要(依附在离玩家更近的那个铁块上),是整个脉冲的核心。
好了,我们需要的两个装置介绍完了,接下来就是非常重要的『大厅游戏』核心思想了。
§5 『大厅游戏』核心思想
首先我需要介绍『大厅游戏』是什么。『大厅游戏』是我瞎扯出来的一种游戏的统称,其主要内容是玩家进入一个游戏大厅,然后游戏开始后,所有在大厅内的玩家传送进入游戏地图来参与游戏。那么这一章将详细介绍这种游戏的核心思想。本章将以这类游戏相对较复杂的Spleef(掘一死战)为例。目标是做成一个当大厅内玩家数达到5人自动启动并且自动给玩家工具以及恢复地图的游戏。本例将只介绍核心思想。首先你需要建立一个游戏区(巨大,并且有一层雪,下面是岩浆)和一个大厅(请保证离游戏区有至少100格子的距离,防止命令方块的误选取操作)。地标设置在大厅里。在距离大厅不远的地方放一个Clock用于不断检测游戏区内玩家数量。大厅内放置一个按钮,贴上牌子,写上“游戏强制重启按钮——如果游戏区里的人没了还没有开始下一局游戏,请按此按钮”,这个按钮连接上Clock的自重新激活。然后你需要找到整个游戏区的中心,和中心离最远的方块的距离。然后就可以开始设置玩家数检测系统了。在Clock上接上一个命令方块/testfor @a[x=...,y=...,z=...,r=...]来检测有多少玩家,当玩家只有一个之后,将玩家传送进一个Box,这个Box底部用/sbwalk create [@bypass //schematic load Map][@bypass /paste],并且给予Box中的玩家物品或者钱(命令方块不需要解释了吧),当然你在弄这个地图自动恢复系统前,选中整个地图,然后站在Box里用//copy和//schematic save Map来保存地图。之后,将Box中的所有玩家传送到大厅,这样一来,你就完成了一个自动判断胜利系统。接下来请在那个检测玩家数的命令方块继续连接线路,并接上新的命令方块:/tp @a[x=...,y=...,z=...,r=...] ... ... ...来将大厅内的玩家自动传送到另一个Box,然后再一个命令方块给所有Box中的玩家武器,和治疗(/heal player),然后把Box中的玩家传送到游戏区。好了,这下就剩下一个领地配置了,整个区域圈一个领地,整个游戏区圈一个子领地,子领地设置/res set destroy true,好了,搞定!这样,一个听起来如此复杂的游戏就变成很简单的了。别的游戏类型都差不多,还有一些例子我过两天补上。
§6 各种你可能会碰到的疑难杂症
本章专门介绍你可能会碰到的疑难杂症,采用Q&A方式,简单易懂:
Q:为什么我创建领地的时候提示权限不足?
A:是你钱不够,用/eco set 10000000000或者/money set 10000000000,但是推荐用/resadmin create。
Q:为什么我传送不走Box中的玩家?
A:试试加大命令方块的检索半径,一般一个2*2*2的Box推荐用r=8。
Q:为什么我做自动恢复地图的时候,那个地图恢复到外面来了,把墙都弄烂了?
A:哎呀,你要站在那个你用来恢复的ScriptBlock上来进行复制。否则,呵呵。
Q:为什么我将命令从外界复制到游戏中来使用ScriptBlock的时候它提示你肯定输错了?
A:因为MC有说话长度限制,尝试分成多条发。(第一次用create,接下来用add)
§7 写在最后——编者的话
我知道你可能有些例子没看懂,没关系,我语文水平不是很好,无法详细描述,有问题,尽管在回复中问,我保证我会在10个工作日内(一般情况下1-2个工作日)中给你答复的。我第一次码了那么多字写一篇教程,希望各位看后能够有一些体会。并且我保证这个帖子是会更新的,会逐步添加各种例程。我弄这个帖子真的弄了很久,希望大家能够支持我,若有什么不足,请在回复中提及,我一定会修复的!
——SCucumber
好评。。。。写得太好了
= =不错,支持
写得很好,但ScriptBlock这个插件我觉得必不可少
谢谢各位的支持,谢谢!
虽然LZ写的东西自己在服务器搞各种活动都用过,
但相比自己潜心研究 , 刚上手不太懂的OP们还是需要这种指路贴
但相比自己潜心研究 , 刚上手不太懂的OP们还是需要这种指路贴
恩,我觉得明天我还得加一些内容。
为啥就没人看呢,唉。。郁闷
好帖 留名 此题必火
hgc 发表于 2014-7-25 10:27
好帖 留名 此题必火
事实上已经过去8个小时了。只有79次查看,我快郁闷死了-_-
挺不错的,收藏一下。
辛苦了辛苦了
终于有11个回复了,我好感动啊
保存地图是怎么保存还有就是传送这部分听不太懂
786071433 发表于 2014-8-14 14:15
保存地图是怎么保存还有就是传送这部分听不太懂
创世神里面有一个指令就是复制,你先把地图复制下来,然后要重置的时候只需要粘贴就可以了,因为复制和粘贴是相对于你输入指令的位置而言的,并且命令方块无法执行,所以你需要把一个玩家传送到那个你复制地图的位置,用脚本方块强制其执行粘贴操作。那个//schematic load是从WE的目录里面读取你曾经用//schematic save存储的剪贴板内容。
hhttll 发表于 2014-8-20 11:01
创世神里面有一个指令就是复制,你先把地图复制下来,然后要重置的时候只需要粘贴就可以了,因为复制和粘 ...
检测玩家是怎么搞?
貌似不错 
786071433 发表于 2014-8-20 13:08
检测玩家是怎么搞?
/testfor @a[玩家选取条件] 写在命令方块里,用一个Clock去触发它,我身边没电脑,只能大概描述一下..
用一个红石比较器把信号拉出来之后((第一格红石)与(第二格红石的非门)的与门)的结果就是当玩家数为1时的输出口
本帖必火~  
hhttll 发表于 2014-8-20 14:45
/testfor @a[玩家选取条件] 写在命令方块里,用一个Clock去触发它,我身边没电脑,只能大概描述一下..
用 ...
玩家选取条件的x y z需要填的是什么 还有我不懂的是,可以检测多个玩家再触发吗,一个人加入游戏后触发的命令是什么?
是不是这样摆法
命令方块 红石 红石中续器 testfor
红石
红石
clock
786071433 发表于 2014-8-20 18:13
玩家选取条件的x y z需要填的是什么 还有我不懂的是,可以检测多个玩家再触发吗,一个人加入游戏后触发 ...
需要填写的是你检测区域,利用X,Y,Z选择监测区域中心,R选择监测区域半径。
这个检测命令方块的原理是,当有红石信号触发时,将testfor的结果(人数)保存在“体内”。并且不断将体内的数据输出给红石比较器。所以应该是 clock 连接命令方块(testfor),再连接红石比较器红石比较器出来2格红石,第一格左边连一个红石中继器,第二格左边连一个红石中继器+一个非门,把第一个红石中继器和第二个非门的结果合并输出控制结束操作即可
PS:建议去学一下命令方块的基础和红石进阶
好帖 支持下
hhttll 发表于 2014-8-20 19:56
需要填写的是你检测区域,利用X,Y,Z选择监测区域中心,R选择监测区域半径。
这个检测命令方块的原理是, ...
可以给张图么,可以加QQ讲解吗?QQ:786071433
/clean+/tp+/testfor+/give+/setblock完美解决任何问题
我的蛋蛋 发表于 2014-8-27 18:43
/clean+/tp+/testfor+/give+/setblock完美解决任何问题
都说了是1.6.2,是老版本,没有setblock,再说setblock没办法回复地图啊(除非你用clone,再说用clone不能复制NBT数据)
不得不承认Bukkit小白
谢大神
谢大神
可不可以给“主动box”加一个超时自动踢除装置?
感觉很厉害的样子。。看不懂
谢谢楼主,真耐心,写了这么多
好评!非常棒
ScriptBlock插件用了很久了,服务器游乐场也用这个来收门票
虽然看不懂!不过感觉是神作哦
不错不错 谢谢LZ
太厉害了...{:10_512:}
好详细=.=  能否简单点