読者です 読者をやめる 読者になる 読者になる

MC1.10 MOBに特定のMOBを打たせる方法

f:id:toshi_a:20160619163759p:plain

teocraftのバトルドームに出現させるモンスターを作っている時に、特定の別のモンスターを攻撃するモンスターを作成したくてハマった。要するに

  • エンティティを召喚する時にUUIDを指定するには、UUIDMost:とUUIDLeast:を使う
  • ThrownPotionとかSnowballのownerNameに"0-0-0-0-1"のような省略形は使えなくなった。ちゃんと指定する

ということになったらしい。

MOB A(ストレイ)にMOB B(豚)を打たせる

役者を召喚

ケルトンがMOBを誤射するとターゲットを変更するのを利用して、豚にポーションを投げさせる。それがストレイに当たると、ストレイは豚に対して敵対状態になる。

/summon Pig ~ ~1 ~ {CustomName:A,CustomNameVisible:1b,UUIDMost:0,UUIDLeast:1}

/summon Skeleton ~ ~1 ~ {SkeletonType:2,CustomName:B,CustomNameVisible:1,HandItems:[{id:"minecraft:bow"},{}]}

まずMOBを召喚。この時、豚のNBTタグにUUIDMost:0,UUIDLeast:1が設定してあって、召喚された時にUUIDが00000000-0000-0000-0000-000000000001になる。

弾を召喚

雪玉かポーションを召喚し、ownerNameには投げたプレイヤーの名前を書くのが普通だが、ここでは豚のUUIDを指定する。ポイントは、ここではUUIDMost:とUUIDLeast:ではなく、1.8同様UUIDを書く必要があるということ。コンバートするスクリプトとか手元に置いておくと便利かもしれん

/execute @e[name=B] ~ ~ ~ summon ThrownPotion ~ ~1 ~ {Potion:{id:"minecraft:splash_potion",Count:1,tag:{Potion:minecraft:healing}},ownerName:"00000000-0000-0000-0000-000000000001"}

これを実行するとストレイの頭に豚から投げられた治癒ポーションが出現してストレイに当たる。そうするとストレイは豚を狙い始める。1.9からポーションの書き方が変わったので若干手こずった

弾の困った問題

こういう用途には雪玉が良くて、ダメージを与えずに喧嘩を売ることができるし巻き込みもないので扱いやすい。1.10からか、なんか投げてからしばらくクールダウンタイムみたいなのが入ったようで、出現直後の雪玉に当たり判定がないっぽい。~3あたりから落としてやると当たるんだけど、Motionタグで落下速度を早めると当たらなかった。流石に自由落下させるとMOBが移動中だと回避されてしまうのでまずい。Wiki見てもそれっぽいこと書いてないようだし、今回はSplashPotionを使った。

でもSplashPotionにも問題があって、炸裂するので隣接する関係ないモンスターも同時に敵対してしまうことと、実際にダメージを与えないと敵対しないというのがある。ダメージを与えないと、というのは結構意外だった。1.9から追加されたエフェクトなしのスプラッシュポーションなどを当てても敵対しない。また、ストレイのようなアンデッドにダメージポーションを投げても(回復するので)敵対しない。slownessのポーションは状態異常にはなるが、ダメージがないからか敵対しない。毒が有効なMOBに変えてpoisonを投げてもだめだった(ポーションに因るダメージじゃなくて、状態異常に因るダメージだからか)。そういうわけでストレイにはhealingが有効だった。

とりあえず、あしゅりーをバトルドームに出現させて何故かモンスターにリンチされているというギミックは作れるっぽい

参考

Advanced Commands Tutorial: Controlling Mobs Using Custom UUID Targets - YouTube

www.minecraftforum.net

www.minecraftforum.net