カスタムディメンジョンについてメモ書き
カスタムディメンジョンとは
ネザーやエンドのような、別の世界(ディメンジョン)を追加できる1.16.2以降で追加されるdatapackの新要素。バイオームや地形のカスタマイズは、複雑なのでまた別途、記事にすると思います。
参考 : Custom dimension – Official Minecraft Wiki
● 注意 ● この記事はSnapshotをベースに書いています。なので、内容に正確性はありません。 また、かなり複雑な機能のため、初心者バイバイとなっております。
配置場所
カスタムディメンジョンを生成するためには、次にファイルを作成する必要があります。
● ディメンジョンの基本設定 (バニラの設定を使うなら不要) saves/datapacks/(データパック名)/data/(名前空間)/dimension_type/(ディメンジョン).json ● ディメンジョンの詳細設定 saves/datapacks/(データパック名)/data/(名前空間)/dimension/(ディメンジョン).json
ディメンジョンの基本設定
バニラで用意されている定義を使う場合は、この設定は不要です。
{ "has_raids": false, "logical_height": 256, "infiniburn": "minecraft:infiniburn_overworld", "ambient_light": 0.0, "piglin_safe": false, "bed_works": true, "respawn_anchor_works": false, "ultrawarm": false, "natural": true, "shrunk": false, "has_skylight": true, "has_ceiling": false }
パラメータ | 内容 | 型 |
---|---|---|
has_raids | 不吉な予感のエフェクトで襲撃が発生するか | bool |
logical_height | プレイヤーが移動できる最大の高さ | number |
infiniburn | 燃え続けるブロックのタグ minecraft/tags/blocks/infiniburn_overworld.json のこと |
string |
ambient_light | ディメンジョンの明るさ (デフォルトは0.5) | number |
piglin_safe | ピグリンがゾンビ化するか | bool |
bed_works | ベッドが機能するか | bool |
respawn_anchor_works | リスポーンアンカーが機能するか | bool |
ultrawarm | ネザーのように水が蒸発し、スポンジが乾き、溶岩が流れやすくなるか | bool |
natural | コンパスなど通常世界で機能する内容を有効にするか | bool |
shrunk | ネザーのようにポータル間の距離を1ブロック8mとして扱うか | bool |
has_skylight | ディメンジョンに空があるか | bool |
has_ceiling | ディメンジョンに天井があるか | bool |
バニラで用意されている定義
ディメンジョンの詳細設定
{ "type": "custom:original", "generator": { (ディメンジョンの生成設定) } }
パラメータ | 説明 | 型 |
---|---|---|
type | ディメンジョンのタイプ (名前空間)/dimension_type/に配置したファイル名かデフォルトのもの。 |
string |
generator | ディメンジョンの生成設定 | object |
ディメンジョンの生成設定
{ "seed": 0, "type": "minecraft:noise", ★ 凸凹の地形を作る場合は"minecraft:noise"を指定 "settings": "minecraft:overworld", "biome_source": { (バイオームの生成設定) } }
パラメータ | 説明 | 型 |
---|---|---|
seed | ワールドのシード値 | number |
type | ディメンジョンのタイプ (minecraft:noise か minecraft:flat) - noise : 通常のワールドのような凸凹の地形を作る - flat : フラットワールドのような平面の地形を作る |
string |
settings | ディメンジョンの生成ルール。 settingsで指定できる内容は後述。 |
string / object |
biome_source | バイオームの生成設定 | object |
settings でテンプレートのような地形を設定する
設定できる値 | 内容 |
---|---|
minecraft:overworld | 通常のワールドのような地形にする |
minecraft:amplified | 高低差をかなりつけた通常のワールドのような地形にする |
minecraft:nether | ネザーのような地形にする |
minecraft:caves | 地下世界のような地形にする |
minecraft:end | エンドのような地形にする |
minecraft:floating_islands | 浮島が複数あるような地形にする |
任意の地形も生成できるけども、それはまた今度書きます。
バイオームの生成設定
バニラのようなバイオームを設定する
{ "seed": 0, "type": "minecraft:vanilla_layered", "large_biomes": false }
パラメータ | 内容 | 型 |
---|---|---|
large_biomes | 各バイオームを広くするかどうか - true: 広くする - false: 通常通り |
bool |
エンドのようなバイオームを生成する
{ "seed": 0, "type": "minecraft:the_end" }
1つだけのバイオームを生成する
{ "seed": 0, "type": "minecraft:fixed", "biome": "minecraft:plains" }
パラメータ | 内容 | 型 |
---|---|---|
biome | バイオームの種類 F3で出てくるBiomeを指定すれば良い |
string |
バイオームを正方形で生成する
{ "seed": 0, "type": "minecraft:checkerboad", "biomes": [ "minecraft:plains", "minecraft:jungle", "minecraft:desert" ], "scale": 2 }
パラメータ | 内容 | 型 |
---|---|---|
biomes | バイオームの種類 (3つ以上) F3で出てくるBiomeを指定すれば良い |
array( string ) |
scale | 各バイオームのサイズ(指定した値 x 2チャンク) 1なら2チャンク、8なら16チャンク |
number |
バイオームを好き勝手に生成する
{ "seed": 0, "type": "minecraft:multi_noise", "biomes": [ { "biome": "minecraft:plains", "parameters": { "altitude": 0.00, "temperature": 0.00, "humidity": 0.00, "weirdness": 0.00, "offset": 0.00 } } ] }
パラメータ | 内容 | 型 |
---|---|---|
biomes | バイオームのリスト | array( object ) |
biome | バイオームの種類 F3で出てくるBiomeを指定すれば良い |
string |
parameters | バイオームが適用される条件 生成されたワールドの各ポイントで、 最も条件に近いバイオームが選択される |
object |
parameters.altitude | 高さ (-1.0 ~ 1.0) 1.0 に値が近ければ近いほど高い位置に生成される バニラの山なら0.7、-0.45なら海 |
number |
parameters.temperature | 温度 (-1.0 ~ 1.0) 1.0 に値が近ければ近いほど温度の高い場所に生成される バニラのサバンナなら0.6、タイガなら-0.6 |
number |
parameters.humidity | 湿度 (-1.0 ~ 1.0) 1.0 に値が近ければ近いほど湿度の高い場所に生成される バニラのジャングルなら0.75、砂漠なら-0.75 |
number |
parameters.weirdness | 生成されにくさ (-1.0 ~ 1.0) 1.0 に値が近ければ近いほど生成されにくい バニラのキノコ島なら0.8、平原なら-0.2 |
number |
parameters.offset | 他のバイオームとの重なり具合 (0.0 ~ 1.0) 1.0 に値が近ければ近いほど他のバイオームと重なる バニラは基本0.0、ジャングルの端なら0.1 |
number |
ディメンジョンに移動する方法
直接ディメンジョンには行けないので、コマンドで移動する必要がある。
/execute in (名前空間):(ディメンジョン) run tp @s ~ ~ ~
dataコマンドについてのざっくり?解説
- dataコマンドとは
- dataコマンドの形
- data get ~ (データを表示する)
- data merge ~ (データを合体する)
- data modify ~ (データを変更する)
- data remove ~ (データを削除する)
- まとめ
dataコマンドとは
エンティティ、ブロック、ストレージなどのNBTデータを書き換えるコマンドです。
NBTデータってなに?って人はWikiを見てね。
今回はdataコマンドがメインなので、どのエンティティに何のNBTが指定できるかとか、そういうのは無しでやります。
むしろそういうのが知りたいんだよ!って人はここを見てね。(更新されてるのかどうか知らないけども)
コマンド/データタグ - Minecraft Japan Wiki - アットウィキ
そして、dataコマンドの日本語のWikiを見たら、めっちゃ情報が古くてびっくりしたよ。ちょっと今回は詳しめに書いていくので、長くなります。
dataコマンドの形
では、はじめに、dataコマンドを1つにすると下みたいになります。
data <get|merge|modify|remove> <entity|block|storage> <target> <targetPath> (append|insert <index>|merge|prepend|set) <from <entity|block|storage> <target> <targetPath>|value <value>>
まだ逃げないでください!ここから簡単に説明していきますから!
まず、dataコマンドで「やること」は4つに分かれます。
- data get ~
→ 指定した(NBT)データを表示! - data merge ~
→ 指定した(NBT)データと合体! - data modify ~
→ 指定した(NBT)データを変更! - data remove ~
→ 指定した(NBT)データを削除!
ざっくりと説明するとこんな感じです。
さらにその後に下のような感じで「対象」がくっついてきます。
data <やること> entity <対象のエンティティ> ~
→ エンティティの(NBT)データに何かする! (ただし、1人限定なので、@pや[limit=1]を使おう)data <やること> block <対象のブロックの座標> ~
→ ブロックの(NBT)データに何かする! (ただし、ブロックエンティティにしか使えません)data <やること> storage <対象のストレージ名(好きな名前)> ~
→ ストレージの(NBT)データに何かする!
そして「何に対して」操作をするかをくっつけます。
- data <やること> <対象> <このデータ!>
例えば、「自分」の「インベントリ」を全部「表示」したいなら、こんな感じ!
data get entity @p Inventory
基本はこれだけなので、それぞれの「やること」について説明していきましょう。
data get ~ (データを表示する)
まずは何をするにも、どんな風に反映されたか確認したいですよね。というわけで、getから。
※ 必ず /gamerule sendCommandFeedback true にしておいてください。
※ 詳しく知りたい方は、この手順通りに実際にためしてください。
表示するのはシンプルです。
data get <対象> (データ)
ちなみに、全表示したい場合は(データ)は書かなくてもOKです。
例えば、シンプルなチェストとかでやってみましょうか。
data get block <チェストのある座標>
こうすると下みたいな情報が取れましたかね?
{ id: "minecraft:chest", x: -100, y: 60, z: 100, Items: [] }
例えば、idだけほしい!って時は下で取れます。
data get block <看板のある座標> id
さらに詳しく表示してみる
では、チェストの中に石をど真ん中に置いてみましょう。
そして、またgetしてみてください。そうするとItemsが下みたいになってると思います。
{ Items: [ { Slot: 13b, id: "minecraft:stone", Count: 1b } ] }
追加されたみたいです!では、ピンポイントでこの情報だけを取りましょう。
Items[0]を指定するとチェストの左上から数えて0番目(実質1番目)のアイテム情報が取れます。
data get block <看板のある座標> Items[0]
そうすると、下のように取れましたかね?
{ Slot: 13b, id: "minecraft:stone", Count: 1b }
さらにさらに詳しく表示してみる
では、もっと深く、13番目にあるアイテムのidを表示してみましょう。こうします!
data get block <看板のある座標> Items[{Slot:13b}].id
うまく行けば、"minecraft:stone"が表示されたと思います。
ちょっと大雑把に説明するとこういうことができます。
Items ← チェストのアイテムリストをください Items[0] ← チェストの左上から0番目のアイテムをください Items[-1] ← チェストの最後(右下)から1番目のアイテムをください Items[0].id ← チェストの0番目のアイテムのidをください Items[{Slot:13b}] ← チェストの{Slot:13b}と書いているアイテムをください Items[{Slot:13b}].id ← チェストの{Slot:13b}と書いているアイテムのidをください
ここまででなーんとなくふーんってなったらOKです!
data merge ~ (データを合体する)
!! \合体/ !! ということでmergeです。上で説明したチェストを使います。
まずはこうしてみましょう。
data merge block <チェストの座標> {Items:[{id:"minecraft:stone",Count:1b}]}
チェストの左上に石が出現しましたでしょうか?では、続いて。
data merge block <チェストの座標> {Items:[{Slot:8b,id:"minecraft:stone",Count:1b}]}
今度はチェストの右上に石が出現しましたでしょうか?
というわけで、mergeはもともとのデータと合体させるんですけど、他のget, modify, removeと違って、<データ>のところは合体させるNBTを書く必要があるんです。
ただ、mergeはちょっと使いづらいんですよね。全部書き換えちゃうから。
ストレージで効果を発揮するmerge
mergeはストレージを使うと一気に使い始めます。
ストレージは形式さえ守っていれば、自由にかけるので、こういうこともできます。
data merge storage test {id:101,aaa:"わーい",bbb:true}
そうして設定したものに、下のコマンドを実行します。
data merge storage test {aaa:"やーい",ccc:110}
そして、getで全部表示してみると、こんな感じになります。
{ id: 101, aaa: "やーい", bbb: true, ccc: 110 }
もともとあったデータ同士で合体するのです!
ストレージに関しては過去のブログで詳しく書いてるので、気になる方はそちらを見てね。
data modify ~ (データを変更する)
私の中で最も使うdataコマンドmodify。ただし、こいつだけやたらめったら長くなる!
modifyはNBTの後に、さらに下がくっついてきます。
data modify <対象> <データ> prepend ~
→ <データ>がリストなら、リストの一番最初に追加する
data modify <対象> <データ> append ~
→ <データ>がリストなら、リストの一番最後に追加する
data modify <対象> <データ> insert <番号> ~
→ <データ>がリストなら、リストの?番目に追加する(0番目が一番最初です)
data modify <対象> <データ> merge ~
→ <データ>がオブジェクトなら、合体する
data modify <対象> <データ> set ~
→ <データ>を書き換える
変更方法は5種類ありますが、私はsetを使うことがほとんどです。
ちなみにリストは [ ] のことで、オブジェクトは { } のことです。
そして、さらにこれらの後に、どういうデータで変更するのかがくっつきます。
data modify <対象> <データ> <変更内容> from <対象> <データ>
→ fromの後の<対象>の<データ>を追加、もしくは<対象>の<データ>に変更する
data modify <対象> <データ> <変更内容> value <値>
→ valueの後の<値>に変更する
fromの方は他のNBTをコピー!valueの方は好きな内容に変更!って感じです。
modifyを一通り試してみる
ストレージで、実際にやってみます。まずはストレージを用意します。
data merge storage test {aaa:[2,3,4],bbb:{n:10,m:100},ccc:0}
まずは先頭に追加しましょう。aaaは [ ] なので、リストです。なので、prepend, append, insertが使えます。
data modify storage test aaa prepend value 100
そしたらgetで表示してみましょう。[100, 2, 3, 4] が表示されたらOK!
data get storage test aaa
次は最後に追加しましょう。
data modify storage test aaa append value -100
そして、getで表示すると、[100, 2, 3, 4, -100] が表示されるはず!
次は途中に追加しましょう。100が0番目なので、3番目になる位置(3の後)に追加しましょう。
data modify storage test aaa insert 3 value 9999
getで表示すると、[100, 2, 3, 9999, 4, -100] が表示されましたかね?
では、合体を試しましょう。基本はdata mergeと同じです。
最初に用意したストレージのbbbはオブジェクトなので、そこにマージしましょう。
data modify storage test bbb merge value {n:200,abc:"あいう"}
getで表示してみましょう。{n: 200, m: 100, abc: "あいう"} になりましたかね?
data get storage test bbb
最後に、変更を試しましょう。
data modify storage test ccc set value 0
getで表示すると、0 になりましたよね?
data get storage test ccc
ちなみにsetに関しては新規追加もいけるので、下みたいに値を追加できます。
data modify storage test new set value "新しい!"
valueばっかりだったので、fromの方も一つだけ。チェストにアイテムをいれて下のコマンドをやってみよう!
data modify storage test ccc set from block <チェストの座標> Items
getするとチェストのアイテムリストが表示されるはず!
data remove ~ (データを削除する)
ようやく最後のやつです。さっくり流します。remove。
使い方はgetと同じような感じになります。表示する代わりに削除ってことですね。
data remove <対象> <データ>
では、さっきまで使っていたストレージのaaaを削除しましょう。
data remove storage test aaa
getしてみてください。消えましたかね?
まとめ
dataコマンドはNBTデータをアレコレするやつ!
dataコマンドは大きく分けて4種類!
- 表示する get
- 合体する merge
- 変更する modify
- 削除する remove
dataコマンドは複雑で難しい!!!
Advancementを使ったイベント検知のサンプル集
Advancement とは
マイクラの進捗のことですね。
何らかのプレイヤーが行った動き(トリガー)によって、進捗が開放されるアレです。
今回はそれを使って、イベント検知しちゃおうってブログです。
基本的な処理の流れ
こんな感じでやっていきます。
- Advancementでトリガーを設定!
- 勝手にトリガーが検知!
- functionを呼び出す!
- /advancement コマンドで取得した進捗をなかったことにする!
- やりたいことをやる!
では、まずはAdvancementファイルを作っていきましょう。
root.jsonを追加する
まずは準備として、以下にファイルを作りましょう。
datapacks/<データパック>/data/<パック>/advancements/<名前>/root.json
そして、root.jsonはこんな感じで書いちゃいましょう。ちなみにroot.jsonは必須ファイルです。
※ プレイヤーが見ない部分なので極限まで削ってます。こだわりたい方はこだわってください。
{ "display": { "title": "", "description": "", "icon": { "item": "air" } }, "criteria": { "": { "trigger": "impossible" } } }
進捗を追加する
では、イベント取得用の進捗を追加しちゃいましょう。
datapacks/<データパック>/data/<パック>/advancements/<名前>/<イベント>.json
そして中身はこちら。
※ 極限まで削ってます。以下略。
{ "parent": "<パック>:<名前>/root", "display": { "title": "", "description": "", "icon": { "item": "air" }, "show_toast": false, "announce_to_chat": false, }, "criteria": { ★ ここは後で説明します。 }, "rewards": { "function": "★ 呼び出したいfunctionファイル(x:exec みたいな)" } }
何を追加したのかをざっと説明。
- parent: この進捗の一つ前の進捗を指定。今回は全部rootにつなげます。
- display.show_toast: 右上に表示するかどうか。もちろん表示しないので、false。
- display.announce_to_chat: チャットに表示するかどうか。もちろん表示しないので、false。
- rewards.function: 進捗が達成されたときに呼び出すfunctionファイル。
トリガーを書く
はい。今回のメインです。前のcriteriaに指定するのですが、詳しく説明を始めると膨大なので、私が使いそうなやつだけピックアップ!
他のトリガーや詳しい条件など見たい方はこちらを見てね。
https://minecraft.gamepedia.com/Advancement/JSON_format
特定の村人に話しかけた
「村人A」という名前がついた村人に話しかけたときにイベント発生させる例。
1.16で追加されたトリガー。
{ "criteria": { "": { "trigger": "player_interacted_with_entity", "conditions": { "entity": { "type": "villager", "nbt": "{CustomName:'{\"text\":\"村人A\"}'}" } } } } }
ちなみに村人は下のコマンドで召喚すると、取引画面が出ません。
summon villager ~ ~ ~ {NoAI:true,Offers:[],CustomName:'"村人A"'}
特定のアイテムを使った
event:special というタグがついたリンゴを食べたときにイベント発生させる例。
{ "criteria": { "": { "trigger": "consume_item", "conditions": { "item": { "item": "apple", "nbt": "{event:special}" } } } } }
ちなみに上のアイテムは下のコマンドで手に入ります。(アイテムなら任意のタグがつけられます)
give @p apple{event:special}
特定のモブにダメージを受けた
スケルトンが打った矢でダメージ受けたときにイベント発生させる例。
{ "criteria": { "": { "trigger": "entity_hurt_player", "conditions": { "damage": { "source_entity": { "type": "skeleton", "direct_entity": { "type": "arrow" } } } } } } }
特定のモブに倒された
クリーパーの爆発で倒されたときにイベント発生させる例。
{ "criteria": { "": { "trigger": "entity_killed_player", "conditions": { "entity": { "type": "creeper" }, "killing_blow": { "is_explosion": true } } } } }
特定のモブにダメージを与えた
プレイヤーにダメージを与えたときにイベント発生させる例。
{ "criteria": { "": { "trigger": "player_hurt_entity", "conditions": { "entity": { "type": "player" } } } } }
特定のモブを倒した
ダイヤ剣でモブを倒したときにイベント発生させる例。
{ "criteria": { "": { "trigger": "player_killed_entity", "conditions": { "killing_blow": { "source_entity": { "nbt": "{SelectedItem:{id:\"minecraft:diamond_sword\"}}" } } } } } }
特定のブロックを置いた
石をxが-100、yが1~10の間、zが100~110の間に置いたときにイベント発生させる例。
{ "criteria": { "": { "trigger": "placed_block", "conditions": { "item": { "item": "stone" }, "location": { "position": { "x": -100, "y": { "max": 10, "min": 1 }, "z": { "max": 110, "min": 100 } } } } } } }
functionファイルで進捗を消す
イベントが一回しか取得できないのは困りますよね。
ということで、呼び出された瞬間に進捗をなかったことにしちゃいましょう。
# 呼び出されたので進捗を消す advancement revoke @s only <パック>:<名前>/<イベント> # 消したらなにかする tellraw @s "Hello World!"
@sを使っていますね。そうです。進捗を達成したプレイヤーがfunctionファイルを呼び出したことになるので、@sが使えちゃいます!
トリガーの種類も条件もいっぱいある
ということで、進捗でイベントを取得してコマンドを実行する方法でした。
トリガーは数十種類ありますし、条件もかなり大量にあります。あなたがやりたいことが見つかるかも?
1.16について私目線でざっくり見ていく
- Minecraft JE ver1.16が来ましたね
- 参考
- 追加要素
- 変更要素
- コマンド
- 進捗
- Predicate
- タグ
- テキストJSON
- カスタムディメンジョン (実験段階)
- ゲームシステム
- 個人的に熱い!と思った追加・変更点
Minecraft JE ver1.16が来ましたね
ということで、私が気になったポイントにのみ絞り込んでざっくり、コメントしながら書き上げていく誰得ブログ始まります。
[注意] 全部の変更点を上げたりしません。気になったところだけです。 正確性もありません。キノミキノママ、書いていきます。 詳しいことを知りたい方は、ご自身で調べることを推奨します。
参考
https://minecraft-ja.gamepedia.com/Java_Edition_1.16
https://minecraft.gamepedia.com/Java_Edition_1.16
追加要素
追加部分は基本的に全部あげます。ちなみにイチオシポイントは太字にしてます。
ブロック
- 古代の残骸:ほぼ新しい原木にしか見えない
- 玄武岩:いい石床模様
- 磨かれた玄武岩:ちょっと変わった原木に見える
- ブラックストーン関係:建材いっぱい増えた!
- 鎖:これ、建材にめっちゃ使えそう
- ネザーレンガ新種:ちょっと足りていなかった建材が増えた!
- 真紅のキノコ・歪んだキノコ:キノコ増えたね
- 真紅のナイリウム・歪んだナイリウム:めっちゃきもい草ブロック
- その他真紅&歪んだナイリウム系:オークの原木などと同様に大量に木造建材が増えたね! テクスチャいっぱい割当放題!
- 泣く黒曜石:パーティクルの出る光源ブロック
- 菌糸:見た目めっちゃきもいけど建材が増えた!
- ロードストーン: コンパスを使うとコンパスがそこを指すようになる、配布マップで使えそう
- ネザー金鉱石:ネザーで金塊拾えるよ
- ネザー系の草:しだれツタやねじれツタは地味に有能。はしごやツタみたいに壁に沿わせなくても上り下りできるようになった!
- クォーツレンガ:これが欲しかったんでしょ?ってやつ
- リスポーンアンカー:ネザーでのベッド的役割。ネザー以外で使うと爆発するぜ
- シュルームライト:光源がふえたぞ!
- 魂(ソウル)系:光源がなんかめっちゃ増えたぞ!
- ソウルソイル:着火すると青い炎がつくので、なにかに使えそう
- 的:見た目がアレだけど、マトだよ。矢を打ち込むとレッドストーン信号がでるのは強い!
ブロックめっちゃ増えてない?
アイテム
- ロードストーンコンパス:ロードストーンを指し示すコンパス。これは使えそうですぞ
- Pigstep レコード:久々の新曲?
- ネザライト系装備&ツール:装備とツールが増えた!しかもダイヤモンドよりも強い!しかも溶岩で燃えない!
- ネザライトインゴット:溶岩で燃えないインゴット!
- ネザライトの欠片:溶岩で燃え(略
- ブタの旗の模様:春の新色でました
- スポーンエッグ:ホグリン・ピグリン・ストライダー・ゾグリンが仲間入り
- 歪んだキノコ付きの棒:ストライダーを操作できる棒だが、きっとニンジン棒と同じ使われ方をするでしょう
モブ
- ホグリン:敵モブ。子供アリ。通常ワールドに来るとゾグリン(ゾンビホグリン)に変化!
- ピグリン:大人は敵モブ。子供は友好モブ。通常ワールドに来るとゾンビピッグマン(ゾンビピグリン)に変化!ピグリンの前に金インゴットを落としたり、持って右クリックするとアイテムをくれる。
- ストライダー:友好モブ。水や雨でダメージを受ける。溶岩の「上」を移動する。
- ゾグリン:ホグリンゾンビ。
エンチャント
- ソウルスピード:ソウルサンドやソウルソイルの上ならスピードアップ!
変更要素
ブロック
- 鐘:いろんな発射物で当たるとなるようになった
- 焚き火:発射物が炎を通過すると着火するようになった。火がついてないときでも食べ物をおけるようになった
- ディスペンサー:鞍や馬鎧をつけられるようになり、ラマにはカーペットをつけられるようになり、ムーシュルームやスノーゴーレムにハサミを使えるようになった
- 炎:ルートテーブルが追加された。炎を消すとアイテムドロップさせられるようになったみたい
- レッドストーンダスト:これは別枠で。
- ストラクチャーブロック:最大サイズが各軸32から48に拡張された。やったぜ!
- TNT:燃えた着火物が当たると着火するようになった。ギミックに使えるやも?
- 塀:板ガラスと鉄格子がつながるようになった。縦方向に柱があるところは全部柱になった
アイテム
- クワ:効率強化・幸運・シルクタッチがつけられるようになった。 スポンジ、濡れたスポンジ、葉などなどいくつかのブロックで効果あり。
- 時計とコンパス:レシピブックや村人の取引画面で、機能が無効化された。要するに正確な時間と場所を示さなくなった。
モブ
- アイアンゴーレム:村人の職業や労働時間に関係なくスポーンするようになった
- スケルトンホース・ゾンビホース:リードでつなげられるようになった
- 中立モブ:「AngryAt」のデータタグで誰を対象に起こるのか設定できるようになった。
エンティティ
全エンティティ:UUIDがUUIDMost & UUIDLeastから、{UUID:[I;000000,000000,000000,000000]}みたいな形式になった。これでUUIDを取り出しやすくなるね!
額縁:「Invisible」額縁を透明にするデータタグと「Fixed」額縁を壊せなく、中のアイテムを削除できなくなるデータタグが追加された!!
レッドストーンダスト(要点をまとめると)
コマンド
追加コマンド
今回はコマンドの追加が少なくて、製作中の配布マップに優しい仕様!
/attribute
面倒くさいattributeがコマンドになったぞ!
詳細は、また別でいつか書くかな。
/locatebiome
特定のバイオームを探すコマンド。
/gamerule forgiveDeadPlayers
敵視されている状態でプレイヤーが死んだときに、敵視を解除するかどうか設定。
/gamerule universalAnger
キレてるモブがキレさせたプレイヤーだけでなく、全プレイヤーにキレはじめる設定。
変更コマンド
/spawnpoint
全ディメンジョンで実行できるようになった
/summon
attributeの属性の名前が全部変更になっているので、正しい名前にしないと召喚できなくなった
/clear
インベントリのクラフト部分でもアイテムを削除するようになった!!!
/spreadplayers
高さ制限を付ける機能が追加された
/spreadplayers <center> <spreadDistance> <maxRange> under <maxHeight> <respectTeams> <target>
追加オブジェクト種別
custom:strider_one_cm
ストライダーで移動した距離。使い所は限られそう。
追加パーティクル
- ash: 垂れてくる黒い点
- crimson_spore:めっちゃ散らばる赤い点
- soul_fire_flame:青い火
- warped_spore:めっちゃ散らばる黒い点
- dripping_obsidian_tear:垂れてくる紫の点
- falling_obsidian_tear:垂れてくる紫の点
- landing_obsidian_tear:垂れてくる紫の点
- soul:青い魂がくるっと回って消えていく(かわいい)
進捗
追加トリガー
え?今回、使えるトリガーめっちゃ多くないですか?
smokey
焚き火の煙にあたったら作動!
なんか呪い解除とかそういうイベントに使えそう?
thrown_item_picked_up_by_entity
プレイヤーが投げたアイテムを別のプレイヤーが拾ったときに作動!
マルチゲーム関係のイベントに使えそう
player_generates_container_loot
プレイヤーがルートテーブルが設定されてるコンテナを開いたときに作動!
特定のチェストを開いたらイベントとかよくあるよね。使えそう
item_used_on_block
プレイヤーがブロックを操作したときに作動!
ドアを開閉したり、レバー起動したりでも発動するようなので、使えそう
player_interacted_with_entity
プレイヤーがエンティティになにかしたときに作動!
よくある村人に話しかけたら、セリフが出るコマンドに革命が起こる!しかもどのエンティティにやったのか、どういうアイテムを持ってやったのかも含められるから、使いどころしか無い!
Predicate
entity_properties
エンティティ関係の条件に以下の2つが追加されたよ!
- vehicle:なにかに乗っている。馬やボートに乗ってる、降りてるが判断できるのはありがたい!
- target:モブが他のエンティティを敵視しているか判定できるよ!
- fishing_hook:どこで釣りをしていたのか判定できるのかな?
リスト指定
下のようにすると全条件を達成しているかどうかを判定できるようになった!!!(AND判定)
[ ★ トップがリストになっている { "condition": "minecraft:entity_properties", : : }, { "condition": "minecraft:random_chance", : : } ]
タグ
追加ブロック&アイテムタグ
- crimson_stems:真紅系のブロック・アイテム
- gold_ores:金鉱石関係のブロック・アイテム
- logs_that_burn:木炭を作れるブロック・アイテム
- non_flammable_wood:かまどの燃料に使えない木材
- piglin_repellents:ピグリンが拾わないブロック・アイテム
- soul_fire_base_blocks:魂の火が着くブロック・アイテム
- warped_stems:歪んだ系のブロック
追加ブロックタグ
- beacon_base_blocks:ビーコンの下に置いて作動するブロック
- campfires:焚き火関係
- climbable:登れるブロック
- fence_gates:フェンスゲート
- fire:炎
- guarded_by_piglins:プレイヤーが壊すとピグリンがキレるブロック
- hoglin_repellents:ホグリンが避けるブロック
- infiniburn_end:エンドで炎が燃え続けるブロック
- infiniburn_nether:ネザーで炎が燃え続けるブロック
- infiniburn_overworld:通常世界で炎が燃え続けるブロック
- nylium:ナイリウム
- pressure_plates:感圧板
- prevent_mob_spawning_inside:モブがスポーン出来ないブロック
- soul_speed_blocks:ソウルスピードのエンチャントで加速するブロック
- stone_pressure_plates:石関係の感圧板
- strider_warm_blocks:このブロック以外の場所にいるとストライダーは紫色になる
- wall_post_override:塀の上に置くと、塀に柱を追加するブロック
- wart_blocks:ウォート系のブロック
- wither_summon_base_blocks:ウィザー召喚に使えるブロック
追加アイテムタグ
- beacon_payment_items:ビーコンを起動するためのアイテム
- creeper_drop_music_discs:クリーパーがドロップするアイテム
- furnace_materials:かまどを作るために使えるアイテム
- piglin_loved:ピグリンが好きなアイテム
- stone_tool_materials:石ツールを作るために使えるアイテム
追加エンティティタグ
- impact_projectiles:コーラスフルーツなどを遠隔で壊せるエンティティ
テキストJSON
テキスト関係のJSONの変更点です。
色
色がカラーコードで指定できる用意なった!!!
/tellraw @p {"text":"test","color":"#FF00FF"}
フォント
リソースパックに入れた好きなフォントを使えるようになった!!!
/tellraw @p {"text":"test","font":"emoji"} ★ emojiはリソースパックに追加してね
hoverEvent
valueの代わりにcontentsが使えるようになった。
/tellraw @p { "text": "test", "hoverEvent": { "action": "show_text", "contents": { "text": "見たことのないアイテムだ!", "bold": true } } }
カスタムディメンジョン (実験段階)
ついにディメンジョンをカスタムできるようになった!強い!!!
ただし、まだ実験段階なので、ワールド読み込み時に警告がでます。
ファイルの設定内容はこちらを見てね。
https://minecraft.gamepedia.com/Custom
サンプルはここでいっぱいダウンロードして見ることができそう。
datapacks/data/minecraft/dimension/<名前>/<ディメンジョン名>.json がそのファイルだよ。
https://www.planetminecraft.com/data-packs/world-generation/?op1=50
ちなみにそのディメンジョンに行くには、下のコマンドで移動できます。
/execute in <名前>:<ディメンジョン名> run tp @p ~ ~ ~
ゲームシステム
ワールド生成
難易度やゲームルール、データパックの追加などを行えるようになった!
ゲームモードの切り替え
「F3 + F4」でゲームモードが簡単に切り替えられるようになった!素晴らしい!
エンティティの描画距離
50%~500%でモブが描画されるかどうか設定できるようになった。軽量化に役立つね!
釣り
宝物は浮きの周り、5 x 4 x 5以内が水源と空気(スイレンの葉はOK)しかない場所じゃないと釣れなくなった。
ルートテーブルで何かしら指定していた方は要注意!
個人的に熱い!と思った追加・変更点
- ネザライト系装備&ツールの追加
- 額縁の「Invisible」と「Fixed」タグの追加
- /attributeコマンドの追加
- /clearコマンドでインベントリのクラフト部分からも削除
- 進捗のplayer_interacted_with_entityのトリガー追加
- PredicateのAND判定
- カスタムディメンジョン
ってところですかね?
Attribute(属性)のメモ書き
Attribute(属性)とは
プレイヤーやモブなどのエンティティが、特定箇所に装備しているときだけ発動する効果のこと。
装備している
とは以下のときなので、インベントリに入れているだけでは発動しません。
- メインハンドに持っている
- オフハンドに持っている
- 頭に装備している
- 胴に装備している
- 腰に装備している
- 脚に装備している
ここ以降はAttributeは属性と言い換えてメモしていきます。
属性の基本形
装備品に指定する場合
{ AttributeModifiers:[ { Slot: "mainhand", AttributeName: "generic.attackDamage", Amount: 20.0, Operation: 0, UUIDMost: 1L, UUIDLeast: 1L } ] }
パラメータ | 説明 | 定義 | 必須 |
---|---|---|---|
Slot | 効果を発動させる装備場所 - メインハンド : mainhand - オフハンド : offhand - 頭 : head - 胴 : chest - 腰 : feet - 脚 : legs |
string | |
AttributeName | 発動する効果 | string | ● |
Amount | 発動する効果の値・倍率 | number | ● |
Operation | Amount の計算方法 |
number | |
UUIDMost / UUIDLeast | 属性の固有の値 | number(Long) | ● |
モブ側のデフォルト値を変更する場合
{ Attributes:[ { Name: "generic.attackDamage", Base: 1.0 } ] }
パラメータ | 説明 | 定義 | 必須 |
---|---|---|---|
Name | 発動する効果 | string | ● |
Base | 基本となる値 | number | ● |
Attribute NameとNameに指定できる属性
各属性には最小値と最大値が設定されており、それを超える値は最大値(最小値)に設定されるので注意。
AttributeName / Name | 効果 | デフォルト値 |
---|---|---|
generic.maxHealth | ハートを増減させる(1につき0.5個) | 20.0 |
generic.followRange | モブの攻撃対象の検出距離 | 32.0 |
generic.knockbackResistance | ノックバックの抵抗確率 | 0.0 |
generic.movementSpeed | 移動速度 | 0.7 |
generic.attackDamage | 攻撃ダメージ(1につき0.5個) | 1.0 |
generic.armor | 防御ダメージ | 0.0 |
generic.armorToughness | 防具の耐久力 | 0.0 |
generic.attackKnockback | ノックバック | 0.0 |
generic.attackSpeed | プレイヤーの攻撃クールダウンの時間(秒) | 4.0 |
generic.luck | プレイヤーの運。ルートテーブルなどで使用 | 0.0 |
horse.jumpStrength | 馬のジャンプ力 | 0.7 |
generic.flyingSpeed | オウムの飛行速度 | 0.4 |
zombie.spawnReinforcements | ゾンビ攻撃時に別のゾンビを召喚する確率 | 0.0 |
Amount と Operation について
Attributeを計算する場合にどのような計算方法を使うかを選択できます。
デフォルトは0。
例として、以下の属性を与えた場合の説明をします。
// アイテムA (メインハンドに持つ) { AttributeModifiers:[ { AttributeName: "generic.maxHealth", Amount: 1.0, Operation: ???, UUIDMost: 1L, UUIDLeast: 1L } ] } // アイテムB (オフハンドに持つ) { AttributeModifiers:[ { AttributeName: "generic.maxHealth", Amount: 2.0, Operation: ???, UUIDMost: 2L, UUIDLeast: 2L } ] }
単純に値を追加する : 0
プレイヤーの最大体力のデフォルト値が20なので、
20 (デフォルト) + 1 (アイテムA) + 2 (アイテムB)
の合計値、23(ハート11.5個)が最大体力になります。
元の値に掛けてから足す : 1
プレイヤーの最大体力をベースとすると、
20 (デフォルト) + (20 x 1 (アイテムA)) + (20 x 2 (アイテムB))
となるので、
20 + 20 + 40
の合計値、80(ハート40個)が最大体力になります。
アイテムの説明文としては、+100%などのパーセント表記で表されます。
値に1を足してから掛ける : 2
またもプレイヤーの最大体力をベースとすると、
20 (デフォルト) x (1 + 1 (アイテムA)) x (1 + 2 (アイテムB))
という感じで計算されます。つまり、
=> 20 x 2 x 3 => 20 x 6 => 120
ということで、合計値の120(ハート60個)が最大体力になります。
こちらもアイテムの説明文としては、+100%などのパーセント表記で表されます。
UUID Most / Least について
UUIDとはなにか?
=>たった一つしか存在しないIDのこと
ということで、UUID Most/Least です。この2つはペアになっており、MostとLeastの組み合わせてIDが作られています。例えば、Mostが1L、Leastが2Lならばマイクラ上では下のようなUUIDが作り上げられます。
UUID : 00000000-0000-0001-0000-000000000002
UUIDの制限
UUID Most/Leastはマイナス値だとうまく反映されません。
正確には、反映されるのですがオーバーフローします。要するにバグります。
UUID Most/Leastは-9223372036854775808~9223372036854775807の間で指定できますが、UUID Leastが0だと属性の効果が反映されませんので、注意しましょう。
UUIDは同じ属性の中でぶつかり合う
さて、このUUID。同じ属性同士で同じUUIDを使って両方装備してしまうとどうなるのか。
効果が反映されたり、されなかったりして、バグります。
UUIDさえ異なれば良いので、UUID Mostが一緒でもUUID Leastが異なるなら、セーフです。
逆にUUID Leastが一緒でもUUID Mostが異なるなら、セーフです。
データパックの配布を行う場合は気をつけよう
データパック同士が同じUUIDを使っているとどうなるか。
バグります。ちゃんとIDを決めてあげましょう。
マイクラのテキスト表示のJSONを整理する
- 普通のJSONとマイクラJSONの違い
- テキスト表示する基本パターン
- テキスト表示の「内容関係」のJSON
- テキスト表示の「見た目関係」のJSON
- テキスト表示の「マウスアクション関係」のJSON
- テキスト表示の「連結関係」のJSON
- テキスト表示は面倒
- まとめ
普通のJSONとマイクラJSONの違い
まずは、テキスト表示の前にこちらを見てJSONについて理解をちょっとしておきましょう。
テキスト表示する基本パターン
まず、JSONの話を始める前に表示パターンがいくつかあるので、見ていきましょう。
これらは全てABCD
と表示されます。
- 文字列だけで表示するパターン
tellraw @p "ABCD"
- リストに入れて、文字列を複数、表示するパターン
tellraw @p ["AB","CD"]
- オブジェクトに入れて表示するパターン
tellraw @p {"text":"ABCD"}
- リストに入れて、オブジェクトを複数、表示するパターン
tellraw @p [{"text":"AB"},{"text":"CD"}]
基本的には、文字列かオブジェクトで内容を決めて、複数指定したい場合は、リストって感じですね。
テキスト表示の「内容関係」のJSON
それでは、オブジェクトに指定できるJSONをまとめていきましょう。1つのオブジェクトに「内容関係」のJSONは1つだけ指定できます。
ちなみにJSONの内容は見やすいように書き換えてますので、使うときは改行や空白を削除するように切り替えてくださいね。
プレイヤー名、エンティティ名を表示する
シンプルにエンティティの名前を表示できます。対象が複数いる場合は、クリーパー, ゾンビ, スケルトン
みたいに表記されます。
{ "selector": "@a[team=red]" }
スコアボードの値を表示する
例えば、SCOREというオブジェクトにtestっていうスコアを作った場合は、こんな感じ。
{ "score": { "name": "test", "objective": "SCORE" } }
NBTの値を表示する
ちょっと量が多いので、一覧で見せますね。
{ "nbt": "Inventory[0].id", "entity": "@p", "block": "0 60 0", "storage": "main", "interpret": true }
プロパティ | 説明 | 定義 | 必須 |
---|---|---|---|
nbt | NBTのパス。 | string | ● |
entity | NBTのパスを持っている、エンティティのセレクター。block やstorage と一緒に指定はできない。 |
string | |
block | NBTのパスを持っている、ブロックの座標。entity やstorage と一緒に指定はできない。 |
string | |
storage | NBTのパスを持っている、ストレージ。entity やblock と一緒に指定はできない。 |
string | |
interpret | 表示されるテキストが「テキスト表示のJSON」だった場合に、 そのままのJSONではなく、解析後のテキストとして表示される。 |
bool |
基本はdataのgetと同じような使い方ですね。
interpretについて
さて、一見、読んでもよくわからないinterpret。
例えばこういうテキストのJSONがあったとしましょう。
{ "text":"test" }
それをNBTで指定する場合は、以下のような感じで指定します。
data merge storage aaa {hogehoge:"{\"text\":\"test\"}"} もしくは data merge storage aaa {hogehoge:'{"text":"test"}'}
このhogehogeを表示させたい場合、以下のように書くと{"text":"test"}
が表示されてしまいます。
{ "nbt": "hogehoge", "storage": "aaa" }
できればtest
と表示させたい。そういう時にinterpretを使います。
{ "nbt": "hogehoge", "storage": "aaa", "interpret": true }
割り当てられているキーを表示する
例えば操作説明する際に、プレイヤーごとに使っているキーが違うときがありますよね。
そういうときにコレを使います。
{ "keybind": "key.inventory" }
右側の値部分の一覧はこちら。
Controls – Official Minecraft Wiki
言語ファイルの内容を表示する
バニラやリソースパックに含まれている言語ファイルの内容を表示します。
例えば、以下の用に指定すれば、言語設定が日本語なら目標達成!
が表示され、英語ならGoal Reached!
が表示されます。
{ "translate": "advancements.toast.goal" }
言語ファイルの中身やwithなどを知りたい方はこちら。
テキスト表示の「見た目関係」のJSON
こちらは一気に並べて見てみましょう。「見た目関係」は1つのオブジェクトに全部指定してもOKです。
{ "color": "red", "bold": true, "italic": true, "underlined": true, "strikethrough": true, "obfuscated": true, "font": "minecraft:default" // ver1.16から導入予定 }
プロパティ | 説明 | 定義 |
---|---|---|
color | 文字の色を指定する。指定できる色はこちら。"black" ,"dark_blue" , "dark_green" , "dark_aqua" , "dark_red" , "dark_purple" , "gold" , "gray" , "dark_gray" , "blue" , "green" , "aqua" , "red" , "light_purple" , "yellow" , "white" ver 1.16からはカラーコード #ffffff とかで指定できるようになるみたいですね。 |
string |
bold | 文字を太字にする。 | bool |
italic | 文字を斜めにする。 | bool |
underlined | 文字にアンダーライン(下線)を引く。 | bool |
strikethrough | 文字に打ち消し線(中線)を引く。 | bool |
obfuscated | 文字を難読化する。 | bool |
font | リソースパックのフォントを参照する。 | string |
テキスト表示の「マウスアクション関係」のJSON
テキストをクリックしたり、マウスカーソルを当てたりすることで動作させるJSONです。「マウスアクション関係」は1つのオブジェクトに全部指定してもOKです。
テキストをクリックした時のアクション
{ "clickEvent": { "action": "run_command", "value": "/say test" } }
テキストをクリックした時のアクションaction
はいくつか種類があります。
action
に合わせてvalue
を決めましょう。
action | アクションの内容 | valueの例 |
---|---|---|
open_url | value で指定したURLを開く。開こうとすると、注意画面が出てくる。 |
"https://www.google.com/" |
run_command | value で指定したコマンドを実行する。先頭に / が必要なので注意。 |
"/say test" |
suggest_command | チャット欄にvalue を入力する。 |
"テキスト" |
change_page | 本でのみ使えます。value で指定したページに移動します。 |
"3" |
copy_to_clipboard | クリップボード(Ctrl+C のコピーで一時保存される場所)にvalue で指定した内容をコピーします。 |
"コピー" |
テキストにカーソルを当てた時のアクション
普通にテキストを表示する (show_text)
テキストだけを表示します。
このブログで説明している「内容関係」と「見た目関係」のJSONを指定できますよ。
{ "hoverEvent": { "action": "show_text", "value": {"text": "say"}, // ver 1.16以降で廃止(使えはする) "contents": {"text": "say"} // ver 1.16以降で追加 } }
アイテム説明っぽく表示する (show_item)
インベントリのアイテムにマウスカーソルを当てたような感じの表示を行います。
valueのパラメータは
id
とCount
は必須です。その他はアイテムのNBTを参考にするといいよ。
{ "hoverEvent": { "action": "show_item", "value": "{id:\"minecraft:stone\",Count:1b}", // ver 1.16以降で廃止(使えはする) "contents": { // ver 1.16以降で追加 "id": "minecraft:stone" } } }
エンティティ情報っぽく表示する (show_entity)
/say @p
とかでエンティティ名にマウスカーソルを当てたような感じの表示を行います。
{ "hoverEvent": { "action": "show_entity", "value": "{name:\"CustomName\"}", // ver 1.16以降で廃止(使えはする) "contents": { // ver 1.16以降で追加 "name": "CustomName" } } }
プロパティ | 説明 | 定義 | 必須 |
---|---|---|---|
name | エンティティの名前として表示します。 | \"string\" | |
type | エンティティのタイプとして表示します。minecraft:player など。 |
\"string\" | |
id | エンティティのUUIDとして表示します。00000000-0000-0000-0000-000000000000 みたいなやつ。 |
\"string\" |
value と contents の違いについて
内容的にはほとんど一緒です。テキスト表示で使うJSONはマイクラ式JSONではないので、
{"value": '{name:"CustomName"}'}
みたいには書けません。
なので、contents
を新たに用意して、文字列じゃなくてオブジェクトで認識できるようにしようってことみたいです。
テキストをSHIFT + 左クリックした時のアクション
{ "insertion": "/say test" }
すごくシンプルですね。こちらをテキストに含めるとチャット欄に/say test
を入力してくれます。
clickEvent
のsuggest_command
のSHIFT + 左クリック版ですね。
テキスト表示の「連結関係」のJSON
ここまで、「内容」「見た目」「マウスアクション」を書いてきました。
これらは1つのオブジェクトにまとめることができます。例としてはこんな感じ。
{"text":"test","underlined":true,"insertion":"/say test"}
さて、一部だけ「内容」「見た目」「マウスアクション」を変更したい!って場合はどうすればよいのでしょうか。
リストで並べる
最初の例でお見せしたように、以下のように書くことができます。
シンプルなやり方ですね。
["私は",{"text":"赤チーム","color":"red"},"です。"]
ちなみに先頭で指定した場合は、全部に適用されるので注意が必要です。
下の場合は、「私は」だけ太字と見せかけて、全部太字になります。
[{"text":"私は","bold":true},{"text":"赤チーム","color":"red"},"です。"]
translateの機能を使って並べる
translate
を使うと複数を指定することができます。
{"translate":"私は%sです。","with":[{"text":"赤チーム","color":"red"}]}
これだけ見るとリストで書くよりも長くなってしまいましたが、場合によっては見やすくなる可能性もあります。
{"bold":true,"translate":"私は%sです。","with":[{"text":"赤チーム","color":"red"}]}
例えばこういう書き方だと、全部に太字が適用されます。リストと違って全部に適用されるということがわかりやすいです。
extraで並べる
extra
はtranslate
とリストを組み合わせた用な感じです。
extra
の外側で指定された「見た目」などは、extra
の内側に適用されます。
{"text":"私は","extra":[{"text":"赤チーム","color":"red"},"です。"]}
全部に太字を適用する場合はこう言うふうにかけば見やすいですかね。
最初に何も書かないテキストを用意することで、文章を全部extra
の中に移動させているわけですね。
{"text":"","bold":true,"extra":["私は",{"text":"赤チーム","color":"red"},"です。"]}
テキスト表示は面倒
さて、おわかりの通り、テキスト表示は種類が多くて面倒です。
なので、他のサイトを使うというのも一つの手かも知れませんね。おすすめサイトはこちら。
まとめ
ながながと書いてきましたが、まとめるとこんな感じ。
- テキスト表示には「内容」1つに対して、「見た目」「マウスアクション」を複数付けられるよ
- テキストの「内容」はリスト、translate、extraで「連結」できるよ
って感じでした。
何を表示させたい、どういうふうに見せたい、何をさせたい、といったことを考えて作っていきましょう。
マイクラの言語ファイルの中身を見る
- 英語以外の言語ファイルは一体どこにあるのか
- 日本語の言語ファイルはUnicodeで書かれている
- 1.15.2の日本語の言語ファイルの中身
- %s とか %1$s とかってなによ?
- 言語ファイルを変更して反映させるには
英語以外の言語ファイルは一体どこにあるのか
いつもの.minecraft/versions/<バージョン>.jar
の中にあるのかと思ったら、存在しなかった。
で、よくよく調べてみると以下にあるとのことだった。
.minecraft/assets/indexes/<バージョン>.json
を開く- 中に以下のような記述がある場所を探す (日本語の例)
: "minecraft/lang/ja_jp.json": { "hash": "efd2cd466ec340e9a33980e4429cf02152c2c6bb", "size": 474708 }, :
hash
の内容を覚える(どこかにメモする).minecraft/assets/objects/
を開く- フォルダがいっぱいあるので、
hash
の先頭2文字(上の場合はef)のフォルダを開く hash
と同じファイル名を「テキストファイル」として開く (中身はJSON)
日本語の言語ファイルはUnicodeで書かれている
ファイルを開くと大量の\u7171
みたいな文字がいっぱい並んでます。
なので、読める形に変換しましょう。
私はここのサイトを使ってます。
Unicode Escape Sequence | KWONLINE.ORG
1.15.2の日本語の言語ファイルの中身
どういうものがあるのか。
こんな感じになってます。長いので、適当に省略します。
{ "addServer.add": "完了", "addServer.enterIp": "サーバーアドレス", "addServer.enterName": "サーバー名", "addServer.hideAddress": "アドレスを隠す", "addServer.resourcePack": "サーバーリソースパック", "addServer.resourcePack.disabled": "無効", "addServer.resourcePack.enabled": "有効", : "advancements.story.upgrade_tools.description": "より良いツルハシをつくる", "advancements.story.upgrade_tools.title": "アップグレード", "advancements.toast.challenge": "挑戦完了!", "advancements.toast.goal": "目標達成!", "advancements.toast.task": "進捗達成!", "argument.anchor.invalid": "無効なエンティティのアンカー位置 %s です", "argument.block.id.invalid": "「%s」は不明なブロックの種類です", : "commands.scoreboard.players.set.success.single": "%2$s の %1$s を %3$s に設定しました", "commands.seed.success": "シード値:%s", "commands.setblock.failed": "ブロックを設置できませんでした", "commands.setblock.success": "%s, %s, %s におけるブロックを変更しました", : "subtitles.entity.dolphin.ambient": "イルカが鳴く", "subtitles.entity.dolphin.ambient_water": "イルカが鳴く", "subtitles.entity.dolphin.attack": "イルカが攻撃をする", "subtitles.entity.dolphin.death": "イルカが死ぬ", "subtitles.entity.dolphin.eat": "イルカが食べる", "subtitles.entity.dolphin.hurt": "イルカがダメージを受ける", "subtitles.entity.dolphin.jump": "イルカがジャンプをする", "subtitles.entity.dolphin.play": "イルカが遊ぶ", "subtitles.entity.dolphin.splash": "イルカが飛び込む", "subtitles.entity.dolphin.swim": "イルカが泳ぐ", : "title.singleplayer": "シングルプレイ", "translation.test.args": "%s %s", "translation.test.complex": "Prefix, %s%2$s again %s and %1$s lastly %s and also %1$s again!", "translation.test.escape": "%%s %%%s %%%%s %%%%%s", "translation.test.invalid": "hi %", "translation.test.invalid2": "hi %s", "translation.test.none": "Hello, world!", "translation.test.world": "world", : }
%s とか %1$s とかってなによ?
これは、言語ファイルで決められないパラメータが入ります。
例えばcommands.seed.success
はシード値 : %s
ですが、実際に表示されるものは%s
のところに別の値が入って表示されます。
%1$s
も似たようなもので、1番目のパラメータを使いますよってことです。
どうやって使うのか
tellrawで表示させたい場合は、こんな感じで使います。
tellraw @p {"translate":"title.singleplayer"}
もしも%sになにか指定したいなら
tellraw @p {"translate":"commands.seed.success","with":["この辺"]}
とかで指定できます。
%sが複数ある場合も
tellraw @p {"translate":"commands.setblock.success","with":["0","60","15"]}
と書くと、頭から順番に使われます。 何番目っていうのかこういう書き方をした時に、指定するやつですね。
言語ファイルを変更して反映させるには
リソースパックに入れましょう。
<リソースパック名>/assets/minecraft/lang/<言語名>.json
に配置すればOKです。
全部書かなくても一部だけ変更でもOKです。
<言語名>
のところは日本語ならja_jp
ですね。