3.7 KiB
3.7 KiB
コンテンツの作成ガイド
このプロジェクトでは、HcuItemsプラグインを使用して新しいアイテムや機能(コンポーネント)を追加するための仕組みを提供しています。
イベント処理はEventListenerによって統一的に管理され、アイテムのPersistentDataContainer (PDC)の情報に基づいて適切なクラスに委譲されます。
アーキテクチャ概要
全てのイベント(右クリック、ダメージ、移動など)は EventListener で受信されます。
EventListener は以下の手順で処理を委譲します:
- イベントに関与したアイテムを取得します。
- アイテムのPDCを確認します。
SpecialItemID (hcu_items:id) がある場合 ->ItemRegistryからアイテム定義を取得して実行。- コンポーネント用のキー (
hcu_items:component_id) がある場合 ->ComponentRegistryからコンポーネント定義を取得して実行。
1. SpecialItem (独自のアイテム) の作成
完全に独自の挙動を持つアイテムを作成する場合に使用します。
手順
SpecialItemクラスを継承した新しいクラスを作成します。- コンストラクタで一意のIDを指定します。
buildItemメソッドを実装し、アイテムの見た目(Material, Name, Loreなど)を定義します。- 必要なイベントハンドラ(
onInteract,onPlayerMoveなど)をオーバーライドします。 App.ktのonEnableでItemRegistry.register(YourItem())を呼び出して登録します。
class MyCustomItem : SpecialItem("my_custom_item") {
override fun buildItem(tier: Tier): ItemStack {
return ItemStack(Material.DIAMOND_SWORD).apply {
// Meta設定
}
}
override fun onInteract(event: PlayerInteractEvent) {
event.player.sendMessage("Used custom item!")
}
}
2. CustomComponent (既存アイテムへの機能追加) の作成
既存のアイテムや、特定の条件を満たすアイテムに共通の機能(例:グライダー、パッシブ効果)を付与する場合に使用します。
手順
AbstractComponentを継承し、CustomComponent(またはEquippableComponent) を実装したクラスを作成します。- コンストラクタで一意のコンポーネントIDを指定します。
applyメソッドでアイテムにコンポーネントを適用するロジック(PDCへのキー登録は自動で行われますが、追加のメタデータが必要な場合は記述)を実装します。- 必要なイベントハンドラをオーバーライドします。
App.ktのonEnableでComponentRegistry.register(YourComponent(this))を呼び出して登録します。
class MyComponent(plugin: App) : AbstractComponent(plugin, "my_component") {
override fun onInteract(event: PlayerInteractEvent) {
event.player.sendMessage("Component interaction!")
}
}
イベントの仕組み
AbstractComponent は初期化時に NamespacedKey を生成し、apply 時にこのキーをアイテムのPDCに書き込みます。
EventListener はアイテムのPDCにこのキーが存在することを確認すると、あなたのコンポーネントのイベントハンドラを呼び出します。
注意事項
SpecialItemとCustomComponentは共存可能です。1つのアイテムがSpecialItemであり、かつ複数のCustomComponentを持つことができます。- イベントハンドラ内では、必要に応じて
event.isCancelledなどを適切に制御してください。