Minecraft Bedrock EditionのScripting APIにカスタムイベントなどを追加するためのテンプレートプロジェクト
ドキュメント
※このテンプレートはTypescriptで書かれています。Node.jsとnpmが必要です。 Node.jsとnpmをインストールする
- このリポジトリをクローンします。
git clone https://github.com/ken6028/MCJS-Honeycomb-Script.git development_behavior_packsディレクトリ内にテンプレートを配置します。- プロジェクトのルートディレクトリに移動し、依存関係をインストールします。
npm install manifest.jsonのuuidを変更します。
開発中は、以下のコマンドでビルドと監視を行うことができます。
npm run dev
ワールド編集のビヘイビアーパックから、パックを有効化してください。

import { MCManager } from "./_honeycomb.script/mc.manager.js";
const manager = new MCManager();
//MGR-プレイヤー
import MGR_Player from "./_honeycomb.script/player/mgr.js";
const playerManager = manager.use(MGR_Player);
//PLG-プレイヤー入力
import Input from "./_honeycomb.script/player/plug.input.js";
playerManager.use(Input);
//ジャンプ開始イベントを受け取る
manager.on("playerInput:jumpStart", (ev) => {
const wrapper = ev.wrapper;
wrapper.player.sendMessage("Jump started!");
});この例では、プレイヤーの管理を行うMGR_Player(マネージャー)と入力イベントを追加するInput(プラグイン)を使用しています。
プラグインを使用するには、基盤となるマネージャーを使用する必用があります。
import { PlayerPluginEntry, PlayerWrapper } from "./_honeycomb.script/player/mgr.js";
const plug: PlayerPluginEntry<void> = (core) => {
const manager = core.MCManager();
const playerManager = core.playerManager;
//初期化
manager.on("playerManager:addPlayer", (ev) => {
const { wrapper } = ev;
wrapper.plugLevel = {
lastLevel: wrapper.player.level
}
});
//毎tickごとにレベルを監視して、変化があればイベントを発火する
manager.on("tick", () => {
const players = playerManager.allPlayers;
players.forEach((wrap) => {
const player = wrap.player;
const level = player.level;
if (wrap.plugLevel.lastLevel !== level) {
//coreからイベントを発火する
core.emit("playerLevelChange", {
wrapper: wrap,
oldLevel: wrap.plugLevel.lastLevel,
newLevel: level
});
wrap.plugLevel.lastLevel = level;
}
})
})
}
export default plug;
declare module "./_honeycomb.script/player/mgr.js" {
interface PlayerWrapper {
plugLevel: {
lastLevel: number;
}
}
}
declare module "./_honeycomb.script/mc.manager.js" {
interface EX_EventDataMap {
"playerLevelChange": {
wrapper: PlayerWrapper;
oldLevel: number;
newLevel: number;
}
}
}この例では、プレイヤーのレベルの変化を監視するプラグインを作成しています。
プレイヤーが追加されたときに、plugLevelというプロパティをPlayerWrapperに追加して、最後のレベルを保存します。
毎tickごとに全プレイヤーのレベルをチェックし、変化があればplayerLevelChangeイベントを発火します。
import LevelPlugin from "./plug.player.level.js";
playerManager.use(LevelPlugin);
//イベントを受け取る
manager.on("playerLevelChange", (ev) => {
const { wrapper, oldLevel, newLevel } = ev;
wrapper.player.sendMessage(`Your level changed from ${oldLevel} to ${newLevel}!`);
});プラグインのファイル名はplug.〇〇.tsの形式にしてください。
plug.〇〇.ts以外のファイル名を使用すると、追加されたイベントやプロパティがプラグイン使用時以外にも補完されてしまいます。
それ以外のファイル名を使用する場合は、tsconfig.jsonのexcludeにファイルを追加してください。