この記事は、Minecraft Command Advent Calendar 2024 24日目の記事です。
その予定でした!!が、転じて203日目の記事です。
ここ最近のマイクラアプデにおける、コマンド関連要素の追加/変更で新たに出来るようになった主なことをバージョン別にまとめて大雑把に紹介します。あくまでも主要なものを主観で並べているので、全要素を網羅できていない点は大目に見ていただけると…。
私自身も1.20.3以降がっつりは追えていなかったので、自分用でもあったりします。ぜひこの機会に最新バージョンでの開発をご検討ください!!
Java版 Minecraft ver 1.21.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
– tick速度を
tick/秒に変更する
/tick freeze
– プレイヤー以外の全ての処理を停止する/tick step
– freeze中、処理を
tickだけ進める
/tick step stop
– tick stepの処理を中断する/tick unfreeze
– freeze状態を解除し、処理を再開する
/tick sprint
– ゲームを
tick分高速で実行する
/tick sprint stop
– sprintの高速処理を中断する
停止させていたTNTの爆発処理を/tick unfreezeで再開
/return🔸
1.19.4で初登場し、1.20ですぐ削除されていましたが、バグ修正を経て完全復活しました。function内でのみ有効で、スコアやストレージに成功回数/値を返す (returnする) という機能を持っています。値を返しながらfunctionの実行を中断できるので、複数の条件検知のための場合分け手段や、負荷軽減の意図として用いることが多いです。
/return
– functionの実行を中断 (成功) し、値
を返す。/return fail
– functionの実行を中断 (失敗) し、値0
を返す。/return run
– functionの実行を中断し、コマンド
の実行結果を返す。
例) 視点先のブロックに応じて値を返す (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
...
–
関数
の実行が [ 成功 | 失敗 ] の場合、以降のコマンドを継続
例) 視点先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
–
スコアホルダー
の
のスコア表示をテキスト
に置き換える
/scoreboard players display numberformat
–
スコアホルダー
の
のスコアフォーマットを
に変更する/scoreboard objectives modify
numberformat
–
オブジェクト
のデフォルトのスコアフォーマットを
に設定する
scoreboard objectives modify
displayautoupdate
[true|false]
–
オブジェクト
の表示の自動更新を [ 有効 | 無効 ] 化する
例) 任意のスコア (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}
sidebarへの任意テキスト表示。カスタムフォントも表示可能。
ジグソーブロック ─────────
ジグソーブロックの最大レベル数が 7
→ 20
に増えました。ジグソーブロックとは、ランダム生成の構造物 (例:トライアルチャンバー) を構成するピースをジグソーパズルのように接続する役割を持ったブロックです。レベルは「ジグソーブロックから連続的に実行される接続処理の最大回数」のことを指しているので、んまあとりあえずデカいのです!
Selection/Placement Priority🔸
構造物を構成するピース1つに複数のジグソーブロックを含めた場合、その構成ピースのどのジグソーから優先的に接続処理を行うかを設定できるようになりました。Selectionが生成元のジグソーの優先度、Placementが生成元のジグソーの優先度となっています。
… 初めての方はこれだけではイメージが湧くはずないと思うので、無いものとしてもらって良いと思います。一応記事を書く際参考にした、個人的にわかりやすいと感じた人様の動画の一節があったので紹介しておきます。
I Made the Trial Chambers MASSIVE – CodeNeon氏の動画
Pool Aliases🔸
指定したtemplateのpoolを別のpoolに置き換えできる要素が追加されました。これも無いものとして良いでしょう…!!雰囲気的には自動生成のダンジョン生成において、木造のものを途中から石造のダンジョンに変えていくような使い方ができそうなのですが、どうでしょうか、黒民さん。
ゲームルール ───────────
playersNetherPortalCreativeDelay🔸
プレイヤーがネザーゲートに入った後、ネザーに移動するまでの待機時間を変更できるようになりました。CreativeDelayはクリエイティブモードのプレイヤーの待機時間となっており、デフォルト値は0
(tick)。これを大きな値にすることで、プレイヤーのネザー入退場を無効化することが可能です。
playersNetherPortalDefaultDelay🔸
先述のCreativeDelay同様、ネザーに移動するまでの待機時間を変更します。ただDefaultDelayはクリエイティブモード以外のプレイヤーの待機時間となっていて、デフォルト値は80
(tick)。これを0
にすることで、瞬時にディメンションの切り替えが行われます。
projectilesCanBreakBlocks🔸
投射物によって破壊可能なブロックが実際破壊可能かどうかを操作できます。これらのブロックには鍾乳石、コーラスフラワーや飾り壺が含まれます。他には何かあったか。
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"}}
エンティティのCustomName表示
チェストトロッコ (chest_minecart) やリードの繋ぎ目 (leash_knot) などnon-livingエンティティに名前がついている場合、村人 (villager) などのlivingエンティティと同じように、視点を合わせることで名前が表示されるようになりました。CustomNameVisible
を設定した場合は常時名前が上に表示されます。
水中呼吸モブタグ
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記事
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等で用いるヤツ) で性質を剥奪することもでき、燃えうるネザライトを作れたりも。
例) 燃えない木の棒
/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🔸
アイテムのツールチップを非表示にするかを設定できます。以前はアイテムの名前を空にすることが限界でしたが、一切の表示を無くすことができるようになりました。助かる。
アイテム名を空にしても、空のツールチップが生まれてしまっていました。
例) ツールチップを非表示にしたアイテム
/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と一緒に用いることで、あらゆるアイテムを耐久値のあるツールとして使用できるようになります。… 単に最大耐久値を変更するという用途でも嬉しい要素です。
例) すぐ壊れる、耐久値10の木のツルハシ
/give @s wooden_pickaxe[max_damage=10]
max_stack_size🔸
アイテムの最大スタックサイズを設定できます。値の範囲は 1
~99
。99
…?
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}]]
バラけさせるには拡散エンチャントが必要。→ 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}
本を手に持った瞬間、/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
倍まで自由に設定でき、当たり判定もサイズに伴い調整されます。
(player.)block_interaction_range🔸
ブロックに対するプレイヤーのリーチの長さを制御します。範囲は 0.0
~64.0
ブロック。値が0
の場合、ブロックへの作用 (右クリック) と破壊 (左クリック) が一切できなくなります。
(player.)entity_interaction_range🔸
エンティティに対するプレイヤーのリーチの長さを制御します。範囲は 0.0
~64.0
ブロック。村人と交易を行える範囲やモブへの攻撃リーチを伸ばしたり、無効化したりできます。
(generic.)step_height🔸
ジャンプすることなく乗り越えられる段差の高さを制御します。範囲は 0.0
~10.0
ブロック。デフォルトでは0.6
ブロックしか乗り越えられないため、scaleを用いる場合、同じタイミングで比例するように設定していくと自然です。
(generic.)gravity🔸
エンティティにかかる重力の強さを制御します。範囲は -1.0
~1.0
。マイナスの値にすると、あろうことか重力が逆方向に働きます。なかなか面白い。
(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
については機能が見直され、ちゃんとitemのblockへのuseが成功しないと条件が通らなくなりました。デフォで条件match_tool
がついているイメージ。多分
default_block_use🔸
制限付きのany_block_useです。チェストを開けるだとか、デフォのブロックへのインタラクトをトリガーとする、とされています。デフォで条件location_check
のイメージ。多分
crafter_recipe_crafted🔸
近く(8ブロック以内)のクラフターがアイテムをクラフトしたことをトリガーとします。
fall_after_explosion🔸
プレイヤーが爆発やウィンドバーストで打ち上げられた後、落下し始めたタイミングをトリガーとします。crafter_recipe_craftedと同様、コマンド製作では使わなそう!
コマンド ─────────────
/transfer🔸
プレイヤーを別のサーバーに転送することができます。以前はPluginなどが必要でしたが、コマンドでできるようになったことで便利 …… なのか?なのでしょう。
/transfer
–
プレイヤー
をホスト名
のサーバーに転送する
/execute if items🔸
特定のスロットのアイテムを条件とする、/execute ( if/unless ) itemsサブコマンドが追加されました。以前アイテムの検知には /execute if data を用いる必要があり若干難易度の壁がありましたが、より直感的にコトを行えるようになりました。
/execute
[if|unless]
items
...
–
指定エンティティやブロック
のスロット
に存在するアイテムの性質が
と [ 一致 | 不一致 ] の場合、以降のコマンドを継続
例) オフハンドのアイテムの検知
- /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}]
最後に、コンポーネントの影響で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
dust
系、block
系、item
のパーティクルの記述方法に変更がありました。この影響で、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
左から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/
に以下3種のテクスチャを配置します。
テクスチャ名 | 説明 |
---|---|
wolf_◯◯.png |
variant名◯◯のオオカミの通常時のテクスチャ。 |
wolf_◯◯_angry.png |
オオカミの敵対時のテクスチャ。 |
wolf_◯◯_tame.png |
オオカミの友好時のテクスチャ。 |
続けてデータパックで data/
を作成すれば設定完了。
にはファイルの場所に応じ、minecraftの他、任意の名前空間を設定します。
例) オオカミの設定用jsonファイルテンプレート
{
"wild_texture": ":entity/wolf/wolf_◯◯" ,
"angry_texture": ":entity/wolf/wolf_◯◯_angry" ,
"tame_texture": ":entity/wolf/wolf_◯◯_tame" ,
"biomes": "the_void"
}
例) variant名 “minecraft:black” のオオカミの召喚
# /summon wolf ~ ~ ~ {variant:":◇◇"}
/summon wolf ~ ~ ~ {variant:"minecraft:black"}
まあその、テクスチャがちゃんと描けないと意味は無いわけですが。
カスタムバナーパターン🔸
オオカミと同様、バナーのテクスチャを自由に設定できるようになりました。assets/
フォルダや assets/
フォルダにテクスチャ ◯◯.png
を配置し、データパックの data/
でファイルを参照することで、自作の模様を持ったバナーや盾を作成できます。
例) 模様の設定用jsonファイルテンプレート
{
"asset_id": ":〇〇" ,
"translation_key": ""
}
例) 模様ID “minecraft:creeper” の装飾がなされた盾
# /give @s shield[banner_patterns=[{pattern:":◇◇",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
これらのエンチャントが弓/クロスボウどちらにも付与できるようになりました。この影響で無限に打てるクロスボウだったり、マルチショット弓が可能に。
消費する矢は1本。動的に消費するデータパックを作ったっていい。
動物繁殖用アイテムタグ
tags/item/◯◯_food.json
にて動物を繁殖できるアイテムを設定できるようになりました。
例) ブタの誘惑アイテムを無くす (ニンジン付きの棒は反応する…)
{
"replace": true,
"values": [
]
}
謎にストライダーには strider_tempt_items
というタグがあり、これを空にすると歪んだキノコ付きの棒にストライダーが反応しなくなります。右クリック検知的にはこっちの方がいいか?
反射可能な投擲物タグ
tags/entity_type/redirectable_projectile.json
にて、反射できる投擲物を定義できるようになりました。タイミングをうまく合わせれば、トライデントや矢だって反射できます。
例) トライデントと矢を反射可能に
{
"values": [
"spectral_arrow",
"trident"
]
}
エンチャントの表示順変更
tags/enchantment/tooltip_order.json
で、アイテムのツールチップに表示されるエンチャントの順番を自由に入れ替えられるようになりました。ちょっと便利。
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"
}
}
}
]
}
}
– | 役割 | 名前 |
---|---|---|
A | 追加条件 | Condition |
B | 効果(+トリガー) | Effect Component (効果コンポーネント) |
C | 効果/設定 | Effect Type (効果タイプ) |
20のCondition、30の効果コンポーネント、13の効果タイプを組み合わせられて、何なら run_function
なんて効果タイプもあるので、その自由度の高さが想像できるはずです。
ただ構造が多岐に渡るので解説し辛い… 本当に!Effect Component単体で効果を示すものもあれば、Effect Componentがトリガーの役割をしてEffect Typeで具体的な効果を指定するものも。便宜上正確な解説になってないところはすんません…。
また、エンチャントの定義は data/
にて行います。
例) カスタムエンチャントの全体図 (空のテンプレート)
{
"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 :◇◇
/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より多ければインベントリの他スロットに加えられ、インベントリが満杯であれば地面に吐き出します。
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.0
。1
で爆風を完全に無効化します。
(player.)mining_efficiency🔸
ブロックを採掘する際の効率を強化します。範囲は 0.0
~1024.0
。ブロックを正しいツールで採掘した場合のみに適用され、その速度は 指定値+1
倍となります。
(generic.)movement_efficiency🔸
移動速度低下効果のあるブロック (=ソウルサンド) の上を歩く際の速度低下効果を制御します。範囲は 0.0
~1.0
。1
で速度低下効果を完全に無効化します。
日本語のWikiにはクモの巣など… とありましたが、試したところダメでした。これもできたら便利だったのに。恐らくはソウルスピードエンチャの効果が分離されただけであって。
(generic.)oxygen_bonus🔸
毎tick、酸素値 Air
が減少する確率を制御します。範囲は 0.0
~1024.0
。Air
タグは200
固定なので、通常10秒以上水中に居るとダメージを受けることになりますが、この値が 1/(指定値+1)
の確率で減るように変更できるため、結果長い間水中に居られるようになります。
(player.)sneaking_speed🔸
スニーク中の速度低下効果を制御します。範囲は 0.0
~1.0
。1
で歩きと同じ速さでの移動が可能になります。ダッシュ中のスニークもできるようになります。
(player.)submerged_mining_speed🔸
水中での採掘速度を制御します。範囲は 0.0
~20.0
。値は陸上での採掘速度との比となっており、デフォルトの0.2
は水中での採掘が陸上と比べて1/5の速度であることを意味します。
(player.)sweeping_damage_ratio🔸
薙ぎ払い攻撃のダメージを制御します。範囲は 0.0
~1.0
。1
で薙ぎ払いによる2体目のターゲットへのダメージが減衰せず、完全に伝播します。
(generic.)water_movement_efficiency🔸
水中における速度低下効果を制御します。範囲は 0.0
~1.0
。1
で完全に無効化します。
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 Entity
と Direct Entity
が一致しているかを検知することができて、例えば弓を用いた攻撃の場合、実際に攻撃を与える Direct Entity
は「矢」であるため、偽になります。
例) 間接的にモブを倒した時のみダイヤを落とすloot_table
{
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "item",
"name": "diamond",
"conditions": [
{
"condition": "damage_source_properties",
"predicate": {
"is_direct": false
}
}
]
}
]
}
]
}
リソースパック ──────────
カスタム絵画テクスチャ🔸
前バージョンの流れで、絵画のテクスチャを自由に設定できるようになりました。asset/
にテクスチャを配置し、 data/
で参照することで自作ができます。
例) 1ブロック×1ブロック (16×16) の絵画の設定用jsonファイル
{
"asset_id": ":〇〇" ,
"height": 1,
"width": 1
}
/give @s painting[entity_data={id:"painting",variant:":◇◇" }]
カスタム音源 (Jukebox Songs)🔸
加えて、ジュークボックスに流すことのできる音源も自由に追加できるようになりました。
① リソースパックに追加したい音を配置 assets/
② リソースパックの assets/
にて音を定義
例) test.oggをmusic_disc.testとして参照できるよう定義
{
"music_disc.test": {
"sounds": [
{
"name": "test"
}
]
}
}
③ データパックで音源を定義 data/
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:":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
をこのように記述します。弓の弾として弓自身を消費するように設定することで、矢が無くても弓を引き絞ることができるように。
例) 弓の弾として「弓」を使うようにするアイテムタグ
/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}]
理論値最速の釣り竿 (エンチャント)
効果コンポーネント 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
の場合だと最小/最大値の両方から200
tickずつ短縮されます。結果として釣り時間は マイナス 5秒~20秒 (-100~400tick)。
マイナスの釣り時間が抽選された場合、次tickで正の値が選択されるまで再抽選が行われるため、時間を短縮しすぎることによってかえって釣り時間が長くなってしまうことも。
600tick以上短縮させた場合は永遠に再抽選が繰り返され、釣れなくなります。
色々加味して調べた結果、釣り時間を 568
tick短縮させた場合が理論値で、この場合平均約1.6秒 (32tick) で魚影が現れます。あくまでも理論値ですが、そんな感じです。
/give @s bow[enchantments={"advent:ultra_lure":1}]
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_item
が change_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}]
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
– 身代わり発動時の効果 ( consumable
の on_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にて変更があり、model
が asset_id
に改名されます。また、
アーマーモデルの置き場所が models/equipment/
→ equipment/
となります。
slot
– 装備先のスロット
├ head
– 頭装備
├ chest
– 胴装備
├ legs
– 脚装備
├ feet
– 足装備
├ body
– 体 (オオカミなどに使用)
├ mainhand
– メインハンド
└ offhand
– オフハンド
equip_sound
– 装備するときの効果音model
(1.21.2にて削除) – カスタムアーマーモデルの参照先camera_overlay
– 画面にオーバーレイするテクスチャ (例: くり抜かれたカボチャ)allowed_entities
– アイテムを装備可能なエンティティのIDdispensable
– ディスペンサーで自動装備が可能かswappable
– 右クリックで指定スロットに装備可能かdamage_on_hurt
– ダメージを受けたとき耐久値を減らすか
例) 頭に装備できる金ブロック (くり抜かれたカボチャのオーバーレイ付き)
/give @s gold_block[equippable={slot:head,camera_overlay:"misc/pumpkinblur"}]
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]
tooltip_style🔸
アイテムのツールチップの背景を設定できます。リソースパックで自作のものを用意することで、好きにツールチップの枠と背景を設定することができます。
例) 自作の青枠付きの「黄金のリンゴ」
/give @s golden_apple[tooltip_style="resource:rarity_3"]
ツールチップの周りの青枠。これがあるだけでかなりの雰囲気が出る!!
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..effect.
で定義できます。
potion
– 継承するポーションのIDcustom_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
–
の向きを
に設定する/rotate
facing
–
を地点
方向に向かせる/rotate
facing 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_crossbow
が killed_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/
フォルダの中に ◯◯_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=":〇〇" ]
スロットのハイライト操作🔸
アイテムにマウスをホバーした時のハイライトをリソースパックで変更できるようになりました。assets/minecraft/textures/gui/sprites/container
フォルダに格納されているslot_highlight_back.png
と slot_highlight_front.png
がそれぞれアイテムの後方/前方のハイライトを示します。いつかコンポーネントで操作できるようにならないかどうか。
常に輝くモデル (light_emission)🔸
ブロックのモデルとして light_emission
が追加され、モデルが周囲の光の影響を受けるかどうかを操作できるようになりました。0
~15
までの値を指定することができ、必ず指定値以上の光を発するようになります。例えば15
とした場合は常にモデルが光レベル15
以上で描画されるため、常に光り輝くモデルとすることも。
OptifineなどのMOD無しで、暗闇で光る鉱石!みたいなものができるようになりました。
Vanilla Emissive Ores – Ewan Howell
その他の小ネタ ────────
好きな音を鳴らせる角笛🔸
データパックの新要素 instrument
にて、好きに角笛を追加できるようになりました。
description
– 角笛の説明文 (沈思とか書かれる部分)range
– ブロック単位での音の聞こえる範囲sound_event
– 鳴らす音のIDuse_duration
– 角笛のクールダウン (共通)
例) 進捗達成の音が鳴る角笛 test_horn
{
"description": "",
"range": 256.0,
"sound_event": "ui.toast.challenge_complete",
"use_duration": 0.01
}
/give @s goat_horn[instrument=":test_horn" ]
試験的な要素であり、読み込みにはワールドのリロードが必須です。
ニワトリの卵ドロップ🔸
ニワトリが定期的に産むアイテム chicken_lay
、羊や雪だるま等にハサミを使った時のドロップ shearing/sheep
shearing/mooshroom
shearing/snow_golem
を管理するルートテーブルが追加されました。つまりは好きなアイテムドロップを設定できるようになったわけで。
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
というフォルダが追加されました。ここではアイテムがどのモデルを参照するかを定義するファイルを並べることができ、これによって色々と遊びができるようになりました。
modelsでtexturesを参照+結びつけ、itemsでmodelsを参照+結びつけ。
また、アイテムモデルの登場によって全てのモデルが定義できるようになり、ハードコードだったトライデントや望遠鏡などのカスタムモデルも作れるようになりました。やった!
例) (行の順番を少しいじった) 既存のトライデントのアイテムモデル 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/
となりました。また、カスタムアーマーモデル参照先を指していた model
が asset_id
に改名されました。
slot
– 装備先のスロット
├ head
– 頭装備
├ chest
– 胴装備
├ legs
– 脚装備
├ feet
– 足装備
├ body
– 体 (オオカミなどに使用)
├ mainhand
– メインハンド
└ offhand
– オフハンド
equip_sound
– 装備するときの効果音asset_id
– カスタムアーマーモデルの参照先camera_overlay
– 画面にオーバーレイするテクスチャ (例: くり抜かれたカボチャ)allowed_entities
– アイテムを装備可能なエンティティのIDdispensable
– ディスペンサーで自動装備が可能か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
base reset
–
ターゲット
の属性値
を標準値にリセットする
例) 全てのプレイヤーの攻撃速度を標準にリセット
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/
内の humanoid
や humanoid_leggings
フォルダ内に装備のテクスチャを並べます。humanoidが頭/胴/足装備、humanoid_leggingsが脚装備のテクスチャを指します。例は下の通り。
左上から頭, 足, 胴, 脚の順番。脚装備だけ別ファイルなの、どうしてですか
続けて、assets/
フォルダにてテクスチャを 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"]
思ったより設定は簡単なので、後はテクスチャが描ければといいますか…。
その他の小ネタ ────────
テキストの影操作🔸
テキストフォーマットにて指定できる値に 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}
看板やバナーをblock_displayで表示
名前の通りです。逆に言うと、以前は看板やバナーはblock_displayでは表示できませんでした。ただ、block_displayではブロックデータの指定ができないため、テキストを表示させた看板の召喚は難しいところがあります。text_displayと組み合わせるのが吉。
scaleやRotationをいじって好きな見た目のものを。
皆のためコマンドの新要素を追いやすくするんだ!という大層な目標を掲げて3年程前より「コマンド関連新要素のみまとめ」の動画シリーズを作っていたのですが、去年は動画が出せず無念だったため、せめてもの思いで書いてみました。
今年はもう少し活動できる年にしたいですね…!!!ん、半分終わった?
Views: 0