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);
   }
};

次回は気が向き次第更新します。これからもよろしくお願いします。

请提供参考链接。

请下载这个脚本。

bannerAds