写在前面
如果你想学习Mod或插件开发,你至少要掌握一门基于jvm的语言,例如java,不,这个掌握不是写一句HelloWorld,你至少熟悉并理解以下名词:
- 基本数据类型
- 局部变量、成员变量、全局变量
- 方法与对象
- 继承、重载与重写
- 数组
- 基于http://java.io包实现的I/O操作
- 抽象类
- 捕获、抛出异常
- 接口、包与封装
当你真正理解并热爱一个语言时,你的开发之路将会无比平坦
本篇文件将会用到的知识:
- 继承与重写
- 方法
- 包
- 导入
- YAML基本格式
还是按照我的一贯风格,先讲原理。
Minecraft的mod和插件都是怎么来的?
在Minecraft刚发布的时代(指Beta版,2010年前后)就有人尝试为Minecraft写Mod,他们经过无数次的尝试,成功的在不干扰游戏运行的情况下为游戏添加了许多丰富的游戏内容,他们把这些加入的内容叫做Mod,Mod是通过在游戏加载的框架下让游戏对Mod的数据进行读取,同时重写许多方法来达到各种各样的目的,这些大佬们为后人开发留下了宝贵的经验。但与此同时,Mod整合变成了一个困难的事情,因为对于两个都在重写游戏底层代码的Mod来说,必然会发生冲突,在那时候,整合两个Mod的可能性近似于0,你知道他们是怎么整合的吗?逐行代码分析,为同一个方法提供一个相同的框架避免冲突。
但好景不长,大概在release 1.0发布时,Mojang宣布对Minecraft进行代码混淆化。这对Mod开发者来说是一个巨大的打击,混淆化使得代码难以阅读,几乎不可能用非人工的方式解读(反混淆)代码。
同年,Searge发布了第一代MCP(Minecraft Coder Pack),ProfMobius为Minecraft的源码做了反混淆。MCP团队用一种近乎暴力的反混淆方式,人工解读,来完成Minecraft代码的反混淆。
2011年1月2日,Bukkit团队成立,针对开发者hey0的Mod框架正式开始对CraftBukkit服务端进行编写,Mojang准备收购Bukkit团队,他们的一员就是我们现在熟知的DinnerBone。
2011年7月30日,MCP团队以及一些开发者们写出来FML(Forge Mod Loader),从此Mod开发有了一个统一的标准,Mod开始进入黄金时期。
最终,Bukkit开始没落,基于Bukkit Dev开发的全新服务端Spigot诞生,这就是到目前为止Minecraft最优秀的服务端的简史。
CraftBukkit/Spigot平台为开发者提供了一套完整的开发环境和API,我们开发的插件基于Bukkit的API构建,对Minecraft服务端源码进行重写
现在,我们开始第一步,构建开发环境
首先,去git-scm.com下载一个Git,并安装
去spigotmc.org的下载界面找到最新的成功构建BuildTools,下载
然后新建一个文件夹,把BuildTools.jar放进去,右键选择Git Bash Here,输入
java -jar BuildTools.jar --rev latest
lastet可以换成你需要的版本
然后等待构建
去http://jetbrains.com下载IDEA
打开IDEA,新建一个项目,点击Project Structure,进入Modules,选中Dependencies,点击"+",选择构建完成的spigot-xxx.jar,然后点击Apply
新建一个包,新建一个类,类的名字写你的插件的名字,现在往里面填入如下内容:
package xyz.shandiankulishe.BukkitDevTutor;
import org.bukkit.plugin.java.JavaPlugin;
public final class Tutor extends JavaPlugin{
@Override
public void onLoad(){
getLogger().info("onLoad");
}
@Override
public void onEnable(){
getLogger().info("onEnable");
}
@Override
public void onDisable(){
getLogger().info("onDisable");
}
}
注意,把package和class替换成你的包和类
在根目录创建plugin.yml,写入以下内容:
name: BukkitDevTutor
main: xyz.shandiankulishe.BukkitDevTutor.Tutor
version: 0.1
author: shandiankulishe
name:你的插件的名字
main:你的插件的启动类,直接写你刚刚新建的类
version:你的插件的版本
author:你的名字
现在再点击Project Structure,进入Artifacts,我们需要配置一下构建jar的规则
首先点击最左边的"+",选择JAR,再选择Empty,修改name为你要生成的插件名,最好保证它和上文的plugin.yml中的name保持一致,选择右侧的Available Elements,点击小三角,双击带compile out字样的选项,然后点击上面的"+"(注意,不是之前的那个),选择"Files",然后在弹出的文件选择框中选择你在上文中新建的"plugin.yml",最后把右上角的选择框打上对勾,点击Apply保存修改。
完整的配置是这样的:
![6d2c5e7dee2ed3a839839839d8dc59ca.png](https://i-blog.csdnimg.cn/blog_migrate/5f15871dde270f13fb20185e4015b1f1.jpeg)
点击最上面的"Build",选择"Build Artifacts",再选择Build,最后找到out目录下的生成的jar文件,这个就是你的插件构建完的样子,把它放到Spigot/CraftBukkit服务器目录下运行,如果不出意外,你应该能看见这样的提示:
![1476ba587cee548a771643db8c4e9d03.png](https://i-blog.csdnimg.cn/blog_migrate/506da673fe60b451b7e548123dba1fa7.jpeg)
恭喜你,你的第一个插件开发完成!
代码的内容我下次再讲,记得关注专栏哦~~
文章仅授权发布至Github、闪电苦力蛇的Blog、知乎专栏:关于Mineccraft的一切,转载需注明文章的Github地址和作者,否则视为侵权行为