Open1
マイクラJava版で、プラグインで追加したコマンドをデータパックから実行する方法
データパック側から、プラグインで追加したコマンドをそのまま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]
というようにエラーが出て、読み込まれない。
なので、ここは超強引に、コマンドブロックを経由して読み込む。
やり方としては単純に、
- まず
forceload
コマンドでどこか適当な場所に強制読み込み範囲を作る(まあスポーンチャンクでもたぶん可) - そこにコマンドブロックを置いて、中にプラグインで追加したコマンドを打つ
- そのコマンドブロックの隣の座標をメモする
- チェーンコマンドブロックを繋いで、メモした座標をもとに、
setblock [メモした座標] air
と打つ
5. データパックの関数内のプラグイン追加コマンドを実行したい箇所に
setblock [メモした座標] redstone_block
と打つ
これで、(無理矢理)プラグイン追加コマンドをデータパック側から実行することができる。
この方法の難点としては、レッドストーンブロックを置いて間接的に実行しているため、何tickかの遅延が発生してしまうことである。
そのため、タイマーなどの時間的な処理を行う場合は、その遅延を考慮して実装するべき。(それかプラグイン側で全て実装してしまう)