提供: Minecraft Modding Wiki
移動先: 案内検索
(ページの作成:「==はじめに== <p>  Minecraft Forge Universalから新しいEventシステムが組み込まれた. アノテーションと引数により実行されるメソッ...」)
 
(取り敢えず体裁だけ。)
1行目: 1行目:
 
==はじめに==
 
==はじめに==
<p>
+
Minecraft Forge Universalから新しいEventシステムが組み込まれた。ある処理にこちらの用意した処理を割り込ませる機能であり、介入しづらいバニラの処理にも介入できるようになる。<br>
 Minecraft Forge Universalから新しいEventシステムが組み込まれた. アノテーションと引数により実行されるメソッドを動的に割り込ませる機能であり, 割り込みタイミングによってはItemやEntity側でやるよりもよりスマートに(より保守しやすい)コードで実装できるのが特徴である.
+
BukkitPluginのEventシステムやFMLの@ModなどもこのEventシステムと同じ概念である。<br>
</p>
+
詳しく知りたい場合は、DI(依存性の注入)やAOP(アスペクト指向)などの概念、Struts2, SpringFrameworkなどの有名なフレームワークがキーワードとなるだろう。
<p>
+
 
 BukkitPluginのEventシステムやFMLの@ModなどもこのEventシステムと同じ概念である. より詳しく知りたい場合のキーワードとして, DI(依存性の注入)やAOP(アスペクト指向)などの概念, Struts2, SpringFrameworkなどが有名なフレームワークとしてある.
 
</p>
 
  
 
==基本==
 
==基本==
<p>
+
メソッドにアノテーションと引数を指定すると、イベント発火に合わせて呼び出されるようになる。
 基本はFMLの基本と同じである. すなわちイベント時に呼び出されるメソッドにアノテーションと引数を指定する.
 
</p>
 
 
<source lang = "java">
 
<source lang = "java">
@ForgeSubScribe
+
@SubscribeEvent
public void sampleEvent(Event event)
+
public void onSampleEvent(SampleEvent event)
 
{
 
{
 
}
 
}
 
</source>
 
</source>
<p>
+
このメソッドはSampleEventクラスがpostされる箇所で呼び出される。メソッドを持つクラスは適切な箇所でMinecraftForgeのAPIを使って登録する必要がある。
 このメソッドはEventクラスが生成される箇所で呼び出される. なお, メソッドを持つクラスは適切な箇所でMinecraftForgeのAPIを使って登録する必要がある.
 
</p>
 
 
<source lang = "java">
 
<source lang = "java">
MinecraftForge.EVENT_BUS.register(new ForgeEventClass())
+
MinecraftForge.EVENT_BUS.register(new ForgeEventHook())
 
</source>
 
</source>
<p>
+
MinecraftForge.EVENT_BUSに限っては、@EventBusSubscriberでクラスを注釈すれば自動的に登録され、静的メソッドであれば対応したタイミングに呼び出されるようになる。
 もちろんここでは具体的なサンプルは扱わない. Eventクラスは実際にはどこかで呼ばれることはないし, クラス名も適当である. しかし, Forgeのイベントは概ねこの呼び出し方ということを把握しておく必要がある.
 
</p>
 
  
==Forgeが扱えるイベント一覧==
+
ここでは具体的なサンプルは扱わず、SampleEventというEventも存在しないが、Forgeのイベントの使い方の流れは大体このようであると認識して良い。
<p>
 
 MinecraftForge 6.3.0.363時点, なおこれはイベントに関わるクラスを列挙したものである.
 
</p>
 
  
*net.minecraftforge.event
+
Minecraft Forgeの扱えるEventは[[Minecraft Forge API#イベント]]を参照すること。
**CommandEvent
 
*net.minecraftforge.event.world
 
**ChunkEvent
 
**ChunkDataEvent
 
**WorldEvent
 
*net.minecraftforge.event.entity
 
**EntityEvent
 
**PlaySoundAtEntityEvent
 
*net.minecraftforge.event.entity.living
 
**LivingEvent
 
**LivingAttackEvent
 
**LivingDeathEvent
 
**LivingDropsEvent
 
**LivingFallEvent
 
**LivingHurtEvent
 
**LivingSetAttackTargetEvent
 
**LivingSpecialSpawnEvent
 
*net.minecraftforge.event.entity.minecart
 
**MinecartEvent
 
**MinecartCollisionEvent
 
**MinecartInteractEvent
 
**MinecartUpdateEvent
 
*net.minecraftforge.event.entity.player
 
**PlayerEvent
 
**AttackEntityEvent
 
**ArrowNockEvent
 
**ArrowLooseEvent
 
**EntityInteractEvent
 
**BonemealEvent
 
**EntityItemPickupEvent
 
**FillBucketEvent
 
**PlayerDestroyItemEvent
 
**PlayerSleepInBedEvent
 
**PlayerDropsEvent
 
**UseHoeEvent
 
*net.minecraftforge.event.entity.item
 
**ItemEvent
 
**ItemExpireEvent
 
**ItemTossEvent
 

2017年2月19日 (日) 18:48時点における版

はじめに

Minecraft Forge Universalから新しいEventシステムが組み込まれた。ある処理にこちらの用意した処理を割り込ませる機能であり、介入しづらいバニラの処理にも介入できるようになる。
BukkitPluginのEventシステムやFMLの@ModなどもこのEventシステムと同じ概念である。
詳しく知りたい場合は、DI(依存性の注入)やAOP(アスペクト指向)などの概念、Struts2, SpringFrameworkなどの有名なフレームワークがキーワードとなるだろう。


基本

メソッドにアノテーションと引数を指定すると、イベント発火に合わせて呼び出されるようになる。

@SubscribeEvent
public void onSampleEvent(SampleEvent event)
{
}

このメソッドはSampleEventクラスがpostされる箇所で呼び出される。メソッドを持つクラスは適切な箇所でMinecraftForgeのAPIを使って登録する必要がある。

MinecraftForge.EVENT_BUS.register(new ForgeEventHook())

MinecraftForge.EVENT_BUSに限っては、@EventBusSubscriberでクラスを注釈すれば自動的に登録され、静的メソッドであれば対応したタイミングに呼び出されるようになる。

ここでは具体的なサンプルは扱わず、SampleEventというEventも存在しないが、Forgeのイベントの使い方の流れは大体このようであると認識して良い。

Minecraft Forgeの扱えるEventはMinecraft Forge API#イベントを参照すること。