16
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

2024のコマンド関連新要素のみまとめ (1.20.3~1.21.4)

Last updated at Posted at 2025-06-22

この記事は、Minecraft Command Advent Calendar 2024 24日目の記事です。:santa:
その予定でした!!が、転じて203日目の記事です。

はじめに

ここ最近のマイクラアプデにおける、コマンド関連要素の追加/変更で新たに出来るようになった主なことをバージョン別にまとめて大雑把に紹介します。あくまでも主要なものを主観で並べているので、全要素を網羅できていない点は大目に見ていただけると...。

私自身も1.20.3以降がっつりは追えていなかったので、自分用でもあったりします。ぜひこの機会に最新バージョンでの開発をご検討ください!!

Java版 Minecraft ver 1.21.4 時点の情報となります。

1.20.3 (1.20.4)


Minecraft Java Edition 1.20.3 | Minecraft

2023年12月5日にリリースされたマイナーアップデートです。新コマンドやfunction周りの機能、自由度の高いスコアボード表示などが導入されました。 1.20.4についてはその2日後にリリースされたバージョンであり、1.20.3における致命的なバグへの対応として緊急的にリリースされたバージョンとなっています。

参考:
Technical News in Minecraft 1.20.3 - slicedlime氏の動画
New Minecraft Release: 1.20.3, New Minecraft Release: 1.20.4 - 公式リリース記事

コマンド ─────────────

/tick🔸

ワールドのtick処理の頻度を操作することで、世界の時間をスローモーションや早送りにしたり、完全に止めたりすることができるようになりました。

基本的にチャット欄でのみ実行可、functionやコマンドブロックでは実行不可です。

/tick query - 現在のtick処理頻度とパフォーマンスの取得をする
/tick rate<rate> - tick速度を<rate>tick/秒に変更する

/tick freeze - プレイヤー以外の全ての処理を停止する
/tick step<time> - freeze中、処理を<time>tickだけ進める
/tick step stop - tick stepの処理を中断する
/tick unfreeze - freeze状態を解除し、処理を再開する

/tick sprint<time> - ゲームを<time>tick分高速で実行する
/tick sprint stop - sprintの高速処理を中断する

1203-tick.gif
停止させていたTNTの爆発処理を/tick unfreezeで再開


/return🔸

1.19.4で初登場し、1.20ですぐ削除されていましたが、バグ修正を経て完全復活しました。function内でのみ有効で、スコアやストレージに成功回数/値を返す (returnする) という機能を持っています。値を返しながらfunctionの実行を中断できるので、複数の条件検知のための場合分け手段や、負荷軽減の意図として用いることが多いです。

/return<value> - functionの実行を中断 (成功) し、値<value>を返す。
/return fail - functionの実行を中断 (失敗) し、値0を返す。
/return run<command> - functionの実行を中断し、コマンド<command>の実行結果を返す。

例) 視点先のブロックに応じて値を返す (function)
## チャットでの呼び出し例 → /execute anchored eyes positioned ^ ^ ^1 run function test:a

# ブロックに応じて値を返す
  execute if block ~ ~ ~ iron_block run return 1
  execute if block ~ ~ ~ gold_block run return 2
  execute if block ~ ~ ~ diamond_block run return 3
  
# プレイヤーのリーチ限界まで再帰
  execute unless entity @s[distance=..5] positioned ^ ^ ^1 run function test:a

/execute if function🔸

/returnと同様、バグ修正を経て復活しました。functionを実行し、そのfunctionの戻り値に応じて成功/失敗判定を出します。複数の条件分岐処理をまとめることで、大元のexecute側の記述を圧縮することができます。

/execute[if|unless]function<function>... -
関数<function>の実行が [ 成功 | 失敗 ] の場合、以降のコマンドを継続

例) 視点先5ブロック以内の草ブロック検知 (function)
## チャットでの呼び出し例 → /execute anchored eyes if function test:b run say 草ブロック!

# 草ブロックがあれば1を返し、それ以外の場合は0を返す
  execute unless entity @s[distance=..5] run return fail
  execute if block ^ ^ ^ grass_block run return 1

# 実行位置を1ブロック先に進めて再帰
  execute positioned ^ ^ ^1 run return run function test:b

/scoreboard

scoreboard表示の自由度が上がり、スコアホルダー名やスコア部分の記述を操作できるようになりました。スコアの値を太字にしたり、色を変更したりするほか、値の非表示や固定テキストの表示も可能です。つまりは何でも出来るというわけで。

/scoreboard players display name<target> <objective> <text> -
スコアホルダー<target><objective>のスコア表示をテキスト<text>に置き換える

/scoreboard players display numberformat<target> <objective> <format> -
スコアホルダー<target><objective>のスコアフォーマットを<format>に変更する
/scoreboard objectives modify<objective>numberformat<format> -
オブジェクト<objective>のデフォルトのスコアフォーマットを<format>に設定する

scoreboard objectives modify<scoreboard>displayautoupdate[true|false] -
オブジェクト<objective>の表示の自動更新を [ 有効 | 無効 ] 化する

例) 任意のスコア (test) の表示をいじる
# Xのスコア: 名前部分を"あ"、数字部分を"い"に変更
/scoreboard players display name X test "あ"
/scoreboard players display numberformat X test fixed "い"
# Yのスコア: 名前部分をカスタムフォント、数字部分を空白に変更
/scoreboard players display name Y test "\uE000"
/scoreboard players display numberformat Y test blank 
# Zのスコア: 名前部分を空白、数字部分のフォーマットを緑太字に変更
/scoreboard players display name Z test ""
/scoreboard players display numberformat Z styled {"color":"green","bold":true}

1203-scoreboard.png
sidebarへの任意テキスト表示。カスタムフォントも表示可能。

ジグソーブロック ─────────

ジグソーブロックの最大レベル数が 720 に増えました。ジグソーブロックとは、ランダム生成の構造物 (例:トライアルチャンバー) を構成するピースをジグソーパズルのように接続する役割を持ったブロックです。レベルは「ジグソーブロックから連続的に実行される接続処理の最大回数」のことを指しているので、んまあとりあえずデカいのです!

1203-jigsaw.png
通路も一つのピースとすることが多いため、こんなにも違いが。

Selection/Placement Priority🔸

構造物を構成するピース1つに複数のジグソーブロックを含めた場合、その構成ピースのどのジグソーから優先的に接続処理を行うかを設定できるようになりました。Selectionが生成元のジグソーの優先度、Placementが生成元のジグソーの優先度となっています。

... 初めての方はこれだけではイメージが湧くはずないと思うので、無いものとしてもらって良いと思います。一応記事を書く際参考にした、個人的にわかりやすいと感じた人様の動画の一節があったので紹介しておきます。

I Made the Trial Chambers MASSIVE - CodeNeon氏の動画

Pool Aliases🔸

指定したtemplateのpoolを別のpoolに置き換えできる要素が追加されました。これも無いものとして良いでしょう...!!雰囲気的には自動生成のダンジョン生成において、木造のものを途中から石造のダンジョンに変えていくような使い方ができそうなのですが、どうでしょうか、黒民さん。

ゲームルール ───────────

playersNetherPortalCreativeDelay🔸

プレイヤーがネザーゲートに入った後、ネザーに移動するまでの待機時間を変更できるようになりました。CreativeDelayはクリエイティブモードのプレイヤーの待機時間となっており、デフォルト値は0(tick)。これを大きな値にすることで、プレイヤーのネザー入退場を無効化することが可能です。

1203-nether.png
クリエイティブモードにおけるネザーポータルの無効化

playersNetherPortalDefaultDelay🔸

先述のCreativeDelay同様、ネザーに移動するまでの待機時間を変更します。ただDefaultDelayはクリエイティブモード以外のプレイヤーの待機時間となっていて、デフォルト値は80(tick)。これを0にすることで、瞬時にディメンションの切り替えが行われます。


projectilesCanBreakBlocks🔸

投射物によって破壊可能なブロックが実際破壊可能かどうかを操作できます。これらのブロックには鍾乳石、コーラスフラワーや飾り壺が含まれます。他には何かあったか。

1203-projectile.gif
破壊可能(true)か、破壊不能(false)か


maxCommandForkCount🔸

1tick間に実行されるコマンドの最大実行文脈数を操作できます。デフォルト値は65536。例えばチャット欄で /execute as @e ... と実行した際はワールド内の全てのエンティティとして処理が実行されますが、この各エンティティごとに分岐する処理それぞれが実行文脈となります。とは言ったものの、普通に生活していたら触ることはないと思います。

あくまでも /execute as @e as @e as @e など誤って実行文脈数を爆発させてしまった時のための設計 (の上限をいじれるようになった) という認識で合っているか...?

maxCommandChainLength

1tick間に実行されるコマンドの最大チェーン数に少し変更があったみたいです。デフォルト値は65536。と言われましても!という感じですが。こちらも普通に生活していてここを触ることはないと思うので詳しくは割愛します。

その他の小ネタ ────────

偽TNT (block_state)🔸

TNTエンティティの見た目を変更できるようになり、任意のブロックの見た目に擬態したTNTを召喚できるようになりました。加えて、TNTの爆発するまでの時間を操作するデータ Fuse が小文字 fuse に変換されました。

例) 4秒で爆発するダイヤモンドブロックを召喚
/summon tnt ~ ~ ~ {fuse:80s,block_state:{Name:"diamond_block"}}

1203-tnt.png
爆発する偽ダイヤモンドブロック


エンティティのCustomName表示

チェストトロッコ (chest_minecart) やリードの繋ぎ目 (leash_knot) などnon-livingエンティティに名前がついている場合、村人 (villager) などのlivingエンティティと同じように、視点を合わせることで名前が表示されるようになりました。CustomNameVisibleを設定した場合は常時名前が上に表示されます。

1203-projectile.gif
この要素、無くても良いんじゃあないかー!?


水中呼吸モブタグ

entity_typeタグにて水中呼吸可能タグ (can_breathe_under_water.json) が追加され、これによって任意のエンティティの水による窒息ダメージを防止できるようになりました。

例) オオカミと猫を溺れないようにする
{
    "values": [
        "wolf",
        "cat",
    ]
}

地面に刺さった矢のデータ

放たれた矢にデータタグ item が追加され、名前やエフェクト効果などのデータを保存するようになりました。これにより、拾うと別のアイテムが得られるといった不可思議な矢が作れるようになりました。

例) 拾うとダイヤモンドになる謎の矢の召喚
/summon arrow ~ ~ ~ {pickup:1b,item:{id:"diamond",count:1}}

short_grass 改名草

草 (grass) が、背の低い草 (short_grass) に改名されました。このような破壊的変更は珍しいですが、これだけで壊れるデータパックも少なくないはず。そこで、こんな実装をご紹介。

例) ブロックタグのjsonファイルがエラーを吐かないようにする "required":false
{
    "values": [
-       "minecraft:grass",
-       "minecraft:short_grass"
+       {"required":false,"id":"minecraft:grass"},
+       {"required":false,"id":"minecraft:short_grass"}
    ]
}

required は指定したブロックIDがブロックタグ全体のロードのために必要であるかを操作し、デフォルトではtrueとなっているため、今回のような改名があるとブロックタグがエラーを吐いてしまいます。こうすることで、まぁ無くてもいいよ!と、タグに伝えられるのです。

参考: What's the {"required"} tag do in item tags found in ... - Volcan4698氏のReddit記事

1.20.5 (1.20.6)


Minecraft Java Edition 1.20.5 | Minecraft

2024年4月23日にリリースされたマイナーアップデートです。アイテムデータに破壊的変更がなされた代わりに不可能だったことが可能になったことも多く、これからのコマンドに希望が見えたアップデートとなりました。1.20.6については1.20.4同様、特定のバグへの対応として緊急的にリリースされたバージョンとなっています。

