《Minecraft脚本引擎:从入门到抬棺送走》:绪论
如果把Minecraft游戏比作一个巨型的机器人的话,那么脚本引擎就像是这只机器人主动开放给玩家们的一个操作面板,它允许玩家们操控这只可爱的庞然大物的行为、监测或修改它身体各个部位的数据,使其实现一些很酷的操作。
大家好,我是你们的兔头老鸽乾山瑶。呐呐呐,终于开坑了。我们是兄弟,我怎么会鸽你们呢?[狗头.png]。
阅前提示
本系列教程基础更新频率为周更(时间有空余的时候可能会一周多更)更新时间一般在每周一到周日之间,视情况而定。
鄙人水平有限,撰写过程中难免出错,还望各位不吝斧正,多多包涵。
如非特别强调,本系列文章中所提及的Minecraft均指Minecraft基岩版。

本章节为绪论部分,主要是对脚本引擎的发展、本系列教程的主要内容及开始前的准备做一个基本的介绍。
首先,让我们把时光的轮盘拨回四年前,去探索脚本引擎的前世今生。

脚本引擎发展浅述
横空出世
2016年10月25日,在经历了5个测试版本后,Minecraft携带版Alpha0.16.0正式发布。Alpha0.16.0的更新,不仅带来了海底遗迹和它的守卫者们,还带来了一个令无数内容创作者们为之兴奋的内容——Add-ons(附加包)。

附加包是由一定文件结构组成的储存了游戏程序运转的行为规则及资源的数据包,需由Minecraft游戏本体加载后在游戏中发挥效用。附加包允许玩家更改世界的样貌并修改生物的行为,以及更改游戏的其他内容。虽说在当时,附加包仅允许玩家修改游戏内已有内容的配置文件,自定义游戏内容尚未被支持,但四年后的今天,附加包已然可对游戏内的诸如生物及其行为、物品、方块、合成熔炼及炼药配方、矿物生成、建筑结构生成、生物群系等等内容进行数据驱动及自定义(当然仍然存在着诸多不足,这点在本文下一部分将会提到)。附加包的发布意味着基岩版有了官方支持的插件接口,这对基岩版玩家们来说是极具历史性的一刻。
可对于一个优质的插件而言,仅能够修改一些游戏内容是远远不够的,它还要求插件加载器开放给内容创作者们实现游戏逻辑的方法。虽说当时社区中已有发展得较为成熟的第三方API提供给创作者们使用,但它们的情况也不容乐观。BlockLauncher(方块启动器)在Minecraft正式版更新后函数库变得极不稳定:随着Minecraft版本的更新,越来越多的函数逐渐失去效用。

后起之秀Inner Core虽说有着更加完善的API,函数支持方面较BlockLauncher更为稳定,但其付出的代价是仅支持正式版1.0.1版本的Minecraft,可游戏版本号却不停的增加着。久而久之,对于追求新版本内容的玩家来说,Inner Core逐渐开始显得有些“落后”。

而附加包当时在这一领域的支持程度,几乎为零。由于附加包内的文件大部分使用Json数据格式编写,故本质上其隶属于数据包的一种,这就意味着它在当时并不具备实现各种复杂游戏逻辑的能力。
附加包的这种“能力缺失”的状态一直持续了两年。
直至2018年,基岩版用户们在经历了BlockLauncher、Core Engine、Inner Core等一系列第三方启动器主宰的时代后,终于迎来了官方所提供的Mod API——Script Engine(脚本引擎)。
脚本引擎
附加包与脚本引擎的关系就像是生物个体与其身体的某个器官的关系一样,脚本引擎隶属于附加包,它的相关文件夹被放置于附加包中行为包的根目录下,它必须依赖附加包才能在游戏中发挥作用(所以如果你之前还在奇怪为什么这个憨憨up主要花这么多篇幅去介绍一个看似与标题完全不搭噶的内容的话,想必现在你已经有了答案)。如果把Minecraft游戏比作一个巨型机器人,那么脚本引擎就像是这只机器人主动开放给玩家们的一个操作面板,它允许玩家们操控这只可爱的庞然大物的行为、监测或修改它身体各个部位的数据,使其实现一些很酷的操作。
与附加包不同,mojang目前仅在win10端开放了脚本引擎的使用权限,而移动端用户在加载含有脚本引擎的存档时,会被提示无法进入存档。当然,在安卓端您可以通过使用方块启动器加载游戏来开启脚本引擎的使用权限。(IOS端玩家表示很淦[就是有嘲笑的意思.png])
脚本引擎提供了一些系统与方法供给玩家监测与修改游戏中的内容,其中包含且不仅仅包含:事件系统,用于监听与广播游戏中的一些事件,当然您也可以自定义事件并对其进行广播与监听;组件系统,在脚本引擎中,实体、方块、存档的一些属性都是由一种叫做组件的东西定义的,脚本引擎提供了获取与修改这些组件的方法,同样的,您也可以自定义组件并应用到指定的游戏内容上;UI系统,脚本引擎提供了自定义UI并与之交互的方法,玩家可通过脚本引擎加载自定义的UI界面,并使用其提供的接口方法与UI端实现数据传输;接口方法,脚本引擎提供了一些方法给玩家使用,玩家可通过这些方法对游戏内的一些内容进行操作。
这些内容将会在之后的章节中一一介绍。

