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
@@ -0,0 +1,61 @@
1
+ import { Control } from "../Properties/Control.js";
2
+ import { DataBinding } from "../Properties/DataBinding.js";
3
+ import { Factory } from "../Properties/Factory.js";
4
+
5
+ import { Layout } from "../Properties/Layout.js";
6
+ import { UIElement } from "./UIElement.js";
7
+
8
+ export class CollectionPanel extends UIElement{
9
+ constructor(id,template){
10
+ super(id,"collection_panel",template);
11
+ this.control = new Control();
12
+ this.layout = new Layout();
13
+ this.dataBinding = new DataBinding();
14
+ this.factory = new Factory();
15
+ }
16
+ setCollectionName(collection_name){
17
+ this.addProp("collection_name",collection_name);
18
+ return this;
19
+ }
20
+
21
+ setLayout(layout){
22
+ if(!(layout instanceof Layout)) new Error("参数需要Layout类")
23
+ this.layout = layout;
24
+ return this;
25
+ }
26
+
27
+ serialize(){
28
+ //序列化
29
+
30
+ // 复制Layout的属性
31
+ for (const key in this.layout) {
32
+ if (this.layout.hasOwnProperty(key)) {
33
+ this.properties.set(key, this.layout[key]);
34
+ }
35
+ }
36
+
37
+ // 复制DataBinding的属性
38
+ for (const key in this.dataBinding) {
39
+ if (this.dataBinding.hasOwnProperty(key)) {
40
+ this.properties.set(key, this.dataBinding[key]);
41
+ }
42
+ }
43
+
44
+ // 复制Factory的属性
45
+ for (const key in this.factory) {
46
+ if (this.factory.hasOwnProperty(key)) {
47
+ this.properties.set(key, this.factory[key]);
48
+ }
49
+ }
50
+
51
+ // 复制Control的属性
52
+ for (const key in this.control) {
53
+ if (this.control.hasOwnProperty(key)) {
54
+ this.properties.set(key, this.control[key]);
55
+ }
56
+ }
57
+
58
+ // 调用父类的serialize方法
59
+ return super.serialize();
60
+ }
61
+ }
@@ -0,0 +1,24 @@
1
+ import { GridProp } from "../Properties/gridProp.js";
2
+ import { CollectionPanel } from "./CollectionPanel.js";
3
+
4
+ export class Grid extends CollectionPanel{
5
+ constructor(id, template){
6
+ super(id,template);
7
+ this.grid = GridProp();
8
+ }
9
+ setGridProp(grid_prop){
10
+ this.grid = grid_prop;
11
+ return this;
12
+ }
13
+ serialize(){
14
+
15
+ // 复制grid的属性
16
+ for (const key in this.grid) {
17
+ if (this.grid.hasOwnProperty(key)) {
18
+ this.properties.set(key, this.grid[key]);
19
+ }
20
+ }
21
+
22
+ return super.serialize();
23
+ }
24
+ }
@@ -16,6 +16,10 @@ export class Image extends UIElement{
16
16
  this.dataBinding = new DataBinding();
17
17
  this.factory = new Factory();
18
18
  }
