scriptが詳しい方教えてください

スポンサーリンク

マイクラの配布サイト フォーラム 技術相談(統合版) scriptが詳しい方教えてください

3件の返信スレッドを表示中
  • 投稿者
    投稿
    • #218146返信
      睡眠
      参加者

      現在私は巨大マップを作成しています。
      配信者さんが夏に配信されるマイクラ肝試しに出てくるようなスタンプラリーを作成したいです。

      受付でスタンプカードを渡す。

      スタンプカードを持った状態でクリックすると、スタンプカードにスタンプがおされる。

      巡ったスタンプ場所が分かるように、スタンプ台の上にチェックが入るようにしたいです。

      全箇所まわりきった場合、受付に話すとアイテムが貰える。

      こんな感じのスタンプラリーを作成したいです。

      全部で15箇所ほどで考えております。

      scriptをメインに使用してできたらなと思っているのですが可能でしょうか?
      また可能な場合どのような感じでやれば出来ますか?

      script初心者のため教えて頂きたいです。

    • #219042返信
      コウクマ
      参加者

      例えばですが、
      受付モブを用意して、受付モブにチケットを渡す(チケットを持って右クリック)するとスタンプカードを受け取れるようにする
      ※playerInteractWithEntityを発生させるためにはモブに「minecraft:interact」コンポーネントを持たせる必要があります

      
      world.afterEvents.playerInteractWithEntity.subscribe(event => {
        // クリックしたモブが受付モブだったら
        if (event.target.typeId === "namespace:reception") {
          // チケットを持っていたら
          if (event.itemStack !== undefined && event.itemStack.typeId === "namespace:ticket") {
            // プレイヤーの右手にスタンプカードを持たせる
            const equippable = event.player.getComponent(EntityComponentTypes.Equippable) as EntityEquippableComponent;
            equippable.setEquipment(EquipmentSlot.Mainhand, new ItemStack("namespace:stamp_card", 1));
          }
        }
      });
      

      スタンプカードは3Dモデルで用意して、render_controllersでスタンプの表示を制御する
      プレイヤーにスタンプ1~15分のon,offを制御する用のプロパティを持たせる、デフォルトはoff

      
            "properties": {
              "namespace:stamp_1": {
                "type": "bool",
                "default": false,
                "client_sync": true
              },
              ・・・
      

      スタンプ台ブロック1~15を作って、カスタムコンポーネントを持たせ、スタンプ台を右クリックしたら対応する番号のスタンプ表示プロパティをonにする

      
      export class stampTable implements BlockCustomComponent {
          onPlayerInteract(event:BlockComponentPlayerInteractEvent, arg: CustomComponentParameters) {
              const player = event.player as Player;
              const equ = player.getComponent(EntityComponentTypes.Equippable) as EntityEquippableComponent;
              const itemStack = equ.getEquipment(EquipmentSlot.Mainhand) as ItemStack;
           if (itemStack !== undefined) {
                  if (itemStack.typeId === "namespace:stamp_card") {
                      // カスタムコンポーネントの番号のパラメータを持たせておく
                      const stamp = arg.params;
                      player.setProperty("namespace:stamp_" + stamp.num, true);
                  }
              }
      

      ブロック側に特定のプレイヤーが押し済みかどうかを持たせるのは難しいので、
      ブロックを右クリックしたときにプレイヤーのスタンプ表示プロパティのon,offを見て、MessageFormとか、player.sendMessageでメッセージを出すのがいいかと思います。
      すべてスタンプが集まったら、最初のと同じように受付モブを右クリックしたときのイベントで、
      スタンダードを持っていて、プレイヤーのスタンプ表示プロパティがすべてonになっている場合に、報酬アイテムを渡すようにするといいと思います。

    • #221444返信
      睡眠
      参加者

      ありがとうございます!試してみます!

    • #222376返信

      できなかったらこちらのサイトを見ては?

3件の返信スレッドを表示中
返信先: scriptが詳しい方教えてください
あなたの情報:




スポンサーリンク