-
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を押してね。
//TODO
そしたら、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/1.trigger.mcfってfunctionがあるはずだよ。多分画像みたいになってるはずなんだけど。
下記の説明を読みながら9~55行の… set value ~の部分を記載してね
//TODO
| 設定名 | 必須 | 設定する型 | 説明 | 例 |
|---|---|---|---|---|
| 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 |
IDは下記のもののみが使えるよ。それぞれの意味はここ見てね
- Friend
- Enemy
- Enemy.Boss
- Projectile
- Npc
- Object
MOBのステータスを記載したら、最後にそのMOBがそのトリガー時にする処理を記載するよ。 具体的には、各トリガーの`~/<トリガー名>/2.<トリガー名>.mcfに処理を記載してね。
攻撃先のプレイヤーにタグ: Victimが付与されているよ。
ダメージの要因となったプレイヤーにタグ: Attackerが付与されているよ。
このトリガーはlib:damage/を利用した攻撃、もしくはバニラの攻撃手段でしかトリガーされないよ
死ぬ原因となったプレイヤーがいた場合、そのプレイヤーにタグ: Killerが付与されているよ。
また、このトリガーでは実行元が判別用のアイテムになっているので使用できないよ。
MOB等についてるスコアとかも参照できないので気をつけてね。
-
コーディング規則にしたがってね
-
一時的にスコアを扱いたいときは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取得) ただし、利用前の状況は想定できないので必ず上書き類の動作をしてね
ワールドに入ってfunction asset:mob/<MOB名>/summon/2.summonを実行してね。
APIのページを参照してね。
Librariesのページを参照してみてね。無かったらちぇんにメンション飛ばしてくれたら実装するかも。
MobAssetのMobはいくつかの汎用能力タグを利用することができます。
利用可能なタグ:
-
AutoKillWhenDieVehiclePassengersのEntityに付与することで、下のEntityが死亡した際に自動的にキルされます。 -
AlwaysInvisible常に透明エフェクトが付与されます。これは、何らかの要因でeffectがclearされても次tickには付与され直されます。 -
AntiBurn炎上に耐性を持ちます。このタグが付いている間、炎上しても次のtickには消化されます。 -
AlwaysBurn常に炎上します。これは、入水や雨などで消化されても次tickには炎上します。 -
AntiFallDamage落下ダメージに完全な耐性を持ちます。 -
AntiVoid奈落への落下に完全な耐性を持ちます。現在未実装です。
A. いろいろな理由があるけど、とりあえずgame outputを確認してみて
game outputはランチャーの設定からゲーム開始時に出力ログを開く(en: Open output log when games start)にチェックをつけることで確認できるよ。
エラーが出てたらそれの通りに従ってみてね。エラーが出てなかったり、エラーの意味が分からないときはちぇんにメンション飛ばして聞いてみてね。
A. PullRequestをmasterにmergeするときにこっちでつけるから使わなくても大丈夫。
A. いや本当にごめんなさい。足りない部分教えてくれたら優先して記述します。