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.
- package/.github/workflows/ci.yml +1 -0
- package/README.md +119 -313
- package/README.zh.md +118 -314
- package/ROADMAP.md +5 -5
- package/dist/data/impl_test/function/counter/get.mcfunction +5 -0
- package/dist/data/impl_test/function/counter/inc.mcfunction +7 -0
- package/dist/data/impl_test/function/counter/new.mcfunction +4 -0
- package/dist/data/impl_test/function/load.mcfunction +1 -0
- package/dist/data/impl_test/function/test_impl.mcfunction +10 -0
- package/dist/data/minecraft/tags/function/load.json +5 -0
- package/dist/data/playground/function/load.mcfunction +1 -0
- package/dist/data/playground/function/start.mcfunction +4 -0
- package/dist/data/playground/function/start__say_macro_t1.mcfunction +1 -0
- package/dist/data/playground/function/stop.mcfunction +5 -0
- package/dist/data/playground/function/stop__say_macro_t0.mcfunction +1 -0
- package/dist/data/stdlib_queue8_test/function/__queue_append_apply.mcfunction +4 -0
- package/dist/data/stdlib_queue8_test/function/__queue_peek_apply.mcfunction +4 -0
- package/dist/data/stdlib_queue8_test/function/__queue_size_raw_apply.mcfunction +4 -0
- package/dist/data/stdlib_queue8_test/function/load.mcfunction +1 -0
- package/dist/data/stdlib_queue8_test/function/queue_clear.mcfunction +6 -0
- package/dist/data/stdlib_queue8_test/function/queue_empty__merge_1.mcfunction +5 -0
- package/dist/data/stdlib_queue8_test/function/queue_empty__then_0.mcfunction +5 -0
- package/dist/data/stdlib_queue8_test/function/queue_peek__merge_1.mcfunction +13 -0
- package/dist/data/stdlib_queue8_test/function/queue_peek__then_0.mcfunction +5 -0
- package/dist/data/stdlib_queue8_test/function/queue_pop__merge_1.mcfunction +15 -0
- package/dist/data/stdlib_queue8_test/function/queue_pop__then_0.mcfunction +5 -0
- package/dist/data/stdlib_queue8_test/function/queue_push__const_11.mcfunction +6 -0
- package/dist/data/stdlib_queue8_test/function/queue_push__const_22.mcfunction +6 -0
- package/dist/data/stdlib_queue8_test/function/queue_size.mcfunction +13 -0
- package/dist/data/stdlib_queue8_test/function/test_queue_push_and_size.mcfunction +13 -0
- package/dist/data/test/function/load.mcfunction +1 -0
- package/dist/data/test/function/say_at.mcfunction +6 -0
- package/dist/data/test/function/test.mcfunction +4 -0
- package/dist/pack.mcmeta +6 -0
- package/dist/package.json +1 -1
- package/dist/src/__tests__/formatter-extra.test.d.ts +7 -0
- package/dist/src/__tests__/formatter-extra.test.js +123 -0
- package/dist/src/__tests__/global-vars.test.d.ts +13 -0
- package/dist/src/__tests__/global-vars.test.js +156 -0
- package/dist/src/__tests__/lint/new-rules.test.d.ts +9 -0
- package/dist/src/__tests__/lint/new-rules.test.js +402 -0
- package/dist/src/__tests__/lsp-rename.test.d.ts +8 -0
- package/dist/src/__tests__/lsp-rename.test.js +157 -0
- package/dist/src/__tests__/mc-integration/say-fstring.test.d.ts +11 -0
- package/dist/src/__tests__/mc-integration/say-fstring.test.js +220 -0
- package/dist/src/__tests__/mc-integration/stdlib-coverage-2.test.js +1 -1
- package/dist/src/__tests__/mc-integration/stdlib-coverage-3.test.js +1 -1
- package/dist/src/__tests__/mc-integration/stdlib-coverage-4.test.js +1 -1
- package/dist/src/__tests__/mc-integration/stdlib-coverage-5.test.js +1 -1
- package/dist/src/__tests__/mc-integration/stdlib-coverage-6.test.js +1 -1
- package/dist/src/__tests__/mc-integration/stdlib-coverage-7.test.js +1 -1
- package/dist/src/__tests__/mc-integration/stdlib-coverage-8.test.js +1 -1
- package/dist/src/__tests__/mc-syntax.test.js +4 -1
- package/dist/src/__tests__/monomorphize-coverage.test.d.ts +9 -0
- package/dist/src/__tests__/monomorphize-coverage.test.js +204 -0
- package/dist/src/__tests__/optimizer-cse.test.d.ts +7 -0
- package/dist/src/__tests__/optimizer-cse.test.js +226 -0
- package/dist/src/__tests__/parser.test.js +4 -13
- package/dist/src/__tests__/repl-server-extra.test.js +6 -7
- package/dist/src/__tests__/repl-server.test.js +5 -7
- package/dist/src/__tests__/stdlib/queue.test.js +6 -6
- package/dist/src/cli.js +0 -0
- package/dist/src/lexer/index.js +2 -1
- package/dist/src/lint/index.d.ts +12 -5
- package/dist/src/lint/index.js +730 -5
- package/dist/src/lsp/main.js +0 -0
- package/dist/src/mc-test/client.d.ts +21 -0
- package/dist/src/mc-test/client.js +34 -0
- package/dist/src/mir/lower.js +108 -6
- package/dist/src/optimizer/interprocedural.js +37 -2
- package/dist/src/parser/decl-parser.d.ts +19 -0
- package/dist/src/parser/decl-parser.js +323 -0
- package/dist/src/parser/expr-parser.d.ts +46 -0
- package/dist/src/parser/expr-parser.js +759 -0
- package/dist/src/parser/index.d.ts +8 -129
- package/dist/src/parser/index.js +13 -2262
- package/dist/src/parser/stmt-parser.d.ts +28 -0
- package/dist/src/parser/stmt-parser.js +577 -0
- package/dist/src/parser/type-parser.d.ts +20 -0
- package/dist/src/parser/type-parser.js +257 -0
- package/dist/src/parser/utils.d.ts +34 -0
- package/dist/src/parser/utils.js +141 -0
- package/docs/dev/README-mc-integration-tests.md +141 -0
- package/docs/lint-rules.md +162 -0
- package/docs/stdlib/bigint.md +2 -0
- package/editors/vscode/README.md +63 -41
- package/editors/vscode/out/extension.js +1881 -1776
- package/editors/vscode/out/lsp-server.js +4257 -3651
- package/editors/vscode/package-lock.json +3 -3
- package/editors/vscode/package.json +1 -1
- package/examples/loops-demo.mcrs +87 -0
- package/package.json +1 -1
- package/redscript-docs/docs/en/stdlib/advanced.md +629 -0
- package/redscript-docs/docs/en/stdlib/bigint.md +316 -0
- package/redscript-docs/docs/en/stdlib/bits.md +292 -0
- package/redscript-docs/docs/en/stdlib/bossbar.md +177 -0
- package/redscript-docs/docs/en/stdlib/calculus.md +289 -0
- package/redscript-docs/docs/en/stdlib/color.md +353 -0
- package/redscript-docs/docs/en/stdlib/combat.md +88 -0
- package/redscript-docs/docs/en/stdlib/cooldown.md +82 -0
- package/redscript-docs/docs/en/stdlib/dialog.md +155 -0
- package/redscript-docs/docs/en/stdlib/easing.md +558 -0
- package/redscript-docs/docs/en/stdlib/ecs.md +475 -0
- package/redscript-docs/docs/en/stdlib/effects.md +324 -0
- package/redscript-docs/docs/en/stdlib/events.md +3 -0
- package/redscript-docs/docs/en/stdlib/expr.md +45 -0
- package/redscript-docs/docs/en/stdlib/fft.md +141 -0
- package/redscript-docs/docs/en/stdlib/geometry.md +430 -0
- package/redscript-docs/docs/en/stdlib/graph.md +259 -0
- package/redscript-docs/docs/en/stdlib/heap.md +185 -0
- package/redscript-docs/docs/en/stdlib/interactions.md +179 -0
- package/redscript-docs/docs/en/stdlib/inventory.md +97 -0
- package/redscript-docs/docs/en/stdlib/linalg.md +557 -0
- package/redscript-docs/docs/en/stdlib/list.md +559 -0
- package/redscript-docs/docs/en/stdlib/map.md +140 -0
- package/redscript-docs/docs/en/stdlib/math.md +193 -0
- package/redscript-docs/docs/en/stdlib/math_hp.md +149 -0
- package/redscript-docs/docs/en/stdlib/matrix.md +403 -0
- package/redscript-docs/docs/en/stdlib/mobs.md +965 -0
- package/redscript-docs/docs/en/stdlib/noise.md +244 -0
- package/redscript-docs/docs/en/stdlib/ode.md +253 -0
- package/redscript-docs/docs/en/stdlib/parabola.md +342 -0
- package/redscript-docs/docs/en/stdlib/particles.md +311 -0
- package/redscript-docs/docs/en/stdlib/pathfind.md +255 -0
- package/redscript-docs/docs/en/stdlib/physics.md +493 -0
- package/redscript-docs/docs/en/stdlib/player.md +78 -0
- package/redscript-docs/docs/en/stdlib/quaternion.md +673 -0
- package/redscript-docs/docs/en/stdlib/queue.md +134 -0
- package/redscript-docs/docs/en/stdlib/random.md +223 -0
- package/redscript-docs/docs/en/stdlib/result.md +143 -0
- package/redscript-docs/docs/en/stdlib/scheduler.md +183 -0
- package/redscript-docs/docs/en/stdlib/set_int.md +190 -0
- package/redscript-docs/docs/en/stdlib/sets.md +101 -0
- package/redscript-docs/docs/en/stdlib/signal.md +400 -0
- package/redscript-docs/docs/en/stdlib/sort.md +104 -0
- package/redscript-docs/docs/en/stdlib/spawn.md +147 -0
- package/redscript-docs/docs/en/stdlib/state.md +142 -0
- package/redscript-docs/docs/en/stdlib/strings.md +154 -0
- package/redscript-docs/docs/en/stdlib/tags.md +3451 -0
- package/redscript-docs/docs/en/stdlib/teams.md +153 -0
- package/redscript-docs/docs/en/stdlib/timer.md +246 -0
- package/redscript-docs/docs/en/stdlib/vec.md +158 -0
- package/redscript-docs/docs/en/stdlib/world.md +298 -0
- package/redscript-docs/docs/zh/stdlib/advanced.md +615 -0
- package/redscript-docs/docs/zh/stdlib/bigint.md +316 -0
- package/redscript-docs/docs/zh/stdlib/bits.md +292 -0
- package/redscript-docs/docs/zh/stdlib/bossbar.md +170 -0
- package/redscript-docs/docs/zh/stdlib/calculus.md +287 -0
- package/redscript-docs/docs/zh/stdlib/color.md +353 -0
- package/redscript-docs/docs/zh/stdlib/combat.md +88 -0
- package/redscript-docs/docs/zh/stdlib/cooldown.md +84 -0
- package/redscript-docs/docs/zh/stdlib/dialog.md +152 -0
- package/redscript-docs/docs/zh/stdlib/easing.md +558 -0
- package/redscript-docs/docs/zh/stdlib/ecs.md +472 -0
- package/redscript-docs/docs/zh/stdlib/effects.md +324 -0
- package/redscript-docs/docs/zh/stdlib/events.md +3 -0
- package/redscript-docs/docs/zh/stdlib/expr.md +37 -0
- package/redscript-docs/docs/zh/stdlib/fft.md +128 -0
- package/redscript-docs/docs/zh/stdlib/geometry.md +430 -0
- package/redscript-docs/docs/zh/stdlib/graph.md +259 -0
- package/redscript-docs/docs/zh/stdlib/heap.md +185 -0
- package/redscript-docs/docs/zh/stdlib/interactions.md +160 -0
- package/redscript-docs/docs/zh/stdlib/inventory.md +94 -0
- package/redscript-docs/docs/zh/stdlib/linalg.md +543 -0
- package/redscript-docs/docs/zh/stdlib/list.md +561 -0
- package/redscript-docs/docs/zh/stdlib/map.md +132 -0
- package/redscript-docs/docs/zh/stdlib/math.md +193 -0
- package/redscript-docs/docs/zh/stdlib/math_hp.md +143 -0
- package/redscript-docs/docs/zh/stdlib/matrix.md +396 -0
- package/redscript-docs/docs/zh/stdlib/mobs.md +965 -0
- package/redscript-docs/docs/zh/stdlib/noise.md +244 -0
- package/redscript-docs/docs/zh/stdlib/ode.md +243 -0
- package/redscript-docs/docs/zh/stdlib/parabola.md +337 -0
- package/redscript-docs/docs/zh/stdlib/particles.md +307 -0
- package/redscript-docs/docs/zh/stdlib/pathfind.md +255 -0
- package/redscript-docs/docs/zh/stdlib/physics.md +493 -0
- package/redscript-docs/docs/zh/stdlib/player.md +78 -0
- package/redscript-docs/docs/zh/stdlib/quaternion.md +669 -0
- package/redscript-docs/docs/zh/stdlib/queue.md +124 -0
- package/redscript-docs/docs/zh/stdlib/random.md +222 -0
- package/redscript-docs/docs/zh/stdlib/result.md +147 -0
- package/redscript-docs/docs/zh/stdlib/scheduler.md +173 -0
- package/redscript-docs/docs/zh/stdlib/set_int.md +180 -0
- package/redscript-docs/docs/zh/stdlib/sets.md +107 -0
- package/redscript-docs/docs/zh/stdlib/signal.md +373 -0
- package/redscript-docs/docs/zh/stdlib/sort.md +104 -0
- package/redscript-docs/docs/zh/stdlib/spawn.md +142 -0
- package/redscript-docs/docs/zh/stdlib/state.md +134 -0
- package/redscript-docs/docs/zh/stdlib/strings.md +107 -0
- package/redscript-docs/docs/zh/stdlib/tags.md +3451 -0
- package/redscript-docs/docs/zh/stdlib/teams.md +150 -0
- package/redscript-docs/docs/zh/stdlib/timer.md +254 -0
- package/redscript-docs/docs/zh/stdlib/vec.md +158 -0
- package/redscript-docs/docs/zh/stdlib/world.md +289 -0
- package/src/__tests__/formatter-extra.test.ts +139 -0
- package/src/__tests__/global-vars.test.ts +171 -0
- package/src/__tests__/lint/new-rules.test.ts +437 -0
- package/src/__tests__/lsp-rename.test.ts +171 -0
- package/src/__tests__/mc-integration/say-fstring.test.ts +211 -0
- package/src/__tests__/mc-integration/stdlib-coverage-2.test.ts +1 -1
- package/src/__tests__/mc-integration/stdlib-coverage-3.test.ts +1 -1
- package/src/__tests__/mc-integration/stdlib-coverage-4.test.ts +1 -1
- package/src/__tests__/mc-integration/stdlib-coverage-5.test.ts +1 -1
- package/src/__tests__/mc-integration/stdlib-coverage-6.test.ts +1 -1
- package/src/__tests__/mc-integration/stdlib-coverage-7.test.ts +1 -1
- package/src/__tests__/mc-integration/stdlib-coverage-8.test.ts +1 -1
- package/src/__tests__/mc-syntax.test.ts +3 -0
- package/src/__tests__/monomorphize-coverage.test.ts +220 -0
- package/src/__tests__/optimizer-cse.test.ts +250 -0
- package/src/__tests__/parser.test.ts +4 -13
- package/src/__tests__/repl-server-extra.test.ts +6 -6
- package/src/__tests__/repl-server.test.ts +5 -6
- package/src/__tests__/stdlib/queue.test.ts +6 -6
- package/src/lexer/index.ts +2 -1
- package/src/lint/index.ts +713 -5
- package/src/mc-test/client.ts +40 -0
- package/src/mir/lower.ts +111 -2
- package/src/optimizer/interprocedural.ts +40 -2
- package/src/parser/decl-parser.ts +349 -0
- package/src/parser/expr-parser.ts +838 -0
- package/src/parser/index.ts +17 -2558
- package/src/parser/stmt-parser.ts +585 -0
- package/src/parser/type-parser.ts +276 -0
- package/src/parser/utils.ts +173 -0
- package/src/stdlib/queue.mcrs +19 -6
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
# Physics
|
|
2
|
+
|
|
3
|
+
> Auto-generated from `src/stdlib/physics.mcrs` — do not edit manually.
|
|
4
|
+
|
|
5
|
+
## API
|
|
6
|
+
|
|
7
|
+
- [gravity_fx](#gravity-fx)
|
|
8
|
+
- [air_drag_fx](#air-drag-fx)
|
|
9
|
+
- [water_drag_fx](#water-drag-fx)
|
|
10
|
+
- [projectile_y](#projectile-y)
|
|
11
|
+
- [projectile_x](#projectile-x)
|
|
12
|
+
- [projectile_vy](#projectile-vy)
|
|
13
|
+
- [projectile_land_t](#projectile-land-t)
|
|
14
|
+
- [projectile_max_height](#projectile-max-height)
|
|
15
|
+
- [apply_drag](#apply-drag)
|
|
16
|
+
- [apply_gravity](#apply-gravity)
|
|
17
|
+
- [update_pos](#update-pos)
|
|
18
|
+
- [bounce_v](#bounce-v)
|
|
19
|
+
- [clamp_velocity](#clamp-velocity)
|
|
20
|
+
- [spring_force](#spring-force)
|
|
21
|
+
- [spring_update_v](#spring-update-v)
|
|
22
|
+
- [circular_x](#circular-x)
|
|
23
|
+
- [circular_z](#circular-z)
|
|
24
|
+
- [friction_decel](#friction-decel)
|
|
25
|
+
- [is_grounded](#is-grounded)
|
|
26
|
+
- [impact_velocity](#impact-velocity)
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## `gravity_fx` <Badge type="info" text="v1.0.0" />
|
|
31
|
+
|
|
32
|
+
Minecraft gravity constant in fixed-point units (0.08 blocks/tick² × 100 = 8).
|
|
33
|
+
|
|
34
|
+
```redscript
|
|
35
|
+
fn gravity_fx(): int
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Returns:** 8 (gravity acceleration per tick in ×100 units)
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## `air_drag_fx` <Badge type="info" text="v1.0.0" />
|
|
43
|
+
|
|
44
|
+
Air drag factor in ×10000 scale (0.98 per tick).
|
|
45
|
+
|
|
46
|
+
```redscript
|
|
47
|
+
fn air_drag_fx(): int
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**Returns:** 9800 (multiply velocity by this / 10000 each tick)
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## `water_drag_fx` <Badge type="info" text="v1.0.0" />
|
|
55
|
+
|
|
56
|
+
Water drag factor in ×10000 scale (0.80 per tick, stronger than air).
|
|
57
|
+
|
|
58
|
+
```redscript
|
|
59
|
+
fn water_drag_fx(): int
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Returns:** 8000 (multiply velocity by this / 10000 each tick while in water)
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## `projectile_y` <Badge type="info" text="v1.0.0" />
|
|
67
|
+
|
|
68
|
+
Compute Y position of a projectile after t ticks (no drag, constant gravity).
|
|
69
|
+
|
|
70
|
+
```redscript
|
|
71
|
+
fn projectile_y(p0: int, v0: int, t: int): int
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Parameters**
|
|
75
|
+
|
|
76
|
+
| Parameter | Description |
|
|
77
|
+
|-----------|-------------|
|
|
78
|
+
| `p0` | Initial Y position ×100 (blocks × 100) |
|
|
79
|
+
| `v0` | Initial Y velocity ×100 (blocks/tick × 100) |
|
|
80
|
+
| `t` | Time in ticks |
|
|
81
|
+
|
|
82
|
+
**Returns:** Y position at tick t: p0 + v0*t - gravity*t²/2
|
|
83
|
+
|
|
84
|
+
**Example**
|
|
85
|
+
|
|
86
|
+
```redscript
|
|
87
|
+
let y: int = projectile_y(0, 200, 5) // height after 5 ticks, launched at 2 blocks/tick
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## `projectile_x` <Badge type="info" text="v1.0.0" />
|
|
93
|
+
|
|
94
|
+
Compute horizontal X position of a projectile after t ticks (constant velocity, no drag).
|
|
95
|
+
|
|
96
|
+
```redscript
|
|
97
|
+
fn projectile_x(p0: int, v0: int, t: int): int
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
**Parameters**
|
|
101
|
+
|
|
102
|
+
| Parameter | Description |
|
|
103
|
+
|-----------|-------------|
|
|
104
|
+
| `p0` | Initial X position ×100 |
|
|
105
|
+
| `v0` | Horizontal X velocity ×100 |
|
|
106
|
+
| `t` | Time in ticks |
|
|
107
|
+
|
|
108
|
+
**Returns:** X position at tick t: p0 + v0*t
|
|
109
|
+
|
|
110
|
+
**Example**
|
|
111
|
+
|
|
112
|
+
```redscript
|
|
113
|
+
let x: int = projectile_x(0, 100, 10) // 10 blocks/tick for 10 ticks = 1000 units
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## `projectile_vy` <Badge type="info" text="v1.0.0" />
|
|
119
|
+
|
|
120
|
+
Compute Y velocity of a projectile after t ticks (accounting for gravity).
|
|
121
|
+
|
|
122
|
+
```redscript
|
|
123
|
+
fn projectile_vy(v0: int, t: int): int
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
**Parameters**
|
|
127
|
+
|
|
128
|
+
| Parameter | Description |
|
|
129
|
+
|-----------|-------------|
|
|
130
|
+
| `v0` | Initial Y velocity ×100 |
|
|
131
|
+
| `t` | Time in ticks |
|
|
132
|
+
|
|
133
|
+
**Returns:** v0 - gravity*t
|
|
134
|
+
|
|
135
|
+
**Example**
|
|
136
|
+
|
|
137
|
+
```redscript
|
|
138
|
+
let vy: int = projectile_vy(200, 5) // velocity after 5 ticks
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## `projectile_land_t` <Badge type="info" text="v1.0.0" />
|
|
144
|
+
|
|
145
|
+
Estimate the tick at which a projectile launched upward returns to Y=0.
|
|
146
|
+
|
|
147
|
+
```redscript
|
|
148
|
+
fn projectile_land_t(v0y: int): int
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**Parameters**
|
|
152
|
+
|
|
153
|
+
| Parameter | Description |
|
|
154
|
+
|-----------|-------------|
|
|
155
|
+
| `v0y` | Initial upward Y velocity ×100 (must be positive) |
|
|
156
|
+
|
|
157
|
+
**Returns:** 2*v0y / gravity; returns 0 if v0y <= 0
|
|
158
|
+
|
|
159
|
+
**Example**
|
|
160
|
+
|
|
161
|
+
```redscript
|
|
162
|
+
let land_t: int = projectile_land_t(160) // ticks until landing
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
---
|
|
166
|
+
|
|
167
|
+
## `projectile_max_height` <Badge type="info" text="v1.0.0" />
|
|
168
|
+
|
|
169
|
+
Compute the maximum height reached by a projectile launched upward.
|
|
170
|
+
|
|
171
|
+
```redscript
|
|
172
|
+
fn projectile_max_height(v0y: int): int
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**Parameters**
|
|
176
|
+
|
|
177
|
+
| Parameter | Description |
|
|
178
|
+
|-----------|-------------|
|
|
179
|
+
| `v0y` | Initial upward Y velocity ×100 |
|
|
180
|
+
|
|
181
|
+
**Returns:** v0y² / (2*gravity) in ×100 units
|
|
182
|
+
|
|
183
|
+
**Example**
|
|
184
|
+
|
|
185
|
+
```redscript
|
|
186
|
+
let max_h: int = projectile_max_height(160) // peak height in units×100
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
---
|
|
190
|
+
|
|
191
|
+
## `apply_drag` <Badge type="info" text="v1.0.0" />
|
|
192
|
+
|
|
193
|
+
Apply a drag factor to a velocity (one tick of drag).
|
|
194
|
+
|
|
195
|
+
```redscript
|
|
196
|
+
fn apply_drag(v_fx: int, drag_fx: int): int
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**Parameters**
|
|
200
|
+
|
|
201
|
+
| Parameter | Description |
|
|
202
|
+
|-----------|-------------|
|
|
203
|
+
| `v_fx` | Velocity ×100 |
|
|
204
|
+
| `drag_fx` | Drag factor ×10000 (9800 for air, 8000 for water) |
|
|
205
|
+
|
|
206
|
+
**Returns:** v_fx * drag_fx / 10000
|
|
207
|
+
|
|
208
|
+
**Example**
|
|
209
|
+
|
|
210
|
+
```redscript
|
|
211
|
+
let v: int = apply_drag(500, air_drag_fx()) // 500 * 0.98 = 490
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
## `apply_gravity` <Badge type="info" text="v1.0.0" />
|
|
217
|
+
|
|
218
|
+
Apply one tick of gravity to a Y velocity component.
|
|
219
|
+
|
|
220
|
+
```redscript
|
|
221
|
+
fn apply_gravity(vy_fx: int): int
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
**Parameters**
|
|
225
|
+
|
|
226
|
+
| Parameter | Description |
|
|
227
|
+
|-----------|-------------|
|
|
228
|
+
| `vy_fx` | Current Y velocity ×100 |
|
|
229
|
+
|
|
230
|
+
**Returns:** vy_fx - gravity_fx()
|
|
231
|
+
|
|
232
|
+
**Example**
|
|
233
|
+
|
|
234
|
+
```redscript
|
|
235
|
+
vy = apply_gravity(vy) // call each tick in your physics loop
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## `update_pos` <Badge type="info" text="v1.0.0" />
|
|
241
|
+
|
|
242
|
+
Update a position component by one tick of velocity.
|
|
243
|
+
|
|
244
|
+
```redscript
|
|
245
|
+
fn update_pos(p_fx: int, v_fx: int): int
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
**Parameters**
|
|
249
|
+
|
|
250
|
+
| Parameter | Description |
|
|
251
|
+
|-----------|-------------|
|
|
252
|
+
| `p_fx` | Current position ×100 |
|
|
253
|
+
| `v_fx` | Velocity ×100 |
|
|
254
|
+
|
|
255
|
+
**Returns:** p_fx + v_fx
|
|
256
|
+
|
|
257
|
+
**Example**
|
|
258
|
+
|
|
259
|
+
```redscript
|
|
260
|
+
px = update_pos(px, vx) // advance X each tick
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## `bounce_v` <Badge type="info" text="v1.0.0" />
|
|
266
|
+
|
|
267
|
+
Reflect a velocity component with energy loss (bounce).
|
|
268
|
+
|
|
269
|
+
```redscript
|
|
270
|
+
fn bounce_v(v_fx: int, restitution_fx: int): int
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
**Parameters**
|
|
274
|
+
|
|
275
|
+
| Parameter | Description |
|
|
276
|
+
|-----------|-------------|
|
|
277
|
+
| `v_fx` | Velocity ×100 to reflect |
|
|
278
|
+
| `restitution_fx` | Energy retention ×10000 (10000=elastic, 5000=half, 0=inelastic) |
|
|
279
|
+
|
|
280
|
+
**Returns:** Negated and scaled velocity: -v_fx * restitution / 10000
|
|
281
|
+
|
|
282
|
+
**Example**
|
|
283
|
+
|
|
284
|
+
```redscript
|
|
285
|
+
vy = bounce_v(vy, 7000) // 70% energy retained on bounce
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
290
|
+
## `clamp_velocity` <Badge type="info" text="v1.0.0" />
|
|
291
|
+
|
|
292
|
+
Clamp a velocity component to a maximum absolute speed.
|
|
293
|
+
|
|
294
|
+
```redscript
|
|
295
|
+
fn clamp_velocity(v_fx: int, max_fx: int): int
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
**Parameters**
|
|
299
|
+
|
|
300
|
+
| Parameter | Description |
|
|
301
|
+
|-----------|-------------|
|
|
302
|
+
| `v_fx` | Velocity ×100 to clamp |
|
|
303
|
+
| `max_fx` | Maximum absolute velocity ×100 (terminal velocity) |
|
|
304
|
+
|
|
305
|
+
**Returns:** v_fx clamped to [-max_fx, max_fx]
|
|
306
|
+
|
|
307
|
+
**Example**
|
|
308
|
+
|
|
309
|
+
```redscript
|
|
310
|
+
vx = clamp_velocity(vx, 500) // cap horizontal speed at 5 blocks/tick
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
## `spring_force` <Badge type="info" text="v1.0.0" />
|
|
316
|
+
|
|
317
|
+
Compute spring force toward a target position (Hooke's law: F = -k*(x - target)).
|
|
318
|
+
|
|
319
|
+
```redscript
|
|
320
|
+
fn spring_force(pos_fx: int, target_fx: int, k_fx: int): int
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
**Parameters**
|
|
324
|
+
|
|
325
|
+
| Parameter | Description |
|
|
326
|
+
|-----------|-------------|
|
|
327
|
+
| `pos_fx` | Current position ×100 |
|
|
328
|
+
| `target_fx` | Rest/target position ×100 |
|
|
329
|
+
| `k_fx` | Spring constant ×10000 (higher = stiffer spring) |
|
|
330
|
+
|
|
331
|
+
**Returns:** (target - pos) * k / 10000
|
|
332
|
+
|
|
333
|
+
**Example**
|
|
334
|
+
|
|
335
|
+
```redscript
|
|
336
|
+
let f: int = spring_force(pos, 500, 2000) // spring toward position 500 with k=0.2
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
## `spring_update_v` <Badge type="info" text="v1.0.0" />
|
|
342
|
+
|
|
343
|
+
Update velocity with spring force and damping (one tick).
|
|
344
|
+
|
|
345
|
+
```redscript
|
|
346
|
+
fn spring_update_v(v_fx: int, pos_fx: int, target_fx: int, k_fx: int, damping_fx: int): int
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
**Parameters**
|
|
350
|
+
|
|
351
|
+
| Parameter | Description |
|
|
352
|
+
|-----------|-------------|
|
|
353
|
+
| `v_fx` | Current velocity ×100 |
|
|
354
|
+
| `pos_fx` | Current position ×100 |
|
|
355
|
+
| `target_fx` | Spring rest position ×100 |
|
|
356
|
+
| `k_fx` | Spring constant ×10000 |
|
|
357
|
+
| `damping_fx` | Damping factor ×10000 (10000=no damping, 8000=some damping) |
|
|
358
|
+
|
|
359
|
+
**Returns:** New velocity after applying spring force and damping
|
|
360
|
+
|
|
361
|
+
**Example**
|
|
362
|
+
|
|
363
|
+
```redscript
|
|
364
|
+
vx = spring_update_v(vx, px, target_px, 1000, 9000)
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
---
|
|
368
|
+
|
|
369
|
+
## `circular_x` <Badge type="info" text="v1.0.0" />
|
|
370
|
+
|
|
371
|
+
Compute X position on a circle given center, radius, and angle.
|
|
372
|
+
|
|
373
|
+
```redscript
|
|
374
|
+
fn circular_x(cx: int, r: int, angle_deg: int): int
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
**Parameters**
|
|
378
|
+
|
|
379
|
+
| Parameter | Description |
|
|
380
|
+
|-----------|-------------|
|
|
381
|
+
| `cx` | Circle center X ×100 |
|
|
382
|
+
| `r` | Radius ×100 |
|
|
383
|
+
| `angle_deg` | Angle in whole degrees (NOT ×10000) |
|
|
384
|
+
|
|
385
|
+
**Returns:** cx + r * cos(angle_deg) / 1000
|
|
386
|
+
|
|
387
|
+
**Example**
|
|
388
|
+
|
|
389
|
+
```redscript
|
|
390
|
+
let x: int = circular_x(500, 200, 45) // point at 45° on radius-2 circle
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
---
|
|
394
|
+
|
|
395
|
+
## `circular_z` <Badge type="info" text="v1.0.0" />
|
|
396
|
+
|
|
397
|
+
Compute Z position on a circle given center, radius, and angle.
|
|
398
|
+
|
|
399
|
+
```redscript
|
|
400
|
+
fn circular_z(cz: int, r: int, angle_deg: int): int
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
**Parameters**
|
|
404
|
+
|
|
405
|
+
| Parameter | Description |
|
|
406
|
+
|-----------|-------------|
|
|
407
|
+
| `cz` | Circle center Z ×100 |
|
|
408
|
+
| `r` | Radius ×100 |
|
|
409
|
+
| `angle_deg` | Angle in whole degrees (NOT ×10000) |
|
|
410
|
+
|
|
411
|
+
**Returns:** cz + r * sin(angle_deg) / 1000
|
|
412
|
+
|
|
413
|
+
**Example**
|
|
414
|
+
|
|
415
|
+
```redscript
|
|
416
|
+
let z: int = circular_z(500, 200, 45)
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
---
|
|
420
|
+
|
|
421
|
+
## `friction_decel` <Badge type="info" text="v1.0.0" />
|
|
422
|
+
|
|
423
|
+
Apply friction to reduce a velocity component toward zero.
|
|
424
|
+
|
|
425
|
+
```redscript
|
|
426
|
+
fn friction_decel(v_fx: int, friction_fx: int): int
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
**Parameters**
|
|
430
|
+
|
|
431
|
+
| Parameter | Description |
|
|
432
|
+
|-----------|-------------|
|
|
433
|
+
| `v_fx` | Current velocity ×100 |
|
|
434
|
+
| `friction_fx` | Friction deceleration per tick ×100 (absolute amount subtracted) |
|
|
435
|
+
|
|
436
|
+
**Returns:** Velocity reduced toward 0 by friction; stops at 0 rather than reversing
|
|
437
|
+
|
|
438
|
+
**Example**
|
|
439
|
+
|
|
440
|
+
```redscript
|
|
441
|
+
vx = friction_decel(vx, 10) // slow down by 0.1 blocks/tick per tick
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
---
|
|
445
|
+
|
|
446
|
+
## `is_grounded` <Badge type="info" text="v1.0.0" />
|
|
447
|
+
|
|
448
|
+
Check whether a position has reached or fallen below the ground level.
|
|
449
|
+
|
|
450
|
+
```redscript
|
|
451
|
+
fn is_grounded(y_fx: int, ground_y_fx: int): int
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
**Parameters**
|
|
455
|
+
|
|
456
|
+
| Parameter | Description |
|
|
457
|
+
|-----------|-------------|
|
|
458
|
+
| `y_fx` | Current Y position ×100 |
|
|
459
|
+
| `ground_y_fx` | Ground Y level ×100 |
|
|
460
|
+
|
|
461
|
+
**Returns:** 1 if y_fx <= ground_y_fx (grounded), 0 otherwise
|
|
462
|
+
|
|
463
|
+
**Example**
|
|
464
|
+
|
|
465
|
+
```redscript
|
|
466
|
+
if (is_grounded(py, 0) == 1) { py = 0; vy = bounce_v(vy, 7000); }
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
---
|
|
470
|
+
|
|
471
|
+
## `impact_velocity` <Badge type="info" text="v1.0.0" />
|
|
472
|
+
|
|
473
|
+
Estimate the impact velocity after falling from a given height.
|
|
474
|
+
|
|
475
|
+
```redscript
|
|
476
|
+
fn impact_velocity(h_fx: int): int
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
**Parameters**
|
|
480
|
+
|
|
481
|
+
| Parameter | Description |
|
|
482
|
+
|-----------|-------------|
|
|
483
|
+
| `h_fx` | Fall height ×100 (blocks × 100, must be positive) |
|
|
484
|
+
|
|
485
|
+
**Returns:** Approximate impact speed ×100 via integer square root of 2*g*h
|
|
486
|
+
|
|
487
|
+
**Example**
|
|
488
|
+
|
|
489
|
+
```redscript
|
|
490
|
+
let impact_v: int = impact_velocity(400) // falling from 4 blocks
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
---
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Player
|
|
2
|
+
|
|
3
|
+
> Auto-generated from `src/stdlib/player.mcrs` — do not edit manually.
|
|
4
|
+
|
|
5
|
+
## API
|
|
6
|
+
|
|
7
|
+
- [heal](#heal)
|
|
8
|
+
- [damage](#damage)
|
|
9
|
+
- [is_op](#is-op)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## `heal` <Badge type="info" text="v1.0.0" />
|
|
14
|
+
|
|
15
|
+
Heal the nearest player by adding `amount` to their #health scoreboard.
|
|
16
|
+
|
|
17
|
+
```redscript
|
|
18
|
+
fn heal(amount: int)
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Parameters**
|
|
22
|
+
|
|
23
|
+
| Parameter | Description |
|
|
24
|
+
|-----------|-------------|
|
|
25
|
+
| `amount` | Number of health points to restore (positive integer) |
|
|
26
|
+
|
|
27
|
+
**Returns:** void — modifies the #health scoreboard objective of @p
|
|
28
|
+
|
|
29
|
+
**Example**
|
|
30
|
+
|
|
31
|
+
```redscript
|
|
32
|
+
heal(10) // restore 10 HP to nearest player
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## `damage` <Badge type="info" text="v1.0.0" />
|
|
38
|
+
|
|
39
|
+
Deal damage to the nearest player, clamping health to a minimum of 0.
|
|
40
|
+
|
|
41
|
+
```redscript
|
|
42
|
+
fn damage(amount: int)
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Parameters**
|
|
46
|
+
|
|
47
|
+
| Parameter | Description |
|
|
48
|
+
|-----------|-------------|
|
|
49
|
+
| `amount` | Number of damage points to apply (positive integer) |
|
|
50
|
+
|
|
51
|
+
**Returns:** void — modifies the #health scoreboard objective of @p; will not go below 0
|
|
52
|
+
|
|
53
|
+
**Example**
|
|
54
|
+
|
|
55
|
+
```redscript
|
|
56
|
+
damage(5) // deal 5 damage to nearest player
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## `is_op` <Badge type="info" text="v1.0.0" />
|
|
62
|
+
|
|
63
|
+
Check whether the nearest player has the `op` tag (operator status).
|
|
64
|
+
|
|
65
|
+
```redscript
|
|
66
|
+
fn is_op() -> int
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
**Returns:** 1 if @p has the `op` entity tag, 0 otherwise
|
|
70
|
+
|
|
71
|
+
**Example**
|
|
72
|
+
|
|
73
|
+
```redscript
|
|
74
|
+
let admin: int = is_op()
|
|
75
|
+
// if (admin == 1) { ... }
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
---
|