本帖最后由 Gearing 于 2019-1-21 17:22 编辑 
写在前面:为什么我们要进行Sponge插件开发?
Sponge本身实际上我们也可以理解为一种高版本的Forge Mod,他为插件开发者提供了各式各样对服务端的API的整合。我们可能以前熟悉Spigot、MCPC+、Kcauldron等等服务端,在使用过Sponge服务端过后,我们不难发现,他的核心是以mod形式安装在forge服务端上的。Sponge以这种形式弱化了服务器插件与MOD的区别。那么,我们为什么要学习Sponge插件开发?我们知道,高版本服务端提供商现在可选择的已经不多了,而高版本的MOD插件服务端就我已知的来说,就Sponge做的比较好,而高版本带来的好处就是有更好的优化,去除了那些低版本的游戏BUG,并且添加了新的游戏特性,这也是为什么我们要进行Sponge插件开发,除此之外,完成一个Sponge插件的开发实际上是非常简单的。
写在前面:为什么我们要进行Sponge插件开发?
Sponge本身实际上我们也可以理解为一种高版本的Forge Mod,他为插件开发者提供了各式各样对服务端的API的整合。我们可能以前熟悉Spigot、MCPC+、Kcauldron等等服务端,在使用过Sponge服务端过后,我们不难发现,他的核心是以mod形式安装在forge服务端上的。Sponge以这种形式弱化了服务器插件与MOD的区别。那么,我们为什么要学习Sponge插件开发?我们知道,高版本服务端提供商现在可选择的已经不多了,而高版本的MOD插件服务端就我已知的来说,就Sponge做的比较好,而高版本带来的好处就是有更好的优化,去除了那些低版本的游戏BUG,并且添加了新的游戏特性,这也是为什么我们要进行Sponge插件开发,除此之外,完成一个Sponge插件的开发实际上是非常简单的。
对于JDK的安装:
相信能阅读这篇文章的玩家们已经有了很多的经验,这里就不再赘述,如果您还不会JDK安装以及环境变量配置,请百度 JDK安装 以及 JDK环境变量配置。
对于Intellij idea安装:
     
我们为什么不选择Eclipse而选择了Idea?事实上idea在用户体验上做得比Eclipse好很多,设计理念也比Eclipse领先很多,大部分公司使用Eclipse而非idea的原因是因为高昂的使用版权费用,实际上,在私人开发中,我们更加倾向于使用Idea而非Eclipse。下面提供idea的下载地址:
http://www.jetbrains.com/idea/
idea是提供学生版本的,你可以在这里申请: https://www.jetbrains.com/student/ 他要求使用教育邮箱进行验证,一旦验证成功后,你将会获得IDEA付费版的一年使用期限,在过期后,你也可以继续使用该教育邮箱进行续期。当然,在中国国内,我们有其他办法继续使用它的正版。访问这里获得正版解决方案:http://idea.lanyus.com/ 但个人来说,我建议有经济能力的玩家们可以购买他们的正版以示支持,实际上idea的正版也是非常便宜的。
在拿到Idea正版后,我们开始正式进行工程。
一般来说,我们喜欢用Gradle或者Maven进行项目管理(您可以点击链接获取更多有关Gradle和Maven的信息),他们能够极大的减小我们管理项目的难度,考虑到此次教程的简洁性,我们使用Maven进行项目管理。如果您不会Maven,请前往慕课网等等平台进行一个基础的入门学习,他们有非常多的免费课程。
像是这样:
随后,idea会提示我们输入有关项目的相信信息
        
第一行的数据是填写“组名”,我们通常把我们的包名填写进去,下面是插件名,我们通常把我们这个项目的名字填写进去。第三行是版本,我们不改变。所以,我给出一个示例填写:
        