参考:
Data Pack News in Minecraft 1.20.5 - slicedlime氏の動画
New Minecraft Release: 1.20.5, New Minecraft Release: 1.20.6 - 公式リリース記事
マイクラ1.20.5の技術的要素まとめ(自分用) - ひろばおさんの記事

コンポーネント ──────────

アイテムのデータフォーマットがNBTタグからコンポーネントと呼ばれるものに変更されました。基本的な概念は変わりませんが、この大きな変更 (改善) によってパフォーマンス面や将来の開発面で良いことがあるようです。

実際、以前は想像できなかったような新技術がこのバージョン以降で続々と実装されており、んまあ破壊的変更も甘んじて受け入れるか~!という気分です。

例) 名前+エンチャント付きの剣 (1.20.3→1.20.5)
- /give @s iron_sword{display:{Name:'"強い剣"'},Enchantments:[{id:"sharpness",lvl:5s}]}
+ /give @s iron_sword[custom_name='"強い剣"',enchantments={"sharpness":5}]

現在コンポーネントには65種類あり、元々NBTタグだったものの移植に加え、全く新しいものも多く存在します。あまりにも沢山あるため、新しいもの+紹介があると嬉しいものを主観と偏見で順に紹介していきます。


enchantment_glint_override🔸

アイテムのエンチャントの輝きの有無の設定ができます。以前は空のエンチャントを付けることやリソースパックでしか操作できなかったので、かなり良いものです。

例) 輝くダイヤモンド (1.20.3→1.20.5)
- /give @s diamond{Enchantments:[{}]}
+ /give @s diamond[enchantment_glint_override=true]
例) 輝かない金リンゴ
/give @s enchanted_golden_apple[enchantment_glint_override=false]

fire_resistant🔸

アイテムが炎上ダメージに耐性があるかを設定できます。元々ネザライト系のアイテムが持っていた性質を、そのままどのアイテムにも付与できます。また、loot function (/item modify等で用いるヤツ) で性質を剥奪することもでき、燃えうるネザライトを作れたりも。

1.21.2にて削除され、damage_resistantに機能が統合されます。

例) 燃えない木の棒
/give @s stick[fire_resistant={}]
例) 手に持ったアイテムの炎上耐性を剥奪
/item modify entity @s weapon.mainhand {"function":"set_components","components":{"!fire_resistant":{}}}

food🔸

アイテムを食べられるかどうかを設定できます。満腹度の回復値の設定のほか、食べるのにかかる時間や満腹でも食べられるかどうかなど設定が可能です。自由度がすごい。

1.21にて変更があり、using_converts_to 機能が追加されます。また、
1.21.2にも変更があり、consumable, use_remainderに一部機能が移植されます。

nutrition - 満腹度の回復値 (0以上の整数)
saturation - 隠し満腹度の回復値 (負の値も可)
can_always_eat - 満腹でも食べられるか

eat_seconds (1.21.2にて削除) - 食べるのにかかる時間
effects (1.21.2にて削除) - 消費時に付与されるエフェクト効果

例) 満腹でも食べられる草ブロック (50%で盲目エフェクト効果)
/give @s grass_block[food={nutrition:1,saturation:-1.5,can_always_eat:true,eat_seconds:0.2,effects:[{effect:{id:"blindness",amplifier:0,duration:20},probability:0.5}]}]

hide_tooltip🔸

アイテムのツールチップを非表示にするかを設定できます。以前はアイテムの名前を空にすることが限界でしたが、一切の表示を無くすことができるようになりました。助かる。

1203-tooltip.png
アイテム名を空にしても、空のツールチップが生まれてしまっていました。

例) ツールチップを非表示にしたアイテム
/give @s netherite_ingot[hide_tooltip={}]

intangible_projectile🔸

投射後のアイテムが拾えなくなるかどうかが設定できます。つまりはこのコンポーネントのついたアイテムを放ち、それが地面に刺さった場合、近づいても (クリエイティブモード以外では) 拾うことができません。トライデントにも有効のようで、面白い。

例) 使い切りの矢
/give @s arrow[intangible_projectile={}]
例) 使い切りのトライデント
/give @s trident[intangible_projectile={}]

item_name🔸

アイテムのデフォルト名を設定できます。アイテム名の変更というわけではなく、そのアイテムの大元の名前を変更することができます。デフォルト名と同じ扱いになるため、金床などで編集可能である後述のcustom_nameに上書きされます。

例) エメラルドの剣 (鉄の剣)
/give @s iron_sword[item_name='"エメラルドの剣"']

max_damage🔸

アイテムの最大耐久値を設定できます。後述のtoolと一緒に用いることで、あらゆるアイテムを耐久値のあるツールとして使用できるようになります。... 単に最大耐久値を変更するという用途でも嬉しい要素です。

max_stack_sizeと同時に使用することはできません。

例) すぐ壊れる、耐久値10の木のツルハシ
/give @s wooden_pickaxe[max_damage=10]

max_stack_size🔸

アイテムの最大スタックサイズを設定できます。値の範囲は 1~9999...?

max_damageと同時に使用することはできません。

例) 16個までしかスタックしないダイヤモンド
/give @s diamond[max_stack_size=16]

tool🔸

アイテムのツールとしての振る舞いを設定できます。後述のcan_breakと比べて、「特定のブロックごとに異なる破壊速度を設定できる」といった部分で差別化されます。

rules - ブロック破壊に関する各設定

blocks - 設定を適用する対象のブロック
speed - 指定したブロックの破壊速度
correct_for_drops - ブロックに対して「適正ツール」とするか

default_mining_speed - デフォルトのブロック破壊速度
damage_per_block - ブロック破壊毎に消耗する耐久値の量

例) ツルハシの性質を持つアメジストの欠片
/give @s amethyst_shard[tool={default_mining_speed:3,damage_per_block:1,rules:[{blocks:"#mineable/pickaxe",correct_for_drops:true}]},max_stack_size=1,max_damage=50,damage=0]

attribute_modifiers

AttributeModifiers タグを置き換える形で登場。一点、NBTタグの頃と比べて、新たなスロット指定方法 hand armor body が追加されました。attributeの uuid 指定部分が昔からずっと煩わしいですが、1.21でようやく廃止されます。よかったよかった。

1.21にて変更があり、name, uuid の設定が任意の id に置き換わります。また、
1.21.2にも変更があり、generic. player. zombie. のprefixが削除されます。

例) 足に装備すると足の速さが+50%される革の靴 (1.20.3→1.20.5)
- /give @s leather_boots{AttributeModifiers:[{AttributeName:"generic.movement_speed",Name:"example_speed",Amount:0.05,Operation:0,UUID:[I;0,0,0,0],Slot:"feet"}]}
+ /give @s leather_boots[attribute_modifiers=[{type:"generic.movement_speed",name:"example_speed",amount:0.05,operation:"add_value",uuid:[I;0,0,0,0],slot:"feet"}]]
例) どちらかの手に持つと体の大きさが3倍になる不思議な遺物
/give @s nautilus_shell[attribute_modifiers=[{type:"generic.scale",name:"example_scale",amount:3,operation:"add_multiplied_base",uuid:[I;0,0,0,1],slot:"hand"}]]

can_break

CanDestroy タグを置き換える形で登場。一点、ブロックステートstateの条件も検知可能になりました。つまりは特定の方角を向いたチェストや、レバーがパワーONの時のみ破壊可能にすることができるというわけです。

例) アドベンチャーモードで「丸石」のみ破壊できる鉄ツルハシ (1.20.3→1.20.5)
- give @s iron_pickaxe{CanDestroy:["cobblestone"]}
+ give @s iron_pickaxe[can_break={blocks:"cobblestone"}]
例) アドベンチャーモードで「重なった石ハーフ」や「育ち切った植物2種」を破壊できる棒
/give @s stick[can_break={predicates:[{blocks:"stone_slab",state:{type:"double"}},{blocks:["carrots","potatoes"],state:{age:"7"}}]}]

can_place_on

CanPlaceOn タグを置き換える形で登場。こちらもブロックステート条件の検知が可能です。

例) アドベンチャーモードで「湿った耕地」にのみ配置できる小麦の種
/give @s wheat_seeds[can_place_on={blocks:"farmland",state:{moisture:"7"}}]

charged_projectiles

Charged, ChargedProjectiles タグを置き換える形で登場。以前は要素数の上限が3でしたが、この数を超えて要素を設定可能になりました。つまりは一度にめちゃくちゃな数の投射物を放つクロスボウが存在できるわけで。

例) 一度にいくつかの花火を放つクロスボウ (1.20.3→1.20.5)
- /give @s crossbow{Charged:1b,ChargedProjectiles:[{id:"firework_rocket",Count:1b},{id:"firework_rocket",Count:1b},{id:"firework_rocket",Count:1b}]}
+ /give @s crossbow[charged_projectiles=[{id:"firework_rocket",count:1},{id:"firework_rocket",count:1},{id:"firework_rocket",count:1},{id:"firework_rocket",count:1},{id:"firework_rocket",count:1},{id:"firework_rocket",count:1},{id:"firework_rocket",count:1},{id:"firework_rocket",count:1},{id:"firework_rocket",count:1},{id:"firework_rocket",count:1}]]

1203-tooltip.png
バラけさせるには拡散エンチャントが必要。→ enchantments={"multishot":3}


container

BlockEntityTag.Items タグを置き換える形で登場。チェストや樽などの収納系ブロックの中身を設定した状態をアイテムに持たせることができます。

例) 樽の入ったチェストが入った樽 (1.20.3→1.20.5)
- /give @s barrel{BlockEntityTag:{Items:[{Slot:0b,id:"chest",Count:1b,tag:{BlockEntityTag:{Items:[{Slot:0b,id:"barrel",Count:1b}]}}}]}}
+ /give @s barrel[container=[{slot:0,item:{id:"chest",count:1,components:{"container":[{slot:0,item:{id:"barrel",count:1}}]}}}]]

container_loot

BlockEntityTag.LootTable, BlockEntityTag.LootTableSeed タグを置き換える形で登場。収納系ブロックのルートテーブルの設定ができます。また、seed を指定することでルートテーブルのシード値の固定ができたりもします。

例) ピラミッドの報酬loot_table入りチェスト (シード値:10)
/give @s chest[container_loot={loot_table:"chests/desert_pyramid",seed:10}]

custom_data

アイテムの tag 内に入れていたカスタムタグの保管場所がここへ移行されました。この影響で、データ操作系のコマンドが冗長になってしまったのは気に食わんなあと思っています。

例) カスタムデータ付きのニンジン付きの棒 (1.20.3→1.20.5)
- /give @s carrot_on_a_stick{magic_id:1}
+ /give @s carrot_on_a_stick[custom_data={magic_id:1}]
例) 手に持ったアイテムのカスタムデータ取得 (1.20.3→1.20.5)
- /data get entity @s SelectedItem.tag.magic_id
+ /data get entity @s SelectedItem.components.minecraft:custom_data.magic_id

custom_model_data

CustomModelData タグを置き換える形で登場。1つのアイテムに複数のテクスチャ (アイテムモデル) を紐づけするための値の設定をします。

1.21.4にて大規模な改修があり、できることが大幅に増えます。

例) カスタムモデルデータを持たせた鉄の剣 (1.20.3→1.20.5)
- /give @s iron_sword{CustomModelData:1}
+ /give @s iron_sword[custom_model_data=1]

custom_name

display.Name タグを置き換える形で登場。item_nameと一緒に使用された場合、custom_nameで設定したアイテム名が優先されます。

