Skip to content

创建你的第一个插件

引入依赖

xml
<dependency>
    <groupId>moe.shizuki.korrent</groupId>
    <artifactId>korrent</artifactId>
    <version>0.5.0</version>
    <scope>provided</scope>
</dependency>
groovy
compileOnly 'moe.shizuki.korrent:korrent:0.5.0'
kotlin
compileOnly("moe.shizuki.korrent:korrent:0.5.0")

创建插件主类

java
import moe.shizuki.korrent.plugin.KorrentPlugin;
import org.pf4j.PluginWrapper;

public class DemoPlugin extends KorrentPlugin {
    public DemoPlugin(PluginWrapper wrapper) {
        super(wrapper);
    }
}
kotlin
import moe.shizuki.korrent.plugin.KorrentPlugin
import org.pf4j.PluginWrapper

class DemoPlugin(wrapper: PluginWrapper): KorrentPlugin(wrapper)

添加插件清单

manifest
Plugin-Class: com.your.plugin.MainClass
Plugin-Id: com.your.plugin
Plugin-Version: 0.1.0
Plugin-Requires: 0.5.0
Plugin-Description: A demo plugin
Plugin-Provider: Shizuki Natsuki
Plugin-License: GNU General Public License version 3
Plugin-Dependencies:
xml
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>

    <configuration>
        <archive>
            <manifest>
                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
            </manifest>

            <manifestEntries>
                <Plugin-Class>com.your.plugin.MainClass</Plugin-Class>
                <Plugin-Id>${project.groupId}</Plugin-Id>
                <Plugin-Version>${project.version}</Plugin-Version>
                <Plugin-Requires>0.5.0</Plugin-Requires>
                <Plugin-Description>A demo plugin</Plugin-Description>
                <Plugin-Provider>Shizuki Natsuki</Plugin-Provider>
                <Plugin-License>GNU General Public License version 3</Plugin-License>
                <Plugin-Dependencies></Plugin-Dependencies>
            </manifestEntries>
        </archive>
    </configuration>
</plugin>
groovy
jar {
    manifest {
        attributes(
            'Plugin-Class': 'com.your.plugin.MainClass',
            'Plugin-Id': project.group,
            'Plugin-Version': project.version,
            'Plugin-Requires': '0.5.0',
            'Plugin-Description': 'A demo plugin',
            'Plugin-Provider': 'Shizuki Natsuki',
            'Plugin-License': 'GNU General Public License version 3',
            'Plugin-Dependencies': ''
        )
    }
}
kotlin
tasks.jar {
    manifest {
        attributes(
            "Plugin-Class" to "com.your.plugin.MainClass",
            "Plugin-Id" to project.group,
            "Plugin-Version" to project.version,
            "Plugin-Requires" to "0.5.0",
            "Plugin-Description" to "A demo plugin",
            "Plugin-Provider" to "Shizuki Natsuki",
            "Plugin-License" to "GNU General Public License version 3",
            "Plugin-Dependencies" to ""
        )
    }
}

参数描述

参数描述
Plugin-Class插件主类
Plugin-Id插件 ID,必须为包名。示例:com.your.plugin
Plugin-Version插件版本
Plugin-Requires所需的 Korrent 版本
Plugin-Description插件描述
Plugin-Provider插件作者
Plugin-License插件许可证, 必须为 GNU General Public License version 3
Plugin-Dependencies插件依赖,请见 PF4J Docs

事件监听

作为示例, 这里通过监听 QBittorrentTagCreatedEvent 事件来使当标签创建时打印标签名。

java
import com.google.common.eventbus.Subscribe;
import moe.shizuki.korrent.bittorrent.event.QBittorrentTagCreatedEvent;
import moe.shizuki.korrent.plugin.annotation.KorrentEvent;

@KorrentEvent
public class OnEvent {
    @Subscribe
    public void onEvent(QBittorrentTagCreatedEvent event) {
        System.out.println(event.getTag());
    }
}
kotlin
import com.google.common.eventbus.Subscribe
import moe.shizuki.korrent.bittorrent.event.QBittorrentTagCreatedEvent
import moe.shizuki.korrent.plugin.annotation.KorrentEvent

@KorrentEvent
class OnEvent {
    @Subscribe
    fun onEvent(event: QBittorrentTagCreatedEvent) {
        println(event.tag)
    }
}