gametest,script APIを自分なりにまとめてみた

スポンサーリンク

基本的に使うインポート

import { ScriptEventCommandMessageAfterEvent, system, world } from"@minecraft/server";
import { ModalFormData,ActionFormData,MessageFormData} from"@minecraft/server-ui";

現在のイベントはbeforeEventsとafterEventsに分かれてる基本的にはbeforeEventsを使う

beforeEventsはマイクラ側で反応する前に(釣竿が降られる前)に検知するため   

ev.cancel = true;

イベントをキャンセルできるキャンセルしたともjsコードは続きます

beforeEventsを使ってる関数の中で関数を実行したり名前を変えたりするとエラーがするので

system.runTimeout( function(){    })}

で囲むと実行できる

下のほうからbeforeEventsを基本的に紹介していく

プレイヤークラスはプレイヤーの情報がいろいろ入ってるやつイベントで習得でプレイヤーは大体プレイヤークラスの変数

itemUse アイテムをクリックしたときに発生するイベント

world.afterEvents.itemUse.subscribe(async(ev) => {
const {source,itemStack} = ev;
})

scurce はプレイヤー itemは sscsurce はプレイヤー itemは scurce はプレイヤー itemは curce はプレイヤー itemは 

scurce はプレイヤー itemは itemの情報がいろいろと入ってる

chatSendチャットを送ったときに発生するイベント

world.beforeEvents.chatSend.subscribe(async(ev) => {
const  { message,sender} = ev
});

senderはプレイヤーmessageはめっっせーじの内容キャンセルができるためオリジナルチャットとかが作れる

playerJoinプレイヤーが参加したときに発生するイベント

world.afterEvents.playerJoin.subscribe(ev =>{   
const player = ev.playerName;
const playerid = ev.playerId
})

プレイヤークラスの変数がゲットできないためオリジナルの参加メッセージを作るぐらいしか使えない

PlayerLeaveプレイヤーが抜けたときに発生するイベント

world.afterEvents.playerleave.subscribe(ev =>{   
const player = ev.playerName;
const playerid = ev.playerId
})

playerJoinと同様プレイヤークラスが習得できないためオリジナルの退室メッセージぐらいしか作れない

この二つはbeforeイベントでもev.cancel = true;キャンセルでいるようになってほしい

イベント紹介はここまで

フォーム系

ActionFormData

async function from(player) {
const from/*フォームの名前*/ = new ActionFormData(); 
    from.title("タイトル")
   from.body("説明")
   from.button("ボタンに表示される文字","アイコン") //アイコンはこんな感じに指定 textures/blocks/command_block
//ボタンは from.buttonを追加していけば無限に追加できる
      const { canceled, selection , cancelationReason} = await from.show(player);
      if (canceled) return;
if (selection == 0) {} 
if (selection == 1) {}  //ボタンは from.buttonを追加してていく

ModalForm

async function Form(player) {
const Form = new ModalFormData()
       from.title("タイトル")
       from.textField("テキストフィードの上に表示される文字","テキストフィールドの中に表示される文字","初期値")                               from.dropdown("ドロップダウンの上に表示される文字",文字(配列))
      from.slider("スライダーの上に表示される文字",最小値,最大値,0,初期数値;
   const {response,canceled} = await modalForm.show(player);
   if(canceled) return;
    response.formValues[0] //上のコードだと0=テキストフィールド1はドロップダウン}}

 MessageFormData

asyncfunction from(player,message){ 
const from = new MessageFormData()           
osirase.title("タイトル")         
  osirase.body(`説明`)           
osirase.button1("ボタン1")       
   osirase.button2("ボタン2")}

                                                                                                                                                                                                       

MessageFormは本人がうまく扱えてないため書かない

dynamicPropertiesワールドとかプレイヤーなどに保存できる変数アドオンを入れなおさない限りデーターは消えたりしない

習得

world.getDynamicProperty(“変数名”);

world.setDynamicProperty(“変数名”,“入れる文字数字など”);

設定

entity.getDynamicProperty(“変数名”)

entity.setDynamicProperty(“変数名”,“入れる文字数字など”);

プレイヤークラスから習得できる変数メゾット

const name = player.name;プレイヤーの名前

player.nameTag = “変更する名前”;プレイヤーの名前を変えれる

const nameTag = player.nameTag;プレイヤーの頭の上の名前例えばプレイヤーの名前をgametestなどでかえた時にその変えた名前を習得できる

const location = player.location,const { x ,y , z} = location; //プレイヤーのxyzが習得できる

player.hasTag(“タグ名”);プレイヤーがどのtagを持ってるか検知できるtrueかfalseで帰ってくる

            player.runCommand(`コマンド`)コマンドを実行できるexcuteに直すとこんな感じ execute as @s at @s run コマンド

            player.sendMessage(`メッセージ`)プレイヤーにtellraw風のメッセージが送れる

player.isOp();opがあるかどうかを検知できる trueかfalseで返される

その他

const players = world.getAllPlayers() プレイヤークラスが入った配列を習得できる

const players = world.getAllPlayers().map((p)=> p.name);全プレイヤーの名前が習得できる

特定の名前のプレイヤークラスを習得する

  1. const filter= world.getAllPlayers().map((p)=> p.name)
  2.  const filter2= filter.filter(function(b){return b == abc}); abcという名前のプレイヤークラスを習得できる  filter[0]風にしていしてつかう
※投稿記事に含まれるファイルやリンクにより発生した被害についてクラフターズコロニーは責任を取りません
投稿通報

コメント

  1. itemUse等イベントのitemがitemStackに名称変わってるので注意
    playerJoinとplayerLeaveのbeforeは追加されたがcancelはできない模様
    .nameはread only(書き込み不可)
    特定の名前のプレイヤーの取得はEntityQueryOptionsを使用してもできる
    world.getPlayers({ name: ‘名前’ });

    ちょっと気になったので補足しとく

    • itemがitemStackになってるの忘れてましたありがとうございます

コメント通報