例) ニンジン付きの棒「魔法の杖」 (1.20.3→1.20.5)
- /give @s carrot_on_a_stick{display:{Name:'{"text":"魔法の杖","color":"#8547FF","bold":true}'}}
+ /give @s carrot_on_a_stick[custom_name='{"text":"魔法の杖","color":"#8547FF","bold":true}']

enchantments

Enchantments タグを置き換える形で登場。

例) ドロップ増加Xダメージ増加Xの鉄の剣 (1.20.3→1.20.5)
- /give @s iron_sword{Enchantments:[{id:"looting",lvl:10s},{id:"sharpness",lvl:10s}]} 
+ /give @s iron_sword[enchantments={"looting":10,"sharpness":10}]

hide_additional_tooltip

HideFlags タグの$2^{5}$の位を置き換える形で登場。元々 HideFlags はツールチップで表示させない情報を統合的に指定するビットフィールドでしたが、分離され、$2^{5}$の位が担当していた「様々な他の情報」を非表示にする機能のみがこのコンポーネントに当てられました。

その他の$2^{0}$~$2^{4}$, $2^{6}$, $2^{7}$の位が担当していたエンチャントの内容などはそれぞれのコンポーネント内で show_in_tooltip:false と記述することで非表示にできるようになりました。

... わかりにくい!歴史の話は止めだ

例) 不可壊+破壊可能ブロックのツールチップ非表示 (1.20.3→1.20.5)
- /give @s iron_pickaxe{Unbreakable:1b,CanDestroy:["stone"],HideFlags:12} 
+ /give @s iron_pickaxe[unbreakable={show_in_tooltip:false},can_break={blocks:"stone",show_in_tooltip:false}]
例) 革防具の色+エンチャントのツールチップ非表示 (1.20.3→1.20.5)
- /give @s leather_helmet{display:{color:10795537},Enchantments:[{id:"protection",lvl:3s}],HideFlags:65} 
+ /give @s leather_helmet[dyed_color={rgb:10795537,show_in_tooltip:false},enchantments={levels:{"protection":3},show_in_tooltip:false}]

lock

BlockEntityTag.Lock タグを置き換える形で登場。収納系ブロックに鍵をかけ、指定した文字列に一致するアイテムでしか開けられないようにすることができます。

1.21.2にて変更があり、鍵にあたるアイテムの自由度が高くなりました。
指定したコンポーネントに一致するアイテムでロックできるようになります。

例) 名前が「かまどの鍵」のアイテムでしか開けられないかまど (1.20.3→1.20.5)
- /give @s furnace{BlockEntityTag:{Lock:"かまどの鍵"}}
+ /give @s furnace[lock="かまどの鍵"]

lore

display.Lore タグを置き換える形で登場。

例) かまどの鍵! (1.20.3→1.20.5)
- /give @s tripwire_hook{display:{Name:'"かまどの鍵"',Lore:['"かまどを開けることができる。"']}}
+ /give @s tripwire_hook[custom_name='"かまどの鍵"',lore=['"かまどを開けることができる。"']]

loot function (/item modify等で用いるヤツ) の set_lore にて新たに置き換え方法を選ぶことができるようになり、アイテムlore編集がかなりやりやすくなりました。

置き換え方法 mode 機能
append loreの追加 (以前のreplace:falseの動作)
insert offset行目へのloreの挿入
replace_all loreの全置換 (以前のreplace:trueの動作)
replace_section offset行目 (からsize行分) の部分置換
例) 手に持ったアイテムの1行目にloreを追加 (prepend)
/item modify entity @s weapon.mainhand {"lore":["石でできた、歪で大きな鍵。"],"function":"set_lore","entity":"this","mode":"insert","offset":0}

profile

SkullOwner タグを置き換える形で登場。ヘッド用のスキンを設定する、ただそれだけ。

例) 特定のプレイヤーのヘッド (1.20.3→1.20.5)
- /give @s player_head{SkullOwner:"Hama_SH"}
+ /give @s player_head[profile={name:"Hama_SH"}]

written_book_content

pages, title, author タグなどを置き換える形で登場。新loot function set_written_book_pages を利用して本を編集することができるようになり、本編集に大革命が起きました。loreと同様に置き換え方法を選ぶことができ、本当に便利です。震える。

置き換え方法 mode 機能
append ページの追加
insert offset行目へのページの挿入
replace_all ページの全置換 (以前はset_nbt copy_nbtなどで辛うじて可能)
replace_section offsetページ目 (からsizeページ分) の部分置換
例) 手に持った本の2~3ページ目の内容を置換 (存在しない場合は失敗)
/item modify entity @s weapon.mainhand {"pages":[{"raw":"ああ"}],"function":"set_written_book_pages","mode":"replace_section","offset":1,"size":2}

1205-fish.gif
本を手に持った瞬間、/item modifyで最新の内容に更新するなど。


その他コンポーネント

banner_patterns base_color bees block_entity_data block_state bucket_entity_data bundle_contents damage debug_stick_state dyed_color entity_data firework_explosion fireworks instrument jukebox_playable lodestone_tracker map_color map_decorations map_id note_block_sound ominous_bottle_amplifier pot_decorations potion_contents rarity recipes repair_cost suspicious_stew_effects stored_enchantments trim unbreakable writable_book_content

詳細やコマンド実行例は公式Wikiを参照してください。

attributes ────────────

エンティティの能力値を指すattributeが新しく9つ追加されました。どれも新しさがあり、製作の幅が大きく広がる要素となっています。

例) プレイヤーの大きさを4倍にする
/attribute @s generic.scale base set 4
例) プレイヤーにかかる重力をデフォルトの0.5倍にするmodifier
/attribute @s generic.gravity modifier add 0-0-0-0-2 example_gravity -0.5 add_multiplied_base

1.21にて変更があり、name, uuid の設定が任意の id に置き換わります。また、
1.21.2にも変更があり、generic. player. zombie. のprefixが削除されます。


(generic.)scale🔸

エンティティサイズを制御します。これにより、あらゆるモブやプレイヤーの大きさの変更ができるようになりました。範囲は 0.0625~16.0 倍まで自由に設定でき、当たり判定もサイズに伴い調整されます。

1205-scale.png
デカい .....................!


(player.)block_interaction_range🔸

ブロックに対するプレイヤーのリーチの長さを制御します。範囲は 0.0~64.0 ブロック。値が0の場合、ブロックへの作用 (右クリック) と破壊 (左クリック) が一切できなくなります。

(player.)entity_interaction_range🔸

エンティティに対するプレイヤーのリーチの長さを制御します。範囲は 0.0~64.0 ブロック。村人と交易を行える範囲やモブへの攻撃リーチを伸ばしたり、無効化したりできます。

1205-range.gif
あんなに遠くの村人と交易できちゃう...!


(generic.)step_height🔸

ジャンプすることなく乗り越えられる段差の高さを制御します。範囲は 0.0~10.0 ブロック。デフォルトでは0.6ブロックしか乗り越えられないため、scaleを用いる場合、同じタイミングで比例するように設定していくと自然です。


(generic.)gravity🔸

エンティティにかかる重力の強さを制御します。範囲は -1.0~1.0。マイナスの値にすると、あろうことか重力が逆方向に働きます。なかなか面白い。

1205-range.gif
2023年のエイプリルフールの一要素でした。1年越し!


(generic.)safe_fall_distance🔸

落下ダメージを受けない限界の落下距離を制御します。範囲は -1024.0~1024.0。ダメージ計算式は 落下距離-指定値 となっているので、マイナスの値では着地動作をするだけでダメージを受ける状況を生み出します。jump_strengthと一緒に用いることが多いです。


(generic.)fall_damage_multiplier🔸

落下ダメージ補正値を制御します。範囲は 0.0~100.0。値は純粋に落下ダメージが何倍になるかを示します。... ただそれだけ。使いどころはあまりないかもしれません。


(generic.)jump_strength🔸

元々馬用に存在していたジャンプ力 horse.jump_strength が生まれ変わり、あらゆるエンティティのジャンプ力の制御ができるようになりました。

ところで、ネガティブエフェクトと言われていたものが削除されました。以前は128レベル以上の一部エフェクトに奇妙な仕様があり、説明は省きますが、これを悪用することでジャンプの無効化や重力の強化などができてしまっていました。... これが修正された末に、仕様が1.20.5のattributeに落とし込まれたんだぜ、そんなよもやま話でした。

例) 指定したエンティティのジャンプを無効化する (1.20.3→1.20.5)
- /effect give @s jump_boost infinite 128 true
+ /attribute @s generic.jump_strength base set 0.0
例) 指定したエンティティの重力を0にする (1.20.3→1.20.5)
- /effect give @s levitation infinite 255 true
+ /attribute @s generic.gravity base set 0.0

(player.)block_break_speed🔸

プレイヤーのブロック破壊速度を制御します。範囲は 0.0~1024.0。値は倍率を表します。

advancements ───────────

any_block_use🔸

item_used_on_block の機能がこちらに移植されました。あらゆるブロックへのインタラクト(右クリック)をトリガーとします。Conditionのmatch_toolでインタラクト時の手持ちのアイテム、location_checkでインタラクト先のブロックに条件をつけることができます。

例) パンを手に持った状態でチェストを開けることの検知
{
    "criteria": {
        "criteria": {
            "trigger": "any_block_use",
            "conditions": {
                "location": [
                    {
                        "condition": "match_tool",
                        "predicate": {
                            "items": "bread"
                        }
                    },
                    {
                        "condition": "location_check",
                        "predicate": {
                            "block": {
                                "blocks": "chest"
                            }
                        }
                    }
                ]
            }
        }
    }
}

item_used_on_block については機能が見直され、ちゃんとitemblockへのuseが成功しないと条件が通らなくなりました。デフォで条件match_toolがついているイメージ。多分

default_block_use🔸

制限付きのany_block_useです。チェストを開けるだとか、デフォのブロックへのインタラクトをトリガーとする、とされています。デフォで条件location_checkのイメージ。多分


crafter_recipe_crafted🔸

近く(8ブロック以内)のクラフターがアイテムをクラフトしたことをトリガーとします。

fall_after_explosion🔸

プレイヤーが爆発やウィンドバーストで打ち上げられた後、落下し始めたタイミングをトリガーとします。crafter_recipe_craftedと同様、コマンド製作では使わなそう!

コマンド ─────────────

/transfer🔸

プレイヤーを別のサーバーに転送することができます。以前はPluginなどが必要でしたが、コマンドでできるようになったことで便利 ...... なのか?なのでしょう。

/transfer<hostname> <port> <players> -
プレイヤー<player>をホスト名<hostname>のサーバーに転送する


/execute if items🔸

特定のスロットのアイテムを条件とする、/execute ( if/unless ) itemsサブコマンドが追加されました。以前アイテムの検知には /execute if data を用いる必要があり若干難易度の壁がありましたが、より直感的にコトを行えるようになりました。

/execute[if|unless]items<source> <slots> <item_predicate>... -
指定エンティティやブロック<source>のスロット<slots>に存在するアイテムの性質が<item_predicate> [ 一致 | 不一致 ] の場合、以降のコマンドを継続

例) オフハンドのアイテムの検知
- /execute if data entity @s Inventory[{Slot:-106b,id:"minecraft:book",components:{"minecraft:custom_data":{"magic_id":10}}}]
+ /execute if items entity @s weapon.offhand book[custom_data={"magic_id":10}]

また、この登場により、条件に一致するアイテムの検知/個数を取得する、アイテムを0個 /clearするコマンドの役目が終わりました。裏技的な存在でずっと居座っていたアイツ。

例) 指定したアイテムの検知/個数の取得 (1.20.3→1.20.5)
- /clear @s diamond 0
+ /execute if items entity @s inventory.* diamond

