69 lines
3.7 KiB
Markdown
69 lines
3.7 KiB
Markdown
# コンテンツの作成ガイド
|
||
|
||
このプロジェクトでは、HcuItemsプラグインを使用して新しいアイテムや機能(コンポーネント)を追加するための仕組みを提供しています。
|
||
イベント処理は`EventListener`によって統一的に管理され、アイテムのPersistentDataContainer (PDC)の情報に基づいて適切なクラスに委譲されます。
|
||
|
||
## アーキテクチャ概要
|
||
|
||
全てのイベント(右クリック、ダメージ、移動など)は `EventListener` で受信されます。
|
||
`EventListener` は以下の手順で処理を委譲します:
|
||
|
||
1. イベントに関与したアイテムを取得します。
|
||
2. アイテムのPDCを確認します。
|
||
- `SpecialItem` ID (`hcu_items:id`) がある場合 -> `ItemRegistry` からアイテム定義を取得して実行。
|
||
- コンポーネント用のキー (`hcu_items:component_id`) がある場合 -> `ComponentRegistry` からコンポーネント定義を取得して実行。
|
||
|
||
## 1. SpecialItem (独自のアイテム) の作成
|
||
|
||
完全に独自の挙動を持つアイテムを作成する場合に使用します。
|
||
|
||
### 手順
|
||
|
||
1. `SpecialItem` クラスを継承した新しいクラスを作成します。
|
||
2. コンストラクタで一意のIDを指定します。
|
||
3. `buildItem` メソッドを実装し、アイテムの見た目(Material, Name, Loreなど)を定義します。
|
||
4. 必要なイベントハンドラ(`onInteract`, `onPlayerMove` など)をオーバーライドします。
|
||
5. `App.kt` の `onEnable` で `ItemRegistry.register(YourItem())` を呼び出して登録します。
|
||
|
||
```kotlin
|
||
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 (既存アイテムへの機能追加) の作成
|
||
|
||
既存のアイテムや、特定の条件を満たすアイテムに共通の機能(例:グライダー、パッシブ効果)を付与する場合に使用します。
|
||
|
||
### 手順
|
||
|
||
1. `AbstractComponent` を継承し、`CustomComponent` (または `EquippableComponent`) を実装したクラスを作成します。
|
||
2. コンストラクタで一意のコンポーネントIDを指定します。
|
||
3. `apply` メソッドでアイテムにコンポーネントを適用するロジック(PDCへのキー登録は自動で行われますが、追加のメタデータが必要な場合は記述)を実装します。
|
||
4. 必要なイベントハンドラをオーバーライドします。
|
||
5. `App.kt` の `onEnable` で `ComponentRegistry.register(YourComponent(this))` を呼び出して登録します。
|
||
|
||
```kotlin
|
||
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` などを適切に制御してください。
|