mbler 0.1.3-alpha → 0.1.3-alpna-r1

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 (178) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +8 -4
  3. package/bin/mbler.js +12 -12
  4. package/bin/minify.js +58 -44
  5. package/lib/build/base.js +1 -297
  6. package/lib/build/build-g-config.json +12 -12
  7. package/lib/build/getModule.js +1 -182
  8. package/lib/build/index.js +1 -370
  9. package/lib/build/manifest.build.js +1 -103
  10. package/lib/build/mcVersion.js +1 -86
  11. package/lib/build/utils.js +1 -6
  12. package/lib/code-processor/c-handler-export.js +1 -12
  13. package/lib/code-processor/index.js +1 -141
  14. package/lib/code-processor/mtreehandler.js +1 -164
  15. package/lib/commander/index.js +1 -154
  16. package/lib/data/includes.json +13 -13
  17. package/lib/data/version.json +88 -88
  18. package/lib/git/clone.js +1 -28
  19. package/lib/git/index.js +1 -12
  20. package/lib/git/pull.js +1 -100
  21. package/lib/lang/__translate.js +1 -93
  22. package/lib/lang/en.js +1 -128
  23. package/lib/lang/index.js +1 -78
  24. package/lib/lang/zh.js +1 -146
  25. package/lib/loger/colors.js +1 -13
  26. package/lib/loger/index.js +1 -136
  27. package/lib/mcx/ast/index.js +1 -11
  28. package/lib/mcx/ast/prop.js +1 -78
  29. package/lib/mcx/ast/tag.js +1 -246
  30. package/lib/mcx/compile-component/lib.js +1 -106
  31. package/lib/mcx/compile-component/types.js +1 -2
  32. package/lib/mcx/compile-component/utils.js +1 -26
  33. package/lib/mcx/compile-mcx/compile.js +1 -34
  34. package/lib/mcx/compile-mcx/compiler/bundler.js +1 -0
  35. package/lib/mcx/compile-mcx/compiler/compileData.js +1 -0
  36. package/lib/mcx/compile-mcx/compiler/compileMain.js +1 -0
  37. package/lib/mcx/compile-mcx/compiler/index.js +1 -0
  38. package/lib/mcx/compile-mcx/compiler/utils.js +1 -0
  39. package/lib/mcx/compile-mcx/context.js +1 -19
  40. package/lib/mcx/compile-mcx/index.js +1 -10
  41. package/lib/mcx/compile-mcx/mcx/index.js +1 -2
  42. package/lib/mcx/compile-mcx/mcx/types.js +1 -2
  43. package/lib/mcx/compile-mcx/template/module.js +1 -42
  44. package/lib/mcx/compile-mcx/types.js +1 -2
  45. package/lib/mcx/compile-mcx/utils.node.js +1 -207
  46. package/lib/mcx/index.js +1 -13
  47. package/lib/mcx/test/index.js +1 -7
  48. package/lib/mcx/test.js +1 -21
  49. package/lib/mcx/types.js +1 -2
  50. package/lib/mcx/utils.js +1 -86
  51. package/lib/module-handler/index.js +1 -482
  52. package/lib/modules/create-game/mbler.config.json +13 -13
  53. package/lib/modules/create-game/src/Runner/RunnerManager.js +1 -113
  54. package/lib/modules/create-game/src/Runner/scriptRunner.js +1 -70
  55. package/lib/modules/create-game/src/config.js +1 -27
  56. package/lib/modules/create-game/src/constants.js +1 -19
  57. package/lib/modules/create-game/src/createGameModule.js +1 -24
  58. package/lib/modules/create-game/src/gameComponent/common/autoStop.js +1 -38
  59. package/lib/modules/create-game/src/gameComponent/common/lazyLoader.js +1 -76
  60. package/lib/modules/create-game/src/gameComponent/common/stopWatch/onTimeEvent.js +1 -36
  61. package/lib/modules/create-game/src/gameComponent/common/stopWatch/stopWatch.js +1 -90
  62. package/lib/modules/create-game/src/gameComponent/common/stopWatch/tickEvent.js +1 -29
  63. package/lib/modules/create-game/src/gameComponent/common/timer/onTimeEvent.js +1 -36
  64. package/lib/modules/create-game/src/gameComponent/common/timer/tickEvent.js +1 -29
  65. package/lib/modules/create-game/src/gameComponent/common/timer/timer.js +1 -87
  66. package/lib/modules/create-game/src/gameComponent/gameComponent.js +1 -53
  67. package/lib/modules/create-game/src/gameComponent/index.js +1 -31
  68. package/lib/modules/create-game/src/gameComponent/player/blockInteractionBlocker.js +1 -40
  69. package/lib/modules/create-game/src/gameComponent/player/entityInteractionBlocker.js +1 -48
  70. package/lib/modules/create-game/src/gameComponent/player/healthIndicator.js +1 -48
  71. package/lib/modules/create-game/src/gameComponent/player/regionMonitor.js +1 -22
  72. package/lib/modules/create-game/src/gameComponent/player/respawn.js +1 -59
  73. package/lib/modules/create-game/src/gameComponent/player/spawnProtector.js +1 -69
  74. package/lib/modules/create-game/src/gameComponent/region/regionProtecter.js +1 -53
  75. package/lib/modules/create-game/src/gameComponent/region/regionTeamChooser.js +1 -71
  76. package/lib/modules/create-game/src/gameComponent/region/regionTeamCleaner.js +1 -20
  77. package/lib/modules/create-game/src/gameComponent/view/infoScoreboard.js +1 -77
  78. package/lib/modules/create-game/src/gameComponent/view/teamScoreboard.js +1 -83
  79. package/lib/modules/create-game/src/gameContext.js +1 -6
  80. package/lib/modules/create-game/src/gameEngine.js +1 -139
  81. package/lib/modules/create-game/src/gameEvent/eventManager.js +1 -108
  82. package/lib/modules/create-game/src/gameEvent/eventSignal.js +1 -28
  83. package/lib/modules/create-game/src/gameEvent/events/buttonPush.js +1 -41
  84. package/lib/modules/create-game/src/gameEvent/events/inSlot.js +1 -77
  85. package/lib/modules/create-game/src/gameEvent/events/interval.js +1 -51
  86. package/lib/modules/create-game/src/gameEvent/events/itemUse.js +1 -36
  87. package/lib/modules/create-game/src/gameEvent/events/onBlock.js +1 -106
  88. package/lib/modules/create-game/src/gameEvent/events/regionEvents.js +1 -105
  89. package/lib/modules/create-game/src/gameEvent/events/signClick.js +1 -45
  90. package/lib/modules/create-game/src/gameEvent/gameEvent.js +1 -54
  91. package/lib/modules/create-game/src/gameEvent/index.js +1 -20
  92. package/lib/modules/create-game/src/gameEvent/mapEventSignal.js +1 -101
  93. package/lib/modules/create-game/src/gameEvent/subscription.js +1 -17
  94. package/lib/modules/create-game/src/gamePlayer/gamePlayer.js +1 -102
  95. package/lib/modules/create-game/src/gamePlayer/groupBuilder.js +1 -38
  96. package/lib/modules/create-game/src/gamePlayer/groupSet.js +1 -96
  97. package/lib/modules/create-game/src/gamePlayer/index.js +1 -25
  98. package/lib/modules/create-game/src/gamePlayer/playerGroup.js +1 -145
  99. package/lib/modules/create-game/src/gamePlayer/playerManager.js +1 -57
  100. package/lib/modules/create-game/src/gameRegion/gameRegion.js +1 -229
  101. package/lib/modules/create-game/src/gameRegion/index.js +1 -43
  102. package/lib/modules/create-game/src/gameRegion/regionHelper.js +1 -79
  103. package/lib/modules/create-game/src/gameState/common/autoStop.js +1 -39
  104. package/lib/modules/create-game/src/gameState/gameState.js +1 -169
  105. package/lib/modules/create-game/src/gameState/index.js +1 -7
  106. package/lib/modules/create-game/src/gameState/types.js +1 -35
  107. package/lib/modules/create-game/src/gameStructure/gameStructure.js +1 -36
  108. package/lib/modules/create-game/src/main.js +1 -86
  109. package/lib/modules/create-game/src/system/gameCommand.js +1 -107
  110. package/lib/modules/create-game/src/system/gameManager.js +1 -124
  111. package/lib/modules/create-game/src/system/globalPlayerManager.js +1 -119
  112. package/lib/modules/create-game/src/utils/GameError.js +1 -31
  113. package/lib/modules/create-game/src/utils/algorithm.js +1 -95
  114. package/lib/modules/create-game/src/utils/chunk.js +1 -63
  115. package/lib/modules/create-game/src/utils/deferredObject.js +1 -27
  116. package/lib/modules/create-game/src/utils/duration.js +1 -25
  117. package/lib/modules/create-game/src/utils/func.js +1 -20
  118. package/lib/modules/create-game/src/utils/index.js +1 -52
  119. package/lib/modules/create-game/src/utils/interfaces.js +1 -2
  120. package/lib/modules/create-game/src/utils/logger.js +1 -47
  121. package/lib/modules/create-game/src/utils/random.js +1 -76
  122. package/lib/modules/create-game/src/utils/vanila-data.js +1 -123
  123. package/lib/modules/create-game/src/utils/vector.js +1 -96
  124. package/lib/modules/gameLib/mbler.config.json +15 -15
  125. package/lib/modules/gameLib/src/config.js +1 -134
  126. package/lib/modules/gameLib/src/data.js +1 -77
  127. package/lib/modules/gameLib/src/entity.js +1 -256
  128. package/lib/modules/gameLib/src/event.js +1 -285
  129. package/lib/modules/gameLib/src/index.js +1 -20
  130. package/lib/modules/gameLib/src/loger.js +1 -21
  131. package/lib/modules/gameLib/src/ui.js +1 -209
  132. package/lib/modules/gameLib/src/utils.js +1 -122
  133. package/lib/modules/gutils/mbler.config.json +11 -11
  134. package/lib/modules/gutils/src/index.js +1 -22
  135. package/lib/modules/innerDef.json +4 -4
  136. package/lib/runTemp/File.js +1 -54
  137. package/lib/runTemp/config.json +3 -3
  138. package/lib/runTemp/index.js +1 -137
  139. package/lib/runTemp/securityFile.js +1 -93
  140. package/lib/start/addPack.js +1 -3
  141. package/lib/start/clean.js +1 -84
  142. package/lib/start/create.js +1 -146
  143. package/lib/start/dev.js +1 -99
  144. package/lib/start/getResConfig.js +1 -3
  145. package/lib/start/incg.js +1 -3
  146. package/lib/start/index.js +1 -207
  147. package/lib/start/init.js +1 -125
  148. package/lib/start/rechce.js +1 -57
  149. package/lib/start/unaddPack.js +1 -3
  150. package/lib/start/unincg.js +1 -67
  151. package/lib/start/version.js +1 -73
  152. package/lib/utils/index.js +1 -298
  153. package/lib/uuid/index.js +1 -27
  154. package/package.json +49 -1
  155. package/test/2x sword/behavior/scripts/index.js +24 -24
  156. package/test/2x sword/mbler.config.json +11 -11
  157. package/test/2x sword/package.json +13 -13
  158. package/test/README.md +7 -7
  159. package/test/des/index.js +19 -19
  160. package/test/des/mbler.config.json +4 -4
  161. package/test/des/package.json +6 -6
  162. package/test/initializer/index.js +5 -5
  163. package/test/initializer/mbler.config.json +4 -4
  164. package/test/initializer/package.json +6 -6
  165. package/test/mbler-int/behavior/res/items/mang_one_int.json +21 -21
  166. package/test/mbler-int/behavior/scripts/index.js +7 -7
  167. package/test/mbler-int/behavior/scripts/lib/event/index.js +19 -19
  168. package/test/mbler-int/behavior/scripts/lib/ui/Lore.js +18 -18
  169. package/test/mbler-int/behavior/scripts/lib/ui/baseUi.js +6 -6
  170. package/test/mbler-int/behavior/scripts/lib/ui/index.js +206 -206
  171. package/test/mbler-int/behavior/scripts/lib/utils/index.js +51 -51
  172. package/test/mbler-int/mbler.config.json +18 -18
  173. package/test/mbler-int/package.json +12 -12
  174. package/test/script-mbler/behavior/scripts/index.js +5 -0
  175. package/test/script-mbler/behavior/scripts/index.ts +5 -5
  176. package/test/script-mbler/mbler.config.json +14 -14
  177. package/test/script-mbler/package.json +15 -15
  178. package/lib/mcx/compile-mcx/_compile.js +0 -602
