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,115 +1,115 @@
1
- import fs from "fs/promises";
2
- import path from "path";
3
-
4
-
5
- /**
6
- * 递归遍历目录,收集所有 PNG 文件的路径
7
- * @param {string} directory - 要遍历的目录
8
- * @param {string} basePath - 基础路径(用于计算相对路径)
9
- * @param {string} prefix - 路径前缀(如 "textures/items/")
10
- * @returns {Promise<Object>} - 返回一个对象,键为文件名,值为相对路径(不带 .png 后缀)
11
- */
12
- const traverseDirectory = async (directory, basePath, prefix = "") => {
13
- const texturesSet = {};
14
-
15
- const files = await fs.readdir(directory);
16
-
17
- for (const file of files) {
18
- const filePath = path.join(directory, file);
19
- const fileStats = await fs.stat(filePath);
20
-
21
- if (fileStats.isDirectory()) {
22
- // 如果是目录,递归遍历
23
- const subDirectoryTextures = await traverseDirectory(filePath, basePath, prefix);
24
- Object.assign(texturesSet, subDirectoryTextures);
25
- } else if (file.endsWith(".png")) {
26
- // 如果是 PNG 文件,提取文件名并生成 texture_data
27
- const fileName = path.basename(file, ".png"); // 去掉 .png 后缀
28
- const relativePath = path.relative(basePath, filePath).replace(/\.png$/, ""); // 去掉 .png 后缀
29
- const normalizedPath = `${prefix}${relativePath.replace(/\\/g, "/")}`; // 确保路径使用正斜杠
30
-
31
- texturesSet[fileName] = {
32
- textures: normalizedPath,
33
- };
34
- }
35
- }
36
-
37
- return texturesSet;
38
- };
39
-
40
- /**
41
- * 生成 JSON 文件
42
- * @param {string} outputPath - 输出的 JSON 文件路径
43
- * @param {Object} jsonData - 要写入的 JSON 数据
44
- * @param {string} successMessage - 成功时的日志消息
45
- */
46
- const generateJsonFile = async (outputPath, jsonData, successMessage) => {
47
- try {
48
- const jsonString = JSON.stringify(jsonData, null, 2);
49
- await fs.writeFile(outputPath, jsonString);
50
- console.log(successMessage);
51
- } catch (err) {
52
- console.error("Error writing JSON file:", err);
53
- }
54
- };
55
-
56
- /**
57
- * 生成 block_texture.json 文件
58
- * @param {string} itemTexturesPath - 包含 PNG 文件的根目录
59
- * @param {string} outputPath - 输出的 JSON 文件路径
60
- * @param {string} projectName - 项目名称
61
- */
62
- export async function generateBlockTextureJson(itemTexturesPath, outputPath, projectName, userTerrainTextures) {
63
- try {
64
- // 递归遍历目录,获取所有 PNG 文件的路径
65
- const itemTexturesSet = await traverseDirectory(itemTexturesPath, itemTexturesPath,"textures/blocks/");
66
-
67
- // 合并用户自定义的texture_data
68
- if(userTerrainTextures){
69
- Object.assign(itemTexturesSet,userTerrainTextures);
70
- }
71
-
72
- // 生成 JSON 数据
73
- const jsonData = {
74
- texture_name: "atlas.terrain",
75
- resource_pack_name: projectName,
76
- padding: 8,
77
- num_mip_levels: 4,
78
- texture_data: itemTexturesSet,
79
- };
80
-
81
- // 写入文件
82
- await generateJsonFile(outputPath, jsonData, "Block texture JSON file generated successfully.");
83
- } catch (err) {
84
- console.error("Error generating block texture JSON:", err);
85
- }
86
- }
87
-
88
- /**
89
- * 生成 item_texture.json 文件
90
- * @param {string} itemTexturesPath - 包含 PNG 文件的根目录
91
- * @param {string} outputPath - 输出的 JSON 文件路径
92
- */
93
- export async function generateItemTextureJson(itemTexturesPath, outputPath,projectName,userItemTextures) {
94
- try {
95
- // 递归遍历目录,获取所有 PNG 文件的路径
96
- const itemTexturesSet = await traverseDirectory(itemTexturesPath, itemTexturesPath, "textures/items/");
97
-
98
- // 合并用户自定义的texture_data
99
- if(userItemTextures){
100
- Object.assign(itemTexturesSet,userItemTextures);
101
- }
102
-
103
- // 生成 JSON 数据
104
- const jsonData = {
105
- resource_pack_name: projectName,
106
- texture_name: "atlas.items",
107
- texture_data: itemTexturesSet,
108
- };
109
-
110
- // 写入文件
111
- await generateJsonFile(outputPath, jsonData, "Item texture JSON file generated successfully.");
112
- } catch (err) {
113
- console.error("Error generating item texture JSON:", err);
114
- }
1
+ import fs from "fs/promises";
2
+ import path from "path";
3
+
4
+
5
+ /**
6
+ * 递归遍历目录,收集所有 PNG 文件的路径
7
+ * @param {string} directory - 要遍历的目录
8
+ * @param {string} basePath - 基础路径(用于计算相对路径)
9
+ * @param {string} prefix - 路径前缀(如 "textures/items/")
10
+ * @returns {Promise<Object>} - 返回一个对象,键为文件名,值为相对路径(不带 .png 后缀)
11
+ */
12
+ const traverseDirectory = async (directory, basePath, prefix = "") => {
13
+ const texturesSet = {};
14
+
15
+ const files = await fs.readdir(directory);
16
+
17
+ for (const file of files) {
18
+ const filePath = path.join(directory, file);
19
+ const fileStats = await fs.stat(filePath);
20
+
21
+ if (fileStats.isDirectory()) {
22
+ // 如果是目录,递归遍历
23
+ const subDirectoryTextures = await traverseDirectory(filePath, basePath, prefix);
24
+ Object.assign(texturesSet, subDirectoryTextures);
25
+ } else if (file.endsWith(".png")) {
26
+ // 如果是 PNG 文件,提取文件名并生成 texture_data
27
+ const fileName = path.basename(file, ".png"); // 去掉 .png 后缀
28
+ const relativePath = path.relative(basePath, filePath).replace(/\.png$/, ""); // 去掉 .png 后缀
29
+ const normalizedPath = `${prefix}${relativePath.replace(/\\/g, "/")}`; // 确保路径使用正斜杠
30
+
31
+ texturesSet[fileName] = {
32
+ textures: normalizedPath,
33
+ };
34
+ }
35
+ }
36
+
37
+ return texturesSet;
38
+ };
39
+
40
+ /**
41
+ * 生成 JSON 文件
42
+ * @param {string} outputPath - 输出的 JSON 文件路径
43
+ * @param {Object} jsonData - 要写入的 JSON 数据
44
+ * @param {string} successMessage - 成功时的日志消息
45
+ */
46
+ const generateJsonFile = async (outputPath, jsonData, successMessage) => {
47
+ try {
48
+ const jsonString = JSON.stringify(jsonData, null, 2);
49
+ await fs.writeFile(outputPath, jsonString);
50
+ console.log(successMessage);
51
+ } catch (err) {
52
+ console.error("Error writing JSON file:", err);
53
+ }
54
+ };
55
+
56
+ /**
57
+ * 生成 block_texture.json 文件
58
+ * @param {string} itemTexturesPath - 包含 PNG 文件的根目录
59
+ * @param {string} outputPath - 输出的 JSON 文件路径
60
+ * @param {string} projectName - 项目名称
61
+ */
62
+ export async function generateBlockTextureJson(itemTexturesPath, outputPath, projectName, userTerrainTextures) {
63
+ try {
64
+ // 递归遍历目录,获取所有 PNG 文件的路径
65
+ const itemTexturesSet = await traverseDirectory(itemTexturesPath, itemTexturesPath,"textures/blocks/");
66
+
67
+ // 合并用户自定义的texture_data
68
+ if(userTerrainTextures){
69
+ Object.assign(itemTexturesSet,userTerrainTextures);
70
+ }
71
+
72
+ // 生成 JSON 数据
73
+ const jsonData = {
74
+ texture_name: "atlas.terrain",
75
+ resource_pack_name: projectName,
76
+ padding: 8,
77
+ num_mip_levels: 4,
78
+ texture_data: itemTexturesSet,
79
+ };
80
+
81
+ // 写入文件
82
+ await generateJsonFile(outputPath, jsonData, "Block texture JSON file generated successfully.");
83
+ } catch (err) {
84
+ console.error("Error generating block texture JSON:", err);
85
+ }
86
+ }
87
+
88
+ /**
89
+ * 生成 item_texture.json 文件
90
+ * @param {string} itemTexturesPath - 包含 PNG 文件的根目录
91
+ * @param {string} outputPath - 输出的 JSON 文件路径
92
+ */
93
+ export async function generateItemTextureJson(itemTexturesPath, outputPath,projectName,userItemTextures) {
94
+ try {
95
+ // 递归遍历目录,获取所有 PNG 文件的路径
96
+ const itemTexturesSet = await traverseDirectory(itemTexturesPath, itemTexturesPath, "textures/items/");
97
+
98
+ // 合并用户自定义的texture_data
99
+ if(userItemTextures){
100
+ Object.assign(itemTexturesSet,userItemTextures);
101
+ }
102
+
103
+ // 生成 JSON 数据
104
+ const jsonData = {
105
+ resource_pack_name: projectName,
106
+ texture_name: "atlas.items",
107
+ texture_data: itemTexturesSet,
108
+ };
109
+
110
+ // 写入文件
111
+ await generateJsonFile(outputPath, jsonData, "Item texture JSON file generated successfully.");
112
+ } catch (err) {
113
+ console.error("Error generating item texture JSON:", err);
114
+ }
115
115
  }
package/src/cli/utils.js CHANGED
@@ -1,82 +1,82 @@
1
- import fs from "fs";
2
- import path from "path";
3
- import downlaod from "download";
4
- import { randomUUID } from "crypto";
5
-
6
- export const generateUUID = () => {
7
- return randomUUID();
8
- };
9
-
10
- /**
11
- * 同步复制文件
12
- * @param {string} src 源文件路径
13
- * @param {string} dest 目标文件路径
14
- */
15
- export function copyFileSync(src, dest) {
16
- try {
17
- fs.copyFileSync(src, dest);
18
- } catch (err) {
19
- console.error("文件复制失败:", err);
20
- }
21
- }
22
-
23
- //检查路径
24
- export const checkPath = filePath => {
25
- return !fs.existsSync(filePath);
26
- };
27
-
28
- //读取文件
29
- export const readFile = filePath => {
30
- try {
31
- return fs.readFileSync(filePath, "utf8");
32
- } catch (error) {
33
- console.log(error);
34
- }
35
- return null;
36
- };
37
-
38
- /**
39
- * 保存文件
40
- * @param {string} filePath 绝对路径
41
- * @param {string} data 数据
42
- */
43
- export const saveFile = (filePath, data) => {
44
- // 确保目录存在
45
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
46
-
47
- // 创建文件并写入内容
48
- fs.writeFile(filePath, data, err => {
49
- if (err) {
50
- return console.error(err);
51
- }
52
- });
53
- };
54
-
55
- export const copyFolder = (sourcePath, destinationPath) => {
56
- // 确保目录存在
57
- fs.mkdirSync(path.dirname(destinationPath), { recursive: true });
58
- // 检查源路径是否存在
59
- if (!fs.existsSync(sourcePath)) {
60
- console.log(`Source path ${sourcePath} does not exist.`);
61
- return;
62
- }
63
- // 检查目标路径是否存在,如果不存在则创建它
64
- if (!fs.existsSync(destinationPath)) {
65
- fs.mkdirSync(destinationPath);
66
- }
67
- // 获取源路径下的所有文件和文件夹
68
- const files = fs.readdirSync(sourcePath);
69
- // 遍历文件和文件夹
70
- files.forEach(file => {
71
- const sourceFile = path.join(sourcePath, file);
72
- const destinationFile = path.join(destinationPath, file);
73
- // 判断是文件还是文件夹
74
- if (fs.lstatSync(sourceFile).isDirectory()) {
75
- // 如果是文件夹,则递归调用copyFolder函数
76
- copyFolder(sourceFile, destinationFile);
77
- } else {
78
- // 如果是文件,则直接复制到目标路径
79
- fs.copyFileSync(sourceFile, destinationFile);
80
- }
81
- });
82
- };
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import downlaod from "download";
4
+ import { randomUUID } from "crypto";
5
+
6
+ export const generateUUID = () => {
7
+ return randomUUID();
8
+ };
9
+
10
+ /**
11
+ * 同步复制文件
12
+ * @param {string} src 源文件路径
13
+ * @param {string} dest 目标文件路径
14
+ */
15
+ export function copyFileSync(src, dest) {
16
+ try {
17
+ fs.copyFileSync(src, dest);
18
+ } catch (err) {
19
+ console.error("文件复制失败:", err);
20
+ }
21
+ }
22
+
23
+ //检查路径
24
+ export const checkPath = filePath => {
25
+ return !fs.existsSync(filePath);
26
+ };
27
+
28
+ //读取文件
29
+ export const readFile = filePath => {
30
+ try {
31
+ return fs.readFileSync(filePath, "utf8");
32
+ } catch (error) {
33
+ console.log(error);
34
+ }
35
+ return null;
36
+ };
37
+
38
+ /**
39
+ * 保存文件
40
+ * @param {string} filePath 绝对路径
41
+ * @param {string} data 数据
42
+ */
43
+ export const saveFile = (filePath, data) => {
44
+ // 确保目录存在
45
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
46
+
47
+ // 创建文件并写入内容
48
+ fs.writeFile(filePath, data, err => {
49
+ if (err) {
50
+ return console.error(err);
51
+ }
52
+ });
53
+ };
54
+
55
+ export const copyFolder = (sourcePath, destinationPath) => {
56
+ // 确保目录存在
57
+ fs.mkdirSync(path.dirname(destinationPath), { recursive: true });
58
+ // 检查源路径是否存在
59
+ if (!fs.existsSync(sourcePath)) {
60
+ console.log(`Source path ${sourcePath} does not exist.`);
61
+ return;
62
+ }
63
+ // 检查目标路径是否存在,如果不存在则创建它
64
+ if (!fs.existsSync(destinationPath)) {
65
+ fs.mkdirSync(destinationPath);
66
+ }
67
+ // 获取源路径下的所有文件和文件夹
68
+ const files = fs.readdirSync(sourcePath);
69
+ // 遍历文件和文件夹
70
+ files.forEach(file => {
71
+ const sourceFile = path.join(sourcePath, file);
72
+ const destinationFile = path.join(destinationPath, file);
73
+ // 判断是文件还是文件夹
74
+ if (fs.lstatSync(sourceFile).isDirectory()) {
75
+ // 如果是文件夹,则递归调用copyFolder函数
76
+ copyFolder(sourceFile, destinationFile);
77
+ } else {
78
+ // 如果是文件,则直接复制到目标路径
79
+ fs.copyFileSync(sourceFile, destinationFile);
80
+ }
81
+ });
82
+ };
@@ -0,0 +1,80 @@
1
+
2
+ export class AddonAnimationController {
3
+ constructor(format_version,definition){
4
+ this.format_version = format_version;
5
+ this.definition = definition;
6
+ }
7
+ toJson(){
8
+ return {
9
+ format_version: this.format_version,
10
+ ["animation_controllers"]: this.definition
11
+ }
12
+ }
13
+ }
14
+
15
+ export class AddonAnimationStateMachine {
16
+ constructor(identifier) {
17
+ this.identifier = identifier; // 状态机的唯一标识符(例如 "helicopter.blade")
18
+ this.namespace = identifier.split(":")[0]; // 标识符的命名空间部分(冒号前的部分)
19
+ this.name = identifier.split(":")[1]; // 标识符的名称部分(冒号后的部分)
20
+
21
+ // 状态机属性
22
+ this.initialState = null; // 状态机的初始状态
23
+ this.states = new Map(); // 使用 Map 存储所有状态,键为状态名,值为状态数据
24
+ }
25
+
26
+ /**
27
+ * 设置状态机的初始状态。
28
+ * @param {string} stateName - 初始状态的名称。
29
+ * @returns {AddonAnimationStateMachine} - 返回实例以支持链式调用。
30
+ */
31
+ setInitialState(stateName) {
32
+ this.initialState = stateName;
33
+ return this; // 支持链式调用
34
+ }
35
+
36
+ /**
37
+ * 添加一个新状态到状态机。
38
+ * @param {string} stateName - 状态的名称。
39
+ * @param {string[]} animations - 该状态播放的动画列表。
40
+ * @returns {AddonAnimationStateMachine} - 返回实例以支持链式调用。
41
+ */
42
+ addState(stateName, animations = []) {
43
+ this.states.set(stateName, {
44
+ animations: animations, // 该状态的动画列表
45
+ transitions: [] // 该状态的过渡条件列表
46
+ });
47
+ return this; // 支持链式调用
48
+ }
49
+
50
+ /**
51
+ * 添加一个状态之间的过渡条件。
52
+ * @param {string} fromState - 过渡的起始状态名称。
53
+ * @param {string} toState - 过渡的目标状态名称。
54
+ * @param {string} condition - 触发过渡的条件(例如 "q.is_on_ground")。
55
+ * @returns {AddonAnimationStateMachine} - 返回实例以支持链式调用。
56
+ */
57
+ addTransition(fromState, toState, condition) {
58
+ if (!this.states.has(fromState)) {
59
+ throw new Error(`状态 "${fromState}" 不存在。`);
60
+ }
61
+ const state = this.states.get(fromState);
62
+ state.transitions.push({
63
+ [toState]: condition // 添加过渡条件
64
+ });
65
+ return this; // 支持链式调用
66
+ }
67
+
68
+ /**
69
+ * 将整个状态机转换为 JSON 兼容的对象。
70
+ * @returns {object} - 包含格式版本的完整动画控制器定义。
71
+ */
72
+ toJson() {
73
+ return {
74
+ [`controller.animation.${this.namespace}.${this.name}`]:{
75
+ initial_state: this.initialState,
76
+ states: Object.fromEntries(this.states)
77
+ }
78
+ };
79
+ }
80
+ }
@@ -1,52 +1,53 @@
1
- export class AddonEntity {
2
- /**
3
- * 实体类
4
- * @param {string} format_version 格式版本
5
- * @param {AddonEntityDefinition} definitions 实体定义
6
- */
7
- constructor(format_version, definitions) {
8
- this.format_version = format_version;
9
- this.definitions = definitions;
10
- }
11
-
12
- /**
13
- * 将对象转换为 JSON 格式
14
- * @returns {Object} JSON 对象
15
- */
16
- toJson() {
17
- return {
18
- format_version: this.format_version,
19
- ["minecraft:entity"]: this.definitions
20
- };
21
- }
22
- }
23
-
24
- export class AddonEntityDefinition {
25
- /**
26
- * 实体定义类
27
- * @param {AddonEntityDescription} description 实体描述
28
- * @param {Object} components 实体组件
29
- */
30
- constructor(description, components = {}, component_groups = {}, events = {}) {
31
- this.description = description;
32
- this.components = components; // 修正拼写错误
33
- this.component_groups = component_groups;
34
- this.events = events;
35
- }
36
- }
37
-
38
- export class AddonEntityDescription {
39
- /**
40
- * 实体描述类
41
- * @param {string} identifier 实体标识符
42
- * @param {boolean} is_spawnable 是否可生成
43
- * @param {boolean} is_summonable 是否可召唤
44
- * @param {string} runtime_identifier 复刻标识符
45
- */
46
- constructor(identifier, is_spawnable = false, is_summonable = false, runtime_identifier) {
47
- this.identifier = identifier;
48
- this.is_spawnable = is_spawnable;
49
- this.is_summonable = is_summonable;
50
- this.runtime_identifier = runtime_identifier;
51
- }
1
+ export class AddonEntity {
2
+ /**
3
+ * 实体类
4
+ * @param {string} format_version 格式版本
5
+ * @param {AddonEntityDefinition} definitions 实体定义
6
+ */
7
+ constructor(format_version, definitions) {
8
+ this.format_version = format_version;
9
+ this.definitions = definitions;
10
+ }
11
+
12
+ /**
13
+ * 将对象转换为 JSON 格式
14
+ * @returns {Object} JSON 对象
15
+ */
16
+ toJson() {
17
+ return {
18
+ format_version: this.format_version,
19
+ ["minecraft:entity"]: this.definitions
20
+ };
21
+ }
22
+ }
23
+
24
+ export class AddonEntityDefinition {
25
+ /**
26
+ * 实体定义类
27
+ * @param {AddonEntityDescription} description 实体描述
28
+ * @param {Object} components 实体组件
29
+ */
30
+ constructor(description, components = {}, component_groups = {}, events = {}) {
31
+ this.description = description;
32
+ this.components = components; // 修正拼写错误
33
+ this.component_groups = component_groups;
34
+ this.events = events;
35
+ }
36
+ }
37
+
38
+ export class AddonEntityDescription {
39
+ /**
40
+ * 实体描述类
41
+ * @param {string} identifier 实体标识符
42
+ * @param {boolean} is_spawnable 是否可生成
43
+ * @param {boolean} is_summonable 是否可召唤
44
+ * @param {string} runtime_identifier 复刻标识符
45
+ */
46
+ constructor(identifier, is_spawnable = false, is_summonable = false, properties = {}, runtime_identifier) {
47
+ this.identifier = identifier;
48
+ this.is_spawnable = is_spawnable;
49
+ this.is_summonable = is_summonable;
50
+ this.properties = properties;
51
+ this.runtime_identifier = runtime_identifier;
52
+ }
52
53
  }
@@ -2,6 +2,14 @@ import { BasicBlock } from "./BasicBlock.js";
2
2
  import { BlockComponent } from "./blockComponent.js";
3
3
 
4
4
  export class GeometryBlock extends BasicBlock{
5
+ /**
6
+ * 带模型方块类
7
+ * @param {string} identifier 方块标识符 由命名空间和方块名组成 例如 "my_mod:stone"
8
+ * @param {string} category 方块的分类 "construction", "nature", "equipment", "items", and "none"
9
+ * @param {string} geometry 模型标识符
10
+ * @param {Object} material_instances 材质实例对象
11
+ * @param {Object} options 可选参数
12
+ */
5
13
  constructor(identifier, category, geometry, material_instances, options = {}) {
6
14
  super(identifier, category, [material_instances["*"]["texture"]], options);
7
15
  this.addComponent(
@@ -5,6 +5,7 @@ import { FeatureRule } from "../feature_rule/FeatureRule.js";
5
5
  import { BasicBlock } from "./BasicBlock.js";
6
6
 
7
7
  export class OreBlock{
8
+
8
9
  constructor(identifier, category, textures_arr, options = {}){
9
10
  this.block = new BasicBlock(identifier, category, textures_arr, options);
10
11
  this.feature = new OreFeature(`${identifier}_ore_feature`,6,[