このアドオンの各機械で使用できる簡易言語の仕様です
基本文法
1 変数へのアクセス
- 機械固有の変数:
v.変数名(例:v.fuelやv.statusなど各機械によって使える変数が異なります) - ネットワーク変数:
nv.変数名(例:nv.itemcount)
2 共通の固定変数
どの機械でも共通して使用できる固定変数です
v.now: 現在のゲーム内のUnixタイムスタンプ (ミリ秒単位) を数値で返しますv.frequency: 機械に設定されている周波数を数値で返します
2.1 各機械の固有変数 (v.変数名)
機械によって使用できる固有の変数は以下の通りです
アイテムマグネット (peko:itemmagnet)
v.id: 検出したアイテムのID (文字列)v.dura: アイテムの耐久値 (数値)v.damage: アイテムのダメージ値 (数値)v.maxdura: アイテムの最大耐久値 (数値)v.entityId: アイテムエンティティのID (文字列)
ベルトコンベア (peko:beltconveyor)
v.id: 搬送中のアイテムのID (文字列)v.dura: アイテムの耐久値 (数値)v.damage: アイテムのダメージ値 (数値)v.maxdura: アイテムの最大耐久値 (数値)v.entityId: アイテムエンティティのID (文字列)
デジタルマイナー (peko:digitalminer)
v.fuel: 燃料の残量 (数値)v.totalCost: 掘削に必要な合計コスト (数値)v.targetCount: ターゲットブロックの残数 (数値)v.condition: 掘削中かどうか (真偽値)v.status: 稼働状態 (真偽値)
アイテムドロッパー (peko:itemdropper)
v.id: ドロップするアイテムのID (文字列)v.amount: ドロップするアイテムの個数 (数値)v.dura: アイテムの耐久値 (数値)v.damage: アイテムのダメージ値 (数値)v.maxdura: アイテムの最大耐久値 (数値)v.entityId: アイテムエンティティのID (文字列)
レッドストーンコンバーター (peko:redstone_converter)
v.power: レッドストーン信号の強度 (数値)
3 リテラル
- 数値:
100や3.14 - 文字列:
"hello"や'world'(ダブルクォートまたはシングルクォートで囲む) - テンプレートリテラル:
`値は ${v.fuel} です`(バックティックで囲み${}で式を展開する) - 真偽値:
trueやfalse - 配列:
[1, 2, 3]や["a", "b"](角括弧で囲みカンマ区切りで要素を並べる)- 添字アクセス:
arr[0](0始まりのインデックスで要素を取得する) - 添字代入:
arr[0] = 10(指定したインデックスの要素を書き換える)
- 添字アクセス:
4 演算子と代入
- 算術演算子:
+,-,*,/,%,**(加減乗除、剰余、べき乗) - 比較演算子:
==,!=,>,<,>=,<=(等価と不等価および大小比較) - 論理演算子:
&&(and),||(or),!(not) - 代入演算子:
=(ローカル変数やネットワーク変数に値を再代入します。例:i = i + 1やnv.itemcount = 0。また、+=,-=,*=,/=,**=も使用できます。)
5 条件分岐
- 三項演算子:
条件 ? 真の時の式 : 偽の時の式(例:v.fuel > 10 ? true : false) - if-else文 (サブコード専用):
if (条件) { 実行文 } else { 実行文 }else句は省略可能ですelse ifチェーンも使用できます (例:if (v.fuel > 10) { ... } else if (v.fuel > 5) { ... } else { ... })
6 ループ処理 (サブコード専用)
- while文:
while (条件) { 実行文 }(条件が真の間ループします。例:while (nv.running) { setNv("count", nv.count + 1) }) - for文:
for (初期化; 条件; 更新) { 実行文 }(一般的なループ文です。例:for (int i = 0; i < 10; i = i + 1) { log(i) })- ※ 無限ループを防止するため 1回のループは最大 1000 回までに制限されています
7 サブコードの規則
サブコード内では以下の記述ルールが適用されます
- 文の区切り: カンマ
,で区切って複数の処理を記述します (例:int x = 10, setNv("myVal", x)) - 変数宣言:
int,float,double,string,bool(およびint[]などの配列型) を使用してローカル変数を定義できます (例:int count = nv.itemcount)
ユーザー定義関数
/func コマンドまたはチャットに .func を送信すると関数エディタUIが開きます
エディタで関数名、引数リスト、処理コードを記述して保存できます
保存された関数は すべての機械のサブコード内から 関数名(引数...) で呼び出し可能です
- 例:
myAdd(a, b)を定義し コードにa + bと記述した場合double result = myAdd(5, 10)のように呼び出すとresultに15が代入されます
基本関数
log(message)
近くのプレイヤーにメッセージをチャット欄で送信します
- 引数: message (任意の型)
- 戻り値: true
- 制限: サブコード内でのみ使用可能です
log("Hello World");
wait(tick)
指定したチック数だけ処理を一時停止します
- 引数: tick (0以上の数値)
- 戻り値: なし
- 制限: サブコード内でのみ使用可能です
wait(20);
setNv(key, value)
ネットワーク変数に値を保存します
- 引数: key (文字列), value (任意の型)
- 戻り値: 保存した値
- 制限: サブコード内でのみ使用可能です
setNv("itemcount", 100);
math.abs(value)
数値の絶対値を返します
- 引数: value (数値)
- 戻り値: 数値
math.abs(-5); // 5
math.floor(value)
数値の小数点以下を切り捨てた値を返します
- 引数: value (数値)
- 戻り値: 数値
math.floor(3.8); // 3
math.ceil(value)
数値の小数点以下を切り上げた値を返します
- 引数: value (数値)
- 戻り値: 数値
math.ceil(3.2); // 4
math.round(value)
数値の小数点以下を四捨五入した値を返します
- 引数: value (数値)
- 戻り値: 数値
math.round(3.5); // 4
math.sqrt(value)
数値の平方根を返します
- 引数: value (数値)
- 戻り値: 数値
math.sqrt(16); // 4
math.min(...values)
渡された複数の数値の中から最小の値を返します
- 引数: values (複数の数値)
- 戻り値: 数値
math.min(5, 2, 9); // 2
math.max(...values)
渡された複数の数値の中から最大の値を返します
- 引数: values (複数の数値)
- 戻り値: 数値
math.max(5, 2, 9); // 9
math.random(seed)
乱数を返します
引数にシード値を指定した場合はシード値に基づいて固定の乱数を返します
引数がない場合は通常の乱数を返します
- 引数: seed (任意。省略可能)
- 戻り値: 数値 (0以上1未満)
math.random();
math.pow(base, exponent)
べき乗を返します
- 引数: base (数値 - 基数), exponent (数値 - 指数)
- 戻り値: 数値
math.pow(2, 3); // 8
文字列メソッド
文字列型の変数 (v.prop など) に対して使用できるメソッドです
includes(value)
指定された文字列が含まれているかを判定します
- 引数: value (文字列)
- 戻り値: 真偽値 (true/false)
v.status.includes("ready");
startsWith(value)
指定された文字列で始まっているかを判定します
- 引数: value (文字列)
- 戻り値: 真偽値 (true/false)
v.status.startsWith("ok");
endsWith(value)
指定された文字列で終わっているかを判定します
- 引数: value (文字列)
- 戻り値: 真偽値 (true/false)
v.status.endsWith("done");
配列メソッド
ローカル変数として宣言した配列に対して使用できるメソッドです
(例: int[] arr = [1, 2, 3] と宣言した後 arr.push(4) のように呼び出す)
.push(...values)
末尾に要素を追加します
- 引数: values (追加する値。複数指定可)
- 戻り値: 追加後の配列の長さ
arr.push(4, 5);
.pop()
末尾の要素を取り出して削除します
- 引数: なし
- 戻り値: 取り出した要素
arr.pop();
.shift()
先頭の要素を取り出して削除します
- 引数: なし
- 戻り値: 取り出した要素
arr.shift();
.unshift(...values)
先頭に要素を追加します
- 引数: values (追加する値。複数指定可)
- 戻り値: 追加後の配列の長さ
arr.unshift(0);
.indexOf(value)
指定した値が最初に現れるインデックスを返します。見つからない場合は -1 を返します
- 引数: value (検索する値)
- 戻り値: 数値
arr.indexOf(3);
.includes(value)
指定した値が含まれているかを判定します
- 引数: value (検索する値)
- 戻り値: 真偽値 (true/false)
arr.includes(2);
.join(separator)
配列の要素を区切り文字で結合した文字列を返します
- 引数: separator (文字列。省略時は
,) - 戻り値: 文字列
arr.join(", ");
.slice(start, end)
指定した範囲の部分配列を返します (元の配列は変更しない)
- 引数: start (開始インデックス), end (終了インデックス。省略可)
- 戻り値: 配列
arr.slice(1, 3);
.length
配列の要素数を返します
- 戻り値: 数値
- 例:
arr.length