# :-: 一切的开始
BGM :<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=700 height=52 src="//music.163.com/outchain/player?type=2&id=5348862&auto=1&height=32"></iframe>
*****
### **前言:**
在此之前,希望你对Java,我的世界有一定的了解(虽然会有基础讲解)。
至少这样会使你多多少少可以看懂之后的文章。
本教程可能会出一些差错,若有可联系作者或评论区指出,若有不懂的也可以在评论区评论哦~或者在下面搜索:
### **文章导航:**
[TOC]
(以下屁话,来看这教程的都应该知道我的世界把?直接下一章)
*****
如果您对Java或我的世界的了解不深入(含糊),以下内容可能会帮到你:
* #### **java:**
> **百度百科:**
> Java是一门[面向对象](https://baike.baidu.com/item/%E9%9D%A2%E5%90%91%E5%AF%B9%E8%B1%A1)编程语言,不仅吸收了[C++](https://baike.baidu.com/item/C%2B%2B)语言的各种优点,还摒弃了C++里难以理解的[多继承](https://baike.baidu.com/item/%E5%A4%9A%E7%BB%A7%E6%89%BF)、[指针](https://baike.baidu.com/item/%E6%8C%87%E9%92%88/2878304)等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。Java具有简单性、面向对象、[分布式](https://baike.baidu.com/item/%E5%88%86%E5%B8%83%E5%BC%8F/19276232)、[健壮性](https://baike.baidu.com/item/%E5%81%A5%E5%A3%AE%E6%80%A7/4430133)、[安全性](https://baike.baidu.com/item/%E5%AE%89%E5%85%A8%E6%80%A7/7664678)、平台独立与可移植性、[多线程](https://baike.baidu.com/item/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1190404)、动态性等特点。Java可以编写[桌面应用程序](https://baike.baidu.com/item/%E6%A1%8C%E9%9D%A2%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F/2331979)、[Web应用程序](https://baike.baidu.com/item/Web%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F)、[分布式系统](https://baike.baidu.com/item/%E5%88%86%E5%B8%83%E5%BC%8F%E7%B3%BB%E7%BB%9F/4905336)和[嵌入式系统](https://baike.baidu.com/item/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%B3%BB%E7%BB%9F/186978)应用程序等 。
同时,我的世界也是由Java语言开发。可见Java使用也是同样广泛的。
什么?你对编程没有任何了解(完全没有基础)?下面的内容可能会帮到你哦~
>[success] 1. 拥有足够的耐心,静下心来慢慢学习,千万不要中途放弃~ 记得不懂就问哦(记得礼貌)
> 2. 如果你选择学习Java,可能会感到困难,你可以试试学习简单的编程语言(如Python或玩编程游戏学)
比我写的更好的相关文档链接:
> * [无任何编程基础的人,该怎么入门编程?(知乎)](https://www.zhihu.com/question/28611887)
> * [初学者应该如何开启自己的编程生涯?(百度)](https://baijiahao.baidu.com/s?id=1601249211609135023&wfr)
* Java常常只表示**JRE(Java Runtime Environment)**,那么你知道JRE是什么吗?
> **百度百科:**
> **Java运行环境**(Java Runtime Environment,简称JRE)是一个软件,由太阳微系统所研发,JRE可以让[计算机系统](https://baike.baidu.com/item/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F)运行。Java应用程序(Java Application).
> JRE的内部有一个Java虚拟机(Java Virtual Machine,[JVM](https://baike.baidu.com/item/JVM))以及一些标准的[类别](https://baike.baidu.com/item/%E7%B1%BB%E5%88%AB)函数库(Class Library)。
就是说JRE的作用是为了在您的计算机上运行Java应用程序。
那么你又知道什么是 [**应用程序**](https://baike.baidu.com/item/%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BC%8F/18758462?fromtitle=%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F&fromid=5985445&fr=aladdin) 吗?
>[info] 一般说,应用程序就相当于你Windows(视窗操作系统-计算机管理控制程序)上的QQ.exe(\*.exe:英文全名executable,可由操作系统加载执行的文件;QQ:腾讯的即时发送和接收通过连接网络的用户的短信图片等信息),运行(双击打开、右击出现菜单点击打开、选中按Enter键)后,会根据代码(程序员用开发工具所支持的语言写的源文件)由计算机/系统运算进行相应操作(如打开了腾讯QQ的登陆窗口)。但准确来说,QQ是应用软件,原因:一个游戏软件包括程序(exe)、其他图片(\*bmp等)、音效(wav等)等附件,那么这个程序(“exe)称作应用程序,而它与其他文件(图片、音效等)在起合称软件。所以应用程序其实是供程序运作的主要代码(核心),用户看到的是图形化用户交互界面(Graphical User Interface,GUI)。
* JRE中包含了**JVM(Java Virtual Machine)**,那么JVM又是什么呢?
> **百度百科:**
> JVM是Java Virtual Machine(Java[虚拟机](https://baike.baidu.com/item/%E8%99%9A%E6%8B%9F%E6%9C%BA))的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
> 引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言[编译程序](https://baike.baidu.com/item/%E7%BC%96%E8%AF%91%E7%A8%8B%E5%BA%8F/8290180)只需生成在Java虚拟机上运行的目标代码([字节码](https://baike.baidu.com/item/%E5%AD%97%E8%8A%82%E7%A0%81/9953683)),就可以在多种平台上不加修改地运行。
说白就是Java的可移植性很高,因为Java拥有自己独立的虚拟机,而**Java应用程序**需要在JRE(JVM)上运行,同时JRE有多个平台的版本,使得在不同平台上安装了JER就可以运行Java应用程序而不用修改代码。
>[info]**虚拟机是什么:**
虚拟机(Virtual Machine)指通过[软件](https://baike.baidu.com/item/%E8%BD%AF%E4%BB%B6/12053)模拟的具有完整[硬件](https://baike.baidu.com/item/%E7%A1%AC%E4%BB%B6)系统功能的、运行在一个完全[隔离](https://baike.baidu.com/item/%E9%9A%94%E7%A6%BB/33079)环境中的完整[计算机系统](https://baike.baidu.com/item/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%B3%BB%E7%BB%9F/7210959)。在实体计算机中能够完成的工作在虚拟机中都能够实现。在[计算机](https://baike.baidu.com/item/%E8%AE%A1%E7%AE%97%E6%9C%BA/140338)中创建虚拟机时,需要将实体机的部分硬盘和内存容量作为虚拟机的硬盘和内存容量。每个虚拟机都有独立的[CMOS](https://baike.baidu.com/item/CMOS/428167)、硬盘和[操作系统](https://baike.baidu.com/item/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/192),可以像使用实体机一样对虚拟机进行操作。就相当于你有了一个全新的环境,你可以在里面随心所欲而原来的环境不会有多少影响。
那Java的可移植性就很好解释了,你的操作系统起初并不认识Java的代码,所你为操作系统安装了一个操作系统认识的中介JRE(JVM),而它恰好熟悉Java代码,最后Java代码告诉JRE(JVM)怎么做 > JRE(JVM)告诉操作系统怎么做,这样就可以让操作系统运行Java代码了。但你要想想,你给操作系统的JRE(JVM)中介它一定要认识(不同的操作系统需要找一个适合的版本,就好比一个南方人的中介是北方人,那他们怎么正常交流呢?),而JRE(JVM)什么时候都认识Java代码,所有只要给操作系统一个合适的JRE(JVM),就可以不用让Java代码改变就可以让操作系统认识了~
* ##### 以上为使用Java应用程序(如我的世界)用户须要安装,那么开发人员的呢?
* 开发人员使用**JDK(Java Development Kit,Java语言开发工具包)**:
> **百度百科:**
> JDK(Java Development Kit) 是 Java 语言的软件开发工具包([SDK](https://baike.baidu.com/item/SDK))。
> JDK是[Java](https://baike.baidu.com/item/Java/85979)语言的[软件开发工具包](https://baike.baidu.com/item/%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7%E5%8C%85/10418833),主要用于[移动设备](https://baike.baidu.com/item/%E7%A7%BB%E5%8A%A8%E8%AE%BE%E5%A4%87/9157757)、[嵌入式设备](https://baike.baidu.com/item/%E5%B5%8C%E5%85%A5%E5%BC%8F%E8%AE%BE%E5%A4%87/10055189)上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。
> **EOK的模组开发教程中:**
> 在开发任何基于JAVA语言的程序之前,JDK都是必不可少的。目前最新的JDK大版本为~~JDK 12~~(更新了),但由于Minecraft以及Forge的特性,我们需要使用**JDK 8**来进行开发。
这表示:如果我们要Java开发的话就必须要**安装JDK**,同时**配置**[**环境变量**](https://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html)。
>[info] [**软件开发工具包(SDK)**](https://baike.baidu.com/item/%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7%E5%8C%85/10418833?fr=aladdin#4):软件工程师用于为特定的软件包、软件框架、硬件平台、操作系统等创建应用软件的开发工具的集合。
* JDK的分类:
| 名称 | 详细描述 |
| --- | --- |
| SE(JavaSE) | standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。 |
| EE(JavaEE) | enterprise edition,企业版,使用这种JDK开发J2EE应用程序,从JDK 5.0开始,改名为Java EE。从2018年2月26日开始,J2EE改名为Jakarta EE。 |
| ME(J2ME) | micro edition,主要用于移动设备、嵌入式设备上的java应用程序,从JDK 5.0开始,改名为Java ME。 |
通常,我们使用**SE的1.8.0**版本,我也推荐大家使用这个版本。
* ### **有关Java开发的教程:**
Java作为一个被广泛使用的语言,网络上的教程也是数不胜数的,既然我的世界是使用Java编写的,我们也需要用Java编写Mod。使用Java编写Mod,你就要会Java(虽然会在文章中讲解,但多多少少要会一点),下面是我推荐大家去看的几个Java教程:
* [OI的Java速成](https://oi-wiki.org/lang/java/)(教程里的东西并不多,但如果你急需开发Mod,可以选择看这个,至少可以看懂教程)
* [动力节点的Java教程(B站)](https://www.bilibili.com/video/BV1Rx411876f?p=1)(推荐,比较全面)
* [Java 官方教程(英文)](http://docs.oracle.com/javase/tutorial/)(官方教程,但是这是国外的网站,访问慢)
* #### **minecraft:**
> **百度百科:**
> 我的世界是一款[沙盒](https://baike.baidu.com/item/%E6%B2%99%E7%9B%92/18364354)建造游戏,于2009年5月17日发行。其灵感来自《无尽矿工》等游戏,由瑞典游戏设计师[马库斯·阿列克谢·泊松](https://baike.baidu.com/item/%E9%A9%AC%E5%BA%93%E6%96%AF%C2%B7%E9%98%BF%E5%88%97%E5%85%8B%E8%B0%A2%C2%B7%E6%B3%8A%E6%9D%BE/6980057)开创,现由[Mojang](https://baike.baidu.com/item/Mojang/2253597)Studios维护,是[Xbox](https://baike.baidu.com/item/Xbox/277794)工作室的一部分。《[Minecraft](https://baike.baidu.com/item/Minecraft/4623854)》所呈现的世界并不是华丽的画面与特效,而是注重在游戏性上面。玩家可以在游戏中的三维空间里创造和破坏游戏里的方块,甚至在多人服务器与单人世界中体验不同的游戏模式,打造精妙绝伦的建筑物,创造物和艺术品。Minecraft着重于让玩家去探索、交互、并且改变一个由方块动态生成的地图。除了方块以外,环境单体还包括植物、动物与物品。游戏里的各种活动包括采集[矿石](https://baike.baidu.com/item/%E7%9F%BF%E7%9F%B3/2217247)、与敌对生物战斗、合成新的方块与收集在游戏中找到的资源的工具。游戏中的无限制模式让玩家在各种多人游戏服务器或他们的单人模式中进行创造建筑物、作品与艺术创作。其他功能包括逻辑运算与远程动作的[红石电路](https://baike.baidu.com/item/%E7%BA%A2%E7%9F%B3%E7%94%B5%E8%B7%AF/6384512)、矿车及轨道等。游戏除主世界外,还有叫作“[下界](https://baike.baidu.com/item/%E4%B8%8B%E7%95%8C)”和“[末路之地](https://baike.baidu.com/item/%E6%9C%AB%E8%B7%AF%E4%B9%8B%E5%9C%B0/8375301)”的维度。
我的世界作为Java应用程序,需要**安装JRE**(运行时环境包含JVM虚拟机)才可以运行。
* #### **如何在你的电脑上游玩我的世界:**
1. 在你的计算机上[安装JRE](https://www.java.com/zh_CN/download/)([下载安装教程](https://jingyan.baidu.com/article/456c463b38b5900a59314467.html))
2. 下载我的世界启动器:
* [中国版(网易)](https://mc.163.com/)
* [正版启动器(需要正版账号)](https://www.minecraft.net/zh-hans/)
* [其它启动器(MCBBS)](https://www.mcbbs.net/forum.php?mod=forumdisplay&fid=43&filter=typeid&typeid=908)
3. 使用教程:
* [中国版(好看视频)](https://haokan.baidu.com/v?pd=wisenatural&vid=8829616655176715102)
* [正版启动器(B站)](https://www.bilibili.com/video/BV1Qz411b78L/?spm_id_from=333.788.videocard.2);[购买账号教程](https://jingyan.baidu.com/article/22a299b58a3e649e19376a11.html)
* [HMCL(B站)](https://www.bilibili.com/video/BV1zt411C7tW/?spm_id_from=333.788.videocard.1)
* [PCL(B站)](https://www.bilibili.com/video/BV1wE411T73A?from=search&seid=5172199395622803006)
4.启动我的世界启动器并启动游戏。
* [新手攻略](https://jingyan.baidu.com/article/9faa7231ef2383473c28cb22.html)
* #### **相关网站:**
* [官方网站(国际版)](https://www.minecraft.net/zh-hans/)
* [官方网站(中国版)](https://mc.163.com/)
* [我的世界中文Wiki](https://minecraft-zh.gamepedia.com/Minecraft_Wiki)
* [我的世界中文Wiki(B站)](https://wiki.biligame.com/mc/)
* [我的世界论坛(MCBBS)](https://www.mcbbs.net/)
* [我的世界Mod百科](https://www.mcmod.cn/)
接下来,你需要认识什么是Forge哦!~
* ### **什么是Forge?**
你玩过我的世界Mod吗?Forge可以使Forge端Mod(基于Forge开发)加载到游戏里。那你知道我的世界最初是怎么玩Mod吗(是的很早就有了)?
那就是**MCP(Mod Coder Pack)**,开发者们可以通过直接修改我的世界Jar文件 *\[1\]* 以起到修改我的世界里的规则、玩法,那么它是如何诞生的呢?
> **FledgeXu的Neutrino教程中:**
> 我们得从Minecraft本身说起,首先我们得明确Minecraft是一个用Java写成的商业软件。这意味着两件事:第一,Minecraft相对容易修改;第二,代码本身是不开源而且是被混淆过的。在Minecraft历史的早期,因为在Mojang一直都没有给Minecraft提供官方API *\[2\]*,所以「Mod Coder Pack」项目诞生了(以下简称为MCP)。
但因为它是直接修改了游戏的底层,使如果他有玩两个就得重写到一起,直到**ModLoader**出现了……
它的出现使Mod的制作容易了许多,但缺陷也比较多:
> **ustc-zzzz的教程中:**
> 从2010年圣诞节前夕,Minecraft Beta版本发布开始,直到2011年年底Minecraft正式版发布,这一段时间被称为Minecraft Mod的“黄金时期”。很多著名的Mod如RailCraft,IndustrialCraft,BuildCraft等,都是这一时期开始开发的。但是,这段时期的Mod开发仍然问题重重。比如BuildCraft和IndistrialCraft就不能共存。他们更改了太多底层的东西。
这说明问题还是有的,直到Forge的出现:
> **FledgeXu的Neutrino教程中:**
> 随着时间的发展,Mod开发者们意识到,直接修改Jar文件写mod的方式太过于粗暴了,而且Mod和Mod之间的兼容性 *\[3\]* 可以说基本没有,Mod开发者们急需一种工具可以方便地开发Mod,并且能保证mod和mod之间的兼容性,于是Forge就诞生了。
**Forge其实就是一套通过修改Minecraft方式实现的第三方API,而且随着时间的发展,~~MCP现在已经死亡了~~,除了Forge这套API,Fabric也风头正盛,而Forge本身也在Minecraft 1.13版本到来之后经历了一次重写,引入了大量函数式编程的API。**
Forge简单说是一个Mod加载器,也是一个API。
>[info] **Jar文件**:在[软件](https://baike.baidu.com/item/%E8%BD%AF%E4%BB%B6)领域,**JAR文件**(Java归档,英语:**J**ava**A**rchive)是一种[软件包](https://baike.baidu.com/item/%E8%BD%AF%E4%BB%B6%E5%8C%85)[文件格式](https://baike.baidu.com/item/%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F),通常用于聚合大量的Java类文件、相关的[元数据](https://baike.baidu.com/item/%E5%85%83%E6%95%B0%E6%8D%AE)和资源(文本、图片等)文件到一个文件,以便开发Java平台[应用软件](https://baike.baidu.com/item/%E5%BA%94%E7%94%A8%E8%BD%AF%E4%BB%B6)或[库](https://baike.baidu.com/item/%E5%BA%93)。
JAR文件是一种归档文件,以[ZIP格式](https://baike.baidu.com/item/ZIP%E6%A0%BC%E5%BC%8F)构建,以.jar为[文件扩展名](https://baike.baidu.com/item/%E6%96%87%E4%BB%B6%E6%89%A9%E5%B1%95%E5%90%8D)。用户可以使用[JDK](https://baike.baidu.com/item/JDK)自带的jar命令创建或提取JAR文件。也可以使用其他zip压缩工具,不过压缩时zip文件头里的条目顺序很重要,因为Manifest文件常需放在首位。JAR文件内的文件名是Unicode文本。简单说就是打包好的Java源码。
**API** :Application Programming Interface([应用程序](https://baike.baidu.com/item/%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F)接口)是一些预先定义的[函数](https://baike.baidu.com/item/%E5%87%BD%E6%95%B0),或指软件系统不同组成部分衔接的约定。 用来提供[应用程序](https://baike.baidu.com/item/%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F)与开发人员基于某[软件](https://baike.baidu.com/item/%E8%BD%AF%E4%BB%B6)或硬件得以访问的一组[例程](https://baike.baidu.com/item/%E4%BE%8B%E7%A8%8B),而又无需访问源码,或理解内部工作[机制](https://baike.baidu.com/item/%E6%9C%BA%E5%88%B6)的细节。换句话说就是开发者可以通过一个API来使用简单的代码刚刚底层,从而不用去认识底层的工作原理。
**兼容性**:指硬件之间、[软件](https://baike.baidu.com/item/%E8%BD%AF%E4%BB%B6/12053)之间或是软硬件组合系统之间的相互协调工作的程度。兼容的概念比较广,相对于硬件来说,几种不同的电脑部件,如CPU、[主板](https://baike.baidu.com/item/%E4%B8%BB%E6%9D%BF/104636)、显示卡等,如果在工作时能够相互配合、稳定地工作,就说它们之间的兼容性比较好,反之就是兼容性不好。对于软件的兼容性,指的是指某个软件能稳定地工作在若干个[操作系统](https://baike.baidu.com/item/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/192)之中,而不会出现意外的退出等问题。
* **Forge官网:**
点击跳转 >([https://files.minecraftforge.net/](https://files.minecraftforge.net/))
* **怎么把Forge安装到游戏并装载/Mod:**
* [~~~~百度经验~~~~](https://jingyan.baidu.com/article/48b37f8d6021e71a6564885c.html)
* [~~~~好看视频(包含中国版及启动侠启动器教程)~~~~](https://haokan.baidu.com/v?vid=8856748592073642647&pd=bjh&fr=bjhauthor&type=video)
不会装forge玩个屁开发(来自白夜的吐槽)
>[warning] **注意:**
请下载对应的版本,有些可能有规定的版本,必须一致!
***
希望你是认真的看完了文档,这对之后的开发很有帮助!~ 之后的路很长,要耐心哦!
**下一章将会下载开发所需要的文件,见“0.一切的开始”子目录下的“-下载所需文件”。**