Minecraft ver1.15のコマンド雑記
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

Minecraft ver1.15のコマンド雑記

2019-12-14 13:14

    ● gameruleで追加されたコマンド

    - gamerule doImmediateRespawn <true/false>

    プレイヤーが死んだときに、ゲームオーバー画面を出さずにすぐにリスポーンする(しない)ように設定できる

    - gamerule drowingDamage <true/false>

    - gamerule fallDamage <true/false>

    - gamerule fireDamage <true/false>

    それぞれ、水中ダメージ・落下ダメージ・燃焼ダメージを受けるかどうかせっていできる これらのためにエフェクトつけなくて良くなったよ!やったね!

    - gamerule doInsomnia <true/false>

    ファントムが夜にスポーンするか


    spectate コマンド

    /spectate @e[type=pig,limit=1] @p

    というコマンドで、「プレイヤーがスペクテイターモードならば」豚のところまでTPして視界ジャックさせられます。ただし、SHIFTキーで抜けられます。

    SHIFTで抜けたことを検知したい場合は、

    /scoreboard objectives add SHIFT minecraft.custom:minecraft.sneak_time

    で検知できるので、再度かけ直したり、元の場所に移動させたりできます。

    今までTPで無理やりプレイヤーの視点を動かしていた人は、完全に視界が固定できるようになるのでマウス操作をグリグリしても動かなくなってキレイなムービーが作れるようになるよ!


    schedule コマンド

    - schedule clear <id>

    schedule コマンドで実行したコマンドをキャンセルできるようになります。

    - schedule function <id> <time> append

    schedule コマンドで同じIDを連続で実行した場合に、すべて実行されます。(今までと同じ挙動)

    - schedule function <id> <time> replace

    schedule コマンドで同じIDを連続で実行した場合に、前のschedule コマンドを上書きします。 そして、1.15ではappend/replaceを省略した場合は、replaceの挙動になります。


    storage関連

    - storageとは

    structureファイルみたいにゲーム内じゃなくて外部にNBTを保存できるようになる。 入れることのできるNBTは適当につくれるので、自由度は高い。

    今までアーマースタンドなどに一時的にスコアを保存していた人や文字を保存しておきたい人がメリット高い。 あとはコマンドの簡略化なども可能。データ保存なので読み込みが速いらしい。

    ちなみに出力されたデータは、saves/world/data/command_storage_<データパック名>.datに保存されます。 NBTExplorerなどのNBTを見れるツールで開くと、何が設定してあるか確認できます。

    - storageを使うコマンド類

    • /data 関係 ※ なぜかgetが上手く表示されない、だから何を保存したか忘れたら放置しっぱなし
    • /execute store で保存 (数値のみ)
    • /titleや/tellraw、看板、本などのJson

    - どう使えばよいのか

    1. プレイヤーのNBTの一部を保存する(まるごとも可)
    ## プレイヤーの持ち物をすべてplayer(ストレージ名)のitems(nbtパス)に保存する
    /data modify storage player items set from entity @p Inventory

    ## しばらく経ったあと

    ## playerのitemsに保存した持ち物を適当にチェストに放り込む
    ## ちゃんと全アイテムを放り込むにはもう少し手間が必要になります
    /data modify block <x> <y> <z> Items set from storage player items
    1. スコアボードの現在値を保存してまた書き出す
    ## スコアボードの値を設定する
    /scoreboard players set pc1 SCORE 100

    ## スコアボードの値を保存する
    /execute store result storage player score int 1 run scoreboard players get pc1 SCORE

    ## スコアボードの値を変更する
    /scoreboard players set pc1 SCORE 0

    ## スコアボードに値を戻す
    /execute store result score pc1 SCORE run data get storage player score

    別のスコアボードに値を入れておいたほうが楽じゃんと思ったあなた。私もそう思います。

    1. 手に持っていたアイテム名を保存してタイトルに出す (ログアウトしていても出す)
    ## プレイヤーの手に持っているアイテム名をplayerのitemNameに保存する
    /data modify storage player itemName set from entity @p SelectedItem.tag.display.Name

    ## しばらく経ったあと

    ## playerのitemNameをタイトルで出す
    /title @p title {"nbt":"itemName","interpret":true,"storage":"player"}
    • titleコマンド内のinterpretについて補足

      nbtはNBTパス、storageはストレージ名ですが、interpretはJSON文字を解析して出力する設定です。 詳しく説明すると、金床でアイテム名をつけた場合、SelectedItem.tag.display.Nameは以下になってます。

      {SelectedItem:{tag:{display:{Name:'{"text":"アイテム名"}'}}}}
      => '{"text":"アイテム名"}'

      これをinterpretを付けずにタイトルに表示すると

      {"text":"アイテム名"}

      と表示されてしまいます。しかし、interpretを付けると

      アイテム名

      と言う感じで、内部のJSON文字を解析して表示してくれます。

    - さらに応用して

    外部ファイルになったことで、他のワールドにコピーすれば同じ内容のstorageを使い回すことができます。 使いみちがあるかどうかはわからないけども...


    predicate関連

    - predicateとは

    今まで、loot tableファイルの条件式conditionを別ファイルにしたもの。 predicateは複雑な条件を記載できるので、長い条件のコマンドを短く見せることができるようになる。

    predicateファイルは以下に保存すればOK。

    datapacks/<pack名>/data/<名前空間>/predicates/<ファイル名>.json

    - predicateファイルの書き方

    基本的にはloot tableファイルのconditionの書き方を参照して下さい。 また、利用できる項目は https://minecraft.gamepedia.com/Predicate を参照して下さい。

    例えば以下のように書くと、「とあるエンティティに幸運エフェクトが付加されている」判定になります。

    {
    "condition": "entity_properties",
    "entity": "this",
    "predicate": {
    "effects": {
    "minecraft:luck": {
    }
    }
    }
    }

    ※ "minecraft:luck"の中に何も書かれていない場合は、単純に効果が付与されているかのみチェックします。

    - predicateの使い方

    例えば、上で書いた例のものを datapacks/pack/data/game/predicates/luck.json に保存したとしましょう。 その場合、以下のコマンドで自分自身に幸運エフェクトが付与されているかが検知できます。

    /execute if entity @p[predicate=game:luck] run say 幸運状態!

    ## もしくは自分でコマンド入力する場合には
    /execute if predicate game:luck run say 幸運状態!


    広告
    コメントを書く
    コメントをするには、
    ログインして下さい。