Skip to content
supermomonga edited this page Aug 5, 2013 · 3 revisions

MOD作成について

MODデプロイ方法

githubにpushすると変更は自動的にpullされ、かつ以下のファイルのコードはサーバーの再起動を伴わず自動的に反映されます。

  • app/event_handler.rb
  • app/job.rb

MOD作成テクニック・予備知識

プレイヤーの動作検知について

プレイヤーの動作を検知する際、キー入力を直接検知することはできない。キー入力を行った結果、プレイヤーが何らかの動作を行った際、それがイベントとして発火する。

  • プレイヤーのしゃがみ状態が変化した時
  • プレイヤーが何か(空気ブロックを含む)をクリックした時
  • ...

ただし、ジャンプイベントは取れない。理由は、「プレイヤが上方(y軸正方向)に移動したことを検出することは可能だが、それがジャンプによるものなのか、ノックバックか、はしごか、水で浮かんだのか、区別できない」ため。

Block関連

  • ブロックは排他的に設置される。つまり、複数のブロックは1つのマス内に共存できない。
  • 一件ブロックに見えないものであっても、それが1ブロック分のある特定の空間を専有して設置されている(=Entityでない)場合、それはブロックである
    • カーペット・額縁・植木鉢・花・積雪・RSパウダー
    • 何もない様に見える空間も、空気ブロック(AIR)が設置されている
  • Entityの一覧を見て、そこにないものはブロック、という認識でok

Entity関連

  • 絵画はEntity(ブロックと思われがち)。経験値オーブや発射された弓矢などもEntity。自由落下中のブロックもEntity。MinecartもEntity。
  • 座標を指定して直接Entityを得る方法はない
    • 座標からチャンクを取得し、チャンク内のEntity一覧を取得する方法が効率的
    • Location#getChunkChunk#getEntitiesmin_byLocation#distanceの一番小さいやつを取得
  • 任意のentityは任意のentityに乗れる
    • Minecart on プレイヤーとか可能
    • 連続して乗ることが可能(i.e. 匠on匠on匠on匠on匠on匠on匠on匠on匠on匠on匠)