概要
Keystoneとは、統合版MinecraftのBDS環境及びビヘイビア―パックにおけるScriptAPI開発を支援することを目的に作られたnpmライブラリです。
Mojangが提供するAPIだけでは難しいような処理の実装を簡単に行えるようにしているほか、Vector3をはじめとした様々な拡張クラスを実装しています。
JavaScriptの暗黙の型変換によるエラーで悩んでしまう時間を最小限になるように、TypeScriptを採用しています。
特徴
🗃️ イベントの優先順位を指定できるので一つのサブスクライブに縛られる必要はありません!
⏰ 豊富なタイマーで幅広い処理をスタイリッシュに!
🛠️ スリープ処理や条件待機処理で上から下への処理記法を実現し、if地獄から脱却!
🔢 拡張されたAABBクラスやVector3クラスで複雑な計算を簡単に!
📃 ボタンやコンポーネント毎に処理を置ける感覚的なフォームビルダーを提供!
推奨環境と最低限の必要知識
・開発をするうえでDockerが必要
・環境構築できるくらいの最低限のエラー対処知識
・統合開発環境のVisualStudioCodeを推奨
・型の動的変換がないTypeScriptの言語知識
どれだけコードが簡潔になるのか
参考としてサンプルを一つ。
プレイヤーが参加してから初めてスニークしたのを検知して、その時にメッセージを送る処理。
import { EventManager, waitUntil } from "keystonemc";
EventManager.registerAfter("playerSpawn", {
async handler(event) {
if (!event.initialSpawn) return;
const player = event.player;
await waitUntil(() => player.isSneaking);
player.sendMessage("スニーク!");
},
});これだけ。
フォーム実装の簡潔さと見やすさ
従来の書き方は、なんといってもネストが酷すぎます。
可読性に欠けます。
たとえば以下のようなフォームを作るとしましょう。

import { createModalForm, toggle, textField } from "keystonemc";
createModalForm({
title: "リンゴについて聞かせてね",
previousForm: getHome(), // xや[ESC]入力の時、ひとつ前のフォームに移動
components: [
toggle({
label: "リンゴは好きかい?",
default: false,
handler(player, value) {
player.sendMessage(`ほう。${value ? "好き" : "嫌い"}なんだね`);
}
}),
textField({
label: "なんでかおしえてよ",
placeholder: "空白は許さないよ",
default: "消して理由を書いておくれ",
handler(player, value) {
player.sendMessage(`「${String(value)}」 ...。へぇ..`);
}
})
]
}).send(player);
これだけで終わりです。
最後に
正直ある程度知識がある人向けのライブラリです。
環境構築などの質問などは一切受け付けません。プログラムのバグなどは全てGitHubのissueで受け付けます。
もう少しサンプルが見たい方は以下リンクから詳しく覗いてみてください。
– Keystone Github
– Keystone コードのドキュメント
– [ScriptAPI] Keystoneとは / Qiita



コメント