Skip to content

create mob

quikku edited this page Jun 18, 2021 · 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)>で名前を記述してね

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

  • 各単語を_区切ってね

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

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

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

//TODO 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/1.trigger.mcfってfunctionがあるはずだよ。多分画像みたいになってるはずなんだけど。 下記の説明を読みながら9~55行の… set value ~の部分を記載してね

//TODO image

設定名 必須 設定する型 説明
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"}'
Health x Item MOBの体力 … value 50.0
Weapon.Mainhand x Item MOBがメインハンドに持つアイテム … value {id:"minecraft:stick",tag:{Enchantments:[{id:"sharpness",lvl:5}]}}
Weapon.Offhand x Item MOBがオフハンドに持つアイテム … value {id:"minecraft:shield"}
Armor.Head x Item MOBが頭に装備するアイテム … value {id:"minecraft:glass"}
Armor.Chest x Item MOBが胴に装備するアイテム … value {id:"minecraft:iron_chestplate"}
Armor.Legs x Item MOBが脚に装備するアイテム … value {id:"minecraft:golden_leggings"}
Armor.Feet x double MOBが足に装備するアイテム … value {id:"minecraft:golden_boots"}
AttackDamage x double MOBの攻撃力 … value 5.0
Defense x double MOBの防御力
大ダメージの場合0.8%/1pt、小ダメージの場合約4%/1ptカット
20ptを上限とする
… value 12.0
SpecialDefense x double MOBの防具強度力
1ptにつきダメージを大きく減らす
30ptを上限とする
… 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 10
Resist.Magic x double MOBの魔法属性倍率
防御,特殊防御力での軽減計算前に補正 1.0 = 100%
… value 5
Resist.Fire x double MOBの火属性倍率
防御,特殊防御力での軽減計算前に補正 1.0 = 100%
… value 1
Resist.Water x double MOBの水属性倍率
防御,特殊防御力での軽減計算前に補正 1.0 = 100%
… value 5
Resist.Thunder x double MOBの雷属性倍率
防御,特殊防御力での軽減計算前に補正 1.0 = 100%
… value 15

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等についてるスコアとかも参照できないので気をつけてね。

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取得) ただし、利用前の状況は想定できないので必ず上書き類の動作をしてね

テスト方法

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

対象に~する

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

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

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

汎用能力タグについて

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

  • AutoKillWhenDieVehicle PassengersのEntityに付与することで、下のEntityが死亡した際に自動的にキルされます。
  • AlwaysInvisible 常に透明エフェクトが付与されます。これは、何らかの要因でeffectがclearされても次tickには付与され直されます。
  • AntiBurn 炎上に耐性を持ちます。このタグが付いている間、炎上しても次のtickには消化されます。
  • AlwaysBurn 常に炎上します。これは、入水や雨などで消化されても次tickには炎上します。
  • AntiFallDamage 落下ダメージに完全な耐性を持ちます。
  • AntiVoid 奈落への落下に完全な耐性を持ちます。現在未実装です。

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. 情報が足りないんだけど:anger:

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

Clone this wiki locally