Releases: TeamKun/TeamKUNPluginManager
【v3】v3.0.0-pre8
KPMv3 pre-8
- feat: KPM の自己アップグレーダを実装しました。
- fix: キャッシュが正常にクリアされない問題を解決しました。
KPM は、再起動時に自動でキャッシュをクリアするようになります。 - fix: 自動クロール時に、プラグインメタデータの削除がうまくいかない問題を修正しました。
- fix: 再起動時に、自動クロールがされてしまう問題を修正しました。
KPM アップグレーダについて
KPM では、現在姉妹プロジェクトによるアップグレードを提供してます。
ですが、トークンや設定ファイルの移行が難しいこと等を考慮し、 KPM の自動アップグレードを開発することになりました。
このアップグレーダは、 /kpm upgrade-kpm
コマンドから利用可能です。
注意
このアップデートから、 KPM のアーティファクトの大きさが実質的に 2 倍になります。
これはアップグレーダを別プラグインとして分け、その中に KPM デーモンを内包しているためです。
【v3】v3.0.0-pre7
KPMv3 pre-7
- chore: ライセンスの年表記を、 2021 から 2022 にしました。
- feat: アンインストール時に一時的にプラグインを無効にし、あとから復旧させる機能を実装しました。
- feat: プラグイン情報コマンドを強化しました。
- feat:
RawURLResolver
(生 URL を解決するリゾルバ) を実装しました。
この機能は、以前のプレリリースでデグレードしていました。 - feat: GitHub における、複数プラグイン(バージョン)の自動選択機能を強化しました。
- feat:
InstallArgument
が、ResolveResult
を受け付けるようになりました。 - feat: プラグインアップグレード機能を実装しました。(/kpm update)
- feat: コネクションリーク・ディテクタ を実装しました。
- feat: KPM 情報ファイルの
upgrade
を考慮するようにしました。 - feat: トークン設定時やサーバ起動時に、そのトークンが有効かどうかチェックするようにしました。
- feat: v 接頭辞が許可されるようになりました。
- refactor:
NotfoundResolver
=>FallbackResolver
- fix: onEnable() の実行中のエラーをハンドリングしました。
追加されたフック
RecipesUnregisteringHook
レシピをサーバから削除するときに呼び出されます。
追加された KPM 情報ファイル エントリ
recipes
プラグインが登録したレシピを識別するために使用します。
【v3】v3.0.0-pre6
KPMv3 pre-6 [BREAKING CHANGE]
- feat: Token生成用のインストーラを作成しました。
- feat: KPM情報ファイルのベースを作成しました。
- feat: KPMフックのベースを作成しました。
- fix: 新インストーラにおいて、 プライベートリポジトリで正しく動作しなかった問題を修正しました。
- fix: 新インストーラにおいて、インストールが例外で終了したときにリソースが開放されない問題を修正しました。
- refactor: フロントエンド, バックエンドで分離し、マルチモジュール化しました。
- refactor: すべてのメンバ変数参照に
this.
修飾子を付加しました。 - refactor !: ベースパッケージ名を変更しました。
KPM情報ファイル
KPM情報ファイルは、プラグインのKPM用付加情報を表すファイルです。
現在は以下の機能を実装しています:
- 対応してるKPMのバージョン指定
KPMフック(後述)のバージョン等の互換性維持のための必須パラメタです。 - KPMフックを受け取るクラスの指定
作成の理由
KPMで多々あった課題として、プラグインの依存関係をうまく解決できないという問題がありました。
以前までは、エイリアス機能を作成し、特定の依存関係の名前に対して別のURLを外部から指定することで解決していました。
ですが、この方法ではいずれエイリアスのDBがパンクしたり、より柔軟な対応が出来ません。
そのためプラグイン自体に依存関係解決の指示を埋め込むことが予定されました。
使用法
kpm.yml
というファイルを作成します。
Mavenの場合:src/main/resources/kpm.yml
に作成してください。
その他:ビルド成果物のディレクトリ構成がプラグイン名.jar/kpm.yml
となるように作成してください。- KPM情報ファイルをスキームの通りに記述します。
- プラグインを配置してサーバ再起動するか、KPMでインストールします。
KPMフック
KPMを用いたプラグインの操作時に、KPMがオプションで任意コードを実行する機能です。
現在は以下の機能を実装しています:
- KPMを用いたインストール完了時のフック
- KPMを用いたアンインストール前のフック
- KPMを用いたアンインストール完了時のフック
使用法
- KPMフックを受け取る受信クラスを作成します。
- 受信クラスのアクセスレベルは
public
である必要があります(MUSTST)。 - 受信クラスはKPMHookRecipientを継承する必要があります(MUST)。
- 受信クラスには
public
で、単一のKPMDaemonのみを受け取るコンストラクタが必要です(MUST)。
例:
package net.kunmc.lab.exampleplugin;
import net.kunmc.lab.kpm.KPMDaemon;
import net.kunmc.lab.kpm.hook.KPMHookRecipient;
public TestHookRecipient extends KPMHookRecipient {
public TestHookRecipient(KPMDaemon daemon) {
super(daemon);
}
}
- フックを受け取る受信メソッドを作成します。
- 受信メソッドのアクセスレベルは
public
である必要があります(MUST)。 - 受信メソッドには@HookListenerアノテーションが必要です(MUST)。
- 受信メソッドは、KPMHookの派生クラスの引数のみを受け取るシグニチャが必要です(MUST)。
PluginInstalledHook
を受け取る例:
package net.kunmc.lab.exampleplugin;
import net.kunmc.lab.kpm.KPMDaemon;
import net.kunmc.lab.kpm.hook.KPMHookRecipient;
import net.kunmc.lab.kpm.hook.hooks.PluginInstalledHook;
public TestHookRecipient extends KPMHookRecipient {
public TestHookRecipient(KPMDaemon daemon) {
super(daemon);
}
@HookListener
public void onInstall(PluginInstalledHook hook)
{
System.out.println("Plugin has installed by KPM!");
System.out.println("Query: " + hook.getResolveQuery());
System.out.println("Operator: " + hook.getOperator());
}
}
- KPM情報ファイルのhooksを記述します。
例:
hooks: ["net.kunmc.lab.exampleplugin.TestHookRecipient"]
- プラグインを配置してサーバ再起動するか、KPMでインストールします。
フロントエンドとバックエンドの分離&マルチモジュール化
フロントエンドとバックエンドのコードを完全に分離しました。
これを行うに当たり、以下の機能が実装されました:
- KPMシグナル
インストーラはKPMシグナルを用いてフロントエンドと通信します。 - KPMのデーモン化
KPMのコアをデーモンとして集約することで、KPM API(予定)のアクセスがより簡単になります。
また、フロントエンドとバックエンドが分離されたことにより、フロントエンドのJavadocは完全に削除されました。
BREAKING CHANGE
- KPMのベースのパッケージを
net.kunmc.lab.teamkunpluginmanager
からnet.kunmc.lab.kpm
に変更しました。
これは、インストーラの複雑化とパッケージの肥大化による影響を回避するために行いました。
【v3】v3.0.0-pre5
KPMv3 pre-5
Transaction
を追加し、SQL関係のコードの読みやすさが向上しました。- エイリアス機能を書き直し、強化しました。
- 自動削除機能を書き直しし、新しいインストーラのモデルに合わせました。
- 不要データ削除機能を書き直しし、新しいインストーラのモデルに合わせました。
- 旧Installerを完全に削除しました。
- 古いセッションコントロールシステムを削除しました。
新しいエイリアス
- エイリアスの管理がより堅牢になりました。
- エイリアスのデータベースに、エイリアスのソースに含め、各エイリアスに紐づけしました。
- エイリアスのソースを以下の3つのタイプに分けました:
WEB_SERVER
: Webサーバから取得する、自動アップデート可能なソースです。LOCAL_DEFINITIONS
: ローカルに存在する、自動アップデート不可能なソースです。 これの操作はまだ実装されていません。DYNAMIC
: プラグインが動的に追加するエイリアスです。
【v3】v3.0.0-pre4
KPMv3 pre-4
- 以前の依存関係ツリーを削除しました.
- 新たな依存関係ツリーのロジックを導入し, プラグインにメタデータを付与するようにしました.
- これに伴い,
/kpm info
コマンドが強化されました.
プラグインメタデータ(メタ情報)
- すべてのプラグインに以下の情報を付与し, SQLiteで管理します:
- インストール日時
- インストール者
- 解決クエリ
- 依存関係かどうか
インストール者
- インストールが何によって行われたかを表します.
- 値は以下の列挙値です:
SERVER_ADMIN
: サーバの管理者によってインストールされたKPM_DEPENDENCY_RESOLVER
: 依存関係解決時にKPMによってインストールされたKPM_PLUGIN_UPDATER
: プラグインのアップデートでKPMによってインストールされた(未実装)UNKNOWN
: 未知の方法でインストールされた(これには, 他のプラグインマネージャによってインストールされたプラグインや, オフライン時にjarを手動で追加してインストールした方法も含まれます)
関連Issue
Full Changelog: v3.0.0-pre3...v3.0.0-pre4
【V3】KPMv3 pre-3
KPMv3 pre-3
- GitHubのトークンの保存を暗号化しました(AES).
=>権限を見直し, セキュリティを高めました. - Register コマンド関連のデグレードを修正しました.
関連Issue
Full Changelog: v3.0.0-pre2...v3.0.0-pre3
【V3】KPMv3 pre-2
v3.0.0-pre2
Installer.java
を書き直し, シグナルシステムを導入しました。
シグナルシステム
- フロントエンドとバックエンドとを分離するためのシステムです。
- バックエンド(インストーラ)からはシグナルのみが送信され, フロントエンドでシグナルを処理します.
Full Changelog: v3.0.0-pre1...v3.0.0-pre2
【V3】KPMv3 pre-1
v3.0.0-pre1
KPMv3
- KPMのロジックを書き直したものを, KPMv3として公開することになりました。
- 機能実装/削除予定, メモ等は次のプロジェクトを参照してください:v3リリースに向けて
- これについてのwikiはこちらです。
機能追加
- 新しいプラグインリゾルバを実装しました。
- カスタマイズ性に優れた階層式リゾルバを実装しました。
- この機能はKPMv3リリース時に API として公開される予定です。
- 新しいプラグイン解決のクエリを実装しました。
- 詳しくはこちら。
機能削除
- インポート/エクスポート 機能を削除しました。
- この機能は, v2の後半から削除が予定されていましたが、今回 v3 という節目で削除されることになりました。
- 詳しくはこちら。
Full Changelog: v2.8.3...v3.0.0-pre1
【修正】細かなバグを修正しました。
v2.8.3
概要
- 以下の 2 つの細かなバグを修正しました。
バグ
- プラグインのダウンロードに失敗すると、 0 バイトの空ファイルが残るバグ
- Private リポジトリのプラグインがダウンロードできないバグ
関連Issue
【対応】Paper環境の最新に対応しました。
v2.8.2
概要
- Paper環境の最新バージョンにて、AsyncPlayerChatのNoSuchMethodExceptionを解消しました。