/item

スロット指定方法がいくつか追加されました。/itemに限らず使えますが、ここで紹介。

player.cursor - プレイヤーがカーソルで保持しているアイテム
player.crafting.0~player.crafting.3 - インベントリ内のクラフトスロット
contents - 単一のアイテムを持つエンティティ (額縁、アイテムディスプレイなど)

例) クラフトスロットをゴミ箱とする (function)
## 常時実行 → execute as @a if items entity @s player.crafting.* * run function test:c

# スロットにアイテムが存在する場合それを空気に置換
  execute if items entity @s player.crafting.0 * run item replace entity @s player.crafting.0 with air
  execute if items entity @s player.crafting.1 * run item replace entity @s player.crafting.1 with air
  execute if items entity @s player.crafting.2 * run item replace entity @s player.crafting.2 with air
  execute if items entity @s player.crafting.3 * run item replace entity @s player.crafting.3 with air

また、ワイルドカード → * が追加され、指定スロットの範囲が拡大されました。

ワイルドカード 指定範囲
player.crafting.* player.crafting.0 ~ player.crafting.3
container.* container.0 ~ container.53
hotbar.* hotbar.0 ~ container.8
inventory.* inventory.0 ~ inventory.26
enderchest.* enderchest.0 ~ enderchest.26
villager.* villager.0 ~ villager.7
horse.* horse.0 ~ horse.14
weapon.* weapon.mainhand, weapon.offhand
armor.* armor.head, armor.chest, armor.legs, armor.feet, armor.body
例) ホットバーのいずれのスロットにダイヤがあればkill
/execute if items entity @s hotbar.* diamond run kill @s
例) ホットバーのいずれのスロットにダイヤがあるかを検知する (predicate)
{
    "condition": "entity_properties",
    "entity": "this",
    "predicate": {
        "slots": {
            "hotbar.*": {
                "items": "diamond"
            }
        }
    }
}

/clear

アイテムの指定にもワイルドカード → * が使えるようになりました。/clearに限らず使えますが、ここで。また、/clearするアイテムの性質を指定する部分の自由度が上がりました。

例) 耐久値が残り30以下のアイテムのclear
/clear @s *[damage~{durability:{max:30}}]
例) ホットバーのいずれのスロットに "名前付き" ダイヤがあればkill
/execute if items entity @s hotbar.* diamond[custom_name="宝"] run kill @s

アイテムの性質を ,(かつ) や |(または) で繋げたり、アイテムの特定の性質の値が◯以上といった指定なども可能であり、組み合わせ次第で細かく絞りこむことが可能です。

例) foodコンポーネント持ち、またはスタック数が7以上のアイテムをclear
/clear @s *[food|count~{min:7}]

1205-clear.gif
食べ物+スタック数7以上のアイテムのみ消去!

最後に、コンポーネントの影響でcustom_data持ちのアイテム指定にも変更がありました。

例) カスタムデータ持ちのアイテムのclear (1.20.3→1.20.5)
- /clear @s carrot_on_a_stick{magic_id:2}
+ /clear @s carrot_on_a_stick[custom_data~{magic_id:2}]

/particle

dustblockitem のパーティクルの記述方法に変更がありました。この影響で、RGBの値に1より大きい値を設定した際に出力できていた綺麗なdustが意図せず?削除されてしまいました。惜しいヤツを失った。

例) パーティクル (1.20.3→1.20.5)
- /particle dust 1.0 0.0 0.0 1 ~ ~ ~ 0 0 0 0.1 10 force
+ /particle dust{color:[1.0,0.0,0.0],scale:1} ~ ~ ~ 0 0 0 0.1 10 force

- /particle dust_color_transition 0.0 0.0 1.0 2 1.0 1.0 1.0 ~ ~ ~ 0 0 0 0.1 10 force
+ /particle dust_color_transition{from_color:[0.0,0.0,1.0],scale:1,to_color:[1.0,1.0,1.0]} ~ ~ ~ 0 0 0 0.1 10 force

- /particle item ender_pearl ~ ~ ~ 0 0 0 0.1 10 force
+ /particle item{item:"ender_pearl"} ~ ~ ~ 0 0 0 0.1 10 force

- /particle block diamond_block ~ ~ ~ 0 0 0 0.1 10 force
+ /particle block{block_state:"diamond_block"} ~ ~ ~ 0 0 0 0.1 10 force

1205-particle.png
左からRGB (100000000 1 1)、(1 100000000 1)、(1 1 100000000)。見納め


/playsound

プレイヤー、ミキサーを指定しなくても実行できるようになりました。それだけだ!

例) 本当にそれだけ! (1.20.3→1.20.5)
- /playsound entity.player.levelup master @s
+ /playsound entity.player.levelup

/attribute

attributeのmodifier operationの名称が変更されました。

変更前 変更後 (1.20.5~) 操作
add add_value $Base$ + $値_{1}$+$値_{2}$+ ...
multiply_base add_multiplied_base $Base$ × ( $値_{1}$+$値_{2}$+ ... )
multiply add_multiplied_total $Base$ × ( 1+$値_{1}$ ) × ( 1+$値_{2}$ ) × ...

ゲームルール ───────────

spawnChunkRadius🔸

スポーンチャンクの広さを設定します。範囲は 0~32。実際のチャンクの広さはこの値を用いて 指定値×2-1 チャンク四方と計算されます。デフォルト値は2となっているので、標準では3×3チャンクがスポーンチャンクとして絶えずロード状態になっています。

初期チャンクは元々19×19でしたが、今回のバージョンから3×3に縮小されました。

リソースパック ──────────

カスタムオオカミテクスチャ🔸

リソースパックを用いて、オオカミのテクスチャを自由に追加できるようになりました。まず、assets/<namespace>/textures/entity/wolf に以下3種のテクスチャを配置します。

テクスチャ名 説明
wolf_◯◯.png variant名◯◯のオオカミの通常時のテクスチャ。
wolf_◯◯_angry.png オオカミの敵対時のテクスチャ。
wolf_◯◯_tame.png オオカミの友好時のテクスチャ。

続けてデータパックで data/<namespace>/wolf_variant/◇◇.json を作成すれば設定完了。<namespace> にはファイルの場所に応じ、minecraftの他、任意の名前空間を設定します。

例) オオカミの設定用jsonファイルテンプレート
{
    "wild_texture": "<namespace>:entity/wolf/wolf_◯◯",
    "angry_texture": "<namespace>:entity/wolf/wolf_◯◯_angry",
    "tame_texture": "<namespace>:entity/wolf/wolf_◯◯_tame",
    "biomes": "the_void"
}
例) variant名 "minecraft:black" のオオカミの召喚
# /summon wolf ~ ~ ~ {variant:"<namespace>:◇◇"}
/summon wolf ~ ~ ~ {variant:"minecraft:black"}

1205-wolf.png
まあその、テクスチャがちゃんと描けないと意味は無いわけですが。

カスタムバナーパターン🔸

オオカミと同様、バナーのテクスチャを自由に設定できるようになりました。assets/<namespace>/textures/entity/banner フォルダや assets/<namespace>/textures/entity/shield フォルダにテクスチャ ◯◯.png を配置し、データパックの data/<namespace>/banner_pattern/◇◇.json でファイルを参照することで、自作の模様を持ったバナーや盾を作成できます。

例) 模様の設定用jsonファイルテンプレート
{
    "asset_id": "<namespace>:〇〇",
    "translation_key": ""
}
例) 模様ID "minecraft:creeper" の装飾がなされた盾
# /give @s shield[banner_patterns=[{pattern:"<namespace>:◇◇",color:"white"}]]
/give @s shield[banner_patterns=[{pattern:"minecraft:creeper",color:"lime"}]]

その他の小ネタ ────────

loot function の埋め込み記述

predicate loot_table item_modifier やら、データパックで別途ファイルを生成する必要があった要素について、コマンド内に埋め込めるようになりました。

例) 天気が雨であるかの検知 (predicate埋め込み)
/execute if predicate {"condition":"weather_check","raining":true}

つまりはコマンドマクロをこれらに適用することができるようになり、やりたい放題です。

例) 金ブロックをX回rollする (loot_table埋め込み)
/loot give @s loot {"pools":[{"rolls":$(roll),"entries":[{"type":"item","name":"gold_block"}]}]}

カスタムクラフト (惜しい)

レシピの結果にコンポーネントを自由に設定できるようになりました。以前は判定用のアイテムをクラフト→検知→カスタムアイテムをgiveといった流れでしたが、自然にカスタムアイテムのクラフトができるように。ただ、素材にはコンポーネントは指定できません。惜し。

例)【裏技】エメラルドの剣のレシピ!
{
    "type": "minecraft:crafting_shaped",
    "pattern": [
        "|",
        "|",
        "T"
    ],
    "key": {
        "|": {
            "item": "emerald"
        },
        "T": {
            "item": "stick"
        }
    },
    "result": {
        "id": "minecraft:iron_sword",
        "components": {
            "minecraft:custom_name": "\"エメラルドの剣\"",
            "minecraft:custom_model_data": 1
        },
        "count": 1
    }
}

マルチショット弓

infinity multishot piercing これらのエンチャントが弓/クロスボウどちらにも付与できるようになりました。この影響で無限に打てるクロスボウだったり、マルチショット弓が可能に。

1205-wolf.png
消費する矢は1本。動的に消費するデータパックを作ったっていい。


動物繁殖用アイテムタグ

tags/item/◯◯_food.json にて動物を繁殖できるアイテムを設定できるようになりました。

例) ブタの誘惑アイテムを無くす (ニンジン付きの棒は反応する...)
{
    "replace": true,
    "values": [
    ]
}

謎にストライダーには strider_tempt_items というタグがあり、これを空にすると歪んだキノコ付きの棒にストライダーが反応しなくなります。右クリック検知的にはこっちの方がいいか?


反射可能な投擲物タグ

tags/entity_type/redirectable_projectile.json にて、反射できる投擲物を定義できるようになりました。タイミングをうまく合わせれば、トライデントや矢だって反射できます。

例) トライデントと矢を反射可能に
{
    "values": [
        "spectral_arrow",
        "trident"
    ]
}

1205-wolf.png
上手くやれば羽根突きとかも作れそうですが、どうですか?


エンチャントの表示順変更

tags/enchantment/tooltip_order.json で、アイテムのツールチップに表示されるエンチャントの順番を自由に入れ替えられるようになりました。ちょっと便利。

1.21 (1.21.1)


Minecraft Java Edition 1.21 | Minecraft

2024年6月13日にリリースされたメジャーアップデートです。既存エンチャントの要素がハードコードからデータパックで活用できるようになり、大幅にできることが増えた革新的なアップデートとなりました。

参考:
Data Pack News in Minecraft 1.21 - slicedlime氏の動画
New Minecraft Release: 1.21, New Minecraft Release: 1.21.1 - 公式リリース記事
マイクラ1.21のカスタムエンチャントまとめ - ひろばおさんの記事

ディレクトリ名変更 ────────

データパックのdataフォルダ内の各ディレクトリ名が見直され、1.21以降、単数形に統一されました。この変更により1.21に移行した途端データパックが動かなくなり、大焦りしたコマンド勢がいたとかいなかったとか。tagsフォルダの名前のみ変更がない点に注意です。

1.20.5以前 1.21以降
structures structure
advancements advancement
recipes recipe
loot_tables loot_table
predicates predicate
item_modifiers item_modifier
functions function
tags/functions tags/function
tags/items tags/item
tags/blocks tags/block
tags/entity_types tags/entity_type
tags/fluids tags/fluid
tags/game_events tags/game_event

エンチャント ───────────

