1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Minecraft BE ScriptingAPI 第6回講座

Last updated at Posted at 2020-04-12

【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側に書きます!

では早速( 'ω')

server.js
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

結構豊富ですね。
今回使うのはattackerdamageentityを使用します。
左から、攻撃したentity、ダメージ量、攻撃されたentityです。

では追加していきます。

server.js
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をつかって出力させます。

以上で完成です。
スクリーンショット (69).png

1.14の新要素はまだあるので次回をお楽しみに!
何かわからないことがあれば、お気軽にご連絡ください。

前回 見ているentityを取得しよう!

1
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?