Skip to content

ScoreModule

Koukunn_ edited this page Feb 25, 2025 · 5 revisions

ScoreModule

このモジュールは、Minecraft Bedrock Edition の Script API を使用して、スコアボードの操作、チーム分け、プレイヤー数のカウント、ブロック操作、アイテム操作など、ゲームプレイを拡張するための様々なコマンドを提供します。

機能概要(カテゴリ別)

スコアボード操作

  • スコアボードのリセット、値のコピー、削除(フォーム/一括)を行います。
  • プレースホルダーを使用して、動的な値をスコアボードに設定できます。

数値処理

  • 指定された数値リストからランダムに1つを選び、スコアボードに設定します。

チーム関連

  • 指定した条件(タグ、人数)に基づいてプレイヤーをチーム分けし、スコアボードに記録します。
  • 指定したタグを持つプレイヤーの数に応じて、異なるコマンドを実行します。

プレイヤー操作

  • プレイヤーが開いているフォームを強制的に閉じます。
  • プレイヤーのタグを変更します。

ブロック操作

  • 指定座標のブロックを別の座標にクローン(複製)します。
  • 指定座標のコンテナ(チェスト、樽など)にアイテムを設定します。
  • 指定座標に、指定されたブロックをランダムな比率で設置します。

アイテム操作

  • 指定範囲にアイテムをランダムにドロップさせます

コマンド一覧と詳細(完全版)

resetScore コマンド

機能: 指定したスコアボードのスコアをリセットする、または、すべてのスコアボードのスコアをリセットします。

コマンド:

/scriptevent ws:score resetScore <スコアボード名|-all>

引数:

  • <スコアボード名>: リセットするスコアボードの名前。
  • -all: この引数を指定すると、すべてのスコアボードがリセットされます。

例:

  • my_scoreboard という名前のスコアボードをリセットする:

    /scriptevent ws:score resetScore my_scoreboard
    
  • すべてのスコアボードをリセットする:

    /scriptevent ws:score resetScore -all
    

number コマンド

機能: 指定された数値の中からランダムに1つを選び、ws_number スコアボードに設定します。

コマンド:

/scriptevent ws:score number <数値1>,<数値2>,...

引数:

  • <数値1>,<数値2>,...: カンマで区切られた数値のリスト。

例:

  • 1, 5, 10, 20 の中からランダムに1つ選び、ws_number スコアボードに設定する:
    /scriptevent ws:score number 1,5,10,20
    

score コマンド

機能: 指定したスコアボードの値を ws_<コピー元スコアボード名> スコアボードにコピーします。コピー元の値にはプレースホルダーを使用できます。

コマンド:

/scriptevent ws:score score=<コピー元スコアボード名>

引数:

  • <コピー元スコアボード名>: 値を取得する元のスコアボードの名前。

プレースホルダー:

コピー元の値として、以下のプレースホルダーを使用できます。これらは動的に値に置き換えられます。

  • [allPlayer]: ワールド内の全プレイヤー数。
  • [uptime]: サーバーの稼働時間(秒)。
  • [ver]: スクリプトのバージョン(ver 変数の値)。
  • [time]: 現在の時刻(時:分)。 例: 14:35
  • [tag=<タグ名>]: 指定したタグを持つプレイヤーの数。
  • [score=<スコアボード名>]: 指定したスコアボードの 最高スコア。
  • [score=<スコアボード名>,<プレイヤー名>]: 指定したスコアボードの、指定した プレイヤーのスコア。
  • [scoreN=<スコアボード名>]: 指定したスコアボードの 最初の参加者の名前。参加者がいない場合は '0'。
  • [scoreN=<スコアボード名>,<プレイヤー名>]:指定したスコアボードの、指定したプレイヤーの名前。見つからない場合は'0'