19
+ setSprite(sprite){
20
+ this.sprite = sprite;
21
+ return this;
22
+ }
19
23
  serialize(){
20
24
  //合并属性
21
25
 
@@ -16,6 +16,16 @@ export class Label extends UIElement{
16
16
  this.dataBinding = new DataBinding();
17
17
  this.factory = new Factory();
18
18
  }
19
+ setLayout(layout){
20
+ if(!(layout instanceof Layout)) new Error("参数需要Layout类")
21
+ this.layout = layout;
22
+ return this;
23
+ }
24
+
25
+ setText(text){
26
+ this.text = text;
27
+ return this;
28
+ }
19
29
  serialize(){
20
30
  //合并属性
21
31
 
@@ -26,8 +36,6 @@ export class Label extends UIElement{
26
36
  }
27
37
  }
28
38
 
29
-
30
-
31
39
  // 复制Layout的属性
32
40
  for (const key in this.layout) {
33
41
  if (this.layout.hasOwnProperty(key)) {
@@ -13,6 +13,13 @@ export class Panel extends UIElement{
13
13
  this.dataBinding = new DataBinding();
14
14
  this.factory = new Factory();
15
15
  }
16
+
17
+ setLayout(layout){
18
+ if(!(layout instanceof Layout)) new Error("参数需要Layout类")
19
+ this.layout = layout;
20
+ return this;
21
+ }
22
+
16
23
  serialize(){
17
24
  //序列化
18
25
 
@@ -0,0 +1,68 @@
1
+
2
+ import { Control } from "../Properties/Control.js";
3
+ import { DataBinding } from "../Properties/DataBinding.js";
4
+ import { Factory } from "../Properties/Factory.js";
5
+ import { Input } from "../Properties/Input.js";
6
+ import { Layout } from "../Properties/Layout.js";
7
+ import { ScrollView } from "../Properties/ScrollView.js";
8
+ import { UIElement } from "./UIElement.js";
9
+
10
+ export class ScrollingPanel extends UIElement{
11
+ constructor(id,template){
12
+ super(id,"scroll_view",template);
13
+ this.input = new Input();
14
+ this.scrollView = new ScrollView();
15
+ this.control = new Control();
16
+ this.layout = new Layout();
17
+ this.dataBinding = new DataBinding();
18
+ this.factory = new Factory();
19
+ }
20
+ serialize(){
21
+ //合并属性
22
+
23
+ // 复制Input的属性
24
+ for (const key in this.input) {
25
+ if (this.input.hasOwnProperty(key)) {
26
+ this.properties.set(key, this.input[key]);
27
+ }
28
+ }
29
+
30
+ // 复制scrollView的属性
31
+ for (const key in this.scrollView) {
32
+ if (this.scrollView.hasOwnProperty(key)) {
33
+ this.properties.set(key, this.scrollView[key]);
34
+ }
35
+ }
36
+
37
+ // 复制Layout的属性
38
+ for (const key in this.layout) {
39
+ if (this.layout.hasOwnProperty(key)) {
40
+ this.properties.set(key, this.layout[key]);
41
+ }
42
+ }
43
+
44
+ // 复制DataBinding的属性
45
+ for (const key in this.dataBinding) {
46
+ if (this.dataBinding.hasOwnProperty(key)) {
47
+ this.properties.set(key, this.dataBinding[key]);
48
+ }
49
+ }
50
+
51
+ // 复制Factory的属性
52
+ for (const key in this.factory) {
53
+ if (this.factory.hasOwnProperty(key)) {
54
+ this.properties.set(key, this.factory[key]);
55
+ }
56
+ }
57
+
58
+ // 复制Control的属性
59
+ for (const key in this.control) {
60
+ if (this.control.hasOwnProperty(key)) {
61
+ this.properties.set(key, this.control[key]);
62
+ }
63
+ }
64
+
65
+ // 调用父类的serialize方法
66
+ return super.serialize();
67
+ }
68
+ }
@@ -0,0 +1,40 @@
1
+ import { Layout } from "../Properties/Layout.js";
2
+ import { Panel } from "./Panel.js";
3
+
4
+ export class StackPanel extends Panel{
5
+ constructor(id, template){
6
+ super(id, template);
7
+ this.type = "stack_panel";
8
+ this.orientation = "vertical";
9
+ this.stackNum = 0;
10
+
11
+ //init
12
+ this.setLayout(new Layout().setSize(["100%","100%"]));
13
+ }
14
+
15
+ addStack(size,content,debug = false){
16
+ const stack = new Panel(`stack${this.stackNum}`)
17
+ .setLayout(new Layout().setSize(size))
18
+ .addControl(content);
19
+ if (debug ) stack.enableDebug();
20
+ this.addControl(stack)
21
+ this.stackNum++;
22
+ return this;
23
+ }
24
+ /**
25
+ * Possible values:
26
+ vertical
27
+ horizontal
28
+ * @param {*} orientation
29
+ */
30
+ setOrientation(orientation){
31
+ this.orientation = orientation;
32
+ return this;
33
+ }
34
+
35
+ serialize(){
36
+ this.properties.set("type", "stack_panel")
37
+ this.properties.set("orientation",this.orientation);
38
+ return super.serialize();
39
+ }
40
+ }
@@ -27,16 +27,57 @@
27
27
  screen - elements that are called by the game directly, usually root panel elements
28
28
  */
29
29
 
30
+ import { Control } from "../Properties/Control.js";
31
+
32
+
33
+
30
34
  // 基础元素类
31
35
  export class UIElement {
32
- constructor(id, type, template) {
36
+ constructor(name, type, template) {
33
37
  this.type = type;
34
- this.id = template ? `${id}@${template}` : id;
38
+ this.id = template ? `${name}@${template}` : name;
39
+ this.name = name;
40
+ this.control = new Control();
35
41
  this.properties = new Map().set("type",type);
36
42
  this.variables = new Map();
37
43
  this.modifications = [];
38
44
  }
39
45
 
46
+ enableDebug(){
47
+ this.control.addControl({
48
+ "debug_board": {
49
+ "type": "image",
50
+ "texture": "textures/ui/focus_border_white",
51
+ "nineslice_size": 1,
52
+ "size": [ "100%", "100%" ]
53
+ }
54
+ })
55
+ return this;
56
+ }
57
+
58
+ setControl(control){
59
+ this.control = control;
60
+ return this;
61
+ }
62
+
63
+ addControl(control){
64
+ //console.log("control: ", control)
65
+ if(control instanceof UIElement) {
66
+ this.control.addControl(control.serialize());
67
+ }
68
+ else{
69
+ this.control.addControl(control);
70
+ }
71
+ return this;
72
+ }
73
+
74
+ addControls(controls){
75
+ for(let i in controls){
76
+ this.addControl(controls[i]);
77
+ }
78
+ return this;
79
+ }
80
+
40
81
  addVariable(name,value){
41
82
  this.variables.set(`$${name}`,value);
42
83
  return this;
@@ -0,0 +1,35 @@
1
+ import { UISystem } from "../systems/UISystem.js";
2
+
3
+ export class UISystemRegistry {
4
+ // 私有静态字段
5
+ static #ui_system_map = new Map();
6
+ static #ui_def_list = [];
7
+
8
+ // 注册 UISystem
9
+ static registerUISystem(ui_system) {
10
+ if (!(ui_system instanceof UISystem)) {
11
+ throw new Error("参数必须是 UISystem 类的实例");
12
+ }
13
+ const ui_system_path = ui_system.path + ui_system.name + ".json";
14
+ this.#ui_system_map.set(ui_system_path, ui_system);
15
+ }
16
+
17
+ // 获取所有注册的 UISystem
18
+ static getUISystemList() {
19
+ return Array.from(this.#ui_system_map.values());
20
+ }
21
+
22
+ // 添加外部 UI 定义
23
+ static addOuterUIdefs(ui_defs) {
24
+ if (!Array.isArray(ui_defs)) {
25
+ throw new Error("参数必须是一个数组");
26
+ }
27
+ this.#ui_def_list = this.#ui_def_list.concat(ui_defs);
28
+ }
29
+
30
+ // 获取 UI 定义列表(剔除 "ui/server_form")
31
+ static getUIdefList() {
32
+ const combinedList = this.#ui_def_list.concat(Array.from(this.#ui_system_map.keys()));
33
+ return combinedList.filter(item => item !== "ui/server_form");
34
+ }
35
+ }
@@ -1,13 +1,17 @@
1
+ import { UISystemRegistry } from "../registry/UISystemRegistry.js";
2
+
1
3
  // UI 文件核心类
2
4
  export class UISystem {
3
5
 
4
- constructor(identity, path) {
5
- this.identity = identity;
6
- this.namespace = identity.split(':')[0];
7
- this.name = identity.split(':')[1];
6
+ constructor(identifier, path) {
7
+ this.identifier = identifier;
8
+ this.namespace = identifier.replace(":", "_");
9
+ this.name = identifier.split(':')[1];
8
10
  this.path = path;
9
11
  this.elements = new Map();
10
12
  this.animations = new Map();
13
+
14
+ UISystemRegistry.registerUISystem(this);
11
15
  }
12
16
 
13
17
  addElement(element) {
@@ -32,7 +36,7 @@ export class UISystem {
32
36
  const ui = {namespace:this.namespace};
33
37
  //序列化
34
38
  this.elements.forEach((value,key)=>{
35
- console.log("elements key:",key)
39
+ //console.log("elements key:",key)
36
40
  console.log("elements value:",value);
37
41
  ui[key] = value.serialize()[value.id]
38
42
  })
@@ -0,0 +1,299 @@
1
+ import { ButtonMapping } from "../ButtonMapping.js";
2
+ import { DataBindingObject } from "../DataBindingObject.js";
3
+ import { Button } from "../elements/Button.js";
4
+ import { Image } from "../elements/Image.js";
5
+ import { Label } from "../elements/Label.js";
6
+ import { Panel } from "../elements/Panel.js";
7
+ import { StackPanel } from "../elements/StackPanel.js";
8
+ import { UIElement } from "../elements/UIElement.js";
9
+ import { Control } from "../Properties/Control.js";
10
+ import { Input } from "../Properties/Input.js";
11
+ import { Layout } from "../Properties/Layout.js";
12
+ import { Sprite } from "../Properties/Sprite.js";
13
+ import { Text } from "../Properties/Text.js";
14
+ import { ServerUISystem } from "./server_form.js";
15
+ import { UISystem } from "./UISystem.js";
16
+
17
+
18
+
19
+ //表单按钮模板
20
+ const form_button_template = new Button("form_button_template","common.button");
21
+ form_button_template.addVariable("default_texture|default","")
22
+ form_button_template.addVariable("hover_texture|default","")
23
+ form_button_template.addVariable("pressed_texture|default","")
24
+ form_button_template.addVariable("binding_button_text|default","")
25
+ form_button_template.dataBinding.addDataBinding(
26
+ new DataBindingObject().setBindingType("collection_details")
27
+ .setBindingCollectionName("form_buttons")
28
+ )
29
+ form_button_template.dataBinding.addDataBinding(
30
+ new DataBindingObject().setBindingType("collection")
31
+ .setBindingCollectionName("form_buttons")
32
+ .setBindingName("#form_button_text")
33
+ )
34
+ form_button_template.dataBinding.addDataBinding(
35
+ new DataBindingObject().setBindingType("view")
36
+ .setSourcePropertyName("($binding_button_text = #form_button_text)")
37
+ .setTargetPropertyName("#visible")
38
+ )
39
+
40
+ form_button_template.addControls([
41
+ new Image("default").setSprite(
42
+ new Sprite().setTexture("$default_texture")
43
+ ),
44
+ new Image("hover").setSprite(
45
+ new Sprite().setTexture("$hover_texture")
46
+ ),
47
+ new Image("pressed").setSprite(
48
+ new Sprite().setTexture("$pressed_texture")
49
+ )
50
+ ])
51
+
52
+ //f
53
+ const form_button_panel = new Panel("form_button_factory").enableDebug()
54
+ form_button_panel.addProp("type","collection_panel")
55
+ form_button_panel.factory.setName("buttons").setControlName("$button_control");
56
+ form_button_panel.addProp("collection_name","form_buttons")
57
+ form_button_panel.dataBinding.addDataBinding(
58
+ new DataBindingObject().setBindingName("#form_button_length")
59
+ .setBindingNameOverride("#collection_length")
60
+ )
61
+
62
+ const page_template = new StackPanel("page_template").setOrientation("horizontal")
63
+ .addVariable("page_left_content | default","")
64
+ .addVariable("page_right_content | default","")
65
+ .setLayout(
66
+ new Layout().setSize(["90%","90%"])
67
+ )
68
+ .addStack(["50%","100%"],
69
+ new UIElement("page_left",undefined,"$page_left_content").serialize()
70
+ )
71
+ .addStack(["50%","100%"],
72
+ new UIElement("page_right",undefined,"$page_right_content").serialize()
73
+ )
74
+ page_template.dataBinding.addDataBinding(
75
+ new DataBindingObject().setBindingType("view")
76
+ .setSourcePropertyName("($binding_text = #form_text)")
77
+ .setTargetPropertyName("#visible")
78
+ );
79
+
80
+
81
+
82
+
83
+ export class Guidebook {
84
+ #bindingList = [];
85
+
86
+ constructor(identifier, path ){
87
+ this.system = new UISystem(identifier, path);
88
+
89
+ //init
90
+ this.#binding()
91
+ this.#addTemplate();
92
+ this.#updateSystem()
93
+ }
94
+
95
+ addPageBinding(page_name, left_control_name, right_control_name){
96
+ this.#bindingList.push({
97
+ page_name:page_name,
98
+ left_control_name:left_control_name,
99
+ right_control_name:right_control_name
100
+ })
101
+ //更新系统
102
+ this.#updateSystem();
103
+
104
+ return this;
105
+ }
106
+
107
+ addPage(page_name, left_control, right_control){
108
+ this.addPageBinding(
109
+ page_name,
110
+ left_control.name,
111
+ right_control.name
112
+ );
113
+ //添加元素
114
+ this.addElement(left_control)
115
+ this.addElement(right_control)
116
+
117
+ //更新系统
118
+ this.#updateSystem();
119
+
120
+ return this;
121
+ }
122
+
123
+ addElement(element){
124
+ this.system.addElement(element);
125
+ return this;
126
+ }
127
+
128
+ #binding(){
129
+ ServerUISystem.bindingTitlewithContent(
130
+ this.system.name,
131
+ `${this.system.namespace}.guidebook_root_panel`
132
+ )
133
+ }
134
+
135
+ #addTemplate(){
136
+ this.addElement(form_button_template);
137
+ this.addElement(form_button_panel)
138
+ this.addElement(page_template)
139
+
140
+ //
141
+ this.#updateSystem()
142
+ }
143
+ #updateSystem(){
144
+ const guidebook_root_panel = new Panel("guidebook_root_panel");
145
+
146
+ //开启调试框
147
+ //guidebook_root_panel.enableDebug()
148
+ //设置布局属性
149
+ guidebook_root_panel.setLayout(
150
+ new Layout().setSize([320,207])
151
+ )
152
+ //添加子元素
153
+ guidebook_root_panel.addControls([
154
+ //添加背景
155
+ new UIElement("book_background",undefined, "book.book_background"),
156
+ //添加书页
157
+ new StackPanel("book_page_stack_panel").setOrientation("horizontal")
158
+ .setLayout(
159
+ new Layout().setSize([320,207])
160
+ )
161
+ .addVariable("page_size",[160,207])
162
+ .addStack("$page_size",
163
+ new Panel("book_left_panel").addControls([
164
+ {
165
+ "page_crease_image@book.page_crease_left_image": {
166
+ "size": [ "100% - 40px", "100% - 14px" ],
167
+ "offset": [ 0, -2 ]
168
+ }
169
+ },
170
+ {
171
+ "page_edge_image@book.page_edge_left_image": {
172
+ "size": [ "100% - 7px", "100% - 16px" ],
173
+ "offset": [7,-1]
174
+ }
175
+ }
176
+ ]).serialize()
177
+ )
178
+ .addStack("$page_size",
179
+ new Panel("book_right_panel").addControls([
180
+ {
181
+ "page_crease_image@book.page_crease_right_image": {
182
+ "size": [ "100% - 40px", "100% - 14px" ],
183
+ "offset": [ 0, -2 ]
184
+ }
185
+ },
186
+ {
187
+ "page_edge_image@book.page_edge_right_image": {
188
+ "size": [ "100% - 7px", "100% - 16px" ],
189
+ "offset": [-7,-1]
190
+ }
191
+ }
192
+ ]).serialize()
193
+ ),
194
+ //添加书页内容
195
+ new Panel("page_content_root")
196
+ .setControl(
197
+ new Control().setLayer(5)
198
+ )
199
+ .setLayout(
200
+ new Layout().setSize(["90%","90%"])
201
+ )
202
+ .addControls([
203
+ new Panel("label_text_panel").setLayout(
204
+ new Layout().setSize([32,8]).setAnchorFrom("bottom_middle")
205
+ .setAnchorTo("bottom_middle")
206
+ ).addControl(
207
+ new Label("page_content").setText(
208
+ new Text().setText("#form_text").setColor([0,0,0])
209
+ )
210
+ )
211
+ ,
212
+ ...this.#bindingList.map(({page_name,left_control_name,right_control_name},index)=>{
213
+ return new UIElement(`page_index_${index}`,undefined,"page_template")
214
+ .addVariable("binding_text",page_name)
215
+ .addVariable("page_left_content",left_control_name)
216
+ .addVariable("page_right_content",right_control_name)
217
+ })
218
+ /*
219
+ new UIElement("page_1",undefined,"page_template")
220
+ .addVariable("binding_text","page_index1")
221
+ .addVariable("page_left_content","page_left_content")
222
+ .addVariable("page_right_content","page_right_content"),
223
+ new UIElement("page_2",undefined,"page_template")
224
+ .addVariable("binding_text","page_index2")
225
+ .addVariable("page_left_content","page_left_content")
226
+ .addVariable("page_right_content","page_right_content"),
227
+ new UIElement("page_3",undefined,"page_template")
228
+ .addVariable("binding_text","page_index3")
229
+ .addVariable("page_left_content","page_left_content")
230
+ .addVariable("page_right_content","page_right_content")*/
231
+
232
+ ])
233
+ ,
234
+ //添加关闭按钮
235
+ new Button("close_button").setLayout(
236
+ new Layout().setSize([14,14])
237
+ .setAnchorFrom("top_right")
238
+ .setAnchorTo("top_right")
239
+ )
240
+ .setInput(
241
+ new Input().setButtonMappings([
242
+ new ButtonMapping().setMappingType("pressed")
243
+ .setFromButtonId("button.menu_select")
244
+ .setToButtonId("button.menu_exit")
245
+ ])
246
+ )
247
+ .addControls([
248
+ new UIElement("default",undefined,"book.close_button_default"),
249
+ new UIElement("hover",undefined,"book.close_button_hover"),
250
+ new UIElement("pressed",undefined,"book.close_button_pressed"),
251
+ ]),
252
+ //添加下一页按钮
253
+ new Panel("prev_button_panel").enableDebug()
254
+ .setControl(
255
+ new Control().setLayer(5)
256
+ )
257
+ .setLayout(
258
+ new Layout().setSize([24,24])
259
+ .setOffset([7,-9])
260
+ .setAnchorFrom("bottom_left")
261
+ .setAnchorTo("bottom_left")
262
+ )
263
+ .addControl(
264
+ new UIElement("prev_button",undefined,"form_button_factory")
265
+ .addVariable("binding_button_text","test1")
266
+ .addVariable("button_control",`${this.system.namespace}.form_button_template`)
267
+ .addVariable("pressed_button_name", "button.form_button_click")
268
+ .addVariable("default_texture","textures/ui/book_pageleft_default")
269
+ .addVariable("hover_texture","textures/ui/book_pageleft_hover")
270
+ .addVariable("pressed_texture","textures/ui/book_pageleft_pressed")
271
+ )
272
+ ,
273
+ new Panel("next_button_panel").enableDebug()
274
+ .setControl(
275
+ new Control().setLayer(5)
276
+ )
277
+ .setLayout(
278
+ new Layout().setSize([24,24])
279
+ .setOffset([-7,-9])
280
+ .setAnchorFrom("bottom_right")
281
+ .setAnchorTo("bottom_right")
282
+ )
283
+ .addControl(
284
+ new UIElement("next_button",undefined,"form_button_factory")
285
+ .addVariable("binding_button_text","test2")
286
+ .addVariable("button_control","sapdon_guidebook.form_button_template")
287
+ .addVariable("pressed_button_name", "button.form_button_click")
288
+ .addVariable("default_texture","textures/ui/book_pageright_default")
289
+ .addVariable("hover_texture","textures/ui/book_pageright_hover")
290
+ .addVariable("pressed_texture","textures/ui/book_pageright_pressed")
291
+ )
292
+ ])
293
+
294
+ this.addElement(guidebook_root_panel)
295
+ }
296
+
297
+ }
298
+
299
+