mbler 0.1.1 → 0.1.3-alpha

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.
Files changed (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +28 -0
  3. package/lib/build/base.js +297 -1
  4. package/lib/build/build-g-config.json +11 -11
  5. package/lib/build/getModule.js +182 -1
  6. package/lib/build/index.js +370 -1
  7. package/lib/build/manifest.build.js +103 -1
  8. package/lib/build/mcVersion.js +86 -1
  9. package/lib/build/utils.js +6 -1
  10. package/lib/code-processor/c-handler-export.js +12 -1
  11. package/lib/code-processor/index.js +141 -1
  12. package/lib/code-processor/mtreehandler.js +164 -1
  13. package/lib/commander/index.js +154 -1
  14. package/lib/data/includes.json +12 -12
  15. package/lib/git/clone.js +28 -1
  16. package/lib/git/index.js +12 -1
  17. package/lib/git/pull.js +100 -1
  18. package/lib/lang/__translate.js +93 -1
  19. package/lib/lang/en.js +128 -1
  20. package/lib/lang/index.js +78 -1
  21. package/lib/lang/zh.js +146 -1
  22. package/lib/loger/colors.js +13 -1
  23. package/lib/loger/index.js +136 -1
  24. package/lib/mcx/ast/index.js +11 -1
  25. package/lib/mcx/ast/prop.js +78 -1
  26. package/lib/mcx/ast/tag.js +246 -1
  27. package/lib/mcx/compile-component/lib.js +106 -1
  28. package/lib/mcx/compile-component/types.js +2 -1
  29. package/lib/mcx/compile-component/utils.js +26 -1
  30. package/lib/mcx/compile-mcx/_compile.js +1 -1
  31. package/lib/mcx/compile-mcx/compile.js +34 -1
  32. package/lib/mcx/compile-mcx/context.js +19 -1
  33. package/lib/mcx/compile-mcx/index.js +10 -1
  34. package/lib/mcx/compile-mcx/mcx/index.js +2 -1
  35. package/lib/mcx/compile-mcx/mcx/types.js +2 -1
  36. package/lib/mcx/compile-mcx/template/module.js +42 -1
  37. package/lib/mcx/compile-mcx/types.js +2 -1
  38. package/lib/mcx/compile-mcx/utils.node.js +207 -1
  39. package/lib/mcx/index.js +13 -1
  40. package/lib/mcx/test/index.js +7 -1
  41. package/lib/mcx/test.js +21 -1
  42. package/lib/mcx/types.js +2 -1
  43. package/lib/mcx/utils.js +86 -1
  44. package/lib/module-handler/index.js +482 -1
  45. package/lib/modules/create-game/src/Runner/RunnerManager.js +113 -1
  46. package/lib/modules/create-game/src/Runner/scriptRunner.js +70 -1
  47. package/lib/modules/create-game/src/config.js +27 -1
  48. package/lib/modules/create-game/src/constants.js +19 -1
  49. package/lib/modules/create-game/src/createGameModule.js +24 -1
  50. package/lib/modules/create-game/src/gameComponent/common/autoStop.js +38 -1
  51. package/lib/modules/create-game/src/gameComponent/common/lazyLoader.js +76 -1
  52. package/lib/modules/create-game/src/gameComponent/common/stopWatch/onTimeEvent.js +36 -1
  53. package/lib/modules/create-game/src/gameComponent/common/stopWatch/stopWatch.js +90 -1
  54. package/lib/modules/create-game/src/gameComponent/common/stopWatch/tickEvent.js +29 -1
  55. package/lib/modules/create-game/src/gameComponent/common/timer/onTimeEvent.js +36 -1
  56. package/lib/modules/create-game/src/gameComponent/common/timer/tickEvent.js +29 -1
  57. package/lib/modules/create-game/src/gameComponent/common/timer/timer.js +87 -1
  58. package/lib/modules/create-game/src/gameComponent/gameComponent.js +53 -1
  59. package/lib/modules/create-game/src/gameComponent/index.js +31 -1
  60. package/lib/modules/create-game/src/gameComponent/player/blockInteractionBlocker.js +40 -1
  61. package/lib/modules/create-game/src/gameComponent/player/entityInteractionBlocker.js +48 -1
  62. package/lib/modules/create-game/src/gameComponent/player/healthIndicator.js +48 -1
  63. package/lib/modules/create-game/src/gameComponent/player/regionMonitor.js +22 -1
  64. package/lib/modules/create-game/src/gameComponent/player/respawn.js +59 -1
  65. package/lib/modules/create-game/src/gameComponent/player/spawnProtector.js +69 -1
  66. package/lib/modules/create-game/src/gameComponent/region/regionProtecter.js +53 -1
  67. package/lib/modules/create-game/src/gameComponent/region/regionTeamChooser.js +71 -1
  68. package/lib/modules/create-game/src/gameComponent/region/regionTeamCleaner.js +20 -1
  69. package/lib/modules/create-game/src/gameComponent/view/infoScoreboard.js +77 -1
  70. package/lib/modules/create-game/src/gameComponent/view/teamScoreboard.js +83 -1
  71. package/lib/modules/create-game/src/gameContext.js +6 -1
  72. package/lib/modules/create-game/src/gameEngine.js +139 -1
  73. package/lib/modules/create-game/src/gameEvent/eventManager.js +108 -1
  74. package/lib/modules/create-game/src/gameEvent/eventSignal.js +28 -1
  75. package/lib/modules/create-game/src/gameEvent/events/buttonPush.js +41 -1
  76. package/lib/modules/create-game/src/gameEvent/events/inSlot.js +77 -1
  77. package/lib/modules/create-game/src/gameEvent/events/interval.js +51 -1
  78. package/lib/modules/create-game/src/gameEvent/events/itemUse.js +36 -1
  79. package/lib/modules/create-game/src/gameEvent/events/onBlock.js +106 -1
  80. package/lib/modules/create-game/src/gameEvent/events/regionEvents.js +105 -1
  81. package/lib/modules/create-game/src/gameEvent/events/signClick.js +45 -1
  82. package/lib/modules/create-game/src/gameEvent/gameEvent.js +54 -1
  83. package/lib/modules/create-game/src/gameEvent/index.js +20 -1
  84. package/lib/modules/create-game/src/gameEvent/mapEventSignal.js +101 -1
  85. package/lib/modules/create-game/src/gameEvent/subscription.js +17 -1
  86. package/lib/modules/create-game/src/gamePlayer/gamePlayer.js +102 -1
  87. package/lib/modules/create-game/src/gamePlayer/groupBuilder.js +38 -1
  88. package/lib/modules/create-game/src/gamePlayer/groupSet.js +96 -1
  89. package/lib/modules/create-game/src/gamePlayer/index.js +25 -1
  90. package/lib/modules/create-game/src/gamePlayer/playerGroup.js +145 -1
  91. package/lib/modules/create-game/src/gamePlayer/playerManager.js +57 -1
  92. package/lib/modules/create-game/src/gameRegion/gameRegion.js +229 -1
  93. package/lib/modules/create-game/src/gameRegion/index.js +43 -1
  94. package/lib/modules/create-game/src/gameRegion/regionHelper.js +79 -1
  95. package/lib/modules/create-game/src/gameState/common/autoStop.js +39 -1
  96. package/lib/modules/create-game/src/gameState/gameState.js +169 -1
  97. package/lib/modules/create-game/src/gameState/index.js +7 -1
  98. package/lib/modules/create-game/src/gameState/types.js +35 -1
  99. package/lib/modules/create-game/src/gameStructure/gameStructure.js +36 -1
  100. package/lib/modules/create-game/src/main.js +86 -1
  101. package/lib/modules/create-game/src/system/gameCommand.js +107 -1
  102. package/lib/modules/create-game/src/system/gameManager.js +124 -1
  103. package/lib/modules/create-game/src/system/globalPlayerManager.js +119 -1
  104. package/lib/modules/create-game/src/utils/GameError.js +31 -1
  105. package/lib/modules/create-game/src/utils/algorithm.js +95 -1
  106. package/lib/modules/create-game/src/utils/chunk.js +63 -1
  107. package/lib/modules/create-game/src/utils/deferredObject.js +27 -1
  108. package/lib/modules/create-game/src/utils/duration.js +25 -1
  109. package/lib/modules/create-game/src/utils/func.js +20 -1
  110. package/lib/modules/create-game/src/utils/index.js +52 -1
  111. package/lib/modules/create-game/src/utils/interfaces.js +2 -1
  112. package/lib/modules/create-game/src/utils/logger.js +47 -1
  113. package/lib/modules/create-game/src/utils/random.js +76 -1
  114. package/lib/modules/create-game/src/utils/vanila-data.js +123 -1
  115. package/lib/modules/create-game/src/utils/vector.js +96 -1
  116. package/lib/modules/gameLib/src/config.js +134 -1
  117. package/lib/modules/gameLib/src/data.js +77 -1
  118. package/lib/modules/gameLib/src/entity.js +256 -1
  119. package/lib/modules/gameLib/src/event.js +285 -1
  120. package/lib/modules/gameLib/src/index.js +20 -1
  121. package/lib/modules/gameLib/src/loger.js +21 -1
  122. package/lib/modules/gameLib/src/ui.js +209 -1
  123. package/lib/modules/gameLib/src/utils.js +122 -1
  124. package/lib/modules/gutils/src/index.js +22 -1
  125. package/lib/runTemp/File.js +54 -1
  126. package/lib/runTemp/index.js +137 -1
  127. package/lib/runTemp/securityFile.js +93 -1
  128. package/lib/start/addPack.js +3 -1
  129. package/lib/start/clean.js +84 -1
  130. package/lib/start/create.js +146 -1
  131. package/lib/start/dev.js +99 -1
  132. package/lib/start/getResConfig.js +3 -1
  133. package/lib/start/incg.js +3 -1
  134. package/lib/start/index.js +207 -1
  135. package/lib/start/init.js +125 -1
  136. package/lib/start/rechce.js +57 -1
  137. package/lib/start/unaddPack.js +3 -1
  138. package/lib/start/unincg.js +67 -1
  139. package/lib/start/version.js +73 -1
  140. package/lib/utils/index.js +298 -1
  141. package/lib/uuid/index.js +27 -1
  142. package/package.json +1 -1
  143. package/test/script-mbler/behavior/scripts/index.js +0 -5
@@ -1 +1,209 @@
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&&regs.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]&&regs.set(Symbol(e),t[e]);return Array.from(regs.keys())};exports.regLayout=regLayout;
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.regLayout = exports.createForm = exports.UI = void 0;
7
+ const server_ui_1 = require("@minecraft/server-ui");
8
+ const config_js_1 = __importDefault(require("./config.js"));
9
+ const utils_1 = require("./utils");
10
+ const uiConfig = config_js_1.default.ui;
11
+ const regs = new Map;
12
+ class show {
13
+ form;
14
+ callback = new Map;
15
+ running;
16
+ key = [
17
+ Symbol("mcbe.gamelib.ui.onCancel"),
18
+ Symbol("mcbe.gamelib.ui.onCommit")
19
+ ];
20
+ constructor(form, player) {
21
+ this.form = form;
22
+ // 调用原生 show 方法
23
+ this.running = form.show(player).then(event => {
24
+ const { callback } = this;
25
+ if (event.canceled && callback.has(this.key[0])) {
26
+ callback.get(this.key[0])(event);
27
+ }
28
+ else {
29
+ callback.has(this.key[1]) && callback.get(this.key[1])(event);
30
+ }
31
+ this.isSuccess = true;
32
+ });
33
+ this.isSuccess = false;
34
+ }
35
+ onCancel(callback) {
36
+ if (typeof callback === "function")
37
+ this.callback.set(this.key[0], callback);
38
+ }
39
+ onCommit(callback) {
40
+ if (typeof callback === "function")
41
+ this.callback.set(this.key[1], callback);
42
+ }
43
+ async waitSuccess() {
44
+ if (this.isSuccess)
45
+ return;
46
+ await this.running;
47
+ }
48
+ }
49
+ /**
50
+ * UI 表单封装类,用于根据配置动态创建、配置和显示 Minecraft 表单(如 Action、Modal、Message)。
51
+ */
52
+ class UI {
53
+ form; // 表单实例,如 ActionFormData 的实例
54
+ formType; // 表单类型,如 "Action"
55
+ logger; // 日志记录器,需有 e() 和 w() 方法
56
+ layoutGroup; // 当前表单类型支持的布局配置,如 { button: { source: 'button', param: [...] } }
57
+ /**
58
+ * 构造函数
59
+ * @param {string} name - 表单类型,如 "Action"、"Modal"、"Message"
60
+ * @param {Object} logger - 日志对象,需实现 e() 和 w() 方法
61
+ */
62
+ constructor(name, logger) {
63
+ const item = uiConfig.FormTypes?.[name];
64
+ if (!item)
65
+ throw new TypeError(`Invalid form type: "${name}". Allowed: ${uiConfig.FormTypeArr.join(", ")}`);
66
+ this.form = new item; // 实例化表单类
67
+ this.formType = name;
68
+ this.logger = logger;
69
+ this.layoutGroup = uiConfig.LayoutTypes[name]; // 如 { button: { source: 'button', param: [...] } }
70
+ }
71
+ /**
72
+ * 设置表单标题
73
+ * @param {string} newValue - 标题文本
74
+ */
75
+ set title(newValue) {
76
+ if (typeof newValue !== "string") {
77
+ throw new TypeError('Title must be a string.');
78
+ }
79
+ this.form.title(newValue); // 所有表单类都有 .title(string) 方法,文档写的很清楚
80
+ }
81
+ /**
82
+ * 动态添加一个表单布局组件(如按钮、文本等)
83
+ * @param {Object} opt - 配置项
84
+ * @param {string} opt.type - 布局类型,如 "button"
85
+ * @param {Array<any>} opt.param - 对应该布局的参数列表
86
+ */
87
+ addLayout(opt) {
88
+ const { type, param } = opt;
89
+ const layout = this.layoutGroup?.[type];
90
+ if (!layout) {
91
+ throw new TypeError(`Unknown layout type: "${type}".`);
92
+ }
93
+ const layoutRun = this.form[layout.source].bind(this.form);
94
+ if (typeof layoutRun !== "function") {
95
+ this.logger?.e?.(`Layout source "${layout.source}" is not a function.`);
96
+ return;
97
+ }
98
+ if (!layout.param) {
99
+ layoutRun(); // 无参数,直接调用
100
+ return;
101
+ }
102
+ const args = [];
103
+ for (let i = 0; i < layout.param.length; i++) {
104
+ const paramName = layout.param[i]; // 如 "text"
105
+ if (typeof paramName !== "string") {
106
+ this.logger?.w?.(`Layout param name must be string, got ${typeof paramName} at index ${i}.`);
107
+ continue;
108
+ }
109
+ const fieldDef = uiConfig.classic[paramName];
110
+ const value = param[i];
111
+ if (!this.#matchCondition(fieldDef, value)) {
112
+ // 在达到最小参数数时直接退出
113
+ if (i >= layout.minPar)
114
+ continue;
115
+ this.logger?.w?.(`Param "${paramName}" failed validation.`);
116
+ continue;
117
+ }
118
+ args.push(value);
119
+ }
120
+ try {
121
+ layoutRun(...args); // 调用表单方法并传入校验后的参数
122
+ }
123
+ catch (err) {
124
+ this.logger?.e?.(`Failed to add layout "${type}": ${err}`);
125
+ }
126
+ }
127
+ /**
128
+ * 校验参数是否符合定义的类型和约束
129
+ * @private
130
+ * @param {Object} source - 字段定义,如 { type: "string", regex?: RegExp, count?: [min: number, max: number], ObjectType?: any }
131
+ * @param {any} msg - 待校验的值
132
+ * @returns {boolean}
133
+ */
134
+ #matchCondition(source, msg) {
135
+ if (!source)
136
+ return false;
137
+ if (typeof msg !== source.type)
138
+ return false;
139
+ if (typeof source.regexFunc === "function" &&
140
+ /* 这里,应该验证函数返回false再拒绝*/
141
+ !source.regexFunc(msg))
142
+ return false;
143
+ switch (source.type) {
144
+ case "string":
145
+ if (source.regex && !source.regex.test(msg))
146
+ return false;
147
+ break;
148
+ case "object":
149
+ if (source.ObjectType && !utils_1.utils.typeVerify(msg, source.ObjectType))
150
+ return false;
151
+ break;
152
+ case "number":
153
+ if (source.count &&
154
+ (msg < source.count[0] || msg > source.count[1])) {
155
+ return false;
156
+ }
157
+ break;
158
+ }
159
+ return true;
160
+ }
161
+ /**
162
+ * 显示表单给玩家
163
+ * @param {@minecraft/server.Player} player - Minecraft 玩家对象
164
+ * @param {boolean = false} UseBeta - 使用新版 UI 库特性吗,兼容旧版
165
+ */
166
+ show(player, UseBeta = false) {
167
+ return UseBeta ? new show(this.form, player) : this.form.show(player);
168
+ }
169
+ }
170
+ exports.UI = UI;
171
+ /**
172
+ * 工厂函数:快速创建 UI 表单实例并初始化标题与布局
173
+ * @param {Object} logger - 日志对象
174
+ * @param {string} name - 表单类型,如 "Action"
175
+ * @param {Object} opt - 配置,含 title 和 layout 数组
176
+ * @returns {UI} 表单实例
177
+ */
178
+ const createForm = (logger, name, opt) => {
179
+ let r_opt = opt;
180
+ if (typeof opt === "symbol" && regs.has(opt))
181
+ r_opt = regs.get(opt);
182
+ function _createForm(name, opt) {
183
+ const validTypes = uiConfig.FormTypeArr;
184
+ const err = new TypeError(`createForm must be called with name in [${validTypes.join(", ")}] and valid 'opt'.`);
185
+ if (!validTypes.includes(name))
186
+ throw err;
187
+ if (!opt || !Array.isArray(opt.layout))
188
+ throw err;
189
+ const uiForm = new UI(name, logger);
190
+ uiForm.title = typeof opt.title === "string" ? opt.title : "未设置";
191
+ for (const item of opt.layout) {
192
+ uiForm.addLayout(item);
193
+ }
194
+ return uiForm;
195
+ }
196
+ return _createForm(name, r_opt);
197
+ };
198
+ exports.createForm = createForm;
199
+ const regLayout = (layout) => {
200
+ if (Array.isArray(layout.regIds)) {
201
+ for (let item of layout.regIds) {
202
+ if (typeof item === "string" && layout[item] !== void 0) {
203
+ regs.set(Symbol(item), layout[item]);
204
+ }
205
+ }
206
+ }
207
+ return Array.from(regs.keys());
208
+ };
209
+ exports.regLayout = regLayout;
@@ -1 +1,122 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.utils=exports.Vector3=void 0;const server_1=require("@minecraft/server"),data_js_1=require("./data.js"),gutils_1=require("gutils");Object.defineProperty(exports,"Vector3",{enumerable:!0,get:function(){return gutils_1.Vector3}});const utils=new class{DataToplayer({dimension:e,id:t,name:r,all:i}={}){let n,o=[];if(!0===i)return server_1.world.getAllPlayers();"string"==typeof r&&(o[0]=r),"number"==typeof t&&(o[1]=t),n=this.dimensionList.includes(e)?server_1.world.getDimension(e).getPlayers():server_1.world.getPlayers();for(let e of n){let t=!0;if(o[0]&&o[0]===e.name&&(t=!1),o[1]&&o[1]===e.id&&(t=!1),t)return e}return n[0]}DateToblock({dimension:e,Location:t}={}){return server_1.world.getDimension(this.dimensionList.includes(e)?e:this.dimensionList[0]).getBlock(t)}playerToData(e){if(!this.isEntityObject(e))throw new TypeError("ERR_NOT_A_Player");return{id:e.id,all:!1}}isEntityObject(e){return!(!typeVerify({id:e.id,name:e.name,dimension:e.dimension,location:e.location},{id:"number",name:"string",dimension:"object",location:"object"})||!e.isValid)}constructor(){this.dimensionList=["overworld","nether","the_end"]}typeVerify(e,t){const r=[];for(let[i,n]of e.entries(e)){const e=t[i];if("string"!=typeof e)throw new TypeError("ERR_INPUT");if(typeof n!==e)r.push(!1);else{if("object"==typeof n&&this.isObject(n)){r.push(!0);continue}r.push(!0)}}return!r.includes(!1)}isObject(e){return"object"==typeof e&&!Array.isArray(e)}isIterator(e){return"function"==typeof e[Symbol.iterator]}getEffect(e){let t=null;const r=Object.keys(data_js_1.EffectList);if("number"==typeof e&&r[e]&&(t=r[e]),"string"==typeof e&&r.includes(e)&&(t=e),null===t)throw new TypeError("ERR no match the EffectName");return t}in(e,t,r){return e>=t&&e<=r}};exports.utils=utils;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.utils = exports.Vector3 = void 0;
4
+ const server_1 = require("@minecraft/server");
5
+ const data_js_1 = require("./data.js");
6
+ const gutils_1 = require("gutils");
7
+ Object.defineProperty(exports, "Vector3", { enumerable: true, get: function () { return gutils_1.Vector3; } });
8
+ const utils = new class {
9
+ DataToplayer({ dimension, id, name, all } = {}) {
10
+ let condition = [];
11
+ let playerList;
12
+ if (all === true) {
13
+ return server_1.world.getAllPlayers();
14
+ }
15
+ if (typeof name === 'string') {
16
+ condition[0] = name;
17
+ }
18
+ if (typeof id === "number") {
19
+ condition[1] = id;
20
+ }
21
+ if (this.dimensionList.includes(dimension)) {
22
+ playerList = server_1.world.getDimension(dimension).getPlayers();
23
+ }
24
+ else {
25
+ playerList = server_1.world.getPlayers();
26
+ }
27
+ for (let player of playerList) {
28
+ let isReturn = true;
29
+ if (condition[0]) {
30
+ if (condition[0] === player.name) {
31
+ isReturn = false;
32
+ }
33
+ }
34
+ if (condition[1]) {
35
+ if (condition[1] === player.id) {
36
+ isReturn = false;
37
+ }
38
+ }
39
+ if (isReturn)
40
+ return player;
41
+ }
42
+ return playerList[0];
43
+ }
44
+ DateToblock({ dimension, Location } = {}) {
45
+ return server_1.world
46
+ .getDimension(this.dimensionList.includes(dimension) ?
47
+ dimension :
48
+ this.dimensionList[0]).getBlock(Location);
49
+ }
50
+ playerToData(player) {
51
+ if (!this.isEntityObject(player)) {
52
+ throw new TypeError("ERR_NOT_A_Player");
53
+ }
54
+ return {
55
+ id: player.id,
56
+ all: false
57
+ };
58
+ }
59
+ isEntityObject(player) {
60
+ if (typeVerify({
61
+ id: player.id,
62
+ name: player.name,
63
+ dimension: player.dimension,
64
+ location: player.location
65
+ }, {
66
+ id: "number",
67
+ name: "string",
68
+ dimension: "object",
69
+ location: "object"
70
+ }) && player.isValid)
71
+ return true;
72
+ return false;
73
+ }
74
+ constructor() {
75
+ this.dimensionList = [
76
+ 'overworld',
77
+ 'nether',
78
+ 'the_end'
79
+ ];
80
+ }
81
+ typeVerify(Object, ObjectSet) {
82
+ const result = [];
83
+ for (let [key, data] of Object.entries(Object)) {
84
+ const type = ObjectSet[key];
85
+ if (typeof type !== 'string')
86
+ throw new TypeError('ERR_INPUT');
87
+ if (typeof data === type) {
88
+ if (typeof data === 'object') {
89
+ if (this.isObject(data)) {
90
+ result.push(true);
91
+ continue;
92
+ }
93
+ }
94
+ result.push(true);
95
+ continue;
96
+ }
97
+ result.push(false);
98
+ }
99
+ return !result.includes(false);
100
+ }
101
+ isObject(Obj) {
102
+ return (typeof Obj === "object" && !Array.isArray(Obj));
103
+ }
104
+ isIterator(obj) {
105
+ return typeof obj[Symbol.iterator] === "function" ? true : false;
106
+ }
107
+ getEffect(name) {
108
+ let Use_name = null;
109
+ const Effect = Object.keys(data_js_1.EffectList);
110
+ if (typeof name === "number" && Effect[name])
111
+ Use_name = Effect[name];
112
+ if (typeof name === "string" && Effect.includes(name))
113
+ Use_name = name;
114
+ if (Use_name === null)
115
+ throw new TypeError("ERR no match the EffectName");
116
+ return Use_name;
117
+ }
118
+ in(num, min, max) {
119
+ return (num >= min && num <= max);
120
+ }
121
+ };
122
+ exports.utils = utils;
@@ -1 +1,22 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Vector3=void 0;class Vector3{constructor(e,o,r,t){const c=e||0,s=o||0,d=r||0;return{dis:"object"==typeof t?t.id||"overworld":["overworld","nether","the_end"].includes(t)?t:null,x:c,y:s,z:d}}}exports.Vector3=Vector3;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Vector3 = void 0;
4
+ class Vector3 {
5
+ constructor(x1, y1, z1, dimension) {
6
+ const x = x1 || 0;
7
+ const y = y1 || 0;
8
+ const z = z1 || 0;
9
+ const dis = typeof dimension === "object" ? (dimension.id || "overworld") : ([
10
+ 'overworld',
11
+ 'nether',
12
+ 'the_end'
13
+ ].includes(dimension) ? dimension : null);
14
+ return {
15
+ dis,
16
+ x,
17
+ y,
18
+ z
19
+ };
20
+ }
21
+ }
22
+ exports.Vector3 = Vector3;
@@ -1 +1,54 @@
1
- "use strict";var __importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const promises_1=__importDefault(require("node:fs/promises")),node_path_1=__importDefault(require("node:path"));class FileMethod{dir="";#e(e){return node_path_1.default.join(this.dir,e)}async mkdir(e){try{return await promises_1.default.mkdir(this.#e(e),{recursive:!0}),!0}catch{return!1}}async rm(e){try{return await promises_1.default.rm(this.#e(e),{recursive:!0,force:!0}),!0}catch(e){return!1}}async writeFile(e,r){try{return await promises_1.default.writeFile(this.#e(e),r),!0}catch(e){return!1}}readFile(e){return promises_1.default.readFile(this.#e(e))}async readdir(e){return await promises_1.default.readdir(this.#e(e))}}exports.default=FileMethod;
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const promises_1 = __importDefault(require("node:fs/promises"));
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ // 用于给 Temp 提供不需要导入 fs 的小支持
9
+ // 一些时候直接 Temp.dir 作为目录完事
10
+ class FileMethod {
11
+ dir = "";
12
+ #getDir(Dir) {
13
+ return node_path_1.default.join(this.dir, Dir);
14
+ }
15
+ async mkdir(DirName) {
16
+ try {
17
+ await promises_1.default.mkdir(this.#getDir(DirName), {
18
+ recursive: true
19
+ });
20
+ return true;
21
+ }
22
+ catch {
23
+ return false;
24
+ }
25
+ }
26
+ async rm(File) {
27
+ try {
28
+ await promises_1.default.rm(this.#getDir(File), {
29
+ recursive: true,
30
+ force: true
31
+ });
32
+ return true;
33
+ }
34
+ catch (err) {
35
+ return false;
36
+ }
37
+ }
38
+ async writeFile(File, content) {
39
+ try {
40
+ await promises_1.default.writeFile(this.#getDir(File), content);
41
+ return true;
42
+ }
43
+ catch (err) {
44
+ return false;
45
+ }
46
+ }
47
+ readFile(File) {
48
+ return promises_1.default.readFile(this.#getDir(File));
49
+ }
50
+ async readdir(Dir) {
51
+ return await promises_1.default.readdir(this.#getDir(Dir));
52
+ }
53
+ }
54
+ exports.default = FileMethod;
@@ -1 +1,137 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,i,r){void 0===r&&(r=i);var a=Object.getOwnPropertyDescriptor(t,i);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[i]}}),Object.defineProperty(e,r,a)}:function(e,t,i,r){void 0===r&&(r=i),e[r]=t[i]}),__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 i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[t.length]=i);return t},e(t)};return function(t){if(t&&t.__esModule)return t;var i={};if(null!=t)for(var r=e(t),a=0;a<r.length;a++)"default"!==r[a]&&__createBinding(i,t,r[a]);return __setModuleDefault(i,t),i}}(),__importDefault=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const promises_1=__importDefault(require("node:fs/promises")),path_1=__importDefault(require("path")),utils=__importStar(require("./../utils/index.js")),index_js_1=__importDefault(require("./../loger/index.js")),index_js_2=__importDefault(require("./../uuid/index.js")),File_js_1=__importDefault(require("./File.js")),{MAX:MAX,CACHE_DESC:CACHE_DESC}=require("./config.json");class Temp extends File_js_1.default{static type="singleton class";dir="";cacheDesc="";timdir;tempId=null;constructor(e){super(),this.timdir=e}async#e(e){await utils.FileExsit(e)||promises_1.default.mkdir(e)}async init(){await this.#e(this.timdir),this.cacheDesc=path_1.default.join(this.timdir,CACHE_DESC),this.tempId=index_js_2.default.uuid(),await utils.FileExsit(this.cacheDesc)||await promises_1.default.writeFile(this.cacheDesc,JSON.stringify({LNnum:1}),"utf-8");const e=this.wait();let t=await e.next();for(;!t.done&&!1===t.value;)index_js_1.default.i("temp","等待中..."),await utils.sleep(1e3),t=await e.next();const i=t.value;if("boolean"==typeof i)throw new TypeError("[read generator]");const r=path_1.default.join(this.timdir,this.tempId);await promises_1.default.writeFile(this.cacheDesc,JSON.stringify({LNnum:("number"==typeof i.LNnum?i.LNnum:1)+1}),"utf-8"),await promises_1.default.mkdir(r,{recursive:!0}),this.dir=r,Object.defineProperty(this,"cacheDesc",{enumerable:!1,writable:!1})}async*wait(){for(;;){const e=JSON.parse((await promises_1.default.readFile(this.cacheDesc)).toString());if("number"!=typeof e.LNnum)throw new Error("[temp error]: cannot load config");if((e?.LNnum??1)<=MAX)return e;index_js_1.default.i("TEMP","INFO: CONCURRENCY >= MAX_CONCURRENCY",{MAX_CONCURRENCY:MAX}),yield!1,await utils.sleep(1e3)}}async remove(){if(null===this.tempId||""===this.dir)throw new Error("Please call init() first before calling remove().");try{await promises_1.default.rm(this.dir,{recursive:!0,force:!0});const e=JSON.parse(await promises_1.default.readFile(this.cacheDesc,"utf-8")),t=Math.max((e?.LNnum||1)-1,0);await promises_1.default.writeFile(this.cacheDesc,JSON.stringify({LNnum:t}),"utf-8")}catch(e){index_js_1.default.e("TEMP","Error during temp dir removal:",e)}finally{this.dir="",this.tempId=null}}}exports.default=Temp;
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const promises_1 = __importDefault(require("node:fs/promises"));
40
+ const path_1 = __importDefault(require("path"));
41
+ const utils = __importStar(require("./../utils/index.js"));
42
+ const index_js_1 = __importDefault(require("./../loger/index.js"));
43
+ const index_js_2 = __importDefault(require("./../uuid/index.js"));
44
+ const File_js_1 = __importDefault(require("./File.js"));
45
+ // 使用 require 导入 JSON 配置(兼容 CommonJS)
46
+ const { MAX, CACHE_DESC } = require('./config.json');
47
+ // 临时存储类(单例模式)
48
+ class Temp extends File_js_1.default {
49
+ static type = 'singleton class';
50
+ // 当前临时目录路径
51
+ dir = '';
52
+ // 缓存描述文件路径
53
+ cacheDesc = "";
54
+ // 私有:临时目录路径
55
+ timdir;
56
+ // 私有:当前临时实例 ID
57
+ tempId = null;
58
+ constructor(tempDir) {
59
+ super();
60
+ this.timdir = tempDir;
61
+ }
62
+ // 私有方法:检查目录是否存在
63
+ async #checkDir(dirPath) {
64
+ const exists = await utils.FileExsit(dirPath);
65
+ if (!exists) {
66
+ promises_1.default.mkdir(dirPath);
67
+ }
68
+ }
69
+ // 初始化临时目录
70
+ async init() {
71
+ await this.#checkDir(this.timdir);
72
+ this.cacheDesc = path_1.default.join(this.timdir, CACHE_DESC);
73
+ this.tempId = index_js_2.default.uuid(); // 生成唯一 ID,假设 uuid.uuid() 返回 string
74
+ // 如果缓存文件不存在,则初始化
75
+ if (!(await utils.FileExsit(this.cacheDesc))) {
76
+ await promises_1.default.writeFile(this.cacheDesc, JSON.stringify({ LNnum: 1 }), 'utf-8');
77
+ }
78
+ const waitGen = this.wait(); // AsyncGenerator<boolean, any, unknown>
79
+ let result = await waitGen.next();
80
+ while (!result.done && result.value === false) {
81
+ index_js_1.default.i('temp', '等待中...');
82
+ await utils.sleep(1000);
83
+ result = await waitGen.next();
84
+ }
85
+ const data = result.value;
86
+ if (typeof data == "boolean")
87
+ throw new TypeError("[read generator]");
88
+ const instanceDir = path_1.default.join(this.timdir, this.tempId);
89
+ await promises_1.default.writeFile(this.cacheDesc, JSON.stringify({ LNnum: (typeof data.LNnum == "number" ? data.LNnum : 1) + 1 }), 'utf-8');
90
+ await promises_1.default.mkdir(instanceDir, { recursive: true });
91
+ this.dir = instanceDir;
92
+ // 设为不可枚举 & 不可写
93
+ Object.defineProperty(this, 'cacheDesc', {
94
+ enumerable: false,
95
+ writable: false,
96
+ });
97
+ }
98
+ // 等待并发数低于最大值,返回一个异步生成器
99
+ async *wait() {
100
+ while (true) {
101
+ const data = JSON.parse((await promises_1.default.readFile(this.cacheDesc)).toString());
102
+ if (typeof data.LNnum !== "number")
103
+ throw new Error("[temp error]: cannot load config");
104
+ const currentLnNum = data?.LNnum ?? 1;
105
+ if (currentLnNum <= MAX) {
106
+ return data;
107
+ }
108
+ index_js_1.default.i('TEMP', 'INFO: CONCURRENCY >= MAX_CONCURRENCY', {
109
+ MAX_CONCURRENCY: MAX,
110
+ });
111
+ yield false;
112
+ await utils.sleep(1000);
113
+ }
114
+ }
115
+ // 清理临时目录
116
+ async remove() {
117
+ if (this.tempId === null || this.dir === '') {
118
+ throw new Error(`Please call init() first before calling remove().`);
119
+ }
120
+ try {
121
+ await promises_1.default.rm(this.dir, { recursive: true, force: true });
122
+ const data = JSON.parse(await promises_1.default.readFile(this.cacheDesc, "utf-8"));
123
+ const newCount = Math.max((data?.LNnum || 1) - 1, 0);
124
+ await promises_1.default.writeFile(this.cacheDesc, JSON.stringify({ LNnum: newCount }), 'utf-8');
125
+ }
126
+ catch (err) {
127
+ index_js_1.default.e('TEMP', 'Error during temp dir removal:', err);
128
+ }
129
+ finally {
130
+ // 重置状态
131
+ this.dir = '';
132
+ this.tempId = null;
133
+ }
134
+ }
135
+ }
136
+ // 导出默认类
137
+ exports.default = Temp;
@@ -1 +1,93 @@
1
- "use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(t,e,r,i){void 0===i&&(i=r);var n=Object.getOwnPropertyDescriptor(e,r);n&&!("get"in n?!e.__esModule:n.writable||n.configurable)||(n={enumerable:!0,get:function(){return e[r]}}),Object.defineProperty(t,i,n)}:function(t,e,r,i){void 0===i&&(i=r),t[i]=e[r]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(t,e){Object.defineProperty(t,"default",{enumerable:!0,value:e})}:function(t,e){t.default=e}),__importStar=this&&this.__importStar||function(){var t=function(e){return t=Object.getOwnPropertyNames||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[e.length]=r);return e},t(e)};return function(e){if(e&&e.__esModule)return e;var r={};if(null!=e)for(var i=t(e),n=0;n<i.length;n++)"default"!==i[n]&&__createBinding(r,e,i[n]);return __setModuleDefault(r,e),r}}(),__importDefault=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(exports,"__esModule",{value:!0});const promises_1=__importDefault(require("fs/promises")),utils=__importStar(require("../utils/index.js"));class SecurityFile{#t=null;constructor(t){this.#t=t}#e(t){const e=utils.join(this.#t,t);if(!e.startsWith(this.#t))throw new Error("[Mbler security] Don't into Parent Directory");return e}async mkdir(t){try{return await promises_1.default.mkdir(this.#e(t),{recursive:!0}),!0}catch{return!1}}async rm(t){try{return await promises_1.default.rm(this.#e(t),{recursive:!0,force:!0}),!0}catch(t){return!1}}async writeFile(t,e){try{return await promises_1.default.writeFile(this.#e(t),e,{encoding:"utf-8"}),!0}catch(t){return!1}}async readFile(t,e){return await utils.readFile(this.#e(t),e)}async readdir(t){return await promises_1.default.readdir(this.#e(t))}}exports.default=SecurityFile;
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const promises_1 = __importDefault(require("fs/promises"));
40
+ const utils = __importStar(require("../utils/index.js"));
41
+ class SecurityFile {
42
+ #dir = null;
43
+ constructor(dir) {
44
+ this.#dir = dir;
45
+ }
46
+ #getDir(d) {
47
+ const dir = utils.join(this.#dir, d);
48
+ if (!dir.startsWith(this.#dir))
49
+ throw new Error("[Mbler security] Don't into Parent Directory");
50
+ return dir;
51
+ }
52
+ async mkdir(DirName) {
53
+ try {
54
+ await promises_1.default.mkdir(this.#getDir(DirName), {
55
+ recursive: true
56
+ });
57
+ return true;
58
+ }
59
+ catch {
60
+ return false;
61
+ }
62
+ }
63
+ async rm(File) {
64
+ try {
65
+ await promises_1.default.rm(this.#getDir(File), {
66
+ recursive: true,
67
+ force: true
68
+ });
69
+ return true;
70
+ }
71
+ catch (err) {
72
+ return false;
73
+ }
74
+ }
75
+ async writeFile(File, content) {
76
+ try {
77
+ await promises_1.default.writeFile(this.#getDir(File), content, {
78
+ encoding: 'utf-8'
79
+ });
80
+ return true;
81
+ }
82
+ catch (err) {
83
+ return false;
84
+ }
85
+ }
86
+ async readFile(File, opt) {
87
+ return await utils.readFile(this.#getDir(File), opt);
88
+ }
89
+ async readdir(Dir) {
90
+ return await promises_1.default.readdir(this.#getDir(Dir));
91
+ }
92
+ }
93
+ exports.default = SecurityFile;
@@ -1 +1,3 @@
1
- "use strict";const index_js_1=require("./../module-handler/index.js");module.exports=index_js_1.addPack;
1
+ "use strict";
2
+ const index_js_1 = require("./../module-handler/index.js");
3
+ module.exports = index_js_1.addPack;