sapdon 2.0.2 → 2.1.0

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 (283) hide show
  1. package/LICENSE +1 -1
  2. package/doc/BlockAPI.md +145 -0
  3. package/doc/api.md +1 -1
  4. package/doc/hello_sapdon/a9aad643f5609da73404d1f7f35fd5d0.png +0 -0
  5. package/doc/hello_sapdon/sapdon/344/275/277/347/224/250/346/225/231/347/250/213.md +159 -0
  6. package/examples/guidebook/build.config +33 -0
  7. package/examples/guidebook/dev/guidebook_BP/items/sapdon_test_guidebook.json +19 -0
  8. package/examples/{masterball/dev/masterball_BP/masterball_BP_1_20_20 → guidebook/dev/guidebook_BP}/manifest.json +63 -59
  9. package/examples/guidebook/dev/guidebook_BP/scripts/custom_components/cropComponent.js +50 -0
  10. package/examples/guidebook/dev/guidebook_BP/scripts/custom_components/items/gui_book.js +37 -0
  11. package/examples/guidebook/dev/guidebook_BP/scripts/custom_components/registry.js +20 -0
  12. package/examples/guidebook/dev/guidebook_BP/scripts/index.js +3 -0
  13. package/examples/guidebook/dev/guidebook_RP/blocks.json +3 -0
  14. package/examples/guidebook/dev/guidebook_RP/manifest.json +44 -0
  15. package/examples/guidebook/dev/guidebook_RP/models/blocks/crop.geo.json +48 -0
  16. package/examples/{masterball/dev/masterball_RP/masterball_RP_1_20_20.zip → guidebook/dev/guidebook_RP/pack_icon.png} +0 -0
  17. package/examples/guidebook/dev/guidebook_RP/textures/blocks/test_log_oak.png +0 -0
  18. package/examples/guidebook/dev/guidebook_RP/textures/blocks/test_log_top.png +0 -0
  19. package/examples/guidebook/dev/guidebook_RP/textures/flipbook_textures.json +1 -0
  20. package/examples/guidebook/dev/guidebook_RP/textures/item_texture.json +9 -0
  21. package/examples/guidebook/dev/guidebook_RP/textures/items/masterball.png +0 -0
  22. package/examples/guidebook/dev/guidebook_RP/textures/terrain_texture.json +14 -0
  23. package/examples/guidebook/dev/guidebook_RP/ui/_ui_defs.json +6 -0
  24. package/examples/guidebook/dev/guidebook_RP/ui/guidebook.json +581 -0
  25. package/examples/guidebook/dev/guidebook_RP/ui/server_form.json +91 -0
  26. package/examples/guidebook/main.mjs +66 -0
  27. package/examples/guidebook/mod.info +7 -0
  28. package/examples/{masterball/dev/masterball_BP/masterball_BP_1_20_20.zip → guidebook/pack_icon.png} +0 -0
  29. package/examples/guidebook/res/models/blocks/crop.geo.json +48 -0
  30. package/examples/guidebook/res/textures/blocks/test_log_oak.png +0 -0
  31. package/examples/guidebook/res/textures/blocks/test_log_top.png +0 -0
  32. package/examples/guidebook/res/textures/items/masterball.png +0 -0
  33. package/examples/guidebook/scripts/custom_components/cropComponent.js +50 -0
  34. package/examples/guidebook/scripts/custom_components/items/gui_book.js +37 -0
  35. package/examples/guidebook/scripts/custom_components/registry.js +20 -0
  36. package/examples/guidebook/scripts/index.js +3 -0
  37. package/examples/hello_sapdon/build.config +29 -0
  38. package/examples/hello_sapdon/main.mjs +3 -0
  39. package/examples/hello_sapdon/mod.info +7 -0
  40. package/examples/hello_sapdon/pack_icon.png +0 -0
  41. package/examples/hello_sapdon/res/models/blocks/crop.geo.json +48 -0
  42. package/examples/hello_sapdon/res/textures/blocks/test_log_oak.png +0 -0
  43. package/examples/hello_sapdon/res/textures/blocks/test_log_top.png +0 -0
  44. package/examples/hello_sapdon/res/textures/items/masterball.png +0 -0
  45. package/examples/hello_sapdon/scripts/custom_components/cropComponent.js +50 -0
  46. package/examples/hello_sapdon/scripts/custom_components/items/gui_book.js +37 -0
  47. package/examples/hello_sapdon/scripts/custom_components/registry.js +25 -0
  48. package/examples/hello_sapdon/scripts/index.js +0 -0
  49. package/examples/masterball/build.config +1 -0
  50. package/examples/masterball/dev/masterball_1_20_30.mcaddon +0 -0
  51. package/examples/masterball/dev/masterball_BP/entities/sapdon_projectile_masterball.json +56 -55
  52. package/examples/masterball/dev/masterball_BP/manifest.json +59 -59
  53. package/examples/masterball/dev/masterball_BP/pack_icon.png +0 -0
  54. package/examples/masterball/dev/masterball_BP/recipes/masterball.json +25 -0
  55. package/examples/masterball/dev/masterball_BP_1_20_30.mcpack +0 -0
  56. package/examples/masterball/dev/masterball_RP/attachables/sapdon_caught_masterball.json +19 -0
  57. package/examples/masterball/dev/masterball_RP/manifest.json +43 -43
  58. package/examples/masterball/dev/masterball_RP/pack_icon.png +0 -0
  59. package/examples/masterball/dev/masterball_RP/textures/flipbook_textures.json +1 -0
  60. package/examples/masterball/dev/masterball_RP/ui/_ui_defs.json +3 -0
  61. package/examples/masterball/dev/masterball_RP_1_20_30.mcpack +0 -0
  62. package/examples/masterball/main.mjs +18 -1
  63. package/examples/masterball/pack_icon.png +0 -0
  64. package/examples/mob_chest/build.config +29 -0
  65. package/examples/mob_chest/dev/mob_chest_BP/blocks/mob_chest_chest.json +56 -0
  66. package/examples/mob_chest/dev/mob_chest_BP/entities/mob_chest_chest_entity.json +79 -0
  67. package/examples/mob_chest/dev/mob_chest_BP/manifest.json +64 -0
  68. package/examples/mob_chest/dev/mob_chest_BP/pack_icon.png +0 -0
  69. package/examples/mob_chest/dev/mob_chest_BP/scripts/custom_components/block/block_with_entity.js +46 -0
  70. package/examples/mob_chest/dev/mob_chest_BP/scripts/custom_components/block/cropComponent.js +50 -0
  71. package/examples/mob_chest/dev/mob_chest_BP/scripts/custom_components/items/gui_book.js +37 -0
  72. package/examples/mob_chest/dev/mob_chest_BP/scripts/custom_components/registry.js +25 -0
  73. package/examples/mob_chest/dev/mob_chest_BP/scripts/index.js +4 -0
  74. package/examples/mob_chest/dev/mob_chest_RP/animation_controllers/mob_chest.animation_controllers.json +30 -0
  75. package/examples/mob_chest/dev/mob_chest_RP/animations/animation_item.animation.json +34 -0
  76. package/examples/mob_chest/dev/mob_chest_RP/animations/large_item.animation.json +27 -0
  77. package/examples/mob_chest/dev/mob_chest_RP/animations/mob_chest.animation.json +64 -0
  78. package/examples/mob_chest/dev/mob_chest_RP/blocks.json +13 -0
  79. package/examples/mob_chest/dev/mob_chest_RP/entity/mob_chest_chest_entity.json +32 -0
  80. package/examples/mob_chest/dev/mob_chest_RP/manifest.json +44 -0
  81. package/examples/mob_chest/dev/mob_chest_RP/models/blocks/crop.geo.json +48 -0
  82. package/examples/mob_chest/dev/mob_chest_RP/models/blocks/cube.geo.json +35 -0
  83. package/examples/mob_chest/dev/mob_chest_RP/models/blocks/empty.geo.json +35 -0
  84. package/examples/mob_chest/dev/mob_chest_RP/models/entity/mob_chest.geo.json +98 -0
  85. package/examples/mob_chest/dev/mob_chest_RP/pack_icon.png +0 -0
  86. package/examples/mob_chest/dev/mob_chest_RP/textures/blocks/entity/double_normal.png +0 -0
  87. package/examples/mob_chest/dev/mob_chest_RP/textures/blocks/entity/none.png +0 -0
  88. package/examples/mob_chest/dev/mob_chest_RP/textures/blocks/entity/normal.png +0 -0
  89. package/examples/mob_chest/dev/mob_chest_RP/textures/blocks/test_log_oak.png +0 -0
  90. package/examples/mob_chest/dev/mob_chest_RP/textures/blocks/test_log_top.png +0 -0
  91. package/examples/mob_chest/dev/mob_chest_RP/textures/flipbook_textures.json +1 -0
  92. package/examples/mob_chest/dev/mob_chest_RP/textures/item_texture.json +9 -0
  93. package/examples/mob_chest/dev/mob_chest_RP/textures/items/masterball.png +0 -0
  94. package/examples/mob_chest/dev/mob_chest_RP/textures/terrain_texture.json +23 -0
  95. package/examples/mob_chest/dev/mob_chest_RP/ui/_ui_defs.json +3 -0
  96. package/examples/mob_chest/main.mjs +31 -0
  97. package/examples/mob_chest/mod.info +7 -0
  98. package/examples/mob_chest/pack_icon.png +0 -0
  99. package/examples/mob_chest/res/animation_controllers/mob_chest.animation_controllers.json +30 -0
  100. package/examples/mob_chest/res/animations/animation_item.animation.json +34 -0
  101. package/examples/mob_chest/res/animations/large_item.animation.json +27 -0
  102. package/examples/mob_chest/res/animations/mob_chest.animation.json +64 -0
  103. package/examples/mob_chest/res/models/blocks/crop.geo.json +48 -0
  104. package/examples/mob_chest/res/models/blocks/cube.geo.json +35 -0
  105. package/examples/mob_chest/res/models/blocks/empty.geo.json +35 -0
  106. package/examples/mob_chest/res/models/entity/mob_chest.geo.json +98 -0
  107. package/examples/mob_chest/res/textures/blocks/entity/double_normal.png +0 -0
  108. package/examples/mob_chest/res/textures/blocks/entity/none.png +0 -0
  109. package/examples/mob_chest/res/textures/blocks/entity/normal.png +0 -0
  110. package/examples/mob_chest/res/textures/blocks/test_log_oak.png +0 -0
  111. package/examples/mob_chest/res/textures/blocks/test_log_top.png +0 -0
  112. package/examples/mob_chest/res/textures/items/masterball.png +0 -0
  113. package/examples/mob_chest/resource/cube.bbmodel +1 -0
  114. package/examples/mob_chest/resource/flipbook_item.bbmodel +1 -0
  115. package/examples/mob_chest/resource/flipbook_item.geo.bbmodel +1 -0
  116. package/examples/mob_chest/resource/flipbook_item.geo.json +3124 -0
  117. package/examples/mob_chest/resource/mob_chest.bbmodel +1 -0
  118. package/examples/mob_chest/scripts/custom_components/block/block_with_entity.js +46 -0
  119. package/examples/mob_chest/scripts/custom_components/block/cropComponent.js +50 -0
  120. package/examples/mob_chest/scripts/custom_components/items/gui_book.js +37 -0
  121. package/examples/mob_chest/scripts/custom_components/registry.js +25 -0
  122. package/examples/mob_chest/scripts/index.js +4 -0
  123. package/examples/test/build.config +29 -0
  124. package/examples/test/dev/test_BP/blocks/sapdon_ore_cinnabar.json +15 -15
  125. package/examples/test/dev/test_BP/blocks/sapdon_test_block.json +15 -15
  126. package/examples/test/dev/test_BP/blocks/sapdon_test_crop.json +191 -191
  127. package/examples/test/dev/test_BP/blocks/sapdon_wire.json +102 -102
  128. package/examples/test/dev/test_BP/entities/sapdon_test_projectile.json +56 -55
  129. package/examples/test/dev/test_BP/feature_rules/ore_cinnabar_orefeatre_rule.json +52 -52
  130. package/examples/test/dev/test_BP/feature_rules/overworld_underground_titanite_ore_feature.json +52 -52
  131. package/examples/test/dev/test_BP/features/ore_cinnabar_ore_feature.json +16 -16
  132. package/examples/test/dev/test_BP/features/titanite_ore_feature.json +22 -22
  133. package/examples/test/dev/test_BP/items/sapdon_chest.json +22 -22
  134. package/examples/test/dev/test_BP/items/sapdon_test_book.json +19 -0
  135. package/examples/test/dev/test_BP/items/sapdon_test_food.json +25 -25
  136. package/examples/test/dev/test_BP/items/sapdon_test_item.json +30 -30
  137. package/examples/test/dev/test_BP/manifest.json +63 -59
  138. package/examples/test/dev/test_BP/recipes/sapdon_test_furnace.json +12 -12
  139. package/examples/test/dev/test_BP/scripts/custom_components/cropComponent.js +1 -10
  140. package/examples/test/dev/test_BP/scripts/custom_components/items/gui_book.js +37 -0
  141. package/examples/test/dev/test_BP/scripts/custom_components/registry.js +20 -0
  142. package/examples/test/dev/test_BP/scripts/index.js +4 -3
  143. package/examples/test/dev/test_RP/attachables/sapdon_chest.json +24 -24
  144. package/examples/test/dev/test_RP/blocks.json +42 -42
  145. package/examples/test/dev/test_RP/entity/sapdon_test_projectile.json +27 -27
  146. package/examples/test/dev/test_RP/manifest.json +43 -43
  147. package/examples/test/dev/test_RP/models/blocks/arcane_workbench.geo.json +105 -105
  148. package/examples/test/dev/test_RP/models/blocks/jar_normal.geo.json +46 -46
  149. package/examples/test/dev/test_RP/models/blocks/jar_normal_0.geo.json +58 -58
  150. package/examples/test/dev/test_RP/models/blocks/jar_normal_1.geo.json +58 -58
  151. package/examples/test/dev/test_RP/models/blocks/jar_normal_2.geo.json +58 -58
  152. package/examples/test/dev/test_RP/models/blocks/jar_normal_3.geo.json +58 -58
  153. package/examples/test/dev/test_RP/models/blocks/wire.geo.json +153 -153
  154. package/examples/test/dev/test_RP/textures/item_texture.json +788 -788
  155. package/examples/test/dev/test_RP/textures/items/seals/seal_breaker.png.mcmeta +5 -5
  156. package/examples/test/dev/test_RP/textures/items/seals/seal_butcher.png.mcmeta +5 -5
  157. package/examples/test/dev/test_RP/textures/items/seals/seal_empty.png.mcmeta +5 -5
  158. package/examples/test/dev/test_RP/textures/items/seals/seal_empty_advanced.png.mcmeta +5 -5
  159. package/examples/test/dev/test_RP/textures/items/seals/seal_fill.png.mcmeta +5 -5
  160. package/examples/test/dev/test_RP/textures/items/seals/seal_fill_advanced.png.mcmeta +5 -5
  161. package/examples/test/dev/test_RP/textures/items/seals/seal_guard.png.mcmeta +5 -5
  162. package/examples/test/dev/test_RP/textures/items/seals/seal_guard_advanced.png.mcmeta +5 -5
  163. package/examples/test/dev/test_RP/textures/items/seals/seal_harvest.png.mcmeta +5 -5
  164. package/examples/test/dev/test_RP/textures/items/seals/seal_lumber.png.mcmeta +5 -5
  165. package/examples/test/dev/test_RP/textures/items/seals/seal_pickup.png.mcmeta +5 -5
  166. package/examples/test/dev/test_RP/textures/items/seals/seal_pickup_advanced.png.mcmeta +5 -5
  167. package/examples/test/dev/test_RP/textures/items/seals/seal_provider.png.mcmeta +5 -5
  168. package/examples/test/dev/test_RP/textures/items/seals/seal_use.png.mcmeta +5 -5
  169. package/examples/test/dev/test_RP/textures/items/wand/cap_thaumium.png.mcmeta +11 -11
  170. package/examples/test/dev/test_RP/textures/items/wand/cap_void.png.mcmeta +11 -11
  171. package/examples/test/dev/test_RP/textures/items/wand/focus_pech.png.mcmeta +2 -2
  172. package/examples/test/dev/test_RP/textures/items/wand/focus_portablehole.png.mcmeta +2 -2
  173. package/examples/test/dev/test_RP/textures/items/wand/focus_primal.png.mcmeta +2 -2
  174. package/examples/test/dev/test_RP/textures/items/wand/focus_shard.png.mcmeta +2 -2
  175. package/examples/test/dev/test_RP/textures/items/wand/focus_warding.png.mcmeta +2 -2
  176. package/examples/test/dev/test_RP/textures/items/wand/rod_primal_mat.png.mcmeta +44 -44
  177. package/examples/test/dev/test_RP/textures/terrain_texture.json +136 -136
  178. package/examples/test/dev/test_RP/ui/_ui_defs.json +6 -0
  179. package/examples/test/dev/test_RP/ui/guidebook.json +446 -0
  180. package/examples/test/dev/test_RP/ui/server_form.json +91 -0
  181. package/examples/test/main.mjs +46 -1
  182. package/examples/test/res/models/blocks/arcane_workbench.geo.json +105 -105
  183. package/examples/test/res/models/blocks/jar_normal.geo.json +46 -46
  184. package/examples/test/res/models/blocks/jar_normal_0.geo.json +58 -58
  185. package/examples/test/res/models/blocks/jar_normal_1.geo.json +58 -58
  186. package/examples/test/res/models/blocks/jar_normal_2.geo.json +58 -58
  187. package/examples/test/res/models/blocks/jar_normal_3.geo.json +58 -58
  188. package/examples/test/res/models/blocks/wire.geo.json +153 -153
  189. package/examples/test/res/textures/items/seals/seal_breaker.png.mcmeta +5 -5
  190. package/examples/test/res/textures/items/seals/seal_butcher.png.mcmeta +5 -5
  191. package/examples/test/res/textures/items/seals/seal_empty.png.mcmeta +5 -5
  192. package/examples/test/res/textures/items/seals/seal_empty_advanced.png.mcmeta +5 -5
  193. package/examples/test/res/textures/items/seals/seal_fill.png.mcmeta +5 -5
  194. package/examples/test/res/textures/items/seals/seal_fill_advanced.png.mcmeta +5 -5
  195. package/examples/test/res/textures/items/seals/seal_guard.png.mcmeta +5 -5
  196. package/examples/test/res/textures/items/seals/seal_guard_advanced.png.mcmeta +5 -5
  197. package/examples/test/res/textures/items/seals/seal_harvest.png.mcmeta +5 -5
  198. package/examples/test/res/textures/items/seals/seal_lumber.png.mcmeta +5 -5
  199. package/examples/test/res/textures/items/seals/seal_pickup.png.mcmeta +5 -5
  200. package/examples/test/res/textures/items/seals/seal_pickup_advanced.png.mcmeta +5 -5
  201. package/examples/test/res/textures/items/seals/seal_provider.png.mcmeta +5 -5
  202. package/examples/test/res/textures/items/seals/seal_use.png.mcmeta +5 -5
  203. package/examples/test/res/textures/items/wand/cap_thaumium.png.mcmeta +11 -11
  204. package/examples/test/res/textures/items/wand/cap_void.png.mcmeta +11 -11
  205. package/examples/test/res/textures/items/wand/focus_pech.png.mcmeta +2 -2
  206. package/examples/test/res/textures/items/wand/focus_portablehole.png.mcmeta +2 -2
  207. package/examples/test/res/textures/items/wand/focus_primal.png.mcmeta +2 -2
  208. package/examples/test/res/textures/items/wand/focus_shard.png.mcmeta +2 -2
  209. package/examples/test/res/textures/items/wand/focus_warding.png.mcmeta +2 -2
  210. package/examples/test/res/textures/items/wand/rod_primal_mat.png.mcmeta +44 -44
  211. package/examples/test/scripts/custom_components/cropComponent.js +1 -10
  212. package/examples/test/scripts/custom_components/items/gui_book.js +37 -0
  213. package/examples/test/scripts/custom_components/registry.js +20 -0
  214. package/examples/test/scripts/index.js +4 -3
  215. package/log.md +8 -0
  216. package/package.json +4 -1
  217. package/src/cli/build.js +210 -210
  218. package/src/cli/load.js +116 -112
  219. package/src/cli/tools/textureSet.js +114 -114
  220. package/src/cli/utils.js +82 -82
  221. package/src/core/addon/controllers/animation_controller.js +80 -0
  222. package/src/core/addon/entity/entity.js +52 -51
  223. package/src/core/block/GeometryBlock.js +8 -0
  224. package/src/core/block/OreBlock.js +1 -0
  225. package/src/core/block/TileBlock.js +117 -0
  226. package/src/core/block/block.js +106 -106
  227. package/src/core/block/blockComponent.js +557 -557
  228. package/src/core/block/cropBlock.js +1 -1
  229. package/src/core/entity/BasicEntity.js +195 -166
  230. package/src/core/entity/bundles/BasicBundle.js +51 -0
  231. package/src/core/factory/BlockFactory.js +166 -158
  232. package/src/core/factory/EntityFactory.js +82 -82
  233. package/src/core/factory/ItemFactory.js +120 -95
  234. package/src/core/factory/RecipeFactory.js +46 -46
  235. package/src/core/index.js +2 -1
  236. package/src/core/item/Item.js +96 -96
  237. package/src/core/item/ItemComponents.js +251 -235
  238. package/src/core/item/armor.js +117 -89
  239. package/src/core/item/attachable.js +33 -33
  240. package/src/core/item/food.js +61 -61
  241. package/src/core/registry.js +16 -16
  242. package/src/core/ui/Properties/{Grid.js → GridProp.js} +2 -2
  243. package/src/core/ui/Properties/Sound.js +72 -0
  244. package/src/core/ui/elements/Button.js +111 -0
  245. package/src/core/ui/elements/CollectionPanel.js +61 -0
  246. package/src/core/ui/elements/Grid.js +24 -0
  247. package/src/core/ui/elements/Image.js +4 -0
  248. package/src/core/ui/elements/Label.js +10 -2
  249. package/src/core/ui/elements/Panel.js +7 -0
  250. package/src/core/ui/elements/ScrollingPanel.js +68 -0
  251. package/src/core/ui/elements/StackPanel.js +40 -0
  252. package/src/core/ui/elements/UIElement.js +43 -2
  253. package/src/core/ui/registry/UISystemRegistry.js +35 -0
  254. package/src/core/ui/systems/UISystem.js +9 -5
  255. package/src/core/ui/systems/guidebook.js +299 -0
  256. package/src/core/ui/systems/server_form.js +94 -83
  257. package/src/templates/test_sapdon/build.config +28 -28
  258. package/src/templates/test_sapdon/res/animations/animation_item.animation.json +34 -0
  259. package/src/templates/test_sapdon/res/animations/large_item.animation.json +27 -0
  260. package/src/templates/test_sapdon/res/models/entity/animation/animation_item.geo.json +26 -0
  261. package/src/templates/test_sapdon/res/models/entity/animation/large_item.geo.json +28 -0
  262. package/src/templates/test_sapdon/res/textures/blocks/none.png +0 -0
  263. package/src/templates/test_sapdon/scripts/custom_components/cropComponent.js +50 -0
  264. package/src/templates/test_sapdon/scripts/custom_components/items/gui_book.js +37 -0
  265. package/src/templates/test_sapdon/scripts/custom_components/registry.js +25 -0
  266. package/examples/masterball/dev/masterball[1.20.20+].mcaddon.zip +0 -0
  267. package/examples/masterball/dev/masterball_BP/masterball_BP_1_20_20/entities/sapdon_projectile_masterball.json +0 -56
  268. package/examples/masterball/dev/masterball_BP/masterball_BP_1_20_20/items/sapdon_caught_masterball.json +0 -32
  269. package/examples/masterball/dev/masterball_BP/masterball_BP_1_20_20/items/sapdon_uncaught_masterball.json +0 -31
  270. package/examples/masterball/dev/masterball_BP/masterball_BP_1_20_20/scripts/index.js +0 -159
  271. package/examples/test/dev/test_BP/biomes/test_biome.json +0 -48
  272. package/examples/test/dev/test_BP/blocks/sapdon_block.json +0 -111
  273. package/examples/test/dev/test_BP/entities/sapdon_body.json +0 -118
  274. package/examples/test/dev/test_BP/entities/sapdon_test_entity_ctrl1.json +0 -55
  275. package/examples/test/dev/test_BP/entities/sapdon_test_entity_ctrl2.json +0 -61
  276. package/examples/test/dev/test_BP/entities/sapdon_test_entity_header.json +0 -408
  277. package/examples/test/dev/test_RP/entity/sapdon_body.json +0 -44
  278. package/examples/test/dev/test_RP/entity/sapdon_test_entity_ctrl1.json +0 -38
  279. package/examples/test/dev/test_RP/entity/sapdon_test_entity_ctrl2.json +0 -38
  280. package/examples/test/dev/test_RP/entity/sapdon_test_entity_header.json +0 -44
  281. package/src/cli/build.config +0 -4
  282. package/src/core/ui/registry/ServerUISystem.js +0 -19
  283. /package/examples/{masterball/dev/masterball_BP/masterball_BP_1_20_20 → guidebook/dev/guidebook_BP}/pack_icon.png +0 -0