未成年的孩子
附加包与脚本引擎的出现着实让许多基岩版的内容创作者们眼前一亮,仿佛基岩版在插件领域已经可以与Java版一决高下了,但是现实却没有想像得那么美好。
首先是附加包:虽说其在实体方面做得已经较为完备,但时至今日,附加包在自定义方块与物品方面的功能仍不完善。方块方面,方块模型无法自定义、方块属性定义功能的不完善都大大的限制了创作者们施展拳脚的空间,而物品方面,无论是工具还是武器都没有完备的定义方式,附魔的自定义更是一个无法企及的泡影。自定义维度同样仍未被支持。
对于脚本引擎,除去仍在完善中的接口方法及可监听事件外,UI定义困难,数据无法储存等问题至今未得到解决。且更为致命的是,其目前无法进行多线程运算,这意味着脚本引擎目前负担不起运算量较大的算法,这会不会就是mojang至今仍未对移动端用户开放脚本引擎的原因呢?没人知道。
附加包就像是个未成年的孩子,还在不断的成长着,它有着无穷的潜力等待着各位去发掘。随着mojang的不断开发以及基岩版的不断发展,老鸽相信,在不远的将来,附加包必定会成为Minecraft游戏史上一颗闪耀的巨星。

本系列教程将带您探索脚本引擎这一年轻的系统,揭开它的神秘面纱,赋予您在Minecraft的像素世界里凌驾于上帝之上的能力。

内容一览
这里是之后将陆续更新的内容一览(可能会随着游戏更新做出一定的调整)
每章将根据内容多少决定是否分小节更新。

这是?工作台!
第一章 服务端与客户端
第二章 系统的获取与使用
获得升级
第三章 生命周期
第四章 预制对象
第五章 事件系统
第六章 实体交互
第七章 组件系统
第八章 自定义UI
我们必须再深入些
第九章 多人联机适配
第十章 UI绘制
第十一章 伪数据储存的实现
第十二章 性能优化

开始前的准备
俗话说工欲善其事,必先利其器。在开始我们的编写旅程之前,让我们先准备一些方便的“交通工具”及路上的“干粮”。
前置知识
在开始之前,您需要对以下知识及内容具备一定的了解(请在相关教程页面或是wiki相关词条页面对以下内容进行详细了解)
JavaScript
脚本引擎的大部分内容都是由JavaScript语言所编写的。JavaScript是您与引擎进行“交流”所必须的语言工具。
附加包
附加包是脚本引擎在游戏中发挥作用所依赖的母体。附加包中包括资源包与行为包,而脚本引擎代码则存放于行为包根目录的scripts文件夹中(这一点将在第一章中进行详细介绍)
JSON数据
JSON数据是一种数据结构。JSON在附加包中作为储存游戏中各种内容的运行规则的数据文件。如生物的定义及其行为、方块物品的定义及其属性、矿石生成规则的定义,建筑结构生成的规则,以及我们之后会讲到的配置文件等等。在脚本引擎中,我们需要使用JSON来编写manifest文件用以定义各种配置。
编写工具
脚本引擎代码的编写目前对编辑器并没有什么特别的要求,您甚至可以使用记事本来编辑您的代码(但极其不建议您这么做)。如果您目前没有趁手的编辑器,这里列出了部分常见的编辑器供您参考。
电脑端
Visual Studio——官方推荐。功能强大,大概率以后官方会出相关的插件支持。社区版免费,可满足脚本引擎的开发使用需求。专业版需付费。
IDEA——功能强大的集成开发环境,目前虽然没有相关插件支持,但代码提示用起来仍较为顺手。学生可凭相关证件在其官网上申请学生账户免费使用其公司旗下所有产品。
SublimeText——拥有优秀的代码补全功能、代码高亮、漂亮的用户界面和强大的功能。
Notepad++——一款小巧高效、支持27种编程语言的开源软件
安卓端
920文本编辑器——(名誉推荐)老牌编辑器,ModPE时代的主流编辑器之一。但由于较为古板且不支持高版本系统,并不推荐使用。
AIDE Web——功能强大的安卓端web代码编辑器,拥有语法高亮,自动缩进、代码补全、格式整理、上千行代码不卡顿等等特点。
Quick Edit——移动平台上高效,稳定和全功能的文本编辑器,它同时为手机和平板设备进行了优化。Quick Edit对性能和用户体验方面进行了大量的优化,使得其速度和输入反馈更加优越。
苹果端
个人并不具有苹果端的开发经验,欢迎有这方面经验的大佬可在评论区补充(`・ω・´)。

好了,在一切准备就绪后,咱们也是时候上路了=A=。

