【解決】Block.onNeighborBlockChange()が赤石入力で何度も呼び出される

Modding・サーバPlugin制作・ツール制作など、開発関連の質問があればこちらにお願い致します。
フォーラムルール
質問関連フォーラムで質問する時は、必ず次のトピックを一読/厳守お願い致します。
viewtopic.php?f=5&t=999
  • (PostNo.45992)

【解決】Block.onNeighborBlockChange()が赤石入力で何度も呼び出される

投稿記事by NurseAngel » 2012年7月06日(金) 00:09

Block.onNeighborBlockChange()で周囲のブロックの変更を感知しようとしています。

大体の場合において問題なく動作するのですが、何故かレッドストーン入力した場合のみonNeighborBlockChange()が何度も呼び出されるという謎現象で困っています。

左にある砂利っぽいのはonNeighborBlockChange()されるたびにログを出力してます。
isPoweredはisBlockIndirectlyGettingPowered()の返り値、powerLevelは赤石のメタデータです。

単純な回路ですが、スイッチをオンにするとonNeighborBlockChange()が2回コールされます(powerLevelが0ですが間違いで、実際はちゃんと取れてます)
2012-07-05_23.59.06.png


さらにこのようにし、右のレバーがオンの状態で左のレバーをオンにするとなんと4回も呼ばれます。
2012-07-05_23.59.47.png


SSではちょっと再現できてないんですが、三回呼ばれて、そのうち1回目のみisPoweredがfalseで、二回目三回目がisPowered=trueになる、
とかいうよくわからないパターンもありました。

質問というのは、これを単純に最後の一回のコールだけ受け取りたいということです。
なにかこういうときに使えるようなメソッドなりパターンなりってございませんでしょうか?
最後に編集したユーザー NurseAngel [ 2012年7月08日(日) 15:54 ], 累計 2 回
NurseAngel
ID:17ba66d7
石炭掘り
 
記事: 205
登録日時: 2012年3月17日(土) 21:38

  • (PostNo.46235)

Re: 【質問】Block.onNeighborBlockChange()が赤石入力で何度も呼び出される

投稿記事by ayashige » 2012年7月08日(日) 00:02

ディスペンサーだとこのようにしてアイテムを一つしか撃ち出さないようにしていますね。

  1. onNeighborBlockChangeで動力が来ていたら、World.scheduleBlockを実行。
    4Tick後にupdateTickを呼び出すように設定している。
  2. 再度onNeighborBlockChangeが呼ばれてWorld.scheduleBlockを再呼び出ししても、
    1で設定したupdateTickが実行されるまではupdateTickの追加で呼び出すことはない。
  3. upadateTick内で、動力が来ていたらアイテムを撃ちだす。
綾繁那人です、ねこによろしく。
ayashige
ID:35312126
大工さん
 
記事: 47
登録日時: 2012年5月03日(木) 12:52

  • (PostNo.46241)

Re: 【質問】Block.onNeighborBlockChange()が赤石入力で何度も呼び出される

投稿記事by NurseAngel » 2012年7月08日(日) 00:30


おおディスペンサー!
完璧に存在を忘れてた!

ランプやピストン、パワードレールあたりは色々中身を調べたのに
何故かディスペンサーだけ調べてませんでした。何故だろう…

まだ詳しく見てないのでなんともいえませんが、ともかくこれで解決できそうです。
ありがとうございます。

#どうにかなったら後で報告予定
NurseAngel
ID:17ba66d7
石炭掘り
 
記事: 205
登録日時: 2012年3月17日(土) 21:38

  • (PostNo.46333)

Re: 【解決?】Block.onNeighborBlockChange()が赤石入力で何度も呼び出される

投稿記事by NurseAngel » 2012年7月08日(日) 15:54

結論から言うと見事に動作しました。

ディスペンサーのtickRateとonNeighborBlockChangeとupdateTickをコピペするだけで終わってしまったとかいう。
この一週間の苦労は何だったんだ~
NurseAngel
ID:17ba66d7
石炭掘り
 
記事: 205
登録日時: 2012年3月17日(土) 21:38


Return to 質問:開発・制作関連

x