@@ -1,89 +1,117 @@
1
- import { Attachable } from "./Attachable.js";
2
- import { Item } from "./item.js";
3
- import { ItemComponent } from "./ItemComponents.js";
4
-
5
-
6
- // 定义 Armor 基类
7
- export class Armor {
8
- constructor(identifier, category, item_texture, texture_path, options = {}) {
9
- this.identifier = identifier;
10
- // 创建物品
11
- this.item = new Item(identifier, category, item_texture, options);
12
- // 创建附加物
13
- this.attachable = new Attachable(identifier, texture_path, "armor");
14
-
15
- // 配置附加物
16
- this.attachable
17
- .addTexture("default", texture_path) // 添加默认纹理
18
- .addMaterial("default", "armor") // 添加默认材质
19
- .addMaterial("enchanted", "armor_enchanted") // 添加附魔材质
20
- .addTexture("enchanted", "textures/misc/enchanted_actor_glint") // 添加附魔纹理
21
- .addGeometry("default", "geometry.player.armor.chestplate") // 添加几何模型
22
- .addRenderController("controller.render.armor") // 添加渲染控制器
23
- .setScript("parent_setup", "v.chest_layer_visible = 0.0;"); // 设置脚本
24
- }
25
- }
26
-
27
- // 扩展 Armor 类,实现胸甲
28
- export class Chestplate extends Armor {
29
- constructor(identifier, item_texture, texture_path, options = {}) {
30
- super(identifier, "equipment", item_texture, texture_path, options);
31
-
32
- // 自定义胸甲物品
33
- this.item.addComponent(
34
- ItemComponent.combineComponents(
35
- ItemComponent.setDisplayName("我的自定义胸甲"), // 设置显示名称
36
- ItemComponent.setMaxStackSize(1), // 设置最大堆叠数量
37
- ItemComponent.setWearable(5, "slot.armor.chest") // 设置为可穿戴,并指定装备槽
38
- )
39
- );
40
- }
41
- }
42
-
43
- // 扩展 Armor 类,实现靴子
44
- export class Boot extends Armor {
45
- constructor(identifier, item_texture, texture_path, options = {}) {
46
- super(identifier, "equipment", item_texture, texture_path, options);
47
-
48
- // 自定义靴子物品
49
- this.item.addComponent(
50
- ItemComponent.combineComponents(
51
- ItemComponent.setDisplayName("我的自定义靴子"), // 设置显示名称
52
- ItemComponent.setMaxStackSize(1), // 设置最大堆叠数量
53
- ItemComponent.setWearable(4, "slot.armor.feet") // 设置为可穿戴,并指定装备槽
54
- )
55
- );
56
- }
57
- }
58
-
59
- // 扩展 Armor 类,实现裤子
60
- export class Leggings extends Armor {
61
- constructor(identifier, item_texture, texture_path, options = {}) {
62
- super(identifier, "equipment", item_texture, texture_path, options);
63
-
64
- // 自定义裤子物品
65
- this.item.addComponent(
66
- ItemComponent.combineComponents(
67
- ItemComponent.setDisplayName("我的自定义裤子"), // 设置显示名称
68
- ItemComponent.setMaxStackSize(1), // 设置最大堆叠数量
69
- ItemComponent.setWearable(6, "slot.armor.legs") // 设置为可穿戴,并指定装备槽
70
- )
71
- );
72
- }
73
- }
74
-
75
- // 扩展 Armor 类,实现头盔
76
- export class Helmet extends Armor {
77
- constructor(identifier, item_texture, texture_path, options = {}) {
78
- super(identifier, "equipment", item_texture, texture_path, options);
79
-
80
- // 自定义头盔物品
81
- this.item.addComponent(
82
- ItemComponent.combineComponents(
83
- ItemComponent.setDisplayName("我的自定义头盔"), // 设置显示名称
84
- ItemComponent.setMaxStackSize(1), // 设置最大堆叠数量
85
- ItemComponent.setWearable(3, "slot.armor.head") // 设置为可穿戴,并指定装备槽
86
- )
87
- );
88
- }
89
- }
1
+ import { Attachable } from "./Attachable.js";
2
+ import { Item } from "./Item.js";
3
+ import { ItemComponent } from "./ItemComponents.js";
4
+
5
+
6
+ // 定义 Armor 基类
7
+ export class Armor {
8
+ constructor(identifier, category, item_texture, texture_path, options = {}) {
9
+ this.identifier = identifier;
10
+ //默认分组
11
+ options["group"]= "minecraft:itemGroup.name.chestplate";
12
+ // 创建物品
13
+ this.item = new Item(identifier, category, item_texture, options);
14
+ // 创建附加物
15
+ this.attachable = new Attachable(identifier);
16
+
17
+ // 配置附加物
18
+ this.attachable
19
+ .addTexture("default", texture_path) // 添加默认纹理
20
+ .addMaterial("default", "armor") // 添加默认材质
21
+ .addMaterial("enchanted", "armor_enchanted") // 添加附魔材质
22
+ .addTexture("default",texture_path)
23
+ .addTexture("enchanted", "textures/misc/enchanted_actor_glint") // 添加附魔纹理
24
+ .addRenderController("controller.render.armor") // 添加渲染控制器
25
+ //默认类型 胸甲
26
+ .addGeometry("default", "geometry.player.armor.chestplate") // 添加几何模型
27
+ .setScript("parent_setup", "v.chest_layer_visible = 0.0;"); // 设置脚本
28
+ }
29
+ setArrachableGeometry(key, geometry){
30
+ this.attachable.addGeometry(key,geometry);
31
+ return this;
32
+ }
33
+ }
34
+
35
+ // 扩展 Armor 类,实现胸甲
36
+ export class Chestplate extends Armor {
37
+ constructor(identifier, item_texture, texture_path, options = {}) {
38
+ super(identifier, "equipment", item_texture, texture_path, options);
39
+
40
+ options["group"]= "minecraft:itemGroup.name.chestplate";
41
+
42
+ //头盔专属
43
+ this.attachable.addGeometry("default", "geometry.player.armor.chestplate") // 添加几何模型
44
+ .setScript("parent_setup", "v.chest_layer_visible = 0.0;"); // 设置脚本
45
+
46
+ // 自定义胸甲物品
47
+ this.item.addComponent(
48
+ ItemComponent.combineComponents(
49
+ ItemComponent.setMaxStackSize(1), // 设置最大堆叠数量
50
+ ItemComponent.setWearable(5, "slot.armor.chest") // 设置为可穿戴,并指定装备槽
51
+ )
52
+ );
53
+ }
54
+ }
55
+
56
+ // 扩展 Armor 类,实现靴子
57
+ export class Boot extends Armor {
58
+ constructor(identifier, item_texture, texture_path, options = {}) {
59
+ super(identifier, "equipment", item_texture, texture_path, options);
60
+
61
+ options["group"]= "minecraft:itemGroup.name.boots";
62
+
63
+ //头盔专属
64
+ this.attachable.addGeometry("default", "geometry.player.armor.boots") // 添加几何模型
65
+ .setScript("parent_setup", "v.boot_layer_visible = 0.0;"); // 设置脚本
66
+
67
+ // 自定义靴子物品
68
+ this.item.addComponent(
69
+ ItemComponent.combineComponents(
70
+ ItemComponent.setMaxStackSize(1), // 设置最大堆叠数量
71
+ ItemComponent.setWearable(4, "slot.armor.feet") // 设置为可穿戴,并指定装备槽
72
+ )
73
+ );
74
+ }
75
+ }
76
+
77
+ // 扩展 Armor 类,实现裤子
78
+ export class Leggings extends Armor {
79
+ constructor(identifier, item_texture, texture_path, options = {}) {
80
+ super(identifier, "equipment", item_texture, texture_path, options);
81
+
82
+ options["group"]= "minecraft:itemGroup.name.leggings";
83
+
84
+ //头盔专属
85
+ this.attachable.addGeometry("default", "geometry.player.armor.leggings") // 添加几何模型
86
+ .setScript("parent_setup", "v.leg_layer_visible = 0.0;"); // 设置脚本
87
+
88
+ // 自定义裤子物品
89
+ this.item.addComponent(
90
+ ItemComponent.combineComponents(
91
+ ItemComponent.setMaxStackSize(1), // 设置最大堆叠数量
92
+ ItemComponent.setWearable(6, "slot.armor.legs") // 设置为可穿戴,并指定装备槽
93
+ )
94
+ );
95
+ }
96
+ }
97
+
98
+ // 扩展 Armor 类,实现头盔
99
+ export class Helmet extends Armor {
100
+ constructor(identifier, item_texture, texture_path, options = {}) {
101
+ super(identifier, "equipment", item_texture, texture_path, options);
102
+
103
+ options["group"]= "minecraft:itemGroup.name.helmet";
104
+
105
+ //头盔专属
106
+ this.attachable.addGeometry("default", "geometry.player.armor.helmet") // 添加几何模型
107
+ .setScript("parent_setup", "v.helmet_layer_visible = 0.0;"); // 设置脚本
108
+
109
+ // 自定义头盔物品
110
+ this.item.addComponent(
111
+ ItemComponent.combineComponents(
112
+ ItemComponent.setMaxStackSize(1), // 设置最大堆叠数量
113
+ ItemComponent.setWearable(3, "slot.armor.head") // 设置为可穿戴,并指定装备槽
114
+ )
115
+ );
116
+ }
117
+ }
@@ -1,34 +1,34 @@
1
- import { AddonAttachable, AddonAttachableDefinition, AddonAttachableDescription } from "../addon/item/attachable.js";
2
-
3
-
4
- export class Attachable extends AddonAttachableDescription{
5
- constructor(identifier){
6
- super(identifier);
7
- }
8
-
9
- getId() {
10
- return this.identifier;
11
- }
12
-
13
- toJson() {
14
- const entity = new AddonAttachable(
15
- "1.8.0",
16
- new AddonAttachableDefinition(this)
17
- );
18
- return entity.toJson();
19
- }
20
- }
21
-
22
- /*
23
- const attachable = new Attachable("test")
24
- attachable.addMaterial("default", "armor")
25
- attachable.addMaterial("enchanted","armor_enchanted")
26
- attachable.addTexture("default","textures/models/armor/custom_main")
27
- attachable.addTexture("enchanted", "textures/misc/enchanted_actor_glint")
28
- attachable.addGeometry("default", "geometry.player.armor.chestplate")
29
- attachable.addRenderController("controller.render.armor")
30
- attachable.setScript("parent_setup","v.chest_layer_visible = 0.0;")
31
-
32
- console.log(JSON.stringify(attachable.toJson(),null,2))
33
- debugger
1
+ import { AddonAttachable, AddonAttachableDefinition, AddonAttachableDescription } from "../addon/item/attachable.js";
2
+
3
+
4
+ export class Attachable extends AddonAttachableDescription{
5
+ constructor(identifier){
6
+ super(identifier);
7
+ }
8
+
9
+ getId() {
10
+ return this.identifier;
11
+ }
12
+
13
+ toJson() {
14
+ const entity = new AddonAttachable(
15
+ "1.8.0",
16
+ new AddonAttachableDefinition(this)
17
+ );
18
+ return entity.toJson();
19
+ }
20
+ }
21
+
22
+ /*
23
+ const attachable = new Attachable("test")
24
+ attachable.addMaterial("default", "armor")
25
+ attachable.addMaterial("enchanted","armor_enchanted")
26
+ attachable.addTexture("default","textures/models/armor/custom_main")
27
+ attachable.addTexture("enchanted", "textures/misc/enchanted_actor_glint")
28
+ attachable.addGeometry("default", "geometry.player.armor.chestplate")
29
+ attachable.addRenderController("controller.render.armor")
30
+ attachable.setScript("parent_setup","v.chest_layer_visible = 0.0;")
31
+
32
+ console.log(JSON.stringify(attachable.toJson(),null,2))
33
+ debugger
34
34
  */
