Open1

マイクラJava版で、プラグインで追加したコマンドをデータパックから実行する方法

horohoro

データパック側から、プラグインで追加したコマンドをそのままmcfunctionに書いて実行しようとすると、

[00:11:31 ERROR]: Failed to load function [関数名]
java.util.concurrent.CompletionException: java.lang.IllegalArgumentException: Whilst parsing command on line [xx]: Unknown or incomplete command, see below for error at position 0: <--[HERE]

というようにエラーが出て、読み込まれない。

なので、ここは超強引に、コマンドブロックを経由して読み込む。
やり方としては単純に、

  1. まずforceloadコマンドでどこか適当な場所に強制読み込み範囲を作る(まあスポーンチャンクでもたぶん可)
  2. そこにコマンドブロックを置いて、中にプラグインで追加したコマンドを打つ
  3. そのコマンドブロックの隣の座標をメモする
  4. チェーンコマンドブロックを繋いで、メモした座標をもとに、
setblock [メモした座標] air

と打つ
5. データパックの関数内のプラグイン追加コマンドを実行したい箇所に

setblock [メモした座標] redstone_block

と打つ

これで、(無理矢理)プラグイン追加コマンドをデータパック側から実行することができる。

この方法の難点としては、レッドストーンブロックを置いて間接的に実行しているため、何tickかの遅延が発生してしまうことである。
そのため、タイマーなどの時間的な処理を行う場合は、その遅延を考慮して実装するべき。(それかプラグイン側で全て実装してしまう)