例:

  • player_kills スコアボードの値を ws_player_kills にコピーする:

    /scriptevent ws:score score=player_kills
    
  • high_score スコアボードの最高スコアを ws_high_score にコピーする:

     /scriptevent ws:score score=[score=high_score]
    
  • pointsスコアボードの、"Steve"というプレイヤーのスコアをws_pointsにコピーする

    /scriptevent ws:score score=[score=points,Steve]
    
  • 現在の時刻を ws_current_time スコアボードにコピーする:

    /scriptevent ws:score score=[time]
    
  • testタグを持つプレイヤー数をws_test_countにコピー

/scriptevent ws:score score=[tag=test]


### `team set` コマンド

**機能:** 指定された条件に基づいてプレイヤーをチーム分けし、各プレイヤーのチーム番号をスコアボードに記録します。

**コマンド:**

/scriptevent ws:score team set <チーム数>:<チーム内上限人数> <タグ名> <スコアボード名>


**引数:**

*   `<チーム数>`: 作成するチームの数。
*   `<チーム内上限人数>`: 1つのチームに入れる最大プレイヤー数。
*   `<タグ名>`: チーム分けの対象となるプレイヤーが持つべきタグ。このタグを持つプレイヤーのみがチーム分けされます。
*   `<スコアボード名>`:  各プレイヤーのチーム番号を記録するスコアボードの名前。

**例:**

*   `game` タグを持つプレイヤーを、最大2人のチーム2つに分け、`team_number` スコアボードに記録する:
    ```
    /scriptevent ws:score team set 2:2 game team_number
    ```

### `teamCount` コマンド
**機能:** 指定されたタグを持つプレイヤーの数に基づいて、異なるコマンドを実行します。

**コマンド:**

/scriptevent ws:score teamCount <チームタグ1,チームタグ2,...> [true]

**引数:**
* `<チームタグ1,チームタグ2,...>`: カンマ区切りのタグのリスト。
* `<JSON>`: 各チームタグに対応するコマンドを記述したJSON配列。
  *  JSONの各要素は、`{ "チームタグ": "実行するコマンド" }` という形式のオブジェクトです。
* `[true]` (オプション):
  *  省略された場合 (または `false`): いずれかのチームの人数が *0人になったとき* に、そのチームのタグに対応するコマンドが実行されます。
  *  `true` が指定された場合: *最も人数の多いチーム* のタグに対応するコマンドが実行されます。
    *  もし最も人数の多いチームが複数ある場合は、`"same"` キーに設定されたコマンドが実行されます(`"same"`キーがない場合は何も実行されません)。

**例:**

*   `red_team` タグを持つプレイヤーが0人になったら `say Red team eliminated!` を実行、`blue_team` タグを持つプレイヤーが0人になったら `say Blue team eliminated!` を実行:

    ```
    /scriptevent ws:score teamCount red_team,blue_team [{"red_team":"say Red team eliminated!"},{"blue_team":"say Blue team eliminated!"}]
    ```

*    `team1`タグを持つプレイヤーと`team2`タグを持つプレイヤーを比較し、人数の多い方のチームに応じて異なるコマンドを実行。同数の場合は、`same`のコマンドを実行。

    ```
    /scriptevent ws:score teamCount team1,team2 [{"team1":"say Team 1 wins!"},{"team2":"say Team 2 wins!"},{"same":"say It's a tie!"}] true
    ```

### `scoreDelete form` コマンド

**機能:** スコアボードを削除するためのフォーム(UI)をプレイヤーに表示します。

**コマンド:**

/scriptevent ws:score scoreDelete form


### `scoreDelete all` コマンド

**機能:** `ws_` で始まるすべてのスコアボードを *一括削除* します。ただし、`ws_module` スコアボードは除きます。

**コマンド:**

/scriptevent ws:score scoreDelete all

### `closeForm` コマンド
**機能:** プレイヤーが開いているすべてのフォームを強制的に閉じます。
**コマンド:**

/scriptevent ws:score closeForm


### `changeTag` コマンド