@@ -1,62 +1,62 @@
1
- import { ItemComponent } from "./ItemComponents.js";
2
- import { Item } from "./item.js";
3
-
4
- export class Food extends Item {
5
- /**
6
- * 物品类
7
- * @param {string} identifier 物品唯一标识符
8
- * @param {string} category 菜单栏分类 可选:"construction", "nature", "equipment", "items", and "none"
9
- * @param {string} texture 物品纹理
10
- * @param {Object} options 可选参数
11
- * @param {string} options.group 分组
12
- * @param {boolean} options.hide_in_command 是否在命令中隐藏,默认为 false
13
- * @param {string} options.animation 使用动画,默认为 "eat"
14
- * @param {boolean} options.canAlwaysEat 是否总是可以食用,默认为 false
15
- * @param {number} options.nutrition 营养价值,默认为 0
16
- * @param {number} options.saturationModifier 饱和度修正值,默认为 1
17
- */
18
- constructor(identifier, category, texture, options = {}) {
19
- // 继承父类
20
- super(identifier, category, texture, options);
21
-
22
- // 解构 options 并设置默认值
23
- const {
24
- animation = "eat",
25
- movement = 1,
26
- useDuration = 1,
27
- canAlwaysEat = false,
28
- nutrition = 0,
29
- saturationModifier = 1,
30
- } = options;
31
-
32
- // 参数验证
33
- if (typeof nutrition !== "number" || nutrition < 0) {
34
- throw new Error('nutrition 必须是一个非负数');
35
- }
36
- if (typeof saturationModifier !== "number" || saturationModifier <= 0) {
37
- throw new Error('saturationModifier 必须是一个正数');
38
- }
39
- if (typeof animation !== "string") {
40
- throw new Error('animation 必须是字符串类型');
41
- }
42
- if (typeof canAlwaysEat !== "boolean") {
43
- throw new Error('canAlwaysEat 必须是布尔类型');
44
- }
45
-
46
- // 添加组件
47
- this.addComponent(
48
- ItemComponent.combineComponents(
49
- ItemComponent.setUseModifiers(
50
- movement,
51
- useDuration
52
- ),
53
- ItemComponent.setFoodComponent(
54
- canAlwaysEat,
55
- nutrition,
56
- saturationModifier
57
- ),
58
- ItemComponent.setUseAnimation(animation)
59
- )
60
- );
61
- }
1
+ import { ItemComponent } from "./ItemComponents.js";
2
+ import { Item } from "./Item.js";
3
+
4
+ export class Food extends Item {
5
+ /**
6
+ * 物品类
7
+ * @param {string} identifier 物品唯一标识符
8
+ * @param {string} category 菜单栏分类 可选:"construction", "nature", "equipment", "items", and "none"
9
+ * @param {string} texture 物品纹理
10
+ * @param {Object} options 可选参数
11
+ * @param {string} options.group 分组
12
+ * @param {boolean} options.hide_in_command 是否在命令中隐藏,默认为 false
13
+ * @param {string} options.animation 使用动画,默认为 "eat"
14
+ * @param {boolean} options.canAlwaysEat 是否总是可以食用,默认为 false
15
+ * @param {number} options.nutrition 营养价值,默认为 0
16
+ * @param {number} options.saturationModifier 饱和度修正值,默认为 1
17
+ */
18
+ constructor(identifier, category, texture, options = {}) {
19
+ // 继承父类
20
+ super(identifier, category, texture, options);
21
+
22
+ // 解构 options 并设置默认值
23
+ const {
24
+ animation = "eat",
25
+ movement = 1,
26
+ useDuration = 1,
27
+ canAlwaysEat = false,
28
+ nutrition = 0,
29
+ saturationModifier = 1,
30
+ } = options;
31
+
32
+ // 参数验证
33
+ if (typeof nutrition !== "number" || nutrition < 0) {
34
+ throw new Error('nutrition 必须是一个非负数');
35
+ }
36
+ if (typeof saturationModifier !== "number" || saturationModifier <= 0) {
37
+ throw new Error('saturationModifier 必须是一个正数');
38
+ }
39
+ if (typeof animation !== "string") {
40
+ throw new Error('animation 必须是字符串类型');
41
+ }
42
+ if (typeof canAlwaysEat !== "boolean") {
43
+ throw new Error('canAlwaysEat 必须是布尔类型');
44
+ }
45
+
46
+ // 添加组件
47
+ this.addComponent(
48
+ ItemComponent.combineComponents(
49
+ ItemComponent.setUseModifiers(
50
+ movement,
51
+ useDuration
52
+ ),
53
+ ItemComponent.setFoodComponent(
54
+ canAlwaysEat,
55
+ nutrition,
56
+ saturationModifier
57
+ ),
58
+ ItemComponent.setUseAnimation(animation)
59
+ )
60
+ );
61
+ }
62
62
  }
@@ -1,17 +1,17 @@
1
-
2
- export class GRegistry {
3
- static dataList = [];
4
- /**
5
- * 生成注册器
6
- * @param {string} name 文件名字
7
- * @param {string} root 根目录,如 "behavior"、"resource" 等
8
- * @param {string} path 数据的路径,如 "blocks/"、"items/"、"recipes/" 等
9
- * @param {string} data 实例 必须包含 toJson 方法
10
- */
11
- static register(name, root, path, data){
12
- GRegistry.dataList.push({name, root, path, data});
13
- }
14
- static getDataList(){
15
- return [...GRegistry.dataList];
16
- }
1
+
2
+ export class GRegistry {
3
+ static dataList = [];
4
+ /**
5
+ * 生成注册器
6
+ * @param {string} name 文件名字
7
+ * @param {string} root 根目录,如 "behavior"、"resource" 等
8
+ * @param {string} path 数据的路径,如 "blocks/"、"items/"、"recipes/" 等
9
+ * @param {string} data 实例 必须包含 toJson 方法
10
+ */
11
+ static register(name, root, path, data){
12
+ GRegistry.dataList.push({name, root, path, data});
13
+ }
14
+ static getDataList(){
15
+ return [...GRegistry.dataList];
16
+ }
17
17
  }
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Grid 类
3
3
  *
4
- * 该类表示一个网格控件,用于管理网格布局及其相关属性。
4
+ * 该类表示一个网格控件属性,用于管理网格布局及其相关属性。
5
5
  *
6
6
  * 属性:
7
7
  * - grid_dimensions: Vector [columns, rows] - 网格的列数和行数
@@ -13,7 +13,7 @@
13
13
  * - precached_grid_item_count: int - 预缓存的网格项目数量
14
14
  */
15
15
 
16
- export class Grid {
16
+ export class GridProp {
17
17
  constructor() {
18
18
  /*
19
19
  this.grid_dimensions = null;
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Sound 类
3
+ *
4
+ * 该类表示一个声音控件,用于管理声音播放及其相关属性。
5
+ *
6
+ * 属性:
7
+ * - sound_name: string - 声音名称(定义在 RP/sounds/sound_definitions.json 文件中)
8
+ * - sound_volume: float - 声音音量(默认值:1.0)
9
+ * - sound_pitch: float - 声音音调(默认值:1.0)
10
+ * - sounds: Array of sound objects - 触发事件时播放的声音数组
11
+ */
12
+
13
+ export class Sound {
14
+ constructor() {
15
+ /*
16
+ this.sound_name = '';
17
+ this.sound_volume = 1.0;
18
+ this.sound_pitch = 1.0;
19
+ this.sounds = [];
20
+ */
21
+ }
22
+
23
+ /**
24
+ * 设置声音名称。
25
+ * @param {string} name - 声音名称(定义在 RP/sounds/sound_definitions.json 文件中)
26
+ * @returns {Sound} 返回当前实例以支持链式调用
27
+ */
28
+ setSoundName(name) {
29
+ this.sound_name = name;
30
+ return this;
31
+ }
32
+
33
+ /**
34
+ * 设置声音音量。
35
+ * @param {number} volume - 音量(范围:0.0 到 1.0,默认值:1.0)
36
+ * @returns {Sound} 返回当前实例以支持链式调用
37
+ */
38
+ setSoundVolume(volume = 1.0) {
39
+ this.sound_volume = volume;
40
+ return this;
41
+ }
42
+
43
+ /**
44
+ * 设置声音音调。
45
+ * @param {number} pitch - 音调(默认值:1.0)
46
+ * @returns {Sound} 返回当前实例以支持链式调用
47
+ */
48
+ setSoundPitch(pitch = 1.0) {
49
+ this.sound_pitch = pitch;
50
+ return this;
51
+ }
52
+
53
+ /**
54
+ * 设置触发事件时播放的声音数组。
55
+ * @param {object[]} sounds - 声音对象数组
56
+ * @returns {Sound} 返回当前实例以支持链式调用
57
+ */
58
+ setSounds(sounds) {
59
+ this.sounds = sounds;
60
+ return this;
61
+ }
62
+
63
+ /**
64
+ * 添加一个声音对象到声音数组。
65
+ * @param {object} sound - 声音对象
66
+ * @returns {Sound} 返回当前实例以支持链式调用
67
+ */
68
+ addSound(sound) {
69
+ this.sounds.push(sound);
70
+ return this;
71
+ }
72
+ }
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Button ​
3
+ Property Name Type Default Value Description
4
+ default_control string Name of the child control that will be displayed only in the default state
5
+ hover_control string Name of the child control that will be displayed only in the hover state
6
+ pressed_control string Name of the child control that will be displayed only in the pressed state
7
+ locked_control string Name of the child control that will be displayed only in the locked state
8
+ */
9
+
10
+ import { Control } from "../Properties/Control.js";
11
+ import { DataBinding } from "../Properties/DataBinding.js";
12
+ import { Factory } from "../Properties/Factory.js";
13
+ import { Input } from "../Properties/Input.js";
14
+ import { Layout } from "../Properties/Layout.js";
15
+ import { Sound } from "../Properties/Sound.js";
16
+ import { UIElement } from "./UIElement.js";
17
+
18
+ export class Button extends UIElement{
19
+ constructor(id,template){
20
+ super(id,"button",template);
21
+ this.input = new Input();
22
+ this.sound = new Sound();
23
+ this.control = new Control();
24
+ this.layout = new Layout();
25
+ this.dataBinding = new DataBinding();
26
+ this.factory = new Factory();
27
+ }
28
+ setDefaultControl(default_control){
29
+ this.addProp("default_control",default_control);
30
+ return this;
31
+ }
32
+ setHoverControl(hover_control){
33
+ this.addProp("hover_control",hover_control);
34
+ return this;
35
+ }
36
+ setPressedControl(pressed_control){
37
+ this.addProp("pressed_control",pressed_control);
38
+ return this;
39
+ }
40
+ setLockedControl(locked_control){
41
+ this.addProp("locked_control",locked_control);
42
+ return this;
43
+ }
44
+
45
+ setInput(input){
46
+ if(!(input instanceof Input)) new Error("需求Input类");
47
+ this.input = input;
48
+ return this;
49
+ }
50
+
51
+ setSound(sound){
52
+ if(!(sound instanceof Sound)) new Error("需求Sound类");
53
+ this.sound = sound;
54
+ return this;
55
+ }
56
+
57
+ setLayout(layout){
58
+ if(!(layout instanceof Layout)) new Error("参数需要Layout类")
59
+ this.layout = layout;
60
+ return this;
61
+ }
62
+
63
+ serialize(){
64
+ //序列化
65
+
66
+ // 复制Layout的属性
67
+ for (const key in this.layout) {
68
+ if (this.layout.hasOwnProperty(key)) {
69
+ this.properties.set(key, this.layout[key]);
70
+ }
71
+ }
72
+
73
+ // 复制input的属性
74
+ for (const key in this.input) {
75
+ if (this.input.hasOwnProperty(key)) {
76
+ this.properties.set(key, this.input[key]);
77
+ }
78
+ }
79
+
80
+ // 复制sound的属性
81
+ for (const key in this.sound) {
82
+ if (this.sound.hasOwnProperty(key)) {
83
+ this.properties.set(key, this.sound[key]);
84
+ }
85
+ }
86
+
87
+ // 复制DataBinding的属性
88
+ for (const key in this.dataBinding) {
89
+ if (this.dataBinding.hasOwnProperty(key)) {
90
+ this.properties.set(key, this.dataBinding[key]);
91
+ }
92
+ }
93
+
94
+ // 复制Factory的属性
95
+ for (const key in this.factory) {
96
+ if (this.factory.hasOwnProperty(key)) {
97
+ this.properties.set(key, this.factory[key]);
98
+ }
99
+ }
100
+
101
+ // 复制Control的属性
102
+ for (const key in this.control) {
103
+ if (this.control.hasOwnProperty(key)) {
104
+ this.properties.set(key, this.control[key]);
105
+ }
106
+ }
107
+
108
+ // 调用父类的serialize方法
109
+ return super.serialize();
110
+ }
111
+ }