点击<Next>,idea会提示你选择存放项目的位置,上面的是指项目的文件夹名称,下面的那一行是存放目录,这里就不再赘述。在按照你的习惯填写完成后,我们点击Finish。随后Idea会进行项目自动构建,我们在等待idea完成构建后再进行操作。
https://www.spongepowered.org/
鼠标悬停在Sponge Logo上,点击<Docs>,你就开始你的正式开发了,我们开始按照Sponge的官方文档来进行开发。
我们看到这里:
https://docs.spongepowered.org/stable/zh-CN/plugin/project/maven.html
Sponge给出了Maven项目的配置方法:
设置 Maven
现在我们开始更改项目目录下的 pom.xml 文件,你可以直接在你的 pom.xml 的 <project> 中加入下面的内容以添加 SpongeAPI 的依赖:
这是我按照要求更改完成过后,pom.xml文件应该像是这样:
此时,右下角idea会弹出小窗问你是否要加载改变,我们点击自动应用改变(右边的选项),等待Idea对项目进行构建。
至此,你已经完成了Sponge开发所需要的全部准备,让我开始正式编写Hello,world!插件。
我们在/src/main/java文件夹中新建Main.java
随后查看开发文档:https://docs.spongepowered.org/stable/zh-CN/plugin/plugin-class.html
我们按照开发文档进行编写:
我编写完后是这样:
有的人可能会问了,为什么Sponge插件没有plugin.xml这类东西,实际上,Sponge引入了Annotation机制,@Plugin... 一行告诉了编译器以及解释器,这一行是插件入口,请从这一行开始加载。随后,我们添加一个监听器:       按照官方代码示例完成后,我的代码像是这样:
         至于上面的@Inject 和 @Listener, @Inject属于一种依赖注入机制,后面我们会专门讲解,这里先这样写着就行了。@Listener属于一种由Sponge定义的监听器注解,我们后面也会讲到,现在先这样写着。随后我们开始编译项目:在idea右侧选择<Maven Projects>
       
打开他,我们双击Lifecycle>package:
     
idea将会自动打包,等待idea打包完成。(这里我们先简单实用package 暂时不用更加复杂的打包插件)随后我们在Target/目录下可以找到生成的插件
     
我们在文件资源管理器中将他拷贝到服务端mods文件夹中,然后运行Sponge服务端。
     
可以看到控制台输出了Hello,world!,自此,你的第一个插件编写完成。
更多教程会在今后发布,敬请期待。
写在前面:为什么我们要进行Sponge插件开发?
Sponge本身实际上我们也可以理解为一种高版本的Forge Mod,他为插件开发者提供了各式各样对服务端的API的整合。我们可能以前熟悉Spigot、MCPC+、Kcauldron等等服务端,在使用过Sponge服务端过后,我们不难发现,他的核心是以mod形式安装在forge服务端上的。Sponge以这种形式弱化了服务器插件与MOD的区别。那么,我们为什么要学习Sponge插件开发?我们知道,高版本服务端提供商现在可选择的已经不多了,而高版本的MOD插件服务端就我已知的来说,就Sponge做的比较好,而高版本带来的好处就是有更好的优化,去除了那些低版本的游戏BUG,并且添加了新的游戏特性,这也是为什么我们要进行Sponge插件开发,除此之外,完成一个Sponge插件的开发实际上是非常简单的。
2021.12 数据,可能有更多内容
写在前面:为什么我们要进行Sponge插件开发?
Sponge本身实际上我们也可以理解为一种高版本的Forge Mod,他为插件开发者提供了各式各样对服务端的API的整合。我们可能以前熟悉Spigot、MCPC+、Kcauldron等等服务端,在使用过Sponge服务端过后,我们不难发现,他的核心是以mod形式安装在forge服务端上的。Sponge以这种形式弱化了服务器插件与MOD的区别。那么,我们为什么要学习Sponge插件开发?我们知道,高版本服务端提供商现在可选择的已经不多了,而高版本的MOD插件服务端就我已知的来说,就Sponge做的比较好,而高版本带来的好处就是有更好的优化,去除了那些低版本的游戏BUG,并且添加了新的游戏特性,这也是为什么我们要进行Sponge插件开发,除此之外,完成一个Sponge插件的开发实际上是非常简单的。
1、安装JKD、Intellij Idea
对于JDK的安装:
相信能阅读这篇文章的玩家们已经有了很多的经验,这里就不再赘述,如果您还不会JDK安装以及环境变量配置,请百度 JDK安装 以及 JDK环境变量配置。
对于Intellij idea安装:
IDEA 全称 IntelliJ IDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。它的旗舰版本还支持HTML,CSS,PHP,MySQL,Python等。免费版只支持Java等少数语言。(摘自百度百科)
我们为什么不选择Eclipse而选择了Idea?事实上idea在用户体验上做得比Eclipse好很多,设计理念也比Eclipse领先很多,大部分公司使用Eclipse而非idea的原因是因为高昂的使用版权费用,实际上,在私人开发中,我们更加倾向于使用Idea而非Eclipse。下面提供idea的下载地址:
http://www.jetbrains.com/idea/
idea是提供学生版本的,你可以在这里申请: https://www.jetbrains.com/student/ 他要求使用教育邮箱进行验证,一旦验证成功后,你将会获得IDEA付费版的一年使用期限,在过期后,你也可以继续使用该教育邮箱进行续期。当然,在中国国内,我们有其他办法继续使用它的正版。访问这里获得正版解决方案:http://idea.lanyus.com/ 但个人来说,我建议有经济能力的玩家们可以购买他们的正版以示支持,实际上idea的正版也是非常便宜的。
在拿到Idea正版后,我们开始正式进行工程。
2、Sponge开发环境搭建
一般来说,我们喜欢用Gradle或者Maven进行项目管理(您可以点击链接获取更多有关Gradle和Maven的信息),他们能够极大的减小我们管理项目的难度,考虑到此次教程的简洁性,我们使用Maven进行项目管理。如果您不会Maven,请前往慕课网等等平台进行一个基础的入门学习,他们有非常多的免费课程。
- 创建Idea Maven工程
 