**機能:** 指定されたタグを持つ *すべてのプレイヤー* のタグを、別のタグに変更します。

**コマンド:**

/scriptevent ws:score changeTag <元のタグ>,<新しいタグ>


**引数:**

*   `<元のタグ>`:  変更前のタグ。
*   `<新しいタグ>`:  変更後のタグ。

**例:**

*   `old_tag` を持つすべてのプレイヤーのタグを `new_tag` に変更する:
    ```
    /scriptevent ws:score changeTag old_tag,new_tag
    ```

### `cloneBlock` コマンド

**機能:** 指定された座標にあるブロックを、別の指定された座標にクローン(複製)します。

**コマンド:**

/scriptevent ws:score cloneBlock


**引数:**

*   `<JSON>`:  以下の形式の JSON 文字列。

    ```json
    {
      "form": [
        {"x": <x座標>, "y": <y座標>, "z": <z座標>},
        ...
      ],
      "to": [
        {"x": <x座標>, "y": <y座標>, "z": <z座標>},
        ...
      ]
    }
    ```

    *   `form`:  コピー元のブロックの座標の配列。
    *   `to`:  コピー先の座標の配列。

**例:**

*   座標 (0, 64, 0) のブロックを座標 (10, 64, 10) にクローンする:
    ```
    /scriptevent ws:score cloneBlock {"form":[{"x":0,"y":64,"z":0}],"to":[{"x":10,"y":64,"z":10}]}
    ```

### `chestFill` コマンド

**機能:** 指定された座標にあるコンテナ(チェスト、樽など)に、指定されたアイテムを設定します。

**コマンド:**

/scriptevent ws:score chestFill


