Muku Lab.

ログイン
MukuIndustry言語解説 icon

MukuIndustry言語解説

このアドオンの各機械で使用できる簡易言語の仕様です

基本文法

1 変数へのアクセス

  • 機械固有の変数: v.変数名 (例: v.fuelv.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 リテラル

  • 数値: 1003.14
  • 文字列: "hello"'world' (ダブルクォートまたはシングルクォートで囲む)
  • テンプレートリテラル: `値は ${v.fuel} です` (バックティックで囲み ${} で式を展開する)
  • 真偽値: truefalse
  • 配列: [1, 2, 3]["a", "b"] (角括弧で囲みカンマ区切りで要素を並べる)
    • 添字アクセス: arr[0] (0始まりのインデックスで要素を取得する)
    • 添字代入: arr[0] = 10 (指定したインデックスの要素を書き換える)

4 演算子と代入

  • 算術演算子: +, -, *, /, %, ** (加減乗除、剰余、べき乗)
  • 比較演算子: ==, !=, >, <, >=, <= (等価と不等価および大小比較)
  • 論理演算子: && (and), || (or), ! (not)
  • 代入演算子: = (ローカル変数やネットワーク変数に値を再代入します。例: i = i + 1nv.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) のように呼び出すと result15 が代入されます

基本関数

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