mbler 0.1.1
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/bin/build.js +0 -0
- package/bin/mbler.js +14 -0
- package/bin/minify.js +155 -0
- package/lib/build/base.js +1 -0
- package/lib/build/build-g-config.json +12 -0
- package/lib/build/getModule.js +1 -0
- package/lib/build/index.js +1 -0
- package/lib/build/manifest.build.js +1 -0
- package/lib/build/mcVersion.js +1 -0
- package/lib/build/utils.js +1 -0
- package/lib/code-processor/c-handler-export.js +1 -0
- package/lib/code-processor/index.js +1 -0
- package/lib/code-processor/mtreehandler.js +1 -0
- package/lib/commander/index.js +1 -0
- package/lib/data/includes.json +13 -0
- package/lib/data/version.json +89 -0
- package/lib/git/clone.js +1 -0
- package/lib/git/index.js +1 -0
- package/lib/git/pull.js +1 -0
- package/lib/lang/__translate.js +1 -0
- package/lib/lang/en.js +1 -0
- package/lib/lang/index.js +1 -0
- package/lib/lang/zh.js +1 -0
- package/lib/loger/colors.js +1 -0
- package/lib/loger/index.js +1 -0
- package/lib/mcx/ast/index.js +1 -0
- package/lib/mcx/ast/prop.js +1 -0
- package/lib/mcx/ast/tag.js +1 -0
- package/lib/mcx/compile-component/lib.js +1 -0
- package/lib/mcx/compile-component/types.js +1 -0
- package/lib/mcx/compile-component/utils.js +1 -0
- package/lib/mcx/compile-mcx/_compile.js +602 -0
- package/lib/mcx/compile-mcx/compile.js +1 -0
- package/lib/mcx/compile-mcx/context.js +1 -0
- package/lib/mcx/compile-mcx/index.js +1 -0
- package/lib/mcx/compile-mcx/mcx/index.js +1 -0
- package/lib/mcx/compile-mcx/mcx/types.js +1 -0
- package/lib/mcx/compile-mcx/template/module.js +1 -0
- package/lib/mcx/compile-mcx/types.js +1 -0
- package/lib/mcx/compile-mcx/utils.node.js +1 -0
- package/lib/mcx/index.js +1 -0
- package/lib/mcx/test/index.js +1 -0
- package/lib/mcx/test.js +1 -0
- package/lib/mcx/types.js +1 -0
- package/lib/mcx/utils.js +1 -0
- package/lib/module-handler/index.js +1 -0
- package/lib/modules/contents.json +1 -0
- package/lib/modules/create-game/mbler.config.json +14 -0
- package/lib/modules/create-game/src/Runner/RunnerManager.js +1 -0
- package/lib/modules/create-game/src/Runner/scriptRunner.js +1 -0
- package/lib/modules/create-game/src/config.js +1 -0
- package/lib/modules/create-game/src/constants.js +1 -0
- package/lib/modules/create-game/src/createGameModule.js +1 -0
- package/lib/modules/create-game/src/gameComponent/common/autoStop.js +1 -0
- package/lib/modules/create-game/src/gameComponent/common/lazyLoader.js +1 -0
- package/lib/modules/create-game/src/gameComponent/common/stopWatch/onTimeEvent.js +1 -0
- package/lib/modules/create-game/src/gameComponent/common/stopWatch/stopWatch.js +1 -0
- package/lib/modules/create-game/src/gameComponent/common/stopWatch/tickEvent.js +1 -0
- package/lib/modules/create-game/src/gameComponent/common/timer/onTimeEvent.js +1 -0
- package/lib/modules/create-game/src/gameComponent/common/timer/tickEvent.js +1 -0
- package/lib/modules/create-game/src/gameComponent/common/timer/timer.js +1 -0
- package/lib/modules/create-game/src/gameComponent/gameComponent.js +1 -0
- package/lib/modules/create-game/src/gameComponent/index.js +1 -0
- package/lib/modules/create-game/src/gameComponent/player/blockInteractionBlocker.js +1 -0
- package/lib/modules/create-game/src/gameComponent/player/entityInteractionBlocker.js +1 -0
- package/lib/modules/create-game/src/gameComponent/player/healthIndicator.js +1 -0
- package/lib/modules/create-game/src/gameComponent/player/regionMonitor.js +1 -0
- package/lib/modules/create-game/src/gameComponent/player/respawn.js +1 -0
- package/lib/modules/create-game/src/gameComponent/player/spawnProtector.js +1 -0
- package/lib/modules/create-game/src/gameComponent/region/regionProtecter.js +1 -0
- package/lib/modules/create-game/src/gameComponent/region/regionTeamChooser.js +1 -0
- package/lib/modules/create-game/src/gameComponent/region/regionTeamCleaner.js +1 -0
- package/lib/modules/create-game/src/gameComponent/view/infoScoreboard.js +1 -0
- package/lib/modules/create-game/src/gameComponent/view/teamScoreboard.js +1 -0
- package/lib/modules/create-game/src/gameContext.js +1 -0
- package/lib/modules/create-game/src/gameEngine.js +1 -0
- package/lib/modules/create-game/src/gameEvent/eventManager.js +1 -0
- package/lib/modules/create-game/src/gameEvent/eventSignal.js +1 -0
- package/lib/modules/create-game/src/gameEvent/events/buttonPush.js +1 -0
- package/lib/modules/create-game/src/gameEvent/events/inSlot.js +1 -0
- package/lib/modules/create-game/src/gameEvent/events/interval.js +1 -0
- package/lib/modules/create-game/src/gameEvent/events/itemUse.js +1 -0
- package/lib/modules/create-game/src/gameEvent/events/onBlock.js +1 -0
- package/lib/modules/create-game/src/gameEvent/events/regionEvents.js +1 -0
- package/lib/modules/create-game/src/gameEvent/events/signClick.js +1 -0
- package/lib/modules/create-game/src/gameEvent/gameEvent.js +1 -0
- package/lib/modules/create-game/src/gameEvent/index.js +1 -0
- package/lib/modules/create-game/src/gameEvent/mapEventSignal.js +1 -0
- package/lib/modules/create-game/src/gameEvent/subscription.js +1 -0
- package/lib/modules/create-game/src/gamePlayer/gamePlayer.js +1 -0
- package/lib/modules/create-game/src/gamePlayer/groupBuilder.js +1 -0
- package/lib/modules/create-game/src/gamePlayer/groupSet.js +1 -0
- package/lib/modules/create-game/src/gamePlayer/index.js +1 -0
- package/lib/modules/create-game/src/gamePlayer/playerGroup.js +1 -0
- package/lib/modules/create-game/src/gamePlayer/playerManager.js +1 -0
- package/lib/modules/create-game/src/gameRegion/gameRegion.js +1 -0
- package/lib/modules/create-game/src/gameRegion/index.js +1 -0
- package/lib/modules/create-game/src/gameRegion/regionHelper.js +1 -0
- package/lib/modules/create-game/src/gameState/common/autoStop.js +1 -0
- package/lib/modules/create-game/src/gameState/gameState.js +1 -0
- package/lib/modules/create-game/src/gameState/index.js +1 -0
- package/lib/modules/create-game/src/gameState/types.js +1 -0
- package/lib/modules/create-game/src/gameStructure/gameStructure.js +1 -0
- package/lib/modules/create-game/src/main.js +1 -0
- package/lib/modules/create-game/src/system/gameCommand.js +1 -0
- package/lib/modules/create-game/src/system/gameManager.js +1 -0
- package/lib/modules/create-game/src/system/globalPlayerManager.js +1 -0
- package/lib/modules/create-game/src/utils/GameError.js +1 -0
- package/lib/modules/create-game/src/utils/algorithm.js +1 -0
- package/lib/modules/create-game/src/utils/chunk.js +1 -0
- package/lib/modules/create-game/src/utils/deferredObject.js +1 -0
- package/lib/modules/create-game/src/utils/duration.js +1 -0
- package/lib/modules/create-game/src/utils/func.js +1 -0
- package/lib/modules/create-game/src/utils/index.js +1 -0
- package/lib/modules/create-game/src/utils/interfaces.js +1 -0
- package/lib/modules/create-game/src/utils/logger.js +1 -0
- package/lib/modules/create-game/src/utils/random.js +1 -0
- package/lib/modules/create-game/src/utils/vanila-data.js +1 -0
- package/lib/modules/create-game/src/utils/vector.js +1 -0
- package/lib/modules/gameLib/mbler.config.json +16 -0
- package/lib/modules/gameLib/src/config.js +1 -0
- package/lib/modules/gameLib/src/data.js +1 -0
- package/lib/modules/gameLib/src/entity.js +1 -0
- package/lib/modules/gameLib/src/event.js +1 -0
- package/lib/modules/gameLib/src/index.js +1 -0
- package/lib/modules/gameLib/src/loger.js +1 -0
- package/lib/modules/gameLib/src/ui.js +1 -0
- package/lib/modules/gameLib/src/utils.js +1 -0
- package/lib/modules/gutils/mbler.config.json +12 -0
- package/lib/modules/gutils/src/index.js +1 -0
- package/lib/modules/innerDef.json +5 -0
- package/lib/runTemp/File.js +1 -0
- package/lib/runTemp/config.json +4 -0
- package/lib/runTemp/index.js +1 -0
- package/lib/runTemp/securityFile.js +1 -0
- package/lib/start/addPack.js +1 -0
- package/lib/start/clean.js +1 -0
- package/lib/start/create.js +1 -0
- package/lib/start/dev.js +1 -0
- package/lib/start/getResConfig.js +1 -0
- package/lib/start/incg.js +1 -0
- package/lib/start/index.js +1 -0
- package/lib/start/init.js +1 -0
- package/lib/start/rechce.js +1 -0
- package/lib/start/unaddPack.js +1 -0
- package/lib/start/unincg.js +1 -0
- package/lib/start/version.js +1 -0
- package/lib/utils/index.js +1 -0
- package/lib/uuid/index.js +1 -0
- package/package.json +1 -0
- package/test/2x sword/.cache__mbler__/config-hash.txt +1 -0
- package/test/2x sword/.cache__mbler__/package-hash.txt +1 -0
- package/test/2x sword/behavior/scripts/index.js +25 -0
- package/test/2x sword/mbler.config.json +12 -0
- package/test/2x sword/package.json +14 -0
- package/test/README.md +8 -0
- package/test/des/index.js +20 -0
- package/test/des/mbler.config.json +5 -0
- package/test/des/package.json +7 -0
- package/test/initializer/index.js +6 -0
- package/test/initializer/mbler.config.json +5 -0
- package/test/initializer/package.json +7 -0
- package/test/initializer/test.js +1 -0
- package/test/mbler-int/behavior/res/items/mang_one_int.json +22 -0
- package/test/mbler-int/behavior/res/pack_icon.png +0 -0
- package/test/mbler-int/behavior/res/recipes/mang_one_int.json +31 -0
- package/test/mbler-int/behavior/scripts/index.js +8 -0
- package/test/mbler-int/behavior/scripts/lib/event/index.js +20 -0
- package/test/mbler-int/behavior/scripts/lib/ui/Lore.js +19 -0
- package/test/mbler-int/behavior/scripts/lib/ui/baseUi.js +6 -0
- package/test/mbler-int/behavior/scripts/lib/ui/index.js +207 -0
- package/test/mbler-int/behavior/scripts/lib/utils/index.js +52 -0
- package/test/mbler-int/mbler.config.json +19 -0
- package/test/mbler-int/package.json +13 -0
- package/test/script-mbler/.cache__mbler__/config-hash.txt +1 -0
- package/test/script-mbler/.cache__mbler__/package-hash.txt +1 -0
- package/test/script-mbler/behavior/res/pack_icon.png +0 -0
- package/test/script-mbler/behavior/scripts/index.js +5 -0
- package/test/script-mbler/behavior/scripts/index.ts +6 -0
- package/test/script-mbler/mbler.config.json +15 -0
- package/test/script-mbler/package.json +16 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,n,i){void 0===i&&(i=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,i,a)}:function(e,t,n,i){void 0===i&&(i=n),e[i]=t[n]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(){var e=function(t){return e=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(null!=t)for(var i=e(t),a=0;a<i.length;a++)"default"!==i[a]&&__createBinding(n,t,i[a]);return __setModuleDefault(n,t),n}}(),__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.getModules=getModules,exports.getModuleGit=getModuleGit,exports.addPack=addPack,exports.unaddPack=unaddPack,exports.installModules=installModules,exports.uninstallModule=uninstallModule,exports.unInstallModules=unInstallModules,exports.getResConfig=getResConfig,exports.getModuleInfo=getModuleInfo;const git_1=__importDefault(require("../git")),node_os_1=__importDefault(require("node:os")),node_path_1=__importDefault(require("node:path")),node_fs_1=__importDefault(require("node:fs")),promises_1=__importDefault(require("node:fs/promises")),utils=__importStar(require("./../utils")),commander_1=require("../commander"),index_js_1=__importDefault(require("../lang/index.js")),index_js_2=__importDefault(require("../loger/index.js")),gitVerifyReg=/(https?:\/\/[^\s\/]+\/[^\s\/]+\/[^\s]+(?:\.git)?|(?:git@|[\w.-]+@)[\w.-]+:[^\s]+(?:\.git)?)/,cache=new Map;let moduleDirname="",gitRepo="",cacheList=null;function versionToArray(e){return String(e||"0.0.0").trim().split(".").slice(0,3).map(e=>parseInt(e,10)||0)}function compareVersion(e,t){const n=versionToArray(e),i=versionToArray(t);for(let e=0;e<3;e++){const t=n[e],a=i[e];if(void 0!==t&&void 0!==a&&t!==a)return t>a?1:-1}return 0}class ModuleDir{static curreny;static get(){if(ModuleDir.curreny)return ModuleDir.curreny;const e=node_path_1.default.join(node_os_1.default.homedir(),".cache/mbler/.moduleDir.db");let t;try{t=node_fs_1.default.readFileSync(e,"utf-8").toString()}catch{t=node_path_1.default.join(__dirname,"../modules")}return ModuleDir.curreny=t,t}static async set(e){if(ModuleDir.curreny||ModuleDir.get(),!await utils.FileExsit(e))throw new TypeError("[module dir set]: dir isn't exsit");await promises_1.default.cp(ModuleDir.curreny,e,{recursive:!0,force:!0});const t=await commander_1.Input.select("已将模块复制至目标文件夹,是否删除旧文件夹? ",["Y","N"]);if("Y"==t)await promises_1.default.rm(ModuleDir.curreny,{recursive:!0});else if("N"!==t)throw new Error("[moduleDir set]: ??? your select is sb");return ModuleDir.curreny=e,!0}}async function getModules(e){const t=node_path_1.default.join(e,"./lib/modules/contents.json");return JSON.parse((await promises_1.default.readFile(t,"utf-8")).toString()).map(e=>e.name)}async function getModuleGit(e,t){const n=node_path_1.default.join(e,"./lib/modules/contents.json"),i=JSON.parse((await promises_1.default.readFile(n,"utf-8")).toString()).find(e=>e.name===t);return i?.git||null}async function addPack(e,t,n){const i=t,a=await getModuleInfo(i);try{if(!a.getAll().includes(e))throw new Error(index_js_1.default.invalidDes);if(!await utils.FileExsit(n))throw new Error(index_js_1.default.config_invalid);const t=await utils.GetData(n),r=await getModuleGit(i,e);if(!r)throw new Error(`${e} : ${index_js_1.default.noGitRepo}`);t?.script?.dependencies||(t.script.dependencies={}),t.script.dependencies[e]=r;const s=JSON.stringify(t,null,2);await promises_1.default.writeFile(node_path_1.default.join(n,node_path_1.default.basename(utils.config.PackageFile)),s)}catch(e){index_js_2.default.e("add",`ERR- ${e.stack}`)}}async function unaddPack(e,t,n){const i=t,a=await getModuleInfo(i);try{if(!a.getAll().includes(e))throw new Error(index_js_1.default.invalidDes);if(!await utils.FileExsit(n))throw new Error(index_js_1.default.config_invalid);const t=await utils.GetData(n);if(t?.script?.dependencies?.[e]){delete t.script.dependencies[e];const i=JSON.stringify(t,null,2);await promises_1.default.writeFile(node_path_1.default.join(n,node_path_1.default.basename(utils.config.PackageFile)),i)}}catch(e){index_js_2.default.e("unadd",`ERR- ${e.stack}`)}}async function installGlobal(e,t=!0){gitRepo=e;const n=node_path_1.default.join(node_os_1.default.tmpdir(),`mbler-${Date.now()}`);try{if("inner"===e)return!0;if(!e)throw new Error(index_js_1.default.noGitRepo);if(!gitVerifyReg.test(e))return await fileInstall(e);await git_1.default.clone(e,n);try{const e=await utils.GetData(n);await addMod(e,{dir:n})}catch{throw new Error(index_js_1.default.installGit.NoPackage)}return!0}catch(e){return index_js_2.default.e("INSTALL",e.message),!1}finally{await promises_1.default.rm(n,{recursive:!0,force:!0})}}async function fileInstall(e){const t=node_path_1.default.join(moduleDirname,e);if((await promises_1.default.stat(t)).isFile())throw new Error("No Folder");const n=await utils.GetData(t);return await addMod(n,{dir:t}),!0}async function compareModuleVersion(e,t){const n=versionToArray((await utils.GetData(e)).version),i=versionToArray((await utils.GetData(t)).version);for(let e=0;e<3;e++){const t=n[e],a=i[e];if(void 0!==t&&void 0!==a&&t!==a)return t>a?1:-1}return 0}async function addMod(e,t,n=!0){index_js_2.default.i("INSTALL",`${index_js_1.default.installGit.SetContent} ${e.name}`);const i=node_path_1.default.join(moduleDirname,"./lib/modules/contents.json"),a=JSON.parse((await promises_1.default.readFile(i)).toString()),r=(JSON.parse(await promises_1.default.readFile(node_path_1.default.join(t.dir,"mbler.config.json"),"utf-8")),cache.get("innerDef"));if(r?.includes(e.name))return index_js_2.default.e("INSTALL",index_js_1.default.SameDes);const s=a.find(t=>t.name===e.name||t.git===gitRepo),o=s?await compareModuleVersion(t.dir,node_path_1.default.join(moduleDirname,"lib/modules",s.name)):1;s&&o<=0&&n&&"Y"!==await utils.input(index_js_1.default.installGit.HadBeen)||(a.push({name:e.name,git:gitRepo}),await promises_1.default.writeFile(i,JSON.stringify(a)),await utils.copy(t.dir,node_path_1.default.join(moduleDirname,"./lib/modules/",e.name)))}async function installModules(e,t){try{moduleDirname=e,cache.set("innerDef",JSON.parse(await promises_1.default.readFile(node_path_1.default.join(moduleDirname,"./lib/modules/innerDef.json"),"utf-8")));const n=await utils.GetData(t),i=process.argv.slice(3),a=n.script?.dependencies||{};for(const e of Object.values(a))e&&await installGlobal(e,!1);for(const e of i)e&&await installGlobal(e,!0)}catch(e){index_js_2.default.e("INSTALL",`ERR in 'InstallModules' Func\nMessage: ${e.message}\nstack : ${e.stack}`)}finally{index_js_2.default.i("INSTALL",index_js_1.default.installGit.InstallFinally)}}async function uninstallModule(e,t){try{return moduleDirname=t,cache.set("innerDef",JSON.parse(await promises_1.default.readFile(node_path_1.default.join(moduleDirname,"./lib/modules/innerDef.json"),"utf-8"))),await uninstallGlobalInternal(e)}catch(e){return index_js_2.default.e("uninstall",e.message),!1}}async function unInstallModules(e,t){try{moduleDirname=e,cache.set("innerDef",JSON.parse(await promises_1.default.readFile(node_path_1.default.join(moduleDirname,"./lib/modules/innerDef.json"),"utf-8")));const n=await utils.GetData(t),i=process.argv.slice(3),a=n.script?.dependencies||{};for(const e of Object.keys(a))e&&await uninstallGlobalInternal(e);for(const e of i)e&&await uninstallGlobalInternal(e)}catch(e){index_js_2.default.e("UNINSTALL",`ERR in 'unInstallModules' Func\nMessage: ${e.message}\nstack : ${e.stack}`)}finally{index_js_2.default.i("UNINSTALL",index_js_1.default.uninstallFinally)}}async function uninstallGlobalInternal(e){try{const t=node_path_1.default.join(moduleDirname,"./lib/modules/contents.json"),n=JSON.parse((await promises_1.default.readFile(t,"utf-8")).toString()),i=n.findIndex(t=>t.name===e);if(-1===i)return index_js_2.default.e("UNINSTALL",`${index_js_1.default.moduleNotFound}: ${e}`),!1;const a=n[i],r=cache.get("innerDef");if(r?.includes(e))return index_js_2.default.e("UNINSTALL",index_js_1.default.CannotDeleteInner),!1;n.splice(i,1),await promises_1.default.writeFile(t,JSON.stringify(n,null,2));const s=node_path_1.default.join(moduleDirname,"./lib/modules/",e);return await promises_1.default.rm(s,{recursive:!0,force:!0}),index_js_2.default.i("UNINSTALL",`${index_js_1.default.uninstallSuccess}: ${a.name}`),!0}catch(e){return index_js_2.default.e("UNINSTALL",e.message),!1}}async function getResConfig(e){return cache.set("Mod",JSON.parse(await promises_1.default.readFile(node_path_1.default.join(e,"./lib/modules/contents.json"),"utf-8"))),cache.set("innerDef",JSON.parse(await promises_1.default.readFile(node_path_1.default.join(e,"./lib/modules/innerDef.json"),"utf-8"))),cache}class ModulePath{dir;cache;constructor(e){this.dir=e,this.cache=[]}async start(){this.cache=await this.#e()}getGit(e){for(const t of this.cache)if(t.name===e)return t.git;return null}getAll(){return cacheList||(cacheList=this.cache.map(e=>e.name),cacheList)}async#e(){const e=node_path_1.default.join(this.dir,"lib/modules/contents.json");try{const t=await promises_1.default.readFile(e,"utf8"),n=utils.JSONparse(t);return"object"==typeof n&&null!==n?n:[]}catch(e){return console.error("Failed to load contents.json:",e),[]}}}async function getModuleInfo(e){cacheList=null;const t=new ModulePath(e);return await t.start(),t}class Module{static globalModuleDir=ModuleDir.get();static async Install(e){let t={lastTip:"",res:!1},n=e.git;if("inner"==e.git&&(n="git+https://github.com/Ruanhor.git"),n.startsWith("git+")){const i=node_path_1.default.join(ModuleDir.curreny,e.name);await utils.FileExsit(i)&&(t.lastTip="error: [module]: "+e.name+"exsit");const a=n.replace("git+","");if(!gitVerifyReg.test(a))return t.lastTip="error: [clone git]: url isn't format",t;await git_1.default.clone(a,i)}return n.startsWith(""),t}}exports.default=Module;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"name":"gameLib","git":"inner"},{"name":"gutils","git":"inner"},{"name":"create-game","git":"inner"}]
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "create-game",
|
|
3
|
+
"description": "create game fast",
|
|
4
|
+
"git": "gitee.com/ykxyx666_admin/sapi-game.git",
|
|
5
|
+
"version": "0.0.1",
|
|
6
|
+
"type": "scriptsDes",
|
|
7
|
+
"script": {
|
|
8
|
+
"main": "./src/main.js"
|
|
9
|
+
},
|
|
10
|
+
"mcVersion": [
|
|
11
|
+
"1.21.10",
|
|
12
|
+
"1.21.120"
|
|
13
|
+
]
|
|
14
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.RunnerManager=void 0;const server_1=require("@minecraft/server"),index_js_1=require("../utils/index.js"),scriptRunner_js_1=require("./scriptRunner.js");class RunnerManager{runners=new Map;idCounter=0;logger;constructor(r){this.logger=new index_js_1.Logger(r+"-runner")}new(){const r="runner-"+ ++this.idCounter,e=new scriptRunner_js_1.ScriptRunner(r,r=>{this.runners.delete(r)});return this.runners.set(r,e),{id:r,runner:e}}run(r){const{id:e,runner:n}=this.new();return n.run(r).catch(r=>{this.logger.error(`runner ${e} 出错了:`,r)}),e}runDelay(r,e){const{id:n,runner:s}=this.new();return s.run(async n=>{await n.wait(e),await r(n)}).catch(r=>{this.logger.error(`runner ${n} 出错了:`,r)}),n}runJob(r){const e="runner-"+ ++this.idCounter,n=wrapGeneratorWithPromise(r),s=server_1.system.runJob(n.gen);return this.runners.set(e,{runId:s}),{id:e,promise:n.promise}}cancel(r){const e=this.runners.get(r);return!!e&&(e instanceof scriptRunner_js_1.ScriptRunner?e.cancel():"runId"in e&&server_1.system.clearRun(e.runId),this.runners.delete(r),!0)}dispose(){for(const r of this.runners.values())r instanceof scriptRunner_js_1.ScriptRunner?r.cancel():"runId"in r&&server_1.system.clearJob(r.runId);this.runners.clear()}get size(){return this.runners.size}}function wrapGeneratorWithPromise(r){let e,n;const s=new Promise((r,s)=>{e=r,n=s});return{gen:function*(){try{let n=r.next();for(;!n.done;)yield,n=r.next();e()}catch(r){n(r)}}(),promise:s}}exports.RunnerManager=RunnerManager;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ScriptRunner=exports.ScriptCancelledError=void 0;const server_1=require("@minecraft/server");class ScriptCancelledError extends Error{constructor(e){super(`ScriptRunner with ID '${e}' was cancelled.`),this.name="ScriptCancelledError"}}exports.ScriptCancelledError=ScriptCancelledError;class ScriptRunner{id;onFinish;cancelled=!1;constructor(e,r){this.id=e,this.onFinish=r}checkCancelled(){if(this.cancelled)throw new ScriptCancelledError(this.id)}async wait(e){return this.checkCancelled(),new Promise(async(r,t)=>{await server_1.system.waitTicks(e),this.cancelled?t(new ScriptCancelledError(this.id)):r()})}do(e){return this.checkCancelled(),e()}async runSteps(e){for(const r of e)await this.do(r)}async doDelay(e,r){return await this.wait(r),this.do(e)}cancel(){this.cancelled=!0}async run(e){try{await e(this)}catch(e){if(!(e instanceof ScriptCancelledError))throw e}finally{this.onFinish(this.id)}}isCancelled(){return this.cancelled}}exports.ScriptRunner=ScriptRunner;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.SAPIGameConfig=void 0;const index_js_1=require("./utils/index.js"),defaultConfig={logLevel:index_js_1.logLevel.debug,onEnd:()=>{},onJoin:()=>{},hub:()=>{},debugMode:!1};class SAPIGameConfig{static _config={};static get config(){return{...defaultConfig,...this._config}}static update(e){this._config={...this._config,...e}}static reset(){this._config={}}}exports.SAPIGameConfig=SAPIGameConfig;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Constants=exports.Dimensions=void 0;const server_1=require("@minecraft/server"),deferredObject_js_1=require("./utils/deferredObject.js"),vanila_data_js_1=require("./utils/vanila-data.js"),{proxy:dims,setTarget:setTarget}=(0,deferredObject_js_1.createDeferredObject)();server_1.world.afterEvents.worldLoad.subscribe(()=>{setTarget({Overworld:server_1.world.getDimension(vanila_data_js_1.DimensionIds.Overworld),Nether:server_1.world.getDimension(vanila_data_js_1.DimensionIds.Nether),End:server_1.world.getDimension(vanila_data_js_1.DimensionIds.End)})}),exports.Dimensions=dims,exports.Constants={dimension:dims};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createGameModule=createGameModule;const gameComponent_js_1=require("./gameComponent/gameComponent.js"),gameEngine_js_1=require("./gameEngine.js"),gamePlayer_js_1=require("./gamePlayer/gamePlayer.js"),gameState_js_1=require("./gameState/gameState.js");function createGameModule(e){const a=e.playerClass??gamePlayer_js_1.GamePlayer;class t extends gameEngine_js_1.GameEngine{constructor(e,t){super(a,e,t)}}class n extends gameState_js_1.GameState{}class s extends gameComponent_js_1.GameComponent{}return{Engine:t,State:n,Component:s}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.AutoStopComponent=void 0;const main_js_1=require("../../main.js"),index_js_1=require("../../utils/index.js");class AutoStopComponent extends main_js_1.GameComponent{onAttach(){this.options&&this.subscribe(main_js_1.Game.events.interval,this.tick.bind(this),new index_js_1.Duration(20))}tick(){let t=0;this.options.groupSet.getAllPlayers().forEach(e=>{e.ttl>0&&t++,e.isValid?e.ttl=e.initialTTL:e.ttl>0&&(e.ttl--,this.options?.immediateDie&&(e.ttl=0),0==e.ttl&&(this.options.onLeave?.(e),this.options?.shouldRelease&&main_js_1.Game.playerManager.releasePlayerFromGame(e.id,this.state.gameKey)))}),0===t&&this.options.onStopGame()}}exports.AutoStopComponent=AutoStopComponent;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.LazyLoader=void 0;const server_1=require("@minecraft/server"),main_js_1=require("../../main.js"),index_js_1=require("../../utils/index.js"),gameComponent_js_1=require("../gameComponent.js");class LazyLoader extends gameComponent_js_1.GameComponent{active=!1;logger=new index_js_1.Logger(this.constructor.name);components=[];get isActive(){return this.active}onAttach(){this.subscribe(main_js_1.Game.events.interval,()=>{if(!this.options)return;const{dimensionId:e,pos:t,onLoad:o,onUnload:s}=this.options;if(server_1.world.getDimension(e).getBlock(t)){if(!this.active){this.logger.log("load");try{o(this)}catch(e){this.logger.error("onLoad error:",e)}this.active=!0}}else if(this.active){this.logger.log("unload"),this.clearComponents();try{s?.()}catch(e){this.logger.error("onUnload error",e)}this.active=!1}},this.options.interval??new index_js_1.Duration(20))}clearComponents(){this.components.forEach(e=>{this.state.eventManager.unsubscribeBySubscriber(e)}),this.components.forEach(e=>this.state.deleteComponent(e)),this.components=[]}reload(){if(!this.options)return;const{onLoad:e,onUnload:t}=this.options;this.active&&(t?.(),this.clearComponents(),this.active=!1),e(this),this.active=!0}addComponent(e,t){return this.state.addComponent(e,t),this.components.push(e),this}}exports.LazyLoader=LazyLoader;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.StopWatchOnTimeEventSignal=void 0;const logger_js_1=require("../../../utils/logger.js");class StopWatchOnTimeEventSignal{logger=new logger_js_1.Logger(this.constructor.name);events=[];subscribe(e,t){const s={time:t.time,callback:e,once:t.once??!0};return this.events.push(s),{unsubscribe:()=>{this.events=this.events.filter(e=>e!==s)}}}checkAndFireTimeEvents(e){const t=this.events.filter(t=>e===t.time);t.forEach(e=>{try{e.callback()}catch(e){this.logger.error("执行stopWatch事件失败:",e)}}),this.events=this.events.filter(e=>!e.once||!t.includes(e))}}exports.StopWatchOnTimeEventSignal=StopWatchOnTimeEventSignal;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.StopWatch=void 0;const main_js_1=require("../../../main.js"),gameComponent_js_1=require("../../gameComponent.js"),onTimeEvent_js_1=require("./onTimeEvent.js"),tickEvent_js_1=require("./tickEvent.js");class StopWatch extends gameComponent_js_1.GameComponent{elapsedTime=0;_isRunning=!1;lastTime=0;isActive=!0;events={tick:new tickEvent_js_1.StopWatchTickEventSignal,onTime:new onTimeEvent_js_1.StopWatchOnTimeEventSignal};get time(){return this.elapsedTime}get isRunning(){return this._isRunning}onAttach(){this.isActive=!0,this.elapsedTime=this.options?.initialTime??0,this.options?.autoStart&&this.start(),this.subscribe(main_js_1.Game.events.interval,()=>{if(!this._isRunning)return;const e=Date.now(),t=e-this.lastTime;if(t>=1e3){if(this.options?.compensate){const e=Math.floor(t/1e3);this.elapsedTime+=e,this.lastTime+=1e3*e}else this.elapsedTime+=1,this.lastTime=e;this.events.tick.publish(this.elapsedTime),this.events.onTime.checkAndFireTimeEvents(this.elapsedTime)}})}onDetach(){this._isRunning=!1,this.isActive=!1,super.onDetach(),this.state.eventManager.unsubscribeByEvent(this.events.onTime),this.state.eventManager.unsubscribeByEvent(this.events.tick)}reset(e=0){this.elapsedTime=Math.max(0,e),this.lastTime=Date.now(),this._isRunning&&this.events.tick.publish(this.elapsedTime)}stop(){this._isRunning=!1}start(){!this._isRunning&&this.isActive&&(this._isRunning=!0,this.lastTime=Date.now(),this.events.tick.publish(this.elapsedTime),this.events.onTime.checkAndFireTimeEvents(this.elapsedTime))}toggle(){this._isRunning?this.stop():this.start()}}exports.StopWatch=StopWatch;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.StopWatchTickEventSignal=void 0;const index_js_1=require("../../../utils/index.js");class StopWatchTickEventSignal{tickCallbacks=new Set;logger=new index_js_1.Logger(this.constructor.name);constructor(){}subscribe(t){return this.tickCallbacks.add(t),{unsubscribe:()=>{this.tickCallbacks.delete(t)}}}publish(t){this.tickCallbacks.forEach(e=>{try{e({elapsedTime:t})}catch(t){this.logger.error("stopWatch Tick事件执行错误",t)}})}}exports.StopWatchTickEventSignal=StopWatchTickEventSignal;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.TimerOnTimeEventSignal=void 0;const logger_js_1=require("../../../utils/logger.js");class TimerOnTimeEventSignal{logger=new logger_js_1.Logger(this.constructor.name);events=[];subscribe(e,t){const s={time:t.time,callback:e,once:t.once??!0};return this.events.push(s),{unsubscribe:()=>{this.events=this.events.filter(e=>e!==s)}}}checkAndFireTimeEvents(e){const t=this.events.filter(t=>e===t.time);t.forEach(e=>{try{e.callback()}catch(e){this.logger.error("执行timer事件失败:",e)}}),this.events=this.events.filter(e=>!e.once||!t.includes(e))}}exports.TimerOnTimeEventSignal=TimerOnTimeEventSignal;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.TimerTickEventSignal=void 0;const index_js_1=require("../../../utils/index.js");class TimerTickEventSignal{tickCallbacks=new Set;logger=new index_js_1.Logger(this.constructor.name);constructor(){}subscribe(e){return this.tickCallbacks.add(e),{unsubscribe:()=>{this.tickCallbacks.delete(e)}}}publish(e){this.tickCallbacks.forEach(i=>{try{i({remainingTime:e})}catch(e){this.logger.error("timer Tick事件执行错误",e)}})}}exports.TimerTickEventSignal=TimerTickEventSignal;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Timer=void 0;const main_js_1=require("../../../main.js"),gameComponent_js_1=require("../../gameComponent.js"),onTimeEvent_js_1=require("./onTimeEvent.js"),tickEvent_js_1=require("./tickEvent.js");class Timer extends gameComponent_js_1.GameComponent{remainingTime=0;_isRunning=!1;lastTime=0;events={tick:new tickEvent_js_1.TimerTickEventSignal,onTime:new onTimeEvent_js_1.TimerOnTimeEventSignal};get time(){return this.remainingTime}get isRunning(){return this._isRunning}onAttach(){this.set(this.options?.initialTime??0),this.subscribe(main_js_1.Game.events.interval,()=>{if(!this._isRunning)return;const i=Date.now(),e=i-this.lastTime;if(e>=1e3){if(this.remainingTime<=0)return void(this._isRunning=!1);if(this.options?.compensate){const i=Math.floor(e/1e3);this.remainingTime-=i,this.lastTime+=1e3*i}else this.remainingTime-=1,this.lastTime=i;this.events.tick.publish(this.remainingTime),this.events.onTime.checkAndFireTimeEvents(this.remainingTime)}}),this.options?.autoStart&&this.start()}onDetach(){this._isRunning=!1,super.onDetach(),this.state.eventManager.unsubscribeByEvent(this.events.onTime),this.state.eventManager.unsubscribeByEvent(this.events.tick)}set(i){this.remainingTime=Math.max(0,i),this.lastTime=Date.now()}stop(){this._isRunning=!1}start(){this.remainingTime>0&&!this._isRunning&&this.isAttached&&(this._isRunning=!0,this.lastTime=Date.now(),this.events.tick.publish(this.remainingTime),this.events.onTime.checkAndFireTimeEvents(this.remainingTime))}}exports.Timer=Timer;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.GameComponent=void 0;class GameComponent{options;_isAttached=!1;get isAttached(){return this._isAttached}state;tag;get context(){return this.state.context}get runner(){return this.state.runner}constructor(t,e,s){this.options=e,this.state=t,this.tag=s}_onAttach(){try{this._isAttached=!0,this.onAttach()}catch(t){throw this._isAttached=!1,t}}_onDetach(){this.state.eventManager.unsubscribeBySubscriber(this),this.onDetach(),this._isAttached=!1}onDetach(){}subscribe(t,...e){if(this.isAttached)return this.state.eventManager.subscribe(this,t,...e)}unsubscribe(t){this.state.eventManager.unsubscribe(t)}}exports.GameComponent=GameComponent;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,r,t,o){void 0===o&&(o=t);var n=Object.getOwnPropertyDescriptor(r,t);n&&!("get"in n?!r.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,o,n)}:function(e,r,t,o){void 0===o&&(o=t),e[o]=r[t]}),__exportStar=this&&this.__exportStar||function(e,r){for(var t in e)"default"===t||Object.prototype.hasOwnProperty.call(r,t)||__createBinding(r,e,t)};Object.defineProperty(exports,"__esModule",{value:!0}),exports.GameComponent=void 0,__exportStar(require("./view/infoScoreboard.js"),exports),__exportStar(require("./common/lazyLoader.js"),exports),__exportStar(require("./common/timer/timer.js"),exports),__exportStar(require("./common/stopWatch/stopWatch.js"),exports);var gameComponent_js_1=require("./gameComponent.js");Object.defineProperty(exports,"GameComponent",{enumerable:!0,get:function(){return gameComponent_js_1.GameComponent}}),__exportStar(require("./player/blockInteractionBlocker.js"),exports),__exportStar(require("./player/entityInteractionBlocker.js"),exports),__exportStar(require("./region/regionProtecter.js"),exports),__exportStar(require("./region/regionTeamChooser.js"),exports),__exportStar(require("./region/regionTeamCleaner.js"),exports),__exportStar(require("./view/teamScoreboard.js"),exports),__exportStar(require("./player/healthIndicator.js"),exports),__exportStar(require("./player/regionMonitor.js"),exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.BlockInteractionBlocker=void 0;const server_1=require("@minecraft/server"),main_js_1=require("../../main.js");class BlockInteractionBlocker extends main_js_1.GameComponent{onAttach(){if(!this.options)return;const{groupSet:e,blockIds:t,blockComponentType:o,showMessage:r=!0,message:n}=this.options;this.subscribe(server_1.world.beforeEvents.playerInteractWithBlock,s=>{const{player:c,block:i}=s;if(e.findById(c.id)&&(!(t&&t.length>0)||t.includes(i.typeId))){if(o){if(!i.getComponent(o))return}s.cancel=!0,r&&server_1.system.run(()=>c.onScreenDisplay.setActionBar(n??"§c你无法与该方块交互!"))}})}}exports.BlockInteractionBlocker=BlockInteractionBlocker;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.EntityInteractionBlocker=void 0;const server_1=require("@minecraft/server"),main_js_1=require("../../main.js");class EntityInteractionBlocker extends main_js_1.GameComponent{onAttach(){if(!this.options)return;const{groupSet:e,entityIds:t,entityComponentTypes:n,showMessage:r=!0,message:s}=this.options;this.subscribe(server_1.world.beforeEvents.playerInteractWithEntity,o=>{const{player:i,target:c}=o;if(console.log(c.typeId),e.findById(i.id)&&(!(t&&t.length>0)||t.includes(c.typeId))){if(n&&n.length>0){if(!n.some(e=>{try{return!!c.getComponent(e)}catch{return!1}}))return}o.cancel=!0,r&&server_1.system.run(()=>i.onScreenDisplay.setActionBar(s??"§c你无法与该实体交互!"))}})}}exports.EntityInteractionBlocker=EntityInteractionBlocker;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PlayerHealthIndicator=void 0;const server_1=require("@minecraft/server"),main_js_1=require("../../main.js"),index_js_1=require("../index.js");class PlayerHealthIndicator extends index_js_1.GameComponent{obj;onAttach(){this.options&&this.subscribe(main_js_1.Game.events.interval,()=>this.refresh(),this.options.refreshInterval)}onDetach(){this.obj?.isValid&&server_1.world.scoreboard.removeObjective(this.obj)}getObj(){return this.obj&&this.obj.isValid||(this.obj=server_1.world.scoreboard.getObjective(this.options.scoreBoardName)??server_1.world.scoreboard.addObjective(this.options.scoreBoardName,this.options.displayName)),this.obj}show(){const e=this.getObj();server_1.world.scoreboard.setObjectiveAtDisplaySlot(server_1.DisplaySlotId.BelowName,{objective:e})}refresh(){const e=this.getObj();server_1.world.getAllPlayers().forEach(r=>{if(!r)return;const t=r.getComponent(server_1.EntityComponentTypes.Health);if(!t)return;const s=t.currentValue;e.setScore(r,s)})}}exports.PlayerHealthIndicator=PlayerHealthIndicator;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PlayerRegionMonitor=void 0;const main_js_1=require("../../main.js"),gameComponent_js_1=require("../gameComponent.js");class PlayerRegionMonitor extends gameComponent_js_1.GameComponent{onAttach(){this.options&&this.subscribe(main_js_1.Game.events.interval,()=>this.detectOutOfRegionPlayers(),this.options.interval)}detectOutOfRegionPlayers(){const e=this.options.region;this.options.groups.forEach(o=>{e.isInside(o.player.location)||this.options.onLeave(o)})}}exports.PlayerRegionMonitor=PlayerRegionMonitor;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.RespawnComponent=void 0;const server_1=require("@minecraft/server"),vanila_data_js_1=require("../../utils/vanila-data.js"),index_js_1=require("../index.js");class RespawnComponent extends index_js_1.GameComponent{onAttach(){if(!this.options)return;const{onDie:e,autoBroadcast:t,buildNameFunc:n,groupSet:s,onSpawn:i,buildMsg:r}=this.options;this.subscribe(server_1.world.afterEvents.entityDie,i=>{const a=i.deadEntity;if(a.typeId!==vanila_data_js_1.EntityTypeIds.Player)return;const o=s.findById(a.id);if(!o)return;const{player:d,group:p}=o;if(e?.(d,p,i.damageSource.damagingEntity),t&&n){const e=n(d,p),t=this.getKillerName(i.damageSource.damagingEntity);let a;a=r?r(e,t,d):t?`${e} §r 被 ${t} §r 杀死了`:`${e} §r 死了`,s.sendMessage(a)}}),i&&this.subscribe(server_1.world.afterEvents.playerSpawn,e=>{const t=s.findById(e.player.id);t?.player&&i(t.player,t.group)})}getKillerName(e){if(!e||e.typeId!==vanila_data_js_1.EntityTypeIds.Player)return;const t=this.options.groupSet.findById(e.id);return t&&this.options.buildNameFunc?this.options.buildNameFunc(t.player,t.group):void 0}}exports.RespawnComponent=RespawnComponent;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.SpawnPointProtector=void 0;const server_1=require("@minecraft/server"),main_js_1=require("../../main.js"),index_js_1=require("../../utils/index.js"),gameComponent_js_1=require("../gameComponent.js");class SpawnPointProtector extends gameComponent_js_1.GameComponent{onAttach(){const e=this.options;if(!e)return;(e.autoSetSpawnPoint??1)&&this.setPlayerSpawnPoints();const t=e.protectInterval??new index_js_1.Duration(10);this.subscribe(main_js_1.Game.events.interval,()=>{e.autoSetSpawnPoint&&this.setPlayerSpawnPoints(),this.protectSpawnAreas()},t);const o=index_js_1.Vector3Utils.below(e.spawnPoint);this.subscribe(server_1.world.beforeEvents.playerInteractWithBlock,e=>{index_js_1.Vector3Utils.isEqual(e.block.location,o)&&(e.cancel=!0)})}setPlayerSpawnPoints(){const{playerGroup:e,spawnPoint:t,dimension:o}=this.options;e.forEach(e=>{e.player.setSpawnPoint({dimension:o,...t})})}teleportAllToSpawn(){const{playerGroup:e,spawnPoint:t,dimension:o}=this.options;e.forEach(e=>{e.player.teleport(t,{dimension:o})})}protectSpawnAreas(){const{spawnPoint:e,dimension:t,protectRadius:o}=this.options;if(e&&t)try{const n=o??{x:1,y:1,z:1},s=index_js_1.Vector3Utils.add(e,n),i=index_js_1.Vector3Utils.subtract(e,{x:n.x,y:0,z:n.z});t.fillBlocks(new server_1.BlockVolume(s,i),"air"),t.setBlockType(index_js_1.Vector3Utils.below(e),"bedrock")}catch(e){}}}exports.SpawnPointProtector=SpawnPointProtector;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.RegionProtector=void 0;const server_1=require("@minecraft/server"),gameComponent_js_1=require("../gameComponent.js");class RegionProtector extends gameComponent_js_1.GameComponent{onAttach(){this.options&&((this.options.blockBreakInside||this.options.blockBreakOutside)&&this.subscribe(server_1.world.beforeEvents.playerBreakBlock,o=>{this.options?.groupSet&&!this.options.groupSet.has(o.player.id)||this.handleBreak(o)}),(this.options.blockInteractOutside||this.options.blockInteractInside)&&this.subscribe(server_1.world.beforeEvents.playerInteractWithBlock,o=>{this.options?.groupSet&&!this.options.groupSet.has(o.player.id)||this.handleInteract(o)}))}handleBreak(o){(this.options.blockBreakInside&&this.options.region.isBlockInside(o.block.location)||this.options.blockBreakOutside&&!this.options.region.isBlockInside(o.block.location))&&(o.cancel=!0)}handleInteract(o){(this.options.blockInteractInside&&this.options.region.isBlockInside(o.block.location)||this.options.blockInteractOutside&&!this.options.region.isBlockInside(o.block.location))&&(o.cancel=!0)}}exports.RegionProtector=RegionProtector;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.RegionTeamChooser=void 0;const regionEvents_js_1=require("../../gameEvent/events/regionEvents.js"),main_js_1=require("../../main.js"),gameComponent_js_1=require("../gameComponent.js"),server_1=require("@minecraft/server");class RegionTeamChooser extends gameComponent_js_1.GameComponent{onAttach(){this.options&&this.options.config.forEach(e=>{this.subscribe(main_js_1.Game.events.region,n=>this.handleRegionEvent(n,e),e.region)})}handleRegionEvent(e,n){const o=this.state.playerManager.get(e.player);if(o.isValid)switch(e.type){case regionEvents_js_1.RegionEventType.Enter:this.handlePlayerEnter(o,n);break;case regionEvents_js_1.RegionEventType.Leave:this.handlePlayerLeave(o,n)}else e.player.isValid&&e.player.sendMessage("暂时无法进入队伍")}handlePlayerEnter(e,n){if((this.options.allowSpectator??1)&&e.player?.getGameMode()==server_1.GameMode.Spectator)return;const o=n.team,t=o.has(e);n.onEnter&&n.onEnter(e),this.options?.config.forEach(n=>{n.team!==o&&n.team.delete(e)}),o.add(e),n.onJoin&&!t&&n.onJoin(e)}handlePlayerLeave(e,n){(this.options?.removeOnLeave??!1)&&n.team.delete(e)}onDetach(){super.onDetach(),this.options&&this.options.config.forEach(e=>e.team.clearInvalid())}}exports.RegionTeamChooser=RegionTeamChooser;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.RegionTeamCleaner=void 0;const regionEvents_js_1=require("../../gameEvent/events/regionEvents.js"),main_js_1=require("../../main.js"),gameComponent_js_1=require("../gameComponent.js");class RegionTeamCleaner extends gameComponent_js_1.GameComponent{onAttach(){this.options&&this.subscribe(main_js_1.Game.events.region,e=>{e.type==regionEvents_js_1.RegionEventType.Leave&&(this.options?.teams.forEach(n=>n.delete(e.player)),this.options?.onClean?.(e.player))},this.options.region)}}exports.RegionTeamCleaner=RegionTeamCleaner;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.InfoScoreboard=void 0;const server_1=require("@minecraft/server"),gameComponent_js_1=require("../gameComponent.js");class InfoScoreboard extends gameComponent_js_1.GameComponent{objective;initCode=48;getObj(){if(this.objective&&this.objective.isValid)return this.objective;const e=this.options.scoreBoardName;return this.objective=server_1.world.scoreboard.getObjective(e)??server_1.world.scoreboard.addObjective(e,this.options.displayName),this.objective}onAttach(){if(!this.options)throw new Error("无options");this.options.showOnAttach&&this.show()}onDetach(){this.objective?.isValid&&server_1.world.scoreboard.removeObjective(this.objective)}show(){this.options&&server_1.world.scoreboard.setObjectiveAtDisplaySlot(server_1.DisplaySlotId.Sidebar,{objective:this.getObj()})}updateLines(e){if(!this.options)return;const o=this.getObj(),t=server_1.world.scoreboard.getObjectiveAtDisplaySlot(server_1.DisplaySlotId.Sidebar)?.objective.id==o.id;if(server_1.world.scoreboard.removeObjective(o),!t)return;this.show();let r=this.initCode;for(let o=0;o<e.length;o++)""===e[o]&&(e[o]="§"+String.fromCodePoint(r++)),e[o]=" ".repeat(this.options.paddingLeft??0)+e[o];const s=this.options?.header,i=this.options?.footer;s&&e.unshift(...s()),i&&e.push(...i());const n=this.getObj();for(let o=0;o<e.length;o++)n.setScore(e[o],e.length-o-1)}}exports.InfoScoreboard=InfoScoreboard;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.TeamScoreBoard=void 0;const server_1=require("@minecraft/server"),gameComponent_js_1=require("../gameComponent.js");class TeamScoreBoard extends gameComponent_js_1.GameComponent{obj;lastRefresh=0;onAttach(){this.options&&this.reset()}getObj(){return this.obj&&this.obj.isValid||(this.obj=server_1.world.scoreboard.getObjective(this.options.scoreboardName)??server_1.world.scoreboard.addObjective(this.options.scoreboardName,this.options.displayName)),this.obj}reset(){const e=this.getObj(),r=server_1.world.scoreboard.getObjectiveAtDisplaySlot(server_1.DisplaySlotId.Sidebar)?.objective.id==e.id;server_1.world.scoreboard.removeObjective(e),r&&this.show()}show(){this.options&&server_1.world.scoreboard.setObjectiveAtDisplaySlot(server_1.DisplaySlotId.Sidebar,{objective:this.getObj()})}refreshScoreBoard(){if(!this.options)return;if(this.lastRefresh==server_1.system.currentTick)return;this.reset();const e=[],r=this.options.teams;for(const t of r){let r=t.team.getAll();t.teamFilter&&(r=r.filter(t.teamFilter)),t.teamSort&&r.sort(t.teamSort),r.forEach(r=>{if(!t.showInvalid&&!r.isValid)return;const s=t.buildName?t.buildName(r):(t.prefix??"")+r.name;e.push(s)})}const t=this.getObj();for(let r=0;r<e.length;r++)t.setScore(e[r],r);this.lastRefresh=server_1.system.currentTick}onDetach(){this.obj?.isValid&&server_1.world.scoreboard.removeObjective(this.obj)}}exports.TeamScoreBoard=TeamScoreBoard;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.GameContext=void 0;class GameContext{}exports.GameContext=GameContext;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.GameEngine=void 0;const playerManager_js_1=require("./gamePlayer/playerManager.js"),main_js_1=require("./main.js"),GameError_js_1=require("./utils/GameError.js"),logger_js_1=require("./utils/logger.js");class GameEngine{stateStack=[];logger;context;playerManager;key;_isActive=!1;get isDaemon(){return!1}get isActive(){return this._isActive}get groupBuilder(){return this.playerManager.groupBuilder}constructor(t,e,s){this.playerManager=new playerManager_js_1.GamePlayerManager(t,e,this.isDaemon),this.key=e,this.context=this.buildContext(s??{}),this.logger=new logger_js_1.Logger(this.constructor.name),this._isActive=!0}pushState(t,e){if(!this.isActive)return this;this.logger.debug(`Pushing state: ${t.name}`);const s=new t(this,e);return this.stateStack.push(s),s.onEnter(),this}popState(){const t=this.stateStack.pop();t&&this.removeState(t)}resetState(t,e){this.logger.debug(`Setting root state to: ${t.name}`),this.clearStateStack(),this.pushState(t,e)}replaceFrom(t,e,s){this.logger.debug(`Replacing from ${t.constructor.name} with ${e.name}`);const a=this.stateStack.indexOf(t);if(-1===a)throw this.logger.error(`无法找到要替换的状态实例:${t.constructor.name}`),new GameError_js_1.GameEngineError("State to replace not found in stack.");for(;this.stateStack.length>a;){const t=this.stateStack.pop();this.removeState(t)}this.pushState(e,s)}clearStateStack(){for(;this.stateStack.length>0;)this.popState()}removeState(t){this.logger.debug(`Removing state: ${t.constructor.name}`),t._onExit()}getNextState(t){const e=this.stateStack.findIndex(e=>e===t);if(-1!=e&&this.stateStack.length>e+1)return this.stateStack[e+1]}getLastState(t){const e=this.stateStack.findIndex(e=>e===t);if(e>0)return this.stateStack[e-1]}getState(t){const e=this.stateStack.find(e=>e.constructor==t);if(e)return e}deleteState(t){const e=this.stateStack.findIndex(e=>e.constructor==t);if(-1!=e){const[t]=this.stateStack.splice(e,1);this.removeState(t)}}stats(t=!1){let e;const s=this.stateStack.map(t=>t.constructor.name),a=`§ePlayers§r: §a${this.playerManager.validSize}§r / §7${this.playerManager.size}`;if(t){const t=this.stateStack.map(t=>t.stats());e=s.length>0?`§eStates§r(${s.length}): \n ${t.join("\n ")}`:"§eStates§r: §7<empty>"}else e=s.length>0?`§eStates§r(${s.length}): §b${s.join(" §7| §b")}`:"§eStates§r: §7<empty>";return["",a,e].join("\n ")}stopGame(){main_js_1.Game.manager.stopGameByKey(this.key)}onDispose(){this.logger?.debug("dispose"),this.playerManager.dispose(),this._isActive=!1,this.clearStateStack()}}exports.GameEngine=GameEngine;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.EventSubscription=exports.EventManager=void 0;const subscription_js_1=require("./subscription.js");class EventManager{subscriptionMap=new Map;isActive=!0;subscribe(s,t,...i){if(!this.isActive)return;const[n,e]=i,r=this.subscriptionMap.get(s)??[];this.subscriptionMap.set(s,r);const o=void 0!==e?t.subscribe(n,e):t.subscribe(n),c="function"==typeof o?new subscription_js_1.GameEventSubscription(t,n):o,u=new EventSubscription(t,s,c);return r.push(u),u}unsubscribe(s){const t=asInternal(s),i=this.subscriptionMap.get(t.subscriber);if(!i)return;const n=i.indexOf(s);-1!==n&&i.splice(n,1),t.subscription.unsubscribe(),0===i.length&&this.subscriptionMap.delete(t.subscriber)}unsubscribeByEvent(s){this.subscriptionMap.forEach((t,i)=>{for(const i of t){const t=asInternal(i);t.event===s&&t.subscription.unsubscribe()}const n=t.filter(t=>asInternal(t).event!==s);n.length>0?this.subscriptionMap.set(i,n):this.subscriptionMap.delete(i)})}unsubscribeBySubscriber(s){const t=this.subscriptionMap.get(s);if(t){for(const s of t)asInternal(s).subscription.unsubscribe();this.subscriptionMap.delete(s)}}dispose(){for(const s of this.subscriptionMap.values())for(const t of s)asInternal(t).subscription.unsubscribe();this.subscriptionMap.clear(),this.isActive=!1}debug(){console.log("=== EventManager Debug ==="),console.log("Total subscribers:",this.subscriptionMap.size),this.subscriptionMap.forEach((s,t)=>{console.log("Subscriber:",t.name),console.log(" Total subscriptions:",s.length);for(const t of s){const s=asInternal(t);console.log(" → Event:",s.event.constructor.name)}}),console.log("==========================")}}exports.EventManager=EventManager;class EventSubscription{event;subscriber;subscription;constructor(s,t,i){this.event=s,this.subscriber=t,this.subscription=i}}function asInternal(s){return s}exports.EventSubscription=EventSubscription;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.BasicCustomEventSignal=void 0;const logger_js_1=require("../utils/logger.js");class BasicCustomEventSignal{set=new Set;logger=new logger_js_1.Logger(this.constructor.name);unsubscribe(s){this.set.has(s)&&this.set.delete(s)}publish(s){const e=[...this.set];for(const t of e)try{this.runCallback(t,s)}catch(s){this.logger.error("Callback error:",s)}}}exports.BasicCustomEventSignal=BasicCustomEventSignal;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ButtonPushEventSignal=void 0;const server_1=require("@minecraft/server"),vector_js_1=require("../../utils/vector.js"),mapEventSignal_js_1=require("../mapEventSignal.js");class ButtonPushEventSignal extends mapEventSignal_js_1.BaseMapEventSignal{buildKey(e){const r=vector_js_1.Vector3Utils.fromArray(e.loc);return`${e.dimensionId}-${r.x}-${r.y}-${r.z}`}buildData(e,r){return{callback:e,players:r.players,sourceType:r.sourceType}}extractKey(e){const r=e.block.location;return`${e.dimension.id}-${r.x}-${r.y}-${r.z}`}filter(e,r){return(!e.sourceType||r.source.typeId===e.sourceType)&&!(r.source instanceof server_1.Player&&e.players&&!e.players.getById(r.source.id))}subscribeNative(e){return server_1.world.afterEvents.buttonPush.subscribe(e),e}unsubscribeNative(e){server_1.world.afterEvents.buttonPush.unsubscribe(e)}}exports.ButtonPushEventSignal=ButtonPushEventSignal;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PlayerItemInSlotEventSignal=void 0;const server_1=require("@minecraft/server"),index_js_1=require("../../utils/index.js");class PlayerItemInSlotEventSignal{intervalEvent;tickSub=null;map=new Map;logger=new index_js_1.Logger(this.constructor.name);constructor(t){this.intervalEvent=t}subscribe(t,e){this.tickSub||(this.tickSub=this.intervalEvent.subscribe(this.tick.bind(this)));const s={...e,callback:t};let i=this.map.get(e.slot);return i||(i=new Set,this.map.set(e.slot,i)),i.add(s),this.wrapUnsubscribe(s)}wrapUnsubscribe(t){return{unsubscribe:()=>{const e=this.map.get(t.slot);e&&(e.delete(t),0==e.size&&this.map.delete(t.slot),this.cleanUp())}}}cleanUp(){0==this.map.size&&this.tickSub&&(this.tickSub?.unsubscribe(),this.tickSub=null)}tick(){for(let t of server_1.world.getAllPlayers()){if(!t||!t.isValid)continue;const e=t.getComponent(server_1.EntityComponentTypes.Equippable);if(e)for(const[s,i]of this.map.entries()){const r=e.getEquipment(s);if(r)for(const e of i)if(r.typeId===e.itemId&&(!e.group||e.group.has(t)))try{e.callback({item:r,player:t})}catch(t){this.logger.error("回调执行错误",t)}}}}}exports.PlayerItemInSlotEventSignal=PlayerItemInSlotEventSignal;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.IntervalEventSignal=void 0;const server_1=require("@minecraft/server"),index_js_1=require("../../utils/index.js");class IntervalEventSignal{intervalId=null;items=new Set;logger=new index_js_1.Logger(this.constructor.name);subscribe(t,e){this.intervalId||this.start();const r={callback:t,interval:e?.ticks??0,tickCount:e?.ticks??1};return this.items.add(r),{unsubscribe:()=>this.items.delete(r)}}start(){this.intervalId=server_1.system.runInterval(()=>this.tick())}tick(){for(const t of this.items)if(t.tickCount--,t.tickCount<=0){try{t.callback()}catch(t){this.logger.error("Interval callback error:",t)}t.tickCount=t.interval}}dispose(){null!==this.intervalId&&(this.items.clear(),server_1.system.clearRun(this.intervalId))}}exports.IntervalEventSignal=IntervalEventSignal;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ItemUseEventSignal=void 0;const server_1=require("@minecraft/server"),mapEventSignal_js_1=require("../mapEventSignal.js");class ItemUseEventSignal extends mapEventSignal_js_1.BaseMapEventSignal{buildKey(e){return e.itemId}buildData(e,r){return{callback:e,itemId:r.itemId,players:r.players}}extractKey(e){return e.itemStack.typeId??null}filter(e,r){return!(r.source instanceof server_1.Player&&e.players&&!e.players.getById(r.source.id))}subscribeNative(e){return server_1.world.afterEvents.itemUse.subscribe(e),e}unsubscribeNative(e){server_1.world.afterEvents.itemUse.unsubscribe(e)}}exports.ItemUseEventSignal=ItemUseEventSignal;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PlayerOnBlockEventSignal=void 0;const server_1=require("@minecraft/server"),index_js_1=require("../../utils/index.js");class PlayerOnBlockEventSignal{tickEvent;blockMap=new Map;globalSubs=new Set;logger=new index_js_1.Logger(this.constructor.name);static BELOW_OFFSET={x:0,y:.02,z:0};subscription=null;constructor(e){this.tickEvent=e}subscribe(e,t){this.subscription||(this.subscription=this.tickEvent.subscribe(this.tick.bind(this)));const s=t?.typeIds,i={group:t?.group,callback:e,typeIds:s};if(!s||0===s.length)return this.globalSubs.add(i),this.wrapUnsubscribe(()=>this.globalSubs.delete(i));if(1===s.length){const e=s[0],t=this.blockMap.get(e)??new Set;return t.add(i),this.blockMap.set(e,t),this.wrapUnsubscribe(()=>{const t=this.blockMap.get(e);t&&(t.delete(i),0===t.size&&this.blockMap.delete(e))})}return this.globalSubs.add(i),this.wrapUnsubscribe(()=>this.globalSubs.delete(i))}wrapUnsubscribe(e){return{unsubscribe:()=>{e(),0===this.blockMap.size&&0===this.globalSubs.size&&this.cleanUp()}}}cleanUp(){this.subscription?.unsubscribe(),this.subscription=null}tick(){for(const e of server_1.world.getAllPlayers()){if(null==e||!e.isValid)continue;if(e.location.y<e.dimension.heightRange.min||e.location.y>e.dimension.heightRange.max)continue;const t=e.dimension.getBlock(index_js_1.Vector3Utils.subtract(e.location,PlayerOnBlockEventSignal.BELOW_OFFSET));if(!t)continue;for(const s of this.globalSubs)if((!s.group||s.group.getById(e.id))&&(!s.typeIds||s.typeIds.includes(t.typeId)))try{s.callback({player:e,block:t})}catch(e){this.logger.error("回调执行错误",e)}const s=this.blockMap.get(t.typeId);if(s)for(const i of s)if(!i.group||i.group.getById(e.id))try{i.callback({player:e,block:t})}catch(e){this.logger.error("回调执行错误",e)}}}}exports.PlayerOnBlockEventSignal=PlayerOnBlockEventSignal;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PlayerRegionEventSignal=exports.RegionEventType=void 0;const server_1=require("@minecraft/server"),func_js_1=require("../../utils/func.js"),logger_js_1=require("../../utils/logger.js"),vanila_data_js_1=require("../../utils/vanila-data.js");!function(e){e.Enter="enter",e.Leave="leave"}(exports.RegionEventType||(exports.RegionEventType={}));class PlayerRegionEventSignal{tickEvent;constructor(e){this.tickEvent=e}logger=new logger_js_1.Logger(this.constructor.name);subscription=null;allSubscriptions=new Set;regionStates=new Map;subscribe(e,i){const t={callback:e,region:i};return this.allSubscriptions.add(t),this.regionStates.has(i)||this.regionStates.set(i,new Set),null===this.subscription&&this.startMonitoring(),{unsubscribe:()=>{this.allSubscriptions.delete(t),[...this.allSubscriptions].some(e=>e.region===i)||this.regionStates.delete(i),0===this.allSubscriptions.size&&this.stopMonitoring()}}}startMonitoring(){this.logger.debug("启动玩家区域观测"),this.subscription=this.tickEvent.subscribe(this.checkAllRegions.bind(this))}stopMonitoring(){null!==this.subscription&&(this.logger.debug("停止玩家区域观测"),this.subscription.unsubscribe(),this.subscription=null,this.regionStates.clear())}checkAllRegions(){const e=server_1.world.getAllPlayers().filter(e=>null!=e),i={},t=Object.values(vanila_data_js_1.DimensionIds);for(const s of t)i[s]=e.filter(e=>e.dimension.id===s);for(const t of this.allSubscriptions){const s=t.region,n=this.regionStates.get(s)??new Set,r=i[s.dimensionId]??[],o=new Set(r.filter(e=>s.isInside(e.location)).map(e=>e.id));for(const e of(0,func_js_1.difference)(o,n)){const i=r.find(i=>i.id===e);this.publish(i,exports.RegionEventType.Enter,t)}for(const i of(0,func_js_1.difference)(n,o)){const s=e.find(e=>e.id===i);s&&this.publish(s,exports.RegionEventType.Leave,t)}this.regionStates.set(s,o)}}publish(e,i,t){try{t.callback({player:e,type:i,region:t.region})}catch(e){this.logger.error("Region event callback error:",e)}}dispose(){this.stopMonitoring(),this.allSubscriptions.clear()}}exports.PlayerRegionEventSignal=PlayerRegionEventSignal;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.SignClickEventSignal=void 0;const server_1=require("@minecraft/server"),mapEventSignal_js_1=require("../mapEventSignal.js");class SignClickEventSignal extends mapEventSignal_js_1.BaseMapEventSignal{signId="minecraft:wall_sign";buildKey(e){const r=e.loc;return`${e.dimensionId}-${r.x}-${r.y}-${r.z}`}buildData(e,r){return{callback:e,players:r.players,lastClick:server_1.system.currentTick,clickInterval:r.clickInterval??1}}extractKey(e){const r=e.block.location;return`${e.block.dimension.id}-${r.x}-${r.y}-${r.z}`}isTargetEvent(e){return e.block.typeId===this.signId}filter(e,r){return!(server_1.system.currentTick-e.lastClick<e.clickInterval)&&(!(e.players&&!e.players.getById(r.player.id))&&(e.lastClick=server_1.system.currentTick,!0))}subscribeNative(e){return server_1.world.beforeEvents.playerInteractWithBlock.subscribe(e),e}unsubscribeNative(e){server_1.world.beforeEvents.playerInteractWithBlock.unsubscribe(e)}}exports.SignClickEventSignal=SignClickEventSignal;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var s=Object.getOwnPropertyDescriptor(t,n);s&&!("get"in s?!t.__esModule:s.writable||s.configurable)||(s={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,s)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),__exportStar=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||__createBinding(t,e,n)};Object.defineProperty(exports,"__esModule",{value:!0}),exports.gameEvents=void 0;const buttonPush_js_1=require("./events/buttonPush.js"),inSlot_js_1=require("./events/inSlot.js"),interval_js_1=require("./events/interval.js"),itemUse_js_1=require("./events/itemUse.js"),onBlock_js_1=require("./events/onBlock.js"),regionEvents_js_1=require("./events/regionEvents.js"),signClick_js_1=require("./events/signClick.js");class gameEvents{interval;buttonPush=new buttonPush_js_1.ButtonPushEventSignal;signClick=new signClick_js_1.SignClickEventSignal;itemUse=new itemUse_js_1.ItemUseEventSignal;region;onBlock;inSlot;constructor(){this.interval=new interval_js_1.IntervalEventSignal,this.region=new regionEvents_js_1.PlayerRegionEventSignal(this.interval),this.onBlock=new onBlock_js_1.PlayerOnBlockEventSignal(this.interval),this.inSlot=new inSlot_js_1.PlayerItemInSlotEventSignal(this.interval)}}exports.gameEvents=gameEvents,__exportStar(require("./events/buttonPush.js"),exports),__exportStar(require("./events/inSlot.js"),exports),__exportStar(require("./events/interval.js"),exports),__exportStar(require("./events/itemUse.js"),exports),__exportStar(require("./events/onBlock.js"),exports),__exportStar(require("./events/regionEvents.js"),exports),__exportStar(require("./events/signClick.js"),exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var n=Object.getOwnPropertyDescriptor(t,r);n&&!("get"in n?!t.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,n)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),__exportStar=this&&this.__exportStar||function(e,t){for(var r in e)"default"===r||Object.prototype.hasOwnProperty.call(t,r)||__createBinding(t,e,r)};Object.defineProperty(exports,"__esModule",{value:!0}),__exportStar(require("./eventManager.js"),exports),__exportStar(require("./eventSignal.js"),exports),__exportStar(require("./gameEvent.js"),exports),__exportStar(require("./subscription.js"),exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.BaseMapEventSignal=void 0;const index_js_1=require("../utils/index.js");class BaseMapEventSignal{logger=new index_js_1.Logger(this.constructor.name);map=new Map;totalCount=0;inited=!1;nativeUnsub;subscribe(t,e){const i=this.buildKey(e);if(null==i)throw new Error("必须提供有效的订阅 key");this.inited||this.init();let s=this.map.get(i);s||(s=new Set,this.map.set(i,s));const n=this.buildData(t,e);return s.add(n),this.totalCount++,this.wrapUnsub(i,n)}wrapUnsub(t,e){let i=!1;return{unsubscribe:()=>{if(i)return;i=!0;const s=this.map.get(t);s&&(s.delete(e)&&(this.totalCount--,0===s.size&&this.map.delete(t)),0===this.totalCount&&this.cleanup())}}}init(){this.inited=!0,this.nativeUnsub=this.subscribeNative(this.publish.bind(this))}cleanup(){if(this.nativeUnsub)try{this.unsubscribeNative(this.nativeUnsub)}catch(t){this.logger.warn("取消底层订阅失败:",t)}finally{this.nativeUnsub=void 0}this.map.clear(),this.totalCount=0,this.inited=!1}publish(t){if(!this.isTargetEvent(t))return;const e=this.extractKey(t);if(null==e)return;const i=this.map.get(e);if(!i||0===i.size)return;const s=this.eventWrapper(t);for(const e of Array.from(i))if(this.filter(e,t))try{e.callback(s)}catch(t){this.logger.error("callback failed:",t)}}isTargetEvent(t){return!0}eventWrapper(t){return t}}exports.BaseMapEventSignal=BaseMapEventSignal;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.GameEventSubscription=void 0;class GameEventSubscription{event;callback;constructor(e,t){this.event=e,this.callback=t}unsubscribe(){this.event.unsubscribe(this.callback)}}exports.GameEventSubscription=GameEventSubscription;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.TTLPlayer=exports.GamePlayer=void 0;const server_1=require("@minecraft/server");class GamePlayer{_player;id;name;isActive=!0;constructor(e){this._player=e,this.id=e.id,this.name=e.name}get isValid(){return this._player.isValid&&this.isActive}get player(){if(this.isValid)return this._player}sendMessage(e){this.isValid&&this._player.sendMessage(e)}runCommand(e){if(this.isValid)return this._player.runCommand(e)}giveItem(e){if(!this.isValid)return;const t=this._player.getComponent(server_1.EntityComponentTypes.Inventory)?.container;t&&t.addItem(e)}clear(e){this.runCommand("clear @s "+(e??""))}title(e,t,i){this.isValid&&this._player.onScreenDisplay.setTitle(e,{subtitle:t,fadeInDuration:10,stayDuration:70,fadeOutDuration:20,...i})}actionbar(e){this.isValid&&this._player.onScreenDisplay.setActionBar(e)}addEffect(e,t,i,s){this.isValid&&this._player.addEffect(e,t,{amplifier:i??1,showParticles:s??!1})}}exports.GamePlayer=GamePlayer;class TTLPlayer extends GamePlayer{initialTTL=30;_ttl=this.initialTTL;set ttl(e){this._ttl=this.isActive?e:0}get ttl(){return this._ttl}get isValid(){return super.isValid&&this.ttl>0}}exports.TTLPlayer=TTLPlayer;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PlayerGroupBuilder=void 0;const server_1=require("@minecraft/server"),playerGroup_js_1=require("./playerGroup.js");class PlayerGroupBuilder{playerManager;constructor(r){this.playerManager=r}emptyGroup(...r){return new playerGroup_js_1.PlayerGroup(this.playerManager.playerConstructor,[],r[0])}fromPlayers(r,...e){return new playerGroup_js_1.PlayerGroup(this.playerManager.playerConstructor,r.map(r=>this.playerManager.get(r)),e[0])}fromGroup(r,...e){return new playerGroup_js_1.PlayerGroup(this.playerManager.playerConstructor,r.getAllPlayers().map(r=>this.playerManager.get(r)),e[0])}fromRegion(r,e,...a){const l=server_1.world.getDimension(r).getPlayers(e.getEntityQueryOption()).filter(r=>null!=r);return new playerGroup_js_1.PlayerGroup(this.playerManager.playerConstructor,l.map(r=>this.playerManager.get(r)),a[0])}fromAll(...r){const e=server_1.world.getAllPlayers().filter(r=>null!=r);return new playerGroup_js_1.PlayerGroup(this.playerManager.playerConstructor,e.map(r=>this.playerManager.get(r)),r[0])}}exports.PlayerGroupBuilder=PlayerGroupBuilder;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PlayerGroupSet=void 0;const playerGroup_js_1=require("./playerGroup.js");class PlayerGroupSet{groups=[];constructor(r){r&&(this.groups=r.slice())}addGroup(r){if(!(r instanceof playerGroup_js_1.PlayerGroup))throw new Error("只能添加 PlayerGroup 实例");return this.groups.push(r),this}removeGroup(r){const e=this.groups.indexOf(r);return-1!==e&&this.groups.splice(e,1),this}getGroups(){return this.groups.slice()}getAllPlayers(){const r=new Set;return this.groups.forEach(e=>e.getAll().forEach(e=>r.add(e))),[...r.values()]}getAllValidPlayers(){return this.getAllPlayers().filter(r=>r.isValid)}forEach(r){return this.getGroups().forEach(e=>e.forEach(r)),this}forEachGroup(r){this.groups.forEach(r)}runCommand(r){return this.forEach(e=>e.runCommand(r)),this}runCommands(r){r.forEach(r=>this.runCommand(r))}sendMessage(r){return this.forEach(e=>e.sendMessage(r)),this}title(r,e,t){return this.forEach(s=>s.title(r,e,t)),this}filter(r){return this.groups.map(e=>e.filter(r)).flat()}clear(){return this.groups=[],this}clearInvalid(){this.groups.forEach(r=>r.clearInvalid())}clone(){return new PlayerGroupSet(this.groups.map(r=>r.clone()))}get size(){return this.getAllPlayers().length}get validSize(){return this.getAllPlayers().filter(r=>r.isValid).length}findById(r){for(const e of this.groups){const t=e.getById(r);if(t)return{player:t,group:e}}}has(r){return null!=this.findById(r)}}exports.PlayerGroupSet=PlayerGroupSet;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,r,t,a){void 0===a&&(a=t);var o=Object.getOwnPropertyDescriptor(r,t);o&&!("get"in o?!r.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,a,o)}:function(e,r,t,a){void 0===a&&(a=t),e[a]=r[t]}),__exportStar=this&&this.__exportStar||function(e,r){for(var t in e)"default"===t||Object.prototype.hasOwnProperty.call(r,t)||__createBinding(r,e,t)};Object.defineProperty(exports,"__esModule",{value:!0}),exports.GamePlayerManager=exports.PlayerGroup=exports.PlayerGroupSet=void 0,__exportStar(require("./gamePlayer.js"),exports),__exportStar(require("./groupBuilder.js"),exports);var groupSet_js_1=require("./groupSet.js");Object.defineProperty(exports,"PlayerGroupSet",{enumerable:!0,get:function(){return groupSet_js_1.PlayerGroupSet}});var playerGroup_js_1=require("./playerGroup.js");Object.defineProperty(exports,"PlayerGroup",{enumerable:!0,get:function(){return playerGroup_js_1.PlayerGroup}});var playerManager_js_1=require("./playerManager.js");Object.defineProperty(exports,"GamePlayerManager",{enumerable:!0,get:function(){return playerManager_js_1.GamePlayerManager}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PlayerGroup=void 0;const GameError_js_1=require("../utils/GameError.js");class PlayerGroupError extends GameError_js_1.GameError{constructor(r,e){super(r,e),this.name=this.constructor.name}}class PlayerGroup{players;playerConstructor;data;constructor(r,e,t){if(this.playerConstructor=r,null!=e&&e.some(e=>!(e instanceof r)))throw new PlayerGroupError(`players必须全为:${r.name}`);this.data=t,this.players=e??[]}get size(){return this.players.length}get validSize(){return this.players.filter(r=>r.isValid).length}getById(r){return this.players.find(e=>e.id==r)}has(r){return-1!=this.players.findIndex(e=>e.id==r.id)}add(r){if(!(r instanceof this.playerConstructor))throw new PlayerGroupError(`添加的player必须是${this.playerConstructor.name}`);return this.has(r)||this.players.push(r),this}delete(r){const e=this.players.findIndex(e=>e.id==r.id);return-1!=e&&this.players.splice(e,1),this}removeWhere(r){const e=[];return this.players=this.players.filter(t=>!r(t)||(e.push(t),!1)),e}getAll(){return this.players.slice()}getAllPlayers(){return this.players.map(r=>r.player).filter(r=>null!=r)}forEach(r){try{this.players.filter(r=>r.isValid).forEach(r)}catch(r){console.error(r,r instanceof Error?r.stack:"")}}runCommand(r){return this.forEach(e=>e.runCommand(r)),this}sendMessage(r){return this.forEach(e=>e.sendMessage(r)),this}title(r,e,t){return this.forEach(s=>s.title(r,e,t)),this}actionbar(r){return this.forEach(e=>e.actionbar(r)),this}playSound(r,e){return this.forEach(t=>t.player?.playSound(r,e)),this}map(r){return this.players.map(r)}random(){const r=this.players.filter(r=>r.isValid);if(0===r.length)return;return r[Math.floor(Math.random()*r.length)]}filter(r){return this.players.filter(r)}clear(){return this.players=[],this}clearInvalid(){return this.players=this.players.filter(r=>r.isValid),this}clone(){return new PlayerGroup(this.playerConstructor,this.players)}find(r){return this.players.find(r)}findIndex(r){return this.players.findIndex(r)}}exports.PlayerGroup=PlayerGroup;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.GamePlayerManager=void 0;const main_js_1=require("../main.js"),groupBuilder_js_1=require("./groupBuilder.js");class GamePlayerManager{gameKey;isDaemon;players=new Map;playerConstructor;groupBuilder;constructor(e,r,a){this.gameKey=r,this.isDaemon=a,this.playerConstructor=e,this.groupBuilder=new groupBuilder_js_1.PlayerGroupBuilder(this)}get(e){let r=this.players.get(e.id);if(!(r&&r.isActive||(r=new this.playerConstructor(e),this.players.set(e.id,r),this.isDaemon))){const a=main_js_1.Game.playerManager.allocatePlayerToGame(e.id,this.gameKey);r.isActive=a}return r}getAll(){return Array.from(this.players.values())}deactivate(e){let r=this.players.get(e.id);r&&(r.isActive=!1)}get size(){return this.players.size}get validSize(){return Array.from(this.players.values()).filter(e=>e.isValid).length}dispose(){main_js_1.Game.playerManager.releaseAllPlayerFromGame(this.gameKey)}}exports.GamePlayerManager=GamePlayerManager;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.PlaneRegion=exports.CylinderRegion=exports.SphereRegion=exports.CubeRegion=exports.GameRegion=void 0;const server_1=require("@minecraft/server"),vector_js_1=require("../utils/vector.js");class GameRegion{dimensionId;constructor(s){this.dimensionId=s}getPlayersInRegion(){const s=[],t=server_1.world.getAllPlayers();for(const i of t)null!=i&&i.dimension.id==this.dimensionId&&this.isInside(i.location)&&s.push(i);return s}getEntitesInRegion(s){return server_1.world.getDimension(this.dimensionId).getEntities({...this.getEntityQueryOption(),...s}).filter(s=>null!=s)}runCommandOnPlayers(s){this.getPlayersInRegion().forEach(t=>t.runCommand(s))}forEachPlayer(s){this.getPlayersInRegion().forEach(s)}}exports.GameRegion=GameRegion;class CubeRegion extends GameRegion{pos1;pos2;constructor(s,t,i){super(s),this.pos1=t,this.pos2=i}getEntityQueryOption(){return{location:this.pos1,volume:vector_js_1.Vector3Utils.subtract(this.pos2,this.pos1)}}isInside(s){const t=1e-5,i=Math.min(this.pos1.x,this.pos2.x),o=Math.max(this.pos1.x,this.pos2.x)+1,e=Math.min(this.pos1.y,this.pos2.y),n=Math.max(this.pos1.y,this.pos2.y)+.99,h=Math.min(this.pos1.z,this.pos2.z),r=Math.max(this.pos1.z,this.pos2.z)+1,p=s.x+t>=i&&s.x-t<=o,a=s.y+t>=e&&s.y-t<=n,x=s.z+t>=h&&s.z-t<=r;return p&&a&&x}isBlockInside(s){const t=Math.min(this.pos1.x,this.pos2.x),i=Math.max(this.pos1.x,this.pos2.x),o=Math.min(this.pos1.y,this.pos2.y),e=Math.max(this.pos1.y,this.pos2.y),n=Math.min(this.pos1.z,this.pos2.z),h=Math.max(this.pos1.z,this.pos2.z),r=s.x>=t&&s.x<=i,p=s.y>=o&&s.y<=e,a=s.z>=n&&s.z<=h;return r&&p&&a}toVolume(){return new server_1.BlockVolume(this.pos1,this.pos2)}getCapacity(){const s=vector_js_1.Vector3Utils.add(vector_js_1.Vector3Utils.subtract(this.getMax(),this.getMin()),{x:1,y:1,z:1});return Math.abs(s.x*s.y*s.z)}getBounds(){return{x1:this.pos1.x,x2:this.pos2.x,y1:this.pos1.y,y2:this.pos2.y,z1:this.pos1.z,z2:this.pos2.z}}outSet(s){const t=Math.min(this.pos1.x,this.pos2.x)-s.x,i=Math.max(this.pos1.x,this.pos2.x)+s.x,o=Math.min(this.pos1.y,this.pos2.y)-s.y,e=Math.max(this.pos1.y,this.pos2.y)+s.y,n=Math.min(this.pos1.z,this.pos2.z)-s.z,h=Math.max(this.pos1.z,this.pos2.z)+s.z;return new CubeRegion(this.dimensionId,{x:t,y:o,z:n},{x:i,y:e,z:h})}inSet(s){const t=Math.min(this.pos1.x,this.pos2.x)+s.x,i=Math.max(this.pos1.x,this.pos2.x)-s.x,o=Math.min(this.pos1.y,this.pos2.y)+s.y,e=Math.max(this.pos1.y,this.pos2.y)-s.y,n=Math.min(this.pos1.z,this.pos2.z)+s.z,h=Math.max(this.pos1.z,this.pos2.z)-s.z;if(!(t>=i||o>=e||n>=h))return new CubeRegion(this.dimensionId,{x:t,y:o,z:n},{x:i,y:e,z:h})}getMax(){return{x:Math.max(this.pos1.x,this.pos2.x),y:Math.max(this.pos1.y,this.pos2.y),z:Math.max(this.pos1.z,this.pos2.z)}}getMin(){return{x:Math.min(this.pos1.x,this.pos2.x),y:Math.min(this.pos1.y,this.pos2.y),z:Math.min(this.pos1.z,this.pos2.z)}}}exports.CubeRegion=CubeRegion;class SphereRegion extends GameRegion{center;r;rm;constructor(s,t,i,o){super(s),this.center=t,this.r=i,this.rm=o}getEntityQueryOption(){return{location:this.center,maxDistance:this.r,minDistance:this.rm}}isInside(s){return vector_js_1.Vector3Utils.squaredDistance(this.center,s)<=this.r*this.r}isBlockInside(s){return this.isInside(s)}}exports.SphereRegion=SphereRegion;class CylinderRegion extends GameRegion{getEntityQueryOption(){throw new Error("Method not implemented.")}isInside(s){throw new Error("Method not implemented.")}isBlockInside(s){return this.isInside(s)}}exports.CylinderRegion=CylinderRegion;class PlaneRegion extends GameRegion{pos1;pos2;constructor(s,t,i){super(s),this.pos1=t,this.pos2=i}getEntityQueryOption(){return{location:{x:this.pos1.x,y:-1e3,z:this.pos1.y},volume:{x:this.pos2.x-this.pos1.x,z:this.pos2.y-this.pos1.y,y:2e3}}}isInside(s){const t=1e-5,i=Math.min(this.pos1.x,this.pos2.x),o=Math.max(this.pos1.x,this.pos2.x)+1,e=Math.min(this.pos1.y,this.pos2.y),n=Math.max(this.pos1.y,this.pos2.y)+1,h=s.x+t>=i&&s.x-t<=o,r=s.y+t>=e&&s.y-t<=n;return h&&r}isBlockInside(s){const t=Math.min(this.pos1.x,this.pos2.x),i=Math.max(this.pos1.x,this.pos2.x),o=Math.min(this.pos1.y,this.pos2.y),e=Math.max(this.pos1.y,this.pos2.y),n=s.x>=t&&s.x<=i,h=s.y>=o&&s.y<=e;return n&&h}}exports.PlaneRegion=PlaneRegion;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,r,t,n){void 0===n&&(n=t);var i=Object.getOwnPropertyDescriptor(r,t);i&&!("get"in i?!r.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,n,i)}:function(e,r,t,n){void 0===n&&(n=t),e[n]=r[t]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,r){Object.defineProperty(e,"default",{enumerable:!0,value:r})}:function(e,r){e.default=r}),__importStar=this&&this.__importStar||function(){var e=function(r){return e=Object.getOwnPropertyNames||function(e){var r=[];for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(r[r.length]=t);return r},e(r)};return function(r){if(r&&r.__esModule)return r;var t={};if(null!=r)for(var n=e(r),i=0;i<n.length;i++)"default"!==n[i]&&__createBinding(t,r,n[i]);return __setModuleDefault(t,r),t}}(),__exportStar=this&&this.__exportStar||function(e,r){for(var t in e)"default"===t||Object.prototype.hasOwnProperty.call(r,t)||__createBinding(r,e,t)};Object.defineProperty(exports,"__esModule",{value:!0}),exports.regionHelper=exports.Region=void 0,exports.Region=__importStar(require("./gameRegion.js"));var regionHelper_js_1=require("./regionHelper.js");Object.defineProperty(exports,"regionHelper",{enumerable:!0,get:function(){return regionHelper_js_1.regionHelper}}),__exportStar(require("./gameRegion.js"),exports);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.regionHelper=void 0;const server_1=require("@minecraft/server"),gameRegion_js_1=require("./gameRegion.js");class RegionHelper{fillGenerator(e,n,o=32767){const i=this.splitCubeRegion(e,o);return this.fillGen(i,n)}*fillGen(e,n){if(0==e.length)return;const o=server_1.world.getDimension(e[0].dimensionId),i=server_1.BlockTypes.get(n);if(i)for(let n of e)o.fillBlocks(n.toVolume(),i),yield}splitCubeRegion(e,n=32767){n>32767&&(n=32767);const o=[e],i=[];for(;o.length>0;){const e=o.shift();if(e.getCapacity()<=n){i.push(e);continue}const{x1:s,y1:t,z1:r,x2:l,y2:g,z2:u}=e.getBounds(),c={x:l-s+1,y:g-t+1,z:u-r+1};let f=null,p=1;for(const e of["x","y","z"])c[e]>p&&(p=c[e],f=e);if(null===f){i.push(e);continue}const d={x:s,y:t,z:r},a={x:l,y:g,z:u},_=d[f]+Math.floor(c[f]/2),h={...a};h[f]=_-1;const m={...d};m[f]=_,o.push(new gameRegion_js_1.CubeRegion(e.dimensionId,d,h)),o.push(new gameRegion_js_1.CubeRegion(e.dimensionId,m,a))}return i}}exports.regionHelper=new RegionHelper;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.AutoStopState=void 0;const main_js_1=require("../../main.js"),index_js_1=require("../../utils/index.js");class AutoStopState extends main_js_1.GameState{onEnter(){this.config?.groupSet&&this.subscribe(main_js_1.Game.events.interval,this.tick.bind(this),new index_js_1.Duration(20))}tick(){let t=0;this.config.groupSet.getAllPlayers().forEach(e=>{e.ttl>0&&t++,e.isValid?e.ttl=e.initialTTL:e.ttl>0&&(e.ttl--,this.config?.immediateDie&&(e.ttl=0),0==e.ttl&&(this.config.onLeave?.(e),(this.config?.shouldRelease??1)&&main_js_1.Game.playerManager.releasePlayerFromGame(e.id,this.engine.key)))}),0===t&&(this.logger.debug("检测到玩家已全部下线超时,游戏结束"),this.engine.stopGame())}}exports.AutoStopState=AutoStopState;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.GameState=void 0;const eventManager_js_1=require("../gameEvent/eventManager.js"),RunnerManager_js_1=require("../Runner/RunnerManager.js"),logger_js_1=require("../utils/logger.js"),types_js_1=require("./types.js");class GameState{logger=new logger_js_1.Logger(this.constructor.name);engine;components=new Map;eventManager=new eventManager_js_1.EventManager;runner=new RunnerManager_js_1.RunnerManager(this.constructor.name);config;constructor(e,t){this.engine=e,this.config=t}get context(){return this.engine.context}get playerManager(){return this.engine.playerManager}get gameKey(){return this.engine.key}get nextState(){return this.engine.getNextState(this)}get lastState(){return this.engine.getLastState(this)}addComponent(e,t,n){if(!this.engine.isActive)return this;this.logger.debug(`添加组件:${e.name}`+(null!=n?`(tag=${n})`:""));const s=this.components.get(e)??[];if(s.some(e=>e.tag===n))throw new types_js_1.GameComponentAlreadyExistsError(e,n);this.components.has(e)||this.components.set(e,s);const r=new e(this,t,n);s.push(r);try{r._onAttach()}catch(t){this.logger.error(`组件 ${e.name} tag=${n} 加载失败`,t)}return this}addComponents(e){for(const t of e)this.addComponent(t)}getComponent(e,t){const n=this.components.get(e),s=n?.find(e=>e.tag===t);if(!s)throw new types_js_1.GameComponentNotExistsError(e,t);return s}deleteComponent(e,t){this.logger.debug(`删除组件:${e.name}`);const n=this.components.get(e);if(!n)return this;const s=n?.findIndex(e=>e.tag===t);if(-1===s)return this;const r=n[s];try{r._onDetach(),n.splice(s,1),0===n.length&&this.components.delete(e)}catch(t){throw new types_js_1.ComponentDeleteFailedError(e,r.tag,{cause:t})}return this}deleteAllComponents(){this.logger.debug("删除所有组件");for(let[e,t]of this.components.entries())for(const n of t){const t=n;try{t._onDetach()}catch(n){throw new types_js_1.ComponentDeleteFailedError(e,t.tag,{cause:n})}}this.components.clear()}subscribe(e,...t){return this.eventManager.subscribe(this,e,...t)}pushState(e,t){this.engine.pushState(e,t)}popState(){this.engine.popState()}transitionTo(e,t){this.engine.replaceFrom(this,e,t)}_onExit(){this.logger.debug("onExit"),this.onExit(),this.eventManager.dispose(),this.deleteAllComponents(),this.runner.dispose()}onExit(){}stats(){const e=this.constructor.name,t=[...this.components.values()].map(e=>e.map(e=>e.constructor.name+(null!=e.tag?`(tag=${e.tag})`:""))).flat();return`§b${e}§r(${t.length}): §i${t.length?t.join(","):"<none>"}`}}exports.GameState=GameState;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.AutoStopState=exports.GameState=void 0;var gameState_js_1=require("./gameState.js");Object.defineProperty(exports,"GameState",{enumerable:!0,get:function(){return gameState_js_1.GameState}});var autoStop_js_1=require("./common/autoStop.js");Object.defineProperty(exports,"AutoStopState",{enumerable:!0,get:function(){return autoStop_js_1.AutoStopState}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ComponentDeleteFailedError=exports.ComponentLoadFailedError=exports.GameComponentAlreadyExistsError=exports.GameComponentNotExistsError=void 0;const GameError_js_1=require("../utils/GameError.js");class GameComponentNotExistsError extends GameError_js_1.GameStateError{constructor(r,e,o){super(e?`组件 ${r.name} (tag=${e}) 不存在于当前状态中`:`组件 ${r.name} 不存在于当前状态中`,o)}}exports.GameComponentNotExistsError=GameComponentNotExistsError;class GameComponentAlreadyExistsError extends GameError_js_1.GameStateError{constructor(r,e,o){super(e?`组件 ${r.name} (tag=${e}) 已经存在于当前状态中`:`组件 ${r.name} 已经存在于当前状态中`,o)}}exports.GameComponentAlreadyExistsError=GameComponentAlreadyExistsError;class ComponentLoadFailedError extends GameError_js_1.GameStateError{constructor(r,e,o){super(`组件 ${r.name} tag=${e} 加载失败`,o)}}exports.ComponentLoadFailedError=ComponentLoadFailedError;class ComponentDeleteFailedError extends GameError_js_1.GameStateError{constructor(r,e,o){super(`组件 ${r.name} tag=${e} 卸载失败`,o)}}exports.ComponentDeleteFailedError=ComponentDeleteFailedError;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.GameStructure=void 0;const server_1=require("@minecraft/server"),vanila_data_js_1=require("../utils/vanila-data.js");class GameStructure{id;dim;loc;constructor(e,r,t=vanila_data_js_1.DimensionIds.Overworld){this.id=e,this.dim=t,this.loc=r}get(){return server_1.world.structureManager.get(this.id)}place(e){const r=server_1.world.getDimension(this.dim);server_1.world.structureManager.place(this.id,r,this.loc,e)}placeOn(e,r,t){server_1.world.structureManager.place(this.id,r,e,t)}}exports.GameStructure=GameStructure;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,r,t,n){void 0===n&&(n=t);var a=Object.getOwnPropertyDescriptor(r,t);a&&!("get"in a?!r.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,n,a)}:function(e,r,t,n){void 0===n&&(n=t),e[n]=r[t]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,r){Object.defineProperty(e,"default",{enumerable:!0,value:r})}:function(e,r){e.default=r}),__exportStar=this&&this.__exportStar||function(e,r){for(var t in e)"default"===t||Object.prototype.hasOwnProperty.call(r,t)||__createBinding(r,e,t)},__importStar=this&&this.__importStar||function(){var e=function(r){return e=Object.getOwnPropertyNames||function(e){var r=[];for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(r[r.length]=t);return r},e(r)};return function(r){if(r&&r.__esModule)return r;var t={};if(null!=r)for(var n=e(r),a=0;a<n.length;a++)"default"!==n[a]&&__createBinding(t,r,n[a]);return __setModuleDefault(t,r),t}}();Object.defineProperty(exports,"__esModule",{value:!0}),exports.createGameModule=exports.RunnerManager=exports.ScriptCancelledError=exports.ScriptRunner=exports.GameStructure=exports.GameContext=exports.GameEngine=exports.Utils=exports.Game=void 0,exports.initSAPIGame=initSAPIGame;const server_1=require("@minecraft/server"),config_js_1=require("./config.js"),constants_js_1=require("./constants.js"),gameEvent_js_1=require("./gameEvent/gameEvent.js"),gameCommand_js_1=require("./system/gameCommand.js"),gameManager_js_1=require("./system/gameManager.js"),globalPlayerManager_js_1=require("./system/globalPlayerManager.js");function initSAPIGame(e){config_js_1.SAPIGameConfig.update(e)}exports.Game={events:new gameEvent_js_1.gameEvents,manager:new gameManager_js_1.GameManager,playerManager:new globalPlayerManager_js_1.globalPlayerManager,constants:constants_js_1.Constants,config:config_js_1.SAPIGameConfig},server_1.system.beforeEvents.startup.subscribe(e=>{(0,gameCommand_js_1.regGameCommand)(e.customCommandRegistry)}),__exportStar(require("./gameRegion/index.js"),exports),exports.Utils=__importStar(require("./utils/index.js")),__exportStar(require("./gameComponent/index.js"),exports),__exportStar(require("./gameState/index.js"),exports),__exportStar(require("./gamePlayer/index.js"),exports);var gameEngine_js_1=require("./gameEngine.js");Object.defineProperty(exports,"GameEngine",{enumerable:!0,get:function(){return gameEngine_js_1.GameEngine}});var gameContext_js_1=require("./gameContext.js");Object.defineProperty(exports,"GameContext",{enumerable:!0,get:function(){return gameContext_js_1.GameContext}});var gameStructure_js_1=require("./gameStructure/gameStructure.js");Object.defineProperty(exports,"GameStructure",{enumerable:!0,get:function(){return gameStructure_js_1.GameStructure}});var scriptRunner_js_1=require("./Runner/scriptRunner.js");Object.defineProperty(exports,"ScriptRunner",{enumerable:!0,get:function(){return scriptRunner_js_1.ScriptRunner}}),Object.defineProperty(exports,"ScriptCancelledError",{enumerable:!0,get:function(){return scriptRunner_js_1.ScriptCancelledError}});var RunnerManager_js_1=require("./Runner/RunnerManager.js");Object.defineProperty(exports,"RunnerManager",{enumerable:!0,get:function(){return RunnerManager_js_1.RunnerManager}}),__exportStar(require("./gameEvent/index.js"),exports),__exportStar(require("./system/gameManager.js"),exports),__exportStar(require("./system/globalPlayerManager.js"),exports);var createGameModule_js_1=require("./createGameModule.js");Object.defineProperty(exports,"createGameModule",{enumerable:!0,get:function(){return createGameModule_js_1.createGameModule}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.regGameCommand=regGameCommand;const server_1=require("@minecraft/server"),main_js_1=require("../main.js"),vanila_data_js_1=require("../utils/vanila-data.js"),config_js_1=require("../config.js");function regGameCommand(e){e.registerEnum("game:opreation",["start","stop","stopAll","status","end"]),e.registerCommand({name:"game:game",description:"SAPI-Game命令操作",permissionLevel:server_1.CommandPermissionLevel.GameDirectors,mandatoryParameters:[{name:"game:opreation",type:server_1.CustomCommandParamType.Enum}],optionalParameters:[{name:"gameName",type:server_1.CustomCommandParamType.String},{name:"gameTag",type:server_1.CustomCommandParamType.String}]},(e,s,a,m)=>handleCommand(e,s,a,m)),e.registerCommand({name:"game:hub",description:"SAPI-Game返回主城命令",permissionLevel:server_1.CommandPermissionLevel.Any},e=>e.sourceEntity?.typeId!=vanila_data_js_1.EntityTypeIds.Player?{message:"必须是玩家执行",status:server_1.CustomCommandStatus.Failure}:(main_js_1.Game.playerManager.forceReleaseFromGame(e.sourceEntity.id),server_1.system.run(()=>{config_js_1.SAPIGameConfig.config.hub(e.sourceEntity)}),{message:"",status:server_1.CustomCommandStatus.Success})),e.registerCommand({name:"game:l",description:"SAPI-Game返回主城命令",permissionLevel:server_1.CommandPermissionLevel.Any},e=>e.sourceEntity?.typeId!=vanila_data_js_1.EntityTypeIds.Player?{message:"必须是玩家执行",status:server_1.CustomCommandStatus.Failure}:(main_js_1.Game.playerManager.forceReleaseFromGame(e.sourceEntity.id),server_1.system.run(()=>{config_js_1.SAPIGameConfig.config.hub(e.sourceEntity)}),{message:"",status:server_1.CustomCommandStatus.Success}))}function handleCommand(e,s,a,m){const r=e.sourceEntity instanceof server_1.Player?e.sourceEntity:void 0;switch(s){case"stopAll":return server_1.system.run(()=>{main_js_1.Game.manager.stopAll()}),{message:"已停止所有运行中的游戏",status:server_1.CustomCommandStatus.Success};case"status":main_js_1.Game.manager.status(r,"detail"===a);break;case"stop":if(a){const e=`${a}:${m??0}`;return main_js_1.Game.manager.getGameByKey(e)?(server_1.system.run(()=>{main_js_1.Game.manager.stopGameByKey(e)}),{message:`已停止游戏: ${e}`,status:server_1.CustomCommandStatus.Success}):{message:"游戏不存在",status:server_1.CustomCommandStatus.Failure}}break;case"end":server_1.system.run(()=>{main_js_1.Game.manager.end()})}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.GameManager=void 0;const main_js_1=require("../main.js"),config_js_1=require("../config.js"),GameError_js_1=require("../utils/GameError.js"),logger_js_1=require("../utils/logger.js");class GameManager{games=new Map;logger=new logger_js_1.Logger(this.constructor.name);addGame(e,s,t){if(e.has(s))throw new GameError_js_1.GameManagerError(`已存在游戏: ${s}`);this.logger.log(`startedGame: ${s}`),t.onStart(),e.set(s,t)}startGame(e,s,t){const o=this.buildKey(e,t),a=new e(o,s);this.addGame(this.games,o,a)}hasGame(e,s){const t=this.buildKey(e,s);return null!=this.games.get(t)}getGame(e,s){return this.games.get(this.buildKey(e,s))}getGameByKey(e){return this.games.get(e)}stopGame(e,s){const t=this.buildKey(e,s);this.stopGameByKey(t)}stopGameByKey(e){const s=this.games.get(e);s?(s.onStop(),s.onDispose(),this.games.delete(e),this.logger.log(`stopedGame: ${e}`)):this.logger.error("StopGame失败,游戏不存在:"+e)}stopAll(){for(const[e,s]of this.games){if(s.isDaemon)continue;const t=s;t.onStop(),t.onDispose(),this.logger.log(`stopedGame: ${e}`),this.games.delete(e)}}end(){for(const[e,s]of this.games)s.isDaemon||(s.onDispose(),this.logger.log(`endedGame: ${e}`),this.games.delete(e));config_js_1.SAPIGameConfig.config.onEnd()}status(e,s){const t=[];if(t.push("§6========== 游戏状态 =========="),t.push(`§e总游戏数: §a${this.games.size}`),t.push("§6================================"),t.push(""),t.push("玩家状态"),t.push(main_js_1.Game.playerManager.status()),t.push(""),this.games.size){t.push("§d—— 常驻游戏 ——");for(const[e,o]of this.games)o.isDaemon&&t.push(`§a● ${e} §7| §f${o.stats(s)}`);t.push("")}if(this.games.size){t.push("§d—— 普通游戏 ——");for(const[e,o]of this.games)o.isDaemon||t.push(`§a● ${e} §7| §f${o.stats(s)}`);t.push("")}const o=t.join("\n");e?e.sendMessage(o):console.log(o)}buildKey(e,s){return`${e.name}:${s??0}`}}exports.GameManager=GameManager;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.globalPlayerManager=void 0;const server_1=require("@minecraft/server"),main_js_1=require("../main.js"),index_js_1=require("../utils/index.js");class globalPlayer{player;get isValid(){return this.player.isValid}curGame;constructor(e){this.player=e}}class globalPlayerManager{players=new Map;logger=new index_js_1.Logger(this.constructor.name);constructor(){server_1.world.afterEvents.worldLoad.subscribe(()=>{server_1.system.runInterval(this.tick.bind(this))})}isPlayerAllocated(e){const a=this.players.get(e);return!(!a?.curGame||!main_js_1.Game.manager.getGameByKey(a.curGame))}allocatePlayerToGame(e,a){this.logger.debug(`allocate player ${e} for ${a}`);const r=this.players.get(e);return this.logger.debug(`allocate player ${r?.player.name??e} for ${a}`),!(!r?.isValid||this.isPlayerAllocated(r.player.id))&&(r.curGame=a,!0)}releaseAllPlayerFromGame(e){this.players.forEach(a=>{a.curGame==e&&a.curGame})}releasePlayerFromGame(e,a){const r=this.players.get(e);r&&r.curGame==a&&(r.curGame=void 0)}forceReleaseFromGame(e){const a=this.players.get(e);if(a&&a.curGame){const e=main_js_1.Game.manager.getGameByKey(a.curGame);e?.playerManager.deactivate(a.player),a.curGame=void 0}}getFreePlayers(){return[...this.players.values()].filter(e=>null==e.curGame&&e.isValid).map(e=>e.player)}tick(){const e=server_1.world.getAllPlayers(),a=new Set;for(const r of e)null!=r&&(a.add(r.id),this.players.has(r.id)||(main_js_1.Game.config.config.onJoin(r),this.players.set(r.id,new globalPlayer(r))));for(const[e,r]of this.players)a.has(e)||void 0!==r.curGame?r.curGame&&!main_js_1.Game.manager.getGameByKey(r.curGame)&&(r.curGame=void 0):this.players.delete(e)}status(){const e=this.players.size;let a=0,r=0,s=0;for(const e of this.players.values())e.isValid?e.curGame?a++:r++:s++;return`已追踪: ${e}, 游戏中: ${a}, 空闲: ${r}, 离线: ${s}`}}exports.globalPlayerManager=globalPlayerManager;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.GameStateError=exports.GameEngineError=exports.GameManagerError=exports.GameError=void 0;class GameError extends Error{constructor(r,e){super(r,e),this.name="GameError"}}exports.GameError=GameError;class GameManagerError extends GameError{constructor(r,e){super(r,e),this.name=this.constructor.name}}exports.GameManagerError=GameManagerError;class GameEngineError extends GameError{constructor(r,e){super(r,e),this.name=this.constructor.name}}exports.GameEngineError=GameEngineError;class GameStateError extends GameError{constructor(r,e){super(r,e),this.name=this.constructor.name}}exports.GameStateError=GameStateError;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.bfsBlocks=bfsBlocks,exports.linspace=linspace;const vector_js_1=require("./vector.js");function bfsBlocks(t,o,e=20,s=64){const n=new Set,c=[{block:t,distance:0}],r=[];for(;c.length>0;){const{block:t,distance:f}=c.shift(),i=vector_js_1.Vector3Utils.toString(t.location);if(!n.has(i)&&(n.add(i),o(t,f))){if(r.push(t),r.length>=s)break;if(f<e)for(const o of getNeighborBlocks(t)){if(r.length>=s)break;const t=vector_js_1.Vector3Utils.toString(o.location);n.has(t)||c.push({block:o,distance:f+1})}}}return r}function getNeighborBlocks(t,o=!1){const e=[],s=[{x:0,y:1,z:0},{x:0,y:-1,z:0},{x:1,y:0,z:0},{x:-1,y:0,z:0},{x:0,y:0,z:1},{x:0,y:0,z:-1}];for(const o of s){const s=t.offset(o);s&&e.push(s)}if(o)for(let o of[-1,0,1])for(let s of[-1,0,1])for(let n of[-1,0,1]){if(0===o&&0===s&&0===n)continue;if(Math.abs(o)+Math.abs(s)+Math.abs(n)===1)continue;const c=t.offset({x:o,y:s,z:n});c&&e.push(c)}return e}function linspace(t,o,e){if(e<=0)return[];if(1===e)return[t];const s=(o.x-t.x)/(e-1),n=(o.y-t.y)/(e-1),c=(o.z-t.z)/(e-1);return Array.from({length:e},(o,e)=>({x:t.x+e*s,y:t.y+e*n,z:t.z+e*c}))}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChunkUtils=void 0;const server_1=require("@minecraft/server");class ChunkUtils{static getChunkPosFromBlockPos(t){return{x:t.x>>4,z:t.z>>4}}static getChunkEntities(t,e){const s=this.getChunkPosFromBlockPos(e),n=this.getChunkMinPos(s),r=server_1.world.getDimension(t);return r.isChunkLoaded(e)?r.getEntities({location:n,volume:{x:16,y:384,z:16}}):[]}static getChunkMaxPos(t){return{x:16*t.x+15,y:319,z:16*t.z+15}}static getChunkMinPos(t){return{x:16*t.x,y:-64,z:16*t.z}}}exports.ChunkUtils=ChunkUtils;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createDeferredObject=createDeferredObject;const GameError_js_1=require("./GameError.js");function createDeferredObject(){let e=null;const r=new Proxy({},{get(r,t){if(!e)throw new DeferredObjectError("对象未初始化,不能访问属性: "+String(t));return e[t]}});return{setTarget(r){e=r},proxy:r}}class DeferredObjectError extends GameError_js_1.GameError{constructor(e,r){super(e,r),this.name="DeferredObjectError"}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Duration=void 0;class Duration{_ticks;static ticksPerSecond=20;static ticksPerMinute=60*Duration.ticksPerSecond;constructor(t){this._ticks=t}get ticks(){return this._ticks}toSeconds(){return this.ticks/Duration.ticksPerSecond}static fromSeconds(t){return new Duration(Math.floor(this.ticksPerSecond*t))}static fromMinutes(t){return new Duration(Math.floor(this.ticksPerMinute*t))}}exports.Duration=Duration;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";function difference(e,t){const r=new Set;for(const n of e)t.has(n)||r.add(n);return r}function mapObject(e,t){return Object.fromEntries(Object.entries(e).map(([e,r])=>[e,t(r,e)]))}Object.defineProperty(exports,"__esModule",{value:!0}),exports.difference=difference,exports.mapObject=mapObject;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,r,t,o){void 0===o&&(o=t);var n=Object.getOwnPropertyDescriptor(r,t);n&&!("get"in n?!r.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,o,n)}:function(e,r,t,o){void 0===o&&(o=t),e[o]=r[t]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,r){Object.defineProperty(e,"default",{enumerable:!0,value:r})}:function(e,r){e.default=r}),__importStar=this&&this.__importStar||function(){var e=function(r){return e=Object.getOwnPropertyNames||function(e){var r=[];for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&(r[r.length]=t);return r},e(r)};return function(r){if(r&&r.__esModule)return r;var t={};if(null!=r)for(var o=e(r),n=0;n<o.length;n++)"default"!==o[n]&&__createBinding(t,r,o[n]);return __setModuleDefault(t,r),t}}(),__exportStar=this&&this.__exportStar||function(e,r){for(var t in e)"default"===t||Object.prototype.hasOwnProperty.call(r,t)||__createBinding(r,e,t)};Object.defineProperty(exports,"__esModule",{value:!0}),exports.ChunkUtils=exports.Algorithm=exports.func=exports.RandomUtils=exports.Vector3Utils=exports.vanilaData=exports.GameErrors=exports.Duration=void 0;var duration_js_1=require("./duration.js");Object.defineProperty(exports,"Duration",{enumerable:!0,get:function(){return duration_js_1.Duration}}),exports.GameErrors=__importStar(require("./GameError.js")),__exportStar(require("./logger.js"),exports),exports.vanilaData=__importStar(require("./vanila-data.js"));var vector_js_1=require("./vector.js");Object.defineProperty(exports,"Vector3Utils",{enumerable:!0,get:function(){return vector_js_1.Vector3Utils}});var random_js_1=require("./random.js");Object.defineProperty(exports,"RandomUtils",{enumerable:!0,get:function(){return random_js_1.RandomUtils}}),exports.func=__importStar(require("./func.js")),exports.Algorithm=__importStar(require("./algorithm.js"));var chunk_js_1=require("./chunk.js");Object.defineProperty(exports,"ChunkUtils",{enumerable:!0,get:function(){return chunk_js_1.ChunkUtils}});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Logger=exports.logLevel=void 0;const config_js_1=require("../config.js");!function(e){e[e.debug=0]="debug",e[e.log=1]="log",e[e.warn=2]="warn",e[e.error=3]="error"}(exports.logLevel||(exports.logLevel={}));class Logger{name;constructor(e){this.name=e}get logLevel(){return config_js_1.SAPIGameConfig.config.logLevel}debug(e,...o){this.logLevel<=exports.logLevel.debug&&console.log(`<Game-debug>[${this.name}] ${e}`,...o)}log(e,...o){this.logLevel<=exports.logLevel.log&&console.log(`<Game-log>[${this.name}] ${e}`,...o)}warn(e,...o){this.logLevel<=exports.logLevel.warn&&console.warn(`<Game-warn>[${this.name}] ${e}`,...o)}error(e,o){this.logLevel>exports.logLevel.error||(o instanceof Error?console.error(`<Game-error>[${this.name}] ${e}`,o,o.stack):console.error(`<Game-error>[${this.name}] ${e}`,o))}}exports.Logger=Logger;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.RandomUtils=void 0;class RandomUtils{static int(t){return Math.floor(Math.random()*t)}static intRange(t,n){return t+Math.floor(Math.random()*(n-t))}static choice(t){if(0!==t.length)return t[this.int(t.length)]}static choices(t,n){const e=t.length;if(n>=e)return[...t];const r=[...t];for(let t=0;t<n;t++){const n=t+Math.floor(Math.random()*(e-t));[r[t],r[n]]=[r[n],r[t]]}return r.slice(0,n)}static shuffle(t){const n=[...t];for(let t=n.length-1;t>0;t--){const e=Math.floor(Math.random()*(t+1));[n[t],n[e]]=[n[e],n[t]]}return n}static shuffleInPlace(t){for(let n=t.length-1;n>0;n--){const e=Math.floor(Math.random()*(n+1));[t[n],t[e]]=[t[e],t[n]]}}static bool(){return Math.random()<.5}static weightedChoice(t,n){if(0===t.length||t.length!==n.length)return;const e=n.reduce((t,n)=>t+n,0);let r=Math.random()*e;for(let e=0;e<t.length;e++){if(r<n[e])return t[e];r-=n[e]}return t[t.length-1]}static randomPointInCircle(t,n,e){const r=Math.sqrt(Math.random())*e,o=2*Math.random()*Math.PI;return[t+r*Math.cos(o),n+r*Math.sin(o)]}}exports.RandomUtils=RandomUtils;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.colorIdMap=exports.EffectIds=exports.EntityTypeIds=exports.CameraPreset=exports.DimensionIds=void 0,function(e){e.Overworld="minecraft:overworld",e.Nether="minecraft:nether",e.End="minecraft:the_end"}(exports.DimensionIds||(exports.DimensionIds={})),function(e){e.ControlSchemeCamera="minecraft:control_scheme_camera",e.FirstPerson="minecraft:first_person",e.FixedBoom="minecraft:fixed_boom",e.FollowOrbit="minecraft:follow_orbit",e.Free="minecraft:free",e.ThirdPerson="minecraft:third_person",e.ThirdPersonFront="minecraft:third_person_front"}(exports.CameraPreset||(exports.CameraPreset={})),function(e){e.Player="minecraft:player",e.ArmorStand="minecraft:armor_stand"}(exports.EntityTypeIds||(exports.EntityTypeIds={})),function(e){e.Speed="speed",e.Slowness="slowness",e.Haste="haste",e.MiningFatigue="mining_fatigue",e.Strength="strength",e.InstantHealth="instant_health",e.InstantDamage="instant_damage",e.JumpBoost="jump_boost",e.Nausea="nausea",e.Regeneration="regeneration",e.Resistance="resistance",e.FireResistance="fire_resistance",e.WaterBreathing="water_breathing",e.Invisibility="invisibility",e.Blindness="blindness",e.NightVision="night_vision",e.Hunger="hunger",e.Weakness="weakness",e.Poison="poison",e.Wither="wither",e.HealthBoost="health_boost",e.Absorption="absorption",e.Saturation="saturation",e.Levitation="levitation",e.FatalPoison="fatal_poison",e.ConduitPower="conduit_power",e.SlowFalling="slow_falling",e.BadOmen="bad_omen",e.VillageHero="village_hero",e.Darkness="darkness",e.TrialOmen="trial_omen",e.WindCharged="wind_charged",e.Weaving="weaving",e.Oozing="oozing",e.Infested="infested",e.RaidOmen="raid_omen"}(exports.EffectIds||(exports.EffectIds={})),exports.colorIdMap=["white","orange","magenta","light_blue","yellow","lime","pink","gray","light_gray","cyan","purple","blue","brown","green","red","black"];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Vector3Utils=void 0;class Vector3Utils{static distance(t,r){return Math.sqrt(this.squaredDistance(t,r))}static squaredDistance(t,r){return Math.pow(r.x-t.x,2)+Math.pow(r.y-t.y,2)+Math.pow(r.z-t.z,2)}static toArray(t){return[t.x,t.y,t.z]}static toString(t,r=","){return this.toArray(t).join(r)}static fromArray(t){if(3!==t.length)throw new Error("必须为长度为3的数组");if(!t.every(Number.isFinite))throw new Error("数组必须包含数字");return{x:t[0],y:t[1],z:t[2]}}static clone(t){return Object.assign({},t)}static add(t,r){return{x:t.x+r.x,y:t.y+r.y,z:t.z+r.z}}static subtract(t,r){return{x:t.x-r.x,y:t.y-r.y,z:t.z-r.z}}static scale(t,r){return{x:t.x*r,y:t.y*r,z:t.z*r}}static isEqual(t,r){return t.x===r.x&&t.y===r.y&&t.z===r.z}static isApproxEqual(t,r,s=1e-6){return Math.abs(t.x-r.x)<s&&Math.abs(t.y-r.y)<s&&Math.abs(t.z-r.z)<s}static length(t){return Math.sqrt(t.x*t.x+t.y*t.y+t.z*t.z)}static dot(t,r){return t.x*r.x+t.y*r.y+t.z*r.z}static cross(t,r){return{x:t.y*r.z-t.z*r.y,y:t.z*r.x-t.x*r.z,z:t.x*r.y-t.y*r.x}}static normalize(t){const r=this.length(t);return 0===r?{x:0,y:0,z:0}:{x:t.x/r,y:t.y/r,z:t.z/r}}static above(t,r=1){return this.add(t,{x:0,y:r,z:0})}static below(t,r=1){return this.subtract(t,{x:0,y:r,z:0})}static intPos(t){return{x:Math.floor(t.x),y:Math.floor(t.y),z:Math.floor(t.z)}}}exports.Vector3Utils=Vector3Utils;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const server_ui_1=require("@minecraft/server-ui"),uiLayoutTypes=()=>{const e={source:"button",param:["text","iconPath"],minPar:0},t={source:"label",param:["text"]},r={source:"body",param:["text"]},o={source:"divider",param:[]},a={source:"header",param:[]};return{Action:{body:r,divider:o,label:t,button:e,header:a},Modal:{body:r,divider:o,label:t,submit:{source:"submitButton",param:["text"],minPar:0},slider:{source:"slider",param:["text","num","num","SliderOptions"],minPar:2},toggle:{source:"toggle",param:["text","ToggleOptions"],minPar:0},header:a,input:{source:"textField",param:["text","text","textField opt"],minPar:0},drop:{source:"dropdown",param:["text","Arr-item"],minPar:0}},Message:{body:r,button1:e,button2:e}}};exports.default={ui:{classic:{iconPath:{type:"string",regex:/^textures\/([a-zA-Z]:\\|\\\\|\/|\.\/|\.\.\/)?([\w\-\. ]+([\\/][\w\-\. ]+)*)$/},text:{type:"string"},ToggleOptions:{type:"object",ObjectType:{tooltip:"string",defaultValue:"boolean"}},num:{type:"number"},SliderOptions:{type:"object",ObjectType:{tooltip:"string",defaultValue:"number",valueStep:"number"}},"textField opt":{type:"object",ObjectType:{tooltip:"string",defaultValue:"string"}},"Arr-item":{type:"object",regexFunc:e=>Array.isArray(e)}},FormTypes:{Action:server_ui_1.ActionFormData,Modal:server_ui_1.ModalFormData,Message:server_ui_1.MessageFormData},FormTypeArr:["Action","Modal","Message"],LayoutTypes:uiLayoutTypes()}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.EntityDamageCause=exports.EffectList=void 0,exports.EffectList={absorption:"伤害吸收",bad_omen:"不祥之兆",blindness:"失明",conduit_power:"潮涌能量",darkness:"黑暗",fatal_poison:"中毒(致命)",fire_resistance:"抗火",haste:"急迫",health_boost:"生命提升",hunger:"饥饿",infested:"寄生",instant_damage:"瞬间伤害",instant_health:"瞬间治疗",invisibility:"隐身",jump_boost:"跳跃提升",levitation:"飘浮",mining_fatigue:"挖掘疲劳",nausea:"反胃",night_vision:"夜视",oozing:"渗浆",poison:"中毒",raid_omen:"袭击之兆",regeneration:"生命恢复",resistance:"抗性提升",saturation:"饱和",slow_falling:"缓降",slowness:"缓慢",speed:"迅捷",strength:"力量",trial_omen:"试炼之兆",village_hero:"村庄英雄",water_breathing:"水下呼吸",weakness:"虚弱",weaving:"盘丝",wind_charged:"蓄风",wither:"凋零"},exports.EntityDamageCause={anvil:" 由铁砧坠落造成的伤害。",blockExplosion:"非实体爆炸造成的伤害,比如床的爆炸。",campfire:"由篝火引起的伤害。",contact:"由与实体或方块进行物理接触所造成的伤害,例如触碰甜莓灌木丛或河豚。",drowning:"实体在缺氧且位于液体方块中时受到的伤害。",entityAttack:"实体攻击所引起的伤害。",entityExplosion:"由实体爆炸(如 creeper 或 Wither)造成的伤害。",fall:"从高处坠落时对地面造成的伤害。",fallingBlock:"由坠落方块造成的伤害。请注意,重锤和钟乳石具有各自独立伤害原因。",fire:"因着火而受到的伤害。",fireTick:"因长时间燃烧而受到的伤害。",fireworks:"烟花引起的伤害。",flyIntoWall:"使用鞘翅高速飞行时撞墙导致的伤害。",freezing:"因停留在粉末雪方块中而受到的伤害。",lava:"接触岩浆方块所造成的伤害。",lightning:"因被闪电击中而受到的伤害。",magic:"由魔法攻击引起的伤害,比如诱魔之牙或传导块。",magma:"触摸熔岩所造成的伤害。",none:"由无直接源造成伤害,例如命令或脚本中的伤害。",override:"由间接原因造成的伤害。比如,通过行为包将生物的生命值设置为 0。",piston:"活塞造成的伤害。",projectile:"由投射物引起的伤害。",ramAttack:"山羊顶撞引起的伤害。",selfDestruct:"由/kill 命令导致伤害。",sonicBoom:"由坚守者的声波攻击所造成的伤害。",soulCampfire:"由灵魂篝火引起的伤害。",stalactite:"由钟乳石块坠落造成的伤害。",stalagmite:"踩石钟乳方块所造成的伤害。",starve:"长时间饥饿导致伤害。",suffocation:"实体在缺氧且位于非液体方块中时受到的伤害。",temperature:"实体处于不适宜的气候中受到的伤害。比如,在温度超过 1 度的环境中,雪人会受到伤害。",thorns:"由荆棘盔甲附魔或守卫的荆棘效果所造成的伤害。",void:"从虚空跌落时产生的持续伤害。",wither:"由凋零效果引起的伤害。比如,触碰凋零玫瑰。"};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Entity=void 0;const server_1=require("@minecraft/server"),utils_js_1=require("./utils.js"),data_js_1=require("./data.js"),PROXIED_PROPERTIES=["isSneaking","nameTag"];class Entity{constructor(t,e){if(this.logger=t,this._source=e,!utils_js_1.utils.isEntityObject(e))throw new TypeError("ERR_invalid_input: 传入的 source 不是有效的实体对象");return this.data={},this._init(),new Proxy(this,{set:(t,e,s)=>{if(PROXIED_PROPERTIES.includes(e))try{t._source[e]=s,t.data[e]=s}catch(s){t.logger.e(`设置属性 "${e}" 失败: ${s}`)}return!0},get:(t,e)=>{if(PROXIED_PROPERTIES.includes(e))try{return t._source[e]}catch{return t.data[e]}return e in t?t[e]:t.data[e]}})}kill(){this._checkClass(),this._source.kill()}addEffect(t,e,s,i){if(this._checkClass(),"number"!=typeof e||!utils_js_1.utils.in(e,1,2e7))throw new TypeError("ERR: 'duration' 必须是 1~20000000 的数字");if("number"!=typeof t&&"string"!=typeof t)throw new TypeError("ERR: 'name' 必须是字符串或数字");if(void 0!==s&&("number"!=typeof s||!utils_js_1.utils.in(s,0,255)))throw new TypeError("ERR: 'strength' 必须是 0~255 的数字");if("boolean"!=typeof i)throw new TypeError("ERR: 'show' 必须是布尔值");const r=utils_js_1.utils.getEffect(t),a={};void 0!==s&&(a.amplifier=s),void 0!==i&&(a.showParticles=i),this._source.addEffect(r,e,a)}addTag(t){this._checkClass(),this._checkTagName(t),this._source.addTag(t)}removeTag(t){return this._checkClass(),this._checkTagName(t),this._source.removeTag(t)}removeEffect(t){return this._checkClass(),this._source.removeEffect(utils_js_1.utils.getEffect(t))}damage(t,e,s){if(this._checkClass(),!Object.keys(data_js_1.EntityDamageCause).includes(e))throw new TypeError("ERR: 'cause' 必须是有效的伤害类型");const i=this._checkDamageParam(t,s);this._source.applyDamage(t,{damagingEntity:i,cause:e})}damageByProjectile(t,e,s){if(this._checkClass(),!(s instanceof Entity&&s._source.isValid))throw new TypeError("ERR: 投射物必须是一个有效的 Entity 实例");const i=s._source,r=this._checkDamageParam(t,e);this._source.applyDamage(t,{damagingEntity:r,damagingProjectile:i})}_checkClass(){if(!this._source.isValid)throw new Error("ERR: 该实体对象已无效(可能已被销毁)")}_checkDamageParam(t,e){if("number"!=typeof t)throw new TypeError("ERR: 伤害值 'hurt' 必须是数字");if(!(e instanceof Entity))throw new TypeError("ERR: 伤害来源必须是一个 Entity 实例");const s=e._source;if(!utils_js_1.utils.isEntityObject(s))throw new TypeError("ERR: 传入的伤害来源不是有效的实体对象");return s}_checkTagName(t){if("string"!=typeof t||!utils_js_1.utils.in(t.length,1,250))throw new TypeError("ERR: 标签名称必须是 1~250 长度的字符串")}_init(){this.__static_set("id","",!0),this.__static_set("typeId","",!0),this.__static_set("isClimbing",!1,!0),this.__static_set("isFalling",!1,!0),this.__static_set("isInWater",!1,!0),this.__static_set("isOnGround",!1,!0),this.__static_set("isSleeping",!1,!0),this.__static_set("isSneaking",!1,!1),this.__static_set("isSprinting",!1,!0),this.__static_set("localizationKey","",!0),this.__static_set("nameTag","",!1),this.__static_set("location",new utils_js_1.Vector3,!0),this.__static_set("scoreboardIdentity",null,!0)}_static(t){try{return this._source?.[t]??null}catch{return null}}_staticSet(t,e,s){try{const i=this._static(t)??e;this.data[t]=i,s&&Object.defineProperty(this.data,t,{writable:!1})}catch(s){this.logger.e(s),this.data[t]=e}}}exports.Entity=Entity;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.event=void 0;const server_1=require("@minecraft/server"),utils_js_1=require("./utils.js"),entity_js_1=require("./entity.js"),event=class{constructor(e){this.runningSubscriptions=new Map,this.runningTimers=new Map,this.logger=e,this.entityWrapperMap={entity:(e,t)=>new entity_js_1.Entity(e,t)},this._isInternalCall=!1}_bindEvent(e,t,n,r=[],s="world"){try{if(!this._isInternalCall)throw this.logger.e("错误:不允许直接调用 _bindEvent,请使用封装方法(如 PlayerAdd)"),new Error("请通过 PlayerAdd、EntityDie 等公开方法注册事件");const i={world:server_1.world,system:server_1.system}[s];if(!i)throw new Error(`无效的事件来源: ${s}`);if("function"!=typeof e&&"string"!=typeof e)throw new Error("callback 必须是函数或字符串命令");if(!["<",">"].includes(t))throw new Error("timing 必须是 '<'(after)或 '>'(before)");const a=i[{"<":"afterEvents",">":"beforeEvents"}[t]];if(!a)throw new Error("事件系统未找到对应阶段");const o=a[n];if(void 0===o)throw new Error(`未找到事件: ${n}`);const c=t=>{try{if("string"==typeof e){let t="";return e.split(/\n+/).filter(Boolean).forEach(e=>{try{server_1.system.run(()=>{for(const t of server_1.world.getPlayers())t.runCommand(e)})}catch(e){t+=`[命令执行失败] ${e.message}\n`}}),void(t&&this.logger.d(t))}const n={};for(const e of r){const r=t[e.source];if(n[e.name]=r,"string"==typeof e.type){const t=e.type.replace(/\./g,""),s=this.entityWrapperMap[t];"function"==typeof s&&(n[e.name]=s(this.logger,r))}}e(n,t)}catch(e){this.logger.e(`[事件执行错误 - ${n}] ${e.message}`)}},l=o.subscribe(c),u=this._generateId();return this.runningSubscriptions.set(u,{unsubscribe:()=>o.unsubscribe(l)}),{code:200,id:u,msg:`事件注册成功: ${n}`}}catch(e){return{code:-1,id:0,msg:e.message}}finally{this._isInternalCall=!1}}_generateId(){return Date.now()+Math.floor(9999*Math.random())}stop(e){try{if(this.runningTimers.has(e)){const t=this.runningTimers.get(e);return t.isInterval?server_1.system.clearRunInterval(t.handle):server_1.system.clearRunTimeout(t.handle),this.runningTimers.delete(e),{code:200,msg:"定时任务已停止"}}if(this.runningSubscriptions.has(e)){return this.runningSubscriptions.get(e).unsubscribe(),this.runningSubscriptions.delete(e),{code:200,msg:"事件订阅已取消"}}return{code:404,msg:"未找到对应 ID"}}catch(e){return{code:-1,msg:e.message}}}PlayerAdd(e,t="<"){return this._isInternalCall=!0,this._bindEvent(e,t,"playerSpawn",[{source:"player",name:"player"},{source:"initialSpawn",name:"ok"}])}EntityDie(e){return this._isInternalCall=!0,this._bindEvent(e,"<","entityDie",[{source:"deadEntity",name:"entity"},{source:"damageSource",name:"source"},{source:"projectile",name:"source_v2"}])}EntityHitE(e){return this._isInternalCall=!0,this._bindEvent(e,"<","entityHitEntity",[{source:"damagingEntity",name:"damage",type:"entity"},{source:"hitEntity",name:"entity",type:"entity"}])}EntityHitB(e){return this._isInternalCall=!0,this._bindEvent(e,"<","entityHitBlock",[{source:"hitBlock",name:"block"},{source:"damagingEntity",name:"entity"}])}BreakB(e,t="<"){return this._isInternalCall=!0,this._bindEvent(e,t,"playerBreakBlock",[{source:"player",name:"player"},{source:"block",name:"block"}])}EntityAdd(e){return this._isInternalCall=!0,this._bindEvent(e,"<","entitySpawn",[{source:"entity",name:"entity"},{source:"cause",name:"source"}])}UseItem(e,t="<"){return this._isInternalCall=!0,this._bindEvent(e,t,"itemUse",[{source:"source",name:"player"},{source:"itemStack",name:"item"}])}WatchDogStop(e){return this._isInternalCall=!0,this._bindEvent(e,">","watchdogTerminate",[{source:"terminateReason",name:"res"},{source:"cancel",name:"cancel"}],"system")}setTimer(e,t,n=!1){try{if("function"!=typeof e||"number"!=typeof t)throw new Error("参数错误:callback 必须为函数,tickDelay 必须为数字");const r=this._generateId(),s=n?server_1.system.runInterval(e,t):server_1.system.runTimeout(e,t);return this.runningTimers.set(r,{handle:s,isInterval:n}),{code:200,id:r,msg:"定时任务已创建"}}catch(e){return{code:-1,id:0,msg:e.message}}}};exports.event=event;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.GameLib=void 0;const event_js_1=require("./event.js"),loger_js_1=require("./loger.js"),entity_js_1=require("./entity.js"),ui_js_1=require("./ui.js");class GameLib{regLayout=ui_js_1.regLayout;constructor(e=!0){this.loger=e?loger_js_1.loger:loger_js_1.emtpyloger,this.event=new event_js_1.event(this.loger),this.entity=e=>new entity_js_1.Entity(this.loger,e),this.createForm=(e,t)=>(0,ui_js_1.createForm)(this.loger,e,t),this.loger.w("gameLib 模块加载成功")}}exports.GameLib=GameLib;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.emtpyloger=exports.loger=void 0,exports.loger={d(e){console.log(`[WARNING] ${e}`)},e(e){e.stack&&e.message&&e.name||console.error(`${e.name} : ${e.stack}`)},w(e){console.warn(e)}},exports.emtpyloger={d(){},e(){},w(){}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.regLayout=exports.createForm=exports.UI=void 0;const server_ui_1=require("@minecraft/server-ui"),config_js_1=__importDefault(require("./config.js")),utils_1=require("./utils"),uiConfig=config_js_1.default.ui,regs=new Map;class show{form;callback=new Map;running;key=[Symbol("mcbe.gamelib.ui.onCancel"),Symbol("mcbe.gamelib.ui.onCommit")];constructor(t,e){this.form=t,this.running=t.show(e).then(t=>{const{callback:e}=this;t.canceled&&e.has(this.key[0])?e.get(this.key[0])(t):e.has(this.key[1])&&e.get(this.key[1])(t),this.isSuccess=!0}),this.isSuccess=!1}onCancel(t){"function"==typeof t&&this.callback.set(this.key[0],t)}onCommit(t){"function"==typeof t&&this.callback.set(this.key[1],t)}async waitSuccess(){this.isSuccess||await this.running}}class UI{form;formType;logger;layoutGroup;constructor(t,e){const r=uiConfig.FormTypes?.[t];if(!r)throw new TypeError(`Invalid form type: "${t}". Allowed: ${uiConfig.FormTypeArr.join(", ")}`);this.form=new r,this.formType=t,this.logger=e,this.layoutGroup=uiConfig.LayoutTypes[t]}set title(t){if("string"!=typeof t)throw new TypeError("Title must be a string.");this.form.title(t)}addLayout(t){const{type:e,param:r}=t,o=this.layoutGroup?.[e];if(!o)throw new TypeError(`Unknown layout type: "${e}".`);const i=this.form[o.source].bind(this.form);if("function"!=typeof i)return void this.logger?.e?.(`Layout source "${o.source}" is not a function.`);if(!o.param)return void i();const s=[];for(let t=0;t<o.param.length;t++){const e=o.param[t];if("string"!=typeof e){this.logger?.w?.(`Layout param name must be string, got ${typeof e} at index ${t}.`);continue}const i=uiConfig.classic[e],n=r[t];if(this.#t(i,n))s.push(n);else{if(t>=o.minPar)continue;this.logger?.w?.(`Param "${e}" failed validation.`)}}try{i(...s)}catch(t){this.logger?.e?.(`Failed to add layout "${e}": ${t}`)}}#t(t,e){if(!t)return!1;if(typeof e!==t.type)return!1;if("function"==typeof t.regexFunc&&!t.regexFunc(e))return!1;switch(t.type){case"string":if(t.regex&&!t.regex.test(e))return!1;break;case"object":if(t.ObjectType&&!utils_1.utils.typeVerify(e,t.ObjectType))return!1;break;case"number":if(t.count&&(e<t.count[0]||e>t.count[1]))return!1}return!0}show(t,e=!1){return e?new show(this.form,t):this.form.show(t)}}exports.UI=UI;const createForm=(t,e,r)=>{let o=r;return"symbol"==typeof r&®s.has(r)&&(o=regs.get(r)),function(e,r){const o=uiConfig.FormTypeArr,i=new TypeError(`createForm must be called with name in [${o.join(", ")}] and valid 'opt'.`);if(!o.includes(e))throw i;if(!r||!Array.isArray(r.layout))throw i;const s=new UI(e,t);s.title="string"==typeof r.title?r.title:"未设置";for(const t of r.layout)s.addLayout(t);return s}(e,o)};exports.createForm=createForm;const regLayout=t=>{if(Array.isArray(t.regIds))for(let e of t.regIds)"string"==typeof e&&void 0!==t[e]&®s.set(Symbol(e),t[e]);return Array.from(regs.keys())};exports.regLayout=regLayout;
|