エンチャントの要素がデータドリブンになったおかげでデータパックで活用できるようになり、(Aの条件下で)BしたときC などといった組み合わせが無数に追加されました。

例えば infinity は矢消費を無くす弓/クロスボウのエンチャントですが、実装を読み解くと (arrowに一致する)アイテムを消費(ammo_use)したとき、その消費数を0.0に(set)する。このような流れになっていることがわかります。

例) infinity「無限」エンチャントのコア(Effect)部分
{

    # ---------- 前略 ---------- #
    
    "slots": [
        "mainhand"
    ],
    "effects": {
        "minecraft:ammo_use": [     # B ... アイテムを消費
            {
                "effect": {
                    "type": "minecraft:set",     # C ... 数値の設定
                    "value": 0.0
                },
                "requirements": {
                    "condition": "minecraft:match_tool",     # A ... アイテムの一致
                    "predicate": {
                        "items": "minecraft:arrow"
                    }
                }
            }
        ]
    }
}
- 役割 名前
追加条件 Condition
効果(+トリガー) Effect Component (効果コンポーネント)
効果/設定 Effect Type (効果タイプ)

20のCondition、30の効果コンポーネント、13の効果タイプを組み合わせられて、何なら run_function なんて効果タイプもあるので、その自由度の高さが想像できるはずです。

ただ構造が多岐に渡るので解説し辛い… 本当に!Effect Component単体で効果を示すものもあれば、Effect Componentがトリガーの役割をしてEffect Typeで具体的な効果を指定するものも。便宜上正確な解説になってないところはすんません...。


また、エンチャントの定義は data/<namespace>/enchantment/◇◇.json にて行います。

例) カスタムエンチャントの全体図 (空のテンプレート)
{
    "description": "",
    "exclusive_set": "",
    "supported_items": "#minecraft:enchantable/durability",
    "primary_items": "",
    "weight": 1,
    "max_level": 1,
    "min_cost": {
        "base": 0,
        "per_level_above_first": 0
    },
    "max_cost": {
        "base": 0,
        "per_level_above_first": 0
    },
    "anvil_cost": 0,
    "slots": [
        "any"
    ],
    "effects": {}
}

description - エンチャント名
exclusive_set - このエンチャントと共存不可能なエンチャント (省略可能)
supported_items - このエンチャントが付与可能なアイテムの一覧
primary_items - エンチャントテーブルや村人との取引において、このエンチャントが出現しうるアイテム (省略可能)。省略した場合supported_itemsと中身同じの扱い。ここに記されなかった、supportedだけどprimaryでないアイテムは金床でのみエンチャント付与可能。

weight - エンチャントの出現確率
max_level - エンチャントの最大レベル ( 範囲 1~255 )
min_cost - エンチャントするために必要なコストの最小値
max_cost - エンチャントするために必要なコストの最大値
anvil_cost - 金床使用のエンチャント付与に必要なレベル

slots - このエンチャントの効果が発揮できるスロット

any - 下記いずれのスロット
hand - mainhand + offhand
mainhand - メインハンド
offhand - オフハンド
armor - いずれの装備スロット
head - 頭装備
chest - 胴装備
legs - 脚装備
feet - 足装備
body - 動物の鎧スロット

effects - エンチャントの効果 (コア処理の部分!)

カスタムエンチャントのデータパックの更新には /reload ではなく、
ワールドの入り直しが必要であることには注意が必要です。

例) エンチャントが追加できているかの確認
# /enchant @s <namespace>:◇◇
/enchant @s minecraft:test_enchant

新エンチャントを作る!よりはコマンド的な使い方をするといった場合、基本的には supported_items slots effects あたりをいじるだけでOKです。逆にエンチャントテーブルで新しく剣に付与するようなエンチャントが作りたい場合は、他も掘り下げる必要アリ。


... さて、効果コンポーネントと効果タイプを見ていきましょう。ひろばおさんの記事でな!!! 少しの事前知識があれば、さほど詰まることなく読み進められると思います。

コンポーネント ──────────

コマンド /give /item /loot において、! を用いることでコンポーネントの削除 (性質の剥奪) が可能になりました。元々はitem modifierにしか無かった機能ですが、より手軽に。

例) 燃える (炎上耐性の無い) ネザライトインゴット
/give @s netherite_ingot[!fire_resistant={}]

food

using_converts_to が追加されました。food持ちアイテムを消費したのち、そのアイテムを置き換える対象のアイテムを設定できます。food持ちアイテムのスタック数が0より多ければインベントリの他スロットに加えられ、インベントリが満杯であれば地面に吐き出します。

1.21.2にて変更があり、consumable, use_remainderに一部機能が移植されます。

nutrition - 満腹度の回復値 (0以上の整数)
saturation - 隠し満腹度の回復値 (負の値も可)
can_always_eat - 満腹でも食べられるか

eat_seconds (1.21.2にて削除) - 食べるのにかかる時間
effects (1.21.2にて削除) - 消費時に付与されるエフェクト効果
using_converts_to (1.21.2にて削除) - 消費時に与えられるアイテム

例) 消費時ヘタが残るリンゴ
/give @s apple[food={nutrition:4,saturation:2.4,using_converts_to:{id:"stick",count:1}}]

attributes ────────────

かなり煩わしかった name, uuid の設定が任意の id に置き換わりました。やった!あと、プレイヤーリスポーン時やディメンション移動時のattributeリセットが無くなりました

1.21.2にて変更があり、generic. player. zombie. のprefixが削除されます。

例) 足に装備すると足の速さが+50%される革の靴 (1.20.3→1.20.5→1.21)
- /give @s leather_boots{AttributeModifiers:[{AttributeName:"generic.movement_speed",Name:"example_speed",Amount:0.05,Operation:0,UUID:[I;0,0,0,0],Slot:"feet"}]}
- /give @s leather_boots[attribute_modifiers=[{type:"generic.movement_speed",name:"example_speed",amount:0.05,operation:"add_value",uuid:[I;0,0,0,0],slot:"feet"}]]
+ /give @s leather_boots[attribute_modifiers=[{type:"generic.movement_speed",id:"example_speed",amount:0.05,operation:"add_value",slot:"feet"}]]

(generic.)attack_knockback🔸

攻撃のノックバックの強さを制御します。範囲は 0.0~5.0。まさに武器のノックバックエンチャントそのもののイメージ。物理攻撃のみに適用されることは注意が必要です。


(generic.)burning_time🔸

炎上状態になってから火が消えるまでの時間。範囲は 0.0~1024.0。デフォルトは1倍で、この値を0にすることで炎上状態になること自体を無効化することができます。


(generic.)explosion_knockback_resistance🔸

爆発・ノックバック・耐性。範囲は 0.0~1.01で爆風を完全に無効化します。


(player.)mining_efficiency🔸

ブロックを採掘する際の効率を強化します。範囲は 0.0~1024.0。ブロックを正しいツールで採掘した場合のみに適用され、その速度は 指定値+1 倍となります。


(generic.)movement_efficiency🔸

移動速度低下効果のあるブロック (=ソウルサンド) の上を歩く際の速度低下効果を制御します。範囲は 0.0~1.01で速度低下効果を完全に無効化します。

日本語のWikiにはクモの巣など... とありましたが、試したところダメでした。これもできたら便利だったのに。恐らくはソウルスピードエンチャの効果が分離されただけであって。


(generic.)oxygen_bonus🔸

毎tick、酸素値 Air が減少する確率を制御します。範囲は 0.0~1024.0Airタグは200固定なので、通常10秒以上水中に居るとダメージを受けることになりますが、この値が 1/(指定値+1) の確率で減るように変更できるため、結果長い間水中に居られるようになります。


(player.)sneaking_speed🔸

スニーク中の速度低下効果を制御します。範囲は 0.0~1.01で歩きと同じ速さでの移動が可能になります。ダッシュ中のスニークもできるようになります。


(player.)submerged_mining_speed🔸

水中での採掘速度を制御します。範囲は 0.0~20.0。値は陸上での採掘速度との比となっており、デフォルトの0.2は水中での採掘が陸上と比べて1/5の速度であることを意味します。


(player.)sweeping_damage_ratio🔸

薙ぎ払い攻撃のダメージを制御します。範囲は 0.0~1.01で薙ぎ払いによる2体目のターゲットへのダメージが減衰せず、完全に伝播します。


(generic.)water_movement_efficiency🔸

水中における速度低下効果を制御します。範囲は 0.0~1.01で完全に無効化します。

predicates ────────────

is_on_ground🔸

エンティティが地面に接しているかに条件を付けることができます。エンティティのデータとして存在した OnGround がpredicateで指定できるようになった形で、扱いやすくなりました。

例) コマンド実行者が地面に接しているか検知 (1.20.5→1.21)
- /execute if data entity @s {OnGround:1b}
+ /execute if predicate {"condition":"entity_properties","entity":"this","predicate":{"flags":{"is_on_ground":true}}}

is_flying🔸

プレイヤーが飛んでいるか (エリトラ飛行/クリエイティブ空中移動) に条件を付けることができます。ファントムやニワトリ、エリトラを付けたモブなどには効果無しでした。残念だ

例) 飛行移動を検知するpredicate
{
    "condition": "entity_properties",
    "entity": "this",
    "predicate": {
        "flags": {
            "is_flying": true
        }
    }
}

can_see_sky🔸

空からの光源値が最大の 15 であるかどうかに条件を付けることができます。locationの一要素となっていて、地表において頭上に光を妨げるものが何も無いことを検知できます。

例) 頭上に空があるか検知するpredicate
{
    "condition": "entity_properties",
    "entity": "this",
    "predicate": {
        "location": {
            "can_see_sky": true
        }
    }
}

過去にはゴリ押しで検知する方法もありましたが、今ではこれで一撃。
How to Detect Skylight in Minecraft [1.13-1.20.4] - Cloud Wolf氏の動画


movement🔸

エンティティの速度や動きに条件を付けることができます。速度の単位は ブロック/秒。どれも min/max を指定することができて、例えば... 何に使えます? 【募】使用用途

x y z, speed - 各軸 xyz 方向へ分解した速度と、純粋な速度
horizontal_speed, vertical_speed - 水平、垂直方向の速度
fall_distance - 落下距離

movement_affected_by🔸

エンティティの動作に影響を与えているブロック (最大0.5ブロック下まで) に条件を付けることができます。氷やソウルサンドなどがこれにあたります。特別使う場面は少ないかも。


periodic_ticks🔸

指定したtickごとに真になるといった条件を付けることができます。これを使えば、数秒ごとに○○するなどといった処理を簡単に作ることができ、/scheduleループの代用としても。

例) 1.5秒ごとに報酬functionを呼び出すadvancement
{
    "criteria": {
        "requirement": {
            "trigger": "tick",
            "conditions": {
                "player": {
                    "periodic_tick": 30
                }
            }
        }
    },
    "rewards": {
        "function": "advent:reward"
    }
}

is_direct🔸

与えたダメージが直接的 (direct) か間接的 (indirect) かに条件を付けることができます。Source EntityDirect Entity が一致しているかを検知することができて、例えば弓を用いた攻撃の場合、実際に攻撃を与える Direct Entity は「矢」であるため、偽になります。

例) 間接的にモブを倒した時のみダイヤを落とすloot_table
{
    "pools": [
        {
            "rolls": 1,
            "entries": [
                {
                    "type": "item",
                    "name": "diamond",
                    "conditions": [
                        {
                            "condition": "damage_source_properties",
                            "predicate": {
                                "is_direct": false
                            }
                        }
                    ]
                }
            ]
        }
    ]
}

リソースパック ──────────

カスタム絵画テクスチャ🔸

