Minecraft 的多人游戏是如何发展起来的?
诸如 Bukkit 或者 Spigot 这种服务器端又是怎么出现的?
15.11.28 - 公布了几个空= ̄ω ̄=--------------------------------------------------------------------想了一想,事情要这么说起。
一、无米不成炊 (上) 一个第一版仅用6天发布第一版的游戏,陌陌的走了1年多。回到5年前,从0.0.11a第一版稚嫩的世界来看,现在的世界已经初具雏形。地形、河流、树木、甚至tnt也被加入到了游戏中。
↑Minecraft 0.0.9a (May 16, 2009) ↓Classic版
但notch想,这样的世界或许太孤单了。其实很早之前的Pre-classic的rd-132328就出现了很多乱跑的npc,但是那并不成功。
↑Pre-classic中的人类 终于,脑洞大开的notch想到了个好点子。于是,5年前的夏天,minecraft发布了Minecraft_server.jar。这个简单的jar使得你可以简单的和朋友在同一个世界游玩,此后Minecraft的知名度迅速增长,u2b的相关视频也变多了。(下) 当你畅想Minecraft Mods的时候,请不要忘记一个叫mcp的组织(嗯…组织?)。 mcp,也就是Minecraft coder pack,是开发模组的基础。mcp简单来说就是让Minecraft被混淆的代码变成你看得懂的java代码。众所周知,Java程序非常容易反编译。然而你会发现,mc在编译时混淆过,反编译出来的都是这些东西。
↑反编译的部分Minecraft 代码是给人看的,而混淆后的代码简直太xx不是人看的了!然而这时候,一群mc真爱粉站了粗来,“我来!”。
↑反编译前后的方法(左:原Minecraft反编译;右:MCP(forge中),注:1.7.10) 说真的,我光是找到对应的方法也很困难的,因为这些混淆的代码实在太酸爽了。靠着这个团队日日夜夜的阅读理解,才有了后来开发者的便利才使得mc的模组如此丰富。当然第三方的forge、modloader什么的也得益于此。所以mc的多样化一定要好好谢谢这群有爱的mcp作者们。 除了客户端?剩下则是服务端。bukkit的横空出世,反编译反混淆minecraft的服务端。具体接着看。
二、白饭不好次(上) (注:本部分的内容可能被误认为有地域针对性,但是实际上本部分内容不针对任何个人、集体、组织、地区,相关内容均马赛克处理。) 绝对有理由相信,有超过10%的Minecraft玩家不太熟悉下面这个画面:
甚至,有玩家都认为Minecraft是免费游戏。不仅是这样,大批游戏站都可以免费获取到盗版Minecraft。
不要问为什么我提起这些内容,以后你就懂了。(中) Bukkit API太好了,Bukkit API太好了,Bukkit API太好了。因为重要所以说三次。看到这里,终于开始走正题“发展”了。Bukkit API是什么?类似于Forge API,Bukkit API是通过对Minecraft服务端反编译、反混淆,并实现的接口。简单地说Bukkit能有这么多插件(plugin),完全要感谢Bukkit API。而Bukkit API的实现是基于对Minecraft服务端的反编译、反混淆,所以这项工作直接关乎Bukkit的更新速度。 Bukket的前身是hey0开发的hMod,本质上和Bukkit API类似。然而hMod横空出世后不久,作者hey0就不见了(惊恐脸)。随后Bukkit的主力Dinnerbone接下了担子,然而负责填坑的Dinnerbone看了看代码——这都shenmegui!代码的层次结构都很混乱。于是便推翻了原来的hMod,重新反编译、反混淆。
来自Minecraft中文Wiki—— Bukkit 是一个社区软件、开源工具和减轻开发服务器插件的负担的。它由 hey0 的 Mod 拓展而来。因为一些开发者参与了 hey0 的 Mod 开发,因此两个插件有相似的地方。然而,hey0 编写的 Mod 被移植到 Bukkit 应用程序设计接口(API)上。 Bukkit API是给开发者看的,但是真正给Minecraft看的还是CraftBukkit。举个例子,Bukkit API给了你一个原来在Minecraft里叫a的方法,因为a你看不懂,所以Bukkit API就改叫他b,这样子你就看懂了。但是但是,Minecraft里面没有b只有a咋办?于是CraftBukkit帮你在用b的时候调用了Minecraft里的a。再来梳理下,开发者用Bukkit API开发,CraftBukkit实际开服,问题解决了,真棒。(下) “解决你妹啊!” 得益于Bukkit API,服务器的小游戏大量出现。不仅小游戏,一些管理插件粗线啦,能使得我们能更方便的管理服务器。 但是但是,还记得第一章(上)中提到的MCP吗?开发者开发了基于MCP的Forge等API来编写模组(Mod)。不错,这些Mod基于MCP,但是Bukkit的插件基于Bukkit API,这尼玛根本不是同一个东西啊喂!所以那时的服务器就变成了这样子: A.玩联机Mod(官方+Forge) B.玩联机插件(CraftBukkit)。很坑爹的,逼着你选择。而且很长时间都没有人给出合理的C选项。 僵局被打破。终于MCPC-Plus出现啦!由国外Md5大神制作,兼容了CraftBukkit和Forge。其实说白了,就是Forge+Spigot+CraftBukkit的服务端整合包。的确解决了问题,但是其稳定性还是差上一点,毕竟CraftBukkit和Forge的基础都不同。(片花) 你可曾想过这个谜之Realms按钮是什么?
2013年3月13日,随着1.5的发布,Minecraft Realms也出现了,一个官方服务器,随后支持了小游戏、冒险等功能。本来它应该是官方的很好的服务器平台,但是你为什么不太了解呢?其实,问题的答案wiki里也不难得到。
摘自Minecraft中文Wiki—— 然而,Realms本身仅仅是作为朋友之间的服务器而存在的,而并不是构建一个大型服务器。……价格为$13/月(约合81人民币元/月,因实时汇率而波动) Realms只能为满足以下条件的设备与玩家服务:你必须有Mojang账户你需要一个已付费版本的Minecraft……你的年龄必须超过十三岁才能加入Realms 不仅因此,因为某些原因,在中国并不能直接使用Realms,也对Realms在中国的推广造成了很大影响。与其说Realms是Mojang为了挽回市场做的失败的尝试,不如正视Realms遭冷落的原因。(尾巴) 你可能注意到了Spigot并没有提到,所以在这里简单带一带。Spigot是由Md5及Spigot开发小组制作的纯净服务端。无论是速度还是稳定性都甩了CraftBukkit几条街,而且自带防X-ray。由于基于CraftBukkit,所以兼容所有CraftBukkit的插件。在50人以上,TPS明显高于CraftBukkit。这里说一下,刻(Tick)是Minecraft线程循环周期的一个周期,每秒20刻,也就是50毫秒一刻。看过log的应该有看过这些吧:
↑从Log中拷贝的一部分这提醒了你该刻在Minecraft线程中运算用时太长了,说人话就是卡。而类比TPS——每秒的刻数,当然最大是20,且越大越好。
三、永远都爱撕逼再次卖个关子,公布几个空:
三八大战蓄势待发,请大家等我码字~