熱帯魚の種類はJava版が3,072、統合版が2,700です。水槽の底に魚が溜まるのは仕様で、底面を5×5以上、水深を6〜8にしてソウルサンドの気泡柱を1本入れると、ほぼ解消します。 この記事は、Minecraft 26.2のソースと統合版の挙動パックを読み、統合版のサーバーで水槽5種類を実測した結果をもとに書いています。
熱帯魚は何種類いるのか
熱帯魚の見た目は、体型・模様・地色・模様色の4つで決まります。 体型は細身(A)と平べったい(B)の2種類です。体型ごとに専用の模様が6種類あるので、模様は合計12種類です。
| 版 | 計算式 | 総数 |
|---|---|---|
| Java版 | 12模様 × 16地色 × 16模様色 | 3,072 |
| 統合版 | 12模様 × 15地色 × 15模様色 | 2,700 |
Java版と統合版で数が違う理由は、統合版に黒がないことです。
Java版は染料と同じ16色を使います。統合版の tropicalfish.json には地色のグループがID 0〜14の15個しかなく、黒にあたるID 15がありません。
内部のデータの持ち方も違います。
- Java版は4要素を1つの32bit整数
Variantに詰めます。並びは模様ID | 地色<<16 | 模様色<<24です - 統合版は体型・模様・地色・模様色を別々のコンポーネント(
minecraft:variant/minecraft:mark_variant/minecraft:color/minecraft:color2)で持ちます
色のIDは両版とも染料と同じです(0が白、1が橙、14が赤)。
名前付き22種のうち4種は版で中身が違う
熱帯魚をバケツに入れると、クマノミやナンヨウハギなど22種類にだけ固有の名前が付きます。 この22種をJava版のソースと統合版のJSONで突き合わせると、18種は同じで、4種は模様が違いました。
| 和名 | Java版 | 統合版 |
|---|---|---|
| ナンヨウハギ | フロッパー・灰/青 | サンストリーク・灰/スカイブルー |
| チョウチョウウオ | クレイフィッシュ・白/灰 | ブラインリー・白/灰 |
| ハマクマノミ | コーブ・赤/白 | サンストリーク・赤/白 |
| キイロハギ | フロッパー・黄/黄 | カゴカキダイ・黄/黄 |
ナンヨウハギとチョウチョウウオは体型も変わります。Java版では平べったい体型(B)、統合版では細身(A)です。 ハマクマノミとキイロハギは体型が同じで、模様だけが違います。
Java版と統合版の両方で同じ魚を出したい場合、この4種は避けたほうが無難です。クマノミ(コーブ・橙/白)は両版で同じです。
確認した方法
次の3つを突き合わせました。
- Java版のソース
TropicalFish.COMMON_VARIANTSにある22要素 - 統合版の
tropicalfish.jsonにあるminecraft:become_*イベントが付けるコンポーネントグループ - 名前の対応表。クライアントの
en_us.jsonのentity.minecraft.tropical_fish.predefined.0〜21と、統合版ja_JP.langのitem.tropicalSchool*
3番の並び順には注意が要ります。英語名はほぼアルファベット順ですが、末尾だけ 20 = Yellowtail Parrotfish、21 = Yellow Tang の順で、アルファベット順と逆です。アルファベット順だと思って読むと index が1つずれます。
水槽の底に熱帯魚が溜まる問題を実測する
条件を変えた水槽を5つ建て、熱帯魚が床からどの高さにいるかを測りました。
- サーバーはBDS 1.26.45.1、平坦ワールド、ゲームルールは既定のまま
- プレイヤーはいない状態(ticking areaで読み込み)
- 各水槽に熱帯魚を6匹入れ、5分間放置
- 30秒おきに全個体のY座標を記録。水槽あたり60サンプル
| 水槽 | 底面 × 水深 | 平均高さ | 床に張り付き率 | 上1/3にいる率 |
|---|---|---|---|---|
| A | 3×3 × 3 | 0.01 | 100% | 0% |
| B | 5×5 × 3 | 0.81 | 46.7% | 1.7% |
| C | 5×5 × 8 | 1.85 | 13.3% | 0% |
| D | 9×9 × 8 | 2.20 | 11.7% | 0% |
| E | 5×5 × 8 + 気泡柱 | 2.99 | 3.3% | 11.7% |
自鯖実測 (BDS 1.26.45.1 / 2026-09-25 / 各水槽6匹×30秒間隔×10回)
データ表で見る
| 項目 | % | 備考 |
|---|---|---|
| A: 3×3・水深3 | 100 | 6匹全員が1度も浮かなかった |
| B: 5×5・水深3 | 46.7 | |
| C: 5×5・水深8 | 13.3 | |
| D: 9×9・水深8 | 11.7 | |
| E: 5×5・水深8+気泡柱 | 3.3 | 上1/3にも11.7% |
3×3の水槽では、60サンプルすべてで6匹が床にいました。 底面を5×5にすると、床にいた割合は46.7%に下がります。さらに水深を8にすると13.3%です。 ソウルサンドの気泡柱を1本入れた水槽Eでは3.3%まで下がり、上層にいる割合も11.7%に増えました。
なぜ底に溜まるのか
統合版は魚がブロックから2マス離れようとする
統合版の熱帯魚には群れ用のコンポーネント minecraft:flocking があり、次の値が設定されています。
"minecraft:flocking": {
"min_height": 1.5,
"max_height": 6,
"block_distance": 2,
"block_weight": 0.85,
"influence_radius": 3,
"match_variants": true
}
- 魚は床から1.5〜6ブロックの高さを保とうとする(min_height / max_height)
- 魚はブロックから2マス離れようとする(block_distance)
- 離れる力の強さは0.85(block_weight)
- 3ブロック以内の魚が群れに入る(influence_radius)
- 同じ柄の魚としか群れない(match_variants)
底に溜まる原因は、ブロックから2マス離れようとする動きです。 3×3の水槽では中心にいても壁まで1マスしかありません。魚は四方の壁から押し返され、行き場をなくして床に留まります。水槽Aで100%張り付いたのはこのためです。
水深3の水槽では、床から1.5以上の高さを保つ余地もほとんどありません。
深さの上限も決まっています。目的地を探す minecraft:behavior.random_swim は上下4マスの範囲しか候補にしません(y_dist = 4)。水深を9以上にしても上半分は使われないので、深さは6〜8で足ります。
Java版は待機中の魚が沈み続ける
Java版では、何もしていない魚は毎tick沈みます。
移動制御 FishMoveControl は毎tick上向きに0.005の加速を与えます。一方、水中の移動処理 travelInWater は速度を0.9倍にしたうえで0.005を引きます。
この2つを合わせた終端速度は次のとおりです。
v = (v + 0.005) × 0.9 − 0.005
0.1v = −0.0005
v = −0.005 ブロック/tick(= 毎秒0.1ブロックの沈下)
上向きの力と下向きの力が釣り合わないため、魚は放っておくと沈みます。 浮き上がるのは、ランダム遊泳AIが自分より上の水ブロックを目的地に選んだときだけです。
目的地探しにも制限があります。候補は水平±10、垂直±7の範囲から抽選します。 10回続けてガラスや石に当たると、探索をやめて泳ぎ出しません。小さい水槽ではこの失敗が頻繁に起きます。
Java版には、あと2つ注意点があります。
- 群れの追従者はランダム遊泳をしません。リーダーが底で止まると全員が底に溜まります。リーダーから11マス離れると群れから抜けます
- バケツ以外で入れた名前なしの魚は、プレイヤーが32マス以上離れると泳ぎが止まります。無操作時間
noActionTimeが100を超えるとランダム遊泳が発動しなくなるためです。バケツで入れた魚と名前付きの魚は止まりません
底に溜まらない水槽の作り方
効果の大きい順に5つ挙げます。
1. 底面を最低5×5、できれば7×7以上にする 床にいた割合は、3×3で100%、5×5で46.7%でした。壁から2マス離れられる広さがあるかどうかで決まります。
2. 水深は6〜8にする 統合版は上下4マス、Java版は上下7マスしか目的地を探しません。9以上にしても効果は増えません。
3. ソウルサンドの気泡柱を1本入れる 床にソウルサンドを1個置き、その上を水で満たします。 気泡柱は魚にも効きます。毎tick上向きに0.06の加速を与え、上限は0.7です。 実測では、床にいた割合が13.3%から3.3%に、上層にいた割合が0%から11.7%になりました。
4. 観賞位置を離す 魚が逃げ始める距離は、統合版が6マス、Java版が8マスです。この距離より近づくと逃走が優先され、群れが崩れます。 統合版なら7マス以上、Java版なら9マス以上離れて眺めると落ち着きます。
5. Java版はバケツで入れた魚を使う バケツで入れた魚か名前付きの魚でないと、プレイヤーが離れたときに泳ぎが止まります。
コマンド早見
Java版は Variant 値を直接指定できます。値は 模様ID | 地色<<16 | 模様色<<24 です。
/summon tropical_fish ~ ~ ~ {Variant:67436}
バケツで渡す場合は、データコンポーネントで模様と色を書く方が読みやすくなります。
/give @s tropical_fish_bucket[tropical_fish/pattern="kob",tropical_fish/base_color="orange",tropical_fish/pattern_color="white"]
統合版では、/summon tropicalfish は体型・模様・2色をすべてランダムで決めます(minecraft:entity_spawned の処理)。任意の柄は指定できません。
指定できるのは名前付き22種のスポーンイベントだけです。
/summon tropicalfish ~ ~ ~ minecraft:become_clownfish
Official site
この実測は統合版サーバー(BDS)を自分で立てて行いました。友達と水槽や拠点を見せ合うなら、常時起動のサーバーが要ります
【ConoHa for GAME】マルチプレイがかんたんにすぐ遊べるゲームサーバープラン価格は公式サイトで要確認(2026-09-27時点の表記)
よくある質問
- Q. 熱帯魚が水槽の底で動かないのはなぜ?
- A. 仕様です。統合版では魚がブロックから2マス離れようとして行き場を失い、Java版では待機中の魚が沈み続けます。底面を5×5以上、水深を6〜8にして、ソウルサンドの気泡柱を1本入れると改善します。
- Q. Java版と統合版で同じ名前の魚の見た目が違うのはなぜ?
- A. ナンヨウハギ・チョウチョウウオ・ハマクマノミ・キイロハギの4種は、版によって模様の定義が違います。同じ見た目にはできません。
- Q. 統合版で好きな柄の熱帯魚を出すコマンドはある?
- A. ありません。
/summonは柄をランダムで決めます。指定できるのは名前付き22種のスポーンイベント(minecraft:become_clownfishなど)だけです。 - Q. 自然に湧く熱帯魚は名前付きが多い?
- A. Java版では、自然に湧く熱帯魚の90%が名前付き22種から選ばれます(
TropicalFish.finalizeSpawn)。統合版の割合は未検証です。 - Q. Java版の水槽で、離れると魚が止まるのはなぜ?
- A. バケツ以外で入れた名前なしの魚は、プレイヤーが32マス以上離れるとランダム遊泳が発動しなくなります。バケツで入れるか、名札を付けると止まりません。
Java版のモブが湧く距離や消える距離はJava版モブのスポーン仕様まとめにまとめています。 統合版のサーバーを立てて自分で試す場合は統合版サーバーの立て方、サーバー側でモブの数や範囲を調整する方法はモブ数の制御を参照してください。
検証に使ったソース: net.minecraft.world.entity.animal.fish.TropicalFish ほか(Minecraft 26.2 逆コンパイル)/ 統合版 tropicalfish.json(1.26.45)。
水槽の実測は Bedrock Dedicated Server 1.26.45.1、平坦ワールド、プレイヤー不在(ticking area使用)、各水槽6匹×60サンプル(2026-09-25)。