-
Notifications
You must be signed in to change notification settings - Fork 6
create mob
- TSBリポジトリのクローン, ブランチを切っている状態
- 推奨拡張機能の導入
- スプレッドシートに記入
まずはMC Datapack Utilityを利用してMOBアセットのテンプレートを作成するよ。
Datapack: Create Datapack templateを実行してね。デフォルトだとShift + Alt + D -> Shift + Alt + Tを押すと動作するよ。
すると下記の画像みたいなメニューが出てくるからデータパックにテンプレートを追加するを選択してね。

出てきたダイアログでデータパックを選択できるからAssetフォルダを指定するよ。
次にテンプレートを生成する名前空間を選択できるから下記の命名規則に沿って名前を入力してね。
MOB名を入力すると生成するテンプレートを選ぶメニューが出るから、MOBに合わせたトリガーにチェックを付けてOKを押してね。

そしたら、IDと元となるMOBのID(entity_type)を聞かれると思うから入力してね。
これでテンプレートがAsset/data/asset/functions/mob/<MOB名>/~に生成されてるはずだよ。
注: ここから先基本的にfunction名は下記のような省略した形で記載するよ
Asset/data/asset/functions/mob/<MOB名>/summon/1.trigger.mcfunction->~/summon/1.trigger.mcf
生成されたテンプレートの中に~/summon/2.summon.mcfってfunctionがあるはずだよ。多分画像みたいになってるはずなんだけど。

下記の説明を読みながら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そのまま |
IDは下記のもののみが使えるよ。それぞれの意味はここ見てね
- Friend
- Enemy
- Enemy.Boss
- Projectile
- Npc
- Object
MOBのステータスを記載したら、最後にそのMOBがそのトリガー時にする処理を記載するよ。
具体的には、各トリガーの~/<トリガー名>/2.<トリガー名>.mcfに処理を記載してね。
とくにないよ
攻撃先のプレイヤーにタグ: Victimが付与されているよ。
ダメージの要因となったプレイヤーにタグ: Attackerが付与されているよ。
このトリガーはlib:damage/を利用した攻撃、もしくはバニラの攻撃手段でしかトリガーされないよ
死ぬ原因となったプレイヤーがいた場合、そのプレイヤーにタグ: Killerが付与されているよ。
また、このトリガーでは実行元が判別用のアイテムになっているので使用できないよ。
MOB等についてるスコアとかも参照できないので気をつけてね。
プレイヤーが再Joinした時にトリガーされるよ。
使用用途や使い方はここ見てね。
-
コーディング規則にしたがってね
-
一時的にスコアを扱いたいときはobjective:
Temporaryを使ってね。
※最後にresetを必ずしてね -
一時的にstorageを扱いたいときはstorage:
asset:tempを使ってね。
※これも最後にremoveを必ずしてね -
tickを跨ぐスコアを使いたい場合はテンプレート生成時に
MOB/テンプレート: 初期化処理を選択してスコアボードを追加してね -
MOBでobject, tag, score_holderを定義する際はほかのMOBと干渉しないように、名前の先頭に
IDを36進数に変換した値.をつけてね
IDが123の場合:123の36進数 = 3fなので、3f.Targetや3f.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のページを参照してね。
Librariesのページを参照してみてね。無かったらちぇんにメンション飛ばしてくれたら実装するかも。
MobAssetのMobはいくつかの汎用能力タグを利用できます。
利用可能なタグ:
-
AutoKillWhenDieVehiclePassengersのEntityに付与することで、下のEntityが死亡した際に自動的にキルされます。 -
AlwaysInvisible常に透明化エフェクトが付与されます。何らかの要因でeffectがclearされても次のtickで再び付与されます。 -
AlwaysSlowFall常に落下速度低下エフェクトが付与されます。何らかの要因でeffectがclearされても次のtickで再び付与されます。 -
AntiBurn炎上に耐性を持ちます。このタグが付いている間、炎上しても次のtickで消化されます。 -
AlwaysBurn常に炎上します。入水や雨などで消化されても次のtickで再び炎上します。 -
AntiFallDamage落下ダメージに完全な耐性を持ちます。 -
AntiVoid奈落への落下に完全な耐性を持ちます。奈落に落ちた場合、最も近いプレイヤーの下に円状のparticleを出し、そこへ数秒後にワープします。
その際、一定範囲内のプレイヤーに最大体力に応じた割合ダメージを与えます。 -
Drownゾンビ、ハスク限定のtagで、水没によってmobの種類が変化するようになります。 -
Frozenスケルトン限定のtagで、粉雪に浸かることによってmobの種類が変化するようになります。
UUID:[I;1,2,MOBID,任意]の形式で書いてね
また、/attributeを使う場合は上記のUUIDを16進数になおしてね
例: 00000001-0000-0002-0000-000500000000
16進数にする方法はMinecraft UUID Converterを使えばいいよ
A. いろいろな理由があるけど、とりあえずgame outputを確認してみて
game outputはランチャーの設定からゲーム開始時に出力ログを開く(en: Open output log when games start)にチェックをつけることで確認できるよ。
エラーが出てたらそれの通りに従ってみてね。エラーが出てなかったり、エラーの意味が分からないときはちぇんにメンション飛ばして聞いてみてね。
A. PullRequestをmasterにmergeするときにこっちでつけるから使わなくても大丈夫。
A. 一部のSoundEventはリソースパックで無効化されています。
代わりに音源ファイルを指定できるようになっているので、そちらに置き換えてください。
| 無効化されているSoundEvent | 置き換え先 |
|---|---|
| minecraft:entity.player.levelup | ogg:random.levelup |
A. いや本当にごめんなさい。足りない部分教えてくれたら優先して記述します。