Repository navigation
ScoreModule
このモジュールは、Minecraft Bedrock Edition の Script API を使用して、スコアボードの操作、チーム分け、プレイヤー数のカウント、ブロック操作、アイテム操作など、ゲームプレイを拡張するための様々なコマンドを提供します。
- スコアボードのリセット、値のコピー、削除(フォーム/一括)を行います。
- プレースホルダーを使用して、動的な値をスコアボードに設定できます。
- 指定された数値リストからランダムに1つを選び、スコアボードに設定します。
- 指定した条件(タグ、人数)に基づいてプレイヤーをチーム分けし、スコアボードに記録します。
- 指定したタグを持つプレイヤーの数に応じて、異なるコマンドを実行します。
- プレイヤーが開いているフォームを強制的に閉じます。
- プレイヤーのタグを変更します。
- 指定座標のブロックを別の座標にクローン(複製)します。
- 指定座標のコンテナ(チェスト、樽など)にアイテムを設定します。
- 指定座標に、指定されたブロックをランダムな比率で設置します。
- 指定範囲にアイテムをランダムにドロップさせます
機能: 指定したスコアボードのスコアをリセットする、または、すべてのスコアボードのスコアをリセットします。
コマンド:
/scriptevent ws:score resetScore <スコアボード名|-all>
引数:
-
<スコアボード名>: リセットするスコアボードの名前。 -
-all: この引数を指定すると、すべてのスコアボードがリセットされます。
例:
-
my_scoreboardという名前のスコアボードをリセットする:/scriptevent ws:score resetScore my_scoreboard -
すべてのスコアボードをリセットする:
/scriptevent ws:score resetScore -all
機能: 指定された数値の中からランダムに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
機能: 指定したスコアボードの値を 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}
機能: 指定された座標に、指定されたブロックをランダムな比率で設置します。
コマンド:
/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}]}
機能: 指定された範囲内に、指定されたアイテムをランダムな比率でドロップさせます。
コマンド:
/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へお願いします。