**引数:**
*   `<JSON>`: 以下の構造の JSON 文字列。
```json
{
"locations": [
    { "x": <x座標>, "y": <y座標>, "z": <z座標>},
     ...
     ],
    "items": [
        {
        "id": "<アイテムID>",
        "amount": <数量>,
         "data":<データ値>,
        "name": "<アイテム名>",
        "lore": ["<説明文1>", "<説明文2>", ...],
         "lockMode":<ロックモード>,
         "keepOnDeath":<死亡時保持>,
        "enchantments": [
                 {"type": "<エンチャントの種類>", "level": <レベル>},
                ...
            ]
        },
    ...
    ],
     "randomSlot": <true/false>
}

JSONの各要素:

  • locations: アイテムを設定するコンテナの座標の配列。
  • items: コンテナに入れるアイテムの配列。
    • id: アイテムの ID(例: minecraft:diamond)。 必須
    • amount: アイテムの数量(デフォルトは 1)。
    • data : アイテムのデータ値 (デフォルトは0)
    • name: アイテムのカスタム名(例: §b特別なダイヤモンド)。
    • lore: アイテムの説明文(文字列の配列)。
    • lockMode:コンテナスロットのロックモード。"slot"でスロット固定、"inventory"でインベントリ固定(省略可)。
    • keepOnDeath:プレイヤー死亡時にアイテムを保持するかどうか(省略可)。
    • enchantments: 付与するエンチャントの配列。各エンチャントは以下の形式。
      • type:エンチャントの種類(例: sharpness)。 *level: エンチャントレベル(例: 5)
  • randomSlot:
    • true: アイテムをコンテナ内の ランダムなスロット に配置します。
    • false (または省略): アイテムをコンテナの 空いているスロットの先頭から順番に 配置します。

例:

  • 座標 (0, 64, 0) にあるチェストに、ダイヤモンド2個(名前: "Special Diamond", 説明文: "Shiny!")をランダムなスロットに入れる:
    /scriptevent ws:score chestFill {"locations":[{"x":0,"y":64,"z":0}],"items":[{"id":"minecraft:diamond","amount":2,"name":"§bSpecial Diamond","lore":["§7Shiny!"]}],"randomSlot":true}
    

randomBlock コマンド

機能: 指定された座標に、指定されたブロックをランダムな比率で設置します。

コマンド:

/scriptevent ws:score randomBlock <JSON>

引数:

  • <JSON>: 以下の構造のJSON文字列。
{
    "locations": ["<x1> <y1> <z1>", "<x2> <y2> <z2>", ...],
    "blocks": [
        { "id": "<ブロックID>", "weight": <重み> },
...
]
}

JSONの各要素:

  • locations: ブロックを設置する座標の配列。座標は文字列形式で指定します ("x y z").
  • blocks: 設置するブロックとその出現率(重み)の配列。
    • id: ブロックのID (例: minecraft:stone). 必須
    • weight: ブロックの出現率の重み。この値が大きいほど、そのブロックが選ばれやすくなります。

例:

  • 座標 (0, 64, 0) と (1, 64, 0) に、土ブロック (重み3) と石ブロック (重み1) をランダムに設置する:
    /scriptevent ws:score randomBlock {"locations":["0 64 0", "1 64 0"],"blocks":[{"id":"minecraft:dirt","weight":3},{"id":"minecraft:stone","weight":1}]}
    

randomDrop コマンド

機能: 指定された範囲内に、指定されたアイテムをランダムな比率でドロップさせます。

コマンド:

/scriptevent ws:score randomDrop <JSON>

引数:

  • <JSON>: 以下の構造のJSON文字列。
{
    "start": { "x": <x1>, "y": <y1>, "z": <z1> },
    "end": { "x": <x2>, "y": <y2>, "z": <z2> },
    "items": [
    {
         "id": "<アイテムID>",
         "amount": <数量>,
        "data": <データ値>,
         "name": "<アイテム名>",
        "lore": ["<説明文1>", "<説明文2>", ...],
         "lockMode": <ロックモード>
         "keepOnDeath":<死亡時保持>
         "enchantments": [
                {"type": "<エンチャントの種類>", "level": <レベル>},
            ...
        ],
        "weight": <重み>
     },
    ...
    ],
    "dropCount": <ドロップ数>
}

JSONの各要素:

  • start: ドロップ範囲の開始座標 (直方体の最小の角)。
  • end: ドロップ範囲の終了座標 (直方体の最大の角)。
  • items: ドロップさせるアイテムとその出現率(重み)の配列。
    • id: アイテムのID (例: minecraft:diamond). 必須
    • amount: ドロップするアイテムの個数(デフォルトは 1)。
    • data: アイテムのデータ値(デフォルトは0)
    • name: ドロップするアイテムのカスタム名。
    • lore: ドロップするアイテムの説明文(文字列の配列)。
    • lockMode:コンテナスロットのロックモード。"slot"でスロット固定、"inventory"でインベントリ固定(省略可)。
    • keepOnDeath:プレイヤー死亡時にアイテムを保持するかどうか(省略可)。
    • enchantments: 付与するエンチャントの配列
    • type:エンチャントの種類(例: sharpness)。
    • level: エンチャントレベル(例: 5)
    • weight: アイテムの出現率の重み。
  • dropCount: ドロップを試行する回数。

例:

  • (0, 60, 0) から (20, 65, 20) の範囲内に、ダイヤモンド(重み1)、鉄インゴット(重み5、数量3)、土(重み10) を5回ドロップ試行:
/scriptevent ws:score randomDrop {"start":{"x":0,"y":60,"z":0},"end":{"x":20,"y":65,"z":20},"items":[{"id":"minecraft:diamond","weight":1,"amount":1,"name":"§bLucky Diamond","lore":["§7Found you!"]},{"id":"minecraft:iron_ingot","weight":5, "amount": 3},{"id":"minecraft:dirt","weight":10}],"dropCount": 5}

貢献

バグ報告、機能リクエスト、プルリクエストは大歓迎です!Issueを作成するか、プルリクエストを送ってください。

連絡先

  • 不具合、機能改善要望については、GitHubのIssuesへお願いします。

Clone this wiki locally