精度はよくわかりませんが一人でやった時は悪くはなかったです
-# 低スペなので録画で多少重くなってるかも
フォームを閉じるスピードを計測してる感じです
擬似的に再現してるだけなのでどうしても遅延はあります
↓ サンプル
import { world, system, Player } from "@minecraft/server";
import { ActionFormData, MessageFormData, uiManager } from "@minecraft/server";
/**
*
* @param { Player} player
* @author shouyu0902
*/
async function measurePing(player) {
const startTime = Date.now();
const form = new ActionFormData().title("").body("");
await form.show(player)
const endTime = Date.now();
const ping = endTime - startTime;
player.sendMessage(`Pong! ${ping-20}ms`); // だいたい20msくらいの遅延が生まれてしまう
}
world.beforeEvents.playerInteractWithBlock.subscribe(async ev => {
const loc = ev.block.location
const player = ev.player
// ここは変えてね
if(loc.x === 0 && loc.y === -60 && loc.z === 0) {
ev.cancel = true;
if (!ev.isFirstEvent) return;
await system.waitTicks(1);
new MessageFormData().title(" ").body("閉じないでください\n計測が終了したら自動で閉じます").show(player);
system.runTimeout(()=>{
measurePing(player)
system.run(()=>{
uiManager.closeAllForms(player)
})
}, 3) // 3tickくらい遅延させた方が安定するかも
}
});```