# 0 绪论

## 本教程的由来

在1.13发布半年后，Forge迎来了1.13大版本下的第一个公开构建，发展壮大了1.13.2的Mod生态。不过，1.13.2的Forge和FML都进行了大量的技术性更新，FML彻底重写了1.3.2版本使用至今的Mod加载机制，使得Mod的移植变得困难。对于CoreMod而言，这个从根源上改变的加载机制也导致了原有的方法完全不适用于新版本了。

本人制作的[CustomSkinLoader](https://github.com/xfl03/MCCustomSkinLoader)作为一个CoreMod经过一番努力后成功移植到了1.13.2。希望可以通过这个教程，分享各版本CoreMod相关原理和编写，为读者的CoreMod开发之路抛砖引玉。

## 本教程为读者提供什么

授人以鱼不如授人以渔。

这个教程会从Java虚拟机的一些基本原理开始，来了解一个Java程序是如何被加载进内存并运行的。并从FML如何修改Minecraft来分析一个原版CoreMod是如何编写、运行的。再从FML加载CoreMod的原理来得出如何编写一个FML CoreMod。

## 阅读本教程需要什么

### Java等程序设计基础知识

本教程不适用于Java初学者，已假定读者对Java的基础知识有一定的了解。

如果是Java初学者，推荐可以先阅读《Head First Java》。

### Forge等Mod开发基础知识

本教程需要一定的基础Mod开发知识，Forge、LiteLoader甚至是ModLoader的基础开发知识都是适用的。

如果尚未掌握Mod开发基础知识，推荐可以先阅读基础的Mod开发教程，至少需要学会ForgeGradle的基本使用。

### 一定程度的源代码阅读能力

分析原理时可能需要阅读部分没有注释、JavaDoc的源代码，当然如果只是关注于如何开发而不是相关的原理，可以不具备这种能力。

## 特别鸣谢

感谢[ustc-zzzz](https://github.com/ustc-zzzz)提供的[fmltutor](https://fmltutor.ustc-zzzz.net/)，为教程的写作提供了启发。

感谢[NekoCaffeine](https://github.com/NekoCaffeine)与[3TUSK](https://github.com/3TUSK)提供的诸多帮助与支持。
