Modding会 in Kyoto
-
Upload
ayamitsu0321 -
Category
Engineering
-
view
643 -
download
1
Transcript of Modding会 in Kyoto
Mob(というかEntity)のいろいろ@ayamitsu0321
環境:Minecraft 1.7.10forge-1.7.10-10.13.0.1199
• EntityとItemStackの相互変換(3-5)• DataWatcherを用いた同期(6-10)• entityIdを用いた同期(11-14)• EntityListの説明(15-16)• Eventの種類(17-21)• RenderManagerでの描画(22-23)• Modelの非表示(24-25)
目次
EntityとItemStackの相互変換共通点
EntityとItemStackの保存の流れ
net.minecraft.entity.Entitynet.minecraft.nbt.NBTTagCompoundnet.minecraft.item.ItemStack
デモ
DataWatcherを用いた同期
net.minecraft.entity.DataWatcher
• byte• short• int• float• ItemStack• ChunkCoordinates
使える型
コード
初期化
コード
同期の流れコード
注意点• Indexが重複しないようにする
• 型の不一致や予期せぬ誤動作を起こす• byteやshortなどのintをキャストしていれるものは確実にキャストする
• ItemStackやChunkCoordinatesを入れる場合、nullは絶対にいれない
• NullPointerExceptionがでる• 既存のEntityに対して外部から新たにIndex追加してはいけない
• 他のMODが同じようなことをしている可能性(杞憂?)
entityIdを用いた同期
ServerとClientでentityIdは共通
同期できる(真理)
同期の流れ
WorldのloadedEntityListからentityIdの一致するEntityを探す
注意点• setEntityIdは使わない• タイミングによってはServerとClientの接続が確立されてない場合があるので注意する
• 例:EntityJoinWorldEvent• Packet送信後、返ってくるまで送信し続けるなどの対処が必要
• EntityLivingBase継承の場合はLivingEvent.LivingUpdateEventが使える
EntityListの説明
net.minecraft.entity.EntityList
• Entityに関する名前、Class、IDの情報がMapで保持されている
• Entityからそれらの情報がとれる• addMappingを使えば情報を上書きできる• 名前、Class、あるいはIDのいずれかの情報から他の情報がとれる
• Entityのインスタンスの生成をやってくれる
コード
Eventの種類
net.minecraftforge.event.entity• EntityEvent.EntityConstructing
• コンストラクタで呼ばれる• EntityEvent.CanUpdate
• 調査不足• EntityEvent.EnteringChunk
• ChunkにEntityが追加されたときによばれる• EntityJoinWorldEvent
• WorldのspawnEntityInWorldでよばれる• EntityStruckByLightningEvent
• 雷がEntityにあたったときによばれる• PlaySoundAtEntityEvent
• Entityで音が鳴らされるときによばれる
net.minecraftforge.event.entity.living
• EnderTeleportEvent• Endermanがテレポート、あるいはEnder pearlを使ってテレポートしたときによばれる
• LivingAttackEvent• 攻撃を受けたときによばれる
• LivingDeathEvent• 死んだときによばれる
• LivingDropsEvent• 死んでアイテムをドロップするときによばれる
• LivingEvent.LivingUpdateEvent• tick処理(onUpdate)でよばれる
• LivingEvent.LivingJumpEvent• ジャンプしたときによばれる
• LivingFallEvent• 落ちたときによばれる
• LivingHurtEvent• ダメージを与えられたときによばれる
• LivingPackSizeEvent• 調査不足
• LivingSetAttackTargetEvent• 攻撃対象を設定したときによばれる
• LivingSpawnEvent• スポーンしたときによばれる
• LivingSpawnEvent.CheckSpawn• スポーンする直前にMobをスポーンさせる設定をする
• LivingEvent.SpecialSpawn• スポーナーでスポーンさせるときによばれる
• LivingEvent.AllowDespawn• tickで処理、その時点でデスポーンを許可するかどうかを設定できる
• 即座にデスポーンさせるということではない
• ZombieEvent.SummonAidEvent• ゾンビの村襲撃イベントでよばれる?• 調査不足
RenderManagerでの描画
net.minecraft.client.renderer.entity.RenderManager
• renderEntityWithPosYawにEntityと座標などをぶちこめばよい
• GUIやTileEntity、IItemRendererなどどこでも使える
• 引数の最後のfloatは0.0Fで大丈夫• RenderBoatでは0.0625Fいれてる• 調査不足
Modelの非表示
• Entityは基本的にModelをRenderで描画• ModelRendererのisHiddenをtrueにすると非表示にできる
デモ
おわり