前バージョンの流れで、絵画のテクスチャを自由に設定できるようになりました。asset/<namespace>/textures/painting/◯◯.png にテクスチャを配置し、 data/<namespace>/painting_variant/◇◇.json で参照することで自作ができます。

例) 1ブロック×1ブロック (16x16) の絵画の設定用jsonファイル
{
    "asset_id": "<namespace>:〇〇",
    "height": 1,
    "width": 1
}
/give @s painting[entity_data={id:"painting",variant:"<namespace>:◇◇"}]

カスタム音源 (Jukebox Songs)🔸

加えて、ジュークボックスに流すことのできる音源も自由に追加できるようになりました。

① リソースパックに追加したい音を配置 assets/<namespace>/sounds/◯◯.ogg
② リソースパックの assets/<namespace>/sounds.json にて音を定義

例) test.oggをmusic_disc.testとして参照できるよう定義
{
    "music_disc.test": {
        "sounds": [
            {
                "name": "test"
            }
        ]
    }
}

③ データパックで音源を定義 data/<namespace>/jukebox_song/◯◯.json
comparator_output はこの音源をジュークボックスが再生中に length_in_seconds 秒間発生させるレッドストーン信号の強さなので、これらはカスタム音源においては気にせずOK。

例) test.oggをmusic_disc.testとして参照できるよう定義
{
    "comparator_output": 0,
    "description": "テスト用音源",
    "length_in_seconds": 1.0,
    "sound_event": {
        "sound_id" : "music_disc.test"
    }
}

④ 音源を設定した任意のアイテムをジュークボックスへ

/give @s emerald[jukebox_playable={song:"<namespace>:test"}]

その他の小ネタ ────────

セレクター@n🔸

コマンド実行位置から一番近いエンティティを指すセレクター @n が追加されました。@e[sort=nearest,limit=1] と同じ機能を持ちます。コマンドがすっきりして素敵だ。


矢を必要としない弓 (エンチャント)

インベントリに矢を入れていなくても弓が打てるようになる技術!効果コンポーネント ammo_use を用いて、矢の発射時に消費する弾の数を0としています。

例) 使用する弾の消費数を0にするカスタムエンチャント "no_ammo"
{
    "description": "",
    "supported_items": "bow",
    "weight": 1,
    "max_level": 1,
    "min_cost": {
        "base": 0,
        "per_level_above_first": 0
    },
    "max_cost": {
        "base": 0,
        "per_level_above_first": 0
    },
    "anvil_cost": 0,
    "slots": [
        "any"
    ],
    "effects": {
        "ammo_use": [
            {
                "effect": {
                    "type": "set",
                    "value": 0
                }
            }
        ]
    }
}

続いて data/minecraft/tags/item/arrows.json をこのように記述します。弓の弾として弓自身を消費するように設定することで、矢が無くても弓を引き絞ることができるように。

例) 弓の弾として「弓」を使うようにするアイテムタグ
{
    "values": [
        "bow"
    ]
}
/give @s bow[enchantments={"advent:no_ammo":1}]

矢の着弾地点のブロックを爆発!(エンチャント)

効果コンポーネント hit_block を用いて、矢の着弾地点から簡単にコマンド (function) の実行ができるようになりました。ここでは着弾地点のブロックをTNT (そのブロックの見た目) に変換して爆発させる、そんなものを作ってみることとします。

例) 着弾地点をTNTにするカスタムエンチャント "explosive"
{
    "description": "",
    "supported_items": "bow",
    "weight": 1,
    "max_level": 1,
    "min_cost": {
        "base": 0,
        "per_level_above_first": 0
    },
    "max_cost": {
        "base": 0,
        "per_level_above_first": 0
    },
    "anvil_cost": 0,
    "slots": [],
    "effects": {
        "hit_block": [
            {
                "effect": {
                    "type": "run_function",
                    "function": "advent:tnt/arrow"
                }
            }
        ]
    }
}

効果エフェクト run_function で以下の2つのfunctionが実行されます。

例) function advent:tnt/arrow
# functionの実行者が矢である時だけ、矢の着弾地点のブロックの見た目をしたTNT召喚
    execute if entity @s[type=arrow] run function advent:tnt/summon with entity @s inBlockState

execute if を挟まないと、弓を手にもって左クリック (hit_block) した際も (プレイヤーが実行者として) 以降の処理が実行されてしまうため、少し不便ですが必要な操作になります。

続けて矢の「刺さったブロック」のデータ (inBlockState) を取得し、マクロで block_state を設定したTNTをそのブロックの座標に召喚していきます。

例) ②function advent:tnt/summon
# マクロでブロックの見た目のTNTを召喚
    $execute align xyz positioned ~0.5 ~ ~0.5 run summon tnt ~ ~ ~ {fuse:80,block_state:{Name:"$(Name)"}}
    playsound entity.tnt.primed master @a ~ ~ ~ 0.8 1

# 後処理 (矢が残り続けると刺さったブロックを次々とTNTにしてしまう)
    setblock ~ ~ ~ air
    kill @s
/give @s bow[enchantments={"advent:explosive":1}]

1212-explosive.gif
数コマンドでここまでできるようになったかと思うと感慨深い。


理論値最速の釣り竿 (エンチャント)

効果コンポーネント fishing_time_reduction を用いて、既存の 入れ食いIII エンチャント以上に釣り待機時間を大幅に短縮することが可能になります。結論は下の通り!

例) 理論値最速で釣れるエンチャント "ultra_lure"
{
    "description": "",
    "supported_items": "fishing_rod",
    "weight": 1,
    "max_level": 1,
    "min_cost": {
        "base": 0,
        "per_level_above_first": 0
    },
    "max_cost": {
        "base": 0,
        "per_level_above_first": 0
    },
    "anvil_cost": 0,
    "slots": [
        "any"
    ],
    "effects": {
        "fishing_time_reduction": [
            {
                "effect": {
                    "type": "add",
                    "value": 28.4
                }
            }
        ]
    }
}

基本 5~30秒 (100~600tick) である釣り時間はエンチャントによって短縮が可能ですが、最小/最大値だけを狙って操作することはできず、例えば 入れ食いII の場合だと最小/最大値の両方から200tickずつ短縮されます。結果として釣り時間は マイナス 5秒~20秒 (-100~400tick)。

マイナスの釣り時間が抽選された場合、次tickで正の値が選択されるまで再抽選が行われるため、時間を短縮しすぎることによってかえって釣り時間が長くなってしまうことも。

image.png
600tick以上短縮させた場合は永遠に再抽選が繰り返され、釣れなくなります。

色々加味して調べた結果、釣り時間を 568 tick短縮させた場合が理論値で、この場合平均約1.6秒 (32tick) で魚影が現れます。あくまでも理論値ですが、そんな感じです。

/give @s bow[enchantments={"advent:ultra_lure":1}]

1.21.2 (1.21.3)


Minecraft Java Edition 1.21.2 | Minecraft

2024年10月22日にリリースされたマイナーアップデートです。コンポーネントやpredicateの追加によりできることが更に増え、またも革新的なアップデートとなりました。

参考:
Data & Resource Pack News in Minecraft 1.21.2! - slicedlime氏の動画
New Minecraft Release: 1.21.2, New Minecraft Release: 1.21.3 - 公式リリース記事

エンチャント ───────────

change_item_damage🔸

効果タイプ damage_itemchange_item_damage に改名され、武器/ツールの耐久値を減らすだけでなく増やすこともできるように。マイナスの値で耐久値の回復ができます。

例) 走ると耐久値が回復するカスタムエンチャント "running_mend"
{

    # ---------- 前略 ---------- #

    "effects": {
        "tick": [
            {
                "requirements": {
                    "condition": "entity_properties",
                    "entity": "this",
                    "predicate": {
                        "flags": {
                            "is_sneaking": true
                        }
                    }
                },
                "effect": {
                    "type": "change_item_damage",
                    "amount": -1
                }
            }
        ]
    }
}
/give @s bow[enchantments={"advent:running_mend":1}]

projectile_spawned

投射物エンティティが召喚されたときに適用される効果コンポーネント projectile_spawned ですが、これを適用可能な対象が大きく増えました。雪玉、トライデント、ファイヤーチャージ、投擲ポーション、エンダーパール、釣竿 (浮き)、ロケット花火と、卵。

効果タイプは投射物として適用されるため、投げた瞬間に ignite される卵や run_function するトライデントなど、エンチャント一つで面白いことができるように。

コンポーネント ──────────

consumable🔸

右クリック長押しでアイテムを消費できるかを設定できます。これにより food が食べ物のデータ関連のみを持つようになりました。消費アニメーション+消費時間に大きな値を設定することで、右クリック検知用アイテムとして使用できるようになったりも。

consume_seconds - 消費にかかる時間
sound - 消費中の音 (playsoundのループ)
has_consume_particles - 消費中アイテムのパーティクルを出すか

animation - 消費中のアニメーション

none - なし
eat - 食べ物を食べる動作
drink - ポーション等を飲む動作
block - 盾でガードする動作
bow - 弓を引き絞る動作
spear - トライデントを構える動作
crossbow - クロスボウを引き絞る動作
spyglass - 望遠鏡を覗く動作
toot_horn - 角笛を吹く動作
brush - ブラシを使用する動作

on_consume_effects - 消費時の効果

apply_effects - 指定したステータス効果の付与
remove_effects - 指定したステータス効果の解除
clear_all_effects - すべてのステータス効果の解除
teleport_randomly - 指定範囲でランダムにテレポート
play_sound - 一度きり指定した音を再生する

例) 効果付き食べられる草ブロック (1.20.5→1.21.2)
- /give @s grass_block[food={nutrition:1,saturation:-1.5,can_always_eat:true,eat_seconds:0.2,effects:[{effect:{id:"blindness",amplifier:0,duration:20},probability:0.5}]}]
+ /give @s grass_block[food={nutrition:1,saturation:-1.5,can_always_eat:true},consumable={consume_seconds:0.2,on_consume_effects:[{type:"apply_effects",effects:[{id:"blindness",amplifier:0,duration:20}],probability:0.5}]}]
例) 天に掲げることができるというだけのダイヤ
/give @s diamond[consumable={consume_seconds:1000000000,animation:"spear",sound:"intentionally_empty",has_consume_particles:false}]

1212-consumable.png
ジャーーーン!ダイヤモンド!!


damage_resistant🔸

fire_resistant が改名されました。とついでに、炎上ダメージ以外のダメージ全般への耐性を設定できるように。アイテムが指定したダメージタイプに耐性があるかを設定できます。

例) 燃えない木の棒 (1.20.5→1.21.2)
- /give @s stick[fire_resistant={}]
+ /give @s stick[damage_resistant={types:"#is_fire"}]
例) 爆発耐性のないネザースター
/give @s nether_star[!damage_resistant]

death_protection🔸

プレイヤーが致死ダメージを受ける際身代わりになるかを設定できます。不死のトーテムと同じように、身代わりにするには手に持っている必要があります。

death_effects - 身代わり発動時の効果 ( consumableon_consume_effects と一緒!)

apply_effects - 指定したステータス効果の付与
remove_effects - 指定したステータス効果の解除
clear_all_effects - すべてのステータス効果の解除
teleport_randomly - 指定範囲でランダムにテレポート
play_sound - 一度きり指定した音を再生する

例) 不死のトーテム化した鉄のヘルメット (被ると効果無し)
/give @s iron_helmet[death_protection={}]

enchantable🔸

アイテムがエンチャント可能かを設定できます。これと合わせて、データパックの data/minecraft/tags/item/enchantable で付与できるエンチャントの設定もする必要アリ。また、value は大きい程レアなエンチャント付与の可能性が高くなります...?

