MinecraftBEでscriptingAPI!part1.棒で叩いたブロックをダイヤブロックに
首先
初次见面,我是mcjixif。
这次我决定写一篇文章,与大家分享关于在Minecraft BE中制作脚本的知识。由于我是一个编程新手,可能会有很多问题需要关注,希望能够得到大家温暖的关注和支持。
由于其他文章已经对导入方法、准备工作和Scripting API进行了说明,因此我将省略这部分内容。
コードを書き始める
基本的写法如下所示。
const system = server.registerSystem(0, 0);
//絶対に書く
//clientではconst system = client.registerSystem(0, 0);
system.initialize = function () {
//使うイベントをここに書く
};
//イベントの処理
我想通过用木棒敲击方块这一过程来制作钻石方块。
イベントの使用
イベントとは、〇〇したら✕✕する の✕✕の部分を引き起こす〇〇の部分(今回でいう 叩いたら の部分)です。
今回はminecraft:block_interacted_withを使用します。これはプレイヤーがブロックを叩いたら発動するイベントです。
system.initialize = function () {
this.listenForEvent('minecraft:block_interacted_with', (eventData) => this.onInteracted(eventData));
};
まずthis.listenForEvent(EventIdentifier, CallbackObject)を用いてminecraft:block_interacted_withをsystem.onInteractedで使用できるように登録します。
*ここのonInteractedにあたる部分は好きな文字列(アルファベット)で構いません。
メインの処理
在此处,将会描述事件触发时会发生的事情。我们将根据以下代码进行解释。
system.onInteracted = function (eventData) {
var carriedItemComponent = this.getComponent(eventData.data.player, 'minecraft:hand_container');
var carriedItem = carriedItemComponent.data[0].item;
if (carriedItem == 'minecraft:stick') {
var pos = {
x : eventData.data.block_position.x,
y : eventData.data.block_position.y,
z : eventData.data.block_position.z
};
var ExecuteEventData = this.createEventData('minecraft:execute_command');
ExecuteEventData.data.command = `/setblock ${pos.x} ${pos.y} ${pos.z} diamond_block`;
this.broadcastEvent('minecraft:execute_command', ExecuteEventData);
}
};
結構長いですね…。ですが中身は単純です。
まずここで最初にすべき事は準備です。ということでgetComponent(EntityObject, ComponentIdentifier)を用いてminecraft:hand_containerのコンポーネント(情報の集まりのようなもの)を取得します。次にそれから必要な情報(アイテムの名前)だけを抽出します。carriedItemComponent.data[0].itemで名前だけ抽出できます。これを変数carriedItemに代入するまでが第1準備です。
接下来,我将写下”如果以棒子击打”部分。使用刚刚获取的手持物品为棒子进行if语句的写法。
その次に叩いたブロックの座標を取得します。onInteractedの引数eventDataでは叩いた座標を取得できます。eventData.data.block_position.xのようにして座標を取得します。これを変数posに代入します。
※var pos = {}; となっているのがよくわからない方は ‘javascript 連想配列’ で調べてみると良いと思います。
然后最后,接下来是大家期待已久的方块生成。我们可以使用createEventData(EventIdentifier)来创建一个minecraft:execute_command事件的数据,并将其赋值给变量ExecuteEventData。然后,我们将命令赋值给ExecuteEventData.data.command。这时之前获取的坐标会派上用场。如果在字符串中想要使用变量,可以像这样使用${hensuu}。最后,我们可以使用broadcastEvent(EventIdentifier, EventData)来执行ExecuteEventData。就这样结束!!
总结
長々と雑な解説をしましたがいかがでしたか?少しでも理解していただけたら嬉しいです。わからない所はTwitterでdmやリプをください。↓は全体のコードです。ご自由にお使い下さい。
const system = server.registerSystem(0, 0);
system.initialize = function () {
this.listenForEvent('minecraft:block_interacted_with', (eventData) => this.onInteracted(eventData));
};
system.onInteracted = function (eventData) {
var carriedItemComponent = this.getComponent(eventData.data.player, 'minecraft:hand_container');
var carriedItem = carriedItemComponent.data[0].item;
if (carriedItem == 'minecraft:stick') {
var pos = {
x : eventData.data.block_position.x,
y : eventData.data.block_position.y,
z : eventData.data.block_position.z
};
var ExecuteEventData = this.createEventData('minecraft:execute_command');
ExecuteEventData.data.command = `/setblock ${pos.x} ${pos.y} ${pos.z} diamond_block`;
this.broadcastEvent('minecraft:execute_command', ExecuteEventData);
}
};
次回は気が向き次第更新します。これからもよろしくお願いします。
请提供参考链接。
请下载这个脚本。