redscript-mc 3.0.1 → 3.0.2

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 (225) hide show
  1. package/.github/workflows/ci.yml +1 -0
  2. package/README.md +119 -313
  3. package/README.zh.md +118 -314
  4. package/ROADMAP.md +5 -5
  5. package/dist/data/impl_test/function/counter/get.mcfunction +5 -0
  6. package/dist/data/impl_test/function/counter/inc.mcfunction +7 -0
  7. package/dist/data/impl_test/function/counter/new.mcfunction +4 -0
  8. package/dist/data/impl_test/function/load.mcfunction +1 -0
  9. package/dist/data/impl_test/function/test_impl.mcfunction +10 -0
  10. package/dist/data/minecraft/tags/function/load.json +5 -0
  11. package/dist/data/playground/function/load.mcfunction +1 -0
  12. package/dist/data/playground/function/start.mcfunction +4 -0
  13. package/dist/data/playground/function/start__say_macro_t1.mcfunction +1 -0
  14. package/dist/data/playground/function/stop.mcfunction +5 -0
  15. package/dist/data/playground/function/stop__say_macro_t0.mcfunction +1 -0
  16. package/dist/data/stdlib_queue8_test/function/__queue_append_apply.mcfunction +4 -0
  17. package/dist/data/stdlib_queue8_test/function/__queue_peek_apply.mcfunction +4 -0
  18. package/dist/data/stdlib_queue8_test/function/__queue_size_raw_apply.mcfunction +4 -0
  19. package/dist/data/stdlib_queue8_test/function/load.mcfunction +1 -0
  20. package/dist/data/stdlib_queue8_test/function/queue_clear.mcfunction +6 -0
  21. package/dist/data/stdlib_queue8_test/function/queue_empty__merge_1.mcfunction +5 -0
  22. package/dist/data/stdlib_queue8_test/function/queue_empty__then_0.mcfunction +5 -0
  23. package/dist/data/stdlib_queue8_test/function/queue_peek__merge_1.mcfunction +13 -0
  24. package/dist/data/stdlib_queue8_test/function/queue_peek__then_0.mcfunction +5 -0
  25. package/dist/data/stdlib_queue8_test/function/queue_pop__merge_1.mcfunction +15 -0
  26. package/dist/data/stdlib_queue8_test/function/queue_pop__then_0.mcfunction +5 -0
  27. package/dist/data/stdlib_queue8_test/function/queue_push__const_11.mcfunction +6 -0
  28. package/dist/data/stdlib_queue8_test/function/queue_push__const_22.mcfunction +6 -0
  29. package/dist/data/stdlib_queue8_test/function/queue_size.mcfunction +13 -0
  30. package/dist/data/stdlib_queue8_test/function/test_queue_push_and_size.mcfunction +13 -0
  31. package/dist/data/test/function/load.mcfunction +1 -0
  32. package/dist/data/test/function/say_at.mcfunction +6 -0
  33. package/dist/data/test/function/test.mcfunction +4 -0
  34. package/dist/pack.mcmeta +6 -0
  35. package/dist/package.json +1 -1
  36. package/dist/src/__tests__/formatter-extra.test.d.ts +7 -0
  37. package/dist/src/__tests__/formatter-extra.test.js +123 -0
  38. package/dist/src/__tests__/global-vars.test.d.ts +13 -0
  39. package/dist/src/__tests__/global-vars.test.js +156 -0
  40. package/dist/src/__tests__/lint/new-rules.test.d.ts +9 -0
  41. package/dist/src/__tests__/lint/new-rules.test.js +402 -0
  42. package/dist/src/__tests__/lsp-rename.test.d.ts +8 -0
  43. package/dist/src/__tests__/lsp-rename.test.js +157 -0
  44. package/dist/src/__tests__/mc-integration/say-fstring.test.d.ts +11 -0
  45. package/dist/src/__tests__/mc-integration/say-fstring.test.js +220 -0
  46. package/dist/src/__tests__/mc-integration/stdlib-coverage-2.test.js +1 -1
  47. package/dist/src/__tests__/mc-integration/stdlib-coverage-3.test.js +1 -1
  48. package/dist/src/__tests__/mc-integration/stdlib-coverage-4.test.js +1 -1
  49. package/dist/src/__tests__/mc-integration/stdlib-coverage-5.test.js +1 -1
  50. package/dist/src/__tests__/mc-integration/stdlib-coverage-6.test.js +1 -1
  51. package/dist/src/__tests__/mc-integration/stdlib-coverage-7.test.js +1 -1
  52. package/dist/src/__tests__/mc-integration/stdlib-coverage-8.test.js +1 -1
  53. package/dist/src/__tests__/mc-syntax.test.js +4 -1
  54. package/dist/src/__tests__/monomorphize-coverage.test.d.ts +9 -0
  55. package/dist/src/__tests__/monomorphize-coverage.test.js +204 -0
  56. package/dist/src/__tests__/optimizer-cse.test.d.ts +7 -0
  57. package/dist/src/__tests__/optimizer-cse.test.js +226 -0
  58. package/dist/src/__tests__/parser.test.js +4 -13
  59. package/dist/src/__tests__/repl-server-extra.test.js +6 -7
  60. package/dist/src/__tests__/repl-server.test.js +5 -7
  61. package/dist/src/__tests__/stdlib/queue.test.js +6 -6
  62. package/dist/src/cli.js +0 -0
  63. package/dist/src/lexer/index.js +2 -1
  64. package/dist/src/lint/index.d.ts +12 -5
  65. package/dist/src/lint/index.js +730 -5
  66. package/dist/src/lsp/main.js +0 -0
  67. package/dist/src/mc-test/client.d.ts +21 -0
  68. package/dist/src/mc-test/client.js +34 -0
  69. package/dist/src/mir/lower.js +108 -6
  70. package/dist/src/optimizer/interprocedural.js +37 -2
  71. package/dist/src/parser/decl-parser.d.ts +19 -0
  72. package/dist/src/parser/decl-parser.js +323 -0
  73. package/dist/src/parser/expr-parser.d.ts +46 -0
  74. package/dist/src/parser/expr-parser.js +759 -0
  75. package/dist/src/parser/index.d.ts +8 -129
  76. package/dist/src/parser/index.js +13 -2262
  77. package/dist/src/parser/stmt-parser.d.ts +28 -0
  78. package/dist/src/parser/stmt-parser.js +577 -0
  79. package/dist/src/parser/type-parser.d.ts +20 -0
  80. package/dist/src/parser/type-parser.js +257 -0
  81. package/dist/src/parser/utils.d.ts +34 -0
  82. package/dist/src/parser/utils.js +141 -0
  83. package/docs/dev/README-mc-integration-tests.md +141 -0
  84. package/docs/lint-rules.md +162 -0
  85. package/docs/stdlib/bigint.md +2 -0
  86. package/editors/vscode/README.md +63 -41
  87. package/editors/vscode/out/extension.js +1881 -1776
  88. package/editors/vscode/out/lsp-server.js +4257 -3651
  89. package/editors/vscode/package-lock.json +3 -3
  90. package/editors/vscode/package.json +1 -1
  91. package/examples/loops-demo.mcrs +87 -0
  92. package/package.json +1 -1
  93. package/redscript-docs/docs/en/stdlib/advanced.md +629 -0
  94. package/redscript-docs/docs/en/stdlib/bigint.md +316 -0
  95. package/redscript-docs/docs/en/stdlib/bits.md +292 -0
  96. package/redscript-docs/docs/en/stdlib/bossbar.md +177 -0
  97. package/redscript-docs/docs/en/stdlib/calculus.md +289 -0
  98. package/redscript-docs/docs/en/stdlib/color.md +353 -0
  99. package/redscript-docs/docs/en/stdlib/combat.md +88 -0
  100. package/redscript-docs/docs/en/stdlib/cooldown.md +82 -0
  101. package/redscript-docs/docs/en/stdlib/dialog.md +155 -0
  102. package/redscript-docs/docs/en/stdlib/easing.md +558 -0
  103. package/redscript-docs/docs/en/stdlib/ecs.md +475 -0
  104. package/redscript-docs/docs/en/stdlib/effects.md +324 -0
  105. package/redscript-docs/docs/en/stdlib/events.md +3 -0
  106. package/redscript-docs/docs/en/stdlib/expr.md +45 -0
  107. package/redscript-docs/docs/en/stdlib/fft.md +141 -0
  108. package/redscript-docs/docs/en/stdlib/geometry.md +430 -0
  109. package/redscript-docs/docs/en/stdlib/graph.md +259 -0
  110. package/redscript-docs/docs/en/stdlib/heap.md +185 -0
  111. package/redscript-docs/docs/en/stdlib/interactions.md +179 -0
  112. package/redscript-docs/docs/en/stdlib/inventory.md +97 -0
  113. package/redscript-docs/docs/en/stdlib/linalg.md +557 -0
  114. package/redscript-docs/docs/en/stdlib/list.md +559 -0
  115. package/redscript-docs/docs/en/stdlib/map.md +140 -0
  116. package/redscript-docs/docs/en/stdlib/math.md +193 -0
  117. package/redscript-docs/docs/en/stdlib/math_hp.md +149 -0
  118. package/redscript-docs/docs/en/stdlib/matrix.md +403 -0
  119. package/redscript-docs/docs/en/stdlib/mobs.md +965 -0
  120. package/redscript-docs/docs/en/stdlib/noise.md +244 -0
  121. package/redscript-docs/docs/en/stdlib/ode.md +253 -0
  122. package/redscript-docs/docs/en/stdlib/parabola.md +342 -0
  123. package/redscript-docs/docs/en/stdlib/particles.md +311 -0
  124. package/redscript-docs/docs/en/stdlib/pathfind.md +255 -0
  125. package/redscript-docs/docs/en/stdlib/physics.md +493 -0
  126. package/redscript-docs/docs/en/stdlib/player.md +78 -0
  127. package/redscript-docs/docs/en/stdlib/quaternion.md +673 -0
  128. package/redscript-docs/docs/en/stdlib/queue.md +134 -0
  129. package/redscript-docs/docs/en/stdlib/random.md +223 -0
  130. package/redscript-docs/docs/en/stdlib/result.md +143 -0
  131. package/redscript-docs/docs/en/stdlib/scheduler.md +183 -0
  132. package/redscript-docs/docs/en/stdlib/set_int.md +190 -0
  133. package/redscript-docs/docs/en/stdlib/sets.md +101 -0
  134. package/redscript-docs/docs/en/stdlib/signal.md +400 -0
  135. package/redscript-docs/docs/en/stdlib/sort.md +104 -0
  136. package/redscript-docs/docs/en/stdlib/spawn.md +147 -0
  137. package/redscript-docs/docs/en/stdlib/state.md +142 -0
  138. package/redscript-docs/docs/en/stdlib/strings.md +154 -0
  139. package/redscript-docs/docs/en/stdlib/tags.md +3451 -0
  140. package/redscript-docs/docs/en/stdlib/teams.md +153 -0
  141. package/redscript-docs/docs/en/stdlib/timer.md +246 -0
  142. package/redscript-docs/docs/en/stdlib/vec.md +158 -0
  143. package/redscript-docs/docs/en/stdlib/world.md +298 -0
  144. package/redscript-docs/docs/zh/stdlib/advanced.md +615 -0
  145. package/redscript-docs/docs/zh/stdlib/bigint.md +316 -0
  146. package/redscript-docs/docs/zh/stdlib/bits.md +292 -0
  147. package/redscript-docs/docs/zh/stdlib/bossbar.md +170 -0
  148. package/redscript-docs/docs/zh/stdlib/calculus.md +287 -0
  149. package/redscript-docs/docs/zh/stdlib/color.md +353 -0
  150. package/redscript-docs/docs/zh/stdlib/combat.md +88 -0
  151. package/redscript-docs/docs/zh/stdlib/cooldown.md +84 -0
  152. package/redscript-docs/docs/zh/stdlib/dialog.md +152 -0
  153. package/redscript-docs/docs/zh/stdlib/easing.md +558 -0
  154. package/redscript-docs/docs/zh/stdlib/ecs.md +472 -0
  155. package/redscript-docs/docs/zh/stdlib/effects.md +324 -0
  156. package/redscript-docs/docs/zh/stdlib/events.md +3 -0
  157. package/redscript-docs/docs/zh/stdlib/expr.md +37 -0
  158. package/redscript-docs/docs/zh/stdlib/fft.md +128 -0
  159. package/redscript-docs/docs/zh/stdlib/geometry.md +430 -0
  160. package/redscript-docs/docs/zh/stdlib/graph.md +259 -0
  161. package/redscript-docs/docs/zh/stdlib/heap.md +185 -0
  162. package/redscript-docs/docs/zh/stdlib/interactions.md +160 -0
  163. package/redscript-docs/docs/zh/stdlib/inventory.md +94 -0
  164. package/redscript-docs/docs/zh/stdlib/linalg.md +543 -0
  165. package/redscript-docs/docs/zh/stdlib/list.md +561 -0
  166. package/redscript-docs/docs/zh/stdlib/map.md +132 -0
  167. package/redscript-docs/docs/zh/stdlib/math.md +193 -0
  168. package/redscript-docs/docs/zh/stdlib/math_hp.md +143 -0
  169. package/redscript-docs/docs/zh/stdlib/matrix.md +396 -0
  170. package/redscript-docs/docs/zh/stdlib/mobs.md +965 -0
  171. package/redscript-docs/docs/zh/stdlib/noise.md +244 -0
  172. package/redscript-docs/docs/zh/stdlib/ode.md +243 -0
  173. package/redscript-docs/docs/zh/stdlib/parabola.md +337 -0
  174. package/redscript-docs/docs/zh/stdlib/particles.md +307 -0
  175. package/redscript-docs/docs/zh/stdlib/pathfind.md +255 -0
  176. package/redscript-docs/docs/zh/stdlib/physics.md +493 -0
  177. package/redscript-docs/docs/zh/stdlib/player.md +78 -0
  178. package/redscript-docs/docs/zh/stdlib/quaternion.md +669 -0
  179. package/redscript-docs/docs/zh/stdlib/queue.md +124 -0
  180. package/redscript-docs/docs/zh/stdlib/random.md +222 -0
  181. package/redscript-docs/docs/zh/stdlib/result.md +147 -0
  182. package/redscript-docs/docs/zh/stdlib/scheduler.md +173 -0
  183. package/redscript-docs/docs/zh/stdlib/set_int.md +180 -0
  184. package/redscript-docs/docs/zh/stdlib/sets.md +107 -0
  185. package/redscript-docs/docs/zh/stdlib/signal.md +373 -0
  186. package/redscript-docs/docs/zh/stdlib/sort.md +104 -0
  187. package/redscript-docs/docs/zh/stdlib/spawn.md +142 -0
  188. package/redscript-docs/docs/zh/stdlib/state.md +134 -0
  189. package/redscript-docs/docs/zh/stdlib/strings.md +107 -0
  190. package/redscript-docs/docs/zh/stdlib/tags.md +3451 -0
  191. package/redscript-docs/docs/zh/stdlib/teams.md +150 -0
  192. package/redscript-docs/docs/zh/stdlib/timer.md +254 -0
  193. package/redscript-docs/docs/zh/stdlib/vec.md +158 -0
  194. package/redscript-docs/docs/zh/stdlib/world.md +289 -0
  195. package/src/__tests__/formatter-extra.test.ts +139 -0
  196. package/src/__tests__/global-vars.test.ts +171 -0
  197. package/src/__tests__/lint/new-rules.test.ts +437 -0
  198. package/src/__tests__/lsp-rename.test.ts +171 -0
  199. package/src/__tests__/mc-integration/say-fstring.test.ts +211 -0
  200. package/src/__tests__/mc-integration/stdlib-coverage-2.test.ts +1 -1
  201. package/src/__tests__/mc-integration/stdlib-coverage-3.test.ts +1 -1
  202. package/src/__tests__/mc-integration/stdlib-coverage-4.test.ts +1 -1
  203. package/src/__tests__/mc-integration/stdlib-coverage-5.test.ts +1 -1
  204. package/src/__tests__/mc-integration/stdlib-coverage-6.test.ts +1 -1
  205. package/src/__tests__/mc-integration/stdlib-coverage-7.test.ts +1 -1
  206. package/src/__tests__/mc-integration/stdlib-coverage-8.test.ts +1 -1
  207. package/src/__tests__/mc-syntax.test.ts +3 -0
  208. package/src/__tests__/monomorphize-coverage.test.ts +220 -0
  209. package/src/__tests__/optimizer-cse.test.ts +250 -0
  210. package/src/__tests__/parser.test.ts +4 -13
  211. package/src/__tests__/repl-server-extra.test.ts +6 -6
  212. package/src/__tests__/repl-server.test.ts +5 -6
  213. package/src/__tests__/stdlib/queue.test.ts +6 -6
  214. package/src/lexer/index.ts +2 -1
  215. package/src/lint/index.ts +713 -5
  216. package/src/mc-test/client.ts +40 -0
  217. package/src/mir/lower.ts +111 -2
  218. package/src/optimizer/interprocedural.ts +40 -2
  219. package/src/parser/decl-parser.ts +349 -0
  220. package/src/parser/expr-parser.ts +838 -0
  221. package/src/parser/index.ts +17 -2558
  222. package/src/parser/stmt-parser.ts +585 -0
  223. package/src/parser/type-parser.ts +276 -0
  224. package/src/parser/utils.ts +173 -0
  225. package/src/stdlib/queue.mcrs +19 -6
