ScriptAPIで常駐処理をONOFF制御する方法

スポンサーリンク

※なぜかコードブロック内で//インラインコメントを記入すると保存できなかったので読みにくくなりましたがご容赦を。
minecraft:arrowを使う(右クリック)ことで常駐処理をONOFFするサンプルコード

DPを利用したONOFF切り替え可能な繰り返し処理

worldを再起動したりScriptをリロードしても制御状態が維持される

const LOOPFUNCTION_FLAG_DPNAME = "my_loopfunction_isActive"
world.afterEvents.itemUse.subscribe(ev=> {
if(ev.itemStack.typeId == "minecraft:arrow"){
if(!world.getDynamicProperty(LOOPFUNCTION_FLAG_DPNAME)){
world.setDynamicProperty(LOOPFUNCTION_FLAG_DPNAME,true);
world.sendMessage("active");
}else{
world.setDynamicProperty(LOOPFUNCTION_FLAG_DPNAME);
world.sendMessage("non active");
}
}
});

world.afterEvents.worldInitialize.subscribe(() => {
system.runInterval(()=>{
if(!!world.getDynamicProperty(LOOPFUNCTION_FLAG_DPNAME)){
//ここに処理を書く
world.sendMessage("これはテストメッセージです:DP形式");
}
},1);
});

変数を利用する形式

worldの再起動やScriptのリロードで制御が初期化される

let loopFlag = true;
world.afterEvents.itemUse.subscribe(ev=> {
if(ev.itemStack.typeId == "minecraft:arrow"){
loopFlag=!loopFlag;
}
});

world.afterEvents.worldInitialize.subscribe(() => {
system.runInterval(()=>{
if(loopFlag)){
//ここに処理を書く
world.sendMessage("これはテストメッセージです:変数形式");
}
},1);
});
let loopFlag = false;
// ▼ループ処理管理用のIDが入る
let loopFunctionId;
world.afterEvents.itemUse.subscribe(ev=> {
if(ev.itemStack.typeId == "minecraft:arrow"){
// ▼呼び出されるたびflagを反転
loopFlag=!loopFlag;
if(loopFlag){
// ▼ループ処理を登録する
loopFunctionId = system.runInterval(()=>{
    //▼ここに処理を書く
world.sendMessage("これはテストメッセージです:変数形式");
},1);
}else{
system.clearRun(loopFunctionId); // ループ処理を解除する
}
}
});

▲こっちの方法では、ループ処理そのものを解除する&ループごとに処理実行flagの確認をしないのでいくらか軽量化されている
 ただし、Script読み込み時点から常駐処理を走らせるにはもう一工夫必要

※投稿記事に含まれるファイルやリンクにより発生した被害についてクラフターズコロニーは責任を取りません
投稿通報

コメント

コメント通報