wakame11

スポンサーリンク

フォーラムへの返信

10件の投稿を表示中 - 1 - 10件目 (全10件中)
  • 投稿者
    投稿
  • 返信先: scriptAPIの使い方がわからない#261522
    wakame11
    参加者

    https://github.com/wakame11/addon-file-maker/tree/main
    自分が作ったアドオンのセットアップツールです。
    これでバージョンとかmanifest.jsonの間違いは解決します。
    ダウンロードして実行して指示に従ってみてください。

    作成したら、scripts/main.jsをエディターで開いて以下のコードをコピペしてみてください。
    おそらく、ワールドを読み込んだ際と、棒を持って右クリックするとチャットにメッセージが表示されます。

    実際に試してないのでなんかエラー出たら教えてください。

    import { world, system } from "@minecraft/server";
    
    world.afterEvents.itemUse.subscribe(ev => {
        if (ev.itemStack.typeId === "minecraft:stick") {
            world.sendMessage("棒が使用されました");
        }
    });
    
    system.run(() => {
        world.sendMessage("読み込み完了");
    });
    返信先: テクスチャがついてくれない。#259372
    wakame11
    参加者

    結果報告ありがとうございます!
    お力になれたようでよかったです!
    これからも頑張ってください

    返信先: アドオンでコマンド追加の方法#258356
    wakame11
    参加者

    1.統合版でアドオンを追加する方法はAPI限定なのか
    もしそのアドオンがタイポで、タイトルの「アドオンでコマンドを追加する方法」のことであるなら、広く見ればあります。
    方法はいくつかありますが、どれもスラッシュコマンドではありません。スラッシュコマンドを実装することは今のところ不可能です。
    例えば、既に存在する[function]コマンドを利用して、.mcfunctionファイルに書き込んだコマンドを実行することができます。
    これは複数行あっても一気に実行できますが、コマンドしか実行できなく、scriptApiのような広いことはできません。

    別の方法は、pythonなどの外部モジュールを使ってローカルサーバーを構築し、マインクラフト内でサーバーと接続し、チャットを検知する方法です。
    この方法では[?help]などスラッシュコマンドではありませんが、特定の文字列を検知して、対象へ操作を実行することができます。
    ただ、サーバーを開くために必要な知識や環境が誰にでもそろっているわけではないのでお勧めできません。

    一番おすすめなのはベータ版のscriptApiを使うことです。
    scriptApiのベータ版でのみ使用できるイベントで、[before.chatSend]というものを使います。
    このやり方なら、プレイヤーが送信したチャットを事前に内容などを把握し、キャンセルしてから好きなコードを実行することができます。
    ですが、ベータ版なのでワールド作成時に実験的機能の[ベータAPI]をオンにする手間があります。
    とりえあずこの方法のコードを書いておきます。

    話は戻って、質問がそのままの意味であるのなら、アドオンの作り方はscriptApiだけではありません。
    自分はむしろメインはリソースパックとビヘイビアパックで自分でアイテムやモブを追加できる点だと思っています。
    そこにscriptApiを使ってより自由な動作を追加できるということだと思ってます。

    2.構文
    main.js

    
    import { world } from "@minecraft/server";
    
    world.beforeEvents.chatSend.subscribe(ev => {
        if (ev.message === "?help") {
            ev.cancel = true;
            ev.sender.sendMessage("へるぷ");
        }
    });
    

    manifest.json

    
    {
      "format_version": 2,
      "header": {
        "name": "アドオンの名前",
        "description": "アドオンの説明",
        "uuid": "b0fbb1fb-6151-42e6-9c0e-be864a3548a3",
        "version": [1,0,0],
        "min_engine_version": [1,20,0]
      },
      "modules": [
        {
          "type": "script",
          "language": "javascript",
          "uuid": "a1bdb4b6-4d2f-48e1-93cb-4bbb28cb6a11",
          "entry": "scripts/main.js",
          "version": [1,0,0]
        },
        {
          "description": "アドオンの説明",
          "type": "data",
          "uuid": "31b93174-f46e-4c6b-960c-69a37143ca3b",
          "version": [1,0,0]
        }
      ],
      "dependencies": [
        {
          "module_name": "@minecraft/server",
          "version": "2.10.0-beta"
        },
        {
          "module_name": "@minecraft/server-ui",
          "version": "2.0.0"
        }
      ],
      "capabilities": [
        "script_eval"
      ]
    }
    

    3.manifestのバージョン
    manifestにはバージョンがいっぱい書かれてます。
    アドオン:1.0.0
    スクリプト:1.0.0
    説明:1.0.0
    @minecraft/server:2.10.0-beta
    @minecraft/server-ui:2.0.0
    それぞれこんな感じでいいと思います
    上記のmain.jsがベータ版のみなので、ラスト2つは固定です。

    返信先: テクスチャがついてくれない。#254857
    wakame11
    参加者

    もし短縮して書いていたのであれば申し訳ないのですが、最後に記述されている「terrain.json」こちらは「terrain_texture.json」へファイル名の変更をし、blocksの中に保存されているか今一度ご確認ください。
    次も同じくファイル名の誤りがあります。「block.json」ではなく「blocks.json」です「s」が抜けていました。
    これらを試し、もしエラーが出る場合はまた言ってくださいね

    返信先: サイト要望2#253094
    wakame11
    参加者

    掲示板のツールバーにあるCODEですが、javascriptで(${})などよく使うため重複してしまいます
    3つ連続などで使い分けられるようにしてほしいです

    例えば

    
    const log = "log";
    console.log(<code>${log}</code>);
    

    このように意図しない形になってしまいます
    なので、3つ連続の内側では単体のやつを無視するようにしてほしいです。

    • この返信は1ヶ月、 2週前にwakame11が編集しました。
    • この返信は1ヶ月、 2週前にwakame11が編集しました。
    返信先: functionについて#253093
    wakame11
    参加者

    上は1種類のみ対応
    下は数種類対応

    // importは省かせてください(world,system)
    // ブロックを戻す時間(秒)
    const blockresettime = 60;

    // 右クリックをチェックするブロック
    const checkblock = “minecraft:iron_block”;

    // 与えるアイテム
    const axes = [“minecraft:wooden_axe”,”minecraft:stone_axe”,”minecraft:iron_axe”,”minecraft:golden_axe”,”minecraft:diamond_axe”,”minecraft:netherite_axe”];

    // ランダムにアイテムを与える関数
    function giverandomaxe(player) {
    const random = Math.floor(Math.random()*axes.length); // ランダムな値を決める
    player.dimension.runCommand(“gamerule sendcommandfeedback false”); // 念のためチャットへのコマンド実行通知をオフにする
    // 前自分がやった時にこうしてたので、オンのままだと多分通知が来るんだと思います
    player.dimension.runCommand(give ${player.nameTag} ${axes[random]} 1); // いじりやすいようにコマンドを実行する形にしときました
    player.dimension.runCommand(“gamerule sendcommandfeedback true”); // 実行通知をオンへ戻す(不要ならこの行を削除してください)
    console.warn(${player.nameTag}に${axes[random]}を付与しました}); // 邪魔にならないようにコンソールログへ
    return;
    }

    // イベントの登録(右クリックを検知する)
    world.afterEvents.playerInteractWithBlock.subscribe(ev => {
    if (ev.block.typeId !== checkblock) return; // チェックするブロックじゃなかったら何もしない
    const player = ev.player;
    const block = ev.block;
    player.dimension.setBlockType(block.location,”minecraft:air”); // チェックしたブロックを空気に置き換える
    giverandomaxe(player);
    system.runTimeout(() => {
    player.dimension.setBlockType(block.location,checkblock); // チェックブロックを設置する
    },blockresettime*20);
    return;
    });

    ーーーーーーーーーーーーーーーーーーーーーー

    // importは省かせてください(world,system)

    // 設定 “(ブロックのid)”:{ resettime:(ブロックを戻す時間(秒)), giveitem:[“与えるアイテム1”,”アイテム2″…] }
    const checkblocks = {
    “minecraft:iron_block”:{
    resettime:60,
    giveitem:[“minecraft:wooden_axe”,”minecraft:stone_axe”] // 木と石の斧
    },
    “minecraft:diamond_block”:{
    resettime:120, //2分
    giveitem:[“minecraft:iron_axe”,”minecraft:diamond_axe”] // 鉄とダイヤの斧
    }
    }

    // ランダムに与える関数
    function giverandomitem(player,blockid) {
    const blockdata = checkblocks[blockid];
    if (blockdata) {
    const random = Math.floor(Math.random()*blockdata.giveitem.length);
    player.dimension.runCommand(“gamerule sendcommandfeedback false”);
    player.dimension.runCommand(give ${player.nameTag} ${blockdata.giveitem[random]} 1); // giveコマンド
    player.dimension.runCommand(“gamerule sendcommandfeedback true”);
    console.warn(${player.nameTag}へ${blockdata.giveitem[random]}を付与しました);
    } else {
    console.warn([giverandomitem] 未登録のblockid : ${blockid}); // 登録されていないブロックが関数へ渡された際のログ(別にいじらなくてもいい)
    return;
    }
    }

    // イベントの登録
    world.afterEvents.playerInteractWithBlock.subscribe(ev => {
    const block = ev.block;
    const player = ev.player;
    if (block.typeId in checkblocks) {
    player.dimension.setBlockType(block.location,”minecraft:air”);
    giverandomitem(player,block.typeId);
    system.runTimeout(() => {
    player.dimension.setBlockType(block.location,block.typeId);
    },checkblocks[block.typeId].resettime*20);
    return;
    } else {
    return;
    }
    });

    返信先: functionについて#253092
    wakame11
    参加者

    俺もどうかと思います

    wakame11
    参加者

    すみません、Xやってないので遠慮させていただきます。
    掲示板利用ガイドラインにはそのような記載はないので連絡先を載せても問題はないと思います。

    返信先: op検出の方法って?#252729
    wakame11
    参加者

    ありがとうございます。助かりました

    wakame11
    参加者

    どんな内容かによりますけど、多少なら知識あります。

10件の投稿を表示中 - 1 - 10件目 (全10件中)
スポンサーリンク
クラフターズコロニー -マイクラの配布サイト-