コウクマ

スポンサーリンク

フォーラムへの返信

9件の投稿を表示中 - 1 - 9件目 (全9件中)
  • 投稿者
    投稿
  • コウクマ
    参加者

    そうですね、それで出来ます。
    TEST_BP、TEST_RPの中身をそれぞれzip化して「.mcpack」に変更
    TEST_BP.mcpackとTEST_RP.mcpackを選択して、zip化して「.mcaddon」に変更
    scriptをtypescriptでちゃんと書いているならデプロイしてパッケージ化が必要ですが。

    コウクマ
    参加者

    編集したら消えたので再度
    【構造】
    behaviorとresourceの中身をそれぞれ「.mcpack」にする
    その二つをまとめて「.mcaddon」にする

    
    TESTPack ← TESTPack.mcaddon
    |-TEST_BP ← TEST_BP.mcpack
      |-manifest.json
      |-scripts
        |-main.js
    |-TEST_RP ← TEST_RP.mcpack
      |-manifest.json
      |-ui
        |-hub_screen.json
    

    【マニフェストのコード】
    ・BP

    
    {
    	"format_version": 2,
    	"header": {
    		"name": "TEST 1",
    		"description": "TEST-addon",
    		"uuid": "97a08d8c-c22e-4fba-ac57-f6c6a00848c4",
    		"version": [1, 0, 0]
    	},
    	"modules": [
    		{
    			"type": "data",
    			"uuid": "headerとは別のUUID", 
    			"version": [1, 0, 0]
    		},
    		{
    			"type": "script",
    			"language": "javascript",
    			"uuid": "4d0c10ea-f88e-44a8-bf16-b5975f28d000",
    			"version": [1,0,0],
    			"entry": "scripts/main.js"
    		}
    	],
    	"metadata": {
    		"authors": ["製作者名"],
    		"product_type": "addon"
    	},
    	"dependencies": [
    		{
    			"uuid": "d8c69bd5-f645-4ece-b8b4-cb174dd6d401", ←ここでRPのheaderのUUIDと紐づけ
    			"version": [1, 0, 0]
    		},
    		{
    			"module_name": "@minecraft/server-ui", ←ActionFormDataとかを使うなら必要
    			"version": "1.3.0"
    		},
    		{
    			"module_name": "@minecraft/server",
    			"version": "1.10.0"
    		}
    	]
    }
    

    ・RP

    
    {
    	"format_version": 2,
    	"header": {
    		"name": "TEST 1",
    		"description": "TEST-addon",
    		"uuid": "d8c69bd5-f645-4ece-b8b4-cb174dd6d401",
    		"pack_scope": "world",
    		"version": [1,0,0]
    	},
    	"modules": [
    		{
    			"type": "resources",
    			"uuid": "878ab913-c67c-48f0-8ba6-22b91e9a9902",
    			"version": [1,0,0]
    		}
    	],
    	"metadata": {
    		"authors": ["製作者名"],
    		"product_type": "addon"
    	},
    	"dependencies": [
    		{
    			"uuid": "97a08d8c-c22e-4fba-ac57-f6c6a00848c4", ←ここでBPのheaderのUUIDと紐づけ
    			"version": [1,0,0]
    		}
    	]
    }
    
    返信先: 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になっている場合に、報酬アイテムを渡すようにするといいと思います。

    コウクマ
    参加者

    win11に表示されるファイルの種類がMinecraft Supportファイルなだけで、拡張子は.mcaddonなのでは?

    コウクマ
    参加者

    テスクチャーパックだけということは、バニラのブロックのテクスチャを変えるだけということですか?
    それならバニラの状態毎のテクスチャを変えるだけだと思いますが。
    たとえばニンジンならこれを置き換えればいいだけかと。
    carrots_stage_0.png
    carrots_stage_1.png
    carrots_stage_2.png
    carrots_stage_3.png
    オリジナルのブロックならそもそもビヘイビアパックが必要です。

    コウクマ
    参加者

    ブロックJSONファイルでステートの状態毎にテクスチャを変えられます

    
    {
      "format_version": "1.21.20",
      "minecraft:block": {
        "description": {
          "states": {
            "名前空間:ステート名": [0, 1]
          }
        },
        "components": {~},
        "permutations": [
          {
            "condition": "query.block_state('名前空間:ステート名') == 0",
            "components": {
              "minecraft:material_instances": {
                "*": {"texture": "ステート0のテクスチャ名"}
              }
            }
          },
          {
            "condition": "query.block_state('名前空間:ステート名') == 1",
            "components": {
              "minecraft:material_instances": {
                "*": {"texture": "ステート0のテクスチャ名"}
              }
            }
          }
        ]
      }
    }
    
    返信先: ScriptAPI相談所#172198
    コウクマ
    参加者

    EntityTameableComponentのtamedToPlayerIdのidが自分かどうかを見ればできると思います

        const tameable = entity.getComponent(EntityComponentTypes.Tameable) as EntityTameableComponent;
        if (tameable.tamedToPlayerId === player.id) {
    
        }
    

    jsonでは無理かと思います。
    world.afterEvents.dataDrivenEntityTriggerで「minecraft:convert_to_drowned」(ドラウンドの例)など返信時のeventを拾って
    TameableやnameTagなどを返信後に付けなおせば出来ると思います

    コウクマ
    参加者

    https://learn.microsoft.com/ja-jp/minecraft/creator/documents/blockbench?view=minecraft-bedrock-stable
    初めてならPCでBlockbenchを入れて、blockプラグインを入れるのがいいですね。
    モデルだけでなく、ビヘイビアも自動生成してくれます。

    返信先: 爆発について#164953
    コウクマ
    参加者

    スクリプトAPIを使えばできますね。
    world.afterEvents.projectileHitBlockとworld.afterEvents.projectileHitEntityから
    こんな感じで爆発を発生させつつ、別で自分以外にダメージを与える。

    async function explosion(projectile:Entity, source:Entity, dimension:Dimension, location:Vector3) {
        if (projectile.typeId === "minecraft:snowball") { // 爆発を発生させたいアイテムなら(json側では爆発させない)
            const option = {
                allowUnderwater: false, // 対中でも爆発するか
                breaksBlocks: true, // ブロックを破壊するか
                causesFire: false, // 爆発で火が付くか
                source: source // 爆発を発生させたのは誰か
            } as ExplosionOptions;
            // イベントが発生した場所で、範囲2ブロック分爆発を発生させる
            const bom = dimension.createExplosion(location, 2, option);
            if (bom) { // 爆発が発生した場合
                source.addTag(source.id); // 爆発物を投げたモブを除外させるためにタグをセット
                // 条件を付けて爆発した範囲のモブを取る
                dimension.getEntities({
                    location: location, // 発生源の位置
             excludeFamilies: ["player"], // すべてのプレイヤーを除外したいならこれを入れる
                    excludeTypes: ["item"], // ドロップアイテムを除外
                    maxDistance: 2, // 発生源から2ブロックの範囲
                    excludeTags: [source.id] // 投げたモブ自身につけたタグを除外
                // 範囲内にいる条件に一致したモブの数だけ実行
                }).forEach(entity => {
                    // モブが水中にいる場合は影響を無くす(判定はなくてもOK)
                    if (!entity.isInWater) {
                        // モブに爆発ダメージを与える
                        entity.applyDamage(2, {
                            cause: EntityDamageCause.entityExplosion,
                            damagingEntity: source
                        });
                    }
                });
                source.removeTag(source.id); // タグを外す
            }
        }
    }
    
9件の投稿を表示中 - 1 - 9件目 (全9件中)
スポンサーリンク
クラフターズコロニー -マイクラの配布サイト-