@@ -1,256 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Entity = void 0;
4
- const server_1 = require("@minecraft/server");
5
- const utils_js_1 = require("./utils.js");
6
- const data_js_1 = require("./data.js");
7
- // 定义可被 Proxy 代理读写的实体属性(同步到原生实体)
8
- const PROXIED_PROPERTIES = ["isSneaking", "nameTag"];
9
- /**
10
- * Entity 类:对 Minecraft 原生实体对象的封装,
11
- * 提供安全的 API 操作、属性代理同步、参数校验等功能。
12
- */
13
- class Entity {
14
- constructor(logger, source) {
15
- this.logger = logger; // 日志记录器,用于错误输出
16
- this._source = source; // 原生 Minecraft 实体对象
17
- if (!utils_js_1.utils.isEntityObject(source)) {
18
- throw new TypeError("ERR_invalid_input: 传入的 source 不是有效的实体对象");
19
- }
20
- // 用于缓存部分同步数据
21
- this.data = {};
22
- // 初始化同步属性
23
- this._init();
24
- // 返回一个代理对象,拦截 get/set 操作
25
- return new Proxy(this, {
26
- set: (target, prop, value) => {
27
- if (PROXIED_PROPERTIES.includes(prop)) {
28
- // 只有在白名单中的属性才允许代理写入
29
- try {
30
- target._source[prop] = value; // 同步到原生实体
31
- target.data[prop] = value; // 同步到本地缓存
32
- }
33
- catch (err) {
34
- target.logger.e(`设置属性 "${prop}" 失败: ${err}`);
35
- }
36
- }
37
- return true;
38
- },
39
- get: (target, prop) => {
40
- if (PROXIED_PROPERTIES.includes(prop)) {
41
- // 优先从原生实体读取最新值(如 isSneaking, nameTag)
42
- try {
43
- return target._source[prop];
44
- }
45
- catch {
46
- // 如果失败,尝试从本地缓存返回
47
- return target.data[prop];
48
- }
49
- }
50
- // 优先从当前对象查找,否则从 data 缓存中返回
51
- return prop in target ? target[prop] : target.data[prop];
52
- }
53
- });
54
- }
55
- /// ---- 基础方法:实体操作 ----
56
- /**
57
- * 摧毁实体(调用原生 kill() 方法)
58
- */
59
- kill() {
60
- this._checkClass();
61
- this._source.kill();
62
- }
63
- /**
64
- * 给实体添加状态效果(如中毒、速度等)
65
- * @param {string | number} name - 效果 ID 或名称
66
- * @param {number} duration - 持续时间 ticks
67
- * @param {number} [strength] - 效果强度(0-255)
68
- * @param {boolean} [show] - 是否显示粒子效果
69
- */
70
- addEffect(name, duration, strength, show) {
71
- this._checkClass();
72
- if (typeof duration !== "number" || !utils_js_1.utils.in(duration, 1, 20000000)) {
73
- throw new TypeError("ERR: 'duration' 必须是 1~20000000 的数字");
74
- }
75
- if (typeof name !== "number" && typeof name !== "string") {
76
- throw new TypeError("ERR: 'name' 必须是字符串或数字");
77
- }
78
- if (strength !== undefined) {
79
- if (typeof strength !== "number" || !utils_js_1.utils.in(strength, 0, 255)) {
80
- throw new TypeError("ERR: 'strength' 必须是 0~255 的数字");
81
- }
82
- }
83
- if (typeof show !== "boolean") {
84
- throw new TypeError("ERR: 'show' 必须是布尔值");
85
- }
86
- const effect = utils_js_1.utils.getEffect(name);
87
- const options = {};
88
- if (strength !== undefined)
89
- options.amplifier = strength;
90
- if (show !== undefined)
91
- options.showParticles = show;
92
- this._source.addEffect(effect, duration, options);
93
- }
94
- /**
95
- * 给实体添加标签
96
- * @param {string} name - 标签名称
97
- */
98
- addTag(name) {
99
- this._checkClass();
100
- this._checkTagName(name);
101
- this._source.addTag(name);
102
- }
103
- /**
104
- * 移除实体标签
105
- * @param {string} name - 标签名称
106
- * @returns 是否移除成功
107
- */
108
- removeTag(name) {
109
- this._checkClass();
110
- this._checkTagName(name);
111
- return this._source.removeTag(name);
112
- }
113
- /**
114
- * 移除实体身上的某个效果
115
- * @param {string | number} name - 效果 ID 或名称
116
- */
117
- removeEffect(name) {
118
- this._checkClass();
119
- return this._source.removeEffect(utils_js_1.utils.getEffect(name));
120
- }
121
- /// ---- 伤害相关方法 ----
122
- /**
123
- * 对实体造成伤害(来自某个实体)
124
- * @param {number} hurt - 伤害值
125
- * @param {string} cause - 伤害类型,参考 EntityDamageCause
126
- * @param {Entity} source - 伤害来源实体
127
- */
128
- damage(hurt, cause, source) {
129
- this._checkClass();
130
- if (!Object.keys(data_js_1.EntityDamageCause).includes(cause)) {
131
- throw new TypeError("ERR: 'cause' 必须是有效的伤害类型");
132
- }
133
- const damageSource = this._checkDamageParam(hurt, source);
134
- this._source.applyDamage(hurt, {
135
- damagingEntity: damageSource,
136
- cause: cause
137
- });
138
- }
139
- /**
140
- * 对实体造成伤害(来自投射物实体)
141
- * @param {number} hurt - 伤害值
142
- * @param {Entity} source - 伤害来源(通常是玩家)
143
- * @param {Entity} projectile - 投射物实体(如箭矢)
144
- */
145
- damageByProjectile(hurt, source, projectile) {
146
- this._checkClass();
147
- if (!(projectile instanceof Entity) || !projectile._source.isValid) {
148
- throw new TypeError("ERR: 投射物必须是一个有效的 Entity 实例");
149
- }
150
- const projSource = projectile._source;
151
- const damageSource = this._checkDamageParam(hurt, source);
152
- this._source.applyDamage(hurt, {
153
- damagingEntity: damageSource,
154
- damagingProjectile: projSource
155
- });
156
- }
157
- /// ---- 内部工具方法 ----
158
- /**
159
- * 检查当前封装的实体是否有效(未被销毁)
160
- */
161
- _checkClass() {
162
- if (!this._source.isValid) {
163
- throw new Error("ERR: 该实体对象已无效(可能已被销毁)");
164
- }
165
- }
166
- /**
167
- * 检查伤害来源参数是否合法
168
- */
169
- _checkDamageParam(hurt, source) {
170
- if (typeof hurt !== "number") {
171
- throw new TypeError("ERR: 伤害值 'hurt' 必须是数字");
172
- }
173
- if (!(source instanceof Entity)) {
174
- throw new TypeError("ERR: 伤害来源必须是一个 Entity 实例");
175
- }
176
- const dmgSource = source._source;
177
- if (!utils_js_1.utils.isEntityObject(dmgSource)) {
178
- throw new TypeError("ERR: 传入的伤害来源不是有效的实体对象");
179
- }
180
- return dmgSource;
181
- }
182
- /**
183
- * 检查标签名称是否合法
184
- */
185
- _checkTagName(name) {
186
- if (typeof name !== "string" || !utils_js_1.utils.in(name.length, 1, 250)) {
187
- throw new TypeError("ERR: 标签名称必须是 1~250 长度的字符串");
188
- }
189
- }
190
- /// ---- 属性同步初始化 ----
191
- /**
192
- * 初始化需要同步的实体属性(部分只读)
193
- */
194
- _init() {
195
- // 同步属性
196
- // 实体id,string
197
- this.__static_set("id", "", true);
198
- // 同上
199
- this.__static_set("typeId", "", true);
200
- // 实体是否正在接触可攀爬的方块,比如玩家靠近梯子或蜘蛛靠近石墙的情况。
201
- this.__static_set("isClimbing", false, true);
202
- // 实体是否正在坠落(坠落距离大于 0),或在滑翔时坠落(坠落距离大于 1)。
203
- this.__static_set("isFalling", false, true);
204
- // 实体是否部分位于水中
205
- this.__static_set("isInWater", false, true);
206
- // 实体是否位于实心方块之上。
207
- this.__static_set("isOnGround", false, true);
208
- // 实体是否处于睡眠状态
209
- this.__static_set("isSleeping", false, true);
210
- // 是否处于潜行状态,可修改
211
- this.__static_set("isSneaking", false, false);
212
- // 是否处于奔跑状态,只读
213
- this.__static_set("isSprinting", false, true);
214
- // 本地化键
215
- this.__static_set("localizationKey", "", true);
216
- // 名称,可修改
217
- this.__static_set("nameTag", "", false);
218
- // 实体位置
219
- this.__static_set("location", new utils_js_1.Vector3(), true);
220
- // 积分板身份
221
- this.__static_set("scoreboardIdentity", null, true);
222
- }
223
- /**
224
- * 尝试从原生实体获取某个属性,出错时返回 null
225
- */
226
- _static(name) {
227
- try {
228
- return this._source?.[name] ?? null;
229
- }
230
- catch {
231
- return null;
232
- }
233
- }
234
- /**
235
- * 用于同步静态属性,内部方法
236
- * @param {string} name - 名称
237
- * @param {string|number|boolean|object} defaultValue - 默认值
238
- * @param {Boolean} isOnlyRead - 是否只读
239
- */
240
- _staticSet(name, defaultValue, isReadOnly) {
241
- try {
242
- const value = this._static(name) ?? defaultValue;
243
- this.data[name] = value;
244
- if (isReadOnly) {
245
- Object.defineProperty(this.data, name, {
246
- writable: false
247
- });
248
- }
249
- }
250
- catch (err) {
251
- this.logger.e(err);
252
- this.data[name] = defaultValue;
253
- }
254
- }
255
- }
256
- exports.Entity = Entity;
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;
@@ -1,285 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.event = void 0;
4
- const server_1 = require("@minecraft/server");
5
- const utils_js_1 = require("./utils.js");
6
- const entity_js_1 = require("./entity.js");
7
- const event = class GameEventManager {
8
- constructor(logger) {
9
- this.runningSubscriptions = new Map(); // 存储事件订阅
10
- this.runningTimers = new Map(); // 存储定时任务
11
- this.logger = logger;
12
- this.entityWrapperMap = {
13
- entity: (logger, entity) => new entity_js_1.Entity(logger, entity),
14
- };
15
- this._isInternalCall = false; // 用于控制 __Event__ 的调用权限
16
- }
17
- /**
18
- * 通用事件绑定方法(内部使用,请通过 PlayerAdd / EntityDie 等方法调用)
19
- */
20
- _bindEvent(callback, timing, eventName, params = [], source = "world") {
21
- try {
22
- if (!this._isInternalCall) {
23
- this.logger.e("错误:不允许直接调用 _bindEvent,请使用封装方法(如 PlayerAdd)");
24
- throw new Error("请通过 PlayerAdd、EntityDie 等公开方法注册事件");
25
- }
26
- const eventSystem = {
27
- world: server_1.world,
28
- system: server_1.system,
29
- }[source];
30
- if (!eventSystem)
31
- throw new Error(`无效的事件来源: ${source}`);
32
- if (typeof callback !== "function" && typeof callback !== "string") {
33
- throw new Error("callback 必须是函数或字符串命令");
34
- }
35
- if (!["<", ">"].includes(timing)) {
36
- throw new Error("timing 必须是 '<'(after)或 '>'(before)");
37
- }
38
- const eventPhaseMap = {
39
- "<": "afterEvents",
40
- ">": "beforeEvents",
41
- };
42
- const eventRoot = eventSystem[eventPhaseMap[timing]];
43
- if (!eventRoot)
44
- throw new Error("事件系统未找到对应阶段");
45
- const eventHandler = eventRoot[eventName];
46
- if (typeof eventHandler === "undefined") {
47
- throw new Error(`未找到事件: ${eventName}`);
48
- }
49
- const eventCallback = (eventData) => {
50
- try {
51
- if (typeof callback === "string") {
52
- // 命令模式:为所有玩家执行命令
53
- let errorLog = "";
54
- const commands = callback.split(/\n+/).filter(Boolean);
55
- commands.forEach((cmd) => {
56
- try {
57
- server_1.system.run(() => {
58
- for (const player of server_1.world.getPlayers()) {
59
- player.runCommand(cmd);
60
- }
61
- });
62
- }
63
- catch (cmdError) {
64
- errorLog += `[命令执行失败] ${cmdError.message}\n`;
65
- }
66
- });
67
- if (errorLog)
68
- this.logger.d(errorLog);
69
- return;
70
- }
71
- // 函数模式:构造参数对象
72
- const paramObj = {};
73
- for (const p of params) {
74
- const sourceValue = eventData[p.source];
75
- paramObj[p.name] = sourceValue;
76
- if (typeof p.type === "string") {
77
- const wrapperKey = p.type.replace(/\./g, "");
78
- const wrapperFn = this.entityWrapperMap[wrapperKey];
79
- if (typeof wrapperFn === "function") {
80
- paramObj[p.name] = wrapperFn(this.logger, sourceValue);
81
- }
82
- }
83
- }
84
- callback(paramObj, eventData);
85
- }
86
- catch (err) {
87
- this.logger.e(`[事件执行错误 - ${eventName}] ${err.message}`);
88
- }
89
- };
90
- const subscription = eventHandler.subscribe(eventCallback);
91
- const id = this._generateId();
92
- this.runningSubscriptions.set(id, {
93
- unsubscribe: () => eventHandler.unsubscribe(subscription),
94
- });
95
- return {
96
- code: 200,
97
- id,
98
- msg: `事件注册成功: ${eventName}`,
99
- };
100
- }
101
- catch (e) {
102
- return {
103
- code: -1,
104
- id: 0,
105
- msg: e.message,
106
- };
107
- }
108
- finally {
109
- this._isInternalCall = false;
110
- }
111
- }
112
- _generateId() {
113
- return Date.now() + Math.floor(Math.random() * 9999);
114
- }
115
- /**
116
- * 停止指定 id 的事件订阅或定时任务
117
- */
118
- stop(id) {
119
- try {
120
- if (this.runningTimers.has(id)) {
121
- const timer = this.runningTimers.get(id);
122
- if (timer.isInterval) {
123
- server_1.system.clearRunInterval(timer.handle);
124
- }
125
- else {
126
- server_1.system.clearRunTimeout(timer.handle);
127
- }
128
- this.runningTimers.delete(id);
129
- return {
130
- code: 200,
131
- msg: "定时任务已停止"
132
- };
133
- }
134
- if (this.runningSubscriptions.has(id)) {
135
- const sub = this.runningSubscriptions.get(id);
136
- sub.unsubscribe();
137
- this.runningSubscriptions.delete(id);
138
- return {
139
- code: 200,
140
- msg: "事件订阅已取消"
141
- };
142
- }
143
- return {
144
- code: 404,
145
- msg: "未找到对应 ID"
146
- };
147
- }
148
- catch (e) {
149
- return {
150
- code: -1,
151
- msg: e.message
152
- };
153
- }
154
- }
155
- PlayerAdd(callback, timing = "<") {
156
- this._isInternalCall = true;
157
- return this._bindEvent(callback, timing, "playerSpawn", [{
158
- source: "player",
159
- name: "player"
160
- },
161
- {
162
- source: "initialSpawn",
163
- name: "ok"
164
- },
165
- ]);
166
- }
167
- EntityDie(callback) {
168
- this._isInternalCall = true;
169
- return this._bindEvent(callback, "<", "entityDie", [{
170
- source: "deadEntity",
171
- name: "entity"
172
- },
173
- {
174
- source: "damageSource",
175
- name: "source"
176
- },
177
- {
178
- source: "projectile",
179
- name: "source_v2"
180
- },
181
- ]);
182
- }
183
- EntityHitE(callback) {
184
- this._isInternalCall = true;
185
- return this._bindEvent(callback, "<", "entityHitEntity", [{
186
- source: "damagingEntity",
187
- name: "damage",
188
- type: "entity"
189
- },
190
- {
191
- source: "hitEntity",
192
- name: "entity",
193
- type: "entity"
194
- },
195
- ]);
196
- }
197
- EntityHitB(callback) {
198
- this._isInternalCall = true;
199
- return this._bindEvent(callback, "<", "entityHitBlock", [{
200
- source: "hitBlock",
201
- name: "block"
202
- },
203
- {
204
- source: "damagingEntity",
205
- name: "entity"
206
- },
207
- ]);
208
- }
209
- BreakB(callback, timing = "<") {
210
- this._isInternalCall = true;
211
- return this._bindEvent(callback, timing, "playerBreakBlock", [{
212
- source: "player",
213
- name: "player"
214
- },
215
- {
216
- source: "block",
217
- name: "block"
218
- },
219
- ]);
220
- }
221
- EntityAdd(callback) {
222
- this._isInternalCall = true;
223
- return this._bindEvent(callback, "<", "entitySpawn", [{
224
- source: "entity",
225
- name: "entity"
226
- },
227
- {
228
- source: "cause",
229
- name: "source"
230
- },
231
- ]);
232
- }
233
- UseItem(callback, timing = "<") {
234
- this._isInternalCall = true;
235
- return this._bindEvent(callback, timing, "itemUse", [{
236
- source: "source",
237
- name: "player"
238
- },
239
- {
240
- source: "itemStack",
241
- name: "item"
242
- },
243
- ]);
244
- }
245
- WatchDogStop(callback) {
246
- this._isInternalCall = true;
247
- return this._bindEvent(callback, ">", "watchdogTerminate", [{
248
- source: "terminateReason",
249
- name: "res"
250
- },
251
- {
252
- source: "cancel",
253
- name: "cancel"
254
- },
255
- ], "system");
256
- }
257
- setTimer(callback, tickDelay, isInterval = false) {
258
- try {
259
- if (typeof callback !== "function" || typeof tickDelay !== "number") {
260
- throw new Error("参数错误:callback 必须为函数,tickDelay 必须为数字");
261
- }
262
- const id = this._generateId();
263
- const handle = isInterval ?
264
- server_1.system.runInterval(callback, tickDelay) :
265
- server_1.system.runTimeout(callback, tickDelay);
266
- this.runningTimers.set(id, {
267
- handle,
268
- isInterval
269
- });
270
- return {
271
- code: 200,
272
- id,
273
- msg: "定时任务已创建"
274
- };
275
- }
276
- catch (e) {
277
- return {
278
- code: -1,
279
- id: 0,
280
- msg: e.message
281
- };
282
- }
283
- }
284
- };
285
- exports.event = event;
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;
@@ -1,20 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GameLib = void 0;
4
- const event_js_1 = require("./event.js");
5
- const loger_js_1 = require("./loger.js");
6
- const entity_js_1 = require("./entity.js");
7
- const ui_js_1 = require("./ui.js");
8
- class GameLib {
9
- regLayout = ui_js_1.regLayout;
10
- constructor(isLoger = true) {
11
- this.loger = isLoger ? loger_js_1.loger : loger_js_1.emtpyloger;
12
- // 访问时是 Object 对象
13
- this.event = new event_js_1.event(this.loger);
14
- // 访问时是 Function 对象
15
- this.entity = (rawEntity) => new entity_js_1.Entity(this.loger, rawEntity);
16
- this.createForm = (name, opt) => (0, ui_js_1.createForm)(this.loger, name, opt);
17
- this.loger.w(`gameLib 模块加载成功`);
18
- }
19
- }
20
- exports.GameLib = GameLib;
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;
@@ -1,21 +1 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.emtpyloger = exports.loger = void 0;
4
- exports.loger = {
5
- d(msg) {
6
- console.log(`[WARNING] ${msg}`);
7
- },
8
- e(error) {
9
- if (!error.stack || !error.message || !error.name) {
10
- console.error(`${error.name} : ${error.stack}`);
11
- }
12
- },
13
- w(msg) {
14
- console.warn(msg);
15
- }
16
- };
17
- exports.emtpyloger = {
18
- d() { },
19
- e() { },
20
- w() { }
21
- };
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(){}};