@axeth/create-cli 2.0.6 → 2.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/class/AxethCLI.ts +8 -0
- package/src/data/templates.json +0 -8
package/package.json
CHANGED
package/src/class/AxethCLI.ts
CHANGED
|
@@ -36,6 +36,14 @@ class AxethCLI {
|
|
|
36
36
|
const spinner = prompt.spinner({ indicator: "dots" });
|
|
37
37
|
|
|
38
38
|
await this.generateTemplate(addonInfo, config, minecraftServerVersion, minecraftServerUIVersion, spinner);
|
|
39
|
+
//cd and bun run lint
|
|
40
|
+
spinner.start("Linting generated add-on...");
|
|
41
|
+
await this.runCommand(`cd ./${(addonInfo.addonName as string).replace(/\s+/g, "-").toLowerCase()} ; bun run lint`).catch((err) => {
|
|
42
|
+
spinner.stop("Linting failed.");
|
|
43
|
+
console.error(color.red(err));
|
|
44
|
+
process.exit(1);
|
|
45
|
+
});
|
|
46
|
+
spinner.stop("Add-on linted successfully.");
|
|
39
47
|
const openVSCode = await prompt.confirm({
|
|
40
48
|
message: "Open on VSCode?",
|
|
41
49
|
initialValue: false
|
package/src/data/templates.json
CHANGED
|
@@ -3,14 +3,6 @@
|
|
|
3
3
|
"/.turbo/turbo-build.log": "\u001b[?9001h\u001b[?1004h\u001b[?25l\u001b[2J\u001b[m\u001b[35m\u001b[2m\u001b[H$\u001b[m\u001b[1m\u001b[2m\u001b[1Cbun run ./index.ts --build\r\n\u001b]0;C:\\WINDOWS\\system32\\cmd.exe\u0007\u001b[?25h\u001b[22m\u001b[2J\u001b[3J\u001b[?25l\u001b[H\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\r\n\u001b[K\u001b[H\u001b[?25h\u001b[44m INFO \u001b[m: \u001b[90mLoaded config pack: test@1.0.0\u001b[39m\u001b[44m\r\n INFO \u001b[m: \u001b[90mBuilding packs...\r\n\u001b[m\u001b[44m INFO \u001b[m: \u001b[90mApplying filters...\r\n\u001b[m • \u001b[34mTSBuilds\u001b[m\r\n\u001b[11X\u001b[30m\u001b[11C1\u001b[m. \u001b[90mRunning linter: \u001b[33mbunx eslint ./packs\u001b[m,\r\n\u001b[11X\u001b[30m\u001b[11C2\u001b[m. \u001b[32m✓ \u001b[90mLinting passed\u001b[m,\r\n\u001b[11X\u001b[30m\u001b[11C3\u001b[m. \u001b[90mBuilding library: \u001b[34mAxethLib.js\u001b[m,\r\n\u001b[11X\u001b[30m\u001b[11C4\u001b[m. \u001b[90mSuccessfully built library: \u001b[32mBP/scripts/AxethLib.js\u001b[m,\r\n\u001b[11X\u001b[30m\u001b[11C5\u001b[m. \u001b[90mBuilding script: \u001b[32m./packs/scripts/index.ts\u001b[m,\r\n\u001b[11X\u001b[30m\u001b[11C6\u001b[m. \u001b[90mSuccessfully built script: \u001b[32mBP/scripts/index.js\r\n\u001b[m • \u001b[34mManifestBuilds\u001b[m\r\n\u001b[11X\u001b[30m\u001b[11C1\u001b[m. \u001b[90mLooking for manifests...\u001b[m,\r\n\u001b[30m\u001b[11C2\u001b[m. \u001b[90mUpdated manifest \u001b[32msuccessfully\u001b[90m.\u001b[K\u001b[m\r\n\u001b[42m SUCCESS \u001b[m: \u001b[90mSuccessfully processed files\u001b[K\u001b[m\r\n\u001b[?9001l\u001b[?1004l\n",
|
|
4
4
|
"/.vscode/launch.json": "{\r\n \"version\": \"0.3.0\",\r\n \"configurations\": [\r\n {\r\n \"type\": \"minecraft-js\",\r\n \"request\": \"attach\",\r\n \"name\": \"Debug with Minecraft\",\r\n \"mode\": \"listen\",\r\n \"localRoot\": \"${workspaceFolder}/packs/scripts\",\r\n \"sourceMapRoot\": \"${workspaceFolder}/data/dist/BP/scripts\",\r\n \"port\": 19144\r\n }\r\n ]\r\n}",
|
|
5
5
|
"/bun.lock": "{\n \"lockfileVersion\": 1,\n \"configVersion\": 1,\n \"workspaces\": {\n \"\": {\n \"name\": \"pack-name\",\n \"dependencies\": {\n \"@axeth/api\": \"^1.0.1\",\n \"@axeth/core\": \"^1.0.2\",\n \"chalk\": \"^5.6.2\",\n \"esbuild\": \"^0.27.2\",\n \"eslint\": \"^9.39.2\",\n \"jszip\": \"^3.10.1\",\n \"typescript-eslint\": \"^8.50.1\",\n },\n \"devDependencies\": {\n \"@types/bun\": \"latest\",\n \"chokidar-cli\": \"^3.0.0\",\n \"jiti\": \"^2.6.1\",\n },\n \"peerDependencies\": {\n \"typescript\": \"^5\",\n },\n },\n },\n \"packages\": {\n \"@axeth/api\": [\"@axeth/api@1.0.1\", \"\", { \"peerDependencies\": { \"@minecraft/server\": \"*\", \"@minecraft/server-ui\": \"*\" } }, \"sha512-peAM8SqsIE9Junp+xa219YU46cECHlGJJFv5r600u+VOIHpQheTbXz5DWVBfuFZVT2+5ZMWFaPx4VDfki4iz/A==\"],\n\n \"@axeth/core\": [\"@axeth/core@1.0.2\", \"\", { \"dependencies\": { \"chalk\": \"^5.6.2\", \"jszip\": \"^3.10.1\" }, \"peerDependencies\": { \"typescript\": \"^5\" } }, \"sha512-iUNXNNX6Vj5YnpgUQXjVBmHGwdWr48j+aV3l7Ldrpwf+Nh9Jhb4lYa1PCTKKyocZRyAIWOSd0BALhqC/mGhOiA==\"],\n\n \"@esbuild/aix-ppc64\": [\"@esbuild/aix-ppc64@0.27.2\", \"\", { \"os\": \"aix\", \"cpu\": \"ppc64\" }, \"sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==\"],\n\n \"@esbuild/android-arm\": [\"@esbuild/android-arm@0.27.2\", \"\", { \"os\": \"android\", \"cpu\": \"arm\" }, \"sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==\"],\n\n \"@esbuild/android-arm64\": [\"@esbuild/android-arm64@0.27.2\", \"\", { \"os\": \"android\", \"cpu\": \"arm64\" }, \"sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==\"],\n\n \"@esbuild/android-x64\": [\"@esbuild/android-x64@0.27.2\", \"\", { \"os\": \"android\", \"cpu\": \"x64\" }, \"sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==\"],\n\n \"@esbuild/darwin-arm64\": [\"@esbuild/darwin-arm64@0.27.2\", \"\", { \"os\": \"darwin\", \"cpu\": \"arm64\" }, \"sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==\"],\n\n \"@esbuild/darwin-x64\": [\"@esbuild/darwin-x64@0.27.2\", \"\", { \"os\": \"darwin\", \"cpu\": \"x64\" }, \"sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==\"],\n\n \"@esbuild/freebsd-arm64\": [\"@esbuild/freebsd-arm64@0.27.2\", \"\", { \"os\": \"freebsd\", \"cpu\": \"arm64\" }, \"sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==\"],\n\n \"@esbuild/freebsd-x64\": [\"@esbuild/freebsd-x64@0.27.2\", \"\", { \"os\": \"freebsd\", \"cpu\": \"x64\" }, \"sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==\"],\n\n \"@esbuild/linux-arm\": [\"@esbuild/linux-arm@0.27.2\", \"\", { \"os\": \"linux\", \"cpu\": \"arm\" }, \"sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==\"],\n\n \"@esbuild/linux-arm64\": [\"@esbuild/linux-arm64@0.27.2\", \"\", { \"os\": \"linux\", \"cpu\": \"arm64\" }, \"sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==\"],\n\n \"@esbuild/linux-ia32\": [\"@esbuild/linux-ia32@0.27.2\", \"\", { \"os\": \"linux\", \"cpu\": \"ia32\" }, \"sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==\"],\n\n \"@esbuild/linux-loong64\": [\"@esbuild/linux-loong64@0.27.2\", \"\", { \"os\": \"linux\", \"cpu\": \"none\" }, \"sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==\"],\n\n \"@esbuild/linux-mips64el\": [\"@esbuild/linux-mips64el@0.27.2\", \"\", { \"os\": \"linux\", \"cpu\": \"none\" }, \"sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==\"],\n\n \"@esbuild/linux-ppc64\": [\"@esbuild/linux-ppc64@0.27.2\", \"\", { \"os\": \"linux\", \"cpu\": \"ppc64\" }, \"sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==\"],\n\n \"@esbuild/linux-riscv64\": [\"@esbuild/linux-riscv64@0.27.2\", \"\", { \"os\": \"linux\", \"cpu\": \"none\" }, \"sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==\"],\n\n \"@esbuild/linux-s390x\": [\"@esbuild/linux-s390x@0.27.2\", \"\", { \"os\": \"linux\", \"cpu\": \"s390x\" }, \"sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==\"],\n\n \"@esbuild/linux-x64\": [\"@esbuild/linux-x64@0.27.2\", \"\", { \"os\": \"linux\", \"cpu\": \"x64\" }, \"sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==\"],\n\n \"@esbuild/netbsd-arm64\": [\"@esbuild/netbsd-arm64@0.27.2\", \"\", { \"os\": \"none\", \"cpu\": \"arm64\" }, \"sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==\"],\n\n \"@esbuild/netbsd-x64\": [\"@esbuild/netbsd-x64@0.27.2\", \"\", { \"os\": \"none\", \"cpu\": \"x64\" }, \"sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==\"],\n\n \"@esbuild/openbsd-arm64\": [\"@esbuild/openbsd-arm64@0.27.2\", \"\", { \"os\": \"openbsd\", \"cpu\": \"arm64\" }, \"sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==\"],\n\n \"@esbuild/openbsd-x64\": [\"@esbuild/openbsd-x64@0.27.2\", \"\", { \"os\": \"openbsd\", \"cpu\": \"x64\" }, \"sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==\"],\n\n \"@esbuild/openharmony-arm64\": [\"@esbuild/openharmony-arm64@0.27.2\", \"\", { \"os\": \"none\", \"cpu\": \"arm64\" }, \"sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==\"],\n\n \"@esbuild/sunos-x64\": [\"@esbuild/sunos-x64@0.27.2\", \"\", { \"os\": \"sunos\", \"cpu\": \"x64\" }, \"sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==\"],\n\n \"@esbuild/win32-arm64\": [\"@esbuild/win32-arm64@0.27.2\", \"\", { \"os\": \"win32\", \"cpu\": \"arm64\" }, \"sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==\"],\n\n \"@esbuild/win32-ia32\": [\"@esbuild/win32-ia32@0.27.2\", \"\", { \"os\": \"win32\", \"cpu\": \"ia32\" }, \"sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==\"],\n\n \"@esbuild/win32-x64\": [\"@esbuild/win32-x64@0.27.2\", \"\", { \"os\": \"win32\", \"cpu\": \"x64\" }, \"sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==\"],\n\n \"@eslint-community/eslint-utils\": [\"@eslint-community/eslint-utils@4.9.0\", \"\", { \"dependencies\": { \"eslint-visitor-keys\": \"^3.4.3\" }, \"peerDependencies\": { \"eslint\": \"^6.0.0 || ^7.0.0 || >=8.0.0\" } }, \"sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==\"],\n\n \"@eslint-community/regexpp\": [\"@eslint-community/regexpp@4.12.2\", \"\", {}, \"sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==\"],\n\n \"@eslint/config-array\": [\"@eslint/config-array@0.21.1\", \"\", { \"dependencies\": { \"@eslint/object-schema\": \"^2.1.7\", \"debug\": \"^4.3.1\", \"minimatch\": \"^3.1.2\" } }, \"sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==\"],\n\n \"@eslint/config-helpers\": [\"@eslint/config-helpers@0.4.2\", \"\", { \"dependencies\": { \"@eslint/core\": \"^0.17.0\" } }, \"sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==\"],\n\n \"@eslint/core\": [\"@eslint/core@0.17.0\", \"\", { \"dependencies\": { \"@types/json-schema\": \"^7.0.15\" } }, \"sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==\"],\n\n \"@eslint/eslintrc\": [\"@eslint/eslintrc@3.3.3\", \"\", { \"dependencies\": { \"ajv\": \"^6.12.4\", \"debug\": \"^4.3.2\", \"espree\": \"^10.0.1\", \"globals\": \"^14.0.0\", \"ignore\": \"^5.2.0\", \"import-fresh\": \"^3.2.1\", \"js-yaml\": \"^4.1.1\", \"minimatch\": \"^3.1.2\", \"strip-json-comments\": \"^3.1.1\" } }, \"sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==\"],\n\n \"@eslint/js\": [\"@eslint/js@9.39.2\", \"\", {}, \"sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==\"],\n\n \"@eslint/object-schema\": [\"@eslint/object-schema@2.1.7\", \"\", {}, \"sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==\"],\n\n \"@eslint/plugin-kit\": [\"@eslint/plugin-kit@0.4.1\", \"\", { \"dependencies\": { \"@eslint/core\": \"^0.17.0\", \"levn\": \"^0.4.1\" } }, \"sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==\"],\n\n \"@humanfs/core\": [\"@humanfs/core@0.19.1\", \"\", {}, \"sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==\"],\n\n \"@humanfs/node\": [\"@humanfs/node@0.16.7\", \"\", { \"dependencies\": { \"@humanfs/core\": \"^0.19.1\", \"@humanwhocodes/retry\": \"^0.4.0\" } }, \"sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==\"],\n\n \"@humanwhocodes/module-importer\": [\"@humanwhocodes/module-importer@1.0.1\", \"\", {}, \"sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==\"],\n\n \"@humanwhocodes/retry\": [\"@humanwhocodes/retry@0.4.3\", \"\", {}, \"sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==\"],\n\n \"@minecraft/common\": [\"@minecraft/common@1.2.0\", \"\", {}, \"sha512-JdmEq4P3Z/FtoBzhLijFgMSVFnFRrUoLwY8DHHrgtFo0mfLTOLTB1RErYjLMsA6b7BGVNxkX/pfFRiH7QZ0XwQ==\"],\n\n \"@minecraft/server\": [\"@minecraft/server@2.4.0\", \"\", { \"peerDependencies\": { \"@minecraft/common\": \"^1.2.0\", \"@minecraft/vanilla-data\": \">=1.20.70\" } }, \"sha512-xd9dOWQ4RhPQBCt2aui9tp/GCnjvXpi6ZHVxaUr0SPDHfh/GkMRWnyf2Ud6D3pEThp/0giOEtHY1sx2HN9Qd+A==\"],\n\n \"@minecraft/server-ui\": [\"@minecraft/server-ui@2.0.0\", \"\", { \"dependencies\": { \"@minecraft/common\": \"^1.0.0\", \"@minecraft/server\": \"^2.0.0\" } }, \"sha512-K1xFK1OEJSNfIgyRElaoxDTW/nbEqjBp1YnUdyPCs4kGDglwoXNyFz3wzMOkvT04CJXSifZGcTJeWda4C6OkXw==\"],\n\n \"@minecraft/vanilla-data\": [\"@minecraft/vanilla-data@1.21.131\", \"\", {}, \"sha512-Ptw6t5mgyOODFmZxpZRRawjfhgcniGNf7kZqxV98RTAJi61tZ6wEMcI9muiWXw5yrNstYcTxJmqVjx1RaZKkxg==\"],\n\n \"@types/bun\": [\"@types/bun@1.3.5\", \"\", { \"dependencies\": { \"bun-types\": \"1.3.5\" } }, \"sha512-RnygCqNrd3srIPEWBd5LFeUYG7plCoH2Yw9WaZGyNmdTEei+gWaHqydbaIRkIkcbXwhBT94q78QljxN0Sk838w==\"],\n\n \"@types/estree\": [\"@types/estree@1.0.8\", \"\", {}, \"sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==\"],\n\n \"@types/json-schema\": [\"@types/json-schema@7.0.15\", \"\", {}, \"sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==\"],\n\n \"@types/node\": [\"@types/node@25.0.3\", \"\", { \"dependencies\": { \"undici-types\": \"~7.16.0\" } }, \"sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==\"],\n\n \"@typescript-eslint/eslint-plugin\": [\"@typescript-eslint/eslint-plugin@8.50.1\", \"\", { \"dependencies\": { \"@eslint-community/regexpp\": \"^4.10.0\", \"@typescript-eslint/scope-manager\": \"8.50.1\", \"@typescript-eslint/type-utils\": \"8.50.1\", \"@typescript-eslint/utils\": \"8.50.1\", \"@typescript-eslint/visitor-keys\": \"8.50.1\", \"ignore\": \"^7.0.0\", \"natural-compare\": \"^1.4.0\", \"ts-api-utils\": \"^2.1.0\" }, \"peerDependencies\": { \"@typescript-eslint/parser\": \"^8.50.1\", \"eslint\": \"^8.57.0 || ^9.0.0\", \"typescript\": \">=4.8.4 <6.0.0\" } }, \"sha512-PKhLGDq3JAg0Jk/aK890knnqduuI/Qj+udH7wCf0217IGi4gt+acgCyPVe79qoT+qKUvHMDQkwJeKW9fwl8Cyw==\"],\n\n \"@typescript-eslint/parser\": [\"@typescript-eslint/parser@8.50.1\", \"\", { \"dependencies\": { \"@typescript-eslint/scope-manager\": \"8.50.1\", \"@typescript-eslint/types\": \"8.50.1\", \"@typescript-eslint/typescript-estree\": \"8.50.1\", \"@typescript-eslint/visitor-keys\": \"8.50.1\", \"debug\": \"^4.3.4\" }, \"peerDependencies\": { \"eslint\": \"^8.57.0 || ^9.0.0\", \"typescript\": \">=4.8.4 <6.0.0\" } }, \"sha512-hM5faZwg7aVNa819m/5r7D0h0c9yC4DUlWAOvHAtISdFTc8xB86VmX5Xqabrama3wIPJ/q9RbGS1worb6JfnMg==\"],\n\n \"@typescript-eslint/project-service\": [\"@typescript-eslint/project-service@8.50.1\", \"\", { \"dependencies\": { \"@typescript-eslint/tsconfig-utils\": \"^8.50.1\", \"@typescript-eslint/types\": \"^8.50.1\", \"debug\": \"^4.3.4\" }, \"peerDependencies\": { \"typescript\": \">=4.8.4 <6.0.0\" } }, \"sha512-E1ur1MCVf+YiP89+o4Les/oBAVzmSbeRB0MQLfSlYtbWU17HPxZ6Bhs5iYmKZRALvEuBoXIZMOIRRc/P++Ortg==\"],\n\n \"@typescript-eslint/scope-manager\": [\"@typescript-eslint/scope-manager@8.50.1\", \"\", { \"dependencies\": { \"@typescript-eslint/types\": \"8.50.1\", \"@typescript-eslint/visitor-keys\": \"8.50.1\" } }, \"sha512-mfRx06Myt3T4vuoHaKi8ZWNTPdzKPNBhiblze5N50//TSHOAQQevl/aolqA/BcqqbJ88GUnLqjjcBc8EWdBcVw==\"],\n\n \"@typescript-eslint/tsconfig-utils\": [\"@typescript-eslint/tsconfig-utils@8.50.1\", \"\", { \"peerDependencies\": { \"typescript\": \">=4.8.4 <6.0.0\" } }, \"sha512-ooHmotT/lCWLXi55G4mvaUF60aJa012QzvLK0Y+Mp4WdSt17QhMhWOaBWeGTFVkb2gDgBe19Cxy1elPXylslDw==\"],\n\n \"@typescript-eslint/type-utils\": [\"@typescript-eslint/type-utils@8.50.1\", \"\", { \"dependencies\": { \"@typescript-eslint/types\": \"8.50.1\", \"@typescript-eslint/typescript-estree\": \"8.50.1\", \"@typescript-eslint/utils\": \"8.50.1\", \"debug\": \"^4.3.4\", \"ts-api-utils\": \"^2.1.0\" }, \"peerDependencies\": { \"eslint\": \"^8.57.0 || ^9.0.0\", \"typescript\": \">=4.8.4 <6.0.0\" } }, \"sha512-7J3bf022QZE42tYMO6SL+6lTPKFk/WphhRPe9Tw/el+cEwzLz1Jjz2PX3GtGQVxooLDKeMVmMt7fWpYRdG5Etg==\"],\n\n \"@typescript-eslint/types\": [\"@typescript-eslint/types@8.50.1\", \"\", {}, \"sha512-v5lFIS2feTkNyMhd7AucE/9j/4V9v5iIbpVRncjk/K0sQ6Sb+Np9fgYS/63n6nwqahHQvbmujeBL7mp07Q9mlA==\"],\n\n \"@typescript-eslint/typescript-estree\": [\"@typescript-eslint/typescript-estree@8.50.1\", \"\", { \"dependencies\": { \"@typescript-eslint/project-service\": \"8.50.1\", \"@typescript-eslint/tsconfig-utils\": \"8.50.1\", \"@typescript-eslint/types\": \"8.50.1\", \"@typescript-eslint/visitor-keys\": \"8.50.1\", \"debug\": \"^4.3.4\", \"minimatch\": \"^9.0.4\", \"semver\": \"^7.6.0\", \"tinyglobby\": \"^0.2.15\", \"ts-api-utils\": \"^2.1.0\" }, \"peerDependencies\": { \"typescript\": \">=4.8.4 <6.0.0\" } }, \"sha512-woHPdW+0gj53aM+cxchymJCrh0cyS7BTIdcDxWUNsclr9VDkOSbqC13juHzxOmQ22dDkMZEpZB+3X1WpUvzgVQ==\"],\n\n \"@typescript-eslint/utils\": [\"@typescript-eslint/utils@8.50.1\", \"\", { \"dependencies\": { \"@eslint-community/eslint-utils\": \"^4.7.0\", \"@typescript-eslint/scope-manager\": \"8.50.1\", \"@typescript-eslint/types\": \"8.50.1\", \"@typescript-eslint/typescript-estree\": \"8.50.1\" }, \"peerDependencies\": { \"eslint\": \"^8.57.0 || ^9.0.0\", \"typescript\": \">=4.8.4 <6.0.0\" } }, \"sha512-lCLp8H1T9T7gPbEuJSnHwnSuO9mDf8mfK/Nion5mZmiEaQD9sWf9W4dfeFqRyqRjF06/kBuTmAqcs9sewM2NbQ==\"],\n\n \"@typescript-eslint/visitor-keys\": [\"@typescript-eslint/visitor-keys@8.50.1\", \"\", { \"dependencies\": { \"@typescript-eslint/types\": \"8.50.1\", \"eslint-visitor-keys\": \"^4.2.1\" } }, \"sha512-IrDKrw7pCRUR94zeuCSUWQ+w8JEf5ZX5jl/e6AHGSLi1/zIr0lgutfn/7JpfCey+urpgQEdrZVYzCaVVKiTwhQ==\"],\n\n \"acorn\": [\"acorn@8.15.0\", \"\", { \"bin\": { \"acorn\": \"bin/acorn\" } }, \"sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==\"],\n\n \"acorn-jsx\": [\"acorn-jsx@5.3.2\", \"\", { \"peerDependencies\": { \"acorn\": \"^6.0.0 || ^7.0.0 || ^8.0.0\" } }, \"sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==\"],\n\n \"ajv\": [\"ajv@6.12.6\", \"\", { \"dependencies\": { \"fast-deep-equal\": \"^3.1.1\", \"fast-json-stable-stringify\": \"^2.0.0\", \"json-schema-traverse\": \"^0.4.1\", \"uri-js\": \"^4.2.2\" } }, \"sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==\"],\n\n \"ansi-regex\": [\"ansi-regex@4.1.1\", \"\", {}, \"sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==\"],\n\n \"ansi-styles\": [\"ansi-styles@4.3.0\", \"\", { \"dependencies\": { \"color-convert\": \"^2.0.1\" } }, \"sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==\"],\n\n \"anymatch\": [\"anymatch@3.1.3\", \"\", { \"dependencies\": { \"normalize-path\": \"^3.0.0\", \"picomatch\": \"^2.0.4\" } }, \"sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==\"],\n\n \"argparse\": [\"argparse@2.0.1\", \"\", {}, \"sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==\"],\n\n \"balanced-match\": [\"balanced-match@1.0.2\", \"\", {}, \"sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==\"],\n\n \"binary-extensions\": [\"binary-extensions@2.3.0\", \"\", {}, \"sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==\"],\n\n \"brace-expansion\": [\"brace-expansion@1.1.12\", \"\", { \"dependencies\": { \"balanced-match\": \"^1.0.0\", \"concat-map\": \"0.0.1\" } }, \"sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==\"],\n\n \"braces\": [\"braces@3.0.3\", \"\", { \"dependencies\": { \"fill-range\": \"^7.1.1\" } }, \"sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==\"],\n\n \"bun-types\": [\"bun-types@1.3.5\", \"\", { \"dependencies\": { \"@types/node\": \"*\" } }, \"sha512-inmAYe2PFLs0SUbFOWSVD24sg1jFlMPxOjOSSCYqUgn4Hsc3rDc7dFvfVYjFPNHtov6kgUeulV4SxbuIV/stPw==\"],\n\n \"callsites\": [\"callsites@3.1.0\", \"\", {}, \"sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==\"],\n\n \"camelcase\": [\"camelcase@5.3.1\", \"\", {}, \"sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==\"],\n\n \"chalk\": [\"chalk@5.6.2\", \"\", {}, \"sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==\"],\n\n \"chokidar\": [\"chokidar@3.6.0\", \"\", { \"dependencies\": { \"anymatch\": \"~3.1.2\", \"braces\": \"~3.0.2\", \"glob-parent\": \"~5.1.2\", \"is-binary-path\": \"~2.1.0\", \"is-glob\": \"~4.0.1\", \"normalize-path\": \"~3.0.0\", \"readdirp\": \"~3.6.0\" }, \"optionalDependencies\": { \"fsevents\": \"~2.3.2\" } }, \"sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==\"],\n\n \"chokidar-cli\": [\"chokidar-cli@3.0.0\", \"\", { \"dependencies\": { \"chokidar\": \"^3.5.2\", \"lodash.debounce\": \"^4.0.8\", \"lodash.throttle\": \"^4.1.1\", \"yargs\": \"^13.3.0\" }, \"bin\": { \"chokidar\": \"index.js\" } }, \"sha512-xVW+Qeh7z15uZRxHOkP93Ux8A0xbPzwK4GaqD8dQOYc34TlkqUhVSS59fK36DOp5WdJlrRzlYSy02Ht99FjZqQ==\"],\n\n \"cliui\": [\"cliui@5.0.0\", \"\", { \"dependencies\": { \"string-width\": \"^3.1.0\", \"strip-ansi\": \"^5.2.0\", \"wrap-ansi\": \"^5.1.0\" } }, \"sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==\"],\n\n \"color-convert\": [\"color-convert@2.0.1\", \"\", { \"dependencies\": { \"color-name\": \"~1.1.4\" } }, \"sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==\"],\n\n \"color-name\": [\"color-name@1.1.4\", \"\", {}, \"sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==\"],\n\n \"concat-map\": [\"concat-map@0.0.1\", \"\", {}, \"sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==\"],\n\n \"core-util-is\": [\"core-util-is@1.0.3\", \"\", {}, \"sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==\"],\n\n \"cross-spawn\": [\"cross-spawn@7.0.6\", \"\", { \"dependencies\": { \"path-key\": \"^3.1.0\", \"shebang-command\": \"^2.0.0\", \"which\": \"^2.0.1\" } }, \"sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==\"],\n\n \"debug\": [\"debug@4.4.3\", \"\", { \"dependencies\": { \"ms\": \"^2.1.3\" } }, \"sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==\"],\n\n \"decamelize\": [\"decamelize@1.2.0\", \"\", {}, \"sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==\"],\n\n \"deep-is\": [\"deep-is@0.1.4\", \"\", {}, \"sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==\"],\n\n \"emoji-regex\": [\"emoji-regex@7.0.3\", \"\", {}, \"sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==\"],\n\n \"esbuild\": [\"esbuild@0.27.2\", \"\", { \"optionalDependencies\": { \"@esbuild/aix-ppc64\": \"0.27.2\", \"@esbuild/android-arm\": \"0.27.2\", \"@esbuild/android-arm64\": \"0.27.2\", \"@esbuild/android-x64\": \"0.27.2\", \"@esbuild/darwin-arm64\": \"0.27.2\", \"@esbuild/darwin-x64\": \"0.27.2\", \"@esbuild/freebsd-arm64\": \"0.27.2\", \"@esbuild/freebsd-x64\": \"0.27.2\", \"@esbuild/linux-arm\": \"0.27.2\", \"@esbuild/linux-arm64\": \"0.27.2\", \"@esbuild/linux-ia32\": \"0.27.2\", \"@esbuild/linux-loong64\": \"0.27.2\", \"@esbuild/linux-mips64el\": \"0.27.2\", \"@esbuild/linux-ppc64\": \"0.27.2\", \"@esbuild/linux-riscv64\": \"0.27.2\", \"@esbuild/linux-s390x\": \"0.27.2\", \"@esbuild/linux-x64\": \"0.27.2\", \"@esbuild/netbsd-arm64\": \"0.27.2\", \"@esbuild/netbsd-x64\": \"0.27.2\", \"@esbuild/openbsd-arm64\": \"0.27.2\", \"@esbuild/openbsd-x64\": \"0.27.2\", \"@esbuild/openharmony-arm64\": \"0.27.2\", \"@esbuild/sunos-x64\": \"0.27.2\", \"@esbuild/win32-arm64\": \"0.27.2\", \"@esbuild/win32-ia32\": \"0.27.2\", \"@esbuild/win32-x64\": \"0.27.2\" }, \"bin\": { \"esbuild\": \"bin/esbuild\" } }, \"sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==\"],\n\n \"escape-string-regexp\": [\"escape-string-regexp@4.0.0\", \"\", {}, \"sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==\"],\n\n \"eslint\": [\"eslint@9.39.2\", \"\", { \"dependencies\": { \"@eslint-community/eslint-utils\": \"^4.8.0\", \"@eslint-community/regexpp\": \"^4.12.1\", \"@eslint/config-array\": \"^0.21.1\", \"@eslint/config-helpers\": \"^0.4.2\", \"@eslint/core\": \"^0.17.0\", \"@eslint/eslintrc\": \"^3.3.1\", \"@eslint/js\": \"9.39.2\", \"@eslint/plugin-kit\": \"^0.4.1\", \"@humanfs/node\": \"^0.16.6\", \"@humanwhocodes/module-importer\": \"^1.0.1\", \"@humanwhocodes/retry\": \"^0.4.2\", \"@types/estree\": \"^1.0.6\", \"ajv\": \"^6.12.4\", \"chalk\": \"^4.0.0\", \"cross-spawn\": \"^7.0.6\", \"debug\": \"^4.3.2\", \"escape-string-regexp\": \"^4.0.0\", \"eslint-scope\": \"^8.4.0\", \"eslint-visitor-keys\": \"^4.2.1\", \"espree\": \"^10.4.0\", \"esquery\": \"^1.5.0\", \"esutils\": \"^2.0.2\", \"fast-deep-equal\": \"^3.1.3\", \"file-entry-cache\": \"^8.0.0\", \"find-up\": \"^5.0.0\", \"glob-parent\": \"^6.0.2\", \"ignore\": \"^5.2.0\", \"imurmurhash\": \"^0.1.4\", \"is-glob\": \"^4.0.0\", \"json-stable-stringify-without-jsonify\": \"^1.0.1\", \"lodash.merge\": \"^4.6.2\", \"minimatch\": \"^3.1.2\", \"natural-compare\": \"^1.4.0\", \"optionator\": \"^0.9.3\" }, \"peerDependencies\": { \"jiti\": \"*\" }, \"optionalPeers\": [\"jiti\"], \"bin\": { \"eslint\": \"bin/eslint.js\" } }, \"sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==\"],\n\n \"eslint-scope\": [\"eslint-scope@8.4.0\", \"\", { \"dependencies\": { \"esrecurse\": \"^4.3.0\", \"estraverse\": \"^5.2.0\" } }, \"sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==\"],\n\n \"eslint-visitor-keys\": [\"eslint-visitor-keys@4.2.1\", \"\", {}, \"sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==\"],\n\n \"espree\": [\"espree@10.4.0\", \"\", { \"dependencies\": { \"acorn\": \"^8.15.0\", \"acorn-jsx\": \"^5.3.2\", \"eslint-visitor-keys\": \"^4.2.1\" } }, \"sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==\"],\n\n \"esquery\": [\"esquery@1.6.0\", \"\", { \"dependencies\": { \"estraverse\": \"^5.1.0\" } }, \"sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==\"],\n\n \"esrecurse\": [\"esrecurse@4.3.0\", \"\", { \"dependencies\": { \"estraverse\": \"^5.2.0\" } }, \"sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==\"],\n\n \"estraverse\": [\"estraverse@5.3.0\", \"\", {}, \"sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==\"],\n\n \"esutils\": [\"esutils@2.0.3\", \"\", {}, \"sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==\"],\n\n \"fast-deep-equal\": [\"fast-deep-equal@3.1.3\", \"\", {}, \"sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==\"],\n\n \"fast-json-stable-stringify\": [\"fast-json-stable-stringify@2.1.0\", \"\", {}, \"sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==\"],\n\n \"fast-levenshtein\": [\"fast-levenshtein@2.0.6\", \"\", {}, \"sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==\"],\n\n \"fdir\": [\"fdir@6.5.0\", \"\", { \"peerDependencies\": { \"picomatch\": \"^3 || ^4\" }, \"optionalPeers\": [\"picomatch\"] }, \"sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==\"],\n\n \"file-entry-cache\": [\"file-entry-cache@8.0.0\", \"\", { \"dependencies\": { \"flat-cache\": \"^4.0.0\" } }, \"sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==\"],\n\n \"fill-range\": [\"fill-range@7.1.1\", \"\", { \"dependencies\": { \"to-regex-range\": \"^5.0.1\" } }, \"sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==\"],\n\n \"find-up\": [\"find-up@5.0.0\", \"\", { \"dependencies\": { \"locate-path\": \"^6.0.0\", \"path-exists\": \"^4.0.0\" } }, \"sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==\"],\n\n \"flat-cache\": [\"flat-cache@4.0.1\", \"\", { \"dependencies\": { \"flatted\": \"^3.2.9\", \"keyv\": \"^4.5.4\" } }, \"sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==\"],\n\n \"flatted\": [\"flatted@3.3.3\", \"\", {}, \"sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==\"],\n\n \"fsevents\": [\"fsevents@2.3.3\", \"\", { \"os\": \"darwin\" }, \"sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==\"],\n\n \"get-caller-file\": [\"get-caller-file@2.0.5\", \"\", {}, \"sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==\"],\n\n \"glob-parent\": [\"glob-parent@6.0.2\", \"\", { \"dependencies\": { \"is-glob\": \"^4.0.3\" } }, \"sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==\"],\n\n \"globals\": [\"globals@14.0.0\", \"\", {}, \"sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==\"],\n\n \"has-flag\": [\"has-flag@4.0.0\", \"\", {}, \"sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==\"],\n\n \"ignore\": [\"ignore@5.3.2\", \"\", {}, \"sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==\"],\n\n \"immediate\": [\"immediate@3.0.6\", \"\", {}, \"sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==\"],\n\n \"import-fresh\": [\"import-fresh@3.3.1\", \"\", { \"dependencies\": { \"parent-module\": \"^1.0.0\", \"resolve-from\": \"^4.0.0\" } }, \"sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==\"],\n\n \"imurmurhash\": [\"imurmurhash@0.1.4\", \"\", {}, \"sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==\"],\n\n \"inherits\": [\"inherits@2.0.4\", \"\", {}, \"sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==\"],\n\n \"is-binary-path\": [\"is-binary-path@2.1.0\", \"\", { \"dependencies\": { \"binary-extensions\": \"^2.0.0\" } }, \"sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==\"],\n\n \"is-extglob\": [\"is-extglob@2.1.1\", \"\", {}, \"sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==\"],\n\n \"is-fullwidth-code-point\": [\"is-fullwidth-code-point@2.0.0\", \"\", {}, \"sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==\"],\n\n \"is-glob\": [\"is-glob@4.0.3\", \"\", { \"dependencies\": { \"is-extglob\": \"^2.1.1\" } }, \"sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==\"],\n\n \"is-number\": [\"is-number@7.0.0\", \"\", {}, \"sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==\"],\n\n \"isarray\": [\"isarray@1.0.0\", \"\", {}, \"sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==\"],\n\n \"isexe\": [\"isexe@2.0.0\", \"\", {}, \"sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==\"],\n\n \"jiti\": [\"jiti@2.6.1\", \"\", { \"bin\": { \"jiti\": \"lib/jiti-cli.mjs\" } }, \"sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==\"],\n\n \"js-yaml\": [\"js-yaml@4.1.1\", \"\", { \"dependencies\": { \"argparse\": \"^2.0.1\" }, \"bin\": { \"js-yaml\": \"bin/js-yaml.js\" } }, \"sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==\"],\n\n \"json-buffer\": [\"json-buffer@3.0.1\", \"\", {}, \"sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==\"],\n\n \"json-schema-traverse\": [\"json-schema-traverse@0.4.1\", \"\", {}, \"sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==\"],\n\n \"json-stable-stringify-without-jsonify\": [\"json-stable-stringify-without-jsonify@1.0.1\", \"\", {}, \"sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==\"],\n\n \"jszip\": [\"jszip@3.10.1\", \"\", { \"dependencies\": { \"lie\": \"~3.3.0\", \"pako\": \"~1.0.2\", \"readable-stream\": \"~2.3.6\", \"setimmediate\": \"^1.0.5\" } }, \"sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==\"],\n\n \"keyv\": [\"keyv@4.5.4\", \"\", { \"dependencies\": { \"json-buffer\": \"3.0.1\" } }, \"sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==\"],\n\n \"levn\": [\"levn@0.4.1\", \"\", { \"dependencies\": { \"prelude-ls\": \"^1.2.1\", \"type-check\": \"~0.4.0\" } }, \"sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==\"],\n\n \"lie\": [\"lie@3.3.0\", \"\", { \"dependencies\": { \"immediate\": \"~3.0.5\" } }, \"sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==\"],\n\n \"locate-path\": [\"locate-path@6.0.0\", \"\", { \"dependencies\": { \"p-locate\": \"^5.0.0\" } }, \"sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==\"],\n\n \"lodash.debounce\": [\"lodash.debounce@4.0.8\", \"\", {}, \"sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==\"],\n\n \"lodash.merge\": [\"lodash.merge@4.6.2\", \"\", {}, \"sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==\"],\n\n \"lodash.throttle\": [\"lodash.throttle@4.1.1\", \"\", {}, \"sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==\"],\n\n \"minimatch\": [\"minimatch@3.1.2\", \"\", { \"dependencies\": { \"brace-expansion\": \"^1.1.7\" } }, \"sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==\"],\n\n \"ms\": [\"ms@2.1.3\", \"\", {}, \"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==\"],\n\n \"natural-compare\": [\"natural-compare@1.4.0\", \"\", {}, \"sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==\"],\n\n \"normalize-path\": [\"normalize-path@3.0.0\", \"\", {}, \"sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==\"],\n\n \"optionator\": [\"optionator@0.9.4\", \"\", { \"dependencies\": { \"deep-is\": \"^0.1.3\", \"fast-levenshtein\": \"^2.0.6\", \"levn\": \"^0.4.1\", \"prelude-ls\": \"^1.2.1\", \"type-check\": \"^0.4.0\", \"word-wrap\": \"^1.2.5\" } }, \"sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==\"],\n\n \"p-limit\": [\"p-limit@3.1.0\", \"\", { \"dependencies\": { \"yocto-queue\": \"^0.1.0\" } }, \"sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==\"],\n\n \"p-locate\": [\"p-locate@5.0.0\", \"\", { \"dependencies\": { \"p-limit\": \"^3.0.2\" } }, \"sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==\"],\n\n \"p-try\": [\"p-try@2.2.0\", \"\", {}, \"sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==\"],\n\n \"pako\": [\"pako@1.0.11\", \"\", {}, \"sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==\"],\n\n \"parent-module\": [\"parent-module@1.0.1\", \"\", { \"dependencies\": { \"callsites\": \"^3.0.0\" } }, \"sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==\"],\n\n \"path-exists\": [\"path-exists@4.0.0\", \"\", {}, \"sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==\"],\n\n \"path-key\": [\"path-key@3.1.1\", \"\", {}, \"sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==\"],\n\n \"picomatch\": [\"picomatch@2.3.1\", \"\", {}, \"sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==\"],\n\n \"prelude-ls\": [\"prelude-ls@1.2.1\", \"\", {}, \"sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==\"],\n\n \"process-nextick-args\": [\"process-nextick-args@2.0.1\", \"\", {}, \"sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==\"],\n\n \"punycode\": [\"punycode@2.3.1\", \"\", {}, \"sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==\"],\n\n \"readable-stream\": [\"readable-stream@2.3.8\", \"\", { \"dependencies\": { \"core-util-is\": \"~1.0.0\", \"inherits\": \"~2.0.3\", \"isarray\": \"~1.0.0\", \"process-nextick-args\": \"~2.0.0\", \"safe-buffer\": \"~5.1.1\", \"string_decoder\": \"~1.1.1\", \"util-deprecate\": \"~1.0.1\" } }, \"sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==\"],\n\n \"readdirp\": [\"readdirp@3.6.0\", \"\", { \"dependencies\": { \"picomatch\": \"^2.2.1\" } }, \"sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==\"],\n\n \"require-directory\": [\"require-directory@2.1.1\", \"\", {}, \"sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==\"],\n\n \"require-main-filename\": [\"require-main-filename@2.0.0\", \"\", {}, \"sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==\"],\n\n \"resolve-from\": [\"resolve-from@4.0.0\", \"\", {}, \"sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==\"],\n\n \"safe-buffer\": [\"safe-buffer@5.1.2\", \"\", {}, \"sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==\"],\n\n \"semver\": [\"semver@7.7.3\", \"\", { \"bin\": { \"semver\": \"bin/semver.js\" } }, \"sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==\"],\n\n \"set-blocking\": [\"set-blocking@2.0.0\", \"\", {}, \"sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==\"],\n\n \"setimmediate\": [\"setimmediate@1.0.5\", \"\", {}, \"sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==\"],\n\n \"shebang-command\": [\"shebang-command@2.0.0\", \"\", { \"dependencies\": { \"shebang-regex\": \"^3.0.0\" } }, \"sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==\"],\n\n \"shebang-regex\": [\"shebang-regex@3.0.0\", \"\", {}, \"sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==\"],\n\n \"string-width\": [\"string-width@3.1.0\", \"\", { \"dependencies\": { \"emoji-regex\": \"^7.0.1\", \"is-fullwidth-code-point\": \"^2.0.0\", \"strip-ansi\": \"^5.1.0\" } }, \"sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==\"],\n\n \"string_decoder\": [\"string_decoder@1.1.1\", \"\", { \"dependencies\": { \"safe-buffer\": \"~5.1.0\" } }, \"sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==\"],\n\n \"strip-ansi\": [\"strip-ansi@5.2.0\", \"\", { \"dependencies\": { \"ansi-regex\": \"^4.1.0\" } }, \"sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==\"],\n\n \"strip-json-comments\": [\"strip-json-comments@3.1.1\", \"\", {}, \"sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==\"],\n\n \"supports-color\": [\"supports-color@7.2.0\", \"\", { \"dependencies\": { \"has-flag\": \"^4.0.0\" } }, \"sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==\"],\n\n \"tinyglobby\": [\"tinyglobby@0.2.15\", \"\", { \"dependencies\": { \"fdir\": \"^6.5.0\", \"picomatch\": \"^4.0.3\" } }, \"sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==\"],\n\n \"to-regex-range\": [\"to-regex-range@5.0.1\", \"\", { \"dependencies\": { \"is-number\": \"^7.0.0\" } }, \"sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==\"],\n\n \"ts-api-utils\": [\"ts-api-utils@2.3.0\", \"\", { \"peerDependencies\": { \"typescript\": \">=4.8.4\" } }, \"sha512-6eg3Y9SF7SsAvGzRHQvvc1skDAhwI4YQ32ui1scxD1Ccr0G5qIIbUBT3pFTKX8kmWIQClHobtUdNuaBgwdfdWg==\"],\n\n \"type-check\": [\"type-check@0.4.0\", \"\", { \"dependencies\": { \"prelude-ls\": \"^1.2.1\" } }, \"sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==\"],\n\n \"typescript\": [\"typescript@5.9.3\", \"\", { \"bin\": { \"tsc\": \"bin/tsc\", \"tsserver\": \"bin/tsserver\" } }, \"sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==\"],\n\n \"typescript-eslint\": [\"typescript-eslint@8.50.1\", \"\", { \"dependencies\": { \"@typescript-eslint/eslint-plugin\": \"8.50.1\", \"@typescript-eslint/parser\": \"8.50.1\", \"@typescript-eslint/typescript-estree\": \"8.50.1\", \"@typescript-eslint/utils\": \"8.50.1\" }, \"peerDependencies\": { \"eslint\": \"^8.57.0 || ^9.0.0\", \"typescript\": \">=4.8.4 <6.0.0\" } }, \"sha512-ytTHO+SoYSbhAH9CrYnMhiLx8To6PSSvqnvXyPUgPETCvB6eBKmTI9w6XMPS3HsBRGkwTVBX+urA8dYQx6bHfQ==\"],\n\n \"undici-types\": [\"undici-types@7.16.0\", \"\", {}, \"sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==\"],\n\n \"uri-js\": [\"uri-js@4.4.1\", \"\", { \"dependencies\": { \"punycode\": \"^2.1.0\" } }, \"sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==\"],\n\n \"util-deprecate\": [\"util-deprecate@1.0.2\", \"\", {}, \"sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==\"],\n\n \"which\": [\"which@2.0.2\", \"\", { \"dependencies\": { \"isexe\": \"^2.0.0\" }, \"bin\": { \"node-which\": \"./bin/node-which\" } }, \"sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==\"],\n\n \"which-module\": [\"which-module@2.0.1\", \"\", {}, \"sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==\"],\n\n \"word-wrap\": [\"word-wrap@1.2.5\", \"\", {}, \"sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==\"],\n\n \"wrap-ansi\": [\"wrap-ansi@5.1.0\", \"\", { \"dependencies\": { \"ansi-styles\": \"^3.2.0\", \"string-width\": \"^3.0.0\", \"strip-ansi\": \"^5.0.0\" } }, \"sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==\"],\n\n \"y18n\": [\"y18n@4.0.3\", \"\", {}, \"sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==\"],\n\n \"yargs\": [\"yargs@13.3.2\", \"\", { \"dependencies\": { \"cliui\": \"^5.0.0\", \"find-up\": \"^3.0.0\", \"get-caller-file\": \"^2.0.1\", \"require-directory\": \"^2.1.1\", \"require-main-filename\": \"^2.0.0\", \"set-blocking\": \"^2.0.0\", \"string-width\": \"^3.0.0\", \"which-module\": \"^2.0.0\", \"y18n\": \"^4.0.0\", \"yargs-parser\": \"^13.1.2\" } }, \"sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==\"],\n\n \"yargs-parser\": [\"yargs-parser@13.1.2\", \"\", { \"dependencies\": { \"camelcase\": \"^5.0.0\", \"decamelize\": \"^1.2.0\" } }, \"sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==\"],\n\n \"yocto-queue\": [\"yocto-queue@0.1.0\", \"\", {}, \"sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==\"],\n\n \"@eslint-community/eslint-utils/eslint-visitor-keys\": [\"eslint-visitor-keys@3.4.3\", \"\", {}, \"sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==\"],\n\n \"@typescript-eslint/eslint-plugin/ignore\": [\"ignore@7.0.5\", \"\", {}, \"sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==\"],\n\n \"@typescript-eslint/typescript-estree/minimatch\": [\"minimatch@9.0.5\", \"\", { \"dependencies\": { \"brace-expansion\": \"^2.0.1\" } }, \"sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==\"],\n\n \"chokidar/glob-parent\": [\"glob-parent@5.1.2\", \"\", { \"dependencies\": { \"is-glob\": \"^4.0.1\" } }, \"sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==\"],\n\n \"eslint/chalk\": [\"chalk@4.1.2\", \"\", { \"dependencies\": { \"ansi-styles\": \"^4.1.0\", \"supports-color\": \"^7.1.0\" } }, \"sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==\"],\n\n \"tinyglobby/picomatch\": [\"picomatch@4.0.3\", \"\", {}, \"sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==\"],\n\n \"wrap-ansi/ansi-styles\": [\"ansi-styles@3.2.1\", \"\", { \"dependencies\": { \"color-convert\": \"^1.9.0\" } }, \"sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==\"],\n\n \"yargs/find-up\": [\"find-up@3.0.0\", \"\", { \"dependencies\": { \"locate-path\": \"^3.0.0\" } }, \"sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==\"],\n\n \"@typescript-eslint/typescript-estree/minimatch/brace-expansion\": [\"brace-expansion@2.0.2\", \"\", { \"dependencies\": { \"balanced-match\": \"^1.0.0\" } }, \"sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==\"],\n\n \"wrap-ansi/ansi-styles/color-convert\": [\"color-convert@1.9.3\", \"\", { \"dependencies\": { \"color-name\": \"1.1.3\" } }, \"sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==\"],\n\n \"yargs/find-up/locate-path\": [\"locate-path@3.0.0\", \"\", { \"dependencies\": { \"p-locate\": \"^3.0.0\", \"path-exists\": \"^3.0.0\" } }, \"sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==\"],\n\n \"wrap-ansi/ansi-styles/color-convert/color-name\": [\"color-name@1.1.3\", \"\", {}, \"sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==\"],\n\n \"yargs/find-up/locate-path/p-locate\": [\"p-locate@3.0.0\", \"\", { \"dependencies\": { \"p-limit\": \"^2.0.0\" } }, \"sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==\"],\n\n \"yargs/find-up/locate-path/path-exists\": [\"path-exists@3.0.0\", \"\", {}, \"sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==\"],\n\n \"yargs/find-up/locate-path/p-locate/p-limit\": [\"p-limit@2.3.0\", \"\", { \"dependencies\": { \"p-try\": \"^2.0.0\" } }, \"sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==\"],\n }\n}\n",
|
|
6
|
-
"/data/dist/BP/manifest.json": "{\n \"format_version\": 2,\n \"header\": {\n \"name\": \"test@1.0.0 BP\",\n \"description\": \"test\",\n \"uuid\": \"4032789a-7931-4e6b-aca9-13d51ce8751c\",\n \"version\": [\n 1,\n 0,\n 0\n ],\n \"min_engine_version\": [\n 1,\n 21,\n 60\n ]\n },\n \"modules\": [\n {\n \"description\": \"Behavior Pack\",\n \"language\": \"javascript\",\n \"type\": \"script\",\n \"uuid\": \"83254542-5d67-4bcf-8866-3a06f771020c\",\n \"version\": [\n 1,\n 0,\n 0\n ],\n \"entry\": \"scripts/index.js\"\n }\n ],\n \"dependencies\": [\n {\n \"module_name\": \"@minecraft/server\",\n \"version\": \"{{minecraftServerVersion}}\"\n },\n {\n \"module_name\": \"@minecraft/server-ui\",\n \"version\": \"{{minecraftServerUIVersion}}\"\n },\n {\n \"uuid\": \"cdbe0641-cba2-4d88-8359-d45c4223cdb7\",\n \"version\": [\n 1,\n 0,\n 0\n ]\n }\n ],\n \"metadata\": {\n \"product_type\": \"addon\",\n \"authors\": [\n \"KisuX3\"\n ]\n }\n}",
|
|
7
|
-
"/data/dist/BP/pack_icon.png": "�PNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000�\u0000\u0000\u0000�\u0004\u0003\u0000\u0000\u0000y�z\u001e\u0000\u0000\u0001qiCCPicc\u0000\u0000xڕ�;HBQ\u001c��Z���PPD�\u001d,\br��F�@\u0002\u00031\u0003����\u0017x�r���\u0018�\n\r=�����Z\u001bZ� �\u0001���T�\u0012r�\u0007)%0�?}���?��;�dU�j�n\u0014�H0 ��+R�3-\f�A\u000fc�j�g��\u0010M��\u0016\u0017��O����[KX*�$���͂�u`z��\u0017�\u0005�մ�9>\u0005�M炎�E_��E8%�\u001ba3\u001a�s�\u000fH�\u0006+\rVӦ�x\n�j��9�լ\t���lQ�V.�+a,/�>0L�\u0005\u0016\t#�P$C�\u0002>2\u0018HXD\b\u0012h2?��\u000fSD!K\u0006\u0015�yr�Ȉy�\u001f���JNN\u0000��\n@�m��@�6T˶�yh��#�<
Q��U`�\u001d<�z�{\u0000��pvY�);p�\u0005�\u000fyٔ\u0001�\u0000�d\u0012^O�;\u000e}�й*r�Y��\u000e�%\b]��>���w�ɻ�\u001bs�k�w~_~}r�s��8\u0000\u0000\u0000\u001bPLTE��������W��Eۢ\u0013�d\u0011u(\u0002T$\tT\u0012\t��\u000e\u0000\u0000\u0000�IDATx��Ա\r� \fEQV�\nY!+��W`\u0005V`���\u0014\u0004ŗ���\n,��.D�yM\u0001\u0002\u0002�\u000b�\u0015 w\u0001\u0010��b�TWm\u0006\b�\u00164Sե��*ԣ�2\r\b�\f�u���wE�jQ\u0001\u0001���\u001ee\u0015\u00100-���<\u001b\n\u00100\u000f�T�y�3\u0001\u0001\u0001��2X\u0015 `.pU�\u001ci[��\u0019�P;�V(@���\u001b�j�v\u0016 `Z�j{7�-@@@\"r�\u0007~�T��cGt\u0000\u0000\u0000\u0000IEND�B`�",
|
|
8
|
-
"/data/dist/BP/scripts/AxethLib.js": "import{world as $}from\"@minecraft/server\";var m=class{constructor(){}getConfig(t){return new E(t)}clearAll(){let t=$.getDynamicPropertyIds();for(let e of t)e.startsWith(\"config.\")&&$.setDynamicProperty(e)}},E=class{name;world;prefix;maxChunkSize=32767;constructor(t){this.name=t,this.world=$,this.prefix=`config.${this.name}`}set(t){let e=JSON.stringify(t);if(this.clear(),e.length<=this.maxChunkSize){this.world.setDynamicProperty(this.prefix,e);return}let s=0;for(let i=0;i<e.length;i+=this.maxChunkSize){let n=e.slice(i,i+this.maxChunkSize);this.world.setDynamicProperty(`${this.prefix}.part${s}`,n),s++}}get(){let t=`${this.prefix}.part`,e=this.world.getDynamicPropertyIds().filter(i=>i.startsWith(t)).sort((i,n)=>{let r=Number(i.slice(t.length)),a=Number(n.slice(t.length));return r-a}),s=this.world.getDynamicProperty(this.prefix);if(e.length>0){let i=[];for(let n of e){let r=this.world.getDynamicProperty(n);r&&i.push(r)}s=i.join(\"\")}return s?JSON.parse(s):{}}delete(){this.clear()}has(t){return this.get()[t]!==void 0}clear(){let t=`${this.prefix}.part`,e=this.world.getDynamicPropertyIds().filter(s=>s===this.prefix||s.startsWith(t));for(let s of e)this.world.setDynamicProperty(s)}};import{system as O}from\"@minecraft/server\";var b=class{autoListeners=new Map;customListeners=new Map;onSubscribe;onUnsubscribe;setSubscriptionHandlers(t,e){this.onSubscribe=t,this.onUnsubscribe=e}hasListeners(t){let s=this.getListenerMap(t).get(t);return s!==void 0&&s.length>0}on(...t){typeof t[0]==\"string\"?this.addListener(t[0],t[1]):this.addListener(t[1],t[2],t[0])}addListener(t,e,s){let i=this.getListenerMap(t),n=this.hasListeners(t),r=i.get(t)??[];r.push({owner:s,cb:e}),i.set(t,r),!n&&this.onSubscribe&&!t.startsWith(\"Custom\")&&this.onSubscribe(t)}off(...t){typeof t[0]==\"string\"?this.removeListener(t[0],void 0,t[1]):this.removeListener(t[1],t[0],t[2])}removeListener(t,e,s){let i=this.getListenerMap(t),n=i.get(t);if(!n)return;let r=[];n.forEach(a=>{let u=e&&a.owner===e,h=s&&a.cb===s;u||h||r.push(a)}),i.set(t,r),r.length===0&&this.onUnsubscribe&&!t.startsWith(\"Custom\")&&O.run(()=>this.onUnsubscribe(t))}emit(t,e){let i=this.getListenerMap(t).get(t);if(i)for(let n of i)this.executeListener(n,e)}executeListener(t,e){try{t.cb(e)}catch{}}suspendPlugin(t){let e=new Map,s=i=>{for(let[n,r]of i.entries()){let a=r.filter(u=>u.owner===t);a.length!==0&&(e.set(n,a.map(u=>u.cb)),this.removeListener(n,t))}};return s(this.autoListeners),s(this.customListeners),e}resumePlugin(t,e){for(let[s,i]of e.entries())for(let n of i)this.addListener(s,n,t)}getListenerMap(t){return t.startsWith(\"Custom\")?this.customListeners:this.autoListeners}};var c=class{prefix;constructor(t){this.prefix=t}log(t){this.msg(t,\"LOG\")}error(t){this.msg(t,\"ERROR\")}warn(t){this.msg(t,\"WARN\")}info(t){this.msg(t,\"INFO\")}debug(t){this.msg(t,\"DEBUG\")}msg(t,e){console.warn(`[${this.prefix}][${e}] ${t}`)}};import{system as V,world as j}from\"@minecraft/server\";import{world as _}from\"@minecraft/server\";var p=class{constructor(){}eachPlayer(t){let e=this.getAllPlayers();for(let s of e)t(s)}findPlayerByName(t){let e=this.getAllPlayers();for(let s of e)if(s.name===t)return s;return null}countPlayers(){return this.getAllPlayers().length}getAllPlayers(){return _.getPlayers()}isPlayerGameMode(t,e){return t.getGameMode()===e}};var F=new Map,M=class{plugin;constructor(t){this.plugin=t}registerItem(t){let e=new H(t,this.plugin);return F.set(t,e),e}getItemActions(t){return F.get(t)}},H=class{itemId;plugin;constructor(t,e){this.itemId=t,this.plugin=e}onUse(t){this.plugin.events.on(\"AfterItemUse\",e=>{e.itemStack.typeId===this.itemId&&t(e.source,e.itemStack)})}onHitEntity(t){this.plugin.events.on(\"AfterEntityHurt\",e=>{let s=e.damageSource.damagingEntity,i=s?.getComponent(\"inventory\")?.container.getItem(s.selectedSlotIndex);i&&t(s,i,e.hurtEntity)})}};var y=class{isLoaded=!1;events;name=\"PluginBase\";version=\"1.0.0\";icon=\"\";world;system;systemBase;settingMenu;playerManagers;itemActionManager;isRuntime=!1;constructor(t,e){this.events=new w(this,t),this.world=j,this.system=V,this.systemBase=e,this.settingMenu=new d(this,this.getPluginSettings()),this.playerManagers=new p,this.itemActionManager=new M(this),this.system.run(()=>{this.isEnabled()&&(this.systemBase.pluginManagers.applyPluginState(this),this.load())})}get config(){return this.systemBase.configManager.getConfig(this.name)}get logger(){return new c(this.name.toUpperCase())}load(){this.initializeConfig(),this.onLoad(),this.isLoaded=!0}getName(){return this.name}onEnable(t){}onLoad(){}onDisable(t){}isEnabled(){let e=this.config.get()?.Enabled;return e&&\"value\"in e?!!e.value:e&&\"default\"in e?!!e.default:!0}registerSettings(t){this.settingMenu=new t(this,this.getPluginSettings())}getPluginSettings(){return{Enabled:{description:\"Toggle this plugin on or off.\",type:\"boolean\",default:!0},...this.getSettings()}}getSettings(){return{}}getAdvancedSettings(t,e){return null}initializeConfig(){let t=this.config.get();t||(this.config.set({}),t=this.config.get());let e=this.getPluginSettings(),s=Object.keys(t).filter(i=>!(i in e));for(let i of s)delete t[i];for(let[i,n]of Object.entries(e))(!(i in t)||t[i]?.type!==n.type||t[i]?.description!==n.description||t[i]?.default!==n.default)&&(t[i]={...n,value:t[i]?.value??n.default});this.config.set(t)}};import{system as U}from\"@minecraft/server\";var S=class{plugins=new Map;pausedListeners=new Map;eventHandlers;SystemBase;constructor(t,e){this.eventHandlers=t,this.SystemBase=e}registerPlugin(...t){for(let e of t){let s=new e(this.eventHandlers,this.SystemBase);this.plugins.set(s.name,s),U.run(()=>this.applyPluginState(s))}}getPlugin(t){return this.plugins.get(t)||null}getPlugins(){return Array.from(this.plugins.values())}isEnabled(t){let e=this.plugins.get(t);return e?e.isEnabled():!1}applyPluginState(t){if(t.isEnabled()){this.enablePlugin(t);return}this.disablePlugin(t)}setPluginEnabled(t,e){let s=this.plugins.get(t);if(!s)return;let i=s.config.get()??{},n=s.getPluginSettings();n.Enabled&&(i.Enabled={...n.Enabled,value:e},s.config.set(i),this.applyPluginState(s))}disablePlugin(t){if(this.pausedListeners.has(t.name))return;let e=this.eventHandlers.suspendPlugin(t);this.pausedListeners.set(t.name,e)}enablePlugin(t){let e=this.pausedListeners.get(t.name);if(e){if(console.warn(`Enabling plugin: ${t.name}`),!t.isLoaded){console.warn(`Loading plugin fresh: ${t.name} (discarding paused listeners to avoid duplicates)`),t.load(),this.pausedListeners.delete(t.name);return}this.eventHandlers.resumePlugin(t,e),this.pausedListeners.delete(t.name)}}};import{system as l,world as g}from\"@minecraft/server\";import{CommandPermissionLevel as W,CustomCommandParamType as R,CustomCommandStatus as L}from\"@minecraft/server\";import{Player as K}from\"@minecraft/server\";var k=class extends y{isRuntime=!0;onEnable(t){t.customCommandRegistry.registerEnum(\"kisu:plugin_enums\",[\"list\",\"settings\"]),t.customCommandRegistry.registerCommand({name:\"kisu:plugins\",description:\"Manage plugins and their settings.\",permissionLevel:W.Admin,cheatsRequired:!1,mandatoryParameters:[{name:\"kisu:plugin_enums\",type:R.Enum}]},(e,s)=>{let i=e.sourceEntity;return i instanceof K?s===\"list\"?{message:` \\xA7a[Plugins List]\\xA7r\n${this.systemBase.pluginManagers.getPlugins().map(r=>` \\xA7e- ${r.getName()} \\xA77(v${r.version})`).join(`\n`)}`,status:L.Success}:s===\"settings\"?(this.system.run(()=>{this.systemBase.settingMenuBuilders.settingMenu(i,this.systemBase.pluginManagers)}),{status:L.Success}):{message:\"404\",status:L.Failure}:{message:\"Source must be a player\",status:L.Failure}})}onLoad(){}};var I=class{world;system;configManager;events;pluginManagers;logger;settingMenuBuilders;playerManagers;options={settingItemType:\"minecraft:clock\"};eventSubscriptions=new Map;startTime=Date.now();constructor(t){this.world=g,this.system=l,this.events=new b,this.logger=new c(\"SYSTEM\"),this.configManager=new m,this.pluginManagers=new S(this.events,this),this.settingMenuBuilders=new x,this.playerManagers=new p,t&&(this.options={...this.options,...t}),this.setupDynamicEventMapping(),this.initializeEvents()}initializeEvents(){this.events.on(\"AfterItemUse\",t=>{t.itemStack.typeId===this.options.settingItemType&&this.settingMenuBuilders.settingMenu(t.source,this.pluginManagers)}),this.events.on(\"BeforeStartup\",t=>this.onStartup(t)),this.events.on(\"BeforeShutdown\",t=>this.onShutdown(t)),l.runInterval(()=>{this.events.emit(\"AfterTick\",{currentTick:l.currentTick})})}setupDynamicEventMapping(){this.events.setSubscriptionHandlers(t=>this.subscribeToEvent(t),t=>{this.unsubscribeFromEvent(t)})}subscribeToEvent(t){if(this.eventSubscriptions.has(t))return;let e=t.startsWith(\"After\"),s=t.replace(/^(After|Before)/,\"\"),i=s.charAt(0).toLowerCase()+s.slice(1);if(e&&i in g.afterEvents){let n=i,r=a=>{this.events.emit(t,a)};g.afterEvents[n].subscribe(r),this.eventSubscriptions.set(t,{signal:g.afterEvents[n],handler:r})}else if(!e&&i in g.beforeEvents){let n=i,r=a=>{this.events.emit(t,a)};g.beforeEvents[n].subscribe(r),this.eventSubscriptions.set(t,{signal:g.beforeEvents[n],handler:r})}else if(e&&i in l.afterEvents){let n=i,r=a=>{this.events.emit(t,a)};l.afterEvents[n].subscribe(r),this.eventSubscriptions.set(t,{signal:l.afterEvents[n],handler:r})}else if(!e&&i in l.beforeEvents){let n=i,r=a=>{this.events.emit(t,a)};l.beforeEvents[n].subscribe(r),this.eventSubscriptions.set(t,{signal:l.beforeEvents[n],handler:r})}}unsubscribeFromEvent(t){let e=this.eventSubscriptions.get(t);e&&(l.run(()=>e.signal.unsubscribe(e.handler)),this.eventSubscriptions.delete(t))}onLoad(t){}onStartup(t){try{this.onLoad(t)}catch(i){this.logger.error(`Error during onLoad: ${i}`)}this.pluginManagers.registerPlugin(k);let e=this.pluginManagers.getPlugins(),s=0;for(let i of e){try{i.onEnable(t)}catch(n){this.logger.error(`Error during onEnable of plugin ${i.name}: ${n}`)}s++}l.run(()=>{let n=Date.now()-this.startTime;this.playerManagers.eachPlayer(r=>{r.sendToast(\"\",`${\"Plugin Loaded\".mcColors().grey} (${s.toString().mcColors().green}/${e.length.toString().mcColors().red}) ${`in ${n}ms`.mcColors().grey}`,\"textures/items/compass_item\",\"textures/ui/greyBorder\")})})}onShutdown(t){let e=this.pluginManagers.getPlugins();for(let s of e)s.onDisable(t)}};var x=class{menus=new Map;registerMenu(t,e){this.menus.set(e.name,t)}settingMenu(t,e){let s=e.getPlugins(),i=new f(\"Settings Menu\",`\\xA7fHello, \\xA7e${t.name}\\xA7r\n\nThis is the configuration menu.\nYou can manage settings here.`);i.addDivider(),i.addLabel(`\\xA77Plugins (\\xA7c${s.length}\\xA77)\\xA7r`);for(let n of s)n.isRuntime||this.addPluginButton(i,n,t,e);i.show(t)}addPluginButton(t,e,s,i){let n=new d(e,e.getPluginSettings()),r=e.isEnabled()?\"\\xA72Enabled\":\"\\xA7cDisabled\";t.addButton(`${n.buttons.name}\n\\xA78[${r}\\xA78]`,n.buttons.icon,()=>{this.showPluginSettingsPage(e,s,i)})}showPluginSettingsPage(t,e,s){let i=new d(t,t.getPluginSettings()),n=t.getAdvancedSettings(e,t),r=()=>{i.getPage().show(e).then(h=>{h.canceled||(this.savePluginSettings(t,h.formValues,s),this.settingMenu(e,s))})},a=()=>{n()};if(n){let u=new f(\"Settings Menu\",\"Choose an option:\");u.addButton(\"Advanced Settings\",\"textures/ui/settings_glyph_color_2x\",()=>{a()}),u.addButton(\"Default Settings\",\"textures/ui/icon_setting\",()=>{r()}),u.show(e)}else r()}savePluginSettings(t,e,s){let n=t.config.get()??{},a=Object.keys(t.getPluginSettings()).filter(u=>t.getPluginSettings()[u]?.canUserModify!==!1);for(let u=2;u<e.length-1;u++){let h=e[u];if(h===void 0)continue;let C=a[u-2];if(!C)continue;let D=t.getPluginSettings()[C];D&&(n[C]={...D,value:this.convertSettingValue(D.type,h)})}t.config.set(n),s.applyPluginState(t)}convertSettingValue(t,e){switch(t){case\"number\":case\"array\":return Number(e);case\"boolean\":return!!e;default:return String(e)}}},d=class{plugin;settings;constructor(t,e){this.plugin=t,this.settings=e}get buttons(){return{name:this.plugin.name,description:`Settings for ${this.plugin.name.mcColors().blue} plugin`,icon:this.plugin.icon||\"textures/items/compass_item\"}}getPage(){let t=this.plugin.config.get()??{},e=new v(`${this.plugin.name} Settings`,\"Save changes.\");return e.addLabel(this.buttons.description.mcColors().grey),e.addDivider(),Object.keys(this.settings).length===0?(e.addLabel(\"\\xA7cNo settings available for this plugin.\\xA7r\"),e.addDivider(),e):(this.addSettingFields(e,t),e.addDivider(),e)}addSettingFields(t,e){for(let[s,i]of Object.entries(this.settings)){if(i.canUserModify===!1)continue;let n=e[s]?.value,r=i.default;switch(i.type){case\"boolean\":t.addToggle(s,n??r,i.description);break;case\"string\":t.addTextField(s,i.description,n??r,i.description);break;case\"number\":t.addSlider(s,1,i.maxValue??100,1,n??r,i.description);break;case\"array\":t.addDropdown(s,r.map(String),typeof n==\"number\"?n:0,i.description);break}}}};var B=class{str;constructor(t){this.str=t}get grey(){return`\\xA77${this.str}\\xA7r`}get pink(){return`\\xA7d${this.str}\\xA7r`}get blackGray(){return`\\xA78${this.str}\\xA7r`}get darkRed(){return`\\xA74${this.str}\\xA7r`}get darkGreen(){return`\\xA72${this.str}\\xA7r`}get darkBlue(){return`\\xA71${this.str}\\xA7r`}get darkYellow(){return`\\xA76${this.str}\\xA7r`}get red(){return`\\xA7c${this.str}\\xA7r`}get green(){return`\\xA7a${this.str}\\xA7r`}get blue(){return`\\xA7b${this.str}\\xA7r`}get yellow(){return`\\xA7e${this.str}\\xA7r`}get white(){return`\\xA7f${this.str}\\xA7r`}get black(){return`\\xA70${this.str}\\xA7r`}get bold(){return`\\xA7l${this.str}\\xA7r`}get italic(){return`\\xA7o${this.str}\\xA7r`}get underline(){return`\\xA7n${this.str}\\xA7r`}get strikethrough(){return`\\xA7m${this.str}\\xA7r`}get obfuscated(){return`\\xA7k${this.str}\\xA7r`}get reset(){return`\\xA7r${this.str}`}};var w=class{plugin;eventHandlers;constructor(t,e){this.plugin=t,this.eventHandlers=e}on(t,e){this.eventHandlers.on(this.plugin,t,e)}emit(t,e){typeof t==\"string\"&&t.startsWith(\"Custom\")?this.eventHandlers.emit(t,e):this.eventHandlers.emit(t,e)}};import{ActionFormData as z}from\"@minecraft/server-ui\";var f=class{title;body;elements=[];previousForm;constructor(t=\"\",e=\"\",s){this.title=t,this.body=e,s&&(this.previousForm=s)}back(t){this.previousForm&&this.previousForm(t)}setTitle(t){return this.title=t,this}setBody(t){return this.body=t,this}getTitle(){return this.title}getBody(){return this.body}addButtons(t){return this.elements.push(...t),this}addButton(t,e,s){return this.elements.push({label:t,icon:e,onClick:s}),this}addButtonObject(t){return this.elements.push(t),this}getButtons(){return this.elements.filter(this.isButton)}addDivider(){return this.elements.push({divider:!0}),this}getDividers(){return this.elements.filter(this.isDivider)}addHeader(t){return this.elements.push({text_header:t}),this}addHeaderObject(t){return this.elements.push(t),this}getHeader(){return this.elements.find(this.isHeader)}getHeaders(){return this.elements.filter(this.isHeader)}addLabel(t){return this.elements.push({text_label:t}),this}addLabelObject(t){return this.elements.push(t),this}getLabels(){return this.elements.filter(this.isLabel)}clearElements(){return this.elements=[],this}getElementCount(){return this.elements.length}hasButtons(){return this.getButtons().length>0}async show(t){let e=new z;e.title(this.title),this.body!==\"\"&&e.body(this.body);let s=0,i=[];this.elements.forEach(n=>{this.isDivider(n)?e.divider():this.isHeader(n)?e.header(n.text_header):this.isLabel(n)?e.label(n.text_label):this.isButton(n)&&(e.button(n.label,n.icon),i[s]=n.onClick||(()=>{}),s++)});try{let n=await e.show(t);if(!n.canceled&&n.selection!==void 0){let r=i[n.selection];r&&r()}return n}catch(n){throw console.error(\"Error showing form:\",n),n}}isButton(t){return\"label\"in t}isDivider(t){return\"divider\"in t&&t.divider===!0}isHeader(t){return\"text_header\"in t}isLabel(t){return\"text_label\"in t}};import{MessageFormData as N}from\"@minecraft/server-ui\";var A=class o{title;body;button1=null;button2=null;constructor(t=\"\",e=\"\"){this.title=t,this.body=e}setTitle(t){return this.title=t,this}setBody(t){return this.body=t,this}getTitle(){return this.title}getBody(){return this.body}setButton1(t,e){return this.button1={text:t,onClick:e},this}setButton1Object(t){return this.button1=t,this}setButton2(t,e){return this.button2={text:t,onClick:e},this}setButton2Object(t){return this.button2=t,this}getButton1(){return this.button1}getButton2(){return this.button2}hasButton1(){return this.button1!==null}hasButton2(){return this.button2!==null}hasButtons(){return this.button1!==null||this.button2!==null}clearButtons(){return this.button1=null,this.button2=null,this}clearButton1(){return this.button1=null,this}clearButton2(){return this.button2=null,this}async show(t){let e=new N;e.title(this.title),e.body(this.body),this.button1&&e.button1(this.button1.text),this.button2&&e.button2(this.button2.text);try{let s=await e.show(t);return!s.canceled&&s.selection!==void 0&&(s.selection===0&&this.button1&&this.button1.onClick?this.button1.onClick():s.selection===1&&this.button2&&this.button2.onClick&&this.button2.onClick()),s}catch(s){throw console.error(\"Error showing message form:\",s),s}}async showWithCallback(t,e){try{let s=await this.show(t);s.canceled?e(void 0,!0):e(s.selection,!1)}catch(s){console.error(\"Error in showWithCallback:\",s),e(void 0,!0)}}static createConfirmation(t,e,s,i){return new o(t,e).setButton1(\"Cancel\",i).setButton2(\"Confirm\",s)}static createYesNo(t,e,s,i){return new o(t,e).setButton1(\"No\",i).setButton2(\"Yes\",s)}static createOK(t,e,s){return new o(t,e).setButton1(\"OK\",s)}static createAlert(t,e,s){return new o(t,e).setButton1(\"Close\",s)}};import{ModalFormData as G}from\"@minecraft/server-ui\";var v=class{title;elements=[];submitButtonText;callback;constructor(t=\"\",e=\"Submit\"){this.title=t,this.submitButtonText=e}setTitle(t){return this.title=t,this}getTitle(){return this.title}setSubmitButton(t){return this.submitButtonText=t,this}getSubmitButtonText(){return this.submitButtonText}addTextField(t,e,s,i){return this.elements.push({label:t,placeholderText:e,defaultValue:s,tooltip:i}),this}addTextFieldObject(t){return this.elements.push(t),this}getTextFields(){return this.elements.filter(this.isTextField)}addToggle(t,e,s){return this.elements.push({label:t,defaultValue:e,tooltip:s}),this}addToggleObject(t){return this.elements.push(t),this}getToggles(){return this.elements.filter(this.isToggle)}addSlider(t,e,s,i,n,r){return this.elements.push({label:t,minimumValue:e,maximumValue:s,valueStep:i,defaultValue:n,tooltip:r}),this}addSliderObject(t){return this.elements.push(t),this}getSliders(){return this.elements.filter(this.isSlider)}addDropdown(t,e,s,i){return this.elements.push({label:t,options:e,defaultValueIndex:s,tooltip:i}),this}addDropdownObject(t){return this.elements.push(t),this}getDropdowns(){return this.elements.filter(this.isDropdown)}addDivider(){return this.elements.push({divider:!0}),this}getDividers(){return this.elements.filter(this.isDivider)}addHeader(t){return this.elements.push({text_header:t}),this}addHeaderObject(t){return this.elements.push(t),this}getHeader(){return this.elements.find(this.isHeader)}getHeaders(){return this.elements.filter(this.isHeader)}addLabel(t){return this.elements.push({text_label:t}),this}addLabelObject(t){return this.elements.push(t),this}getLabels(){return this.elements.filter(this.isLabel)}clearElements(){return this.elements=[],this}getElementCount(){return this.elements.length}hasInputElements(){return this.elements.some(t=>this.isTextField(t)||this.isToggle(t)||this.isSlider(t)||this.isDropdown(t))}getElements(){return this.elements}addCallback(t){return this.callback=t,this}async show(t){let e=new G;e.title(this.title),e.submitButton(this.submitButtonText),this.elements.forEach(s=>{this.isDivider(s)?e.divider():this.isHeader(s)?e.label(s.text_header):this.isLabel(s)?e.label(s.text_label):this.isTextField(s)?e.textField(s.label,s.placeholderText||\"\",{defaultValue:s.defaultValue||\"\",tooltip:s.tooltip}):this.isToggle(s)?e.toggle(s.label,{defaultValue:s.defaultValue||!1,tooltip:s.tooltip}):this.isSlider(s)?e.slider(s.label,s.minimumValue,s.maximumValue,{defaultValue:s.defaultValue||0,valueStep:s.valueStep,tooltip:s.tooltip}):this.isDropdown(s)&&e.dropdown(s.label,s.options,{defaultValueIndex:s.defaultValueIndex||0,tooltip:s.tooltip})});try{return await e.show(t)}catch(s){throw console.error(\"Error showing modal form:\",s),s}}async showWithCallback(t){try{let e=await this.show(t);e.canceled?this.callback?.([],!0):this.callback?.(e.formValues||[],!1)}catch(e){console.error(\"Error in showWithCallback:\",e),this.callback?.([],!0)}}isTextField(t){return\"label\"in t&&\"placeholderText\"in t}isToggle(t){return\"label\"in t&&\"defaultValue\"in t&&typeof t.defaultValue==\"boolean\"}isSlider(t){return\"minimumValue\"in t&&\"maximumValue\"in t&&\"valueStep\"in t}isDropdown(t){return\"options\"in t&&Array.isArray(t.options)}isDivider(t){return\"divider\"in t&&t.divider===!0}isHeader(t){return\"text_header\"in t}isLabel(t){return\"text_label\"in t}};String.prototype.mcColors=function(){return new B(this.toString())};import{Player as P}from\"@minecraft/server\";function T(o=\"\",t=100){return o.slice(0,t).padEnd(t,\"\t\")}P.prototype.sendToast=function(o=\"\",t=\"\",e=\"\",s=\"textures/ui/greyBorder\"){let i=\"\\xA7N\\xA7O\\xA7T\\xA7I\\xA7F\\xA7I\\xA7C\\xA7A\\xA7T\\xA7I\\xA7O\\xA7N\"+T(o,100)+T(\"\\xA77\"+t,600)+T(e,200)+T(s,200);this.sendMessage(i),this.playSound(\"note.harp\",{volume:.6,pitch:1.5})};P.prototype.sendTopbar=function(o){this.onScreenDisplay.setTitle(\"\\xA7m\\xA7c\"+o)};P.prototype.stopTopbar=function(){this.onScreenDisplay.setTitle(\"\\xA7m\\xA7c\")};P.prototype.sendBottomBar=function(o){this.onScreenDisplay.setTitle(\"\\xA7m\\xA7e\"+o)};P.prototype.stopBottomBar=function(){this.onScreenDisplay.setTitle(\"\\xA7m\\xA7e\")};export{E as Config,m as ConfigManagers,b as EventHandlers,f as IActionForm,A as IMessageForm,v as IModalForm,c as Logger,B as MinecraftColors,y as PluginBase,w as PluginEventHandlers,S as PluginManagers,d as SettingMenu,x as SettingMenuBuilders,I as SystemBase};\n//# sourceMappingURL=AxethLib.js.map\n",
|
|
9
|
-
"/data/dist/BP/scripts/AxethLib.js.map": "{\n \"version\": 3,\n \"sources\": [\"../../../../../../packages/api/src/runtimes/class/ConfigManagers.ts\", \"../../../../../../packages/api/src/runtimes/class/EventHanlders.ts\", \"../../../../../../packages/api/src/runtimes/class/Logger.ts\", \"../../../../../../packages/api/src/runtimes/class/PluginBase.ts\", \"../../../../../../packages/api/src/runtimes/class/PlayerManagers.ts\", \"../../../../../../packages/api/src/runtimes/class/ItemActionManager.ts\", \"../../../../../../packages/api/src/runtimes/class/PluginManagers.ts\", \"../../../../../../packages/api/src/runtimes/class/SystemBase.ts\", \"../../../../../../packages/api/src/runtimes/plugins/SystemPlugin/index.ts\", \"../../../../../../packages/api/src/runtimes/class/SettingMenuBuilders.ts\", \"../../../../../../packages/api/src/runtimes/class/MinecraftColors.ts\", \"../../../../../../packages/api/src/runtimes/class/PluginEventHanlders.ts\", \"../../../../../../packages/api/src/runtimes/class/forms/IActionForm.ts\", \"../../../../../../packages/api/src/runtimes/class/forms/IMessageForm.ts\", \"../../../../../../packages/api/src/runtimes/class/forms/IModalForm.ts\", \"../../../../../../packages/api/src/runtimes/global/String.ts\", \"../../../../../../packages/api/src/runtimes/global/Player.ts\"],\n \"sourcesContent\": [\"import { world, World } from \\\"@minecraft/server\\\";\\r\\n\\r\\nclass ConfigManagers {\\r\\n constructor() {\\r\\n\\r\\n }\\r\\n\\r\\n public getConfig<T = unknown>(name: string): Config<T> {\\r\\n return new Config<T>(name);\\r\\n }\\r\\n\\r\\n public clearAll() {\\r\\n const properties = world.getDynamicPropertyIds();\\r\\n for (const key of properties) {\\r\\n if (key.startsWith(\\\"config.\\\")) {\\r\\n world.setDynamicProperty(key);\\r\\n }\\r\\n }\\r\\n }\\r\\n}\\r\\n\\r\\nclass Config<T = unknown> {\\r\\n private name: string;\\r\\n private world: World;\\r\\n private prefix: string;\\r\\n private readonly maxChunkSize = 32767;\\r\\n\\r\\n constructor(name: string) {\\r\\n this.name = name;\\r\\n this.world = world;\\r\\n this.prefix = `config.${this.name}`;\\r\\n }\\r\\n\\r\\n set(value: T): void {\\r\\n const serialized = JSON.stringify(value);\\r\\n\\r\\n // Clear existing chunks before writing the new value\\r\\n this.clear();\\r\\n\\r\\n if (serialized.length <= this.maxChunkSize) {\\r\\n this.world.setDynamicProperty(this.prefix, serialized);\\r\\n return;\\r\\n }\\r\\n\\r\\n let partIndex = 0;\\r\\n for (let offset = 0; offset < serialized.length; offset += this.maxChunkSize) {\\r\\n const chunk = serialized.slice(offset, offset + this.maxChunkSize);\\r\\n this.world.setDynamicProperty(`${this.prefix}.part${partIndex}`, chunk);\\r\\n partIndex++;\\r\\n }\\r\\n }\\r\\n\\r\\n get(): T {\\r\\n const partPrefix = `${this.prefix}.part`;\\r\\n const partKeys = this.world\\r\\n .getDynamicPropertyIds()\\r\\n .filter((id) => id.startsWith(partPrefix))\\r\\n .sort((a, b) => {\\r\\n const aIndex = Number(a.slice(partPrefix.length));\\r\\n const bIndex = Number(b.slice(partPrefix.length));\\r\\n return aIndex - bIndex;\\r\\n });\\r\\n\\r\\n let raw = this.world.getDynamicProperty(this.prefix) as string | undefined;\\r\\n\\r\\n if (partKeys.length > 0) {\\r\\n const parts: string[] = [];\\r\\n for (const key of partKeys) {\\r\\n const chunk = this.world.getDynamicProperty(key) as string | undefined;\\r\\n if (chunk) parts.push(chunk);\\r\\n }\\r\\n raw = parts.join(\\\"\\\");\\r\\n }\\r\\n\\r\\n if (!raw) return {} as T;\\r\\n return JSON.parse(raw) as T;\\r\\n }\\r\\n\\r\\n delete(): void {\\r\\n this.clear();\\r\\n }\\r\\n\\r\\n has(key: keyof T): boolean {\\r\\n const data = this.get();\\r\\n return data[key] !== undefined;\\r\\n }\\r\\n\\r\\n clear(): void {\\r\\n const partPrefix = `${this.prefix}.part`;\\r\\n const keys = this.world\\r\\n .getDynamicPropertyIds()\\r\\n .filter((id) => id === this.prefix || id.startsWith(partPrefix));\\r\\n\\r\\n for (const key of keys) {\\r\\n this.world.setDynamicProperty(key);\\r\\n }\\r\\n }\\r\\n}\\r\\n\\r\\nexport { ConfigManagers, Config };\", \"import { PluginBase } from \\\"@axeth/api/runtimes\\\";\\r\\nimport { system } from \\\"@minecraft/server\\\";\\r\\n\\r\\ntype Callback<T> = (payload: T) => void;\\r\\ntype Listener = { owner?: PluginBase; cb: Callback<unknown> };\\r\\n\\r\\nexport class EventHandlers<AutoEvents extends Record<string, unknown>> {\\r\\n private autoListeners = new Map<keyof AutoEvents, Listener[]>();\\r\\n private customListeners = new Map<string, Listener[]>();\\r\\n private onSubscribe?: (event: string) => void;\\r\\n private onUnsubscribe?: (event: string) => void;\\r\\n\\r\\n /** Set callbacks for dynamic subscription management */\\r\\n public setSubscriptionHandlers(\\r\\n onSubscribe: (event: string) => void,\\r\\n onUnsubscribe: (event: string) => void\\r\\n ): void {\\r\\n this.onSubscribe = onSubscribe;\\r\\n this.onUnsubscribe = onUnsubscribe;\\r\\n }\\r\\n\\r\\n /** Check if an event has any listeners */\\r\\n public hasListeners(event: string): boolean {\\r\\n const listeners = this.getListenerMap(event);\\r\\n const list = listeners.get(event);\\r\\n return list !== undefined && list.length > 0;\\r\\n }\\r\\n\\r\\n /** Subscribe to events */\\r\\n public on<K extends keyof AutoEvents>(event: K, callback: Callback<AutoEvents[K]>): void;\\r\\n public on<K extends `Custom${string}`, T>(event: K, callback: Callback<T>): void;\\r\\n public on<K extends keyof AutoEvents>(owner: PluginBase, event: K, callback: Callback<AutoEvents[K]>): void;\\r\\n public on(...args: unknown[]): void {\\r\\n if (typeof args[0] === \\\"string\\\") {\\r\\n this.addListener(args[0], args[1] as Callback<unknown>);\\r\\n } else {\\r\\n this.addListener(args[1] as string, args[2] as Callback<unknown>, args[0] as PluginBase);\\r\\n }\\r\\n }\\r\\n\\r\\n private addListener(event: string, callback: Callback<unknown>, owner?: PluginBase): void {\\r\\n const listeners = this.getListenerMap(event);\\r\\n const hadListeners = this.hasListeners(event);\\r\\n \\r\\n const list = listeners.get(event) ?? [];\\r\\n list.push({ owner, cb: callback });\\r\\n listeners.set(event, list);\\r\\n\\r\\n // Subscribe to event if this is the first listener\\r\\n if (!hadListeners && this.onSubscribe && !event.startsWith(\\\"Custom\\\")) {\\r\\n this.onSubscribe(event);\\r\\n }\\r\\n }\\r\\n\\r\\n /** Unsubscribe */\\r\\n public off<K extends keyof AutoEvents | `Custom${string}`>(event: K, callback: Callback<unknown>): void;\\r\\n public off(owner: PluginBase, event: string, callback?: Callback<unknown>): void;\\r\\n public off(...args: unknown[]): void {\\r\\n if (typeof args[0] === \\\"string\\\") {\\r\\n this.removeListener(args[0], undefined, args[1] as Callback<unknown>);\\r\\n } else {\\r\\n this.removeListener(args[1] as string, args[0] as PluginBase, args[2] as Callback<unknown> | undefined);\\r\\n }\\r\\n }\\r\\n\\r\\n private removeListener(event: string, owner?: PluginBase, callback?: Callback<unknown>): void {\\r\\n const listeners = this.getListenerMap(event);\\r\\n const list = listeners.get(event);\\r\\n if (!list) return;\\r\\n\\r\\n const keep: Listener[] = [];\\r\\n list.forEach((l) => {\\r\\n const ownedMatch = owner && l.owner === owner;\\r\\n const cbMatch = callback && l.cb === callback;\\r\\n\\r\\n if (ownedMatch || cbMatch) {\\r\\n return;\\r\\n }\\r\\n\\r\\n keep.push(l);\\r\\n });\\r\\n\\r\\n listeners.set(event, keep);\\r\\n\\r\\n // Unsubscribe from event if no listeners remain\\r\\n if (keep.length === 0 && this.onUnsubscribe && !event.startsWith(\\\"Custom\\\")) {\\r\\n system.run(() => this.onUnsubscribe!(event));\\r\\n }\\r\\n }\\r\\n\\r\\n /** Emit */\\r\\n public emit<K extends keyof AutoEvents>(event: K, payload: AutoEvents[K]): void;\\r\\n public emit<K extends `Custom${string}`, T>(event: K, payload: T): void;\\r\\n public emit(event: string, payload: unknown): void {\\r\\n const listeners = this.getListenerMap(event);\\r\\n const list = listeners.get(event);\\r\\n if (!list) return;\\r\\n\\r\\n for (const listener of list) {\\r\\n this.executeListener(listener, payload);\\r\\n }\\r\\n }\\r\\n\\r\\n private executeListener(listener: Listener, payload: unknown): void {\\r\\n try {\\r\\n listener.cb(payload);\\r\\n } catch {\\r\\n // Swallow listener errors to avoid breaking emit loop\\r\\n }\\r\\n }\\r\\n\\r\\n public suspendPlugin(owner: PluginBase): Map<string, Callback<unknown>[]> {\\r\\n const stored = new Map<string, Callback<unknown>[]>();\\r\\n\\r\\n const collect = (listeners: Map<string, Listener[]>) => {\\r\\n for (const [event, list] of listeners.entries()) {\\r\\n const owned = list.filter((listener) => listener.owner === owner);\\r\\n if (owned.length === 0) continue;\\r\\n\\r\\n stored.set(event as string, owned.map((listener) => listener.cb));\\r\\n this.removeListener(event as string, owner);\\r\\n }\\r\\n };\\r\\n\\r\\n collect(this.autoListeners as Map<string, Listener[]>);\\r\\n collect(this.customListeners);\\r\\n\\r\\n return stored;\\r\\n }\\r\\n\\r\\n public resumePlugin(owner: PluginBase, listeners: Map<string, Callback<unknown>[]>): void {\\r\\n for (const [event, callbacks] of listeners.entries()) {\\r\\n for (const cb of callbacks) {\\r\\n this.addListener(event, cb, owner);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n private getListenerMap(event: string): Map<string, Listener[]> {\\r\\n return event.startsWith(\\\"Custom\\\") ? this.customListeners : this.autoListeners as Map<string, Listener[]>;\\r\\n }\\r\\n}\\r\\n\", \"class Logger {\\r\\n private prefix: string;\\r\\n\\r\\n constructor(prefix: string) {\\r\\n this.prefix = prefix;\\r\\n }\\r\\n\\r\\n public log(message: string): void {\\r\\n this.msg(message, \\\"LOG\\\");\\r\\n }\\r\\n\\r\\n public error(message: string): void {\\r\\n this.msg(message, \\\"ERROR\\\");\\r\\n }\\r\\n\\r\\n public warn(message: string): void {\\r\\n this.msg(message, \\\"WARN\\\");\\r\\n }\\r\\n\\r\\n public info(message: string): void {\\r\\n this.msg(message, \\\"INFO\\\");\\r\\n }\\r\\n\\r\\n public debug(message: string): void {\\r\\n this.msg(message, \\\"DEBUG\\\");\\r\\n }\\r\\n\\r\\n private msg(message: string, type: string) {\\r\\n console.warn(`[${this.prefix}][${type}] ${message}`);\\r\\n }\\r\\n}\\r\\n\\r\\nexport { Logger };\", \"import {\\r\\n ShutdownEvent,\\r\\n StartupEvent,\\r\\n System,\\r\\n system,\\r\\n World,\\r\\n world\\r\\n} from \\\"@minecraft/server\\\";\\r\\nimport {\\r\\n Config,\\r\\n EventHandlers,\\r\\n Logger,\\r\\n PluginEventHandlers,\\r\\n type PluginSettingOptions,\\r\\n SettingMenu,\\r\\n SystemBase,\\r\\n type WorldEvents,\\r\\n} from \\\"@axeth/api/runtimes\\\";\\r\\nimport { PlayerManagers } from \\\"./PlayerManagers.js\\\";\\r\\nimport { ItemActionManager } from \\\"./ItemActionManager.js\\\";\\r\\n\\r\\nclass PluginBase {\\r\\n public isLoaded: boolean = false;\\r\\n public events: PluginEventHandlers;\\r\\n public name: string = \\\"PluginBase\\\";\\r\\n public version: string = \\\"1.0.0\\\";\\r\\n public icon: string = \\\"\\\"\\r\\n public world: World;\\r\\n public system: System;\\r\\n public systemBase: SystemBase;\\r\\n public settingMenu: SettingMenu;\\r\\n public playerManagers: PlayerManagers;\\r\\n public itemActionManager: ItemActionManager;\\r\\n public isRuntime: boolean = false;\\r\\n\\r\\n constructor(events: EventHandlers<WorldEvents>, systemBase: SystemBase) {\\r\\n this.events = new PluginEventHandlers(this, events);\\r\\n this.world = world;\\r\\n this.system = system;\\r\\n this.systemBase = systemBase;\\r\\n this.settingMenu = new SettingMenu(this, this.getPluginSettings());\\r\\n this.playerManagers = new PlayerManagers();\\r\\n this.itemActionManager = new ItemActionManager(this);\\r\\n this.system.run(() => {\\r\\n if (!this.isEnabled()) return;\\r\\n this.systemBase.pluginManagers.applyPluginState(this);\\r\\n this.load();\\r\\n });\\r\\n }\\r\\n\\r\\n get config(): Config<PluginSettingOptions> {\\r\\n return this.systemBase.configManager.getConfig(this.name)!;\\r\\n }\\r\\n\\r\\n get logger() {\\r\\n return new Logger(this.name.toUpperCase());\\r\\n }\\r\\n\\r\\n public load() {\\r\\n this.initializeConfig();\\r\\n this.onLoad();\\r\\n this.isLoaded = true;\\r\\n }\\r\\n\\r\\n public getName(): string {\\r\\n return this.name;\\r\\n }\\r\\n\\r\\n public onEnable(_ev: StartupEvent): void {\\r\\n }\\r\\n\\r\\n public onLoad(): void {\\r\\n }\\r\\n\\r\\n public onDisable(_ev: ShutdownEvent): void {\\r\\n }\\r\\n\\r\\n public isEnabled(): boolean {\\r\\n const config = this.config.get();\\r\\n const enabledSetting = (config as PluginSettingOptions | undefined)?.[\\\"Enabled\\\"];\\r\\n\\r\\n if (enabledSetting && \\\"value\\\" in enabledSetting) {\\r\\n return Boolean(enabledSetting.value);\\r\\n }\\r\\n\\r\\n if (enabledSetting && \\\"default\\\" in enabledSetting) {\\r\\n return Boolean(enabledSetting.default);\\r\\n }\\r\\n\\r\\n return true;\\r\\n }\\r\\n\\r\\n public registerSettings(menu: typeof SettingMenu): void {\\r\\n this.settingMenu = new menu(this, this.getPluginSettings());\\r\\n }\\r\\n\\r\\n public getPluginSettings(): PluginSettingOptions {\\r\\n return {\\r\\n [\\\"Enabled\\\"]: {\\r\\n description: \\\"Toggle this plugin on or off.\\\",\\r\\n type: \\\"boolean\\\",\\r\\n default: true,\\r\\n },\\r\\n ...this.getSettings(),\\r\\n };\\r\\n }\\r\\n\\r\\n public getSettings(): PluginSettingOptions {\\r\\n return {};\\r\\n }\\r\\n\\r\\n public getAdvancedSettings(_pl: Player, _plugin: PluginBase): (() => void) | null {\\r\\n return null;\\r\\n }\\r\\n\\r\\n private initializeConfig() {\\r\\n let config = this.config.get();\\r\\n if (!config) {\\r\\n this.config.set({});\\r\\n config = this.config.get()!;\\r\\n }\\r\\n\\r\\n const pluginSettings = this.getPluginSettings();\\r\\n const configUnUsedKeys = Object.keys(config).filter(\\r\\n (key) => !(key in pluginSettings),\\r\\n );\\r\\n for (const key of configUnUsedKeys) {\\r\\n delete config[key];\\r\\n }\\r\\n\\r\\n for (const [key, setting] of Object.entries(pluginSettings)) {\\r\\n if (!(key in config) || config[key]?.type !== setting.type || config[key]?.description !== setting.description || config[key]?.default !== setting.default) {\\r\\n config[key] = { ...setting, value: config[key]?.value ?? setting.default };\\r\\n }\\r\\n }\\r\\n this.config.set(config);\\r\\n }\\r\\n}\\r\\n\\r\\nexport { PluginBase };\\r\\n\", \"import { GameMode, world } from \\\"@minecraft/server\\\";\\r\\nimport { Player } from \\\"@minecraft/server\\\";\\r\\n\\r\\nclass PlayerManagers {\\r\\n constructor() {}\\r\\n\\r\\n public eachPlayer(callback: (player: Player) => void) {\\r\\n const players = this.getAllPlayers();\\r\\n for (const player of players) {\\r\\n callback(player);\\r\\n }\\r\\n }\\r\\n\\r\\n public findPlayerByName(name: string): Player | null {\\r\\n const players = this.getAllPlayers();\\r\\n for (const player of players) {\\r\\n if (player.name === name) {\\r\\n return player;\\r\\n }\\r\\n }\\r\\n return null;\\r\\n }\\r\\n \\r\\n public countPlayers(): number {\\r\\n const players = this.getAllPlayers();\\r\\n return players.length;\\r\\n }\\r\\n\\r\\n public getAllPlayers(): Player[] {\\r\\n return world.getPlayers();\\r\\n }\\r\\n\\r\\n public isPlayerGameMode(player: Player, gameMode: GameMode): boolean {\\r\\n return player.getGameMode() === gameMode;\\r\\n }\\r\\n}\\r\\n\\r\\nexport { PlayerManagers };\", \"import { Entity, ItemStack } from \\\"@minecraft/server\\\";\\r\\nimport { Player } from \\\"@minecraft/server\\\";\\r\\nimport { PluginBase } from \\\"./PluginBase.js\\\";\\r\\n\\r\\nconst ItemActionRegistry = new Map<string, ItemActions>();\\r\\n\\r\\nclass ItemActionManager {\\r\\n private plugin: PluginBase;\\r\\n constructor(plugin: PluginBase) {\\r\\n this.plugin = plugin;\\r\\n }\\r\\n\\r\\n public registerItem(itemId: string): ItemActions {\\r\\n const itemActions = new ItemActions(itemId, this.plugin);\\r\\n ItemActionRegistry.set(itemId, itemActions);\\r\\n return itemActions;\\r\\n }\\r\\n\\r\\n public getItemActions(itemId: string): ItemActions | undefined {\\r\\n return ItemActionRegistry.get(itemId);\\r\\n }\\r\\n}\\r\\n\\r\\nclass ItemActions {\\r\\n private itemId: string;\\r\\n private plugin: PluginBase;\\r\\n constructor(itemId: string, plugin: PluginBase) {\\r\\n this.itemId = itemId;\\r\\n this.plugin = plugin;\\r\\n }\\r\\n\\r\\n public onUse(callback: (player: Player, item: ItemStack) => void) {\\r\\n this.plugin.events.on(\\\"AfterItemUse\\\", (ev) => {\\r\\n if (ev.itemStack.typeId !== this.itemId) return;\\r\\n callback(ev.source, ev.itemStack);\\r\\n });\\r\\n }\\r\\n\\r\\n //WIP\\r\\n public onHitEntity(callback: (player: Player, item: ItemStack, entity: Entity) => void) {\\r\\n this.plugin.events.on(\\\"AfterEntityHurt\\\", (ev) => {\\r\\n const player = ev.damageSource.damagingEntity as Player;\\r\\n const items = player?.getComponent(\\\"inventory\\\")?.container.getItem(player.selectedSlotIndex);\\r\\n if (!items) return;\\r\\n callback(player, items, ev.hurtEntity);\\r\\n });\\r\\n }\\r\\n}\\r\\n\\r\\nexport { ItemActions, ItemActionManager };\", \"import { type WorldEvents, EventHandlers, PluginBase, SystemBase } from \\\"@axeth/api/runtimes\\\";\\r\\nimport { system } from \\\"@minecraft/server\\\";\\r\\n\\r\\nclass PluginManagers {\\r\\n private plugins: Map<string, PluginBase> = new Map();\\r\\n private pausedListeners: Map<string, Map<string, ((payload: unknown) => void)[]>> = new Map();\\r\\n private eventHandlers: EventHandlers<WorldEvents>;\\r\\n private SystemBase: SystemBase;\\r\\n\\r\\n constructor(event: EventHandlers<WorldEvents>, system: SystemBase) {\\r\\n this.eventHandlers = event;\\r\\n this.SystemBase = system;\\r\\n }\\r\\n\\r\\n public registerPlugin(...plugin: typeof PluginBase[]): void {\\r\\n for (const p of plugin) {\\r\\n const instance = new p(this.eventHandlers, this.SystemBase);\\r\\n this.plugins.set(instance.name, instance);\\r\\n system.run(() => this.applyPluginState(instance));\\r\\n }\\r\\n }\\r\\n\\r\\n public getPlugin(name: string): PluginBase | null {\\r\\n return this.plugins.get(name) || null;\\r\\n }\\r\\n\\r\\n public getPlugins(): PluginBase[] {\\r\\n return Array.from(this.plugins.values());\\r\\n }\\r\\n\\r\\n public isEnabled(name: string): boolean {\\r\\n const plugin = this.plugins.get(name);\\r\\n if (!plugin) return false;\\r\\n\\r\\n return plugin.isEnabled();\\r\\n }\\r\\n\\r\\n public applyPluginState(plugin: PluginBase): void {\\r\\n if (plugin.isEnabled()) {\\r\\n this.enablePlugin(plugin);\\r\\n return;\\r\\n }\\r\\n\\r\\n this.disablePlugin(plugin);\\r\\n }\\r\\n\\r\\n public setPluginEnabled(name: string, enabled: boolean): void {\\r\\n const plugin = this.plugins.get(name);\\r\\n if (!plugin) return;\\r\\n\\r\\n const config = plugin.config.get() ?? {};\\r\\n const settings = plugin.getPluginSettings();\\r\\n if (!settings.Enabled) return;\\r\\n config.Enabled = { ...settings.Enabled, value: enabled };\\r\\n plugin.config.set(config);\\r\\n\\r\\n this.applyPluginState(plugin);\\r\\n }\\r\\n\\r\\n private disablePlugin(plugin: PluginBase): void {\\r\\n if (this.pausedListeners.has(plugin.name)) return;\\r\\n\\r\\n const paused = this.eventHandlers.suspendPlugin(plugin);\\r\\n this.pausedListeners.set(plugin.name, paused);\\r\\n }\\r\\n\\r\\n private enablePlugin(plugin: PluginBase): void {\\r\\n const paused = this.pausedListeners.get(plugin.name);\\r\\n if (!paused) {\\r\\n return;\\r\\n }\\r\\n\\r\\n console.warn(`Enabling plugin: ${plugin.name}`);\\r\\n if (!plugin.isLoaded) {\\r\\n console.warn(`Loading plugin fresh: ${plugin.name} (discarding paused listeners to avoid duplicates)`);\\r\\n plugin.load();\\r\\n this.pausedListeners.delete(plugin.name);\\r\\n return;\\r\\n }\\r\\n\\r\\n this.eventHandlers.resumePlugin(plugin, paused);\\r\\n this.pausedListeners.delete(plugin.name);\\r\\n }\\r\\n}\\r\\n\\r\\nexport { PluginManagers };\", \"import {\\r\\n ShutdownEvent,\\r\\n StartupEvent,\\r\\n System,\\r\\n system,\\r\\n SystemAfterEvents,\\r\\n SystemBeforeEvents,\\r\\n World,\\r\\n world,\\r\\n WorldAfterEvents,\\r\\n WorldBeforeEvents,\\r\\n} from \\\"@minecraft/server\\\";\\r\\nimport {\\r\\n ConfigManagers,\\r\\n EventHandlers,\\r\\n Logger,\\r\\n PluginManagers,\\r\\n SettingMenuBuilders,\\r\\n type SystemBaseOptions,\\r\\n type WorldEvents,\\r\\n} from \\\"@axeth/api/runtimes\\\";\\r\\nimport { PlayerManagers } from \\\"./PlayerManagers.js\\\";\\r\\nimport { SystemPlugin } from \\\"../plugins/SystemPlugin/index.js\\\";\\r\\n// import { SystemPlugin } from \\\"../plugins/SystemPlugin/index.js\\\";\\r\\n\\r\\nclass SystemBase {\\r\\n public world: World;\\r\\n public system: System;\\r\\n public configManager: ConfigManagers;\\r\\n public events: EventHandlers<WorldEvents>;\\r\\n public pluginManagers: PluginManagers;\\r\\n public logger: Logger;\\r\\n public settingMenuBuilders: SettingMenuBuilders;\\r\\n public playerManagers: PlayerManagers;\\r\\n private options: SystemBaseOptions = {\\r\\n settingItemType: \\\"minecraft:clock\\\",\\r\\n };\\r\\n \\r\\n // Track subscribed handlers alongside their owning signal so we can unsubscribe with the same callback\\r\\n private eventSubscriptions = new Map<string, { signal: { unsubscribe: (cb: (arg: unknown) => void) => void }; handler: (arg: unknown) => void }>();\\r\\n private startTime: number = Date.now();\\r\\n\\r\\n constructor(options?: SystemBaseOptions) {\\r\\n this.world = world;\\r\\n this.system = system;\\r\\n this.events = new EventHandlers<WorldEvents>();\\r\\n this.logger = new Logger(\\\"SYSTEM\\\");\\r\\n this.configManager = new ConfigManagers();\\r\\n this.pluginManagers = new PluginManagers(this.events, this);\\r\\n this.settingMenuBuilders = new SettingMenuBuilders();\\r\\n this.playerManagers = new PlayerManagers();\\r\\n if (options) {\\r\\n this.options = { ...this.options, ...options };\\r\\n }\\r\\n\\r\\n this.setupDynamicEventMapping();\\r\\n this.initializeEvents();\\r\\n }\\r\\n\\r\\n private initializeEvents() {\\r\\n this.events.on(\\\"AfterItemUse\\\", (ev) => {\\r\\n if (ev.itemStack.typeId !== this.options.settingItemType) return;\\r\\n this.settingMenuBuilders.settingMenu(ev.source, this.pluginManagers);\\r\\n });\\r\\n\\r\\n this.events.on(\\\"BeforeStartup\\\", (ev) => this.onStartup(ev));\\r\\n this.events.on(\\\"BeforeShutdown\\\", (ev) => this.onShutdown(ev));\\r\\n\\r\\n system.runInterval(() => {\\r\\n this.events.emit(\\\"AfterTick\\\", { currentTick: system.currentTick });\\r\\n });\\r\\n }\\r\\n\\r\\n private setupDynamicEventMapping() {\\r\\n this.events.setSubscriptionHandlers(\\r\\n (event) => this.subscribeToEvent(event),\\r\\n (event) => {\\r\\n this.unsubscribeFromEvent(event)\\r\\n },\\r\\n );\\r\\n }\\r\\n\\r\\n private subscribeToEvent(eventName: string) {\\r\\n if (this.eventSubscriptions.has(eventName)) return;\\r\\n\\r\\n const isAfter = eventName.startsWith(\\\"After\\\");\\r\\n const baseEventName = eventName.replace(/^(After|Before)/, \\\"\\\");\\r\\n const lowerEventName = baseEventName.charAt(0).toLowerCase() +\\r\\n baseEventName.slice(1);\\r\\n\\r\\n // Try world events first\\r\\n if (isAfter && lowerEventName in world.afterEvents) {\\r\\n const typedKey = lowerEventName as keyof WorldAfterEvents;\\r\\n const handler = (arg: unknown) => {\\r\\n this.events.emit(eventName as keyof WorldEvents, arg as WorldEvents[keyof WorldEvents]);\\r\\n };\\r\\n world.afterEvents[typedKey].subscribe(handler);\\r\\n this.eventSubscriptions.set(eventName, { signal: world.afterEvents[typedKey], handler });\\r\\n } else if (!isAfter && lowerEventName in world.beforeEvents) {\\r\\n const typedKey = lowerEventName as keyof WorldBeforeEvents;\\r\\n const handler = (arg: unknown) => {\\r\\n this.events.emit(eventName as keyof WorldEvents, arg as WorldEvents[keyof WorldEvents]);\\r\\n };\\r\\n world.beforeEvents[typedKey].subscribe(handler);\\r\\n this.eventSubscriptions.set(eventName, { signal: world.beforeEvents[typedKey], handler });\\r\\n } // Try system events\\r\\n else if (isAfter && lowerEventName in system.afterEvents) {\\r\\n const typedKey = lowerEventName as keyof SystemAfterEvents;\\r\\n const handler = (arg: unknown) => {\\r\\n this.events.emit(eventName as keyof WorldEvents, arg as WorldEvents[keyof WorldEvents]);\\r\\n };\\r\\n system.afterEvents[typedKey].subscribe(handler);\\r\\n this.eventSubscriptions.set(eventName, { signal: system.afterEvents[typedKey], handler });\\r\\n } else if (!isAfter && lowerEventName in system.beforeEvents) {\\r\\n const typedKey = lowerEventName as keyof SystemBeforeEvents;\\r\\n const handler = (arg: unknown) => {\\r\\n this.events.emit(eventName as keyof WorldEvents, arg as WorldEvents[keyof WorldEvents]);\\r\\n };\\r\\n system.beforeEvents[typedKey].subscribe(handler);\\r\\n this.eventSubscriptions.set(eventName, { signal: system.beforeEvents[typedKey], handler });\\r\\n }\\r\\n }\\r\\n\\r\\n private unsubscribeFromEvent(eventName: string) {\\r\\n const subscription = this.eventSubscriptions.get(eventName);\\r\\n if (!subscription) return;\\r\\n\\r\\n system.run(() => subscription.signal.unsubscribe(subscription.handler));\\r\\n this.eventSubscriptions.delete(eventName);\\r\\n }\\r\\n\\r\\n public onLoad(_ev: StartupEvent): void {}\\r\\n\\r\\n private onStartup(ev: StartupEvent): void {\\r\\n try {\\r\\n this.onLoad(ev);\\r\\n } catch (error) {\\r\\n this.logger.error(`Error during onLoad: ${(error as Error)}`);\\r\\n }\\r\\n this.pluginManagers.registerPlugin(SystemPlugin);\\r\\n const plugins = this.pluginManagers.getPlugins();\\r\\n let pluginLoadCount = 0;\\r\\n for (const plugin of plugins) {\\r\\n try {\\r\\n plugin.onEnable(ev);\\r\\n } catch (error) {\\r\\n this.logger.error(\\r\\n `Error during onEnable of plugin ${plugin.name}: ${(error as Error)}`,\\r\\n );\\r\\n }\\r\\n pluginLoadCount++;\\r\\n }\\r\\n\\r\\n system.run(() => {\\r\\n const endTime = Date.now();\\r\\n const loadDuration = endTime - this.startTime;\\r\\n\\r\\n this.playerManagers.eachPlayer((pl) => {\\r\\n pl.sendToast(\\r\\n \\\"\\\",\\r\\n `${\\\"Plugin Loaded\\\".mcColors().grey} (${pluginLoadCount.toString().mcColors().green}/${plugins.length.toString().mcColors().red}) ${`in ${loadDuration}ms`.mcColors().grey}`,\\r\\n \\\"textures/items/compass_item\\\",\\r\\n \\\"textures/ui/greyBorder\\\",\\r\\n );\\r\\n });\\r\\n });\\r\\n }\\r\\n\\r\\n private onShutdown(ev: ShutdownEvent): void {\\r\\n const plugins = this.pluginManagers.getPlugins();\\r\\n for (const plugin of plugins) {\\r\\n plugin.onDisable(ev);\\r\\n }\\r\\n }\\r\\n}\\r\\n\\r\\nexport { SystemBase };\\r\\n\", \"import { StartupEvent } from \\\"@minecraft/server\\\";\\r\\nimport { PluginBase } from \\\"../../class/PluginBase.js\\\";\\r\\nimport { CommandPermissionLevel, CustomCommandParamType, CustomCommandStatus } from \\\"@minecraft/server\\\";\\r\\nimport { Player } from \\\"@minecraft/server\\\";\\r\\n\\r\\nclass SystemPlugin extends PluginBase {\\r\\n public override isRuntime: boolean = true;\\r\\n \\r\\n public override onEnable(ev: StartupEvent): void {\\r\\n ev.customCommandRegistry.registerEnum(\\\"kisu:plugin_enums\\\", [\\r\\n \\\"list\\\",\\r\\n \\\"settings\\\"\\r\\n ])\\r\\n ev.customCommandRegistry.registerCommand({\\r\\n name: \\\"kisu:plugins\\\",\\r\\n description: \\\"Manage plugins and their settings.\\\",\\r\\n permissionLevel: CommandPermissionLevel.Admin,\\r\\n cheatsRequired: false,\\r\\n mandatoryParameters: [\\r\\n {\\r\\n name: \\\"kisu:plugin_enums\\\",\\r\\n type: CustomCommandParamType.Enum\\r\\n }\\r\\n ]\\r\\n }, (origin, args) => {\\r\\n const player = origin.sourceEntity as Player;\\r\\n if (!(player instanceof Player)) return { message: \\\"Source must be a player\\\", status: CustomCommandStatus.Failure }\\r\\n if (args === \\\"list\\\") {\\r\\n const plugins = this.systemBase.pluginManagers.getPlugins();\\r\\n return { message: ` \\u00A7a[Plugins List]\\u00A7r\\\\n${plugins.map(p => ` \\u00A7e- ${p.getName()} \\u00A77(v${p.version})`).join(\\\"\\\\n\\\")}`, status: CustomCommandStatus.Success }\\r\\n } else if (args === \\\"settings\\\") {\\r\\n this.system.run(() => {\\r\\n this.systemBase.settingMenuBuilders.settingMenu(player, this.systemBase.pluginManagers);\\r\\n })\\r\\n return { status: CustomCommandStatus.Success }\\r\\n }\\r\\n return { message: \\\"404\\\", status: CustomCommandStatus.Failure }\\r\\n })\\r\\n }\\r\\n public override onLoad(): void {\\r\\n }\\r\\n}\\r\\n\\r\\nexport { SystemPlugin };\", \"import { Player } from \\\"@minecraft/server\\\";\\r\\nimport {\\r\\n IActionForm,\\r\\n IModalForm,\\r\\n PluginBase,\\r\\n PluginManagers,\\r\\n type PluginSettingOptions,\\r\\n} from \\\"@axeth/api/runtimes\\\";\\r\\n\\r\\nclass SettingMenuBuilders {\\r\\n private menus = new Map<string, SettingMenu>();\\r\\n\\r\\n public registerMenu(menu: SettingMenu, plugin: PluginBase): void {\\r\\n this.menus.set(plugin.name, menu);\\r\\n }\\r\\n\\r\\n public settingMenu(pl: Player, pluginManagers: PluginManagers): void {\\r\\n const plugins = pluginManagers.getPlugins();\\r\\n\\r\\n const settingMain = new IActionForm(\\r\\n `Settings Menu`,\\r\\n `\\u00A7fHello, \\u00A7e${pl.name}\\u00A7r\\\\n\\\\nThis is the configuration menu.\\\\nYou can manage settings here.`,\\r\\n );\\r\\n\\r\\n settingMain.addDivider();\\r\\n settingMain.addLabel(`\\u00A77Plugins (\\u00A7c${plugins.length}\\u00A77)\\u00A7r`);\\r\\n\\r\\n for (const plugin of plugins) {\\r\\n if (plugin.isRuntime) continue;\\r\\n this.addPluginButton(settingMain, plugin, pl, pluginManagers);\\r\\n }\\r\\n\\r\\n settingMain.show(pl);\\r\\n }\\r\\n\\r\\n private addPluginButton(\\r\\n form: IActionForm,\\r\\n plugin: PluginBase,\\r\\n player: Player,\\r\\n pluginManagers: PluginManagers,\\r\\n ): void {\\r\\n const settings = new SettingMenu(plugin, plugin.getPluginSettings());\\r\\n const statusText = plugin.isEnabled() ? \\\"\\u00A72Enabled\\\" : \\\"\\u00A7cDisabled\\\";\\r\\n\\r\\n form.addButton(\\r\\n `${settings.buttons.name}\\\\n\\u00A78[${statusText}\\u00A78]`,\\r\\n settings.buttons.icon,\\r\\n () => {\\r\\n this.showPluginSettingsPage(plugin, player, pluginManagers);\\r\\n },\\r\\n );\\r\\n }\\r\\n\\r\\n private showPluginSettingsPage(\\r\\n plugin: PluginBase,\\r\\n player: Player,\\r\\n pluginManagers: PluginManagers,\\r\\n ): void {\\r\\n const settings = new SettingMenu(plugin, plugin.getPluginSettings());\\r\\n const advancedSettings = plugin.getAdvancedSettings(player, plugin);\\r\\n\\r\\n const showDefaultSettings = () => {\\r\\n const page = settings.getPage();\\r\\n\\r\\n page.show(player).then((res) => {\\r\\n if (res.canceled) return;\\r\\n\\r\\n this.savePluginSettings(\\r\\n plugin,\\r\\n res.formValues as (string | number | boolean)[],\\r\\n pluginManagers,\\r\\n );\\r\\n\\r\\n this.settingMenu(player, pluginManagers);\\r\\n });\\r\\n }\\r\\n\\r\\n const showAdvancedSettings = () => {\\r\\n advancedSettings!();\\r\\n }\\r\\n\\r\\n if (advancedSettings) {\\r\\n const settingSelectionMenu = new IActionForm(\\\"Settings Menu\\\", \\\"Choose an option:\\\");\\r\\n settingSelectionMenu.addButton(\\\"Advanced Settings\\\", \\\"textures/ui/settings_glyph_color_2x\\\", () => {\\r\\n showAdvancedSettings();\\r\\n });\\r\\n settingSelectionMenu.addButton(\\\"Default Settings\\\", \\\"textures/ui/icon_setting\\\", () => {\\r\\n showDefaultSettings();\\r\\n });\\r\\n settingSelectionMenu.show(player);\\r\\n } else {\\r\\n showDefaultSettings();\\r\\n }\\r\\n }\\r\\n\\r\\n private savePluginSettings(\\r\\n plugin: PluginBase,\\r\\n formValues: (string | number | boolean)[],\\r\\n pluginManagers: PluginManagers,\\r\\n ): void {\\r\\n const startIndex = 2; // Skip label and divider\\r\\n const config = plugin.config.get() ?? {};\\r\\n const settingsKeysNone = Object.keys(plugin.getPluginSettings());\\r\\n const settingsKeys = settingsKeysNone.filter(\\r\\n (key) => plugin.getPluginSettings()[key]?.canUserModify !== false,\\r\\n );\\r\\n\\r\\n for (let i = startIndex; i < formValues.length - 1; i++) {\\r\\n const value = formValues[i];\\r\\n if (value === undefined) continue;\\r\\n\\r\\n const key = settingsKeys[i - startIndex];\\r\\n if (!key) continue;\\r\\n const setting = plugin.getPluginSettings()[key];\\r\\n if (!setting) continue;\\r\\n\\r\\n config[key] = {\\r\\n ...setting,\\r\\n value: this.convertSettingValue(setting.type, value),\\r\\n };\\r\\n }\\r\\n\\r\\n plugin.config.set(config);\\r\\n\\r\\n pluginManagers.applyPluginState(plugin);\\r\\n }\\r\\n\\r\\n private convertSettingValue(\\r\\n type: \\\"string\\\" | \\\"number\\\" | \\\"boolean\\\" | \\\"array\\\",\\r\\n value: string | number | boolean,\\r\\n ): string | number | boolean {\\r\\n switch (type) {\\r\\n case \\\"number\\\":\\r\\n case \\\"array\\\":\\r\\n return Number(value);\\r\\n case \\\"boolean\\\":\\r\\n return Boolean(value);\\r\\n default:\\r\\n return String(value);\\r\\n }\\r\\n }\\r\\n}\\r\\n\\r\\nclass SettingMenu {\\r\\n private plugin: PluginBase;\\r\\n private settings: PluginSettingOptions;\\r\\n\\r\\n constructor(plugin: PluginBase, settings: PluginSettingOptions) {\\r\\n this.plugin = plugin;\\r\\n this.settings = settings;\\r\\n }\\r\\n\\r\\n get buttons() {\\r\\n return {\\r\\n name: this.plugin.name,\\r\\n description: `Settings for ${this.plugin.name.mcColors().blue} plugin`,\\r\\n icon: this.plugin.icon || \\\"textures/items/compass_item\\\",\\r\\n };\\r\\n }\\r\\n\\r\\n public getPage(): IModalForm {\\r\\n const config = this.plugin.config.get() ?? {};\\r\\n\\r\\n const forms = new IModalForm(\\r\\n `${this.plugin.name} Settings`,\\r\\n `Save changes.`,\\r\\n );\\r\\n\\r\\n forms.addLabel(this.buttons.description.mcColors().grey);\\r\\n forms.addDivider();\\r\\n\\r\\n if (Object.keys(this.settings).length === 0) {\\r\\n forms.addLabel(\\\"\\u00A7cNo settings available for this plugin.\\u00A7r\\\");\\r\\n forms.addDivider();\\r\\n return forms;\\r\\n }\\r\\n\\r\\n this.addSettingFields(forms, config);\\r\\n\\r\\n forms.addDivider();\\r\\n return forms;\\r\\n }\\r\\n\\r\\n private addSettingFields(\\r\\n forms: IModalForm,\\r\\n config: PluginSettingOptions,\\r\\n ): void {\\r\\n for (const [key, setting] of Object.entries(this.settings)) {\\r\\n if (setting.canUserModify === false) continue;\\r\\n\\r\\n const savedValue = config[key]?.value;\\r\\n const defaultValue = setting.default;\\r\\n\\r\\n switch (setting.type) {\\r\\n case \\\"boolean\\\":\\r\\n forms.addToggle(\\r\\n key,\\r\\n (savedValue ?? defaultValue) as boolean,\\r\\n setting.description,\\r\\n );\\r\\n break;\\r\\n\\r\\n case \\\"string\\\":\\r\\n forms.addTextField(\\r\\n key,\\r\\n setting.description,\\r\\n (savedValue ?? defaultValue) as string,\\r\\n setting.description,\\r\\n );\\r\\n break;\\r\\n\\r\\n case \\\"number\\\":\\r\\n forms.addSlider(\\r\\n key,\\r\\n 1,\\r\\n setting.maxValue ?? 100,\\r\\n 1,\\r\\n (savedValue ?? defaultValue) as number,\\r\\n setting.description,\\r\\n );\\r\\n break;\\r\\n\\r\\n case \\\"array\\\":\\r\\n forms.addDropdown(\\r\\n key,\\r\\n (defaultValue as (string | number | boolean)[]).map(String),\\r\\n typeof savedValue === \\\"number\\\" ? savedValue : 0,\\r\\n setting.description,\\r\\n );\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n}\\r\\n\\r\\nexport { SettingMenu, SettingMenuBuilders };\\r\\n\", \"class MinecraftColors {\\r\\n constructor(private str: string) {}\\r\\n\\r\\n get grey(): string {\\r\\n return `\\u00A77${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get pink(): string {\\r\\n return `\\u00A7d${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get blackGray(): string {\\r\\n return `\\u00A78${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get darkRed(): string {\\r\\n return `\\u00A74${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get darkGreen(): string {\\r\\n return `\\u00A72${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get darkBlue(): string {\\r\\n return `\\u00A71${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get darkYellow(): string {\\r\\n return `\\u00A76${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get red(): string {\\r\\n return `\\u00A7c${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get green(): string {\\r\\n return `\\u00A7a${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get blue(): string {\\r\\n return `\\u00A7b${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get yellow(): string {\\r\\n return `\\u00A7e${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get white(): string {\\r\\n return `\\u00A7f${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get black(): string {\\r\\n return `\\u00A70${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get bold(): string {\\r\\n return `\\u00A7l${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get italic(): string {\\r\\n return `\\u00A7o${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get underline(): string {\\r\\n return `\\u00A7n${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get strikethrough(): string {\\r\\n return `\\u00A7m${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get obfuscated(): string {\\r\\n return `\\u00A7k${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get reset(): string {\\r\\n return `\\u00A7r${this.str}`;\\r\\n }\\r\\n}\\r\\n\\r\\nexport { MinecraftColors };\", \"import { EventHandlers, PluginBase, type WorldEvents } from \\\"@axeth/api/runtimes\\\";\\r\\n\\r\\nclass PluginEventHandlers {\\r\\n private plugin: PluginBase;\\r\\n private eventHandlers: EventHandlers<WorldEvents>;\\r\\n\\r\\n constructor(plugin: PluginBase, eventHandlers: EventHandlers<WorldEvents>) {\\r\\n this.plugin = plugin;\\r\\n this.eventHandlers = eventHandlers;\\r\\n }\\r\\n on<K extends `Custom${string}`, T>(\\r\\n event: K,\\r\\n listener: (payload: T) => void,\\r\\n ): void;\\r\\n on<T extends keyof WorldEvents>(\\r\\n event: T,\\r\\n listener: (payload: WorldEvents[T]) => void,\\r\\n ): void;\\r\\n on(event: unknown, listener: unknown): void {\\r\\n this.eventHandlers.on(this.plugin, event as keyof WorldEvents, listener as (payload: unknown) => void);\\r\\n }\\r\\n emit<K extends `Custom${string}`, T>(event: K, payload: T): void;\\r\\n emit<T extends keyof WorldEvents>(event: T, payload: WorldEvents[T]): void;\\r\\n emit(event: unknown, payload: unknown): void {\\r\\n if (typeof event === 'string' && event.startsWith('Custom')) {\\r\\n this.eventHandlers.emit(event as `Custom${string}`, payload);\\r\\n } else {\\r\\n this.eventHandlers.emit(event as keyof WorldEvents, payload as WorldEvents[keyof WorldEvents]);\\r\\n }\\r\\n }\\r\\n}\\r\\n\\r\\nexport { PluginEventHandlers };\\r\\n\", \"import { ActionFormData, ActionFormResponse } from \\\"@minecraft/server-ui\\\";\\r\\nimport type { IActionFormButton, IActionFormDivider, IActionFormHeader, IActionFormLabel } from \\\"@axeth/api/runtimes\\\";\\r\\nimport { Player } from \\\"@minecraft/server\\\";\\r\\n\\r\\ntype FormElement = IActionFormButton | IActionFormDivider | IActionFormHeader | IActionFormLabel;\\r\\n\\r\\nclass IActionForm {\\r\\n private title: string;\\r\\n private body: string;\\r\\n private elements: FormElement[] = [];\\r\\n private previousForm?: (pl: Player) => void;\\r\\n\\r\\n constructor(title: string = \\\"\\\", body: string = \\\"\\\", previousForm?: (pl: Player) => void) {\\r\\n this.title = title;\\r\\n this.body = body;\\r\\n if (previousForm) {\\r\\n this.previousForm = previousForm;\\r\\n }\\r\\n }\\r\\n\\r\\n public back(pl: Player) {\\r\\n if (this.previousForm) this.previousForm(pl);\\r\\n return;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Set the form title\\r\\n */\\r\\n public setTitle(title: string): this {\\r\\n this.title = title;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Set the form body text\\r\\n */\\r\\n public setBody(body: string): this {\\r\\n this.body = body;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get the current title\\r\\n */\\r\\n public getTitle(): string {\\r\\n return this.title;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get the current body text\\r\\n */\\r\\n public getBody(): string {\\r\\n return this.body;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add multiple buttons at once\\r\\n */\\r\\n public addButtons(buttons: IActionFormButton[]): this {\\r\\n this.elements.push(...buttons);\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a single button\\r\\n */\\r\\n public addButton(label: string, icon?: string, onClick?: () => void): this {\\r\\n this.elements.push({ label, icon, onClick });\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a button object\\r\\n */\\r\\n public addButtonObject(button: IActionFormButton): this {\\r\\n this.elements.push(button);\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all buttons from the form\\r\\n */\\r\\n public getButtons(): IActionFormButton[] {\\r\\n return this.elements.filter(this.isButton);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a divider to separate elements\\r\\n */\\r\\n public addDivider(): this {\\r\\n this.elements.push({ divider: true });\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all dividers from the form\\r\\n */\\r\\n public getDividers(): IActionFormDivider[] {\\r\\n return this.elements.filter(this.isDivider);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a header text\\r\\n */\\r\\n public addHeader(text: string): this {\\r\\n this.elements.push({ text_header: text });\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a header object\\r\\n */\\r\\n public addHeaderObject(header: IActionFormHeader): this {\\r\\n this.elements.push(header);\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get the first header from the form\\r\\n */\\r\\n public getHeader(): IActionFormHeader | undefined {\\r\\n return this.elements.find(this.isHeader);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all headers from the form\\r\\n */\\r\\n public getHeaders(): IActionFormHeader[] {\\r\\n return this.elements.filter(this.isHeader);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a label text\\r\\n */\\r\\n public addLabel(text: string): this {\\r\\n this.elements.push({ text_label: text });\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a label object\\r\\n */\\r\\n public addLabelObject(label: IActionFormLabel): this {\\r\\n this.elements.push(label);\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all labels from the form\\r\\n */\\r\\n public getLabels(): IActionFormLabel[] {\\r\\n return this.elements.filter(this.isLabel);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Clear all elements from the form\\r\\n */\\r\\n public clearElements(): this {\\r\\n this.elements = [];\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get the total number of elements\\r\\n */\\r\\n public getElementCount(): number {\\r\\n return this.elements.length;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Check if the form has any buttons\\r\\n */\\r\\n public hasButtons(): boolean {\\r\\n return this.getButtons().length > 0;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Show the form to a player\\r\\n */\\r\\n public async show(player: Player): Promise<ActionFormResponse> {\\r\\n const form = new ActionFormData();\\r\\n form.title(this.title);\\r\\n if (this.body !== \\\"\\\") {\\r\\n form.body(this.body);\\r\\n }\\r\\n\\r\\n // Track button indices for callback handling\\r\\n let buttonIndex = 0;\\r\\n const buttonCallbacks: (() => void)[] = [];\\r\\n\\r\\n this.elements.forEach((element) => {\\r\\n if (this.isDivider(element)) {\\r\\n form.divider();\\r\\n } else if (this.isHeader(element)) {\\r\\n form.header(element.text_header);\\r\\n } else if (this.isLabel(element)) {\\r\\n form.label(element.text_label);\\r\\n } else if (this.isButton(element)) {\\r\\n form.button(element.label, element.icon);\\r\\n buttonCallbacks[buttonIndex] = element.onClick || (() => {});\\r\\n buttonIndex++;\\r\\n }\\r\\n });\\r\\n\\r\\n try {\\r\\n const response = await form.show(player);\\r\\n\\r\\n if (!response.canceled && response.selection !== undefined) {\\r\\n const callback = buttonCallbacks[response.selection];\\r\\n if (callback) {\\r\\n callback();\\r\\n }\\r\\n }\\r\\n\\r\\n return response;\\r\\n } catch (error) {\\r\\n console.error(\\\"Error showing form:\\\", error);\\r\\n throw error;\\r\\n }\\r\\n }\\r\\n\\r\\n private isButton(element: FormElement): element is IActionFormButton {\\r\\n return \\\"label\\\" in element;\\r\\n }\\r\\n\\r\\n private isDivider(element: FormElement): element is IActionFormDivider {\\r\\n return \\\"divider\\\" in element && element.divider === true;\\r\\n }\\r\\n\\r\\n private isHeader(element: FormElement): element is IActionFormHeader {\\r\\n return \\\"text_header\\\" in element;\\r\\n }\\r\\n\\r\\n private isLabel(element: FormElement): element is IActionFormLabel {\\r\\n return \\\"text_label\\\" in element;\\r\\n }\\r\\n}\\r\\n\\r\\nexport { IActionForm };\\r\\n\", \"import { MessageFormData, MessageFormResponse } from \\\"@minecraft/server-ui\\\";\\r\\nimport { Player } from \\\"@minecraft/server\\\";\\r\\nimport type { IMessageFormButton } from \\\"@axeth/api/runtimes\\\";\\r\\n\\r\\nclass IMessageForm {\\r\\n private title: string;\\r\\n private body: string;\\r\\n private button1: IMessageFormButton | null = null;\\r\\n private button2: IMessageFormButton | null = null;\\r\\n\\r\\n constructor(title: string = \\\"\\\", body: string = \\\"\\\") {\\r\\n this.title = title;\\r\\n this.body = body;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Set the form title\\r\\n */\\r\\n public setTitle(title: string): this {\\r\\n this.title = title;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Set the form body text\\r\\n */\\r\\n public setBody(body: string): this {\\r\\n this.body = body;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get the current title\\r\\n */\\r\\n public getTitle(): string {\\r\\n return this.title;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get the current body text\\r\\n */\\r\\n public getBody(): string {\\r\\n return this.body;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Set button 1 (left button)\\r\\n */\\r\\n public setButton1(text: string, onClick?: () => void): this {\\r\\n this.button1 = { text, onClick };\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Set button 1 object\\r\\n */\\r\\n public setButton1Object(button: IMessageFormButton): this {\\r\\n this.button1 = button;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Set button 2 (right button)\\r\\n */\\r\\n public setButton2(text: string, onClick?: () => void): this {\\r\\n this.button2 = { text, onClick };\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Set button 2 object\\r\\n */\\r\\n public setButton2Object(button: IMessageFormButton): this {\\r\\n this.button2 = button;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get button 1\\r\\n */\\r\\n public getButton1(): IMessageFormButton | null {\\r\\n return this.button1;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get button 2\\r\\n */\\r\\n public getButton2(): IMessageFormButton | null {\\r\\n return this.button2;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Check if button 1 is set\\r\\n */\\r\\n public hasButton1(): boolean {\\r\\n return this.button1 !== null;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Check if button 2 is set\\r\\n */\\r\\n public hasButton2(): boolean {\\r\\n return this.button2 !== null;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Check if any buttons are set\\r\\n */\\r\\n public hasButtons(): boolean {\\r\\n return this.button1 !== null || this.button2 !== null;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Clear all buttons\\r\\n */\\r\\n public clearButtons(): this {\\r\\n this.button1 = null;\\r\\n this.button2 = null;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Clear button 1\\r\\n */\\r\\n public clearButton1(): this {\\r\\n this.button1 = null;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Clear button 2\\r\\n */\\r\\n public clearButton2(): this {\\r\\n this.button2 = null;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Show the form to a player and return the response\\r\\n */\\r\\n public async show(player: Player): Promise<MessageFormResponse> {\\r\\n const form = new MessageFormData();\\r\\n form.title(this.title);\\r\\n form.body(this.body);\\r\\n\\r\\n if (this.button1) {\\r\\n form.button1(this.button1.text);\\r\\n }\\r\\n\\r\\n if (this.button2) {\\r\\n form.button2(this.button2.text);\\r\\n }\\r\\n\\r\\n try {\\r\\n const response = await form.show(player);\\r\\n\\r\\n // Handle button callbacks\\r\\n if (!response.canceled && response.selection !== undefined) {\\r\\n if (response.selection === 0 && this.button1 && this.button1.onClick) {\\r\\n this.button1.onClick();\\r\\n } else if (response.selection === 1 && this.button2 && this.button2.onClick) {\\r\\n this.button2.onClick();\\r\\n }\\r\\n }\\r\\n\\r\\n return response;\\r\\n } catch (error) {\\r\\n console.error(\\\"Error showing message form:\\\", error);\\r\\n throw error;\\r\\n }\\r\\n }\\r\\n\\r\\n /**\\r\\n * Show the form and process the results with a callback\\r\\n */\\r\\n public async showWithCallback(\\r\\n player: Player,\\r\\n callback: (selection: number | undefined, canceled: boolean) => void\\r\\n ): Promise<void> {\\r\\n try {\\r\\n const response = await this.show(player);\\r\\n\\r\\n if (response.canceled) {\\r\\n callback(undefined, true);\\r\\n } else {\\r\\n callback(response.selection, false);\\r\\n }\\r\\n } catch (error) {\\r\\n console.error(\\\"Error in showWithCallback:\\\", error);\\r\\n callback(undefined, true);\\r\\n }\\r\\n }\\r\\n\\r\\n /**\\r\\n * Create a simple confirmation dialog\\r\\n */\\r\\n public static createConfirmation(\\r\\n title: string,\\r\\n body: string,\\r\\n onConfirm?: () => void,\\r\\n onCancel?: () => void\\r\\n ): IMessageForm {\\r\\n return new IMessageForm(title, body).setButton1(\\\"Cancel\\\", onCancel).setButton2(\\\"Confirm\\\", onConfirm);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Create a simple yes/no dialog\\r\\n */\\r\\n public static createYesNo(title: string, body: string, onYes?: () => void, onNo?: () => void): IMessageForm {\\r\\n return new IMessageForm(title, body).setButton1(\\\"No\\\", onNo).setButton2(\\\"Yes\\\", onYes);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Create a simple OK dialog\\r\\n */\\r\\n public static createOK(title: string, body: string, onOK?: () => void): IMessageForm {\\r\\n return new IMessageForm(title, body).setButton1(\\\"OK\\\", onOK);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Create a simple alert dialog\\r\\n */\\r\\n public static createAlert(title: string, body: string, onClose?: () => void): IMessageForm {\\r\\n return new IMessageForm(title, body).setButton1(\\\"Close\\\", onClose);\\r\\n }\\r\\n}\\r\\n\\r\\nexport { IMessageForm };\\r\\n\", \"import { ModalFormData, ModalFormResponse } from \\\"@minecraft/server-ui\\\";\\r\\nimport { Player } from \\\"@minecraft/server\\\";\\r\\nimport type { IModalFormTextField, IModalFormToggle, IModalFormSlider, IModalFormDropdown, IModalFormHeader, IModalFormLabel, IModalFormDivider } from \\\"@axeth/api/runtimes\\\";\\r\\n\\r\\ntype FormElement =\\r\\n | IModalFormTextField\\r\\n | IModalFormToggle\\r\\n | IModalFormSlider\\r\\n | IModalFormDropdown\\r\\n | IModalFormDivider\\r\\n | IModalFormHeader\\r\\n | IModalFormLabel;\\r\\n\\r\\nclass IModalForm {\\r\\n private title: string;\\r\\n private elements: FormElement[] = [];\\r\\n private submitButtonText: string;\\r\\n private callback?: (formValues: (string | number | boolean | undefined)[], canceled: boolean) => void;\\r\\n\\r\\n constructor(title: string = \\\"\\\", submitButtonText: string = \\\"Submit\\\") {\\r\\n this.title = title;\\r\\n this.submitButtonText = submitButtonText;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Set the form title\\r\\n */\\r\\n public setTitle(title: string): this {\\r\\n this.title = title;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get the current title\\r\\n */\\r\\n public getTitle(): string {\\r\\n return this.title;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Set the submit button text\\r\\n */\\r\\n public setSubmitButton(text: string): this {\\r\\n this.submitButtonText = text;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get the submit button text\\r\\n */\\r\\n public getSubmitButtonText(): string {\\r\\n return this.submitButtonText;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a text field\\r\\n */\\r\\n public addTextField(label: string, placeholderText?: string, defaultValue?: string, tooltip?: string): this {\\r\\n this.elements.push({ label, placeholderText, defaultValue, tooltip });\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a text field object\\r\\n */\\r\\n public addTextFieldObject(textField: IModalFormTextField): this {\\r\\n this.elements.push(textField);\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all text fields from the form\\r\\n */\\r\\n public getTextFields(): IModalFormTextField[] {\\r\\n return this.elements.filter(this.isTextField);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a toggle switch\\r\\n */\\r\\n public addToggle(label: string, defaultValue?: boolean, tooltip?: string): this {\\r\\n this.elements.push({ label, defaultValue, tooltip });\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a toggle object\\r\\n */\\r\\n public addToggleObject(toggle: IModalFormToggle): this {\\r\\n this.elements.push(toggle);\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all toggles from the form\\r\\n */\\r\\n public getToggles(): IModalFormToggle[] {\\r\\n return this.elements.filter(this.isToggle);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a slider\\r\\n */\\r\\n public addSlider(\\r\\n label: string,\\r\\n minimumValue: number,\\r\\n maximumValue: number,\\r\\n valueStep: number,\\r\\n defaultValue?: number,\\r\\n tooltip?: string\\r\\n ): this {\\r\\n this.elements.push({ label, minimumValue, maximumValue, valueStep, defaultValue, tooltip });\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a slider object\\r\\n */\\r\\n public addSliderObject(slider: IModalFormSlider): this {\\r\\n this.elements.push(slider);\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all sliders from the form\\r\\n */\\r\\n public getSliders(): IModalFormSlider[] {\\r\\n return this.elements.filter(this.isSlider);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a dropdown\\r\\n */\\r\\n public addDropdown(label: string, options: string[], defaultValueIndex?: number, tooltip?: string): this {\\r\\n this.elements.push({ label, options, defaultValueIndex, tooltip });\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a dropdown object\\r\\n */\\r\\n public addDropdownObject(dropdown: IModalFormDropdown): this {\\r\\n this.elements.push(dropdown);\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all dropdowns from the form\\r\\n */\\r\\n public getDropdowns(): IModalFormDropdown[] {\\r\\n return this.elements.filter(this.isDropdown);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a divider to separate elements\\r\\n */\\r\\n public addDivider(): this {\\r\\n this.elements.push({ divider: true });\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all dividers from the form\\r\\n */\\r\\n public getDividers(): IModalFormDivider[] {\\r\\n return this.elements.filter(this.isDivider);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a header text\\r\\n */\\r\\n public addHeader(text: string): this {\\r\\n this.elements.push({ text_header: text });\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a header object\\r\\n */\\r\\n public addHeaderObject(header: IModalFormHeader): this {\\r\\n this.elements.push(header);\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get the first header from the form\\r\\n */\\r\\n public getHeader(): IModalFormHeader | undefined {\\r\\n return this.elements.find(this.isHeader);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all headers from the form\\r\\n */\\r\\n public getHeaders(): IModalFormHeader[] {\\r\\n return this.elements.filter(this.isHeader);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a label text\\r\\n */\\r\\n public addLabel(text: string): this {\\r\\n this.elements.push({ text_label: text });\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a label object\\r\\n */\\r\\n public addLabelObject(label: IModalFormLabel): this {\\r\\n this.elements.push(label);\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all labels from the form\\r\\n */\\r\\n public getLabels(): IModalFormLabel[] {\\r\\n return this.elements.filter(this.isLabel);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Clear all elements from the form\\r\\n */\\r\\n public clearElements(): this {\\r\\n this.elements = [];\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get the total number of elements\\r\\n */\\r\\n public getElementCount(): number {\\r\\n return this.elements.length;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Check if the form has any input elements (textField, toggle, slider, dropdown)\\r\\n */\\r\\n public hasInputElements(): boolean {\\r\\n return this.elements.some(\\r\\n (element) =>\\r\\n this.isTextField(element) || this.isToggle(element) || this.isSlider(element) || this.isDropdown(element)\\r\\n );\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all elements\\r\\n */\\r\\n public getElements(): FormElement[] {\\r\\n return this.elements;\\r\\n }\\r\\n\\r\\n public addCallback(callback: (formValues: (string | number | boolean | undefined)[], canceled: boolean) => void): this {\\r\\n this.callback = callback;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Show the form to a player and return the response\\r\\n */\\r\\n public async show(player: Player): Promise<ModalFormResponse> {\\r\\n const form = new ModalFormData();\\r\\n form.title(this.title);\\r\\n form.submitButton(this.submitButtonText);\\r\\n\\r\\n this.elements.forEach((element) => {\\r\\n if (this.isDivider(element)) {\\r\\n form.divider();\\r\\n } else if (this.isHeader(element)) {\\r\\n // Note: ModalFormData doesn't have a header method, incorporating into divider or label\\r\\n form.label(element.text_header);\\r\\n } else if (this.isLabel(element)) {\\r\\n form.label(element.text_label);\\r\\n } else if (this.isTextField(element)) {\\r\\n form.textField(element.label, element.placeholderText || \\\"\\\", { defaultValue: element.defaultValue || \\\"\\\", tooltip: element.tooltip });\\r\\n } else if (this.isToggle(element)) {\\r\\n form.toggle(element.label, { defaultValue: element.defaultValue || false, tooltip: element.tooltip });\\r\\n } else if (this.isSlider(element)) {\\r\\n form.slider(element.label, element.minimumValue, element.maximumValue, {\\r\\n defaultValue: element.defaultValue || 0,\\r\\n valueStep: element.valueStep,\\r\\n tooltip: element.tooltip,\\r\\n });\\r\\n } else if (this.isDropdown(element)) {\\r\\n form.dropdown(element.label, element.options, { defaultValueIndex: element.defaultValueIndex || 0, tooltip: element.tooltip });\\r\\n }\\r\\n });\\r\\n\\r\\n try {\\r\\n const response = await form.show(player);\\r\\n return response;\\r\\n } catch (error) {\\r\\n console.error(\\\"Error showing modal form:\\\", error);\\r\\n throw error;\\r\\n }\\r\\n }\\r\\n\\r\\n /**\\r\\n * Show the form and process the results with a callback\\r\\n */\\r\\n public async showWithCallback(player: Player): Promise<void> {\\r\\n try {\\r\\n const response = await this.show(player);\\r\\n\\r\\n if (response.canceled) {\\r\\n this.callback?.([], true);\\r\\n } else {\\r\\n this.callback?.(response.formValues || [], false);\\r\\n }\\r\\n } catch (error) {\\r\\n console.error(\\\"Error in showWithCallback:\\\", error);\\r\\n this.callback?.([], true);\\r\\n }\\r\\n }\\r\\n\\r\\n // Type guard methods for better type safety\\r\\n private isTextField(element: FormElement): element is IModalFormTextField {\\r\\n return \\\"label\\\" in element && \\\"placeholderText\\\" in element;\\r\\n }\\r\\n\\r\\n private isToggle(element: FormElement): element is IModalFormToggle {\\r\\n return \\\"label\\\" in element && \\\"defaultValue\\\" in element && typeof (element).defaultValue === \\\"boolean\\\";\\r\\n }\\r\\n\\r\\n private isSlider(element: FormElement): element is IModalFormSlider {\\r\\n return \\\"minimumValue\\\" in element && \\\"maximumValue\\\" in element && \\\"valueStep\\\" in element;\\r\\n }\\r\\n\\r\\n private isDropdown(element: FormElement): element is IModalFormDropdown {\\r\\n return \\\"options\\\" in element && Array.isArray((element).options);\\r\\n }\\r\\n\\r\\n private isDivider(element: FormElement): element is IModalFormDivider {\\r\\n return \\\"divider\\\" in element && element.divider === true;\\r\\n }\\r\\n\\r\\n private isHeader(element: FormElement): element is IModalFormHeader {\\r\\n return \\\"text_header\\\" in element;\\r\\n }\\r\\n\\r\\n private isLabel(element: FormElement): element is IModalFormLabel {\\r\\n return \\\"text_label\\\" in element;\\r\\n }\\r\\n}\\r\\n\\r\\nexport { IModalForm };\\r\\n\", \"import { MinecraftColors } from \\\"../class/MinecraftColors.js\\\";\\r\\n\\r\\ndeclare global {\\r\\n interface String {\\r\\n mcColors(): MinecraftColors;\\r\\n }\\r\\n}\\r\\n\\r\\nString.prototype.mcColors = function (): MinecraftColors {\\r\\n return new MinecraftColors(this.toString());\\r\\n};\\r\\n\", \"import { Player } from \\\"@minecraft/server\\\";\\r\\n\\r\\ndeclare global {\\r\\n interface Player {\\r\\n sendToast(title?: string, message?: string, icon?: string, background?: string): void;\\r\\n sendTopbar(message: string): void;\\r\\n stopTopbar(): void;\\r\\n }\\r\\n}\\r\\n\\r\\nfunction adjustTextLength(text = \\\"\\\", totalLength = 100) {\\r\\n return (text.slice(0, totalLength)).padEnd(totalLength, \\\"\\\\t\\\");\\r\\n}\\r\\n\\r\\nPlayer.prototype.sendToast = function (title: string = \\\"\\\", message: string = \\\"\\\", icon: string = \\\"\\\", background: string = \\\"textures/ui/greyBorder\\\"): void {\\r\\n const text = \\\"\\u00A7N\\u00A7O\\u00A7T\\u00A7I\\u00A7F\\u00A7I\\u00A7C\\u00A7A\\u00A7T\\u00A7I\\u00A7O\\u00A7N\\\" + adjustTextLength(title, 100) + adjustTextLength('\\u00A77' + message, 600) + adjustTextLength(icon, 200) + adjustTextLength(background, 200)\\r\\n this.sendMessage(text);\\r\\n this.playSound(\\\"note.harp\\\", { volume: 0.6, pitch: 1.5 });\\r\\n return;\\r\\n};\\r\\n\\r\\nPlayer.prototype.sendTopbar = function (message: string): void {\\r\\n this.onScreenDisplay.setTitle(\\\"\\u00A7m\\u00A7c\\\" + message);\\r\\n return;\\r\\n}\\r\\n\\r\\nPlayer.prototype.stopTopbar = function (): void {\\r\\n this.onScreenDisplay.setTitle(\\\"\\u00A7m\\u00A7c\\\");\\r\\n return;\\r\\n}\\r\\n\\r\\nPlayer.prototype.sendBottomBar = function (message: string): void {\\r\\n this.onScreenDisplay.setTitle(\\\"\\u00A7m\\u00A7e\\\" + message);\\r\\n return;\\r\\n}\\r\\n\\r\\nPlayer.prototype.stopBottomBar = function (): void {\\r\\n this.onScreenDisplay.setTitle(\\\"\\u00A7m\\u00A7e\\\");\\r\\n return;\\r\\n}\"],\n \"mappings\": \"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\",\n \"names\": [\"world\", \"ConfigManagers\", \"name\", \"Config\", \"properties\", \"key\", \"value\", \"serialized\", \"partIndex\", \"offset\", \"chunk\", \"partPrefix\", \"partKeys\", \"id\", \"a\", \"b\", \"aIndex\", \"bIndex\", \"raw\", \"parts\", \"keys\", \"system\", \"EventHandlers\", \"onSubscribe\", \"onUnsubscribe\", \"event\", \"list\", \"args\", \"callback\", \"owner\", \"listeners\", \"hadListeners\", \"keep\", \"l\", \"ownedMatch\", \"cbMatch\", \"payload\", \"listener\", \"stored\", \"collect\", \"owned\", \"callbacks\", \"cb\", \"Logger\", \"prefix\", \"message\", \"type\", \"system\", \"world\", \"world\", \"PlayerManagers\", \"callback\", \"players\", \"player\", \"name\", \"gameMode\", \"ItemActionRegistry\", \"ItemActionManager\", \"plugin\", \"itemId\", \"itemActions\", \"ItemActions\", \"callback\", \"ev\", \"player\", \"items\", \"PluginBase\", \"events\", \"systemBase\", \"PluginEventHandlers\", \"world\", \"system\", \"SettingMenu\", \"PlayerManagers\", \"ItemActionManager\", \"Logger\", \"_ev\", \"enabledSetting\", \"menu\", \"_pl\", \"_plugin\", \"config\", \"pluginSettings\", \"configUnUsedKeys\", \"key\", \"setting\", \"system\", \"PluginManagers\", \"event\", \"plugin\", \"p\", \"instance\", \"name\", \"enabled\", \"config\", \"settings\", \"paused\", \"system\", \"world\", \"CommandPermissionLevel\", \"CustomCommandParamType\", \"CustomCommandStatus\", \"Player\", \"SystemPlugin\", \"PluginBase\", \"ev\", \"origin\", \"args\", \"player\", \"p\", \"SystemBase\", \"options\", \"world\", \"system\", \"EventHandlers\", \"Logger\", \"ConfigManagers\", \"PluginManagers\", \"SettingMenuBuilders\", \"PlayerManagers\", \"ev\", \"event\", \"eventName\", \"isAfter\", \"baseEventName\", \"lowerEventName\", \"typedKey\", \"handler\", \"arg\", \"subscription\", \"_ev\", \"error\", \"SystemPlugin\", \"plugins\", \"pluginLoadCount\", \"plugin\", \"loadDuration\", \"pl\", \"SettingMenuBuilders\", \"menu\", \"plugin\", \"pl\", \"pluginManagers\", \"plugins\", \"settingMain\", \"IActionForm\", \"form\", \"player\", \"settings\", \"SettingMenu\", \"statusText\", \"advancedSettings\", \"showDefaultSettings\", \"res\", \"showAdvancedSettings\", \"settingSelectionMenu\", \"formValues\", \"config\", \"settingsKeys\", \"key\", \"i\", \"value\", \"setting\", \"type\", \"forms\", \"IModalForm\", \"savedValue\", \"defaultValue\", \"MinecraftColors\", \"str\", \"PluginEventHandlers\", \"plugin\", \"eventHandlers\", \"event\", \"listener\", \"payload\", \"ActionFormData\", \"IActionForm\", \"title\", \"body\", \"previousForm\", \"pl\", \"buttons\", \"label\", \"icon\", \"onClick\", \"button\", \"text\", \"header\", \"player\", \"form\", \"buttonIndex\", \"buttonCallbacks\", \"element\", \"response\", \"callback\", \"error\", \"MessageFormData\", \"IMessageForm\", \"_IMessageForm\", \"title\", \"body\", \"text\", \"onClick\", \"button\", \"player\", \"form\", \"response\", \"error\", \"callback\", \"onConfirm\", \"onCancel\", \"onYes\", \"onNo\", \"onOK\", \"onClose\", \"ModalFormData\", \"IModalForm\", \"title\", \"submitButtonText\", \"text\", \"label\", \"placeholderText\", \"defaultValue\", \"tooltip\", \"textField\", \"toggle\", \"minimumValue\", \"maximumValue\", \"valueStep\", \"slider\", \"options\", \"defaultValueIndex\", \"dropdown\", \"header\", \"element\", \"callback\", \"player\", \"form\", \"error\", \"response\", \"MinecraftColors\", \"Player\", \"adjustTextLength\", \"text\", \"totalLength\", \"title\", \"message\", \"icon\", \"background\"]\n}\n",
|
|
10
|
-
"/data/dist/BP/scripts/index.js": "// ../../packages/api/dist/runtimes/class/ConfigManagers.js\nimport { world } from \"@minecraft/server\";\nvar ConfigManagers = class {\n constructor() {\n }\n getConfig(name) {\n return new Config(name);\n }\n clearAll() {\n const properties = world.getDynamicPropertyIds();\n for (const key of properties) {\n if (key.startsWith(\"config.\")) {\n world.setDynamicProperty(key);\n }\n }\n }\n};\nvar Config = class {\n name;\n world;\n prefix;\n maxChunkSize = 32767;\n constructor(name) {\n this.name = name;\n this.world = world;\n this.prefix = `config.${this.name}`;\n }\n set(value) {\n const serialized = JSON.stringify(value);\n this.clear();\n if (serialized.length <= this.maxChunkSize) {\n this.world.setDynamicProperty(this.prefix, serialized);\n return;\n }\n let partIndex = 0;\n for (let offset = 0; offset < serialized.length; offset += this.maxChunkSize) {\n const chunk = serialized.slice(offset, offset + this.maxChunkSize);\n this.world.setDynamicProperty(`${this.prefix}.part${partIndex}`, chunk);\n partIndex++;\n }\n }\n get() {\n const partPrefix = `${this.prefix}.part`;\n const partKeys = this.world.getDynamicPropertyIds().filter((id) => id.startsWith(partPrefix)).sort((a, b) => {\n const aIndex = Number(a.slice(partPrefix.length));\n const bIndex = Number(b.slice(partPrefix.length));\n return aIndex - bIndex;\n });\n let raw = this.world.getDynamicProperty(this.prefix);\n if (partKeys.length > 0) {\n const parts = [];\n for (const key of partKeys) {\n const chunk = this.world.getDynamicProperty(key);\n if (chunk)\n parts.push(chunk);\n }\n raw = parts.join(\"\");\n }\n if (!raw)\n return {};\n return JSON.parse(raw);\n }\n delete() {\n this.clear();\n }\n has(key) {\n const data = this.get();\n return data[key] !== void 0;\n }\n clear() {\n const partPrefix = `${this.prefix}.part`;\n const keys = this.world.getDynamicPropertyIds().filter((id) => id === this.prefix || id.startsWith(partPrefix));\n for (const key of keys) {\n this.world.setDynamicProperty(key);\n }\n }\n};\n\n// ../../packages/api/dist/runtimes/class/EventHanlders.js\nimport { system } from \"@minecraft/server\";\nvar EventHandlers = class {\n autoListeners = /* @__PURE__ */ new Map();\n customListeners = /* @__PURE__ */ new Map();\n onSubscribe;\n onUnsubscribe;\n /** Set callbacks for dynamic subscription management */\n setSubscriptionHandlers(onSubscribe, onUnsubscribe) {\n this.onSubscribe = onSubscribe;\n this.onUnsubscribe = onUnsubscribe;\n }\n /** Check if an event has any listeners */\n hasListeners(event) {\n const listeners = this.getListenerMap(event);\n const list = listeners.get(event);\n return list !== void 0 && list.length > 0;\n }\n on(...args) {\n if (typeof args[0] === \"string\") {\n this.addListener(args[0], args[1]);\n } else {\n this.addListener(args[1], args[2], args[0]);\n }\n }\n addListener(event, callback, owner) {\n const listeners = this.getListenerMap(event);\n const hadListeners = this.hasListeners(event);\n const list = listeners.get(event) ?? [];\n list.push({ owner, cb: callback });\n listeners.set(event, list);\n if (!hadListeners && this.onSubscribe && !event.startsWith(\"Custom\")) {\n this.onSubscribe(event);\n }\n }\n off(...args) {\n if (typeof args[0] === \"string\") {\n this.removeListener(args[0], void 0, args[1]);\n } else {\n this.removeListener(args[1], args[0], args[2]);\n }\n }\n removeListener(event, owner, callback) {\n const listeners = this.getListenerMap(event);\n const list = listeners.get(event);\n if (!list)\n return;\n const keep = [];\n list.forEach((l) => {\n const ownedMatch = owner && l.owner === owner;\n const cbMatch = callback && l.cb === callback;\n if (ownedMatch || cbMatch) {\n return;\n }\n keep.push(l);\n });\n listeners.set(event, keep);\n if (keep.length === 0 && this.onUnsubscribe && !event.startsWith(\"Custom\")) {\n system.run(() => this.onUnsubscribe(event));\n }\n }\n emit(event, payload) {\n const listeners = this.getListenerMap(event);\n const list = listeners.get(event);\n if (!list)\n return;\n for (const listener of list) {\n this.executeListener(listener, payload);\n }\n }\n executeListener(listener, payload) {\n try {\n listener.cb(payload);\n } catch {\n }\n }\n suspendPlugin(owner) {\n const stored = /* @__PURE__ */ new Map();\n const collect = (listeners) => {\n for (const [event, list] of listeners.entries()) {\n const owned = list.filter((listener) => listener.owner === owner);\n if (owned.length === 0)\n continue;\n stored.set(event, owned.map((listener) => listener.cb));\n this.removeListener(event, owner);\n }\n };\n collect(this.autoListeners);\n collect(this.customListeners);\n return stored;\n }\n resumePlugin(owner, listeners) {\n for (const [event, callbacks] of listeners.entries()) {\n for (const cb of callbacks) {\n this.addListener(event, cb, owner);\n }\n }\n }\n getListenerMap(event) {\n return event.startsWith(\"Custom\") ? this.customListeners : this.autoListeners;\n }\n};\n\n// ../../packages/api/dist/runtimes/class/Logger.js\nvar Logger = class {\n prefix;\n constructor(prefix) {\n this.prefix = prefix;\n }\n log(message) {\n this.msg(message, \"LOG\");\n }\n error(message) {\n this.msg(message, \"ERROR\");\n }\n warn(message) {\n this.msg(message, \"WARN\");\n }\n info(message) {\n this.msg(message, \"INFO\");\n }\n debug(message) {\n this.msg(message, \"DEBUG\");\n }\n msg(message, type) {\n console.warn(`[${this.prefix}][${type}] ${message}`);\n }\n};\n\n// ../../packages/api/dist/runtimes/class/PluginBase.js\nimport { system as system2, world as world3 } from \"@minecraft/server\";\n\n// ../../packages/api/dist/runtimes/class/PlayerManagers.js\nimport { world as world2 } from \"@minecraft/server\";\nvar PlayerManagers = class {\n constructor() {\n }\n eachPlayer(callback) {\n const players = this.getAllPlayers();\n for (const player of players) {\n callback(player);\n }\n }\n findPlayerByName(name) {\n const players = this.getAllPlayers();\n for (const player of players) {\n if (player.name === name) {\n return player;\n }\n }\n return null;\n }\n countPlayers() {\n const players = this.getAllPlayers();\n return players.length;\n }\n getAllPlayers() {\n return world2.getPlayers();\n }\n isPlayerGameMode(player, gameMode) {\n return player.getGameMode() === gameMode;\n }\n};\n\n// ../../packages/api/dist/runtimes/class/ItemActionManager.js\nvar ItemActionRegistry = /* @__PURE__ */ new Map();\nvar ItemActionManager = class {\n plugin;\n constructor(plugin) {\n this.plugin = plugin;\n }\n registerItem(itemId) {\n const itemActions = new ItemActions(itemId, this.plugin);\n ItemActionRegistry.set(itemId, itemActions);\n return itemActions;\n }\n getItemActions(itemId) {\n return ItemActionRegistry.get(itemId);\n }\n};\nvar ItemActions = class {\n itemId;\n plugin;\n constructor(itemId, plugin) {\n this.itemId = itemId;\n this.plugin = plugin;\n }\n onUse(callback) {\n this.plugin.events.on(\"AfterItemUse\", (ev) => {\n if (ev.itemStack.typeId !== this.itemId)\n return;\n callback(ev.source, ev.itemStack);\n });\n }\n //WIP\n onHitEntity(callback) {\n this.plugin.events.on(\"AfterEntityHurt\", (ev) => {\n const player = ev.damageSource.damagingEntity;\n const items = player?.getComponent(\"inventory\")?.container.getItem(player.selectedSlotIndex);\n if (!items)\n return;\n callback(player, items, ev.hurtEntity);\n });\n }\n};\n\n// ../../packages/api/dist/runtimes/class/PluginBase.js\nvar PluginBase = class {\n isLoaded = false;\n events;\n name = \"PluginBase\";\n version = \"1.0.0\";\n icon = \"\";\n world;\n system;\n systemBase;\n settingMenu;\n playerManagers;\n itemActionManager;\n isRuntime = false;\n constructor(events, systemBase) {\n this.events = new PluginEventHandlers(this, events);\n this.world = world3;\n this.system = system2;\n this.systemBase = systemBase;\n this.settingMenu = new SettingMenu(this, this.getPluginSettings());\n this.playerManagers = new PlayerManagers();\n this.itemActionManager = new ItemActionManager(this);\n this.system.run(() => {\n if (!this.isEnabled())\n return;\n this.systemBase.pluginManagers.applyPluginState(this);\n this.load();\n });\n }\n get config() {\n return this.systemBase.configManager.getConfig(this.name);\n }\n get logger() {\n return new Logger(this.name.toUpperCase());\n }\n load() {\n this.initializeConfig();\n this.onLoad();\n this.isLoaded = true;\n }\n getName() {\n return this.name;\n }\n onEnable(_ev) {\n }\n onLoad() {\n }\n onDisable(_ev) {\n }\n isEnabled() {\n const config = this.config.get();\n const enabledSetting = config?.[\"Enabled\"];\n if (enabledSetting && \"value\" in enabledSetting) {\n return Boolean(enabledSetting.value);\n }\n if (enabledSetting && \"default\" in enabledSetting) {\n return Boolean(enabledSetting.default);\n }\n return true;\n }\n registerSettings(menu) {\n this.settingMenu = new menu(this, this.getPluginSettings());\n }\n getPluginSettings() {\n return {\n [\"Enabled\"]: {\n description: \"Toggle this plugin on or off.\",\n type: \"boolean\",\n default: true\n },\n ...this.getSettings()\n };\n }\n getSettings() {\n return {};\n }\n getAdvancedSettings(_pl, _plugin) {\n return null;\n }\n initializeConfig() {\n let config = this.config.get();\n if (!config) {\n this.config.set({});\n config = this.config.get();\n }\n const pluginSettings = this.getPluginSettings();\n const configUnUsedKeys = Object.keys(config).filter((key) => !(key in pluginSettings));\n for (const key of configUnUsedKeys) {\n delete config[key];\n }\n for (const [key, setting] of Object.entries(pluginSettings)) {\n if (!(key in config) || config[key]?.type !== setting.type || config[key]?.description !== setting.description || config[key]?.default !== setting.default) {\n config[key] = { ...setting, value: config[key]?.value ?? setting.default };\n }\n }\n this.config.set(config);\n }\n};\n\n// ../../packages/api/dist/runtimes/class/PluginManagers.js\nimport { system as system3 } from \"@minecraft/server\";\nvar PluginManagers = class {\n plugins = /* @__PURE__ */ new Map();\n pausedListeners = /* @__PURE__ */ new Map();\n eventHandlers;\n SystemBase;\n constructor(event, system5) {\n this.eventHandlers = event;\n this.SystemBase = system5;\n }\n registerPlugin(...plugin) {\n for (const p of plugin) {\n const instance = new p(this.eventHandlers, this.SystemBase);\n this.plugins.set(instance.name, instance);\n system3.run(() => this.applyPluginState(instance));\n }\n }\n getPlugin(name) {\n return this.plugins.get(name) || null;\n }\n getPlugins() {\n return Array.from(this.plugins.values());\n }\n isEnabled(name) {\n const plugin = this.plugins.get(name);\n if (!plugin)\n return false;\n return plugin.isEnabled();\n }\n applyPluginState(plugin) {\n if (plugin.isEnabled()) {\n this.enablePlugin(plugin);\n return;\n }\n this.disablePlugin(plugin);\n }\n setPluginEnabled(name, enabled) {\n const plugin = this.plugins.get(name);\n if (!plugin)\n return;\n const config = plugin.config.get() ?? {};\n const settings = plugin.getPluginSettings();\n if (!settings.Enabled)\n return;\n config.Enabled = { ...settings.Enabled, value: enabled };\n plugin.config.set(config);\n this.applyPluginState(plugin);\n }\n disablePlugin(plugin) {\n if (this.pausedListeners.has(plugin.name))\n return;\n const paused = this.eventHandlers.suspendPlugin(plugin);\n this.pausedListeners.set(plugin.name, paused);\n }\n enablePlugin(plugin) {\n const paused = this.pausedListeners.get(plugin.name);\n if (!paused) {\n return;\n }\n console.warn(`Enabling plugin: ${plugin.name}`);\n if (!plugin.isLoaded) {\n console.warn(`Loading plugin fresh: ${plugin.name} (discarding paused listeners to avoid duplicates)`);\n plugin.load();\n this.pausedListeners.delete(plugin.name);\n return;\n }\n this.eventHandlers.resumePlugin(plugin, paused);\n this.pausedListeners.delete(plugin.name);\n }\n};\n\n// ../../packages/api/dist/runtimes/class/SystemBase.js\nimport { system as system4, world as world4 } from \"@minecraft/server\";\n\n// ../../packages/api/dist/runtimes/plugins/SystemPlugin/index.js\nimport { CommandPermissionLevel, CustomCommandParamType, CustomCommandStatus } from \"@minecraft/server\";\nimport { Player } from \"@minecraft/server\";\nvar SystemPlugin = class extends PluginBase {\n isRuntime = true;\n onEnable(ev) {\n ev.customCommandRegistry.registerEnum(\"kisu:plugin_enums\", [\n \"list\",\n \"settings\"\n ]);\n ev.customCommandRegistry.registerCommand({\n name: \"kisu:plugins\",\n description: \"Manage plugins and their settings.\",\n permissionLevel: CommandPermissionLevel.Admin,\n cheatsRequired: false,\n mandatoryParameters: [\n {\n name: \"kisu:plugin_enums\",\n type: CustomCommandParamType.Enum\n }\n ]\n }, (origin, args) => {\n const player = origin.sourceEntity;\n if (!(player instanceof Player))\n return { message: \"Source must be a player\", status: CustomCommandStatus.Failure };\n if (args === \"list\") {\n const plugins = this.systemBase.pluginManagers.getPlugins();\n return { message: ` \\xA7a[Plugins List]\\xA7r\n${plugins.map((p) => ` \\xA7e- ${p.getName()} \\xA77(v${p.version})`).join(\"\\n\")}`, status: CustomCommandStatus.Success };\n } else if (args === \"settings\") {\n this.system.run(() => {\n this.systemBase.settingMenuBuilders.settingMenu(player, this.systemBase.pluginManagers);\n });\n return { status: CustomCommandStatus.Success };\n }\n return { message: \"404\", status: CustomCommandStatus.Failure };\n });\n }\n onLoad() {\n }\n};\n\n// ../../packages/api/dist/runtimes/class/SystemBase.js\nvar SystemBase = class {\n world;\n system;\n configManager;\n events;\n pluginManagers;\n logger;\n settingMenuBuilders;\n playerManagers;\n options = {\n settingItemType: \"minecraft:clock\"\n };\n // Track subscribed handlers alongside their owning signal so we can unsubscribe with the same callback\n eventSubscriptions = /* @__PURE__ */ new Map();\n startTime = Date.now();\n constructor(options) {\n this.world = world4;\n this.system = system4;\n this.events = new EventHandlers();\n this.logger = new Logger(\"SYSTEM\");\n this.configManager = new ConfigManagers();\n this.pluginManagers = new PluginManagers(this.events, this);\n this.settingMenuBuilders = new SettingMenuBuilders();\n this.playerManagers = new PlayerManagers();\n if (options) {\n this.options = { ...this.options, ...options };\n }\n this.setupDynamicEventMapping();\n this.initializeEvents();\n }\n initializeEvents() {\n this.events.on(\"AfterItemUse\", (ev) => {\n if (ev.itemStack.typeId !== this.options.settingItemType)\n return;\n this.settingMenuBuilders.settingMenu(ev.source, this.pluginManagers);\n });\n this.events.on(\"BeforeStartup\", (ev) => this.onStartup(ev));\n this.events.on(\"BeforeShutdown\", (ev) => this.onShutdown(ev));\n system4.runInterval(() => {\n this.events.emit(\"AfterTick\", { currentTick: system4.currentTick });\n });\n }\n setupDynamicEventMapping() {\n this.events.setSubscriptionHandlers((event) => this.subscribeToEvent(event), (event) => {\n this.unsubscribeFromEvent(event);\n });\n }\n subscribeToEvent(eventName) {\n if (this.eventSubscriptions.has(eventName))\n return;\n const isAfter = eventName.startsWith(\"After\");\n const baseEventName = eventName.replace(/^(After|Before)/, \"\");\n const lowerEventName = baseEventName.charAt(0).toLowerCase() + baseEventName.slice(1);\n if (isAfter && lowerEventName in world4.afterEvents) {\n const typedKey = lowerEventName;\n const handler = (arg) => {\n this.events.emit(eventName, arg);\n };\n world4.afterEvents[typedKey].subscribe(handler);\n this.eventSubscriptions.set(eventName, { signal: world4.afterEvents[typedKey], handler });\n } else if (!isAfter && lowerEventName in world4.beforeEvents) {\n const typedKey = lowerEventName;\n const handler = (arg) => {\n this.events.emit(eventName, arg);\n };\n world4.beforeEvents[typedKey].subscribe(handler);\n this.eventSubscriptions.set(eventName, { signal: world4.beforeEvents[typedKey], handler });\n } else if (isAfter && lowerEventName in system4.afterEvents) {\n const typedKey = lowerEventName;\n const handler = (arg) => {\n this.events.emit(eventName, arg);\n };\n system4.afterEvents[typedKey].subscribe(handler);\n this.eventSubscriptions.set(eventName, { signal: system4.afterEvents[typedKey], handler });\n } else if (!isAfter && lowerEventName in system4.beforeEvents) {\n const typedKey = lowerEventName;\n const handler = (arg) => {\n this.events.emit(eventName, arg);\n };\n system4.beforeEvents[typedKey].subscribe(handler);\n this.eventSubscriptions.set(eventName, { signal: system4.beforeEvents[typedKey], handler });\n }\n }\n unsubscribeFromEvent(eventName) {\n const subscription = this.eventSubscriptions.get(eventName);\n if (!subscription)\n return;\n system4.run(() => subscription.signal.unsubscribe(subscription.handler));\n this.eventSubscriptions.delete(eventName);\n }\n onLoad(_ev) {\n }\n onStartup(ev) {\n try {\n this.onLoad(ev);\n } catch (error) {\n this.logger.error(`Error during onLoad: ${error}`);\n }\n this.pluginManagers.registerPlugin(SystemPlugin);\n const plugins = this.pluginManagers.getPlugins();\n let pluginLoadCount = 0;\n for (const plugin of plugins) {\n try {\n plugin.onEnable(ev);\n } catch (error) {\n this.logger.error(`Error during onEnable of plugin ${plugin.name}: ${error}`);\n }\n pluginLoadCount++;\n }\n system4.run(() => {\n const endTime = Date.now();\n const loadDuration = endTime - this.startTime;\n this.playerManagers.eachPlayer((pl) => {\n pl.sendToast(\"\", `${\"Plugin Loaded\".mcColors().grey} (${pluginLoadCount.toString().mcColors().green}/${plugins.length.toString().mcColors().red}) ${`in ${loadDuration}ms`.mcColors().grey}`, \"textures/items/compass_item\", \"textures/ui/greyBorder\");\n });\n });\n }\n onShutdown(ev) {\n const plugins = this.pluginManagers.getPlugins();\n for (const plugin of plugins) {\n plugin.onDisable(ev);\n }\n }\n};\n\n// ../../packages/api/dist/runtimes/class/SettingMenuBuilders.js\nvar SettingMenuBuilders = class {\n menus = /* @__PURE__ */ new Map();\n registerMenu(menu, plugin) {\n this.menus.set(plugin.name, menu);\n }\n settingMenu(pl, pluginManagers) {\n const plugins = pluginManagers.getPlugins();\n const settingMain = new IActionForm(`Settings Menu`, `\\xA7fHello, \\xA7e${pl.name}\\xA7r\n\nThis is the configuration menu.\nYou can manage settings here.`);\n settingMain.addDivider();\n settingMain.addLabel(`\\xA77Plugins (\\xA7c${plugins.length}\\xA77)\\xA7r`);\n for (const plugin of plugins) {\n if (plugin.isRuntime)\n continue;\n this.addPluginButton(settingMain, plugin, pl, pluginManagers);\n }\n settingMain.show(pl);\n }\n addPluginButton(form, plugin, player, pluginManagers) {\n const settings = new SettingMenu(plugin, plugin.getPluginSettings());\n const statusText = plugin.isEnabled() ? \"\\xA72Enabled\" : \"\\xA7cDisabled\";\n form.addButton(`${settings.buttons.name}\n\\xA78[${statusText}\\xA78]`, settings.buttons.icon, () => {\n this.showPluginSettingsPage(plugin, player, pluginManagers);\n });\n }\n showPluginSettingsPage(plugin, player, pluginManagers) {\n const settings = new SettingMenu(plugin, plugin.getPluginSettings());\n const advancedSettings = plugin.getAdvancedSettings(player, plugin);\n const showDefaultSettings = () => {\n const page = settings.getPage();\n page.show(player).then((res) => {\n if (res.canceled)\n return;\n this.savePluginSettings(plugin, res.formValues, pluginManagers);\n this.settingMenu(player, pluginManagers);\n });\n };\n const showAdvancedSettings = () => {\n advancedSettings();\n };\n if (advancedSettings) {\n const settingSelectionMenu = new IActionForm(\"Settings Menu\", \"Choose an option:\");\n settingSelectionMenu.addButton(\"Advanced Settings\", \"textures/ui/settings_glyph_color_2x\", () => {\n showAdvancedSettings();\n });\n settingSelectionMenu.addButton(\"Default Settings\", \"textures/ui/icon_setting\", () => {\n showDefaultSettings();\n });\n settingSelectionMenu.show(player);\n } else {\n showDefaultSettings();\n }\n }\n savePluginSettings(plugin, formValues, pluginManagers) {\n const startIndex = 2;\n const config = plugin.config.get() ?? {};\n const settingsKeysNone = Object.keys(plugin.getPluginSettings());\n const settingsKeys = settingsKeysNone.filter((key) => plugin.getPluginSettings()[key]?.canUserModify !== false);\n for (let i = startIndex; i < formValues.length - 1; i++) {\n const value = formValues[i];\n if (value === void 0)\n continue;\n const key = settingsKeys[i - startIndex];\n if (!key)\n continue;\n const setting = plugin.getPluginSettings()[key];\n if (!setting)\n continue;\n config[key] = {\n ...setting,\n value: this.convertSettingValue(setting.type, value)\n };\n }\n plugin.config.set(config);\n pluginManagers.applyPluginState(plugin);\n }\n convertSettingValue(type, value) {\n switch (type) {\n case \"number\":\n case \"array\":\n return Number(value);\n case \"boolean\":\n return Boolean(value);\n default:\n return String(value);\n }\n }\n};\nvar SettingMenu = class {\n plugin;\n settings;\n constructor(plugin, settings) {\n this.plugin = plugin;\n this.settings = settings;\n }\n get buttons() {\n return {\n name: this.plugin.name,\n description: `Settings for ${this.plugin.name.mcColors().blue} plugin`,\n icon: this.plugin.icon || \"textures/items/compass_item\"\n };\n }\n getPage() {\n const config = this.plugin.config.get() ?? {};\n const forms = new IModalForm(`${this.plugin.name} Settings`, `Save changes.`);\n forms.addLabel(this.buttons.description.mcColors().grey);\n forms.addDivider();\n if (Object.keys(this.settings).length === 0) {\n forms.addLabel(\"\\xA7cNo settings available for this plugin.\\xA7r\");\n forms.addDivider();\n return forms;\n }\n this.addSettingFields(forms, config);\n forms.addDivider();\n return forms;\n }\n addSettingFields(forms, config) {\n for (const [key, setting] of Object.entries(this.settings)) {\n if (setting.canUserModify === false)\n continue;\n const savedValue = config[key]?.value;\n const defaultValue = setting.default;\n switch (setting.type) {\n case \"boolean\":\n forms.addToggle(key, savedValue ?? defaultValue, setting.description);\n break;\n case \"string\":\n forms.addTextField(key, setting.description, savedValue ?? defaultValue, setting.description);\n break;\n case \"number\":\n forms.addSlider(key, 1, setting.maxValue ?? 100, 1, savedValue ?? defaultValue, setting.description);\n break;\n case \"array\":\n forms.addDropdown(key, defaultValue.map(String), typeof savedValue === \"number\" ? savedValue : 0, setting.description);\n break;\n }\n }\n }\n};\n\n// ../../packages/api/dist/runtimes/class/MinecraftColors.js\nvar MinecraftColors = class {\n str;\n constructor(str) {\n this.str = str;\n }\n get grey() {\n return `\\xA77${this.str}\\xA7r`;\n }\n get pink() {\n return `\\xA7d${this.str}\\xA7r`;\n }\n get blackGray() {\n return `\\xA78${this.str}\\xA7r`;\n }\n get darkRed() {\n return `\\xA74${this.str}\\xA7r`;\n }\n get darkGreen() {\n return `\\xA72${this.str}\\xA7r`;\n }\n get darkBlue() {\n return `\\xA71${this.str}\\xA7r`;\n }\n get darkYellow() {\n return `\\xA76${this.str}\\xA7r`;\n }\n get red() {\n return `\\xA7c${this.str}\\xA7r`;\n }\n get green() {\n return `\\xA7a${this.str}\\xA7r`;\n }\n get blue() {\n return `\\xA7b${this.str}\\xA7r`;\n }\n get yellow() {\n return `\\xA7e${this.str}\\xA7r`;\n }\n get white() {\n return `\\xA7f${this.str}\\xA7r`;\n }\n get black() {\n return `\\xA70${this.str}\\xA7r`;\n }\n get bold() {\n return `\\xA7l${this.str}\\xA7r`;\n }\n get italic() {\n return `\\xA7o${this.str}\\xA7r`;\n }\n get underline() {\n return `\\xA7n${this.str}\\xA7r`;\n }\n get strikethrough() {\n return `\\xA7m${this.str}\\xA7r`;\n }\n get obfuscated() {\n return `\\xA7k${this.str}\\xA7r`;\n }\n get reset() {\n return `\\xA7r${this.str}`;\n }\n};\n\n// ../../packages/api/dist/runtimes/class/PluginEventHanlders.js\nvar PluginEventHandlers = class {\n plugin;\n eventHandlers;\n constructor(plugin, eventHandlers) {\n this.plugin = plugin;\n this.eventHandlers = eventHandlers;\n }\n on(event, listener) {\n this.eventHandlers.on(this.plugin, event, listener);\n }\n emit(event, payload) {\n if (typeof event === \"string\" && event.startsWith(\"Custom\")) {\n this.eventHandlers.emit(event, payload);\n } else {\n this.eventHandlers.emit(event, payload);\n }\n }\n};\n\n// ../../packages/api/dist/runtimes/class/forms/IActionForm.js\nimport { ActionFormData } from \"@minecraft/server-ui\";\nvar IActionForm = class {\n title;\n body;\n elements = [];\n previousForm;\n constructor(title = \"\", body = \"\", previousForm) {\n this.title = title;\n this.body = body;\n if (previousForm) {\n this.previousForm = previousForm;\n }\n }\n back(pl) {\n if (this.previousForm)\n this.previousForm(pl);\n return;\n }\n /**\n * Set the form title\n */\n setTitle(title) {\n this.title = title;\n return this;\n }\n /**\n * Set the form body text\n */\n setBody(body) {\n this.body = body;\n return this;\n }\n /**\n * Get the current title\n */\n getTitle() {\n return this.title;\n }\n /**\n * Get the current body text\n */\n getBody() {\n return this.body;\n }\n /**\n * Add multiple buttons at once\n */\n addButtons(buttons) {\n this.elements.push(...buttons);\n return this;\n }\n /**\n * Add a single button\n */\n addButton(label, icon, onClick) {\n this.elements.push({ label, icon, onClick });\n return this;\n }\n /**\n * Add a button object\n */\n addButtonObject(button) {\n this.elements.push(button);\n return this;\n }\n /**\n * Get all buttons from the form\n */\n getButtons() {\n return this.elements.filter(this.isButton);\n }\n /**\n * Add a divider to separate elements\n */\n addDivider() {\n this.elements.push({ divider: true });\n return this;\n }\n /**\n * Get all dividers from the form\n */\n getDividers() {\n return this.elements.filter(this.isDivider);\n }\n /**\n * Add a header text\n */\n addHeader(text) {\n this.elements.push({ text_header: text });\n return this;\n }\n /**\n * Add a header object\n */\n addHeaderObject(header) {\n this.elements.push(header);\n return this;\n }\n /**\n * Get the first header from the form\n */\n getHeader() {\n return this.elements.find(this.isHeader);\n }\n /**\n * Get all headers from the form\n */\n getHeaders() {\n return this.elements.filter(this.isHeader);\n }\n /**\n * Add a label text\n */\n addLabel(text) {\n this.elements.push({ text_label: text });\n return this;\n }\n /**\n * Add a label object\n */\n addLabelObject(label) {\n this.elements.push(label);\n return this;\n }\n /**\n * Get all labels from the form\n */\n getLabels() {\n return this.elements.filter(this.isLabel);\n }\n /**\n * Clear all elements from the form\n */\n clearElements() {\n this.elements = [];\n return this;\n }\n /**\n * Get the total number of elements\n */\n getElementCount() {\n return this.elements.length;\n }\n /**\n * Check if the form has any buttons\n */\n hasButtons() {\n return this.getButtons().length > 0;\n }\n /**\n * Show the form to a player\n */\n async show(player) {\n const form = new ActionFormData();\n form.title(this.title);\n if (this.body !== \"\") {\n form.body(this.body);\n }\n let buttonIndex = 0;\n const buttonCallbacks = [];\n this.elements.forEach((element) => {\n if (this.isDivider(element)) {\n form.divider();\n } else if (this.isHeader(element)) {\n form.header(element.text_header);\n } else if (this.isLabel(element)) {\n form.label(element.text_label);\n } else if (this.isButton(element)) {\n form.button(element.label, element.icon);\n buttonCallbacks[buttonIndex] = element.onClick || (() => {\n });\n buttonIndex++;\n }\n });\n try {\n const response = await form.show(player);\n if (!response.canceled && response.selection !== void 0) {\n const callback = buttonCallbacks[response.selection];\n if (callback) {\n callback();\n }\n }\n return response;\n } catch (error) {\n console.error(\"Error showing form:\", error);\n throw error;\n }\n }\n isButton(element) {\n return \"label\" in element;\n }\n isDivider(element) {\n return \"divider\" in element && element.divider === true;\n }\n isHeader(element) {\n return \"text_header\" in element;\n }\n isLabel(element) {\n return \"text_label\" in element;\n }\n};\n\n// ../../packages/api/dist/runtimes/class/forms/IMessageForm.js\nimport { MessageFormData } from \"@minecraft/server-ui\";\n\n// ../../packages/api/dist/runtimes/class/forms/IModalForm.js\nimport { ModalFormData } from \"@minecraft/server-ui\";\nvar IModalForm = class {\n title;\n elements = [];\n submitButtonText;\n callback;\n constructor(title = \"\", submitButtonText = \"Submit\") {\n this.title = title;\n this.submitButtonText = submitButtonText;\n }\n /**\n * Set the form title\n */\n setTitle(title) {\n this.title = title;\n return this;\n }\n /**\n * Get the current title\n */\n getTitle() {\n return this.title;\n }\n /**\n * Set the submit button text\n */\n setSubmitButton(text) {\n this.submitButtonText = text;\n return this;\n }\n /**\n * Get the submit button text\n */\n getSubmitButtonText() {\n return this.submitButtonText;\n }\n /**\n * Add a text field\n */\n addTextField(label, placeholderText, defaultValue, tooltip) {\n this.elements.push({ label, placeholderText, defaultValue, tooltip });\n return this;\n }\n /**\n * Add a text field object\n */\n addTextFieldObject(textField) {\n this.elements.push(textField);\n return this;\n }\n /**\n * Get all text fields from the form\n */\n getTextFields() {\n return this.elements.filter(this.isTextField);\n }\n /**\n * Add a toggle switch\n */\n addToggle(label, defaultValue, tooltip) {\n this.elements.push({ label, defaultValue, tooltip });\n return this;\n }\n /**\n * Add a toggle object\n */\n addToggleObject(toggle) {\n this.elements.push(toggle);\n return this;\n }\n /**\n * Get all toggles from the form\n */\n getToggles() {\n return this.elements.filter(this.isToggle);\n }\n /**\n * Add a slider\n */\n addSlider(label, minimumValue, maximumValue, valueStep, defaultValue, tooltip) {\n this.elements.push({ label, minimumValue, maximumValue, valueStep, defaultValue, tooltip });\n return this;\n }\n /**\n * Add a slider object\n */\n addSliderObject(slider) {\n this.elements.push(slider);\n return this;\n }\n /**\n * Get all sliders from the form\n */\n getSliders() {\n return this.elements.filter(this.isSlider);\n }\n /**\n * Add a dropdown\n */\n addDropdown(label, options, defaultValueIndex, tooltip) {\n this.elements.push({ label, options, defaultValueIndex, tooltip });\n return this;\n }\n /**\n * Add a dropdown object\n */\n addDropdownObject(dropdown) {\n this.elements.push(dropdown);\n return this;\n }\n /**\n * Get all dropdowns from the form\n */\n getDropdowns() {\n return this.elements.filter(this.isDropdown);\n }\n /**\n * Add a divider to separate elements\n */\n addDivider() {\n this.elements.push({ divider: true });\n return this;\n }\n /**\n * Get all dividers from the form\n */\n getDividers() {\n return this.elements.filter(this.isDivider);\n }\n /**\n * Add a header text\n */\n addHeader(text) {\n this.elements.push({ text_header: text });\n return this;\n }\n /**\n * Add a header object\n */\n addHeaderObject(header) {\n this.elements.push(header);\n return this;\n }\n /**\n * Get the first header from the form\n */\n getHeader() {\n return this.elements.find(this.isHeader);\n }\n /**\n * Get all headers from the form\n */\n getHeaders() {\n return this.elements.filter(this.isHeader);\n }\n /**\n * Add a label text\n */\n addLabel(text) {\n this.elements.push({ text_label: text });\n return this;\n }\n /**\n * Add a label object\n */\n addLabelObject(label) {\n this.elements.push(label);\n return this;\n }\n /**\n * Get all labels from the form\n */\n getLabels() {\n return this.elements.filter(this.isLabel);\n }\n /**\n * Clear all elements from the form\n */\n clearElements() {\n this.elements = [];\n return this;\n }\n /**\n * Get the total number of elements\n */\n getElementCount() {\n return this.elements.length;\n }\n /**\n * Check if the form has any input elements (textField, toggle, slider, dropdown)\n */\n hasInputElements() {\n return this.elements.some((element) => this.isTextField(element) || this.isToggle(element) || this.isSlider(element) || this.isDropdown(element));\n }\n /**\n * Get all elements\n */\n getElements() {\n return this.elements;\n }\n addCallback(callback) {\n this.callback = callback;\n return this;\n }\n /**\n * Show the form to a player and return the response\n */\n async show(player) {\n const form = new ModalFormData();\n form.title(this.title);\n form.submitButton(this.submitButtonText);\n this.elements.forEach((element) => {\n if (this.isDivider(element)) {\n form.divider();\n } else if (this.isHeader(element)) {\n form.label(element.text_header);\n } else if (this.isLabel(element)) {\n form.label(element.text_label);\n } else if (this.isTextField(element)) {\n form.textField(element.label, element.placeholderText || \"\", { defaultValue: element.defaultValue || \"\", tooltip: element.tooltip });\n } else if (this.isToggle(element)) {\n form.toggle(element.label, { defaultValue: element.defaultValue || false, tooltip: element.tooltip });\n } else if (this.isSlider(element)) {\n form.slider(element.label, element.minimumValue, element.maximumValue, {\n defaultValue: element.defaultValue || 0,\n valueStep: element.valueStep,\n tooltip: element.tooltip\n });\n } else if (this.isDropdown(element)) {\n form.dropdown(element.label, element.options, { defaultValueIndex: element.defaultValueIndex || 0, tooltip: element.tooltip });\n }\n });\n try {\n const response = await form.show(player);\n return response;\n } catch (error) {\n console.error(\"Error showing modal form:\", error);\n throw error;\n }\n }\n /**\n * Show the form and process the results with a callback\n */\n async showWithCallback(player) {\n try {\n const response = await this.show(player);\n if (response.canceled) {\n this.callback?.([], true);\n } else {\n this.callback?.(response.formValues || [], false);\n }\n } catch (error) {\n console.error(\"Error in showWithCallback:\", error);\n this.callback?.([], true);\n }\n }\n // Type guard methods for better type safety\n isTextField(element) {\n return \"label\" in element && \"placeholderText\" in element;\n }\n isToggle(element) {\n return \"label\" in element && \"defaultValue\" in element && typeof element.defaultValue === \"boolean\";\n }\n isSlider(element) {\n return \"minimumValue\" in element && \"maximumValue\" in element && \"valueStep\" in element;\n }\n isDropdown(element) {\n return \"options\" in element && Array.isArray(element.options);\n }\n isDivider(element) {\n return \"divider\" in element && element.divider === true;\n }\n isHeader(element) {\n return \"text_header\" in element;\n }\n isLabel(element) {\n return \"text_label\" in element;\n }\n};\n\n// ../../packages/api/dist/runtimes/global/String.js\nString.prototype.mcColors = function() {\n return new MinecraftColors(this.toString());\n};\n\n// ../../packages/api/dist/runtimes/global/Player.js\nimport { Player as Player2 } from \"@minecraft/server\";\nfunction adjustTextLength(text = \"\", totalLength = 100) {\n return text.slice(0, totalLength).padEnd(totalLength, \"\t\");\n}\nPlayer2.prototype.sendToast = function(title = \"\", message = \"\", icon = \"\", background = \"textures/ui/greyBorder\") {\n const text = \"\\xA7N\\xA7O\\xA7T\\xA7I\\xA7F\\xA7I\\xA7C\\xA7A\\xA7T\\xA7I\\xA7O\\xA7N\" + adjustTextLength(title, 100) + adjustTextLength(\"\\xA77\" + message, 600) + adjustTextLength(icon, 200) + adjustTextLength(background, 200);\n this.sendMessage(text);\n this.playSound(\"note.harp\", { volume: 0.6, pitch: 1.5 });\n return;\n};\nPlayer2.prototype.sendTopbar = function(message) {\n this.onScreenDisplay.setTitle(\"\\xA7m\\xA7c\" + message);\n return;\n};\nPlayer2.prototype.stopTopbar = function() {\n this.onScreenDisplay.setTitle(\"\\xA7m\\xA7c\");\n return;\n};\nPlayer2.prototype.sendBottomBar = function(message) {\n this.onScreenDisplay.setTitle(\"\\xA7m\\xA7e\" + message);\n return;\n};\nPlayer2.prototype.stopBottomBar = function() {\n this.onScreenDisplay.setTitle(\"\\xA7m\\xA7e\");\n return;\n};\n\n// packs/scripts/plugins/SamplePlugin/index.ts\nvar SamplePlugin = class extends PluginBase {\n onLoad() {\n this.logger.info(\"SamplePlugin has been loaded!\");\n }\n};\n\n// packs/scripts/index.ts\nvar AxethAPI = class extends SystemBase {\n onLoad() {\n this.pluginManagers.registerPlugin(SamplePlugin);\n }\n};\nnew AxethAPI();\n//# sourceMappingURL=index.js.map\n",
|
|
11
|
-
"/data/dist/BP/scripts/index.js.map": "{\n \"version\": 3,\n \"sources\": [\"../../../../../../packages/api/src/runtimes/class/ConfigManagers.ts\", \"../../../../../../packages/api/src/runtimes/class/EventHanlders.ts\", \"../../../../../../packages/api/src/runtimes/class/Logger.ts\", \"../../../../../../packages/api/src/runtimes/class/PluginBase.ts\", \"../../../../../../packages/api/src/runtimes/class/PlayerManagers.ts\", \"../../../../../../packages/api/src/runtimes/class/ItemActionManager.ts\", \"../../../../../../packages/api/src/runtimes/class/PluginManagers.ts\", \"../../../../../../packages/api/src/runtimes/class/SystemBase.ts\", \"../../../../../../packages/api/src/runtimes/plugins/SystemPlugin/index.ts\", \"../../../../../../packages/api/src/runtimes/class/SettingMenuBuilders.ts\", \"../../../../../../packages/api/src/runtimes/class/MinecraftColors.ts\", \"../../../../../../packages/api/src/runtimes/class/PluginEventHanlders.ts\", \"../../../../../../packages/api/src/runtimes/class/forms/IActionForm.ts\", \"../../../../../../packages/api/src/runtimes/class/forms/IMessageForm.ts\", \"../../../../../../packages/api/src/runtimes/class/forms/IModalForm.ts\", \"../../../../../../packages/api/src/runtimes/global/String.ts\", \"../../../../../../packages/api/src/runtimes/global/Player.ts\", \"../../../../packs/scripts/plugins/SamplePlugin/index.ts\", \"../../../../packs/scripts/index.ts\"],\n \"sourcesContent\": [\"import { world, World } from \\\"@minecraft/server\\\";\\r\\n\\r\\nclass ConfigManagers {\\r\\n constructor() {\\r\\n\\r\\n }\\r\\n\\r\\n public getConfig<T = unknown>(name: string): Config<T> {\\r\\n return new Config<T>(name);\\r\\n }\\r\\n\\r\\n public clearAll() {\\r\\n const properties = world.getDynamicPropertyIds();\\r\\n for (const key of properties) {\\r\\n if (key.startsWith(\\\"config.\\\")) {\\r\\n world.setDynamicProperty(key);\\r\\n }\\r\\n }\\r\\n }\\r\\n}\\r\\n\\r\\nclass Config<T = unknown> {\\r\\n private name: string;\\r\\n private world: World;\\r\\n private prefix: string;\\r\\n private readonly maxChunkSize = 32767;\\r\\n\\r\\n constructor(name: string) {\\r\\n this.name = name;\\r\\n this.world = world;\\r\\n this.prefix = `config.${this.name}`;\\r\\n }\\r\\n\\r\\n set(value: T): void {\\r\\n const serialized = JSON.stringify(value);\\r\\n\\r\\n // Clear existing chunks before writing the new value\\r\\n this.clear();\\r\\n\\r\\n if (serialized.length <= this.maxChunkSize) {\\r\\n this.world.setDynamicProperty(this.prefix, serialized);\\r\\n return;\\r\\n }\\r\\n\\r\\n let partIndex = 0;\\r\\n for (let offset = 0; offset < serialized.length; offset += this.maxChunkSize) {\\r\\n const chunk = serialized.slice(offset, offset + this.maxChunkSize);\\r\\n this.world.setDynamicProperty(`${this.prefix}.part${partIndex}`, chunk);\\r\\n partIndex++;\\r\\n }\\r\\n }\\r\\n\\r\\n get(): T {\\r\\n const partPrefix = `${this.prefix}.part`;\\r\\n const partKeys = this.world\\r\\n .getDynamicPropertyIds()\\r\\n .filter((id) => id.startsWith(partPrefix))\\r\\n .sort((a, b) => {\\r\\n const aIndex = Number(a.slice(partPrefix.length));\\r\\n const bIndex = Number(b.slice(partPrefix.length));\\r\\n return aIndex - bIndex;\\r\\n });\\r\\n\\r\\n let raw = this.world.getDynamicProperty(this.prefix) as string | undefined;\\r\\n\\r\\n if (partKeys.length > 0) {\\r\\n const parts: string[] = [];\\r\\n for (const key of partKeys) {\\r\\n const chunk = this.world.getDynamicProperty(key) as string | undefined;\\r\\n if (chunk) parts.push(chunk);\\r\\n }\\r\\n raw = parts.join(\\\"\\\");\\r\\n }\\r\\n\\r\\n if (!raw) return {} as T;\\r\\n return JSON.parse(raw) as T;\\r\\n }\\r\\n\\r\\n delete(): void {\\r\\n this.clear();\\r\\n }\\r\\n\\r\\n has(key: keyof T): boolean {\\r\\n const data = this.get();\\r\\n return data[key] !== undefined;\\r\\n }\\r\\n\\r\\n clear(): void {\\r\\n const partPrefix = `${this.prefix}.part`;\\r\\n const keys = this.world\\r\\n .getDynamicPropertyIds()\\r\\n .filter((id) => id === this.prefix || id.startsWith(partPrefix));\\r\\n\\r\\n for (const key of keys) {\\r\\n this.world.setDynamicProperty(key);\\r\\n }\\r\\n }\\r\\n}\\r\\n\\r\\nexport { ConfigManagers, Config };\", \"import { PluginBase } from \\\"@axeth/api/runtimes\\\";\\r\\nimport { system } from \\\"@minecraft/server\\\";\\r\\n\\r\\ntype Callback<T> = (payload: T) => void;\\r\\ntype Listener = { owner?: PluginBase; cb: Callback<unknown> };\\r\\n\\r\\nexport class EventHandlers<AutoEvents extends Record<string, unknown>> {\\r\\n private autoListeners = new Map<keyof AutoEvents, Listener[]>();\\r\\n private customListeners = new Map<string, Listener[]>();\\r\\n private onSubscribe?: (event: string) => void;\\r\\n private onUnsubscribe?: (event: string) => void;\\r\\n\\r\\n /** Set callbacks for dynamic subscription management */\\r\\n public setSubscriptionHandlers(\\r\\n onSubscribe: (event: string) => void,\\r\\n onUnsubscribe: (event: string) => void\\r\\n ): void {\\r\\n this.onSubscribe = onSubscribe;\\r\\n this.onUnsubscribe = onUnsubscribe;\\r\\n }\\r\\n\\r\\n /** Check if an event has any listeners */\\r\\n public hasListeners(event: string): boolean {\\r\\n const listeners = this.getListenerMap(event);\\r\\n const list = listeners.get(event);\\r\\n return list !== undefined && list.length > 0;\\r\\n }\\r\\n\\r\\n /** Subscribe to events */\\r\\n public on<K extends keyof AutoEvents>(event: K, callback: Callback<AutoEvents[K]>): void;\\r\\n public on<K extends `Custom${string}`, T>(event: K, callback: Callback<T>): void;\\r\\n public on<K extends keyof AutoEvents>(owner: PluginBase, event: K, callback: Callback<AutoEvents[K]>): void;\\r\\n public on(...args: unknown[]): void {\\r\\n if (typeof args[0] === \\\"string\\\") {\\r\\n this.addListener(args[0], args[1] as Callback<unknown>);\\r\\n } else {\\r\\n this.addListener(args[1] as string, args[2] as Callback<unknown>, args[0] as PluginBase);\\r\\n }\\r\\n }\\r\\n\\r\\n private addListener(event: string, callback: Callback<unknown>, owner?: PluginBase): void {\\r\\n const listeners = this.getListenerMap(event);\\r\\n const hadListeners = this.hasListeners(event);\\r\\n \\r\\n const list = listeners.get(event) ?? [];\\r\\n list.push({ owner, cb: callback });\\r\\n listeners.set(event, list);\\r\\n\\r\\n // Subscribe to event if this is the first listener\\r\\n if (!hadListeners && this.onSubscribe && !event.startsWith(\\\"Custom\\\")) {\\r\\n this.onSubscribe(event);\\r\\n }\\r\\n }\\r\\n\\r\\n /** Unsubscribe */\\r\\n public off<K extends keyof AutoEvents | `Custom${string}`>(event: K, callback: Callback<unknown>): void;\\r\\n public off(owner: PluginBase, event: string, callback?: Callback<unknown>): void;\\r\\n public off(...args: unknown[]): void {\\r\\n if (typeof args[0] === \\\"string\\\") {\\r\\n this.removeListener(args[0], undefined, args[1] as Callback<unknown>);\\r\\n } else {\\r\\n this.removeListener(args[1] as string, args[0] as PluginBase, args[2] as Callback<unknown> | undefined);\\r\\n }\\r\\n }\\r\\n\\r\\n private removeListener(event: string, owner?: PluginBase, callback?: Callback<unknown>): void {\\r\\n const listeners = this.getListenerMap(event);\\r\\n const list = listeners.get(event);\\r\\n if (!list) return;\\r\\n\\r\\n const keep: Listener[] = [];\\r\\n list.forEach((l) => {\\r\\n const ownedMatch = owner && l.owner === owner;\\r\\n const cbMatch = callback && l.cb === callback;\\r\\n\\r\\n if (ownedMatch || cbMatch) {\\r\\n return;\\r\\n }\\r\\n\\r\\n keep.push(l);\\r\\n });\\r\\n\\r\\n listeners.set(event, keep);\\r\\n\\r\\n // Unsubscribe from event if no listeners remain\\r\\n if (keep.length === 0 && this.onUnsubscribe && !event.startsWith(\\\"Custom\\\")) {\\r\\n system.run(() => this.onUnsubscribe!(event));\\r\\n }\\r\\n }\\r\\n\\r\\n /** Emit */\\r\\n public emit<K extends keyof AutoEvents>(event: K, payload: AutoEvents[K]): void;\\r\\n public emit<K extends `Custom${string}`, T>(event: K, payload: T): void;\\r\\n public emit(event: string, payload: unknown): void {\\r\\n const listeners = this.getListenerMap(event);\\r\\n const list = listeners.get(event);\\r\\n if (!list) return;\\r\\n\\r\\n for (const listener of list) {\\r\\n this.executeListener(listener, payload);\\r\\n }\\r\\n }\\r\\n\\r\\n private executeListener(listener: Listener, payload: unknown): void {\\r\\n try {\\r\\n listener.cb(payload);\\r\\n } catch {\\r\\n // Swallow listener errors to avoid breaking emit loop\\r\\n }\\r\\n }\\r\\n\\r\\n public suspendPlugin(owner: PluginBase): Map<string, Callback<unknown>[]> {\\r\\n const stored = new Map<string, Callback<unknown>[]>();\\r\\n\\r\\n const collect = (listeners: Map<string, Listener[]>) => {\\r\\n for (const [event, list] of listeners.entries()) {\\r\\n const owned = list.filter((listener) => listener.owner === owner);\\r\\n if (owned.length === 0) continue;\\r\\n\\r\\n stored.set(event as string, owned.map((listener) => listener.cb));\\r\\n this.removeListener(event as string, owner);\\r\\n }\\r\\n };\\r\\n\\r\\n collect(this.autoListeners as Map<string, Listener[]>);\\r\\n collect(this.customListeners);\\r\\n\\r\\n return stored;\\r\\n }\\r\\n\\r\\n public resumePlugin(owner: PluginBase, listeners: Map<string, Callback<unknown>[]>): void {\\r\\n for (const [event, callbacks] of listeners.entries()) {\\r\\n for (const cb of callbacks) {\\r\\n this.addListener(event, cb, owner);\\r\\n }\\r\\n }\\r\\n }\\r\\n\\r\\n private getListenerMap(event: string): Map<string, Listener[]> {\\r\\n return event.startsWith(\\\"Custom\\\") ? this.customListeners : this.autoListeners as Map<string, Listener[]>;\\r\\n }\\r\\n}\\r\\n\", \"class Logger {\\r\\n private prefix: string;\\r\\n\\r\\n constructor(prefix: string) {\\r\\n this.prefix = prefix;\\r\\n }\\r\\n\\r\\n public log(message: string): void {\\r\\n this.msg(message, \\\"LOG\\\");\\r\\n }\\r\\n\\r\\n public error(message: string): void {\\r\\n this.msg(message, \\\"ERROR\\\");\\r\\n }\\r\\n\\r\\n public warn(message: string): void {\\r\\n this.msg(message, \\\"WARN\\\");\\r\\n }\\r\\n\\r\\n public info(message: string): void {\\r\\n this.msg(message, \\\"INFO\\\");\\r\\n }\\r\\n\\r\\n public debug(message: string): void {\\r\\n this.msg(message, \\\"DEBUG\\\");\\r\\n }\\r\\n\\r\\n private msg(message: string, type: string) {\\r\\n console.warn(`[${this.prefix}][${type}] ${message}`);\\r\\n }\\r\\n}\\r\\n\\r\\nexport { Logger };\", \"import {\\r\\n ShutdownEvent,\\r\\n StartupEvent,\\r\\n System,\\r\\n system,\\r\\n World,\\r\\n world\\r\\n} from \\\"@minecraft/server\\\";\\r\\nimport {\\r\\n Config,\\r\\n EventHandlers,\\r\\n Logger,\\r\\n PluginEventHandlers,\\r\\n type PluginSettingOptions,\\r\\n SettingMenu,\\r\\n SystemBase,\\r\\n type WorldEvents,\\r\\n} from \\\"@axeth/api/runtimes\\\";\\r\\nimport { PlayerManagers } from \\\"./PlayerManagers.js\\\";\\r\\nimport { ItemActionManager } from \\\"./ItemActionManager.js\\\";\\r\\n\\r\\nclass PluginBase {\\r\\n public isLoaded: boolean = false;\\r\\n public events: PluginEventHandlers;\\r\\n public name: string = \\\"PluginBase\\\";\\r\\n public version: string = \\\"1.0.0\\\";\\r\\n public icon: string = \\\"\\\"\\r\\n public world: World;\\r\\n public system: System;\\r\\n public systemBase: SystemBase;\\r\\n public settingMenu: SettingMenu;\\r\\n public playerManagers: PlayerManagers;\\r\\n public itemActionManager: ItemActionManager;\\r\\n public isRuntime: boolean = false;\\r\\n\\r\\n constructor(events: EventHandlers<WorldEvents>, systemBase: SystemBase) {\\r\\n this.events = new PluginEventHandlers(this, events);\\r\\n this.world = world;\\r\\n this.system = system;\\r\\n this.systemBase = systemBase;\\r\\n this.settingMenu = new SettingMenu(this, this.getPluginSettings());\\r\\n this.playerManagers = new PlayerManagers();\\r\\n this.itemActionManager = new ItemActionManager(this);\\r\\n this.system.run(() => {\\r\\n if (!this.isEnabled()) return;\\r\\n this.systemBase.pluginManagers.applyPluginState(this);\\r\\n this.load();\\r\\n });\\r\\n }\\r\\n\\r\\n get config(): Config<PluginSettingOptions> {\\r\\n return this.systemBase.configManager.getConfig(this.name)!;\\r\\n }\\r\\n\\r\\n get logger() {\\r\\n return new Logger(this.name.toUpperCase());\\r\\n }\\r\\n\\r\\n public load() {\\r\\n this.initializeConfig();\\r\\n this.onLoad();\\r\\n this.isLoaded = true;\\r\\n }\\r\\n\\r\\n public getName(): string {\\r\\n return this.name;\\r\\n }\\r\\n\\r\\n public onEnable(_ev: StartupEvent): void {\\r\\n }\\r\\n\\r\\n public onLoad(): void {\\r\\n }\\r\\n\\r\\n public onDisable(_ev: ShutdownEvent): void {\\r\\n }\\r\\n\\r\\n public isEnabled(): boolean {\\r\\n const config = this.config.get();\\r\\n const enabledSetting = (config as PluginSettingOptions | undefined)?.[\\\"Enabled\\\"];\\r\\n\\r\\n if (enabledSetting && \\\"value\\\" in enabledSetting) {\\r\\n return Boolean(enabledSetting.value);\\r\\n }\\r\\n\\r\\n if (enabledSetting && \\\"default\\\" in enabledSetting) {\\r\\n return Boolean(enabledSetting.default);\\r\\n }\\r\\n\\r\\n return true;\\r\\n }\\r\\n\\r\\n public registerSettings(menu: typeof SettingMenu): void {\\r\\n this.settingMenu = new menu(this, this.getPluginSettings());\\r\\n }\\r\\n\\r\\n public getPluginSettings(): PluginSettingOptions {\\r\\n return {\\r\\n [\\\"Enabled\\\"]: {\\r\\n description: \\\"Toggle this plugin on or off.\\\",\\r\\n type: \\\"boolean\\\",\\r\\n default: true,\\r\\n },\\r\\n ...this.getSettings(),\\r\\n };\\r\\n }\\r\\n\\r\\n public getSettings(): PluginSettingOptions {\\r\\n return {};\\r\\n }\\r\\n\\r\\n public getAdvancedSettings(_pl: Player, _plugin: PluginBase): (() => void) | null {\\r\\n return null;\\r\\n }\\r\\n\\r\\n private initializeConfig() {\\r\\n let config = this.config.get();\\r\\n if (!config) {\\r\\n this.config.set({});\\r\\n config = this.config.get()!;\\r\\n }\\r\\n\\r\\n const pluginSettings = this.getPluginSettings();\\r\\n const configUnUsedKeys = Object.keys(config).filter(\\r\\n (key) => !(key in pluginSettings),\\r\\n );\\r\\n for (const key of configUnUsedKeys) {\\r\\n delete config[key];\\r\\n }\\r\\n\\r\\n for (const [key, setting] of Object.entries(pluginSettings)) {\\r\\n if (!(key in config) || config[key]?.type !== setting.type || config[key]?.description !== setting.description || config[key]?.default !== setting.default) {\\r\\n config[key] = { ...setting, value: config[key]?.value ?? setting.default };\\r\\n }\\r\\n }\\r\\n this.config.set(config);\\r\\n }\\r\\n}\\r\\n\\r\\nexport { PluginBase };\\r\\n\", \"import { GameMode, world } from \\\"@minecraft/server\\\";\\r\\nimport { Player } from \\\"@minecraft/server\\\";\\r\\n\\r\\nclass PlayerManagers {\\r\\n constructor() {}\\r\\n\\r\\n public eachPlayer(callback: (player: Player) => void) {\\r\\n const players = this.getAllPlayers();\\r\\n for (const player of players) {\\r\\n callback(player);\\r\\n }\\r\\n }\\r\\n\\r\\n public findPlayerByName(name: string): Player | null {\\r\\n const players = this.getAllPlayers();\\r\\n for (const player of players) {\\r\\n if (player.name === name) {\\r\\n return player;\\r\\n }\\r\\n }\\r\\n return null;\\r\\n }\\r\\n \\r\\n public countPlayers(): number {\\r\\n const players = this.getAllPlayers();\\r\\n return players.length;\\r\\n }\\r\\n\\r\\n public getAllPlayers(): Player[] {\\r\\n return world.getPlayers();\\r\\n }\\r\\n\\r\\n public isPlayerGameMode(player: Player, gameMode: GameMode): boolean {\\r\\n return player.getGameMode() === gameMode;\\r\\n }\\r\\n}\\r\\n\\r\\nexport { PlayerManagers };\", \"import { Entity, ItemStack } from \\\"@minecraft/server\\\";\\r\\nimport { Player } from \\\"@minecraft/server\\\";\\r\\nimport { PluginBase } from \\\"./PluginBase.js\\\";\\r\\n\\r\\nconst ItemActionRegistry = new Map<string, ItemActions>();\\r\\n\\r\\nclass ItemActionManager {\\r\\n private plugin: PluginBase;\\r\\n constructor(plugin: PluginBase) {\\r\\n this.plugin = plugin;\\r\\n }\\r\\n\\r\\n public registerItem(itemId: string): ItemActions {\\r\\n const itemActions = new ItemActions(itemId, this.plugin);\\r\\n ItemActionRegistry.set(itemId, itemActions);\\r\\n return itemActions;\\r\\n }\\r\\n\\r\\n public getItemActions(itemId: string): ItemActions | undefined {\\r\\n return ItemActionRegistry.get(itemId);\\r\\n }\\r\\n}\\r\\n\\r\\nclass ItemActions {\\r\\n private itemId: string;\\r\\n private plugin: PluginBase;\\r\\n constructor(itemId: string, plugin: PluginBase) {\\r\\n this.itemId = itemId;\\r\\n this.plugin = plugin;\\r\\n }\\r\\n\\r\\n public onUse(callback: (player: Player, item: ItemStack) => void) {\\r\\n this.plugin.events.on(\\\"AfterItemUse\\\", (ev) => {\\r\\n if (ev.itemStack.typeId !== this.itemId) return;\\r\\n callback(ev.source, ev.itemStack);\\r\\n });\\r\\n }\\r\\n\\r\\n //WIP\\r\\n public onHitEntity(callback: (player: Player, item: ItemStack, entity: Entity) => void) {\\r\\n this.plugin.events.on(\\\"AfterEntityHurt\\\", (ev) => {\\r\\n const player = ev.damageSource.damagingEntity as Player;\\r\\n const items = player?.getComponent(\\\"inventory\\\")?.container.getItem(player.selectedSlotIndex);\\r\\n if (!items) return;\\r\\n callback(player, items, ev.hurtEntity);\\r\\n });\\r\\n }\\r\\n}\\r\\n\\r\\nexport { ItemActions, ItemActionManager };\", \"import { type WorldEvents, EventHandlers, PluginBase, SystemBase } from \\\"@axeth/api/runtimes\\\";\\r\\nimport { system } from \\\"@minecraft/server\\\";\\r\\n\\r\\nclass PluginManagers {\\r\\n private plugins: Map<string, PluginBase> = new Map();\\r\\n private pausedListeners: Map<string, Map<string, ((payload: unknown) => void)[]>> = new Map();\\r\\n private eventHandlers: EventHandlers<WorldEvents>;\\r\\n private SystemBase: SystemBase;\\r\\n\\r\\n constructor(event: EventHandlers<WorldEvents>, system: SystemBase) {\\r\\n this.eventHandlers = event;\\r\\n this.SystemBase = system;\\r\\n }\\r\\n\\r\\n public registerPlugin(...plugin: typeof PluginBase[]): void {\\r\\n for (const p of plugin) {\\r\\n const instance = new p(this.eventHandlers, this.SystemBase);\\r\\n this.plugins.set(instance.name, instance);\\r\\n system.run(() => this.applyPluginState(instance));\\r\\n }\\r\\n }\\r\\n\\r\\n public getPlugin(name: string): PluginBase | null {\\r\\n return this.plugins.get(name) || null;\\r\\n }\\r\\n\\r\\n public getPlugins(): PluginBase[] {\\r\\n return Array.from(this.plugins.values());\\r\\n }\\r\\n\\r\\n public isEnabled(name: string): boolean {\\r\\n const plugin = this.plugins.get(name);\\r\\n if (!plugin) return false;\\r\\n\\r\\n return plugin.isEnabled();\\r\\n }\\r\\n\\r\\n public applyPluginState(plugin: PluginBase): void {\\r\\n if (plugin.isEnabled()) {\\r\\n this.enablePlugin(plugin);\\r\\n return;\\r\\n }\\r\\n\\r\\n this.disablePlugin(plugin);\\r\\n }\\r\\n\\r\\n public setPluginEnabled(name: string, enabled: boolean): void {\\r\\n const plugin = this.plugins.get(name);\\r\\n if (!plugin) return;\\r\\n\\r\\n const config = plugin.config.get() ?? {};\\r\\n const settings = plugin.getPluginSettings();\\r\\n if (!settings.Enabled) return;\\r\\n config.Enabled = { ...settings.Enabled, value: enabled };\\r\\n plugin.config.set(config);\\r\\n\\r\\n this.applyPluginState(plugin);\\r\\n }\\r\\n\\r\\n private disablePlugin(plugin: PluginBase): void {\\r\\n if (this.pausedListeners.has(plugin.name)) return;\\r\\n\\r\\n const paused = this.eventHandlers.suspendPlugin(plugin);\\r\\n this.pausedListeners.set(plugin.name, paused);\\r\\n }\\r\\n\\r\\n private enablePlugin(plugin: PluginBase): void {\\r\\n const paused = this.pausedListeners.get(plugin.name);\\r\\n if (!paused) {\\r\\n return;\\r\\n }\\r\\n\\r\\n console.warn(`Enabling plugin: ${plugin.name}`);\\r\\n if (!plugin.isLoaded) {\\r\\n console.warn(`Loading plugin fresh: ${plugin.name} (discarding paused listeners to avoid duplicates)`);\\r\\n plugin.load();\\r\\n this.pausedListeners.delete(plugin.name);\\r\\n return;\\r\\n }\\r\\n\\r\\n this.eventHandlers.resumePlugin(plugin, paused);\\r\\n this.pausedListeners.delete(plugin.name);\\r\\n }\\r\\n}\\r\\n\\r\\nexport { PluginManagers };\", \"import {\\r\\n ShutdownEvent,\\r\\n StartupEvent,\\r\\n System,\\r\\n system,\\r\\n SystemAfterEvents,\\r\\n SystemBeforeEvents,\\r\\n World,\\r\\n world,\\r\\n WorldAfterEvents,\\r\\n WorldBeforeEvents,\\r\\n} from \\\"@minecraft/server\\\";\\r\\nimport {\\r\\n ConfigManagers,\\r\\n EventHandlers,\\r\\n Logger,\\r\\n PluginManagers,\\r\\n SettingMenuBuilders,\\r\\n type SystemBaseOptions,\\r\\n type WorldEvents,\\r\\n} from \\\"@axeth/api/runtimes\\\";\\r\\nimport { PlayerManagers } from \\\"./PlayerManagers.js\\\";\\r\\nimport { SystemPlugin } from \\\"../plugins/SystemPlugin/index.js\\\";\\r\\n// import { SystemPlugin } from \\\"../plugins/SystemPlugin/index.js\\\";\\r\\n\\r\\nclass SystemBase {\\r\\n public world: World;\\r\\n public system: System;\\r\\n public configManager: ConfigManagers;\\r\\n public events: EventHandlers<WorldEvents>;\\r\\n public pluginManagers: PluginManagers;\\r\\n public logger: Logger;\\r\\n public settingMenuBuilders: SettingMenuBuilders;\\r\\n public playerManagers: PlayerManagers;\\r\\n private options: SystemBaseOptions = {\\r\\n settingItemType: \\\"minecraft:clock\\\",\\r\\n };\\r\\n \\r\\n // Track subscribed handlers alongside their owning signal so we can unsubscribe with the same callback\\r\\n private eventSubscriptions = new Map<string, { signal: { unsubscribe: (cb: (arg: unknown) => void) => void }; handler: (arg: unknown) => void }>();\\r\\n private startTime: number = Date.now();\\r\\n\\r\\n constructor(options?: SystemBaseOptions) {\\r\\n this.world = world;\\r\\n this.system = system;\\r\\n this.events = new EventHandlers<WorldEvents>();\\r\\n this.logger = new Logger(\\\"SYSTEM\\\");\\r\\n this.configManager = new ConfigManagers();\\r\\n this.pluginManagers = new PluginManagers(this.events, this);\\r\\n this.settingMenuBuilders = new SettingMenuBuilders();\\r\\n this.playerManagers = new PlayerManagers();\\r\\n if (options) {\\r\\n this.options = { ...this.options, ...options };\\r\\n }\\r\\n\\r\\n this.setupDynamicEventMapping();\\r\\n this.initializeEvents();\\r\\n }\\r\\n\\r\\n private initializeEvents() {\\r\\n this.events.on(\\\"AfterItemUse\\\", (ev) => {\\r\\n if (ev.itemStack.typeId !== this.options.settingItemType) return;\\r\\n this.settingMenuBuilders.settingMenu(ev.source, this.pluginManagers);\\r\\n });\\r\\n\\r\\n this.events.on(\\\"BeforeStartup\\\", (ev) => this.onStartup(ev));\\r\\n this.events.on(\\\"BeforeShutdown\\\", (ev) => this.onShutdown(ev));\\r\\n\\r\\n system.runInterval(() => {\\r\\n this.events.emit(\\\"AfterTick\\\", { currentTick: system.currentTick });\\r\\n });\\r\\n }\\r\\n\\r\\n private setupDynamicEventMapping() {\\r\\n this.events.setSubscriptionHandlers(\\r\\n (event) => this.subscribeToEvent(event),\\r\\n (event) => {\\r\\n this.unsubscribeFromEvent(event)\\r\\n },\\r\\n );\\r\\n }\\r\\n\\r\\n private subscribeToEvent(eventName: string) {\\r\\n if (this.eventSubscriptions.has(eventName)) return;\\r\\n\\r\\n const isAfter = eventName.startsWith(\\\"After\\\");\\r\\n const baseEventName = eventName.replace(/^(After|Before)/, \\\"\\\");\\r\\n const lowerEventName = baseEventName.charAt(0).toLowerCase() +\\r\\n baseEventName.slice(1);\\r\\n\\r\\n // Try world events first\\r\\n if (isAfter && lowerEventName in world.afterEvents) {\\r\\n const typedKey = lowerEventName as keyof WorldAfterEvents;\\r\\n const handler = (arg: unknown) => {\\r\\n this.events.emit(eventName as keyof WorldEvents, arg as WorldEvents[keyof WorldEvents]);\\r\\n };\\r\\n world.afterEvents[typedKey].subscribe(handler);\\r\\n this.eventSubscriptions.set(eventName, { signal: world.afterEvents[typedKey], handler });\\r\\n } else if (!isAfter && lowerEventName in world.beforeEvents) {\\r\\n const typedKey = lowerEventName as keyof WorldBeforeEvents;\\r\\n const handler = (arg: unknown) => {\\r\\n this.events.emit(eventName as keyof WorldEvents, arg as WorldEvents[keyof WorldEvents]);\\r\\n };\\r\\n world.beforeEvents[typedKey].subscribe(handler);\\r\\n this.eventSubscriptions.set(eventName, { signal: world.beforeEvents[typedKey], handler });\\r\\n } // Try system events\\r\\n else if (isAfter && lowerEventName in system.afterEvents) {\\r\\n const typedKey = lowerEventName as keyof SystemAfterEvents;\\r\\n const handler = (arg: unknown) => {\\r\\n this.events.emit(eventName as keyof WorldEvents, arg as WorldEvents[keyof WorldEvents]);\\r\\n };\\r\\n system.afterEvents[typedKey].subscribe(handler);\\r\\n this.eventSubscriptions.set(eventName, { signal: system.afterEvents[typedKey], handler });\\r\\n } else if (!isAfter && lowerEventName in system.beforeEvents) {\\r\\n const typedKey = lowerEventName as keyof SystemBeforeEvents;\\r\\n const handler = (arg: unknown) => {\\r\\n this.events.emit(eventName as keyof WorldEvents, arg as WorldEvents[keyof WorldEvents]);\\r\\n };\\r\\n system.beforeEvents[typedKey].subscribe(handler);\\r\\n this.eventSubscriptions.set(eventName, { signal: system.beforeEvents[typedKey], handler });\\r\\n }\\r\\n }\\r\\n\\r\\n private unsubscribeFromEvent(eventName: string) {\\r\\n const subscription = this.eventSubscriptions.get(eventName);\\r\\n if (!subscription) return;\\r\\n\\r\\n system.run(() => subscription.signal.unsubscribe(subscription.handler));\\r\\n this.eventSubscriptions.delete(eventName);\\r\\n }\\r\\n\\r\\n public onLoad(_ev: StartupEvent): void {}\\r\\n\\r\\n private onStartup(ev: StartupEvent): void {\\r\\n try {\\r\\n this.onLoad(ev);\\r\\n } catch (error) {\\r\\n this.logger.error(`Error during onLoad: ${(error as Error)}`);\\r\\n }\\r\\n this.pluginManagers.registerPlugin(SystemPlugin);\\r\\n const plugins = this.pluginManagers.getPlugins();\\r\\n let pluginLoadCount = 0;\\r\\n for (const plugin of plugins) {\\r\\n try {\\r\\n plugin.onEnable(ev);\\r\\n } catch (error) {\\r\\n this.logger.error(\\r\\n `Error during onEnable of plugin ${plugin.name}: ${(error as Error)}`,\\r\\n );\\r\\n }\\r\\n pluginLoadCount++;\\r\\n }\\r\\n\\r\\n system.run(() => {\\r\\n const endTime = Date.now();\\r\\n const loadDuration = endTime - this.startTime;\\r\\n\\r\\n this.playerManagers.eachPlayer((pl) => {\\r\\n pl.sendToast(\\r\\n \\\"\\\",\\r\\n `${\\\"Plugin Loaded\\\".mcColors().grey} (${pluginLoadCount.toString().mcColors().green}/${plugins.length.toString().mcColors().red}) ${`in ${loadDuration}ms`.mcColors().grey}`,\\r\\n \\\"textures/items/compass_item\\\",\\r\\n \\\"textures/ui/greyBorder\\\",\\r\\n );\\r\\n });\\r\\n });\\r\\n }\\r\\n\\r\\n private onShutdown(ev: ShutdownEvent): void {\\r\\n const plugins = this.pluginManagers.getPlugins();\\r\\n for (const plugin of plugins) {\\r\\n plugin.onDisable(ev);\\r\\n }\\r\\n }\\r\\n}\\r\\n\\r\\nexport { SystemBase };\\r\\n\", \"import { StartupEvent } from \\\"@minecraft/server\\\";\\r\\nimport { PluginBase } from \\\"../../class/PluginBase.js\\\";\\r\\nimport { CommandPermissionLevel, CustomCommandParamType, CustomCommandStatus } from \\\"@minecraft/server\\\";\\r\\nimport { Player } from \\\"@minecraft/server\\\";\\r\\n\\r\\nclass SystemPlugin extends PluginBase {\\r\\n public override isRuntime: boolean = true;\\r\\n \\r\\n public override onEnable(ev: StartupEvent): void {\\r\\n ev.customCommandRegistry.registerEnum(\\\"kisu:plugin_enums\\\", [\\r\\n \\\"list\\\",\\r\\n \\\"settings\\\"\\r\\n ])\\r\\n ev.customCommandRegistry.registerCommand({\\r\\n name: \\\"kisu:plugins\\\",\\r\\n description: \\\"Manage plugins and their settings.\\\",\\r\\n permissionLevel: CommandPermissionLevel.Admin,\\r\\n cheatsRequired: false,\\r\\n mandatoryParameters: [\\r\\n {\\r\\n name: \\\"kisu:plugin_enums\\\",\\r\\n type: CustomCommandParamType.Enum\\r\\n }\\r\\n ]\\r\\n }, (origin, args) => {\\r\\n const player = origin.sourceEntity as Player;\\r\\n if (!(player instanceof Player)) return { message: \\\"Source must be a player\\\", status: CustomCommandStatus.Failure }\\r\\n if (args === \\\"list\\\") {\\r\\n const plugins = this.systemBase.pluginManagers.getPlugins();\\r\\n return { message: ` \\u00A7a[Plugins List]\\u00A7r\\\\n${plugins.map(p => ` \\u00A7e- ${p.getName()} \\u00A77(v${p.version})`).join(\\\"\\\\n\\\")}`, status: CustomCommandStatus.Success }\\r\\n } else if (args === \\\"settings\\\") {\\r\\n this.system.run(() => {\\r\\n this.systemBase.settingMenuBuilders.settingMenu(player, this.systemBase.pluginManagers);\\r\\n })\\r\\n return { status: CustomCommandStatus.Success }\\r\\n }\\r\\n return { message: \\\"404\\\", status: CustomCommandStatus.Failure }\\r\\n })\\r\\n }\\r\\n public override onLoad(): void {\\r\\n }\\r\\n}\\r\\n\\r\\nexport { SystemPlugin };\", \"import { Player } from \\\"@minecraft/server\\\";\\r\\nimport {\\r\\n IActionForm,\\r\\n IModalForm,\\r\\n PluginBase,\\r\\n PluginManagers,\\r\\n type PluginSettingOptions,\\r\\n} from \\\"@axeth/api/runtimes\\\";\\r\\n\\r\\nclass SettingMenuBuilders {\\r\\n private menus = new Map<string, SettingMenu>();\\r\\n\\r\\n public registerMenu(menu: SettingMenu, plugin: PluginBase): void {\\r\\n this.menus.set(plugin.name, menu);\\r\\n }\\r\\n\\r\\n public settingMenu(pl: Player, pluginManagers: PluginManagers): void {\\r\\n const plugins = pluginManagers.getPlugins();\\r\\n\\r\\n const settingMain = new IActionForm(\\r\\n `Settings Menu`,\\r\\n `\\u00A7fHello, \\u00A7e${pl.name}\\u00A7r\\\\n\\\\nThis is the configuration menu.\\\\nYou can manage settings here.`,\\r\\n );\\r\\n\\r\\n settingMain.addDivider();\\r\\n settingMain.addLabel(`\\u00A77Plugins (\\u00A7c${plugins.length}\\u00A77)\\u00A7r`);\\r\\n\\r\\n for (const plugin of plugins) {\\r\\n if (plugin.isRuntime) continue;\\r\\n this.addPluginButton(settingMain, plugin, pl, pluginManagers);\\r\\n }\\r\\n\\r\\n settingMain.show(pl);\\r\\n }\\r\\n\\r\\n private addPluginButton(\\r\\n form: IActionForm,\\r\\n plugin: PluginBase,\\r\\n player: Player,\\r\\n pluginManagers: PluginManagers,\\r\\n ): void {\\r\\n const settings = new SettingMenu(plugin, plugin.getPluginSettings());\\r\\n const statusText = plugin.isEnabled() ? \\\"\\u00A72Enabled\\\" : \\\"\\u00A7cDisabled\\\";\\r\\n\\r\\n form.addButton(\\r\\n `${settings.buttons.name}\\\\n\\u00A78[${statusText}\\u00A78]`,\\r\\n settings.buttons.icon,\\r\\n () => {\\r\\n this.showPluginSettingsPage(plugin, player, pluginManagers);\\r\\n },\\r\\n );\\r\\n }\\r\\n\\r\\n private showPluginSettingsPage(\\r\\n plugin: PluginBase,\\r\\n player: Player,\\r\\n pluginManagers: PluginManagers,\\r\\n ): void {\\r\\n const settings = new SettingMenu(plugin, plugin.getPluginSettings());\\r\\n const advancedSettings = plugin.getAdvancedSettings(player, plugin);\\r\\n\\r\\n const showDefaultSettings = () => {\\r\\n const page = settings.getPage();\\r\\n\\r\\n page.show(player).then((res) => {\\r\\n if (res.canceled) return;\\r\\n\\r\\n this.savePluginSettings(\\r\\n plugin,\\r\\n res.formValues as (string | number | boolean)[],\\r\\n pluginManagers,\\r\\n );\\r\\n\\r\\n this.settingMenu(player, pluginManagers);\\r\\n });\\r\\n }\\r\\n\\r\\n const showAdvancedSettings = () => {\\r\\n advancedSettings!();\\r\\n }\\r\\n\\r\\n if (advancedSettings) {\\r\\n const settingSelectionMenu = new IActionForm(\\\"Settings Menu\\\", \\\"Choose an option:\\\");\\r\\n settingSelectionMenu.addButton(\\\"Advanced Settings\\\", \\\"textures/ui/settings_glyph_color_2x\\\", () => {\\r\\n showAdvancedSettings();\\r\\n });\\r\\n settingSelectionMenu.addButton(\\\"Default Settings\\\", \\\"textures/ui/icon_setting\\\", () => {\\r\\n showDefaultSettings();\\r\\n });\\r\\n settingSelectionMenu.show(player);\\r\\n } else {\\r\\n showDefaultSettings();\\r\\n }\\r\\n }\\r\\n\\r\\n private savePluginSettings(\\r\\n plugin: PluginBase,\\r\\n formValues: (string | number | boolean)[],\\r\\n pluginManagers: PluginManagers,\\r\\n ): void {\\r\\n const startIndex = 2; // Skip label and divider\\r\\n const config = plugin.config.get() ?? {};\\r\\n const settingsKeysNone = Object.keys(plugin.getPluginSettings());\\r\\n const settingsKeys = settingsKeysNone.filter(\\r\\n (key) => plugin.getPluginSettings()[key]?.canUserModify !== false,\\r\\n );\\r\\n\\r\\n for (let i = startIndex; i < formValues.length - 1; i++) {\\r\\n const value = formValues[i];\\r\\n if (value === undefined) continue;\\r\\n\\r\\n const key = settingsKeys[i - startIndex];\\r\\n if (!key) continue;\\r\\n const setting = plugin.getPluginSettings()[key];\\r\\n if (!setting) continue;\\r\\n\\r\\n config[key] = {\\r\\n ...setting,\\r\\n value: this.convertSettingValue(setting.type, value),\\r\\n };\\r\\n }\\r\\n\\r\\n plugin.config.set(config);\\r\\n\\r\\n pluginManagers.applyPluginState(plugin);\\r\\n }\\r\\n\\r\\n private convertSettingValue(\\r\\n type: \\\"string\\\" | \\\"number\\\" | \\\"boolean\\\" | \\\"array\\\",\\r\\n value: string | number | boolean,\\r\\n ): string | number | boolean {\\r\\n switch (type) {\\r\\n case \\\"number\\\":\\r\\n case \\\"array\\\":\\r\\n return Number(value);\\r\\n case \\\"boolean\\\":\\r\\n return Boolean(value);\\r\\n default:\\r\\n return String(value);\\r\\n }\\r\\n }\\r\\n}\\r\\n\\r\\nclass SettingMenu {\\r\\n private plugin: PluginBase;\\r\\n private settings: PluginSettingOptions;\\r\\n\\r\\n constructor(plugin: PluginBase, settings: PluginSettingOptions) {\\r\\n this.plugin = plugin;\\r\\n this.settings = settings;\\r\\n }\\r\\n\\r\\n get buttons() {\\r\\n return {\\r\\n name: this.plugin.name,\\r\\n description: `Settings for ${this.plugin.name.mcColors().blue} plugin`,\\r\\n icon: this.plugin.icon || \\\"textures/items/compass_item\\\",\\r\\n };\\r\\n }\\r\\n\\r\\n public getPage(): IModalForm {\\r\\n const config = this.plugin.config.get() ?? {};\\r\\n\\r\\n const forms = new IModalForm(\\r\\n `${this.plugin.name} Settings`,\\r\\n `Save changes.`,\\r\\n );\\r\\n\\r\\n forms.addLabel(this.buttons.description.mcColors().grey);\\r\\n forms.addDivider();\\r\\n\\r\\n if (Object.keys(this.settings).length === 0) {\\r\\n forms.addLabel(\\\"\\u00A7cNo settings available for this plugin.\\u00A7r\\\");\\r\\n forms.addDivider();\\r\\n return forms;\\r\\n }\\r\\n\\r\\n this.addSettingFields(forms, config);\\r\\n\\r\\n forms.addDivider();\\r\\n return forms;\\r\\n }\\r\\n\\r\\n private addSettingFields(\\r\\n forms: IModalForm,\\r\\n config: PluginSettingOptions,\\r\\n ): void {\\r\\n for (const [key, setting] of Object.entries(this.settings)) {\\r\\n if (setting.canUserModify === false) continue;\\r\\n\\r\\n const savedValue = config[key]?.value;\\r\\n const defaultValue = setting.default;\\r\\n\\r\\n switch (setting.type) {\\r\\n case \\\"boolean\\\":\\r\\n forms.addToggle(\\r\\n key,\\r\\n (savedValue ?? defaultValue) as boolean,\\r\\n setting.description,\\r\\n );\\r\\n break;\\r\\n\\r\\n case \\\"string\\\":\\r\\n forms.addTextField(\\r\\n key,\\r\\n setting.description,\\r\\n (savedValue ?? defaultValue) as string,\\r\\n setting.description,\\r\\n );\\r\\n break;\\r\\n\\r\\n case \\\"number\\\":\\r\\n forms.addSlider(\\r\\n key,\\r\\n 1,\\r\\n setting.maxValue ?? 100,\\r\\n 1,\\r\\n (savedValue ?? defaultValue) as number,\\r\\n setting.description,\\r\\n );\\r\\n break;\\r\\n\\r\\n case \\\"array\\\":\\r\\n forms.addDropdown(\\r\\n key,\\r\\n (defaultValue as (string | number | boolean)[]).map(String),\\r\\n typeof savedValue === \\\"number\\\" ? savedValue : 0,\\r\\n setting.description,\\r\\n );\\r\\n break;\\r\\n }\\r\\n }\\r\\n }\\r\\n}\\r\\n\\r\\nexport { SettingMenu, SettingMenuBuilders };\\r\\n\", \"class MinecraftColors {\\r\\n constructor(private str: string) {}\\r\\n\\r\\n get grey(): string {\\r\\n return `\\u00A77${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get pink(): string {\\r\\n return `\\u00A7d${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get blackGray(): string {\\r\\n return `\\u00A78${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get darkRed(): string {\\r\\n return `\\u00A74${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get darkGreen(): string {\\r\\n return `\\u00A72${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get darkBlue(): string {\\r\\n return `\\u00A71${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get darkYellow(): string {\\r\\n return `\\u00A76${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get red(): string {\\r\\n return `\\u00A7c${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get green(): string {\\r\\n return `\\u00A7a${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get blue(): string {\\r\\n return `\\u00A7b${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get yellow(): string {\\r\\n return `\\u00A7e${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get white(): string {\\r\\n return `\\u00A7f${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get black(): string {\\r\\n return `\\u00A70${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get bold(): string {\\r\\n return `\\u00A7l${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get italic(): string {\\r\\n return `\\u00A7o${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get underline(): string {\\r\\n return `\\u00A7n${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get strikethrough(): string {\\r\\n return `\\u00A7m${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get obfuscated(): string {\\r\\n return `\\u00A7k${this.str}\\u00A7r`;\\r\\n }\\r\\n\\r\\n get reset(): string {\\r\\n return `\\u00A7r${this.str}`;\\r\\n }\\r\\n}\\r\\n\\r\\nexport { MinecraftColors };\", \"import { EventHandlers, PluginBase, type WorldEvents } from \\\"@axeth/api/runtimes\\\";\\r\\n\\r\\nclass PluginEventHandlers {\\r\\n private plugin: PluginBase;\\r\\n private eventHandlers: EventHandlers<WorldEvents>;\\r\\n\\r\\n constructor(plugin: PluginBase, eventHandlers: EventHandlers<WorldEvents>) {\\r\\n this.plugin = plugin;\\r\\n this.eventHandlers = eventHandlers;\\r\\n }\\r\\n on<K extends `Custom${string}`, T>(\\r\\n event: K,\\r\\n listener: (payload: T) => void,\\r\\n ): void;\\r\\n on<T extends keyof WorldEvents>(\\r\\n event: T,\\r\\n listener: (payload: WorldEvents[T]) => void,\\r\\n ): void;\\r\\n on(event: unknown, listener: unknown): void {\\r\\n this.eventHandlers.on(this.plugin, event as keyof WorldEvents, listener as (payload: unknown) => void);\\r\\n }\\r\\n emit<K extends `Custom${string}`, T>(event: K, payload: T): void;\\r\\n emit<T extends keyof WorldEvents>(event: T, payload: WorldEvents[T]): void;\\r\\n emit(event: unknown, payload: unknown): void {\\r\\n if (typeof event === 'string' && event.startsWith('Custom')) {\\r\\n this.eventHandlers.emit(event as `Custom${string}`, payload);\\r\\n } else {\\r\\n this.eventHandlers.emit(event as keyof WorldEvents, payload as WorldEvents[keyof WorldEvents]);\\r\\n }\\r\\n }\\r\\n}\\r\\n\\r\\nexport { PluginEventHandlers };\\r\\n\", \"import { ActionFormData, ActionFormResponse } from \\\"@minecraft/server-ui\\\";\\r\\nimport type { IActionFormButton, IActionFormDivider, IActionFormHeader, IActionFormLabel } from \\\"@axeth/api/runtimes\\\";\\r\\nimport { Player } from \\\"@minecraft/server\\\";\\r\\n\\r\\ntype FormElement = IActionFormButton | IActionFormDivider | IActionFormHeader | IActionFormLabel;\\r\\n\\r\\nclass IActionForm {\\r\\n private title: string;\\r\\n private body: string;\\r\\n private elements: FormElement[] = [];\\r\\n private previousForm?: (pl: Player) => void;\\r\\n\\r\\n constructor(title: string = \\\"\\\", body: string = \\\"\\\", previousForm?: (pl: Player) => void) {\\r\\n this.title = title;\\r\\n this.body = body;\\r\\n if (previousForm) {\\r\\n this.previousForm = previousForm;\\r\\n }\\r\\n }\\r\\n\\r\\n public back(pl: Player) {\\r\\n if (this.previousForm) this.previousForm(pl);\\r\\n return;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Set the form title\\r\\n */\\r\\n public setTitle(title: string): this {\\r\\n this.title = title;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Set the form body text\\r\\n */\\r\\n public setBody(body: string): this {\\r\\n this.body = body;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get the current title\\r\\n */\\r\\n public getTitle(): string {\\r\\n return this.title;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get the current body text\\r\\n */\\r\\n public getBody(): string {\\r\\n return this.body;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add multiple buttons at once\\r\\n */\\r\\n public addButtons(buttons: IActionFormButton[]): this {\\r\\n this.elements.push(...buttons);\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a single button\\r\\n */\\r\\n public addButton(label: string, icon?: string, onClick?: () => void): this {\\r\\n this.elements.push({ label, icon, onClick });\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a button object\\r\\n */\\r\\n public addButtonObject(button: IActionFormButton): this {\\r\\n this.elements.push(button);\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all buttons from the form\\r\\n */\\r\\n public getButtons(): IActionFormButton[] {\\r\\n return this.elements.filter(this.isButton);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a divider to separate elements\\r\\n */\\r\\n public addDivider(): this {\\r\\n this.elements.push({ divider: true });\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all dividers from the form\\r\\n */\\r\\n public getDividers(): IActionFormDivider[] {\\r\\n return this.elements.filter(this.isDivider);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a header text\\r\\n */\\r\\n public addHeader(text: string): this {\\r\\n this.elements.push({ text_header: text });\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a header object\\r\\n */\\r\\n public addHeaderObject(header: IActionFormHeader): this {\\r\\n this.elements.push(header);\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get the first header from the form\\r\\n */\\r\\n public getHeader(): IActionFormHeader | undefined {\\r\\n return this.elements.find(this.isHeader);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all headers from the form\\r\\n */\\r\\n public getHeaders(): IActionFormHeader[] {\\r\\n return this.elements.filter(this.isHeader);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a label text\\r\\n */\\r\\n public addLabel(text: string): this {\\r\\n this.elements.push({ text_label: text });\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a label object\\r\\n */\\r\\n public addLabelObject(label: IActionFormLabel): this {\\r\\n this.elements.push(label);\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all labels from the form\\r\\n */\\r\\n public getLabels(): IActionFormLabel[] {\\r\\n return this.elements.filter(this.isLabel);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Clear all elements from the form\\r\\n */\\r\\n public clearElements(): this {\\r\\n this.elements = [];\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get the total number of elements\\r\\n */\\r\\n public getElementCount(): number {\\r\\n return this.elements.length;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Check if the form has any buttons\\r\\n */\\r\\n public hasButtons(): boolean {\\r\\n return this.getButtons().length > 0;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Show the form to a player\\r\\n */\\r\\n public async show(player: Player): Promise<ActionFormResponse> {\\r\\n const form = new ActionFormData();\\r\\n form.title(this.title);\\r\\n if (this.body !== \\\"\\\") {\\r\\n form.body(this.body);\\r\\n }\\r\\n\\r\\n // Track button indices for callback handling\\r\\n let buttonIndex = 0;\\r\\n const buttonCallbacks: (() => void)[] = [];\\r\\n\\r\\n this.elements.forEach((element) => {\\r\\n if (this.isDivider(element)) {\\r\\n form.divider();\\r\\n } else if (this.isHeader(element)) {\\r\\n form.header(element.text_header);\\r\\n } else if (this.isLabel(element)) {\\r\\n form.label(element.text_label);\\r\\n } else if (this.isButton(element)) {\\r\\n form.button(element.label, element.icon);\\r\\n buttonCallbacks[buttonIndex] = element.onClick || (() => {});\\r\\n buttonIndex++;\\r\\n }\\r\\n });\\r\\n\\r\\n try {\\r\\n const response = await form.show(player);\\r\\n\\r\\n if (!response.canceled && response.selection !== undefined) {\\r\\n const callback = buttonCallbacks[response.selection];\\r\\n if (callback) {\\r\\n callback();\\r\\n }\\r\\n }\\r\\n\\r\\n return response;\\r\\n } catch (error) {\\r\\n console.error(\\\"Error showing form:\\\", error);\\r\\n throw error;\\r\\n }\\r\\n }\\r\\n\\r\\n private isButton(element: FormElement): element is IActionFormButton {\\r\\n return \\\"label\\\" in element;\\r\\n }\\r\\n\\r\\n private isDivider(element: FormElement): element is IActionFormDivider {\\r\\n return \\\"divider\\\" in element && element.divider === true;\\r\\n }\\r\\n\\r\\n private isHeader(element: FormElement): element is IActionFormHeader {\\r\\n return \\\"text_header\\\" in element;\\r\\n }\\r\\n\\r\\n private isLabel(element: FormElement): element is IActionFormLabel {\\r\\n return \\\"text_label\\\" in element;\\r\\n }\\r\\n}\\r\\n\\r\\nexport { IActionForm };\\r\\n\", \"import { MessageFormData, MessageFormResponse } from \\\"@minecraft/server-ui\\\";\\r\\nimport { Player } from \\\"@minecraft/server\\\";\\r\\nimport type { IMessageFormButton } from \\\"@axeth/api/runtimes\\\";\\r\\n\\r\\nclass IMessageForm {\\r\\n private title: string;\\r\\n private body: string;\\r\\n private button1: IMessageFormButton | null = null;\\r\\n private button2: IMessageFormButton | null = null;\\r\\n\\r\\n constructor(title: string = \\\"\\\", body: string = \\\"\\\") {\\r\\n this.title = title;\\r\\n this.body = body;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Set the form title\\r\\n */\\r\\n public setTitle(title: string): this {\\r\\n this.title = title;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Set the form body text\\r\\n */\\r\\n public setBody(body: string): this {\\r\\n this.body = body;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get the current title\\r\\n */\\r\\n public getTitle(): string {\\r\\n return this.title;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get the current body text\\r\\n */\\r\\n public getBody(): string {\\r\\n return this.body;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Set button 1 (left button)\\r\\n */\\r\\n public setButton1(text: string, onClick?: () => void): this {\\r\\n this.button1 = { text, onClick };\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Set button 1 object\\r\\n */\\r\\n public setButton1Object(button: IMessageFormButton): this {\\r\\n this.button1 = button;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Set button 2 (right button)\\r\\n */\\r\\n public setButton2(text: string, onClick?: () => void): this {\\r\\n this.button2 = { text, onClick };\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Set button 2 object\\r\\n */\\r\\n public setButton2Object(button: IMessageFormButton): this {\\r\\n this.button2 = button;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get button 1\\r\\n */\\r\\n public getButton1(): IMessageFormButton | null {\\r\\n return this.button1;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get button 2\\r\\n */\\r\\n public getButton2(): IMessageFormButton | null {\\r\\n return this.button2;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Check if button 1 is set\\r\\n */\\r\\n public hasButton1(): boolean {\\r\\n return this.button1 !== null;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Check if button 2 is set\\r\\n */\\r\\n public hasButton2(): boolean {\\r\\n return this.button2 !== null;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Check if any buttons are set\\r\\n */\\r\\n public hasButtons(): boolean {\\r\\n return this.button1 !== null || this.button2 !== null;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Clear all buttons\\r\\n */\\r\\n public clearButtons(): this {\\r\\n this.button1 = null;\\r\\n this.button2 = null;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Clear button 1\\r\\n */\\r\\n public clearButton1(): this {\\r\\n this.button1 = null;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Clear button 2\\r\\n */\\r\\n public clearButton2(): this {\\r\\n this.button2 = null;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Show the form to a player and return the response\\r\\n */\\r\\n public async show(player: Player): Promise<MessageFormResponse> {\\r\\n const form = new MessageFormData();\\r\\n form.title(this.title);\\r\\n form.body(this.body);\\r\\n\\r\\n if (this.button1) {\\r\\n form.button1(this.button1.text);\\r\\n }\\r\\n\\r\\n if (this.button2) {\\r\\n form.button2(this.button2.text);\\r\\n }\\r\\n\\r\\n try {\\r\\n const response = await form.show(player);\\r\\n\\r\\n // Handle button callbacks\\r\\n if (!response.canceled && response.selection !== undefined) {\\r\\n if (response.selection === 0 && this.button1 && this.button1.onClick) {\\r\\n this.button1.onClick();\\r\\n } else if (response.selection === 1 && this.button2 && this.button2.onClick) {\\r\\n this.button2.onClick();\\r\\n }\\r\\n }\\r\\n\\r\\n return response;\\r\\n } catch (error) {\\r\\n console.error(\\\"Error showing message form:\\\", error);\\r\\n throw error;\\r\\n }\\r\\n }\\r\\n\\r\\n /**\\r\\n * Show the form and process the results with a callback\\r\\n */\\r\\n public async showWithCallback(\\r\\n player: Player,\\r\\n callback: (selection: number | undefined, canceled: boolean) => void\\r\\n ): Promise<void> {\\r\\n try {\\r\\n const response = await this.show(player);\\r\\n\\r\\n if (response.canceled) {\\r\\n callback(undefined, true);\\r\\n } else {\\r\\n callback(response.selection, false);\\r\\n }\\r\\n } catch (error) {\\r\\n console.error(\\\"Error in showWithCallback:\\\", error);\\r\\n callback(undefined, true);\\r\\n }\\r\\n }\\r\\n\\r\\n /**\\r\\n * Create a simple confirmation dialog\\r\\n */\\r\\n public static createConfirmation(\\r\\n title: string,\\r\\n body: string,\\r\\n onConfirm?: () => void,\\r\\n onCancel?: () => void\\r\\n ): IMessageForm {\\r\\n return new IMessageForm(title, body).setButton1(\\\"Cancel\\\", onCancel).setButton2(\\\"Confirm\\\", onConfirm);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Create a simple yes/no dialog\\r\\n */\\r\\n public static createYesNo(title: string, body: string, onYes?: () => void, onNo?: () => void): IMessageForm {\\r\\n return new IMessageForm(title, body).setButton1(\\\"No\\\", onNo).setButton2(\\\"Yes\\\", onYes);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Create a simple OK dialog\\r\\n */\\r\\n public static createOK(title: string, body: string, onOK?: () => void): IMessageForm {\\r\\n return new IMessageForm(title, body).setButton1(\\\"OK\\\", onOK);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Create a simple alert dialog\\r\\n */\\r\\n public static createAlert(title: string, body: string, onClose?: () => void): IMessageForm {\\r\\n return new IMessageForm(title, body).setButton1(\\\"Close\\\", onClose);\\r\\n }\\r\\n}\\r\\n\\r\\nexport { IMessageForm };\\r\\n\", \"import { ModalFormData, ModalFormResponse } from \\\"@minecraft/server-ui\\\";\\r\\nimport { Player } from \\\"@minecraft/server\\\";\\r\\nimport type { IModalFormTextField, IModalFormToggle, IModalFormSlider, IModalFormDropdown, IModalFormHeader, IModalFormLabel, IModalFormDivider } from \\\"@axeth/api/runtimes\\\";\\r\\n\\r\\ntype FormElement =\\r\\n | IModalFormTextField\\r\\n | IModalFormToggle\\r\\n | IModalFormSlider\\r\\n | IModalFormDropdown\\r\\n | IModalFormDivider\\r\\n | IModalFormHeader\\r\\n | IModalFormLabel;\\r\\n\\r\\nclass IModalForm {\\r\\n private title: string;\\r\\n private elements: FormElement[] = [];\\r\\n private submitButtonText: string;\\r\\n private callback?: (formValues: (string | number | boolean | undefined)[], canceled: boolean) => void;\\r\\n\\r\\n constructor(title: string = \\\"\\\", submitButtonText: string = \\\"Submit\\\") {\\r\\n this.title = title;\\r\\n this.submitButtonText = submitButtonText;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Set the form title\\r\\n */\\r\\n public setTitle(title: string): this {\\r\\n this.title = title;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get the current title\\r\\n */\\r\\n public getTitle(): string {\\r\\n return this.title;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Set the submit button text\\r\\n */\\r\\n public setSubmitButton(text: string): this {\\r\\n this.submitButtonText = text;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get the submit button text\\r\\n */\\r\\n public getSubmitButtonText(): string {\\r\\n return this.submitButtonText;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a text field\\r\\n */\\r\\n public addTextField(label: string, placeholderText?: string, defaultValue?: string, tooltip?: string): this {\\r\\n this.elements.push({ label, placeholderText, defaultValue, tooltip });\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a text field object\\r\\n */\\r\\n public addTextFieldObject(textField: IModalFormTextField): this {\\r\\n this.elements.push(textField);\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all text fields from the form\\r\\n */\\r\\n public getTextFields(): IModalFormTextField[] {\\r\\n return this.elements.filter(this.isTextField);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a toggle switch\\r\\n */\\r\\n public addToggle(label: string, defaultValue?: boolean, tooltip?: string): this {\\r\\n this.elements.push({ label, defaultValue, tooltip });\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a toggle object\\r\\n */\\r\\n public addToggleObject(toggle: IModalFormToggle): this {\\r\\n this.elements.push(toggle);\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all toggles from the form\\r\\n */\\r\\n public getToggles(): IModalFormToggle[] {\\r\\n return this.elements.filter(this.isToggle);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a slider\\r\\n */\\r\\n public addSlider(\\r\\n label: string,\\r\\n minimumValue: number,\\r\\n maximumValue: number,\\r\\n valueStep: number,\\r\\n defaultValue?: number,\\r\\n tooltip?: string\\r\\n ): this {\\r\\n this.elements.push({ label, minimumValue, maximumValue, valueStep, defaultValue, tooltip });\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a slider object\\r\\n */\\r\\n public addSliderObject(slider: IModalFormSlider): this {\\r\\n this.elements.push(slider);\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all sliders from the form\\r\\n */\\r\\n public getSliders(): IModalFormSlider[] {\\r\\n return this.elements.filter(this.isSlider);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a dropdown\\r\\n */\\r\\n public addDropdown(label: string, options: string[], defaultValueIndex?: number, tooltip?: string): this {\\r\\n this.elements.push({ label, options, defaultValueIndex, tooltip });\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a dropdown object\\r\\n */\\r\\n public addDropdownObject(dropdown: IModalFormDropdown): this {\\r\\n this.elements.push(dropdown);\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all dropdowns from the form\\r\\n */\\r\\n public getDropdowns(): IModalFormDropdown[] {\\r\\n return this.elements.filter(this.isDropdown);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a divider to separate elements\\r\\n */\\r\\n public addDivider(): this {\\r\\n this.elements.push({ divider: true });\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all dividers from the form\\r\\n */\\r\\n public getDividers(): IModalFormDivider[] {\\r\\n return this.elements.filter(this.isDivider);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a header text\\r\\n */\\r\\n public addHeader(text: string): this {\\r\\n this.elements.push({ text_header: text });\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a header object\\r\\n */\\r\\n public addHeaderObject(header: IModalFormHeader): this {\\r\\n this.elements.push(header);\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get the first header from the form\\r\\n */\\r\\n public getHeader(): IModalFormHeader | undefined {\\r\\n return this.elements.find(this.isHeader);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all headers from the form\\r\\n */\\r\\n public getHeaders(): IModalFormHeader[] {\\r\\n return this.elements.filter(this.isHeader);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a label text\\r\\n */\\r\\n public addLabel(text: string): this {\\r\\n this.elements.push({ text_label: text });\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Add a label object\\r\\n */\\r\\n public addLabelObject(label: IModalFormLabel): this {\\r\\n this.elements.push(label);\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all labels from the form\\r\\n */\\r\\n public getLabels(): IModalFormLabel[] {\\r\\n return this.elements.filter(this.isLabel);\\r\\n }\\r\\n\\r\\n /**\\r\\n * Clear all elements from the form\\r\\n */\\r\\n public clearElements(): this {\\r\\n this.elements = [];\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get the total number of elements\\r\\n */\\r\\n public getElementCount(): number {\\r\\n return this.elements.length;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Check if the form has any input elements (textField, toggle, slider, dropdown)\\r\\n */\\r\\n public hasInputElements(): boolean {\\r\\n return this.elements.some(\\r\\n (element) =>\\r\\n this.isTextField(element) || this.isToggle(element) || this.isSlider(element) || this.isDropdown(element)\\r\\n );\\r\\n }\\r\\n\\r\\n /**\\r\\n * Get all elements\\r\\n */\\r\\n public getElements(): FormElement[] {\\r\\n return this.elements;\\r\\n }\\r\\n\\r\\n public addCallback(callback: (formValues: (string | number | boolean | undefined)[], canceled: boolean) => void): this {\\r\\n this.callback = callback;\\r\\n return this;\\r\\n }\\r\\n\\r\\n /**\\r\\n * Show the form to a player and return the response\\r\\n */\\r\\n public async show(player: Player): Promise<ModalFormResponse> {\\r\\n const form = new ModalFormData();\\r\\n form.title(this.title);\\r\\n form.submitButton(this.submitButtonText);\\r\\n\\r\\n this.elements.forEach((element) => {\\r\\n if (this.isDivider(element)) {\\r\\n form.divider();\\r\\n } else if (this.isHeader(element)) {\\r\\n // Note: ModalFormData doesn't have a header method, incorporating into divider or label\\r\\n form.label(element.text_header);\\r\\n } else if (this.isLabel(element)) {\\r\\n form.label(element.text_label);\\r\\n } else if (this.isTextField(element)) {\\r\\n form.textField(element.label, element.placeholderText || \\\"\\\", { defaultValue: element.defaultValue || \\\"\\\", tooltip: element.tooltip });\\r\\n } else if (this.isToggle(element)) {\\r\\n form.toggle(element.label, { defaultValue: element.defaultValue || false, tooltip: element.tooltip });\\r\\n } else if (this.isSlider(element)) {\\r\\n form.slider(element.label, element.minimumValue, element.maximumValue, {\\r\\n defaultValue: element.defaultValue || 0,\\r\\n valueStep: element.valueStep,\\r\\n tooltip: element.tooltip,\\r\\n });\\r\\n } else if (this.isDropdown(element)) {\\r\\n form.dropdown(element.label, element.options, { defaultValueIndex: element.defaultValueIndex || 0, tooltip: element.tooltip });\\r\\n }\\r\\n });\\r\\n\\r\\n try {\\r\\n const response = await form.show(player);\\r\\n return response;\\r\\n } catch (error) {\\r\\n console.error(\\\"Error showing modal form:\\\", error);\\r\\n throw error;\\r\\n }\\r\\n }\\r\\n\\r\\n /**\\r\\n * Show the form and process the results with a callback\\r\\n */\\r\\n public async showWithCallback(player: Player): Promise<void> {\\r\\n try {\\r\\n const response = await this.show(player);\\r\\n\\r\\n if (response.canceled) {\\r\\n this.callback?.([], true);\\r\\n } else {\\r\\n this.callback?.(response.formValues || [], false);\\r\\n }\\r\\n } catch (error) {\\r\\n console.error(\\\"Error in showWithCallback:\\\", error);\\r\\n this.callback?.([], true);\\r\\n }\\r\\n }\\r\\n\\r\\n // Type guard methods for better type safety\\r\\n private isTextField(element: FormElement): element is IModalFormTextField {\\r\\n return \\\"label\\\" in element && \\\"placeholderText\\\" in element;\\r\\n }\\r\\n\\r\\n private isToggle(element: FormElement): element is IModalFormToggle {\\r\\n return \\\"label\\\" in element && \\\"defaultValue\\\" in element && typeof (element).defaultValue === \\\"boolean\\\";\\r\\n }\\r\\n\\r\\n private isSlider(element: FormElement): element is IModalFormSlider {\\r\\n return \\\"minimumValue\\\" in element && \\\"maximumValue\\\" in element && \\\"valueStep\\\" in element;\\r\\n }\\r\\n\\r\\n private isDropdown(element: FormElement): element is IModalFormDropdown {\\r\\n return \\\"options\\\" in element && Array.isArray((element).options);\\r\\n }\\r\\n\\r\\n private isDivider(element: FormElement): element is IModalFormDivider {\\r\\n return \\\"divider\\\" in element && element.divider === true;\\r\\n }\\r\\n\\r\\n private isHeader(element: FormElement): element is IModalFormHeader {\\r\\n return \\\"text_header\\\" in element;\\r\\n }\\r\\n\\r\\n private isLabel(element: FormElement): element is IModalFormLabel {\\r\\n return \\\"text_label\\\" in element;\\r\\n }\\r\\n}\\r\\n\\r\\nexport { IModalForm };\\r\\n\", \"import { MinecraftColors } from \\\"../class/MinecraftColors.js\\\";\\r\\n\\r\\ndeclare global {\\r\\n interface String {\\r\\n mcColors(): MinecraftColors;\\r\\n }\\r\\n}\\r\\n\\r\\nString.prototype.mcColors = function (): MinecraftColors {\\r\\n return new MinecraftColors(this.toString());\\r\\n};\\r\\n\", \"import { Player } from \\\"@minecraft/server\\\";\\r\\n\\r\\ndeclare global {\\r\\n interface Player {\\r\\n sendToast(title?: string, message?: string, icon?: string, background?: string): void;\\r\\n sendTopbar(message: string): void;\\r\\n stopTopbar(): void;\\r\\n }\\r\\n}\\r\\n\\r\\nfunction adjustTextLength(text = \\\"\\\", totalLength = 100) {\\r\\n return (text.slice(0, totalLength)).padEnd(totalLength, \\\"\\\\t\\\");\\r\\n}\\r\\n\\r\\nPlayer.prototype.sendToast = function (title: string = \\\"\\\", message: string = \\\"\\\", icon: string = \\\"\\\", background: string = \\\"textures/ui/greyBorder\\\"): void {\\r\\n const text = \\\"\\u00A7N\\u00A7O\\u00A7T\\u00A7I\\u00A7F\\u00A7I\\u00A7C\\u00A7A\\u00A7T\\u00A7I\\u00A7O\\u00A7N\\\" + adjustTextLength(title, 100) + adjustTextLength('\\u00A77' + message, 600) + adjustTextLength(icon, 200) + adjustTextLength(background, 200)\\r\\n this.sendMessage(text);\\r\\n this.playSound(\\\"note.harp\\\", { volume: 0.6, pitch: 1.5 });\\r\\n return;\\r\\n};\\r\\n\\r\\nPlayer.prototype.sendTopbar = function (message: string): void {\\r\\n this.onScreenDisplay.setTitle(\\\"\\u00A7m\\u00A7c\\\" + message);\\r\\n return;\\r\\n}\\r\\n\\r\\nPlayer.prototype.stopTopbar = function (): void {\\r\\n this.onScreenDisplay.setTitle(\\\"\\u00A7m\\u00A7c\\\");\\r\\n return;\\r\\n}\\r\\n\\r\\nPlayer.prototype.sendBottomBar = function (message: string): void {\\r\\n this.onScreenDisplay.setTitle(\\\"\\u00A7m\\u00A7e\\\" + message);\\r\\n return;\\r\\n}\\r\\n\\r\\nPlayer.prototype.stopBottomBar = function (): void {\\r\\n this.onScreenDisplay.setTitle(\\\"\\u00A7m\\u00A7e\\\");\\r\\n return;\\r\\n}\", \"import { PluginBase } from \\\"@axeth/api/runtimes\\\";\\r\\n\\r\\nclass SamplePlugin extends PluginBase {\\r\\n public override onLoad(): void {\\r\\n this.logger.info(\\\"SamplePlugin has been loaded!\\\");\\r\\n }\\r\\n}\\r\\n\\r\\nexport { SamplePlugin };\", \"import { SystemBase } from \\\"@axeth/api/runtimes\\\";\\r\\nimport { SamplePlugin } from \\\"./plugins/SamplePlugin/index.ts\\\";\\r\\n\\r\\nclass AxethAPI extends SystemBase {\\r\\n public override onLoad(): void {\\r\\n this.pluginManagers.registerPlugin(SamplePlugin)\\r\\n }\\r\\n};\\r\\n\\r\\nnew AxethAPI();\"],\n \"mappings\": \"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\",\n \"names\": [\"system\", \"world\", \"world\", \"world\", \"system\", \"system\", \"system\", \"world\", \"world\", \"system\", \"Player\"]\n}\n",
|
|
12
|
-
"/data/dist/RP/manifest.json": "{\n \"format_version\": 2,\n \"header\": {\n \"name\": \"test@1.0.0 RP\",\n \"description\": \"test\",\n \"uuid\": \"cdbe0641-cba2-4d88-8359-d45c4223cdb7\",\n \"version\": [\n 1,\n 0,\n 0\n ],\n \"min_engine_version\": [\n 1,\n 21,\n 60\n ]\n },\n \"modules\": [\n {\n \"description\": \"Resource Pack\",\n \"type\": \"resources\",\n \"uuid\": \"f6eb2585-300b-4bcb-9de2-09d8482ca93d\",\n \"version\": [\n 1,\n 0,\n 0\n ]\n }\n ],\n \"dependencies\": [\n {\n \"uuid\": \"4032789a-7931-4e6b-aca9-13d51ce8751c\",\n \"version\": [\n 1,\n 0,\n 0\n ]\n }\n ]\n}",
|
|
13
|
-
"/data/dist/RP/pack_icon.png": "�PNG\r\n\u001a\n\u0000\u0000\u0000\rIHDR\u0000\u0000\u0000�\u0000\u0000\u0000�\u0004\u0003\u0000\u0000\u0000y�z\u001e\u0000\u0000\u0001qiCCPicc\u0000\u0000xڕ�;HBQ\u001c��Z���PPD�\u001d,\br��F�@\u0002\u00031\u0003����\u0017x�r���\u0018�\n\r=�����Z\u001bZ� �\u0001���T�\u0012r�\u0007)%0�?}���?��;�dU�j�n\u0014�H0 ��+R�3-\f�A\u000fc�j�g��\u0010M��\u0016\u0017��O����[KX*�$���͂�u`z��\u0017�\u0005�մ�9>\u0005�M炎�E_��E8%�\u001ba3\u001a�s�\u000fH�\u0006+\rVӦ�x\n�j��9�լ\t���lQ�V.�+a,/�>0L�\u0005\u0016\t#�P$C�\u0002>2\u0018HXD\b\u0012h2?��\u000fSD!K\u0006\u0015�yr�Ȉy�\u001f���JNN\u0000��\n@�m��@�6T˶�yh��#�<
Q��U`�\u001d<�z�{\u0000��pvY�);p�\u0005�\u000fyٔ\u0001�\u0000�d\u0012^O�;\u000e}�й*r�Y��\u000e�%\b]��>���w�ɻ�\u001bs�k�w~_~}r�s��8\u0000\u0000\u0000\u001bPLTE��������W��Eۢ\u0013�d\u0011u(\u0002T$\tT\u0012\t��\u000e\u0000\u0000\u0000�IDATx��Ա\r� \fEQV�\nY!+��W`\u0005V`���\u0014\u0004ŗ���\n,��.D�yM\u0001\u0002\u0002�\u000b�\u0015 w\u0001\u0010��b�TWm\u0006\b�\u00164Sե��*ԣ�2\r\b�\f�u���wE�jQ\u0001\u0001���\u001ee\u0015\u00100-���<\u001b\n\u00100\u000f�T�y�3\u0001\u0001\u0001��2X\u0015 `.pU�\u001ci[��\u0019�P;�V(@���\u001b�j�v\u0016 `Z�j{7�-@@@\"r�\u0007~�T��cGt\u0000\u0000\u0000\u0000IEND�B`�",
|
|
14
6
|
"/data/filters/ManifestBuilds/index.ts": "import { ConfigManagers, Filters } from \"@axeth/core\";\r\nimport type { Manifest } from \"./types/Manifest.ts\";\r\nimport chalk from \"chalk\";\r\nimport * as fs from \"fs\";\r\n\r\nclass ManifestBuilds extends Filters {\r\n private bpManifest = `${this.basePath}/BP/manifest.json`;\r\n private rpManifest = `${this.basePath}/RP/manifest.json`;\r\n private bpDirectory = `${this.basePath}/BP`;\r\n private rpDirectory = `${this.basePath}/RP`;\r\n private config = new ConfigManagers().getConfig();\r\n\r\n override async apply(): Promise<void> {\r\n await null;\r\n this.msg(`Looking for manifests...`);\r\n const BPManifest = this.readManifest(this.bpManifest);\r\n const RPManifest = this.readManifest(this.rpManifest);\r\n\r\n if (!BPManifest || !RPManifest) {\r\n this.msg(chalk.red(`No manifest.json found in BP or RP directories.`));\r\n return;\r\n } else {\r\n const config = await this.config;\r\n const BPUUIDs = this.uuidGen(config.meta.seed, 2);\r\n const RPUUIDs = this.uuidGen(config.meta.seed + 1000, 2);\r\n\r\n BPManifest.header.name = config.meta.name + `@${config.meta.version.join(\".\")} BP`;\r\n RPManifest.header.name = config.meta.name + `@${config.meta.version.join(\".\")} RP`;\r\n BPManifest.header.description = config.meta.description || BPManifest.header.description;\r\n RPManifest.header.description = config.meta.description || RPManifest.header.description;\r\n BPManifest.format_version = config.format_version;\r\n RPManifest.format_version = config.format_version;\r\n //UUID\r\n BPManifest.header.uuid = BPUUIDs[0] || \"\";\r\n //Script Module\r\n BPManifest.modules.find((x) => x.language === \"javascript\")!.uuid = BPUUIDs[1] || \"\";\r\n //UUID\r\n RPManifest.header.uuid = RPUUIDs[0] || \"\";\r\n //Resource Module\r\n RPManifest.modules.find((x) => x.type === \"resources\")!.uuid = RPUUIDs[1] || \"\";\r\n\r\n //Dependencies\r\n const bpDep = BPManifest.dependencies?.find((dep) => dep.uuid);\r\n if (bpDep) {\r\n bpDep.uuid = RPManifest.header.uuid;\r\n }\r\n const rpDep = RPManifest.dependencies?.find((dep) => dep.uuid);\r\n if (rpDep) {\r\n rpDep.uuid = BPManifest.header.uuid;\r\n }\r\n\r\n\r\n this.fileManagers.writeFile(\r\n this.bpManifest,\r\n JSON.stringify(BPManifest, null, 2),\r\n );\r\n this.fileManagers.writeFile(\r\n this.rpManifest,\r\n JSON.stringify(RPManifest, null, 2),\r\n );\r\n\r\n this.msg(`Updated manifest ${chalk.green(\"successfully\")}.`);\r\n\r\n //Copy pack icons if exist\r\n this.fileManagers.removeFile(this.bpDirectory + \"/pack_icon.png\");\r\n this.fileManagers.removeFile(this.rpDirectory + \"/pack_icon.png\");\r\n\r\n this.fileManagers.copyFile(\r\n config.meta.icon,\r\n this.bpDirectory + \"/pack_icon.png\",\r\n );\r\n this.fileManagers.copyFile(\r\n config.meta.icon,\r\n this.rpDirectory + \"/pack_icon.png\",\r\n )\r\n }\r\n }\r\n\r\n private uuidGen(seed: number, count: number): string[] {\r\n const uuids: string[] = [];\r\n\r\n // simple deterministic seeded PRNG (mulberry32-like)\r\n const rnd = (function (a: number) {\r\n return function () {\r\n a |= 0;\r\n a = (a + 0x6D2B79F5) | 0;\r\n let t = Math.imul(a ^ (a >>> 15), 1 | a);\r\n t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;\r\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\r\n };\r\n })(seed);\r\n\r\n for (let i = 0; i < count; i++) {\r\n const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n const r = Math.floor(rnd() * 16);\r\n return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);\r\n });\r\n uuids.push(uuid);\r\n }\r\n return uuids;\r\n }\r\n\r\n public readManifest(path: string): Manifest | null {\r\n try {\r\n return JSON.parse(\r\n fs.readFileSync(path, \"utf-8\"),\r\n ) as Manifest;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\nexport { ManifestBuilds };\r\n",
|
|
15
7
|
"/data/filters/ManifestBuilds/types/Manifest.ts": "export interface Manifest {\r\n format_version: number;\r\n header: ManifestHeader;\r\n modules: ManifestModule[];\r\n dependencies?: ManifestDependency[];\r\n subpacks?: Subpack[];\r\n capabilities?: string[];\r\n}\r\n\r\nexport type Version = [number, number, number];\r\nexport type UUID = string;\r\n\r\nexport interface ManifestHeader {\r\n name: string;\r\n description: string;\r\n uuid: UUID;\r\n version: Version;\r\n min_engine_version: Version;\r\n lock_template?: boolean;\r\n}\r\n\r\nexport interface ManifestModule {\r\n uuid: UUID;\r\n version: Version;\r\n type: ModuleType;\r\n description?: string;\r\n language?: string;\r\n}\r\n\r\nexport type ModuleType =\r\n | 'resources' // Resource Pack content\r\n | 'data' // Behavior Pack content (Scripts, Loot Tables, etc.)\r\n | 'skin_pack' // Skin Pack content\r\n | 'interface' // UI content\r\n | 'world_template'\r\n | 'script' // Client-side scripting\r\n | 'resource' // Legacy name for 'resources'\r\n | 'client_data' // Client-side behavior (e.g., animations, render controllers)\r\n | 'world_dependencies';\r\n\r\nexport interface ManifestDependency {\r\n uuid: UUID;\r\n version: Version;\r\n}\r\n\r\nexport interface Subpack {\r\n folder_name: string;\r\n name: string;\r\n}",
|
|
16
8
|
"/data/filters/TSBuilds/index.ts": "import { Filters } from \"@axeth/core\";\r\nimport type { Manifest } from \"./types/Manifest.ts\";\r\nimport * as esbuild from \"esbuild\";\r\nimport { parseArgs } from \"./utils/parseArgs.ts\";\r\nimport chalk from \"chalk\";\r\nimport { spawn } from \"bun\";\r\nimport * as fs from \"fs\";\r\n\r\nconst [settings] = parseArgs(Bun.argv.slice(2));\r\n\r\n\r\nclass TSBuilds extends Filters {\r\n private typescript = \"ts\";\r\n private bpPath = `${this.basePath}/BP`;\r\n\r\n override async apply(): Promise<void> {\r\n const manifest = this.readManifest(this.bpPath);\r\n if (!manifest) return;\r\n const entryPath = manifest.modules.find((x) => x.entry)?.entry;\r\n if (!entryPath) return;\r\n\r\n const scriptPath = \"./packs\" + \"/\" + entryPath.replace(\".js\", `.${this.typescript}`);\r\n\r\n // Run linter before building (surface output to console)\r\n this.msg(`Running linter: ${chalk.yellow(\"bunx eslint ./packs\")}`);\r\n const lintProcess = spawn([\"bunx\", \"eslint\", \"./packs\"], {\r\n stdout: \"inherit\",\r\n stderr: \"inherit\",\r\n });\r\n\r\n const exitCode = await lintProcess.exited;\r\n\r\n if (exitCode !== 0) {\r\n this.msg(`${chalk.red(\"✗\")} Linting failed. Fix errors before building.`);\r\n return;\r\n }\r\n\r\n this.msg(`${chalk.green(\"✓\")} Linting passed`);\r\n\r\n // Build AxethLib.js first (contains @axeth/api)\r\n this.msg(`Building library: ${chalk.blue(\"AxethLib.js\")}`);\r\n await esbuild.build({\r\n bundle: true,\r\n entryPoints: [\"@axeth/api/runtimes\"],\r\n external: [\r\n \"@minecraft/server\",\r\n \"@minecraft/server-ui\",\r\n ],\r\n format: \"esm\",\r\n outfile: this.bpPath + \"/scripts/AxethLib.js\",\r\n minify: true,\r\n keepNames: false,\r\n sourcemap: true,\r\n ...settings,\r\n }).then(() => {\r\n this.msg(`Successfully built library: ${chalk.green(\"BP/scripts/AxethLib.js\")}`);\r\n });\r\n\r\n // Build main script (excludes @axeth/api)\r\n this.msg(`Building script: ${chalk.green(scriptPath)}`);\r\n await esbuild.build({\r\n plugins: [\r\n {\r\n name: \"alias-axeth-api\",\r\n setup(build) {\r\n build.onResolve({ filter: /^@axeth\\/api$/ }, () => {\r\n return { path: \"./AxethLib.js\", external: true };\r\n });\r\n },\r\n },\r\n ],\r\n bundle: true,\r\n entryPoints: [\r\n scriptPath,\r\n ],\r\n external: [\r\n \"@minecraft/server\",\r\n \"@minecraft/server-ui\",\r\n ],\r\n format: \"esm\",\r\n outfile: this.bpPath + \"/\" + entryPath,\r\n sourcemap: true,\r\n ...settings,\r\n }).then(() => {\r\n this.msg(`Successfully built script: ${chalk.green(\"BP/\" + entryPath)}`);\r\n });\r\n\r\n // this.fileManagers.removeDirectory(this.basePath + \"/\" + \"scripts\");\r\n }\r\n\r\n public readManifest(bpPath: string): Manifest | null {\r\n try {\r\n return JSON.parse(\r\n fs.readFileSync(`${bpPath}/manifest.json`, \"utf-8\"),\r\n ) as Manifest;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\nexport { TSBuilds };\r\n",
|