例) エンチャントできる木の棒
/give @s stick[enchantable={value:10}]
例) 木の棒を data/minecraft/tags/item/enchantable/sword.json に追加
{
    "values": [
        "#minecraft:swords"
        "stick"
    ]
}

equippable🔸

アイテムを装備できるかを設定できます。以前アーマー系のアイテム以外を装備スロットに入れるためには右クリック検知等の特別な処理が必要でしたが、かなり簡単になりました。また、これによって簡単に自作のカスタムアーマーを追加できるように。

1.21.4にて変更があり、modelasset_id に改名されます。また、
アーマーモデルの置き場所が models/equipment/equipment/ となります。

slot - 装備先のスロット

head - 頭装備
chest - 胴装備
legs - 脚装備
feet - 足装備
body - 体 (オオカミなどに使用)
mainhand - メインハンド
offhand - オフハンド

equip_sound - 装備するときの効果音
model (1.21.2にて削除) - カスタムアーマーモデルの参照先
camera_overlay - 画面にオーバーレイするテクスチャ (例: くり抜かれたカボチャ)
allowed_entities - アイテムを装備可能なエンティティのID
dispensable - ディスペンサーで自動装備が可能か
swappable - 右クリックで指定スロットに装備可能か
damage_on_hurt - ダメージを受けたとき耐久値を減らすか

例) 頭に装備できる金ブロック (くり抜かれたカボチャのオーバーレイ付き)
/give @s gold_block[equippable={slot:head,camera_overlay:"misc/pumpkinblur"}]

1212-equippable.png
既存の装備を消さずに、完全に新しいアーマーテクスチャを追加


glider🔸

装備時にエリトラのように機能し、滑空できるようになるかが設定できます。

例) 胴に装備でき、滑空できるようになる羽
/give @s feather[equippable={slot:chest},glider={}]

item_model🔸

アイテムのモデル (見た目) を設定できます。以前はcustom_model_dataで管理されていたアイテムモデルですが、より明示的にこれを追加/変更できるようになりました。これにより、アイテムごとにリソースパックをいじらずとも好きな見た目を適用できるように。

1.21.4にて変更があり、フォルダ構成が変わると共に出来ることが大きく増えます。

例) 鉄の剣の見た目をしたトライデント
/give @s trident[item_model="iron_sword"]

repairable🔸

金床と指定素材でアイテムが修理可能かを設定できます。

例) 木の棒+10レベルで修理できる鉄の剣
/give @s iron_sword[repairable={items:"stick"},damage=100,repair_cost=9]

1212-repairable.png
repair_costでエンチャントのコストも操作可能。


tooltip_style🔸

アイテムのツールチップの背景を設定できます。リソースパックで自作のものを用意することで、好きにツールチップの枠と背景を設定することができます。

例) 自作の青枠付きの「黄金のリンゴ」
/give @s golden_apple[tooltip_style="resource:rarity_3"]

1212-tooltip_style.png
ツールチップの周りの青枠。これがあるだけでかなりの雰囲気が出る!!


use_cooldown🔸

エンダーパールに付いているようなクールダウンをどのアイテムにも設定できるようになりました。それは逆にクールダウンが無くせるようになったとも。

seconds - 何秒のクールダウンを設定するか
cooldown_group - 共通のクールダウンを持たせるアイテムのグループ名

例) 2秒ごとに投げられるウィンドチャージ
/give @s wind_charge[use_cooldown={seconds:2},cooldown_group:"test_group"]
例) 連投可能なエンダーパール
/give @s ender_pearl[!use_cooldown]

use_remainder🔸

1.21における food コンポーネントの中の using_converts_to が分離され、こいつになりました。特に機能が増えたというわけではなく、可読性が上がっただけといったところか。

例) ヘタ付きのリンゴ (1.21→1.21.2)
- /give @s apple[food={nutrition:4,saturation:2.4,using_converts_to:{id:"stick",count:1}}]
+ /give @s apple[food={nutrition:4,saturation:2.4},use_remainder={id:"stick",count:1}]

lock

収納系ブロックに鍵をかけられる lock ですが、鍵として指定できるアイテムの自由度が高くなりました。元々は「名前と一致するアイテム」しか鍵にできませんでしたが、このバージョンから指定した「コンポーネントに一致するアイテム」を鍵とすることができます。

例) ダメージ増加IIIのエンチャント付きアイテムで開けられる樽
/give @s barrel[lock={components:{"enchantments":{sharpness:3}}}]

food

eat_seconds effects using_converts_to が他のコンポーネントに分離され、こいつは食べ物のデータのみを持つコンポーネントということになりました。これで当分落ち着きそう。

nutrition - 満腹度の回復値 (0以上の整数)
saturation - 隠し満腹度の回復値 (負の値も可)
can_always_eat - 満腹でも食べられるか

例) 食用エメラルド (consumableが未設定だと食べられないが!)
/give @s emerald[food={nutrition:2,saturation:3,can_always_eat:true}]

potion_contents

ポーションの効果に関するデータを持つ potion_contents ですが、custom_name が追加され、アイテム名として参照する翻訳キーが追加されました。リソースパックの lang にて item.minecraft.<アイテムID>.effect.<custom_name> で定義できます。

potion - 継承するポーションのID
custom_color - ポーションの液の色。手作業では指定が難しいのでツールを使うのが吉。
custom_effects - ポーション/矢が持つエフェクト効果
custom_name - アイテム名として参照する翻訳キー

例) 毒+発光効果を持つポーションやら
/give @s potion[potion_contents={custom_name:"test",custom_color:10697727,custom_effects:[{id:"poison",amplifier:0,duration:1200},{id:"glowing",amplifier:0,duration:1200}]}]
/give @s tipped_arrow[potion_contents={custom_name:"test",custom_color:10697727,custom_effects:[{id:"poison",amplifier:0,duration:1200},{id:"glowing",amplifier:0,duration:1200}]}]
例) langファイル側の定義
{
    "item.minecraft.potion.effect.test": "テストポーション",
    "item.minecraft.splash_potion.effect.test": "テストスプラッシュポーション",
    "item.minecraft.tipped_arrow.effect.test": "テストの矢"
}

コマンド ─────────────

/rotate🔸

エンティティの向きを変える!ただそれだけのコマンドが追加されました。/teleportコマンドの向き変更部分のみといったところで、構文もそこを切り取っただけで同じ。

/rotate<target> <rotation> - <target>の向きを<rotation>に設定する
/rotate<target>facing<location> - <target>を地点<location>方向に向かせる
/rotate<target>facing entity<entity> - <target><entity>方向に向かせる

ただ!/rotateでは慣性を残しながら向きを変えられたり、エンティティに乗っていても降りずに向き変更ができるところで使いどころがあります。/tpでは実現できない部分。


/particle

新たに block_crumble trail パーティクルが追加されました。ここでは trail をご紹介。設定した目標座標に向けて飛んでいくという特徴のある、極小のパーティクルです。

color - パーティクルの色
target - パーティクルを向かわせる目標地点の座標

1.21.4にて変更があり、新しく duration の設定が必須になりました。

例) マクロで指定座標に向けてtrailの塊を飛ばす (function)
## チャットでの呼び出し例 → /function advent:trail {x:10,y:20,z:30}

$particle trail{color:[1.0,0.0,0.0],target:[$(x),$(y),$(z)]} ~ ~ ~ 1 1 1 0 100

/ride

リードの結び目、稲妻、釣竿の浮きに乗ることができなくなりました。乗れたの...?

attributes ────────────

generic. player. zombie. のprefixが削除されました。

例) 足に装備すると足の速さが+50%される革の靴 (1.20.3→1.20.5→1.21→1.21.2)
- /give @s leather_boots{AttributeModifiers:[{AttributeName:"generic.movement_speed",Name:"example_speed",Amount:0.05,Operation:0,UUID:[I;0,0,0,0],Slot:"feet"}]}
- /give @s leather_boots[attribute_modifiers=[{type:"generic.movement_speed",name:"example_speed",amount:0.05,operation:"add_value",uuid:[I;0,0,0,0],slot:"feet"}]]
- /give @s leather_boots[attribute_modifiers=[{type:"generic.movement_speed",id:"example_speed",amount:0.05,operation:"add_value",slot:"feet"}]]
+ /give @s leather_boots[attribute_modifiers=[{type:"movement_speed",id:"example_speed",amount:0.05,operation:"add_value",slot:"feet"}]]

tempt_range🔸

エンティティがアイテムによって引き付けられる範囲を制御します。基本的には友好モブに既存の要素となっていて、例えばこれを小さな値にすると豚はニンジンに興味を示さなくなります。ただ、0 にすると無限に追ってきます。仕様でしょうかバグでしょうか。

advancements ───────────

killed_by_arrow🔸

killed_by_crossbowkilled_by_arrow に改名され、名前の通り「クロスボウでエンティティをキル」→「矢でエンティティをキル」することにトリガーの条件が拡大されました。加えて何から矢が発射されたかを条件とする fired_from_weapon も追加されました。

例) クロスボウでエンティティを倒したことを検知 (1.21→1.21.2)
{
    "criteria": {
        "requirement": {
-           "trigger": "killed_by_crossbow"
+           "trigger": "killed_by_arrow",
+           "conditions": {
+               "fired_from_weapon": {
+                   "items": "crossbow"
+               }
+           }
        }
    }
}

predicates ────────────

input🔸

プレイヤーの入力に応じて条件を付けることができます。キーボードからの入力を直接的に検知することができる要素で、色々と面白いことができそう。すごい。

forward backward left right - 前後左右キーの入力
jump - ジャンプ (デフォルト: SPACE) キーの入力
sneak - スニーク (デフォルト: SHIFT) キーの入力
sprint - ダッシュ (デフォルト: CTRL) キーの入力

例) スニークしながら後ずさりしていることの検知
{
    "condition": "entity_properties",
    "entity": "this",
    "predicate": {
        "type_specific": {
            "type": "player",
            "input": {
                "backward": true,
                "sneak": true
            }
        }
    }
}

ゲームルール ───────────

disablePlayerMovementCheck🔸

プレイヤーの移動速度の制限を無効化するかを操作できます。デフォルトではfalseのため、制限は有効。disableElytraMovementCheck と同じような要素ですが、エリトラの有無に関わらず検知されるルールとなります。プレイヤーが早く移動しすぎるとゲームの仕様や安定性に色々と不便なことがあるため、通常時は制限が設けられています。

minecartMaxSpeed (仮)

トロッコの最大速度を操作できる要素が試験的に実装されました。ワールド生成時点で実験的機能から「トロッコの改善」をオンにすると使用できるようになります。デフォルト値は8(ブロック/秒)。値としては 1~1000 の範囲から選ぶことができます。爆速。

リソースパック ──────────

カスタムツールチップ背景🔸

tooltip_style コンポーネントを用いて、アイテムのツールチップの見た目を自由に追加できるようになりました。assets/<namespace>/textures/gui/sprites/tooltip フォルダの中に ◯◯_frame.png◯◯_background.png、加えてそれぞれの定義 (.mcmeta) を配置します。

例) ◯◯_background.pngの定義ファイル、◯◯_background.png.mcmetaの適当な中身
{
    "gui": {
        "scaling": {
            "type": "nine_slice",
            "width": 100,
            "height": 100,
            "border": 9
        }
    }
}
/give @s golden_apple[tooltip_style="<namespace>:〇〇"]

スロットのハイライト操作🔸

アイテムにマウスをホバーした時のハイライトをリソースパックで変更できるようになりました。assets/minecraft/textures/gui/sprites/container フォルダに格納されている
slot_highlight_back.pngslot_highlight_front.png がそれぞれアイテムの後方/前方のハイライトを示します。いつかコンポーネントで操作できるようにならないかどうか。


