Skip to content

create mob

quikku edited this page Mar 12, 2022 · 43 revisions

1. 事前に済ませてね

2. テンプレートを作成する

まずはMC Datapack Utilityを利用してMOBアセットのテンプレートを作成するよ。
Datapack: Create Datapack templateを実行してね。デフォルトだとShift + Alt + D -> Shift + Alt + Tを押すと動作するよ。

すると下記の画像みたいなメニューが出てくるからデータパックにテンプレートを追加するを選択してね。

image

出てきたダイアログでデータパックを選択できるからAssetフォルダを指定するよ。

次にテンプレートを生成する名前空間を選択できるから下記の命名規則に沿って名前を入力してね。

MOB名の命名規則

  • <四桁のID>.<MOB名(snake_case)>で名前を記述してね。0パディングするよ

  • MOB名は基本的に英語に翻訳したものを使うよ (英語が出来ない場合はGoogle翻訳みらい翻訳, DeepLとか使ってみてね)

  • 各単語を_区切ってね

  • 英語に翻訳できないような物はローマ字にしてね

    ローマ字にしたときに表記ゆれがあるような物はヘボン式に従ってね

MOB名を入力すると生成するテンプレートを選ぶメニューが出るから、MOBに合わせたトリガーにチェックを付けてOKを押してね。

image

そしたら、IDと元となるMOBのID(entity_type)を聞かれると思うから入力してね。

これでテンプレートがAsset/data/asset/functions/mob/<MOB名>/~に生成されてるはずだよ。

3. MOBのステータスの設定

注: ここから先基本的にfunction名は下記のような省略した形で記載するよ

Asset/data/asset/functions/mob/<MOB名>/summon/1.trigger.mcfunction -> ~/summon/1.trigger.mcf

生成されたテンプレートの中に~/summon/2.summon.mcfってfunctionがあるはずだよ。多分画像みたいになってるはずなんだけど。

image

下記の説明を読みながら9~55行の… set value ~の部分を記載してね

設定名 必須 設定する型 説明
ID o int MOBのID
スプレッドシートのID欄の物をそのまま入れてね
… value 1
Type o string MOBの種別
記述はTypeについてを参照
… value "Enemy"
Interferable o boolean そのMOBに神器等で干渉できるか否か … value true
Name x TextComponentString MOBの名前 … value '{"text":"MOB名","color":"red"}'
Weapon.Mainhand x Item MOBがメインハンドに持つアイテム … value {id:"minecraft:stick",Count:1b,tag:{Enchantments:[{id:"sharpness",lvl:5}]}}
Weapon.Offhand x Item MOBがオフハンドに持つアイテム … value {id:"minecraft:shield",Count:1b}
WeaponDropChances x Float[] MOBが持つアイテムのドロップ率 … value [1.0f,0.75f]
Armor.Head x Item MOBが頭に装備するアイテム … value {id:"minecraft:glass",Count:1b}
Armor.Chest x Item MOBが胴に装備するアイテム … value {id:"minecraft:iron_chestplate",Count:1b}
Armor.Legs x Item MOBが脚に装備するアイテム … value {id:"minecraft:golden_leggings",Count:1b}
Armor.Feet x Item MOBが足に装備するアイテム … value {id:"minecraft:golden_boots",Count:1b}
ArmorDropChances x Float[] MOBが装備するアイテムのドロップ率 … value [0.0f,0.0f,0.1f,0.15f]
Health x double MOBの体力 … value 50.0
AttackDamage x double MOBの攻撃力 … value 5.0
Defense x double MOBの防御力
大ダメージの場合0.8%/1pt
小ダメージの場合約4%/1ptカット
30ptを上限とする
… value 12.0
SpecialDefense x double MOBの防具強度力
1ptにつきダメージを大きく減らす
20ptを上限とする
… value 4.0
Speed x double MOBの移動速度 … value 2.3
FollowRange x double MOBの探知範囲 … value 25.0
KnockBackResist x double MOBのノックバック耐性 … value 0.5
Resist.Physical x double MOBの物理属性倍率
防御,特殊防御力での軽減計算前に補正 1.0 = 100%
… value 0.9
Resist.Magic x double MOBの魔法属性倍率
防御,特殊防御力での軽減計算前に補正 1.0 = 100%
… value 0.8
Resist.Fire x double MOBの火属性倍率
防御,特殊防御力での軽減計算前に補正 1.0 = 100%
… value 0.8
Resist.Water x double MOBの水属性倍率
防御,特殊防御力での軽減計算前に補正 1.0 = 100%
… value 0.85
Resist.Thunder x double MOBの雷属性倍率
防御,特殊防御力での軽減計算前に補正 1.0 = 100%
… value 0.4

未設定にした場合の初期値

設定 初期値
所持/装備アイテム 何も無し
ドロップ率 全て0f(0%)
属性倍率(Resist.*) 全て1f(100%)
その他 元となるMOBそのまま

Typeについて

IDは下記のもののみが使えるよ。それぞれの意味はここ見てね

  • Friend
  • Enemy
  • Enemy.Boss
  • Projectile
  • Npc
  • Object

4. MOBの処理を記載する

MOBのステータスを記載したら、最後にそのMOBがそのトリガー時にする処理を記載するよ。
具体的には、各トリガーの~/<トリガー名>/2.<トリガー名>.mcfに処理を記載してね。

4.1. 各トリガーに関する詳細な情報