像是这样:

随后,idea会提示我们输入有关项目的相信信息

第一行的数据是填写“组名”,我们通常把我们的包名填写进去,下面是插件名,我们通常把我们这个项目的名字填写进去。第三行是版本,我们不改变。所以,我给出一个示例填写:

点击<Next>,idea会提示你选择存放项目的位置,上面的是指项目的文件夹名称,下面的那一行是存放目录,这里就不再赘述。在按照你的习惯填写完成后,我们点击Finish。随后Idea会进行项目自动构建,我们在等待idea完成构建后再进行操作。
- 查阅Sponge开发文档
 
https://www.spongepowered.org/
鼠标悬停在Sponge Logo上,点击<Docs>,你就开始你的正式开发了,我们开始按照Sponge的官方文档来进行开发。
我们看到这里:
https://docs.spongepowered.org/stable/zh-CN/plugin/project/maven.html
Sponge给出了Maven项目的配置方法:
设置 Maven
现在我们开始更改项目目录下的 pom.xml 文件,你可以直接在你的 pom.xml 的 <project> 中加入下面的内容以添加 SpongeAPI 的依赖:
代码:
- <repositories>
 
-     <repository>
 
-    <id>sponge-repo</id>
 
-    <name>Sponge Maven Repository</name>
 
-    <url>https://repo.spongepowered.org/maven</url>
 
-     </repository>
 
- </repositories>
 
 
- <dependencies>
 
-     <dependency>
 
-    <groupId>org.spongepowered</groupId>
 
-    <artifactId>spongeapi</artifactId>
 
-    <version>7.1.0</version>
 
-    <type>jar</type>
 
-    <scope>provided</scope>
 
-     </dependency>
 
- </dependencies>
这是Sponge官方给的代码参照(完整):
代码:
- <?xml version="1.0" encoding="UTF-8"?>
 
- <project xmlns="http://maven.apache.org/POM/4.0.0"
 
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
-     <modelVersion>4.0.0</modelVersion>
 
 
-     <!-- Don't forget to change all necessary values to your own! -->
 
-     <groupId>com.example</groupId>
 
-     <artifactId>exampleid</artifactId>
 
 
-     <name>ExamplePluginName</name>
 
-     <version>1.0.0</version>
 
 
-     <url>http://example.com/</url>
 
-     <properties>
 
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 
-     </properties>
 
-     <packaging>jar</packaging>
 
 
-     <repositories>
 
-    <repository>
 
-       <id>sponge-repo</id>
 
-       <url>https://repo.spongepowered.org/maven</url>
 
-    </repository>
 
-     </repositories>
 
 
-     <dependencies>
 
-    <dependency>
 
-       <groupId>org.spongepowered</groupId>
 
-       <artifactId>spongeapi</artifactId>
 
-       <version>7.1.0</version>
 
-       <type>jar</type>
 
-       <optional>true</optional>
 
-       <scope>provided</scope>
 
-    </dependency>
 
-     </dependencies>
 
 
-     <build>
 
-    <finalName>ExamplePluginName</finalName>
 
-    <defaultGoal>clean install</defaultGoal>
 
-    <resources>
 
-       <resource>
 
-         <targetPath>.</targetPath>
 
-         <directory>${basedir}/</directory>
 
-       </resource>
 
-    </resources>
 
-    <plugins>
 
