【Minecraft BE】のscriptingAPI開発講座(6)
お久しぶりです。
version 1.14になってからScriptingAPIに追加要素があったので、紹介します。
この記事では、某RPGのようなダメージメッセージを出力するものをやってみようと思います。
注意
ScriptingAPI は現段階でWindows10にしか対応していません。
Android,iOS,XboxOne,Switchでは開発できません。(AndroidはBlockLauncherという外部ツールを使えばできます)
現在1.14では一部の端末でBlockLauncherが起動しません。
開発環境
windows10 Minecraft version 1.14.30
entityに与えたダメージを出力しよう!
今回使用する、イベントは minecraft:entity_hurt
です。
このイベントはserver側でしか動作しないので、server側に書きます!
では早速( 'ω')
const system = server.registerSystem(0, 0);
system.initialize = function () {
this.listenForEvent("minecraft:entity_hurt", (eventData) => this.entityHurt(eventData));
};
system.entityHurt = function (eventData) {
//処理
};
こうですね。
ここまでは前回の記事を見ていればわかると思います。
処理部分ですが、
entityを攻撃すれば、
[int:damege] のダメージを与えた!
entityからダメージを受ければ、
[string:player_name] は [int:damage]のダメージを受けた!
というふうに出力してみたいと思います。
では、minecraft:entity_hurt
のパラメーターを見てみましょう。
Name | Type |
---|---|
absorbed_damage | Integer |
attacker | Entity JS API Object |
block_position | Vector [a, b, c] |
cause | String |
damage | Integer |
entity | Entity JS API Object |
projectile_type | String |
結構豊富ですね。
今回使うのはattacker
とdamage
、entity
を使用します。
左から、攻撃したentity、ダメージ量、攻撃されたentityです。
では追加していきます。
const system = server.registerSystem(0, 0);
system.initialize = function () {
this.listenForEvent("minecraft:entity_hurt", (eventData) => this.entityHurt(eventData));
};
system.entityHurt = function (eventData) {
//-----ここから追加-----
var BroadcastEventData = this.createEventData("minecraft:display_chat_event");
if(eventData.data.attacker.__identifier__ == "minecraft:player") {
BroadcastEventData.data.message = "§c" + eventData.data.damage + "のダメージを与えた!";
this.broadcastEvent("minecraft:display_chat_event", BroadcastEventData);
} else if(eventData.data.entity.__identifier__ == "minecraft:player") {
var player_name = this.getComponent(eventData.data.entity, "minecraft:nameable");
BroadcastEventData.data.message = "§c" + player_name.data.name + " は " + eventData.data.damage + "のダメージを受けた!";
this.broadcastEvent("minecraft:display_chat_event", BroadcastEventData);
}
};
少し量が多いですが頑張っていきましょう!
まず、if文でplayerが攻撃した場合を検知します。
攻撃したentityが格納されているのはパラメーターのattacker
ですので、
eventData.data.attacker
ですね。
eventData
の後のdata
はわすれやすいので注意してくださいね!
そしてそのあと、
BroadcastEvent
をつかって出力させたい文字列を指定し、出力させます。
else ifでは攻撃されたentityがplayerだった場合、とします。
出力させるときにプレイヤーのゲーマータグを表示させたかったので。getComponent
メソッドを使い、プレイヤーのゲーマータグを持ってきます。
あとは同様、BroadcastEvent
をつかって出力させます。
1.14の新要素はまだあるので次回をお楽しみに!
何かわからないことがあれば、お気軽にご連絡ください。
前回 見ているentityを取得しよう!