@@ -0,0 +1,559 @@
1
+ # List
2
+
3
+ > Auto-generated from `src/stdlib/list.mcrs` — do not edit manually.
4
+
5
+ ## API
6
+
7
+ - [sort2_min](#sort2-min)
8
+ - [sort2_max](#sort2-max)
9
+ - [list_min3](#list-min3)
10
+ - [list_max3](#list-max3)
11
+ - [list_min5](#list-min5)
12
+ - [list_max5](#list-max5)
13
+ - [list_sum5](#list-sum5)
14
+ - [list_sum4](#list-sum4)
15
+ - [list_sum3](#list-sum3)
16
+ - [avg3](#avg3)
17
+ - [avg5](#avg5)
18
+ - [sort3](#sort3)
19
+ - [weighted2](#weighted2)
20
+ - [weighted3](#weighted3)
21
+ - [sort4](#sort4)
22
+ - [sort5](#sort5)
23
+ - [list_sort_asc](#list-sort-asc)
24
+ - [list_sort_desc](#list-sort-desc)
25
+ - [list_sum](#list-sum)
26
+ - [list_avg](#list-avg)
27
+ - [list_min](#list-min)
28
+ - [list_max](#list-max)
29
+ - [list_contains](#list-contains)
30
+ - [list_index_of](#list-index-of)
31
+ - [list_shuffle](#list-shuffle)
32
+ - [list_dedup_count](#list-dedup-count)
33
+
34
+ ---
35
+
36
+ ## `sort2_min` <Badge type="info" text="v1.0.0" />
37
+
38
+ Return the smaller of two integers.
39
+
40
+ ```redscript
41
+ fn sort2_min(a: int, b: int): int
42
+ ```
43
+
44
+ **Parameters**
45
+
46
+ | Parameter | Description |
47
+ |-----------|-------------|
48
+ | `a` | First value |
49
+ | `b` | Second value |
50
+
51
+ **Returns:** a if a ≤ b, otherwise b
52
+
53
+ ---
54
+
55
+ ## `sort2_max` <Badge type="info" text="v1.0.0" />
56
+
57
+ Return the larger of two integers.
58
+
59
+ ```redscript
60
+ fn sort2_max(a: int, b: int): int
61
+ ```
62
+
63
+ **Parameters**
64
+
65
+ | Parameter | Description |
66
+ |-----------|-------------|
67
+ | `a` | First value |
68
+ | `b` | Second value |
69
+
70
+ **Returns:** a if a ≥ b, otherwise b
71
+
72
+ ---
73
+
74
+ ## `list_min3` <Badge type="info" text="v1.0.0" />
75
+
76
+ Minimum of three integers.
77
+
78
+ ```redscript
79
+ fn list_min3(a: int, b: int, c: int): int
80
+ ```
81
+
82
+ **Parameters**
83
+
84
+ | Parameter | Description |
85
+ |-----------|-------------|
86
+ | `a` | First value |
87
+ | `b` | Second value |
88
+ | `c` | Third value |
89
+
90
+ **Returns:** The smallest of a, b, c
91
+
92
+ ---
93
+
94
+ ## `list_max3` <Badge type="info" text="v1.0.0" />
95
+
96
+ Maximum of three integers.
97
+
98
+ ```redscript
99
+ fn list_max3(a: int, b: int, c: int): int
100
+ ```
101
+
102
+ **Parameters**
103
+
104
+ | Parameter | Description |
105
+ |-----------|-------------|
106
+ | `a` | First value |
107
+ | `b` | Second value |
108
+ | `c` | Third value |
109
+
110
+ **Returns:** The largest of a, b, c
111
+
112
+ ---
113
+
114
+ ## `list_min5` <Badge type="info" text="v1.0.0" />
115
+
116
+ Minimum of five integers.
117
+
118
+ ```redscript
119
+ fn list_min5(a: int, b: int, c: int, d: int, e: int): int
120
+ ```
121
+
122
+ **Parameters**
123
+
124
+ | Parameter | Description |
125
+ |-----------|-------------|
126
+ | `a` | Value 1 |
127
+ | `b` | Value 2 |
128
+ | `c` | Value 3 |
129
+ | `d` | Value 4 |
130
+ | `e` | Value 5 |
131
+
132
+ **Returns:** The smallest of the five inputs
133
+
134
+ ---
135
+
136
+ ## `list_max5` <Badge type="info" text="v1.0.0" />
137
+
138
+ Maximum of five integers.
139
+
140
+ ```redscript
141
+ fn list_max5(a: int, b: int, c: int, d: int, e: int): int
142
+ ```
143
+
144
+ **Parameters**
145
+
146
+ | Parameter | Description |
147
+ |-----------|-------------|
148
+ | `a` | Value 1 |
149
+ | `b` | Value 2 |
150
+ | `c` | Value 3 |
151
+ | `d` | Value 4 |
152
+ | `e` | Value 5 |
153
+
154
+ **Returns:** The largest of the five inputs
155
+
156
+ ---
157
+
158
+ ## `list_sum5` <Badge type="info" text="v1.0.0" />
159
+
160
+ Sum of five integers.
161
+
162
+ ```redscript
163
+ fn list_sum5(a: int, b: int, c: int, d: int, e: int): int
164
+ ```
165
+
166
+ **Parameters**
167
+
168
+ | Parameter | Description |
169
+ |-----------|-------------|
170
+ | `a` | Value 1 |
171
+ | `b` | Value 2 |
172
+ | `c` | Value 3 |
173
+ | `d` | Value 4 |
174
+ | `e` | Value 5 |
175
+
176
+ **Returns:** a + b + c + d + e
177
+
178
+ ---
179
+
180
+ ## `list_sum4` <Badge type="info" text="v1.0.0" />
181
+
182
+ Sum of four integers.
183
+
184
+ ```redscript
185
+ fn list_sum4(a: int, b: int, c: int, d: int): int
186
+ ```
187
+
188
+ **Parameters**
189
+
190
+ | Parameter | Description |
191
+ |-----------|-------------|
192
+ | `a` | Value 1 |
193
+ | `b` | Value 2 |
194
+ | `c` | Value 3 |
195
+ | `d` | Value 4 |
196
+
197
+ **Returns:** a + b + c + d
198
+
199
+ ---
200
+
201
+ ## `list_sum3` <Badge type="info" text="v1.0.0" />
202
+
203
+ Sum of three integers.
204
+
205
+ ```redscript
206
+ fn list_sum3(a: int, b: int, c: int): int
207
+ ```
208
+
209
+ **Parameters**
210
+
211
+ | Parameter | Description |
212
+ |-----------|-------------|
213
+ | `a` | Value 1 |
214
+ | `b` | Value 2 |
215
+ | `c` | Value 3 |
216
+
217
+ **Returns:** a + b + c
218
+
219
+ ---
220
+
221
+ ## `avg3` <Badge type="info" text="v1.0.0" />
222
+
223
+ Integer average of three values (truncates toward zero).
224
+
225
+ ```redscript
226
+ fn avg3(a: int, b: int, c: int): int
227
+ ```
228
+
229
+ **Parameters**
230
+
231
+ | Parameter | Description |
232
+ |-----------|-------------|
233
+ | `a` | Value 1 |
234
+ | `b` | Value 2 |
235
+ | `c` | Value 3 |
236
+
237
+ **Returns:** (a + b + c) / 3
238
+
239
+ ---
240
+
241
+ ## `avg5` <Badge type="info" text="v1.0.0" />
242
+
243
+ Integer average of five values (truncates toward zero).
244
+
245
+ ```redscript
246
+ fn avg5(a: int, b: int, c: int, d: int, e: int): int
247
+ ```
248
+
249
+ **Parameters**
250
+
251
+ | Parameter | Description |
252
+ |-----------|-------------|
253
+ | `a` | Value 1 |
254
+ | `b` | Value 2 |
255
+ | `c` | Value 3 |
256
+ | `d` | Value 4 |
257
+ | `e` | Value 5 |
258
+
259
+ **Returns:** (a + b + c + d + e) / 5
260
+
261
+ ---
262
+
263
+ ## `sort3` <Badge type="info" text="v1.0.0" />
264
+
265
+ Sort three values and return the one at position `pos` (0 = min, 1 = mid, 2 = max).
266
+
267
+ ```redscript
268
+ fn sort3(a: int, b: int, c: int, pos: int): int
269
+ ```
270
+
271
+ **Parameters**
272
+
273
+ | Parameter | Description |
274
+ |-----------|-------------|
275
+ | `a` | Value 1 |
276
+ | `b` | Value 2 |
277
+ | `c` | Value 3 |
278
+ | `pos` | Desired position in sorted order (0, 1, or 2) |
279
+
280
+ **Returns:** The value at the requested sorted position
281
+
282
+ ---
283
+
284
+ ## `weighted2` <Badge type="info" text="v1.0.0" />
285
+
286
+ Weighted random choice between two options (0 or 1) using an LCG seed.
287
+
288
+ ```redscript
289
+ fn weighted2(seed: int, w0: int, w1: int): int
290
+ ```
291
+
292
+ **Parameters**
293
+
294
+ | Parameter | Description |
295
+ |-----------|-------------|
296
+ | `seed` | LCG seed (any integer) |
297
+ | `w0` | Weight for option 0 (must be > 0) |
298
+ | `w1` | Weight for option 1 (must be > 0) |
299
+
300
+ **Returns:** 0 with probability w0/(w0+w1), 1 otherwise
301
+
302
+ ---
303
+
304
+ ## `weighted3` <Badge type="info" text="v1.0.0" />
305
+
306
+ Weighted random choice among three options (0, 1, or 2) using an LCG seed.
307
+
308
+ ```redscript
309
+ fn weighted3(seed: int, w0: int, w1: int, w2: int): int
310
+ ```
311
+
312
+ **Parameters**
313
+
314
+ | Parameter | Description |
315
+ |-----------|-------------|
316
+ | `seed` | LCG seed (any integer) |
317
+ | `w0` | Weight for option 0 |
318
+ | `w1` | Weight for option 1 |
319
+ | `w2` | Weight for option 2 |
320
+
321
+ **Returns:** 0, 1, or 2 proportional to the respective weights
322
+
323
+ ---
324
+
325
+ ## `sort4` <Badge type="info" text="v1.0.0" />
326
+
327
+ Sort four values using an optimal 5-comparison sorting network, returning the value at `pos`.
328
+
329
+ ```redscript
330
+ fn sort4(a: int, b: int, c: int, d: int, pos: int): int
331
+ ```
332
+
333
+ **Parameters**
334
+
335
+ | Parameter | Description |
336
+ |-----------|-------------|
337
+ | `a` | Value 1 |
338
+ | `b` | Value 2 |
339
+ | `c` | Value 3 |
340
+ | `d` | Value 4 |
341
+ | `pos` | Desired position in sorted order (0 = min, 3 = max) |
342
+
343
+ **Returns:** The value at the requested sorted position
344
+
345
+ ---
346
+
347
+ ## `sort5` <Badge type="info" text="v1.0.0" />
348
+
349
+ Sort five values using a 9-comparison Batcher odd-even merge sort network, returning the value at `pos`.
350
+
351
+ ```redscript
352
+ fn sort5(a: int, b: int, c: int, d: int, e: int, pos: int): int
353
+ ```
354
+
355
+ **Parameters**
356
+
357
+ | Parameter | Description |
358
+ |-----------|-------------|
359
+ | `a` | Value 1 |
360
+ | `b` | Value 2 |
361
+ | `c` | Value 3 |
362
+ | `d` | Value 4 |
363
+ | `e` | Value 5 |
364
+ | `pos` | Desired position in sorted order (0 = min, 4 = max) |
365
+
366
+ **Returns:** The value at the requested sorted position
367
+
368
+ ---
369
+
370
+ ## `list_sort_asc` <Badge type="info" text="v1.0.0" />
371
+
372
+ In-place ascending bubble sort for an array of any length.
373
+ Requires RedScript ≥ 2.4.0 (array parameter passed by reference).
374
+
375
+ ```redscript
376
+ fn list_sort_asc(arr: int[], len: int)
377
+ ```
378
+
379
+ **Parameters**
380
+
381
+ | Parameter | Description |
382
+ |-----------|-------------|
383
+ | `arr` | Array to sort (modified in-place) |
384
+ | `len` | Number of elements to sort |
385
+
386
+ ---
387
+
388
+ ## `list_sort_desc` <Badge type="info" text="v1.0.0" />
389
+
390
+ In-place descending bubble sort for an array of any length.
391
+ Requires RedScript ≥ 2.4.0 (array parameter passed by reference).
392
+
393
+ ```redscript
394
+ fn list_sort_desc(arr: int[], len: int)
395
+ ```
396
+
397
+ **Parameters**
398
+
399
+ | Parameter | Description |
400
+ |-----------|-------------|
401
+ | `arr` | Array to sort (modified in-place) |
402
+ | `len` | Number of elements to sort |
403
+
404
+ ---
405
+
406
+ ## `list_sum` <Badge type="info" text="v1.0.0" />
407
+
408
+ Sum all elements of an array.
409
+
410
+ ```redscript
411
+ fn list_sum(arr: int[], len: int): int
412
+ ```
413
+
414
+ **Parameters**
415
+
416
+ | Parameter | Description |
417
+ |-----------|-------------|
418
+ | `arr` | Input array |
419
+ | `len` | Number of elements |
420
+
421
+ **Returns:** Sum of arr[0..len)
422
+
423
+ ---
424
+
425
+ ## `list_avg` <Badge type="info" text="v1.0.0" />
426
+
427
+ Arithmetic mean of an array as fixed-point × 10000.
428
+
429
+ ```redscript
430
+ fn list_avg(arr: int[], len: int): int
431
+ ```
432
+
433
+ **Parameters**
434
+
435
+ | Parameter | Description |
436
+ |-----------|-------------|
437
+ | `arr` | Input array |
438
+ | `len` | Number of elements (must be > 0) |
439
+
440
+ **Returns:** (sum × 10000) / len; returns 0 for empty array
441
+
442
+ ---
443
+
444
+ ## `list_min` <Badge type="info" text="v1.0.0" />
445
+
446
+ Minimum element in an array.
447
+
448
+ ```redscript
449
+ fn list_min(arr: int[], len: int): int
450
+ ```
451
+
452
+ **Parameters**
453
+
454
+ | Parameter | Description |
455
+ |-----------|-------------|
456
+ | `arr` | Input array (must have at least one element) |
457
+ | `len` | Number of elements |
458
+
459
+ **Returns:** Smallest value in arr[0..len)
460
+
461
+ ---
462
+
463
+ ## `list_max` <Badge type="info" text="v1.0.0" />
464
+
465
+ Maximum element in an array.
466
+
467
+ ```redscript
468
+ fn list_max(arr: int[], len: int): int
469
+ ```
470
+
471
+ **Parameters**
472
+
473
+ | Parameter | Description |
474
+ |-----------|-------------|
475
+ | `arr` | Input array (must have at least one element) |
476
+ | `len` | Number of elements |
477
+
478
+ **Returns:** Largest value in arr[0..len)
479
+
480
+ ---
481
+
482
+ ## `list_contains` <Badge type="info" text="v1.0.0" />
483
+
484
+ Test whether a value exists in an array.
485
+
486
+ ```redscript
487
+ fn list_contains(arr: int[], len: int, val: int): int
488
+ ```
489
+
490
+ **Parameters**
491
+
492
+ | Parameter | Description |
493
+ |-----------|-------------|
494
+ | `arr` | Input array |
495
+ | `len` | Number of elements |
496
+ | `val` | Value to search for |
497
+
498
+ **Returns:** 1 if val is found, 0 otherwise
499
+
500
+ ---
501
+
502
+ ## `list_index_of` <Badge type="info" text="v1.0.0" />
503
+
504
+ Find the first index of a value in an array.
505
+
506
+ ```redscript
507
+ fn list_index_of(arr: int[], len: int, val: int): int
508
+ ```
509
+
510
+ **Parameters**
511
+
512
+ | Parameter | Description |
513
+ |-----------|-------------|
514
+ | `arr` | Input array |
515
+ | `len` | Number of elements |
516
+ | `val` | Value to search for |
517
+
518
+ **Returns:** First index of val, or -1 if not found
519
+
520
+ ---
521
+
522
+ ## `list_shuffle` <Badge type="info" text="v1.0.0" />
523
+
524
+ Fisher-Yates in-place shuffle using a linear congruential generator.
525
+
526
+ ```redscript
527
+ fn list_shuffle(arr: int[], len: int, seed: int): int[]
528
+ ```
529
+
530
+ **Parameters**
531
+
532
+ | Parameter | Description |
533
+ |-----------|-------------|
534
+ | `arr` | Array to shuffle (modified in-place) |
535
+ | `len` | Number of elements |
536
+ | `seed` | Initial LCG seed (any integer) |
537
+
538
+ **Returns:** The shuffled array (same reference as arr)
539
+
540
+ ---
541
+
542
+ ## `list_dedup_count` <Badge type="info" text="v1.0.0" />
543
+
544
+ Count the number of unique values in an array (O(n²); suitable for small arrays).
545
+
546
+ ```redscript
547
+ fn list_dedup_count(arr: int[], len: int): int
548
+ ```
549
+
550
+ **Parameters**
551
+
552
+ | Parameter | Description |
553
+ |-----------|-------------|
554
+ | `arr` | Input array |
555
+ | `len` | Number of elements |
556
+
557
+ **Returns:** Count of distinct values in arr[0..len)
558
+
559
+ ---
@@ -0,0 +1,140 @@
1
+ # Map
2
+
3
+ > Auto-generated from `src/stdlib/map.mcrs` — do not edit manually.
4
+
5
+ ## API
6
+
7
+ - [map_set](#map-set)
8
+ - [map_get](#map-get)
9
+ - [map_has](#map-has)
10
+ - [map_delete](#map-delete)
11
+ - [map_clear](#map-clear)
12
+
13
+ ---
14
+
15
+ ## `map_set` <Badge type="info" text="v3.0.0" />
16
+
17
+ Stores an integer value in `storage rs:maps.{map_name}.{key}`.
18
+
19
+ This creates the parent compound on demand if it does not already exist.
20
+ Both `map_name` and `key` are inserted directly into the NBT path, so they
21
+ must be valid path segments.
22
+
23
+ ```redscript
24
+ fn map_set(map_name: string, key: string, value: int)
25
+ ```
26
+
27
+ **Parameters**
28
+
29
+ | Parameter | Description |
30
+ |-----------|-------------|
31
+ | `map_name` | Top-level map name under `storage rs:maps` |
32
+ | `key` | Key name inside the selected map compound |
33
+ | `value` | Integer value to write |
34
+
35
+ **Example**
36
+
37
+ ```redscript
38
+ map_set("Stats", "kills", 7)
39
+ ```
40
+
41
+ ---
42
+
43
+ ## `map_get` <Badge type="info" text="v3.0.0" />
44
+
45
+ Reads an integer value from `storage rs:maps.{map_name}.{key}`.
46
+
47
+ If the path does not exist, this function returns `0`.
48
+
49
+ ```redscript
50
+ fn map_get(map_name: string, key: string): int
51
+ ```
52
+
53
+ **Parameters**
54
+
55
+ | Parameter | Description |
56
+ |-----------|-------------|
57
+ | `map_name` | Top-level map name under `storage rs:maps` |
58
+ | `key` | Key name inside the selected map compound |
59
+
60
+ **Returns:** Stored integer value, or `0` if the key is missing
61
+
62
+ **Example**
63
+
64
+ ```redscript
65
+ let kills: int = map_get("Stats", "kills")
66
+ ```
67
+
68
+ ---
69
+
70
+ ## `map_has` <Badge type="info" text="v3.0.0" />
71
+
72
+ Checks whether `storage rs:maps.{map_name}.{key}` exists.
73
+
74
+ ```redscript
75
+ fn map_has(map_name: string, key: string): int
76
+ ```
77
+
78
+ **Parameters**
79
+
80
+ | Parameter | Description |
81
+ |-----------|-------------|
82
+ | `map_name` | Top-level map name under `storage rs:maps` |
83
+ | `key` | Key name inside the selected map compound |
84
+
85
+ **Returns:** `1` if the key exists, otherwise `0`
86
+
87
+ **Example**
88
+
89
+ ```redscript
90
+ if (map_has("Stats", "kills") == 1) { }
91
+ ```
92
+
93
+ ---
94
+
95
+ ## `map_delete` <Badge type="info" text="v3.0.0" />
96
+
97
+ Removes a key from the selected map compound.
98
+
99
+ Removing a missing key is a no-op in Minecraft.
100
+
101
+ ```redscript
102
+ fn map_delete(map_name: string, key: string)
103
+ ```
104
+
105
+ **Parameters**
106
+
107
+ | Parameter | Description |
108
+ |-----------|-------------|
109
+ | `map_name` | Top-level map name under `storage rs:maps` |
110
+ | `key` | Key name inside the selected map compound |
111
+
112
+ **Example**
113
+
114
+ ```redscript
115
+ map_delete("Stats", "kills")
116
+ ```
117
+
118
+ ---
119
+
120
+ ## `map_clear` <Badge type="info" text="v3.0.0" />
121
+
122
+ Removes the entire map compound from `storage rs:maps`.
123
+
124
+ ```redscript
125
+ fn map_clear(map_name: string)
126
+ ```
127
+
128
+ **Parameters**
129
+
130
+ | Parameter | Description |
131
+ |-----------|-------------|
132
+ | `map_name` | Top-level map name under `storage rs:maps` |
133
+
134
+ **Example**
135
+
136
+ ```redscript
137
+ map_clear("Stats")
138
+ ```
139
+
140
+ ---