-       <plugin>
 
-         <groupId>org.apache.maven.plugins</groupId>
 
-         <artifactId>maven-clean-plugin</artifactId>
 
-         <version>3.1.0</version>
 
-       </plugin>
 
-       <plugin>
 
-         <groupId>org.apache.maven.plugins</groupId>
 
-         <artifactId>maven-jar-plugin</artifactId>
 
-         <version>3.0.2</version>
 
-       </plugin>
 
-       <plugin>
 
-         <groupId>org.apache.maven.plugins</groupId>
 
-         <artifactId>maven-compiler-plugin</artifactId>
 
-         <version>3.7.0</version>
 
-         <configuration>
 
-        <source>1.8</source>
 
-        <target>1.8</target>
 
-         </configuration>
 
-       </plugin>
 
-    </plugins>
 
-     </build>
 
- </project>
代码:
- <?xml version="1.0" encoding="UTF-8"?>
 
- <project xmlns="http://maven.apache.org/POM/4.0.0"
 
-      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 
-      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
-     <modelVersion>4.0.0</modelVersion>
 
 
-     <groupId>info.niocho.www</groupId>
 
-     <artifactId>helloworld</artifactId>
 
-     <version>1.0-SNAPSHOT</version>
 
-     <repositories>
 
-    <repository>
 
-       <id>sponge-repo</id>
 
-       <name>Sponge Maven Repository</name>
 
-       <url>https://repo.spongepowered.org/maven</url>
 
-    </repository>
 
-     </repositories>
 
 
-     <dependencies>
 
-    <dependency>
 
-       <groupId>org.spongepowered</groupId>
 
-       <artifactId>spongeapi</artifactId>
 
-       <version>7.1.0</version>
 
-       <type>jar</type>
 
-       <scope>provided</scope>
 
-    </dependency>
 
-     </dependencies>
 
 
-     <build>
 
-    <finalName>ExamplePluginName</finalName>
 
-    <defaultGoal>clean install</defaultGoal>
 
-    <resources>
 
-       <resource>
 
-         <targetPath>.</targetPath>
 
-         <directory>${basedir}/</directory>
 
-       </resource>
 
-    </resources>
 
-    <plugins>
 
-       <plugin>
 
-         <groupId>org.apache.maven.plugins</groupId>
 
-         <artifactId>maven-clean-plugin</artifactId>
 
-         <version>3.1.0</version>
 
-       </plugin>
 
-       <plugin>
 
-         <groupId>org.apache.maven.plugins</groupId>
 
-         <artifactId>maven-jar-plugin</artifactId>
 
-         <version>3.0.2</version>
 
-       </plugin>
 
-       <plugin>
 
-         <groupId>org.apache.maven.plugins</groupId>
 
-         <artifactId>maven-compiler-plugin</artifactId>
 
-         <version>3.7.0</version>
 
-         <configuration>
 
-        <source>1.8</source>
 
-        <target>1.8</target>
 
-         </configuration>
 
-       </plugin>
 
-    </plugins>
 
-     </build>
 
- </project>
此时,右下角idea会弹出小窗问你是否要加载改变,我们点击自动应用改变(右边的选项),等待Idea对项目进行构建。
至此,你已经完成了Sponge开发所需要的全部准备,让我开始正式编写Hello,world!插件。
3、我的第一个Sponge插件
我们在/src/main/java文件夹中新建Main.java
随后查看开发文档:https://docs.spongepowered.org/stable/zh-CN/plugin/plugin-class.html
我们按照开发文档进行编写:
代码:
- package io.github.username.project;
 
 
- import org.spongepowered.api.plugin.Plugin;
 
 
- @Plugin(id = "exampleplugin", name = "Example Plugin", version = "1.0", description = "Example")
 
- public class ExamplePlugin {
 
 
- }
我编写完后是这样:
代码:
- import org.spongepowered.api.plugin.Plugin;
 
 
- @Plugin(id = "helloworld", name="A Hello World Plugin", version="1.0",description = "A Simple Plugin To Say Hello World!")
 
- public class Main {
 
 
- }
 
代码:
- import org.spongepowered.api.plugin.Plugin;
 
- import org.spongepowered.api.event.Listener;
 
- import org.spongepowered.api.event.game.state.GameStartedServerEvent;
 
 
- // Imports for logger
 
- import com.google.inject.Inject;
 