Tick (~/tick/*.mcf)

とくにないよ

Attack (~/attack/*.mcf)

攻撃先のプレイヤーにタグ: Victimが付与されているよ。

Hurt (~/hurt/*.mcf)

ダメージの要因となったプレイヤーにタグ: Attackerが付与されているよ。
このトリガーはlib:damage/を利用した攻撃、もしくはバニラの攻撃手段でしかトリガーされないよ

Death (~/death/*.mcf)

死ぬ原因となったプレイヤーがいた場合、そのプレイヤーにタグ: Killerが付与されているよ。
また、このトリガーでは実行元が判別用のアイテムになっているので使用できないよ。
MOB等についてるスコアとかも参照できないので気をつけてね。

Rejoin (~/rejoin_process.mcf)

プレイヤーが再Joinした時にトリガーされるよ。
使用用途や使い方はここ見てね。

5. 基本的な情報

  • コーディング規則にしたがってね

  • 一時的にスコアを扱いたいときはobjective: Temporaryを使ってね。
    ※最後にresetを必ずしてね

  • 一時的にstorageを扱いたいときはstorage: asset:tempを使ってね。
    ※これも最後にremoveを必ずしてね

  • tickを跨ぐスコアを使いたい場合はテンプレート生成時にMOB/テンプレート: 初期化処理を選択してスコアボードを追加してね

  • MOBでobject, tag, score_holderを定義する際はほかのMOBと干渉しないように、名前の先頭にIDを36進数に変換した値.をつけてね
    IDが123の場合:123の36進数 = 3fなので、3f.Target3f.Timeなどの命名にする
    36進数への変換はここでできるよ

  • 何らかの要因でforceloadチャンクを利用したい場合、10000 2 10000 ~ 10016 255 10016の範囲を使ってね。
    10000 0(1) 10000にはシャルカーボックスがあるので注意。

  • -1 -1 ~ 0 0は常にロードされてるけど描画に影響する物には使わないでね

  • entity: 0-0-0-0-0はkillしたりしない限り自由に利用することができるよ(e.g. Pos代入, Pos取得)
    ただし、利用前の状況は想定できないので必ず上書き類の動作をしてね

  • #lib:livingに含まれているあらゆるMobにはMobUUIDのスコアが付与されています。(Playerを除く)
    読み取りに限りペアリング等自由に使用可能ですが、別のEntity等にスコアをコピーする際はMobUUID以外のobjectをコピー先に指定してください。

テスト方法

ワールドに入ってfunction asset:mob/<MOB名>/summon/2.summonを実行してね。

対象に~する

APIのページを参照してね。

いろいろ作りたくない! coreになんかないの?

Librariesのページを参照してみてね。無かったらちぇんにメンション飛ばしてくれたら実装するかも。

汎用能力タグについて

MobAssetのMobはいくつかの汎用能力タグを利用できます。
利用可能なタグ:

  • AutoKillWhenDieVehicle PassengersのEntityに付与することで、下のEntityが死亡した際に自動的にキルされます。
  • AlwaysInvisible 常に透明化エフェクトが付与されます。何らかの要因でeffectがclearされても次のtickで再び付与されます。
  • AlwaysSlowFall 常に落下速度低下エフェクトが付与されます。何らかの要因でeffectがclearされても次のtickで再び付与されます。
  • AntiBurn 炎上に耐性を持ちます。このタグが付いている間、炎上しても次のtickで消化されます。
  • AlwaysBurn 常に炎上します。入水や雨などで消化されても次のtickで再び炎上します。
  • AntiFallDamage 落下ダメージに完全な耐性を持ちます。
  • AntiVoid 奈落への落下に完全な耐性を持ちます。奈落に落ちた場合、最も近いプレイヤーの下に円状のparticleを出し、そこへ数秒後にワープします。
    その際、一定範囲内のプレイヤーに最大体力に応じた割合ダメージを与えます。
  • Drown ゾンビ、ハスク限定のtagで、水没によってmobの種類が変化するようになります。
  • Frozen スケルトン限定のtagで、粉雪に浸かることによってmobの種類が変化するようになります。

AttributeのUUIDの形式

UUID:[I;1,2,MOBID,任意]の形式で書いてね

また、/attributeを使う場合は上記のUUIDを16進数になおしてね

例: 00000001-0000-0002-0000-000500000000

16進数にする方法はMinecraft UUID Converterを使えばいいよ

6. Q & A

Q. MOBがうまく動かないんだけど:anger:

A. いろいろな理由があるけど、とりあえずgame outputを確認してみて

game outputはランチャーの設定からゲーム開始時に出力ログを開く(en: Open output log when games start)にチェックをつけることで確認できるよ。

エラーが出てたらそれの通りに従ってみてね。エラーが出てなかったり、エラーの意味が分からないときはちぇんにメンション飛ばして聞いてみてね。

Q. GitEmojiの使い方わからない><

A. PullRequestをmasterにmergeするときにこっちでつけるから使わなくても大丈夫。

Q. この音だけPlaysoundで鳴らないんだけど?

A. 一部のSoundEventはリソースパックで無効化されています。
代わりに音源ファイルを指定できるようになっているので、そちらに置き換えてください。

無効化されているSoundEvent 置き換え先
minecraft:entity.player.levelup ogg:random.levelup

Q. 情報が足りないんだけど:anger:

A. いや本当にごめんなさい。足りない部分教えてくれたら優先して記述します。

Clone this wiki locally