4
1

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 第5回講座

Last updated at Posted at 2019-11-07

【Minecraft BE】のscriptingAPI開発講座(5)

お久しぶりです。
バージョンが1.13になりましたが、scriptingでは特に変わっていません( 'ω')
今回は、見ているentityを取得しますよ( 'ω')

注意

ScriptingAPI は現段階でWindows10にしか対応していません。
Android,iOS,XboxOne,Switchでは開発できません。(AndroidはBlockLauncherという外部ツールを使えばできます)

開発環境

windows10 Minecraft ver 1.13.0

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

今回使用する、イベントは minecraft:hit_result_continuousです。
このイベントはclient側でしか動作しないので、client側に書きます!

では早速( 'ω')

client.js
const system = client.registerSystem(0, 0);

system.initialize = function () {
    this.listenForEvent("minecraft:hit_result_continuous", (eventData) => this.onPick(eventData));
}


system.onPick = function(eventData) {
    if(event.data.entity !== null) {
        let BroadcastEventData = this.createEventData("minecraft:display_chat_event");
        BroadcastEventData.data.message = `looking entity = ${event.data.entity.__identifier__}`;
        this.broadcastEvent("minecraft:display_chat_event", BroadcastEventData);
    }
}

これで動くと思います。

では、解説します!

まず、
this.listenForEvent("minecraft:hit_result_continuous", (eventData) => this.onPick(eventData));
の部分ですが、
これは普通にArrow関数でonPick関数が呼び出され、
引数にeventDataを渡しています。

if(event.data.entity !== null)は、nullではないとき、を表しているので見ている先にentityがいれば、Yesになりますね!

あとは、minecraft:display_chat_eventでentityのidentifierを表示しています。

server側で見ているentityを取得したい!

例えば、アイテムを使ったときに見ているentityを取得したい!っていうときに使えます。

今度は上級者向けになりそうです( 'ω')

まずはコードから( 'ω')

client.js
const system = client.registerSystem(0, 0);

system.initialize = function () {
    this.listenForEvent("minecraft:hit_result_continuous", (eventData) => this.onPick(eventData));
    this.registerEventData("button:hrc", {});
}


system.onPick = function(eventData) {
    var hrcData = this.createEventData("button:hrc");
    hrcData.data = eventData.data;
    this.broadcastEvent("button:hrc", hrcData);
}
server.js
const system = server.registerSystem(0, 0);

var is_hrc = false;

system.initialize = function () {
    this.listenForEvent("minecraft:entity_use_item", (eventData) => this.usedItem(eventData));
    this.listenForEvent("button:hrc", (eventData) => this.onPick(eventData));
}

system.onPick = function(eventData) {
    let BroadcastEventData = this.createEventData("minecraft:display_chat_event");
    if(eventData.data.entity !== null && is_hrc) {
        BroadcastEventData.data.message = `looking entity §a${eventData.data.entity.__identifier__}`;
        this.broadcastEvent("minecraft:display_chat_event", BroadcastEventData);
    } else if(hrc) {
        BroadcastEventData.data.message = `§cNone entity`;
        this.broadcastEvent("minecraft:display_chat_event", BroadcastEventData);
    }
    hrc = false;
}

system.usedItem = function(eventData) {
    if(eventData.data.entity.__identifier__ == "minecraft:player") {
        var itemStack = eventData.data.item_stack.__identifier__;
        if(itemStack == "minecraft:fishing_rod") {
            hrc = true;
        }
    }
}

長いですね...( 'ω')

では解説します!

まず、this.registerEventData("button:hrc", {});です。
registerEventDataなので、そのままの意味で「イベントデータを登録する」ですね。
これだと、button:hrcという名前のイベントを登録しています。

つぎに、

var hrcData = this.createEventData("button:hrc");
hrcData.data = eventData.data;
this.broadcastEvent("button:hrc", hrcData);

これらですが、
hrcDataに先ほど登録したbutton:hrcのイベントデータを作っています。
登録しただけなので、中身は空っぽですね。
なので、hrcData.dataeventData.dataをいれています。
eventData.dataには、見ている先のブロックの座標や、entityのidentifierなどがはいっています。

つぎは、server.jsにいきますね!

this.listenForEvent("button:hrc", (eventData) => this.onPick(eventData));
ですが、client側では、"minecraft:hit_result_continuous" と同じなので、"button:hrc" = "minecraft:hit_result_continuous" と考えてください。

あとは、"minecraft:entity_used_item"で使ったアイテムを取得して、flagを立てて、
onPickでフラグがっ立ったときに、entityを表示し、フラグを折ればできあがりです。

理解すればとても簡単なのですが、理解するまでに時間がかかります。
少しずつ学習していきましょう!

わからないことがあれば、コメントでよろしくお願いします( 'ω')

4
1
0

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
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?