基本的に使うインポート
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);全プレイヤーの名前が習得できる
特定の名前のプレイヤークラスを習得する
- const filter= world.getAllPlayers().map((p)=> p.name);
- const filter2= filter.filter(function(b){return b == abc}); abcという名前のプレイヤークラスを習得できる filter[0]風にしていしてつかう
コメント
itemUse等イベントのitemがitemStackに名称変わってるので注意
playerJoinとplayerLeaveのbeforeは追加されたがcancelはできない模様
.nameはread only(書き込み不可)
特定の名前のプレイヤーの取得はEntityQueryOptionsを使用してもできる
world.getPlayers({ name: ‘名前’ });
ちょっと気になったので補足しとく
itemがitemStackになってるの忘れてましたありがとうございます