【統合版】ScriptAPI #6 ダイナミックプロパティ(データ保存)

スポンサーリンク

解説

今回はScriptAPIにおけるDynamicPropertyについて解説していきます。

DynamicPropertyとは

DynamicProperty(ダイプロ)はワールドエンティティに設定できる変数です。JS内で定義した変数と違い、ワールドを開き直したり、/reloadしたりしてもデータが保持されます。

ただし、アドオンのUUIDを変更した場合はデータが失われます。

DynamicPropertyの使い方

ダイプロはワールドエンティティで保存でき、データ型は文字列数値booleanVector3(座標)を使うことができます。

// 設定
world.setDynamicProperty("world1", "文字列");
world.setDynamicProperty("world2", 100);
world.setDynamicProperty("world3", true);
world.setDynamicProperty("world4", {x:0,y:0,z:0});

// 削除
world.setDynamicProperty("world5");

// 取得
const world1 = world.getDynamicProperty("world1"); // "文字列"
const player = world.getPlayers()[0];
// 設定
player.setDynamicProperty("player1","文字列");

// 削除
player.setDynamicProperty("player2");

// 取得
const player1 = player.getDynamicProperty("player1");

また複雑なデータは、配列やオブジェクトを文字列に変換して保存する方法もあります。
変換には、JSON.stringify()JSON.parse()を使います。

// 配列 → 文字列 に変換して保存
let myArray = ["Steve","alex","saba2gou"];
world.setDynamicProperty("myArray",JSON.stringify(myArray));

// 文字列 → 配列 に変換して取得
myArray = JSON.parse(world.getDynamicProperty("myArray"));

サンプルコード:プレイヤーごとのメモ機能

%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88-2024-04-05-004445.png
import { world } from"@minecraft/server";

world.beforeEvents.chatSend.subscribe(ev => {
const player = ev.sender;
// メッセージを空白で区切り配列にする
const cmds = ev.message.split(" ");

if (cmds[0] === "!memo") {
ev.cancel = true;
switch(cmds[1]) {
// メモの保存
case "set":
if (cmds[2]) {
player.setDynamicProperty("memo", cmds[2]);
player.sendMessage(`メモを保存しました : ${cmds[2]}`);
} else {
player.sendMessage("テキストがありません");
}
break;
// メモの表示
case "show":
const memo = player.getDynamicProperty("memo");
if (memo === undefined) {
player.sendMessage("メモが保存されていません");
} else {
player.sendMessage(`${player.name} のメモ : ${memo}`);
}
break;

// それ以外の場合
default:
player.sendMessage("そのコマンドはありません");
}
}
});

参考URL

公式リファレンス
minecraft/server Module | Microsoft Learn

ディスコードサーバー
Script API 開発初心者コミュニティ

参考にしたサイト
マイクラの泉

備忘録ブログ
さば2号のgametest(scriptAPI)備忘録

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

コメント

コメント通報