常に輝くモデル (light_emission)🔸

ブロックのモデルとして light_emission が追加され、モデルが周囲の光の影響を受けるかどうかを操作できるようになりました。0~15 までの値を指定することができ、必ず指定値以上の光を発するようになります。例えば15とした場合は常にモデルが光レベル15以上で描画されるため、常に光り輝くモデルとすることも。

OptifineなどのMOD無しで、暗闇で光る鉱石!みたいなものができるようになりました。


Vanilla Emissive Ores - Ewan Howell

その他の小ネタ ────────

好きな音を鳴らせる角笛🔸

データパックの新要素 instrument にて、好きに角笛を追加できるようになりました。

description - 角笛の説明文 (沈思とか書かれる部分)
range - ブロック単位での音の聞こえる範囲
sound_event - 鳴らす音のID
use_duration - 角笛のクールダウン (共通)

例) 進捗達成の音が鳴る角笛 test_horn
{
    "description": "",
    "range": 256.0,
    "sound_event": "ui.toast.challenge_complete",
    "use_duration": 0.01
}
/give @s goat_horn[instrument="<namespace>:test_horn"]

試験的な要素であり、読み込みにはワールドのリロードが必須です。

ニワトリの卵ドロップ🔸

ニワトリが定期的に産むアイテム chicken_lay 、羊や雪だるま等にハサミを使った時のドロップ shearing/sheep shearing/mooshroom shearing/snow_golem を管理するルートテーブルが追加されました。つまりは好きなアイテムドロップを設定できるようになったわけで。

1.21.4


Minecraft Java Edition 1.21.4 | Minecraft

2024年12月3日にリリースされたマイナーアップデートです。アイテムモデルの要素が分割されデータパックで活用できるようになり、多様な条件下でのアイテムモデルの変更/設定ができるようになりました。

参考:
Data & Resource Pack News in Minecraft 1.21.4! - slicedlime氏の動画
New Minecraft Release: 1.21.4 - 公式リリース記事

アイテムモデル ──────────

リソースパックのフォルダ直下に、従来の models textures フォルダに加えて、items というフォルダが追加されました。ここではアイテムがどのモデルを参照するかを定義するファイルを並べることができ、これによって色々と遊びができるようになりました。

1212-repairable.png
modelsでtexturesを参照+結びつけ、itemsでmodelsを参照+結びつけ。

1212-repairable.png
ありとあらゆるアイテムにitem_modelが適用可能!

また、アイテムモデルの登場によって全てのモデルが定義できるようになり、ハードコードだったトライデントや望遠鏡などのカスタムモデルも作れるようになりました。やった!

例) (行の順番を少しいじった) 既存のトライデントのアイテムモデル trident.json
{
    "model": {
        "type": "minecraft:select",   # 条件によってモデルを変更
        "property": "minecraft:display_context",   # アイテムのディスプレイ位置を条件とする
        "cases": [
            {
                "when": [   # 以下の3通りの場合、次のモデルを参照
                    "gui",   # UI上に置かれている
                    "ground",   # アイテムが地面に落ちている
                    "fixed"   # アイテムが額縁にはめられている
                ],
                "model": {
                    "type": "minecraft:model",
                    "model": "minecraft:item/trident"
                }
            }
        ],
        "fallback": {   # gui,ground,fixedの3通り以外だった場合、次のモデルを参照
            "type": "minecraft:condition",   # 条件によってモデルを変更
            "property": "minecraft:using_item",   # アイテムを使用中かどうかを条件とする
            "on_false": {   # 使用中でなければ以下のモデルを参照
                "type": "minecraft:special",
                "base": "minecraft:item/trident_in_hand",
                "model": {
                    "type": "minecraft:trident"
                }
            },
            "on_true": {   # 使用中なら以下のモデルを参照
                "type": "minecraft:special",
                "base": "minecraft:item/trident_throwing",
                "model": {
                    "type": "minecraft:trident"
                }
            }
        }
    }
}

hand_animation_on_swap🔸

アイテムモデルの1要素。これを false にすると、アイテムを持ち替えた時/データが変更された時の、下からググっとアイテムが上がってくるアニメーションが無効化されます。

例) 持ち替えアニメーションを無効化したアイテムモデル honey_apple.json
{
    "model": {
        "type": "model",
        "model": "item/honey_apple"
    },
    "hand_animation_on_swap": false
}

model (モデル参照手法)

さて、アイテムモデルの登場によって新しくできるようになった遊びを全て見ていきましょう。ひろばおさんの動画でな!!! ...ありがとうございます、本当に。


【1.21.4】最新のリソースパックでできること【マイクラリソパ解説】

コンポーネント ──────────

custom_model_data

アイテムのモデルを参照/制御するための数値でしたが、真偽フラグ、文字列やカラーコードも指定できるようになり、多様にモデルを参照できるようになりました。今までの1対1でのカスタムモデル割り当ての役割は item_model が担当し、コイツは複数のモデルを頻繁に変更/重ねる際など特別な場合に活用するような要素となりました。

floats - range_dispatch で参照されるfloat型の配列
flags - condition で参照される真偽フラグの配列
strings - select で参照される文字列の配列
colors - model の着色ソースで参照される、10進数カラーコードの配列

例) custom_model_dataが1のモデルを参照 (1.21.2→1.21.4)
- /give @s iron_sword[custom_model_data=1]
+ /give @s iron_sword[custom_model_data={floats:[1]}]

custom_model_data による場合分けはアイテムモデルファイルの中に定義します。

例) custom_model_dataを定義した鉄の剣のアイテムモデル iron_sword.json
{
    "model": {
        "type": "range_dispatch",
        "property": "custom_model_data",
        "entries": [
            {   # custom_model_data=0(以上) の時下のモデルを参照
                "model": {
                    "type": "model",
                    "model": "item/emerald_sword"
                },
                "threshold": 0
            },
            {   # custom_model_data=1(以上) の時下のモデルを参照
                "model": {
                    "type": "model",
                    "model": "item/obsidian_sword"
                },
                "threshold": 1
            },
            {   # custom_model_data=2(以上) の時下のモデルを参照
                "model": {
                    "type": "model",
                    "model": "item/crystal_sword"
                },
                "threshold": 2
            }
        ],
        "fallback": {   # custom_model_dataの設定が無ければ下のモデルを参照
            "type": "model",
            "model": "item/iron_sword"
        }
    }
}

equippable

アーマーモデルの置き場所が models/equipment/equipment/ となりました。また、カスタムアーマーモデル参照先を指していた modelasset_id に改名されました。

slot - 装備先のスロット

head - 頭装備
chest - 胴装備
legs - 脚装備
feet - 足装備
body - 体 (オオカミなどに使用)
mainhand - メインハンド
offhand - オフハンド

equip_sound - 装備するときの効果音
asset_id - カスタムアーマーモデルの参照先
camera_overlay - 画面にオーバーレイするテクスチャ (例: くり抜かれたカボチャ)
allowed_entities - アイテムを装備可能なエンティティのID
dispensable - ディスペンサーで自動装備が可能か
swappable - 右クリックで指定スロットに装備可能か
damage_on_hurt - ダメージを受けたとき耐久値を減らすか

例) 適当なアイテムにダイヤ頭装備の見た目を持たせる (1.21.2→1.21.4)
- /give @s acacia_fence[equippable={model:"diamond",slot:"head"}]
+ /give @s acacia_fence[equippable={asset_id:"diamond",slot:"head"}]

コマンド ─────────────

/attribute

1.21からプレイヤーリスポーン時のattributeがリセットされなくなりましたが、これに対応するように指定エンティティのattributeをリセットするコマンドが新たに追加されました。

/attribute<target> <attribute>base reset -
ターゲット<target>の属性値<attribute>を標準値にリセットする

例) 全てのプレイヤーの攻撃速度を標準にリセット
attribute @a attack_speed base reset

/particle

1.21.2で追加された新パーティクル trail を出す際、何tickかけて目標地点へ飛んでいくかを示す値 duration の設定が必須となりました。

color - パーティクルの色
target - パーティクルを向かわせる目標地点の座標
duration - 目標地点へ何tickかけて飛んでいくか

例) マクロで指定座標に向けてtrailの塊を飛ばす (function) (1.21.2→1.21.4)
## チャットでの呼び出し例 → /function advent:trail {x:10,y:20,z:30}

- $particle trail{color:[1.0,0.0,0.0],target:[$(x),$(y),$(z)]} ~ ~ ~ 1 1 1 0 100
+ $particle trail{color:[1.0,0.0,0.0],target:[$(x),$(y),$(z)],duration:60} ~ ~ ~ 1 1 1 0 100

リソースパック ──────────

カスタムアーマー🔸

equippable コンポーネントとリソースパックの要素 equipment を用いて、好きに装備のテクスチャを追加できるようになりました。1.21.2から追加自体は可能でしたが、1.21.4で仕様が安定したかと思うので、今回はこちらのバージョンでご紹介。

まず、assets/<namespace>/textures/entity/equipment 内の humanoidhumanoid_leggings フォルダ内に装備のテクスチャを並べます。humanoidが頭/胴/足装備、humanoid_leggingsが脚装備のテクスチャを指します。例は下の通り。

image.png
左上から頭, 足, 胴, 脚の順番。脚装備だけ別ファイルなの、どうしてですか

続けて、assets/<namespace>/equipment フォルダにてテクスチャを asset_id と結びつけます。ここでつけたjsonファイルの名前が、そのままアーマーのIDとして用いられます。

例) エメラルドアーマーの定義 emerald.json
{
    "layers": {
        "humanoid": [
            {
                "texture": "emerald"
            }
        ],
        "humanoid_leggings": [
            {
                "texture": "emerald"
            }
        ]
    }
}
例) エメラルドアーマー! (アイテムのテクスチャも変更)
/give @s stick[equippable={asset_id:"emerald",slot:"head"},item_model="emerald_helmet"]
/give @s stick[equippable={asset_id:"emerald",slot:"chest"},item_model="emerald_chestplate"]
/give @s stick[equippable={asset_id:"emerald",slot:"legs"},item_model="emerald_leggings"]
/give @s stick[equippable={asset_id:"emerald",slot:"feet"},item_model="emerald_boots"]

1214-armor.png
思ったより設定は簡単なので、後はテクスチャが描ければといいますか...。

その他の小ネタ ────────

テキストの影操作🔸

テキストフォーマットにて指定できる値に shadow_color が追加され、テキストの影の色や透明度を自由に変更できるようになりました。指定方法にはARGB値のリスト/10進変換したARGB値の2通りがあり、また0を指定するとデフォルトの影を消すこともできるように。

例) オレンジ色の影を付けたテキストを表示
/title @s title {"text":"テキスト影操作","shadow_color":[1,0.5,0,1],"bold":true}
例) (テキストの)影を消したカスタムフォントの表示
/title @s actionbar {"text":"\uE000","shadow_color":0}

1214-shadowcolor.png
鮮やかなテキストの影。あまり使いどころは無さそうか...?

看板やバナーをblock_displayで表示

名前の通りです。逆に言うと、以前は看板やバナーはblock_displayでは表示できませんでした。ただ、block_displayではブロックデータの指定ができないため、テキストを表示させた看板の召喚は難しいところがあります。text_displayと組み合わせるのが吉。

1214-shadowcolor.png
scaleやRotationをいじって好きな見た目のものを。

さいごに

皆のためコマンドの新要素を追いやすくするんだ!という大層な目標を掲げて3年程前より「コマンド関連新要素のみまとめ」の動画シリーズを作っていたのですが、去年は動画が出せず無念だったため、せめてもの思いで書いてみました。

今年はもう少し活動できる年にしたいですね...!!!ん、半分終わった?

16
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?