ブロックモデル(英:Block models)はゲーム内のすべてのブロックを描画するために使用される。アイテムモデル (Item models) はプレイヤーが持っているときや頭(ヘルメットや帽子のように)につけているとき、地面に落ちているときやインベントリにあるとき、そして額縁や防具立てに持たせたときなどに使用される。幾つかのブロックはブロック状態 (Block states) に合わせて複数のモデルを持つ。モデルファイルとブロック情報ファイルはともに .json
形式のファイルで、それぞれ model
フォルダと blockstates
フォルダに保存されている。インベントリ内におけるアイコンもこれらのファイルでできている。
ブロック状態[]
ドアが開閉するように、ブロックの中には幾つかのバリエーションや状態(variant)を持つものがある。そのため、各ブロックには独自のブロック状態ファイルがあり、assets/minecraft/blockstates
に保存されている。このファイルでは"variants"と"multipart"の2種類の指定の仕方がある。variantsでは、あらかじめブロック状態の組み合わせをリストしてモデルを割り振る。一方、multipartではブロック状態ごとにモデルを指定し、さらに同じ座標にモデルを重ね合わせることができる。これによって、少ないモデルから様々なブロック状態に対応することができる。これらのファイルは元々の名前から変更することはできない。
- ルートタグ。
- variants: ブロック状態の組み合わせのリスト。
- A variant: ブロック状態の組み合わせ。ここに関連するブロック状態を指定する。複数のブロック状態を指定することができ、その場合はカンマで区切られる。元々1つだけのブロックは
""
( 1.12.2 までは"normal"
)となる。1つもしくは複数のモデルを指定することができ、複数のモデルを設定する場合は[]
で囲む。この場合、それらの中からランダムに選ばれ、各オプションは別々の タグで指定される。- A model: 複数のモデルを指定する場合に用いる。
- model: ブロックのモデルファイルのパス。
assets/minecraft/models
から選び、block/モデルファイル
のように書く[1]。 - x: x軸のローテーション。90度単位で設定する必要がある。
- y: y軸のローテーション。90度単位で設定する必要がある。
- uvlock:
true
もしくはfalse
(デフォルト)に設定できる。true
にすると、上記の x と y タグでテクスチャがローテーションしない。 - weight: モデルの適用されやすさ。デフォルトでは1 (=100%) である。同じ variant に複数のモデルを設定している場合は、個々のモデルの weight を全てのモデルの weight の合計で割ることによって確率が計算される(例えば、3つのモデルを設定していて、それぞれの weight が 1,1,2 だった場合、それらの合計は 4(1 + 1 + 2) である。各モデルが適用される確率は 4:1/4、1/4、2/4、もしくは 25%、25%、50% である)
- model: ブロックのモデルファイルのパス。
- model: ブロックのモデルファイルのパス。
assets/minecraft/models
から選び、block/モデルファイル
のように書く[1]。 - x: x軸のローテーション。90度単位で設定する必要がある。
- y: y軸のローテーション。90度単位で設定する必要がある。
- uvlock:
true
もしくはfalse
(デフォルト)に設定できる。true
にすると、上記の x と y タグでテクスチャがローテーションしない。
- A model: 複数のモデルを指定する場合に用いる。
- A variant: ブロック状態の組み合わせ。ここに関連するブロック状態を指定する。複数のブロック状態を指定することができ、その場合はカンマで区切られる。元々1つだけのブロックは
- multipart:
variant
の代わりに用いる。ブロック状態に基づいて複数のモデルを組み合わせることができる。- A case ブロック状態からモデルの指定までのデータを含んだもの。
- when: ブロック状態。設定していなければ常時適用される。
- OR: 複数のブロック状態を条件にする場合に用いる。ここに指定したブロック状態のどれかに一致する場合、モデルが適用される。
- A condition 条件となるブロック状態の組み合わせ。
- State ブロック状態。|で区切ることで複数の値を設定できる。
- A condition 条件となるブロック状態の組み合わせ。
- AND: 複数のブロック状態を条件にする場合に用いる。ここに指定したブロック状態にすべて一致する場合、モデルが適用される。
- A condition 条件となるブロック状態の組み合わせ。
- State ブロック状態。|で区切ることで複数の値を設定できる。
- A condition 条件となるブロック状態の組み合わせ。
- State ブロック状態。|で区切ることで複数の値を設定できる。
- OR: 複数のブロック状態を条件にする場合に用いる。ここに指定したブロック状態のどれかに一致する場合、モデルが適用される。
- apply: 適用するモデル。1つもしくは、
[]
で囲うことで複数のモデルを指定することができる。複数のモデルを設定するとそれらの中からランダムに選ばれ、各オプションは別々の タグで指定される。 OR:や AND:と併用できない。- A model: 複数のモデルを指定する場合に用いる。
- model: ブロックのモデルファイルのパス。
assets/minecraft/models
から選び、block/モデルファイル
のように書く[1]。 - x: x 軸のローテーション。90度単位で設定する必要がある。
- y: y 軸のローテーション。90度単位で設定する必要がある。
- uvlock:
true
もしくはfalse
(デフォルト)に設定できる。true
にすると、上記の x と y タグでテクスチャがローテーションしない。 - weight: モデルの適用されやすさ。デフォルトでは1 (= 100%) である。同じ variant に複数のモデルを設定している場合は、個々のモデルの weight を全てのモデルの weight の合計で割ることによって確率が計算される(例えば、3つのモデルを設定していて、それぞれの weight が 1,1,2 だった場合、それらの合計は 4(1 + ! + 2) である。各モデルが適用される確率は 4:1/4、1/4、2/4、もしくは 25%、25%、50% である)
- model: ブロックのモデルファイルのパス。
- model: ブロックのモデルファイルのパス。
assets/minecraft/models
から選び、block/モデルファイル
のように書く[1]。 - x: x 軸のローテーション。90度単位で設定する必要がある。
- y: y 軸のローテーション。90度単位で設定する必要がある。
- uvlock:
true
もしくはfalse
(デフォルト)に設定できる。true
にすると、上記の x と y タグでテクスチャがローテーションしない。
- A model: 複数のモデルを指定する場合に用いる。
- when: ブロック状態。設定していなければ常時適用される。
- A case ブロック状態からモデルの指定までのデータを含んだもの。
- variants: ブロック状態の組み合わせのリスト。
"uvlock": true
|
"uvlock": false
|
例:壁に立てた松明[]
松明は複数のvariantを持ち、地面もしくは壁に4方向に設置することができる。この例はassets/minecraft/blockstates
にあるwall_torch.json
ファイルから取得したものである。
{
"variants": {
"facing=east": { "model": "block/wall_torch" },
"facing=south": { "model": "block/wall_torch", "y": 90 },
"facing=west": { "model": "block/wall_torch", "y": 180 },
"facing=north": { "model": "block/wall_torch", "y": 270 }
}
}
松明は地面に立てる他に、ブロックの側面すべてに設置できる。これにより、各側面に1つ、計4つのvariantが必要である。それらは"facing=east"
、 "facing=west"
、"facing=south"
、そして"facing=north"
である。いずれも"wall_torch"
のモデルを使用していて、"y"
軸を中心に90度ずつローテーションさせて異なる面に設置される。
例: 草ブロック[]
草ブロックは2つのvariantを持ち、最初のモデルは4つの異なるモデルを持つ。この例は、assets/minecraft/blockstates
にあるgrass_block.json
ファイルから取得したものである。
{
"variants": {
"snowy=false": [
{ "model": "block/grass_normal" },
{ "model": "block/grass_normal", "y": 90 },
{ "model": "block/grass_normal", "y": 180 },
{ "model": "block/grass_normal", "y": 270 }
],
"snowy=true": { "model": "block/grass_snowed" }
}
}
雪の被っていない草ブロック ("snowy=false"
)は、4つのモデルを持つ。それらはすべて同じモデルであるが、90度の倍数でローテーションさせている。いずれにもweight
タグは使用されていないので、それぞれ25%の確率で適用される。
例: オークのフェンス[]
オークのフェンスはmultipart
形式が使用されている。この例はassets/minecraft/blockstates
にあるoak_fence.json
から取得したものである。
{
"multipart": [
{ "apply": { "model": "block/oak_fence_post" }},
{ "when": { "north": "true" },
"apply": { "model": "block/oak_fence_side", "uvlock": true }
},
{ "when": { "east": "true" },
"apply": { "model": "block/oak_fence_side", "y": 90, "uvlock": true }
},
{ "when": { "south": "true" },
"apply": { "model": "block/oak_fence_side", "y": 180, "uvlock": true }
},
{ "when": { "west": "true" },
"apply": { "model": "block/oak_fence_side", "y": 270, "uvlock": true }
}
]
}
最初の、postのモデルは常時適用されるが、他のものは特定の条件が満たされたときのみ使用される。sideは隣に異なるブロックがある場合にのみ適用される。1つのpostモデルと全ての側面にsideモデルがあるので、それらをローテーションさせることにより、必要なモデル数を2つに減らすことができる。1.8で5つのモデルと16のvariantが使用されていたことと比べるとこれは大きな改善である。
例: レッドストーンワイヤー[]
レッドストーンワイヤーのモデルはmultipart
形式を使用している。この例はassets/minecraft/blockstates
にあるredstone_wire.json
から取得したものである。
{
"multipart": [
{ "when": { "OR": [
{"north": "none", "east": "none", "south": "none", "west": "none"},
{"north": "side|up", "east": "side|up" },
{"east": "side|up", "south": "side|up" },
{"south": "side|up", "west": "side|up"},
{"west": "side|up", "north": "side|up"}
]},
"apply": { "model": "block/redstone_dust_dot" }
},
{ "when": { "OR": [
{ "north": "side|up" },
{ "north": "none", "east": "none", "south": "side|up", "west": "none" }
]},
"apply": { "model": "block/redstone_dust_side0" }
},
{ "when": { "OR": [
{ "south": "side|up" },
{ "north": "side|up", "east": "none", "south": "none", "west": "none" }
]},
"apply": { "model": "block/redstone_dust_side_alt0" }
},
{ "when": { "OR": [
{ "east": "side|up" },
{ "north": "none", "east": "none", "south": "none", "west": "side|up" }
]},
"apply": { "model": "block/redstone_dust_side_alt1", "y": 270 }
},
{ "when": { "OR": [
{ "west": "side|up" },
{ "north": "none", "east": "side|up", "south": "none", "west": "none" }
]},
"apply": { "model": "block/redstone_dust_side1", "y": 270 }
},
{ "when": { "north": "up" },
"apply": { "model": "block/redstone_dust_up" }
},
{ "when": { "east": "up" },
"apply": { "model": "block/redstone_dust_up", "y": 90 }
},
{ "when": { "south": "up" },
"apply": { "model": "block/redstone_dust_up", "y": 180 }
},
{ "when": { "west": "up" },
"apply": { "model": "block/redstone_dust_up", "y": 270 }
}
]
}
このモデルはそのときのブロック状態に応じて変化する。初期状態では、redstone_dot
モデルが適用されている。これは4つのsideが全て"none"になっているか、2つの方向で up
または side
が設定されている場合に適用される。
最後の条件は"west"
が"up"
であればredstone_up
を適用する(他の面も同様である)。
例:模様入り本棚[]
このブロック���multipart
形式を採用している。これまで挙げた例と違う点は、AND
を用いて複数のブロック状態を条件としている点である。以下にblockstates/chiseled_bookshelf.json
の内容を記述する。
{
"multipart": [
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf",
"uvlock": true,
"y": 180
},
"when": {
"facing": "south"
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_bottom_left",
"y": 180
},
"when": {
"AND": [
{
"facing": "south"
},
{
"slot_3_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_bottom_left",
"y": 180
},
"when": {
"AND": [
{
"facing": "south"
},
{
"slot_3_occupied": "false"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_top_mid",
"y": 180
},
"when": {
"AND": [
{
"facing": "south"
},
{
"slot_1_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_top_mid",
"y": 180
},
"when": {
"AND": [
{
"facing": "south"
},
{
"slot_1_occupied": "false"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_top_right",
"y": 180
},
"when": {
"AND": [
{
"facing": "south"
},
{
"slot_2_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_top_right",
"y": 180
},
"when": {
"AND": [
{
"facing": "south"
},
{
"slot_2_occupied": "false"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_bottom_mid",
"y": 180
},
"when": {
"AND": [
{
"facing": "south"
},
{
"slot_4_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_bottom_mid",
"y": 180
},
"when": {
"AND": [
{
"facing": "south"
},
{
"slot_4_occupied": "false"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_top_left",
"y": 180
},
"when": {
"AND": [
{
"facing": "south"
},
{
"slot_0_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_top_left",
"y": 180
},
"when": {
"AND": [
{
"facing": "south"
},
{
"slot_0_occupied": "false"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_bottom_right",
"y": 180
},
"when": {
"AND": [
{
"facing": "south"
},
{
"slot_5_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_bottom_right",
"y": 180
},
"when": {
"AND": [
{
"facing": "south"
},
{
"slot_5_occupied": "false"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf",
"uvlock": true,
"y": 90
},
"when": {
"facing": "east"
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_bottom_left",
"y": 90
},
"when": {
"AND": [
{
"facing": "east"
},
{
"slot_3_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_bottom_left",
"y": 90
},
"when": {
"AND": [
{
"facing": "east"
},
{
"slot_3_occupied": "false"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_top_mid",
"y": 90
},
"when": {
"AND": [
{
"facing": "east"
},
{
"slot_1_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_top_mid",
"y": 90
},
"when": {
"AND": [
{
"facing": "east"
},
{
"slot_1_occupied": "false"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_top_right",
"y": 90
},
"when": {
"AND": [
{
"facing": "east"
},
{
"slot_2_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_top_right",
"y": 90
},
"when": {
"AND": [
{
"facing": "east"
},
{
"slot_2_occupied": "false"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_bottom_mid",
"y": 90
},
"when": {
"AND": [
{
"facing": "east"
},
{
"slot_4_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_bottom_mid",
"y": 90
},
"when": {
"AND": [
{
"facing": "east"
},
{
"slot_4_occupied": "false"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_top_left",
"y": 90
},
"when": {
"AND": [
{
"facing": "east"
},
{
"slot_0_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_top_left",
"y": 90
},
"when": {
"AND": [
{
"facing": "east"
},
{
"slot_0_occupied": "false"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_bottom_right",
"y": 90
},
"when": {
"AND": [
{
"facing": "east"
},
{
"slot_5_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_bottom_right",
"y": 90
},
"when": {
"AND": [
{
"facing": "east"
},
{
"slot_5_occupied": "false"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf",
"uvlock": true,
"y": 270
},
"when": {
"facing": "west"
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_bottom_left",
"y": 270
},
"when": {
"AND": [
{
"facing": "west"
},
{
"slot_3_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_bottom_left",
"y": 270
},
"when": {
"AND": [
{
"facing": "west"
},
{
"slot_3_occupied": "false"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_top_mid",
"y": 270
},
"when": {
"AND": [
{
"facing": "west"
},
{
"slot_1_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_top_mid",
"y": 270
},
"when": {
"AND": [
{
"facing": "west"
},
{
"slot_1_occupied": "false"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_top_right",
"y": 270
},
"when": {
"AND": [
{
"facing": "west"
},
{
"slot_2_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_top_right",
"y": 270
},
"when": {
"AND": [
{
"facing": "west"
},
{
"slot_2_occupied": "false"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_bottom_mid",
"y": 270
},
"when": {
"AND": [
{
"facing": "west"
},
{
"slot_4_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_bottom_mid",
"y": 270
},
"when": {
"AND": [
{
"facing": "west"
},
{
"slot_4_occupied": "false"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_top_left",
"y": 270
},
"when": {
"AND": [
{
"facing": "west"
},
{
"slot_0_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_top_left",
"y": 270
},
"when": {
"AND": [
{
"facing": "west"
},
{
"slot_0_occupied": "false"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_bottom_right",
"y": 270
},
"when": {
"AND": [
{
"facing": "west"
},
{
"slot_5_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_bottom_right",
"y": 270
},
"when": {
"AND": [
{
"facing": "west"
},
{
"slot_5_occupied": "false"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf",
"uvlock": true,
"y": 0
},
"when": {
"facing": "north"
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_bottom_left",
"y": 0
},
"when": {
"AND": [
{
"facing": "north"
},
{
"slot_3_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_bottom_left",
"y": 0
},
"when": {
"AND": [
{
"facing": "north"
},
{
"slot_3_occupied": "false"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_top_mid",
"y": 0
},
"when": {
"AND": [
{
"facing": "north"
},
{
"slot_1_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_top_mid",
"y": 0
},
"when": {
"AND": [
{
"facing": "north"
},
{
"slot_1_occupied": "false"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_top_right",
"y": 0
},
"when": {
"AND": [
{
"facing": "north"
},
{
"slot_2_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_top_right",
"y": 0
},
"when": {
"AND": [
{
"facing": "north"
},
{
"slot_2_occupied": "false"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_bottom_mid",
"y": 0
},
"when": {
"AND": [
{
"facing": "north"
},
{
"slot_4_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_bottom_mid",
"y": 0
},
"when": {
"AND": [
{
"facing": "north"
},
{
"slot_4_occupied": "false"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_top_left",
"y": 0
},
"when": {
"AND": [
{
"facing": "north"
},
{
"slot_0_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_top_left",
"y": 0
},
"when": {
"AND": [
{
"facing": "north"
},
{
"slot_0_occupied": "false"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_occupied_slot_bottom_right",
"y": 0
},
"when": {
"AND": [
{
"facing": "north"
},
{
"slot_5_occupied": "true"
}
]
}
},
{
"apply": {
"model": "minecraft:block/chiseled_bookshelf_empty_slot_bottom_right",
"y": 0
},
"when": {
"AND": [
{
"facing": "north"
},
{
"slot_5_occupied": "false"
}
]
}
}
]
}
ブロックのモデル[]
assets/minecraft/models/block
フォルダは指定されたすべてのvariantを保持する。ファイルの名前は自由に変更することができるが、blockstatesフォルダで使用しているものと一致させる必要がある。
- The root tag
- parent:
assets/minecraft/models
内の別のモデルを適用する。block/モデルファイル
のように書く。"parent"
と"elements"
が併用されている場合、後者のelementが上書きする形で適用される。"builtin/generated"
を設定すれば設置したときのモデルとは別にアイコンを設定できる。最初のレイヤーのみが適用され、ローテーションはblockstatesでのみ行われることに注意。
- ambientocclusion: ambient occlusionを使うかどうか(下図参照。デフォルトでは
true
) - display: アイテムとして表示する場所など
- thirdperson_righthand, thirdperson_lefthand, firstperson_righthand, firstperson_lefthand, gui, head, ground, or fixed: アイテムモデルの表示の仕方。角度(rotation)や表示位置(translation)、表示倍率(scale)がある。
- rotation:
[x, y, z]
の軸を中心にモデルを回転させる。 - translation:
[x, y, z]
の分だけモデルを平行移動させる。値が80を超えた場合、描画されるのは80の分のみである。値が-80未満の場合、描画されるのは-80の分だけである。 - scale: モデルの表示倍率(scale)。
[x, y, z]
の倍率で設定される。値が4を超えた場合、描画されるのは4の分だけである。
- rotation:
- thirdperson_righthand, thirdperson_lefthand, firstperson_righthand, firstperson_lefthand, gui, head, ground, or fixed: アイテムモデルの表示の仕方。角度(rotation)や表示位置(translation)、表示倍率(scale)がある。
- textures: モデルに適用されるテクスチャ。
assets/minecraft/textures
内から選ぶか他の変数を使用できる。前者の場合はblock/テクスチャファイル
のように書く(1.12.2 まではblocks
フォルダ)。- particle: パーティクルに使用するテクスチャ。ブロックを破壊したときに使用される。
注意:modelフォルダにないブロックのパーティクルは変更できない。 - A texture variable: テクスチャの変数(#で始まるラベル)を指定する
- particle: パーティクルに使用するテクスチャ。ブロックを破壊したときに使用される。
- elements: モデルのすべてのキューブ(element)。立方体、直方体、四角形の平面のみ使用できる。
- An element
- from: キューブの座標で、
[x, y, z]
で表される。-16から32の範囲内である必要がある。to と from の差がキューブのサイズとなる。 - to: from にサイズを足したもの。from と同様に
[x, y, z]
の形で表され、値は-16から32である必要がある。 - rotation: elementの回転
- origin:
[x, y, z]
の座標に従って、回転の中心を設定する。デフォルトでは[8, 8, 8]
である。 - axis: 回転の軸。
"x"
,"y"
、もしくは"z"
のどれかで指定する。 - angle: 回転の角度。45度から-45度が設定できる。22.5度間隔でなければならない。デフォルトでは0である。
- rescale: ブロックのテクスチャを引き伸ばす。trueかfalseに設定できる。デフォルトではfalseである。
- origin:
- shade: 影を描画するかどうか(デフォルトでは
true
) - faces: キューブの面。記述されていなければ描画されない。
- down, up, north, south, west or east: 面のプロパティ
- uv: テクスチャを適用する範囲。
[x1, y1, x2, y2]
はその座標である。設定されていなければデフォルトの値が適用される。x1
とx2
の値を入れ換えると (例えば、0, 0, 16, 16
から16, 0, 0, 16
にすると)テクスチャが反転する。UVは任意であり、設定されていなければelementのサイズに基づいて自動的に生成される。 - texture: テクスチャ。
#
の付いた変数で指定する。 - cullface: ここで指定された位置にブロックが他のブロックと接触した場合、その面の描画をしない。
down
,up
,north
,south
,west
,もしくはeast
に設定できる。また、どの面が光量を使用して照らされるかを指定でき、設定されていなければデフォルトのものになる。 - rotation: 適用したテクスチャを回転させる。0、90、180、270度で設定できる。デフォルトでは0である。rotationはテクスチャのどの部分が使用されるかには影響しない。代わりに選択されたテクスチャの頂点の順列になる(暗黙的に、もしくは明確に
uv
で選択されている)。 - tintindex: 着色をする場合に記述する。バイオームカラーなどがこれにあたる。これはプログラムに直接書き込まれているため変更できない。数字でも何でもよい。草ブロックなど特定のブロックにしか使われず、それ以外のブロックでこれを設定しても反映されない。
- uv: テクスチャを適用する範囲。
- down, up, north, south, west or east: 面のプロパティ
- from: キューブの座標で、
- An element
- parent:
注意:1.13 から、エンティティモデルを使用したブロックにもモデルファイルが追加されたが、現時点では particleのみ有効である。
"ambientocclusion": false
|
"ambientocclusion": true
| |
"ambientocclusion"の比較。比較として隣にtrueにしたシルバーフィッシュ入りの石を並べた。falseにした石が少し明るく見える。 |
例:立てた松明[]
分かりやすくするためにここでは、地面に立てた松明のみ説明する。これは torch.json
と template_torch.json
の2つのファイルがあり、template_torch.json
で形を作り、torch.json
でテクスチャを指定している。これらのファイルは assets/minecraft/models/block
のフォルダに存在する。
- template_torch.json
{
"ambientocclusion": false,
"textures": {
"particle": "#torch"
},
"elements": [
{ "from": [ 7, 0, 7 ],
"to": [ 9, 10, 9 ],
"shade": false,
"faces": {
"down": { "uv": [ 7, 13, 9, 15 ], "texture": "#torch" },
"up": { "uv": [ 7, 6, 9, 8 ], "texture": "#torch" }
}
},
{ "from": [ 7, 0, 0 ],
"to": [ 9, 16, 16 ],
"shade": false,
"faces": {
"west": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" },
"east": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }
}
},
{ "from": [ 0, 0, 7 ],
"to": [ 16, 16, 9 ],
"shade": false,
"faces": {
"north": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" },
"south": { "uv": [ 0, 0, 16, 16 ], "texture": "#torch" }
}
}
]
}
このモデルは通常の松明やレッドストーントーチに使用される。"elements"
タグでは3つのelementが使用される。それぞれのキューブは2面のみ指定されているため、その面だけが描画される。"uv"
でテクスチャが適用される範囲を指定する。テクスチャの変数は"#torch"
で、パーティクルとキューブに使用されている。
- torch.json
{
"parent": "block/template_torch",
"textures": {
"torch": "block/torch"
}
}
このファイルは地面に立てられた松明のモデルを表す。これは立てられた松明の形を決める template_torch.json
テンプレートとして読み込み、すべてのプロパティを継承する。このファイルは松明のテクスチャを指定するのみである。テクスチャ"torch"
は変数"torch"
(#
除く)に割り当てられ、パーティクルやelements>
内で使用される。
例: 通常のブロック[]
この例では、Minecraftにおける通常の(立方体の)ブロックの基本モデルについて記述する。これらのブロックはすべて同じ基本モデルを使用し、松明と同様に、テクスチャのみ別ファイルで指定している。
このモデルはcube.json
と定義され、assets/minecraft/models/block
フォルダ内に保存されている。
{
"elements": [
{
"from": [ 0, 0, 0 ],
"to": [ 16, 16, 16 ],
"faces": {
"down": { "texture": "#down", "cullface": "down" },
"up": { "texture": "#up", "cullface": "up" },
"north": { "texture": "#north", "cullface": "north" },
"south": { "texture": "#south", "cullface": "south" },
"west": { "texture": "#west", "cullface": "west" },
"east": { "texture": "#east", "cullface": "east" }
}
}
]
}
"cullface": "down"
を使用すると、ブロックの下に別のブロックが存在する場合、その間は底面が描画されない。同じことが他の面にも適用される。
例:苗木系ブロック[]
この例では、全ての苗木や枯れ木などの植物系ブロックの基本モデルについて記述する。モデルはcross.json
で、テクスチャはそれぞれの苗木のモデル(例えばoak_sapling.json
)で指定される。いずれもassets/minecraft/models/block
フォルダに保存されている。
{
"ambientocclusion": false,
"textures": {
"particle": "#cross"
},
"elements": [
{
"from": [ 0.8, 0, 8 ],
"to": [ 15.2, 16, 8 ],
"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true },
"shade": false,
"faces": {
"north": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" },
"south": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" }
}
},
{
"from": [ 8, 0, 0.8 ],
"to": [ 8, 16, 15.2 ],
"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true },
"shade": false,
"faces": {
"west": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" },
"east": { "uv": [ 0, 0, 16, 16 ], "texture": "#cross" }
}
}
]
}
苗木のモデルは2つの平面で構成され、それぞれ origin
で指定した座標と axis
で指定した軸を基準に45度傾けている。angle
は傾けている角度で、この場合は45度に指定されている。"rescale"
はtrue
にセットされている。また、rescale
を true にすることで、テクスチャが引き伸ばされている(比較画像参照)。
"rescale": true
|
"rescale": false
|
例:複数の画像を1つにまとめたテクスチャを指定する場合[]
uv
の指定の仕方次第では、1ファイルを部分部分に分けてブロックの面に適用することができる。テクスチャファイルのサイズが16x16でない場合、16ピクセルに変換して指定する(16/ピクセル数 × 座標
)。
この例では、矢細工台のテクスチャ3つをまとめたもの(fletching_table.png
)を使用しており、底面のみシラカバの板材のテクスチャを使用している。4つともそれぞれ 16×16ピクセルである。
{
"parent": "block/cube",
"textures": {
"particle": "block/fletching_table",
"all": "block/fletching_table",
"bottom": "block/birch_planks"
},
"elements": [
{
"from": [ 0, 0, 0 ],
"to": [ 16, 16, 16 ],
"faces": {
"down": { "texture": "#bottom", "cullface": "down" },
"up": { "uv": [0,0, 16,5.34], "texture": "#all", "cullface": "up" },
"north": { "uv": [0,5.35, 16,10.66], "texture": "#all", "cullface": "north" },
"south": { "uv": [0,5.35, 16,10.66], "texture": "#all", "cullface": "south" },
"west": { "uv": [0,10.67, 16,16], "texture": "#all", "cullface": "west" },
"east": { "uv": [0,10.67, 16,16], "texture": "#all", "cullface": "east" }
}
}
]
}
この例では、骨ブロックのテクスチャ2つを1つにまとめたものを使用している。
{
"parent": "block/cube",
"textures": {
"particle": "block/bone_block",
"all": "block/bone_block"
},
"elements": [
{
"from": [ 0, 0, 0 ],
"to": [ 16, 16, 16 ],
"faces": {
"down": { "uv": [0,0, 16,8], "texture": "#all", "cullface": "down" },
"up": { "uv": [0,0, 16,8], "texture": "#all", "cullface": "up" },
"north": { "uv": [0,8, 16,16], "texture": "#all", "cullface": "north" },
"south": { "uv": [0,8, 16,16], "texture": "#all", "cullface": "south" },
"west": { "uv": [0,8, 16,16], "texture": "#all", "cullface": "west" },
"east": { "uv": [0,8, 16,16], "texture": "#all", "cullface": "east" }
}
}
]
}
この例では、樽のテクスチャを4つ全て1つのファイルにまとめたものを使用している。
{
"parent": "block/cube",
"textures": {
"particle": "block/barrel",
"all": "block/barrel"
},
"elements": [
{
"from": [ 0, 0, 0 ],
"to": [ 16, 16, 16 ],
"faces": {
"down": { "uv": [8,8, 16,16], "texture": "#all", "cullface": "down" },
"up": { "uv": [8,0, 16,8], "texture": "#all", "cullface": "up" },
"north": { "uv": [0,8, 8,16], "texture": "#all", "cullface": "north" },
"south": { "uv": [0,8, 8,16], "texture": "#all", "cullface": "south" },
"west": { "uv": [0,8, 8,16], "texture": "#all", "cullface": "west" },
"east": { "uv": [0,8, 8,16], "texture": "#all", "cullface": "east" }
}
}
]
}
アイテムのモデル[]
アイテムのモデルはブロックと違い、1つのアイテムに複数のモデルを適用することはできない。モデルのファイルはassets/minecraft/models/item
のフォルダに存在する。モデルの名前は直接コードに組み込まれており、変更することはできない。
- : ルートタグ
- parent: ここで指定された別のモデルを読み込み、使用する。モデルは
assets/minecraft/models
内から選び、item/モデルのファイル
のように書く。"parent"
と"elements"
の両方が存在する場合、後者の"elements"
が前者の"elements"
を上書きする形で用いられる。 - textures: モデルに使うテクスチャ。
assets/minecraft/textures
から指定するか、別のテクスチャ変数を用いる。- layer#: アイテムのパスで指定する。 parentで
"item/generated"
としたときのみ有効で、インベントリに表示するアイコンを指定する。通常は1つだけだがスポーンエッグのように複数のlayerを持つものもある。この数はアイテムごとに決まっている。 - particle: パーティクルに用いるテクスチャ。食べ物を食べるときやバリアブロックのパーティクルに用いられる(バリアブロックを破壊する場合、常に
items/barrier.png
が使用される)。それ以外の場合は"layer0"が使用される。 - A texture variable: テクスチャの変数を決める。
#任意の名前
のように書く。
- layer#: アイテムのパスで指定する。 parentで
- gui_light: 光の当たる方向。インベントリ上の明るさに影響する。
- side: ブロックのような場合に明るくなる。
- front: アイテムのような平面状のモデルの場合に明るくなる。
- elements: 3Dモデルにする場合、キューブ(element)の情報をここにまとめる。立方体、直方体、もしくは四角形の平面のみ使用できる。
- An element
- from: キューブの座標で、
[x, y, z]
の形で指定する。値は-16から32でなければならない。toとfromの差がキューブのサイズとなる。 - to: from にサイズを足したもの。from と同様に
[x, y, z]
の形で指定する。値は-16から32でなければならない。 - rotation: キューブの回転(rotation)
- origin: 回転の中心点。
[x, y, z]
の形で指定する。デフォルトでは[8, 8, 8]
である。 - axis: 回転の軸。
"x"
,"y"
、"z"
のいずれかである。 - angle: 回転させる角度。-45度から45度で、22.5度刻み。デフォルトでは0である。
- origin: 回転の中心点。
- faces: キューブの面。指定しなかった場合、描画されない。
- down, up, north, south, west or east: それぞれで指定された面のプロパティ。
- uv: テクスチャを使用する範囲。
[x1, y1, x2, y2]
はその座標である。指定しなかった場合、キューブの位置に応じて設定される。0以下もしくは16以上になるとテクスチャがおかしくなる。xまたはyの値を入れ換えるとテクスチャも反転する - texture: 面に割り当てるテクスチャ。ファイル名ではなく、
#
で始まる変数を用いる。 - cullface: 指定した面に他のブロックが隣接した場合、その面を描画しなくする。
down
、up
、north
、south
、west
、east
がある。 - rotation: テクスチャを回転させる。回転は90度ずつである。
- tintindex: 着色をするかどうか。ポーションやスポーンエッグなどの色がこれにあたり、プログラムに直接組み込まれている。任意の値で用いることができる(ただし、スポーンエッグの場合、0は最初の色、1は2番目の色を使用している)。これはポーションなど、一部のアイテムにしか使えない。
- uv: テクスチャを使用する範囲。
- down, up, north, south, west or east: それぞれで指定された面のプロパティ。
- from: キューブの座標で、
- An element
- display: インベントリや手に持ったとき、地面に落ちているときなどの表示
- thirdperson_righthand, thirdperson_lefthand, firstperson_righthand, firstperson_lefthand, gui, head, ground, or fixed: アイテムモデルの表示の仕方。角度(rotation)や表示位置(translation)、表示倍率(scale)がある。
- rotation: モデルを回転させる。
[x, y, z]
はその軸である。 - translation: アイテムモデルの相対的な表示位置。
[x, y, z]
はその座標である。-80から80まで有効である。 - scale: アイテムモデルの表示倍率。
[x, y, z]
はその軸である。4まで有効である。
- rotation: モデルを回転させる。
- thirdperson_righthand, thirdperson_lefthand, firstperson_righthand, firstperson_lefthand, gui, head, ground, or fixed: アイテムモデルの表示の仕方。角度(rotation)や表示位置(translation)、表示倍率(scale)がある。
- overrides: アイテムタグを持っている場合、それに応じて別のモデルを指定することができる
- a case 単一のケース
- predicate: モデルを適用する条件。
- a case 条件となるタグ。タグについては下記のアイテムタグを参照。
- model: 使用するモデルのパス。
assets/minecraft/models/
内のファイルを指定し、item/モデルファイル
のように書く。itemフォルダ内でなくてもよい。
- predicate: モデルを適用する条件。
- a case 単一のケース
- parent: ここで指定された別のモデルを読み込み、使用する。モデルは
アイテムタグ[]
一部のアイテムは状況に応じてタグ付けができ、1つのアイテムに複数のモデルを使用することができる。下記はそのリストである。
"angle"
: コンパスに用いられる。現在の角度を示す。値は0~1の間である。"blocking"
: 盾に用いられる。盾を構えているかどうかに用いられる。構えている状態なら、1
である。"broken"
: エリトラに用いられる。1
のとき、エリトラが壊れている状態である。"brushing"
: ブラシに用いられる。砂を払っている最中は1
である。"cast"
: 釣竿に用いられる。竿を振ったとき、1
である。"charged"
: クロスボウに用いられる。何かしらの発射物が装填されていれば1
である。"cooldown"
: コーラスフルーツとエンダーパールに用いられる。コーラスフルーツを食べた後やエンダーパールを投げた後の残りクールダウンを表す。値は0~1の間である。"damage"
: 耐久値のあるアイテムに用いられる。ただし、防具には使用できない。0から1の間の値をとる。"damaged"
: 耐久値のあるアイテムに用いられる。ただし、防具には使用できない。こちらは耐久値を消費しているかどうかの判定に用いられる。耐久タグがついてる場合、0ではない、"damage"
タグがついているかもしれない。"filled"
: バンドルに用いられる。内容量に応じて0
(空)から1
(満杯)の間の値をとる。"firework"
: クロスボウに用いられる。ロケット花火が装填されていれば1
である。"lefthanded"
: 左利き用。ただし、オフハンド用ではない。"level"
: ライトブロックに用いられる。BlockStateTag
タグで指定された明るさレベルを表す。値は0
(レベル0)~1
(レベル15)の間である。"pull"
: 弓とクロスボウの引き具合。0から1の値をとる。"pulling"
: 弓やクロスボウを引いているかどうか。引いていれば1
になる。"throwing"
:トライデントに用いられる。投げる際(腕を掲げているとき)に1
になる。"time"
: 時計に用いられる。現在の時間を表す。値は0~1の間である。"tooting"
: ヤギの角笛に用いられる。プレイヤーが吹き鳴らしているとき1
である。"trim_type"
: 防具に用いられる。防具装飾に使用した材料を示す。値は0~1の間である。"custom_model_data"
:すべてのアイテムに適用することができる。NBT CustomModelDataに対応して別のモデルを適用することができる。ここで指定した数値は内部で単精度浮動小数点数に変換されるため、16777216を超える整数値は正確に表現できない。CustomModelData
の値がここで指定した値以上のとき真となる。
簡易的な例: 2D のベッド[]
この例では、インベントリ上のベッドの見た目を Bedrock Edition や 1.12 以前の Java Edition のものに変更する。このファイルは名前を"red_bed.json
"とし、assets/minecraft/models/item
内に保存する。
{
"parent": "item/generated",
"textures": {
"layer0": "item/red_bed"
}
}
ここでは、parent
は item/generated
が指定されてあり、平面状のモデルになっている。textures
にある layer0
には assets/minecraft/textures/item
フォルダに テクスチャ用のファイル(red_bed
) を作っておき、それを指定している。この "red
" の部分を他の色に変えておくことで、他の色のベッドのモデルも変更できるが、各色別のファイルにする必要があるblack_bed.json
、green_bed.json
等)。各色のベッドは以下の通り。
上記の画像は名前を拡張子を.png
にしたまま<color>_bed
に変え、assets/minecraft/textures/item
内に入れること。また、layer0
に指定する名前はテクスチャ名と一致させるように。
例: 松明[]
この例ではアイテムとしての松明を記述する。モデルのファイルはtorch.json
で、assets/minecraft/models/item
に存在する。
File: torch.json
{
"parent": "item/generated",
"textures": {
"layer0": "block/torch"
},
"display": {
"thirdperson_righthand": {
"rotation": [ -90, 0, 0 ],
"translation": [ 0, 1, -3 ],
"scale": [ 0.55, 0.55, 0.55 ]
},
"firstperson_lefthand": {
"rotation": [ 0, -135, 25 ],
"translation": [ 0, 4, 2 ],
"scale": [ 1.7, 1.7, 1.7 ],
"scale": [ 0.9, 0.9, 0.9 ]
}
}
}
"parent"
タグでは"item/generated"
を使用している。そのため、アイテムとしてのモデルには2Dグラフィックが使用される。アイコンは"layer0"
で指定され、ブロックモデルで使用しているテクスチャもアイテムのアイコンに利用できる。松明のレイヤーは1つのみである。松明を一人称視点や三人称視点で視る場合、それぞれでモデルを回転させたり移動させたりスケーリングさせる必要がある。
例: 釣竿[]
この例では、1.9からの釣竿について記述する。モデルのファイルはfishing_rod.json
であり、assets/minecraft/models/item
内に存在する。
{
"parent": "item/handheld_rod",
"textures": {
"layer0": "item/fishing_rod_uncast"
},
"overrides": [
{
"predicate": {
"cast": 1
},
"model": "item/fishing_rod_cast"
}
]
}
このモデルでは、釣竿を振った場合、通常の釣竿の代わりに"item/fishing_rod_cast"
モデルが表示される。
歴史[]
Java Edition | |||||
---|---|---|---|---|---|
1.7.2 | 13w36a | 花が草のようにランダムに中心からずれるようになった。 | |||
1.8 | 14w06a | ブロックのモデルが変更できるようになった。 | |||
14w07a | モデルフォーマットが書き換えられた。「planes」だけでなく「cube」も追加された。また、物体の回転も1つにつき1方向22.5度刻みに制限された。 | ||||
14w11a | 固体ブロックの内部が真っ黒にならなくなった。 | ||||
14w11b | 一般的なブロックが事前定義された形状ではなくモデルを読み込むようになった。 | ||||
2014年4月2日 | TheMogMinerで、今後のモデルフォーマットの変更について投稿された。 | ||||
14w17a | 残りのほとんどの静的ブロックをモデル形式に変換。 | ||||
回転によるUVの詳細を保持する"rotateVariantTextures" を追加。 | |||||
14w25a | UV定義からdirectional属性が削除され、明治的なテクスチャ参照に置き換えられた。"textureFacing" は、ハッシュ記号(#)の前に"texture" パラメーターが付いた形に置き換えられた。 | ||||
"useAmbientOcclusion"の名前が"ambientocclusion"に変更された。 | |||||
"rotateVariantTextures"の名前が"UV lock"に変更された。 | |||||
"cull"の名前が"cullface"に変更された。 | |||||
回転が助長になり、1つの軸上でのみ発生することがより明確になった。例として、"cross" モデルの2つの面のうち1つの面の回転は次のようになる:"rotation": { "origin": [ 8, 8, 8 ], "axis": "y", "angle": 45, "rescale": true }, | |||||
code>models/blocks/meshesフォルダが削除され、モデルファイルはmodels/block に保存されるようになった。 | |||||
blockstatesフォルダが追加された。これは以前models/block フォルダであった。 | |||||
アイテムのモデルが変更できるようになった。 | |||||
14w27a | ブロックの状態名が、内部データをよりよく反映するデータに置き換えられた。一部のブロックについては、まだすべてのデータは反映されていない。将来のバージョンでは、数値データの値が完全にブロック状態のデータに置き換えられた際に、実際に保存されているデータを使用するように切り替える予定である。 | ||||
14w27b | ブロック状態ファイルがランダムモデルが可能なモデルの配列に対応するようになった。 | ||||
14w30a | アイテムモデルに"builtin/entity" が追加された。 | ||||
1.8.2 | pre5 | "translation"タグの値が-24から24でなければならなくなった。 | |||
"scale"タグの値が4以下でなければならなくなった。 | |||||
1.9 | 15w31a | UVが任意になり、指定されていない場合elementの位置に基づいて自動的に生成されるようになった。 | |||
ダメージ量、アイテムの状態、利き手で異なるアイテムのモデルとテクスチャを使用できるようになった。これはコンパスや時計、そして耐久値を持つすべてのアイテムに働く。また、弓と釣竿も追加のタグを持つようになった。 | |||||
フェンスのようにブロック状態に基づいてモデルを重ねることができるようになった。これにより、300近くのモデルが削減された。 | |||||
ブロックモデルのJSONの記述が厳しくなり、引用符(")で挟まれていない項目は無視されるようになった。 | |||||
"display"タグのデフォルトが変更され、"thirdperson" と"firstperson" はそれぞれ"thirdperson_righthand" と "thirdperson_lefthand" 、"firstperson_righthand" と"firstperson_lefthand" に置き換えられた。 | |||||
"parent"タグと"element"タグが共存可能になった。しかし、この場合上位のelementタグがすべてのelementを上書きしていた。 | |||||
設定から代替ブロックが削除された。 |
ヘルプ | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
メニュー画面 |
| ||||||||||||||||
開発元 | |||||||||||||||||
ゲームのカスタマイズ | |||||||||||||||||
エディション |
| ||||||||||||||||
ゲーム |
| ||||||||||||||||
映画 |
| ||||||||||||||||
書籍 |
| ||||||||||||||||
その他メディア |
| ||||||||||||||||
イベント |
| ||||||||||||||||
公式商品 |
| ||||||||||||||||
その他 |