- import org.slf4j.Logger;
 
 
- @Plugin(id = "exampleplugin", name = "Example Plugin", version = "1.0", description = "Example")
 
- public class ExamplePlugin {
 
 
-     @Inject
 
-     private Logger logger;
 
 
-     @Listener
 
-     public void onServerStart(GameStartedServerEvent event) {
 
-    logger.info("Successfully running ExamplePlugin!!!");
 
-     }
 
 
- }
代码:
- import com.google.inject.Inject;
 
- import org.slf4j.Logger;
 
- import org.spongepowered.api.event.Listener;
 
- import org.spongepowered.api.event.game.state.GameStartedServerEvent;
 
- import org.spongepowered.api.plugin.Plugin;
 
 
- @Plugin(id = "helloworld", name="A Hello World Plugin", version="1.0",description = "A Simple Plugin To Say Hello World!")
 
- public class Main {
 
-     @Inject
 
-     private Logger logger;
 
 
-     @Listener
 
-     public void onServerStart(GameStartedServerEvent event){
 
-    for(int mainLoop = 0;mainLoop < 5;mainLoop++){
 
-       logger.info("Hello, world!");
 
-    }
 
-     }
 
- }

打开他,我们双击Lifecycle>package:

idea将会自动打包,等待idea打包完成。(这里我们先简单实用package 暂时不用更加复杂的打包插件)随后我们在Target/目录下可以找到生成的插件

我们在文件资源管理器中将他拷贝到服务端mods文件夹中,然后运行Sponge服务端。

可以看到控制台输出了Hello,world!,自此,你的第一个插件编写完成。
更多教程会在今后发布,敬请期待。
问题反馈请留言到:[email protected]
一些常用链接:海绵官网:https://www.spongepowered.org/
海绵文档:https://docs.spongepowered.org/
海绵源代码:https://github.com/SpongePowered
海绵插件库:https://forums.spongepowered.org/c/plugins/plugin-releases
GitHub:https://github.com/
GitWin: https://gitforwindows.org/
下载Maven:http://maven.apache.org/download.cgi
下载Idea:https://www.jetbrains.com/idea/
Idea注册码:http://idea.lanyus.com/
一些常用链接:海绵官网:https://www.spongepowered.org/
海绵文档:https://docs.spongepowered.org/
海绵源代码:https://github.com/SpongePowered
海绵插件库:https://forums.spongepowered.org/c/plugins/plugin-releases
GitHub:https://github.com/
GitWin: https://gitforwindows.org/
下载Maven:http://maven.apache.org/download.cgi
下载Idea:https://www.jetbrains.com/idea/
Idea注册码:http://idea.lanyus.com/
如果条件允许,最好用 ./gradlew build 构建
liach 发表于 2019-1-21 21:56
如果条件允许,最好用 ./gradlew build 构建
Gradle和Maven功能上区别并不大,只是Gradle的部分功能更加全面些,实际上gradle本身也是基于Maven开发的,没有必要一定要用Gradle,加上中国这边gradle构建的成功率低,我更加推荐使用Maven直接进行项目管理。
Gearing 发表于 2019-1-22 11:40
Gradle和Maven功能上区别并不大,只是Gradle的部分功能更加全面些,实际上gradle本身也是基于Maven开发的 ...
???
请对gradle的了解更多后再说,这两个区别大着
gradle比maven好的不是一点两点,官方对gradle也是更欢迎的,
并且使用gradle对后期你想写底层,写不基于spongeapi的东西,是有更好的一个过渡的,改改脚本就行。
教程可以
支持,希望一直更新下去
754503921 发表于 2019-1-22 12:17
???
请对gradle的了解更多后再说,这两个区别大着
gradle比maven好的不是一点两点,官方对gradle也是 ...
恩,谢谢支持
1850343382 发表于 2019-1-22 13:30
支持,希望一直更新下去
恩,谢谢~
gradle构建失败只是下载问题,maven同样无法避免。gradle也有离线模式避免下载。同时sponge提供一些官方gradle插件,比如spongegradle和event impl gen,帮助生成mcmod.info和方便实现事件。
liach 发表于 2019-1-22 17:44
gradle构建失败只是下载问题,maven同样无法避免。gradle也有离线模式避免下载。同时sponge提供一些官方gra ...
恩,我去看了下,谢谢。
支持,希望一直更新下去
支持支持
支持支持支持
感谢楼主,希望一直更新下去qwq
wow,教程很好哦~
(催更)
(催更)