sapdon 3.0.2 → 3.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 (219) hide show
  1. package/README.md +3 -2
  2. package/dist/cli/build.d.ts +7 -0
  3. package/dist/cli/build.js +236 -0
  4. package/dist/cli/dev-server/client.d.ts +2 -0
  5. package/dist/cli/dev-server/client.js +21 -0
  6. package/dist/cli/dev-server/config.d.ts +3 -0
  7. package/dist/cli/dev-server/config.js +3 -0
  8. package/dist/cli/dev-server/handles.d.ts +4 -0
  9. package/dist/cli/dev-server/handles.js +5 -0
  10. package/dist/cli/dev-server/hmr.d.ts +1 -0
  11. package/dist/cli/dev-server/hmr.js +13 -0
  12. package/dist/cli/dev-server/index.d.ts +4 -0
  13. package/dist/cli/dev-server/index.js +17 -0
  14. package/dist/cli/dev-server/server.d.ts +14 -0
  15. package/dist/cli/dev-server/server.js +59 -0
  16. package/dist/cli/dev-server/syncFiles.d.ts +3 -0
  17. package/dist/cli/dev-server/syncFiles.js +45 -0
  18. package/dist/cli/index.d.ts +20 -0
  19. package/dist/cli/index.js +90 -0
  20. package/dist/cli/init.d.ts +9 -0
  21. package/dist/cli/init.js +80 -0
  22. package/dist/cli/load.d.ts +3 -0
  23. package/dist/cli/load.js +94 -0
  24. package/dist/cli/start.d.ts +2 -0
  25. package/dist/cli/start.js +1398 -0
  26. package/dist/cli/tools/textureSet.d.ts +13 -0
  27. package/dist/cli/tools/textureSet.js +103 -0
  28. package/dist/cli/utils.d.ts +13 -0
  29. package/dist/cli/utils.js +89 -0
  30. package/dist/core/addon/biome.d.ts +22 -0
  31. package/dist/core/addon/biome.js +27 -0
  32. package/dist/core/addon/block/block.d.ts +41 -0
  33. package/dist/core/addon/block/block.js +46 -0
  34. package/dist/core/addon/controllers/animationController.d.ts +43 -0
  35. package/dist/core/addon/controllers/animationController.js +73 -0
  36. package/dist/core/addon/controllers/render_controllers.js +162 -0
  37. package/dist/core/addon/entity/clientEntity.d.ts +107 -0
  38. package/dist/core/addon/entity/clientEntity.js +149 -0
  39. package/dist/core/addon/entity/entity.d.ts +42 -0
  40. package/dist/core/addon/entity/entity.js +50 -0
  41. package/dist/core/addon/feature/oreFeature.d.ts +19 -0
  42. package/dist/core/addon/feature/oreFeature.js +24 -0
  43. package/dist/core/addon/featureRule.d.ts +20 -0
  44. package/dist/core/addon/featureRule.js +25 -0
  45. package/dist/core/addon/item/attachable.d.ts +94 -0
  46. package/dist/core/addon/item/attachable.js +134 -0
  47. package/dist/core/addon/item/item.d.ts +19 -0
  48. package/dist/core/addon/item/item.js +26 -0
  49. package/dist/core/addon/manifest.d.ts +49 -0
  50. package/dist/core/addon/manifest.js +65 -0
  51. package/dist/core/addon/menuCategory.d.ts +6 -0
  52. package/dist/core/addon/menuCategory.js +7 -0
  53. package/dist/core/addon/recipe/baseRecipe.d.ts +12 -0
  54. package/dist/core/addon/recipe/baseRecipe.js +23 -0
  55. package/dist/core/addon/recipe/data.d.ts +66 -0
  56. package/dist/core/addon/recipe/data.js +74 -0
  57. package/dist/core/addon/recipe/furnace.d.ts +17 -0
  58. package/dist/core/addon/recipe/furnace.js +43 -0
  59. package/dist/core/addon/recipe/shaped.d.ts +26 -0
  60. package/dist/core/addon/recipe/shaped.js +53 -0
  61. package/dist/core/addon/recipe/shapeless.d.ts +18 -0
  62. package/dist/core/addon/recipe/shapeless.js +36 -0
  63. package/dist/core/biome/biome.d.ts +14 -0
  64. package/dist/core/biome/biome.js +23 -0
  65. package/dist/core/biome/biomeComponent.d.ts +46 -0
  66. package/dist/core/biome/biomeComponent.js +77 -0
  67. package/dist/core/block/basicBlock.d.ts +48 -0
  68. package/dist/core/block/basicBlock.js +105 -0
  69. package/dist/core/block/block.d.ts +32 -0
  70. package/dist/core/block/block.js +92 -0
  71. package/dist/core/block/blockComponent.d.ts +187 -0
  72. package/dist/core/block/blockComponent.js +500 -0
  73. package/dist/core/block/cropBlock.d.ts +4 -0
  74. package/dist/core/block/cropBlock.js +27 -0
  75. package/dist/core/block/geometryBlock.d.ts +12 -0
  76. package/dist/core/block/geometryBlock.js +16 -0
  77. package/dist/core/block/oreBlock.d.ts +9 -0
  78. package/dist/core/block/oreBlock.js +25 -0
  79. package/dist/core/block/rotatableBlock.d.ts +27 -0
  80. package/dist/core/block/rotatableBlock.js +107 -0
  81. package/dist/core/block/tileBlock.d.ts +17 -0
  82. package/dist/core/block/tileBlock.js +125 -0
  83. package/dist/core/entity/basicEntity.d.ts +111 -0
  84. package/dist/core/entity/basicEntity.js +170 -0
  85. package/dist/core/entity/behavior/followMob.d.ts +12 -0
  86. package/dist/core/entity/behavior/followMob.js +35 -0
  87. package/dist/core/entity/behavior/followParent.d.ts +7 -0
  88. package/dist/core/entity/behavior/followParent.js +15 -0
  89. package/dist/core/entity/behavior/randomStroll.d.ts +31 -0
  90. package/dist/core/entity/behavior/randomStroll.js +63 -0
  91. package/dist/core/entity/behavior/tempt.d.ts +73 -0
  92. package/dist/core/entity/behavior/tempt.js +134 -0
  93. package/dist/core/entity/bundles/BasicMoveBundle.js +8 -0
  94. package/dist/core/entity/bundles/basicBundle.d.ts +13 -0
  95. package/dist/core/entity/bundles/basicBundle.js +38 -0
  96. package/dist/core/entity/clientEntity.d.ts +20 -0
  97. package/dist/core/entity/clientEntity.js +37 -0
  98. package/dist/core/entity/componets/entityComponet.d.ts +202 -0
  99. package/dist/core/entity/componets/entityComponet.js +354 -0
  100. package/dist/core/entity/data/nativeEntityData.d.ts +9 -0
  101. package/dist/core/entity/data/nativeEntityData.js +38 -0
  102. package/dist/core/entity/dummyEntity.js +14 -0
  103. package/dist/core/entity/entity.d.ts +15 -0
  104. package/dist/core/entity/entity.js +11 -0
  105. package/dist/core/entity/nativeEntity.d.ts +8 -0
  106. package/dist/core/entity/nativeEntity.js +28 -0
  107. package/dist/core/entity/navigation/walk.d.ts +23 -0
  108. package/dist/core/entity/navigation/walk.js +56 -0
  109. package/dist/core/entity/projectile.d.ts +3 -0
  110. package/dist/core/entity/projectile.js +7 -0
  111. package/dist/core/factory/biomeFactory.d.ts +4 -0
  112. package/dist/core/factory/biomeFactory.js +13 -0
  113. package/dist/core/factory/blockFactory.d.ts +34 -0
  114. package/dist/core/factory/blockFactory.js +143 -0
  115. package/dist/core/factory/entityFactory.d.ts +17 -0
  116. package/dist/core/factory/entityFactory.js +75 -0
  117. package/dist/core/factory/featureFactory.d.ts +6 -0
  118. package/dist/core/factory/featureFactory.js +23 -0
  119. package/dist/core/factory/itemExtra.d.ts +8 -0
  120. package/dist/core/factory/itemExtra.js +9 -0
  121. package/dist/core/factory/itemFactory.d.ts +27 -0
  122. package/dist/core/factory/itemFactory.js +112 -0
  123. package/dist/core/factory/recipeFactory.d.ts +18 -0
  124. package/dist/core/factory/recipeFactory.js +39 -0
  125. package/dist/core/factory/uiFactory.d.ts +12 -0
  126. package/dist/core/factory/uiFactory.js +32 -0
  127. package/dist/core/feature/oreFeature.d.ts +10 -0
  128. package/dist/core/feature/oreFeature.js +11 -0
  129. package/dist/core/feature-rule/condition/biomeFilter.d.ts +26 -0
  130. package/dist/core/feature-rule/condition/biomeFilter.js +36 -0
  131. package/dist/core/feature-rule/condition/featureConditions.d.ts +27 -0
  132. package/dist/core/feature-rule/condition/featureConditions.js +37 -0
  133. package/dist/core/feature-rule/distribution/coordinateDistribution.d.ts +17 -0
  134. package/dist/core/feature-rule/distribution/coordinateDistribution.js +23 -0
  135. package/dist/core/feature-rule/distribution/featureDistribution.d.ts +31 -0
  136. package/dist/core/feature-rule/distribution/featureDistribution.js +41 -0
  137. package/dist/core/feature-rule/featureRule.d.ts +17 -0
  138. package/dist/core/feature-rule/featureRule.js +26 -0
  139. package/dist/core/index.d.ts +2241 -0
  140. package/dist/core/index.js +1 -0
  141. package/dist/core/item/armor.d.ts +21 -0
  142. package/dist/core/item/armor.js +90 -0
  143. package/dist/core/item/attachable.d.ts +6 -0
  144. package/dist/core/item/attachable.js +26 -0
  145. package/dist/core/item/food.d.ts +24 -0
  146. package/dist/core/item/food.js +38 -0
  147. package/dist/core/item/item.d.ts +36 -0
  148. package/dist/core/item/item.js +69 -0
  149. package/dist/core/item/itemComponents.d.ts +113 -0
  150. package/dist/core/item/itemComponents.js +225 -0
  151. package/dist/core/registry.d.ts +12 -0
  152. package/dist/core/registry.js +17 -0
  153. package/dist/core/texture.d.ts +18 -0
  154. package/dist/core/texture.js +38 -0
  155. package/dist/core/ui/buttonMapping.d.ts +97 -0
  156. package/dist/core/ui/buttonMapping.js +132 -0
  157. package/dist/core/ui/dataBindingObject.d.ts +97 -0
  158. package/dist/core/ui/dataBindingObject.js +134 -0
  159. package/dist/core/ui/elements/button.d.ts +21 -0
  160. package/dist/core/ui/elements/button.js +101 -0
  161. package/dist/core/ui/elements/collectionPanel.d.ts +12 -0
  162. package/dist/core/ui/elements/collectionPanel.js +53 -0
  163. package/dist/core/ui/elements/grid.d.ts +8 -0
  164. package/dist/core/ui/elements/grid.js +33 -0
  165. package/dist/core/ui/elements/image.d.ts +13 -0
  166. package/dist/core/ui/elements/image.js +55 -0
  167. package/dist/core/ui/elements/label.d.ts +14 -0
  168. package/dist/core/ui/elements/label.js +61 -0
  169. package/dist/core/ui/elements/panel.d.ts +11 -0
  170. package/dist/core/ui/elements/panel.js +49 -0
  171. package/dist/core/ui/elements/scrollingPanel.d.ts +14 -0
  172. package/dist/core/ui/elements/scrollingPanel.js +59 -0
  173. package/dist/core/ui/elements/stackPanel.d.ts +14 -0
  174. package/dist/core/ui/elements/stackPanel.js +37 -0
  175. package/dist/core/ui/elements/uiElement.d.ts +53 -0
  176. package/dist/core/ui/elements/uiElement.js +129 -0
  177. package/dist/core/ui/properties/control.d.ts +214 -0
  178. package/dist/core/ui/properties/control.js +286 -0
  179. package/dist/core/ui/properties/dataBinding.d.ts +6 -0
  180. package/dist/core/ui/properties/dataBinding.js +16 -0
  181. package/dist/core/ui/properties/factory.d.ts +37 -0
  182. package/dist/core/ui/properties/factory.js +62 -0
  183. package/dist/core/ui/properties/gridProp.d.ts +65 -0
  184. package/dist/core/ui/properties/gridProp.js +90 -0
  185. package/dist/core/ui/properties/input.d.ts +97 -0
  186. package/dist/core/ui/properties/input.js +134 -0
  187. package/dist/core/ui/properties/layout.d.ts +105 -0
  188. package/dist/core/ui/properties/layout.js +145 -0
  189. package/dist/core/ui/properties/scrollView.d.ts +105 -0
  190. package/dist/core/ui/properties/scrollView.js +145 -0
  191. package/dist/core/ui/properties/sound.d.ts +47 -0
  192. package/dist/core/ui/properties/sound.js +66 -0
  193. package/dist/core/ui/properties/sprite.d.ts +161 -0
  194. package/dist/core/ui/properties/sprite.js +222 -0
  195. package/dist/core/ui/properties/text.d.ts +135 -0
  196. package/dist/core/ui/properties/text.js +187 -0
  197. package/dist/core/ui/registry/uiSystemRegistry.d.ts +8 -0
  198. package/dist/core/ui/registry/uiSystemRegistry.js +26 -0
  199. package/dist/core/ui/systems/chest.d.ts +5 -0
  200. package/dist/core/ui/systems/chest.js +21 -0
  201. package/dist/core/ui/systems/containerUISystem.d.ts +67 -0
  202. package/dist/core/ui/systems/containerUISystem.js +214 -0
  203. package/dist/core/ui/systems/guidebook.d.ts +9 -0
  204. package/dist/core/ui/systems/guidebook.js +206 -0
  205. package/dist/core/ui/systems/serverForm.d.ts +13 -0
  206. package/dist/core/ui/systems/serverForm.js +116 -0
  207. package/dist/core/ui/systems/system.d.ts +16 -0
  208. package/dist/core/ui/systems/system.js +37 -0
  209. package/dist/oc/actor.js +44 -0
  210. package/dist/oc/core.js +201 -0
  211. package/dist/oc/index.d.ts +142 -0
  212. package/dist/oc/index.js +1 -0
  213. package/dist/oc/input.js +67 -0
  214. package/dist/oc/optional.js +31 -0
  215. package/doc/oc/index.md +0 -0
  216. package/doc/sapdon-ts.md +41 -5
  217. package/package.json +6 -8
  218. package/doc/cli.md +0 -24
  219. /package/doc/hello_sapdon/{sapdon/344/275/277/347/224/250/346/225/231/347/250/213.md" → hello_sapdon.md} +0 -0
@@ -0,0 +1,206 @@
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 "./serverForm.js";
15
+ import { UISystem } from "./system.js";
16
+ //表单按钮模板
17
+ const form_button_template = new Button("form_button_template", "common.button");
18
+ form_button_template.addVariable("default_texture|default", "");
19
+ form_button_template.addVariable("hover_texture|default", "");
20
+ form_button_template.addVariable("pressed_texture|default", "");
21
+ form_button_template.addVariable("binding_button_text|default", "");
22
+ form_button_template.dataBinding.addDataBinding(new DataBindingObject().setBindingType("collection_details")
23
+ .setBindingCollectionName("form_buttons"));
24
+ form_button_template.dataBinding.addDataBinding(new DataBindingObject().setBindingType("collection")
25
+ .setBindingCollectionName("form_buttons")
26
+ .setBindingName("#form_button_text"));
27
+ form_button_template.dataBinding.addDataBinding(new DataBindingObject().setBindingType("view")
28
+ .setSourcePropertyName("($binding_button_text = #form_button_text)")
29
+ .setTargetPropertyName("#visible"));
30
+ form_button_template.addControls([
31
+ new Image("default").setSprite(new Sprite().setTexture("$default_texture")),
32
+ new Image("hover").setSprite(new Sprite().setTexture("$hover_texture")),
33
+ new Image("pressed").setSprite(new Sprite().setTexture("$pressed_texture"))
34
+ ]);
35
+ //f
36
+ const form_button_panel = new Panel("form_button_factory").enableDebug();
37
+ form_button_panel.addProp("type", "collection_panel");
38
+ form_button_panel.factory.setName("buttons").setControlName("$button_control");
39
+ form_button_panel.addProp("collection_name", "form_buttons");
40
+ form_button_panel.dataBinding.addDataBinding(new DataBindingObject().setBindingName("#form_button_length")
41
+ .setBindingNameOverride("#collection_length"));
42
+ const page_template = new StackPanel("page_template").setOrientation("horizontal")
43
+ .addVariable("page_left_content | default", "")
44
+ .addVariable("page_right_content | default", "")
45
+ .setLayout(new Layout().setSize(["90%", "90%"]))
46
+ .addStack(["50%", "100%"], new UIElement("page_left", undefined, "$page_left_content").serialize())
47
+ .addStack(["50%", "100%"], new UIElement("page_right", undefined, "$page_right_content").serialize());
48
+ page_template.dataBinding.addDataBinding(new DataBindingObject().setBindingType("view")
49
+ .setSourcePropertyName("($binding_text = #form_text)")
50
+ .setTargetPropertyName("#visible"));
51
+ export class Guidebook {
52
+ #bindingList = [];
53
+ constructor(identifier, path) {
54
+ this.system = new UISystem(identifier, path);
55
+ //init
56
+ this.#binding();
57
+ this.#addTemplate();
58
+ this.#updateSystem();
59
+ }
60
+ addPageBinding(page_name, left_control_name, right_control_name) {
61
+ this.#bindingList.push({
62
+ page_name: page_name,
63
+ left_control_name: left_control_name,
64
+ right_control_name: right_control_name
65
+ });
66
+ //更新系统
67
+ this.#updateSystem();
68
+ return this;
69
+ }
70
+ addPage(page_name, left_control, right_control) {
71
+ this.addPageBinding(page_name, left_control.name, right_control.name);
72
+ //添加元素
73
+ this.addElement(left_control);
74
+ this.addElement(right_control);
75
+ //更新系统
76
+ this.#updateSystem();
77
+ return this;
78
+ }
79
+ addElement(element) {
80
+ this.system.addElement(element);
81
+ return this;
82
+ }
83
+ #binding() {
84
+ ServerUISystem.bindingTitlewithContent(this.system.name, `${this.system.namespace}.guidebook_root_panel`);
85
+ }
86
+ #addTemplate() {
87
+ this.addElement(form_button_template);
88
+ this.addElement(form_button_panel);
89
+ this.addElement(page_template);
90
+ //
91
+ this.#updateSystem();
92
+ }
93
+ #updateSystem() {
94
+ const guidebook_root_panel = new Panel("guidebook_root_panel");
95
+ //开启调试框
96
+ //guidebook_root_panel.enableDebug()
97
+ //设置布局属性
98
+ guidebook_root_panel.setLayout(new Layout().setSize([320, 207]));
99
+ //添加子元素
100
+ guidebook_root_panel.addControls([
101
+ //添加背景
102
+ new UIElement("book_background", undefined, "book.book_background"),
103
+ //添加书页
104
+ new StackPanel("book_page_stack_panel").setOrientation("horizontal")
105
+ .setLayout(new Layout().setSize([320, 207]))
106
+ .addVariable("page_size", [160, 207])
107
+ .addStack("$page_size", new Panel("book_left_panel").addControls([
108
+ {
109
+ "page_crease_image@book.page_crease_left_image": {
110
+ "size": ["100% - 40px", "100% - 14px"],
111
+ "offset": [0, -2]
112
+ }
113
+ },
114
+ {
115
+ "page_edge_image@book.page_edge_left_image": {
116
+ "size": ["100% - 7px", "100% - 16px"],
117
+ "offset": [7, -1]
118
+ }
119
+ }
120
+ ]).serialize())
121
+ .addStack("$page_size", new Panel("book_right_panel").addControls([
122
+ {
123
+ "page_crease_image@book.page_crease_right_image": {
124
+ "size": ["100% - 40px", "100% - 14px"],
125
+ "offset": [0, -2]
126
+ }
127
+ },
128
+ {
129
+ "page_edge_image@book.page_edge_right_image": {
130
+ "size": ["100% - 7px", "100% - 16px"],
131
+ "offset": [-7, -1]
132
+ }
133
+ }
134
+ ]).serialize()),
135
+ //添加书页内容
136
+ new Panel("page_content_root")
137
+ .setControl(new Control().setLayer(5))
138
+ .setLayout(new Layout().setSize(["90%", "90%"]))
139
+ .addControls([
140
+ new Panel("label_text_panel").setLayout(new Layout().setSize([32, 8]).setAnchorFrom("bottom_middle")
141
+ .setAnchorTo("bottom_middle")).addControl(new Label("page_content").setText(new Text().setText("#form_text").setColor([0, 0, 0]))),
142
+ ...this.#bindingList.map(({ page_name, left_control_name, right_control_name }, index) => {
143
+ return new UIElement(`page_index_${index}`, undefined, "page_template")
144
+ .addVariable("binding_text", page_name)
145
+ .addVariable("page_left_content", left_control_name)
146
+ .addVariable("page_right_content", right_control_name);
147
+ })
148
+ /*
149
+ new UIElement("page_1",undefined,"page_template")
150
+ .addVariable("binding_text","page_index1")
151
+ .addVariable("page_left_content","page_left_content")
152
+ .addVariable("page_right_content","page_right_content"),
153
+ new UIElement("page_2",undefined,"page_template")
154
+ .addVariable("binding_text","page_index2")
155
+ .addVariable("page_left_content","page_left_content")
156
+ .addVariable("page_right_content","page_right_content"),
157
+ new UIElement("page_3",undefined,"page_template")
158
+ .addVariable("binding_text","page_index3")
159
+ .addVariable("page_left_content","page_left_content")
160
+ .addVariable("page_right_content","page_right_content")*/
161
+ ]),
162
+ //添加关闭按钮
163
+ new Button("close_button").setLayout(new Layout().setSize([14, 14])
164
+ .setAnchorFrom("top_right")
165
+ .setAnchorTo("top_right"))
166
+ .setInput(new Input().setButtonMappings([
167
+ new ButtonMapping().setMappingType("pressed")
168
+ .setFromButtonId("button.menu_select")
169
+ .setToButtonId("button.menu_exit")
170
+ ]))
171
+ .addControls([
172
+ new UIElement("default", undefined, "book.close_button_default"),
173
+ new UIElement("hover", undefined, "book.close_button_hover"),
174
+ new UIElement("pressed", undefined, "book.close_button_pressed"),
175
+ ]),
176
+ //添加下一页按钮
177
+ new Panel("prev_button_panel").enableDebug()
178
+ .setControl(new Control().setLayer(5))
179
+ .setLayout(new Layout().setSize([24, 24])
180
+ .setOffset([7, -9])
181
+ .setAnchorFrom("bottom_left")
182
+ .setAnchorTo("bottom_left"))
183
+ .addControl(new UIElement("prev_button", undefined, "form_button_factory")
184
+ .addVariable("binding_button_text", "test1")
185
+ .addVariable("button_control", `${this.system.namespace}.form_button_template`)
186
+ .addVariable("pressed_button_name", "button.form_button_click")
187
+ .addVariable("default_texture", "textures/ui/book_pageleft_default")
188
+ .addVariable("hover_texture", "textures/ui/book_pageleft_hover")
189
+ .addVariable("pressed_texture", "textures/ui/book_pageleft_pressed")),
190
+ new Panel("next_button_panel").enableDebug()
191
+ .setControl(new Control().setLayer(5))
192
+ .setLayout(new Layout().setSize([24, 24])
193
+ .setOffset([-7, -9])
194
+ .setAnchorFrom("bottom_right")
195
+ .setAnchorTo("bottom_right"))
196
+ .addControl(new UIElement("next_button", undefined, "form_button_factory")
197
+ .addVariable("binding_button_text", "test2")
198
+ .addVariable("button_control", "sapdon_guidebook.form_button_template")
199
+ .addVariable("pressed_button_name", "button.form_button_click")
200
+ .addVariable("default_texture", "textures/ui/book_pageright_default")
201
+ .addVariable("hover_texture", "textures/ui/book_pageright_hover")
202
+ .addVariable("pressed_texture", "textures/ui/book_pageright_pressed"))
203
+ ]);
204
+ this.addElement(guidebook_root_panel);
205
+ }
206
+ }
@@ -0,0 +1,13 @@
1
+ export const ServerFormSystem: UISystem;
2
+ export const form_button_panel: Panel;
3
+ export class ServerUISystem {
4
+ static "__#4@#binding_map": Map<any, any>;
5
+ static "__#4@#binding_title_list": any[];
6
+ static addBindingTitle(title_name: any): void;
7
+ static getBindingTitleList(): any[];
8
+ static getBindingContentList(): any[];
9
+ static bindingTitlewithContent(title_name: any, content: any): void;
10
+ static "__#4@#updateServerFormSystem"(): void;
11
+ }
12
+ import { UISystem } from "./system.js";
13
+ import { Panel } from "../elements/panel.js";
@@ -0,0 +1,116 @@
1
+ import { Modifications, UIElement } from "../elements/uiElement.js";
2
+ import { DataBindingObject } from "../dataBindingObject.js";
3
+ import { UISystem } from "./system.js";
4
+ import { Panel } from "../elements/panel.js";
5
+ import { Button } from "../elements/button.js";
6
+ import { Image } from "../elements/image.js";
7
+ import { Sprite } from "../properties/sprite.js";
8
+ export const ServerFormSystem = new UISystem("server_form:server_form", "ui/");
9
+ //表单按钮模板
10
+ const form_button_template = new Button("sapdon_form_button_template", "common.button");
11
+ form_button_template.addVariable("pressed_button_name", "button.form_button_click");
12
+ form_button_template.addVariable("default_texture|default", "textures/gui/newgui/buttons/borderless/light");
13
+ form_button_template.addVariable("hover_texture|default", "textures/gui/newgui/buttons/borderless/lighthover");
14
+ form_button_template.addVariable("pressed_texture|default", "textures/gui/newgui/buttons/borderless/lightpressed");
15
+ form_button_template.addVariable("binding_button_text|default", "");
16
+ form_button_template.dataBinding.addDataBinding(new DataBindingObject().setBindingType("collection_details")
17
+ .setBindingCollectionName("form_buttons"));
18
+ form_button_template.dataBinding.addDataBinding(new DataBindingObject().setBindingType("collection")
19
+ .setBindingCollectionName("form_buttons")
20
+ .setBindingName("#form_button_text"));
21
+ form_button_template.dataBinding.addDataBinding(new DataBindingObject().setBindingType("view")
22
+ .setSourcePropertyName("($binding_button_text = #form_button_text)")
23
+ .setTargetPropertyName("#visible"));
24
+ form_button_template.addControls([
25
+ new Image("default").setSprite(new Sprite().setTexture("$default_texture")),
26
+ new Image("hover").setSprite(new Sprite().setTexture("$hover_texture")),
27
+ new Image("pressed").setSprite(new Sprite().setTexture("$pressed_texture"))
28
+ ]);
29
+ //f
30
+ export const form_button_panel = new Panel("sapdon_form_button_factory");
31
+ form_button_panel.addProp("type", "collection_panel");
32
+ form_button_panel.factory.setName("buttons").setControlName("sapdon_form_button_template");
33
+ form_button_panel.addProp("collection_name", "form_buttons");
34
+ form_button_panel.dataBinding.addDataBinding(new DataBindingObject().setBindingName("#form_button_length")
35
+ .setBindingNameOverride("#collection_length"));
36
+ ServerFormSystem.addElement(form_button_template);
37
+ ServerFormSystem.addElement(form_button_panel);
38
+ export class ServerUISystem {
39
+ static #binding_map = new Map();
40
+ static #binding_title_list = [];
41
+ static addBindingTitle(title_name) {
42
+ this.#binding_title_list.push(title_name);
43
+ }
44
+ static getBindingTitleList() {
45
+ //console.log("arrr:",Array.from(this.#binding_map.keys()))
46
+ return this.#binding_title_list.concat(Array.from(this.#binding_map.keys()));
47
+ }
48
+ static getBindingContentList() {
49
+ return Array.from(this.#binding_map.values());
50
+ }
51
+ static bindingTitlewithContent(title_name, content) {
52
+ //添加绑定
53
+ this.#binding_map.set(title_name, content);
54
+ this.#updateServerFormSystem();
55
+ }
56
+ static #updateServerFormSystem() {
57
+ //文本化处理
58
+ //console.log("ttttt:",this.getBindingTitleList())
59
+ const user_custom_ui_text = this.getBindingTitleList().map((title_name) => {
60
+ console.log("title_name", title_name);
61
+ return `'${title_name}'`;
62
+ }).join('-');
63
+ const long_form = new UIElement("long_form")
64
+ .addModification({
65
+ array_name: "bindings",
66
+ operation: Modifications.OPERATION.INSERT_BACK,
67
+ value: [
68
+ new DataBindingObject().setBindingName("#title_text"),
69
+ new DataBindingObject().setBindingType("view")
70
+ .setSourcePropertyName(`((#title_text - ${user_custom_ui_text}) = #title_text)`)
71
+ .setTargetPropertyName("#visible")
72
+ ]
73
+ });
74
+ const custom_server_form_factory = new Panel("custom_server_form_factory");
75
+ custom_server_form_factory.factory.setName("server_form_factory") //工程名被绑定至表单,不可改动
76
+ .setControlIds({ "long_form": "@server_form.custom_root_panel" });
77
+ //加入自定义表单内容
78
+ const main_screen_content = new UIElement("main_screen_content")
79
+ .addModification({
80
+ array_name: "controls",
81
+ operation: Modifications.OPERATION.INSERT_BACK,
82
+ value: [
83
+ custom_server_form_factory.serialize()
84
+ ]
85
+ });
86
+ //自定义ui模板
87
+ const custom_ui_template = new Panel("custom_ui_template");
88
+ custom_ui_template.dataBinding.addDataBinding(new DataBindingObject().setBindingName("#title_text")).addDataBinding(new DataBindingObject().setBindingType("view")
89
+ .setSourcePropertyName("(#title_text = $binding_text)")
90
+ .setTargetPropertyName("#visible"));
91
+ custom_ui_template.control.addControl(new UIElement("main", undefined, "$main_content").serialize());
92
+ //类似于 root ,决定什么时候加载自定义界面 ,不可改动
93
+ const custom_form_root = new Panel("custom_form_root");
94
+ //custom_form_root.addVariable("title_needs_to_contain",user_custom_ui_text)
95
+ custom_form_root.dataBinding.addDataBinding(new DataBindingObject().setBindingType("view")
96
+ .setSourceControlName("custom_root_panel")
97
+ .setSourcePropertyName(`(not ((#title_text - ${user_custom_ui_text}) = #title_text))`)
98
+ .setTargetPropertyName("#visible"));
99
+ //用户自定义ui内容绑定
100
+ this.#binding_map.forEach((content, key) => {
101
+ //加入 root
102
+ custom_form_root.control.addControl(new UIElement("custom_ui_" + key, undefined, "custom_ui_template")
103
+ .addVariable("main_content", content)
104
+ .addVariable("binding_text", key).serialize());
105
+ });
106
+ //类似于 sreen,必要,不可改动
107
+ const custom_root_panel = new Panel("custom_root_panel");
108
+ custom_root_panel.dataBinding.addDataBinding(new DataBindingObject().setBindingName("#title_text"));
109
+ custom_root_panel.control.addControl(custom_form_root.serialize());
110
+ ServerFormSystem
111
+ .addElement(custom_ui_template)
112
+ .addElement(long_form)
113
+ .addElement(custom_root_panel)
114
+ .addElement(main_screen_content);
115
+ }
116
+ }
@@ -0,0 +1,16 @@
1
+ export class UISystem {
2
+ constructor(identifier: any, path: any);
3
+ identifier: any;
4
+ namespace: any;
5
+ name: any;
6
+ path: any;
7
+ elements: Map<any, any>;
8
+ animations: Map<any, any>;
9
+ addElement(element: any): this;
10
+ getElement(element_name: any): any;
11
+ addAnimation(name: any, value: any): void;
12
+ getAnimation(animation_name: any): any;
13
+ toJson(): {
14
+ namespace: any;
15
+ };
16
+ }
@@ -0,0 +1,37 @@
1
+ import { UISystemRegistry } from "../registry/uiSystemRegistry.js";
2
+ // UI 文件核心类
3
+ export class UISystem {
4
+ constructor(identifier, path) {
5
+ this.identifier = identifier;
6
+ this.namespace = identifier.split(':')[0];
7
+ this.name = identifier.split(':')[1];
8
+ this.path = path;
9
+ this.elements = new Map();
10
+ this.animations = new Map();
11
+ UISystemRegistry.registerUISystem(this);
12
+ }
13
+ addElement(element) {
14
+ this.elements.set(element.id, element);
15
+ return this;
16
+ }
17
+ getElement(element_name) {
18
+ return this.elements.get(element_name);
19
+ }
20
+ addAnimation(name, value) {
21
+ this.animations.set(name, value);
22
+ }
23
+ getAnimation(animation_name) {
24
+ return this.animations.get(animation_name);
25
+ }
26
+ toJson() {
27
+ const ui = { namespace: this.namespace };
28
+ //序列化
29
+ this.elements.forEach((value, key) => {
30
+ //console.log("elements key:",key)
31
+ //console.log("elements value:",value);
32
+ ui[key] = value.serialize()[value.id];
33
+ });
34
+ //console.log("ui:",ui)
35
+ return ui;
36
+ }
37
+ }
@@ -0,0 +1,44 @@
1
+ export class Actor {
2
+ target;
3
+ manager;
4
+ constructor(target, manager) {
5
+ this.target = target;
6
+ this.manager = manager;
7
+ }
8
+ static from(target, manager) {
9
+ return new Actor(target, manager);
10
+ }
11
+ /**
12
+ * 优先使用 `Actor.getComponent`
13
+ * @param ctors
14
+ * @returns
15
+ */
16
+ getMinecraftComponent(...ids) {
17
+ return ids.map(id => this.target.getComponent(id));
18
+ }
19
+ /**
20
+ * 优先使用 `Actor.getComponent`
21
+ * @param ctors
22
+ * @returns
23
+ */
24
+ getCustomComponent(...ctors) {
25
+ return this.manager.getComponents(...ctors);
26
+ }
27
+ getComponent(...descs) {
28
+ return descs.map(desc => {
29
+ if (typeof desc === 'string') {
30
+ return this.target.getComponent(desc);
31
+ }
32
+ return this.manager.getComponentUnsafe(desc);
33
+ });
34
+ }
35
+ addComponent(...components) {
36
+ return this.manager.attachComponent(...components);
37
+ }
38
+ removeComponent(ctor) {
39
+ return this.manager.detachComponent(ctor);
40
+ }
41
+ updateComponent(ctor, fn) {
42
+ return this.manager.update(ctor, fn);
43
+ }
44
+ }
@@ -0,0 +1,201 @@
1
+ import { system, world } from '@minecraft/server';
2
+ import { Optional } from './optional.js';
3
+ const REFLECT_MANAGER = Symbol('reflect-manager');
4
+ const REFLECT_ENTITY = Symbol('reflect-entity');
5
+ export class CustomComponent {
6
+ [REFLECT_MANAGER];
7
+ [REFLECT_ENTITY] = Optional.none();
8
+ onTick(manager, en) { }
9
+ detach(manager) {
10
+ const ctor = Object.getPrototypeOf(this).constructor;
11
+ return manager.detachComponent(ctor);
12
+ }
13
+ getManager() {
14
+ return this[REFLECT_MANAGER];
15
+ }
16
+ getEntity() {
17
+ return this[REFLECT_ENTITY];
18
+ }
19
+ }
20
+ export class BaseComponent extends CustomComponent {
21
+ onAttach(manager) { }
22
+ onDetach(manager) { }
23
+ }
24
+ export class ComponentManager {
25
+ static profilerEnable = false;
26
+ static global = new ComponentManager();
27
+ #components = new Map();
28
+ #prependTicks = [];
29
+ #nextTicks = [];
30
+ getComponentUnsafe(ctor) {
31
+ return this.#components.get(ctor);
32
+ }
33
+ getComponent(ctor) {
34
+ return Optional.some(this.#components.get(ctor));
35
+ }
36
+ getComponents(...ctor) {
37
+ return ctor.map(c => this.#components.get(c));
38
+ }
39
+ async #attachComponent(ctor, component, shouldRebuild = true) {
40
+ let init = !this.#components.get(ctor);
41
+ if (!init && shouldRebuild) {
42
+ await this.detachComponent(ctor);
43
+ init = true;
44
+ }
45
+ if (REQUIRED_COMPONENTS in component) {
46
+ //@ts-ignore
47
+ for (const [ctor, comp] of component[REQUIRED_COMPONENTS]) {
48
+ this.#attachComponent(ctor, comp, false);
49
+ }
50
+ }
51
+ if (init && 'onAttach' in component) {
52
+ await component.onAttach(this);
53
+ }
54
+ this.#components.set(ctor, component);
55
+ return Optional.some(component);
56
+ }
57
+ async attachComponent(...component) {
58
+ const components = [];
59
+ for (const obj of component) {
60
+ components.push(await this.#attachComponent(Object.getPrototypeOf(obj).constructor, obj));
61
+ }
62
+ return components;
63
+ }
64
+ async getOrCreate(ctor, ...args) {
65
+ let component = this.#components.get(ctor);
66
+ if (component) {
67
+ return Optional.some(component);
68
+ }
69
+ return this.#attachComponent(ctor, new ctor(...args));
70
+ }
71
+ async detachComponent(ctor) {
72
+ const component = this.#components.get(ctor);
73
+ if (component && 'onDetach' in component) {
74
+ await component.onDetach(this);
75
+ }
76
+ return this.#components.delete(ctor);
77
+ }
78
+ clear() {
79
+ this.#components.clear();
80
+ }
81
+ getComponentKeys() {
82
+ return this.#components.keys();
83
+ }
84
+ has(ctor) {
85
+ return this.#components.has(ctor);
86
+ }
87
+ afterTick(fn) {
88
+ this.#nextTicks.push(fn);
89
+ }
90
+ beforeTick(fn) {
91
+ this.#prependTicks.unshift(fn);
92
+ }
93
+ handleTicks(en) {
94
+ for (const prependTick of this.#prependTicks) {
95
+ this.profiler(() => prependTick.call(null, Optional.some(en)));
96
+ // prependTick.call(null, Optional.some(en))
97
+ }
98
+ this.#prependTicks.length = 0;
99
+ for (const component of this.#components.values()) {
100
+ //@ts-ignore
101
+ if (!component[REFLECT_ENTITY]) {
102
+ //@ts-ignore
103
+ component[REFLECT_ENTITY] = Optional.some(en);
104
+ }
105
+ //@ts-ignore
106
+ if (!component[REFLECT_MANAGER]) {
107
+ //@ts-ignore
108
+ component[REFLECT_MANAGER] = this;
109
+ }
110
+ const { onTick } = component;
111
+ if (onTick) {
112
+ this.profiler(() => onTick.call(component, this, Optional.some(en)), component);
113
+ // onTick.call(component, this, Optional.some(en))
114
+ }
115
+ }
116
+ for (const afterTick of this.#nextTicks) {
117
+ this.profiler(() => afterTick.call(null, Optional.some(en)));
118
+ // afterTick.call(null, Optional.some(en))
119
+ }
120
+ this.#nextTicks.length = 0;
121
+ }
122
+ update(ctor, fn) {
123
+ const component = this.#components.get(ctor);
124
+ if (component) {
125
+ fn(component);
126
+ return true;
127
+ }
128
+ return false;
129
+ }
130
+ profiler(fn, component, name) {
131
+ if (!ComponentManager.profilerEnable) {
132
+ return fn();
133
+ }
134
+ const conponentName = component ? Object.getPrototypeOf(component).constructor.name : '';
135
+ const profileName = name ? name
136
+ : conponentName ? (`${conponentName}.${fn.name}`)
137
+ : fn.name;
138
+ const now = performance.now();
139
+ const val = fn();
140
+ console.log(`[Profiler] ${profileName} took ${performance.now() - now}ms`);
141
+ return val;
142
+ }
143
+ }
144
+ const REQUIRED_COMPONENTS = Symbol('REQUIRED_COMPONENTS');
145
+ export function RequireComponents(...params) {
146
+ return class CRequiredComponent extends BaseComponent {
147
+ [REQUIRED_COMPONENTS] = new Map();
148
+ constructor() {
149
+ super();
150
+ for (const param of params) {
151
+ if (Array.isArray(param)) {
152
+ const [Ctor, ...args] = param;
153
+ this[REQUIRED_COMPONENTS].set(Ctor, Reflect.construct(Ctor, args));
154
+ continue;
155
+ }
156
+ this[REQUIRED_COMPONENTS].set(param, Reflect.construct(param, []));
157
+ }
158
+ }
159
+ getComponent(ctor) {
160
+ return this[REQUIRED_COMPONENTS].get(ctor);
161
+ }
162
+ };
163
+ }
164
+ export var oc;
165
+ (function (oc) {
166
+ const table = new Map();
167
+ function addEntity(entityId) {
168
+ const manager = new ComponentManager();
169
+ table.set(entityId, manager);
170
+ return manager;
171
+ }
172
+ oc.addEntity = addEntity;
173
+ function removeEntity(entityId) {
174
+ const uid = entityId;
175
+ const manager = table.get(uid);
176
+ manager?.clear();
177
+ table.delete(uid);
178
+ }
179
+ oc.removeEntity = removeEntity;
180
+ function getManager(entityId) {
181
+ return table.get(entityId) ?? addEntity(entityId);
182
+ }
183
+ oc.getManager = getManager;
184
+ function tick() {
185
+ for (const [id, manager] of table.entries()) {
186
+ const entity = world.getEntity(id);
187
+ if (entity) {
188
+ manager.handleTicks(entity);
189
+ }
190
+ }
191
+ }
192
+ oc.tick = tick;
193
+ function start() {
194
+ system.runInterval(tick);
195
+ }
196
+ oc.start = start;
197
+ function toPlayer(entity) {
198
+ return Optional.some(world.getAllPlayers().find(p => p.id === entity.id));
199
+ }
200
+ oc.toPlayer = toPlayer;
201
+ })(oc || (oc = {}));