hcu-items/docs/creating_new_content.md

69 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# コンテンツの作成ガイド
このプロジェクトでは、HcuItemsプラグインを使用して新しいアイテムや機能コンポーネントを追加するための仕組みを提供しています。
イベント処理は`EventListener`によって統一的に管理され、アイテムのPersistentDataContainer (PDC)の情報に基づいて適切なクラスに委譲されます。
## アーキテクチャ概要
全てのイベント(右クリック、ダメージ、移動など)は `EventListener` で受信されます。
`EventListener` は以下の手順で処理を委譲します:
1. イベントに関与したアイテムを取得します。
2. アイテムのPDCを確認します。
- `AbstractItem` ID (`hcu_items:id`) がある場合 -> `ItemRegistry` からアイテム定義を取得して実行。
- コンポーネント用のキー (`hcu_items:component_id`) がある場合 -> `ComponentRegistry` からコンポーネント定義を取得して実行。
## 1. AbstractItem (独自のアイテム) の作成
完全に独自の挙動を持つアイテムを作成する場合に使用します。
### 手順
1. `AbstractItem` クラスを継承した新しいクラスを作成します。
2. コンストラクタで一意のIDを指定します。
3. `buildItem` メソッドを実装し、アイテムの見た目Material, Name, Loreなどを定義します。
4. 必要なイベントハンドラ(`onInteract`, `onPlayerMove` など)をオーバーライドします。
5. `App.kt``onEnable``ItemRegistry.register(YourItem())` を呼び出して登録します。
```kotlin
class MyCustomItem : AbstractItem("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にこのキーが存在することを確認すると、あなたのコンポーネントのイベントハンドラを呼び出します。
## 注意事項
- `AbstractItem``CustomComponent` は共存可能です。1つのアイテムが `AbstractItem` であり、かつ複数の `CustomComponent` を持つことができます。
- イベントハンドラ内では、必要に応じて `event.isCancelled` などを適切に制御してください。