redscript-mc 1.0.0 → 1.2.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 (136) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.yml +72 -0
  2. package/.github/ISSUE_TEMPLATE/feature_request.yml +57 -0
  3. package/.github/PULL_REQUEST_TEMPLATE.md +17 -25
  4. package/CHANGELOG.md +112 -0
  5. package/CONTRIBUTING.md +140 -0
  6. package/README.md +28 -19
  7. package/README.zh.md +28 -19
  8. package/dist/__tests__/cli.test.js +148 -10
  9. package/dist/__tests__/codegen.test.js +26 -1
  10. package/dist/__tests__/diagnostics.test.js +5 -5
  11. package/dist/__tests__/e2e.test.js +336 -17
  12. package/dist/__tests__/formatter.test.d.ts +1 -0
  13. package/dist/__tests__/formatter.test.js +40 -0
  14. package/dist/__tests__/lexer.test.js +12 -2
  15. package/dist/__tests__/lowering.test.js +200 -12
  16. package/dist/__tests__/mc-integration.test.js +370 -31
  17. package/dist/__tests__/mc-syntax.test.js +3 -3
  18. package/dist/__tests__/nbt.test.js +2 -2
  19. package/dist/__tests__/optimizer-advanced.test.js +5 -5
  20. package/dist/__tests__/parser.test.js +80 -0
  21. package/dist/__tests__/runtime.test.js +9 -9
  22. package/dist/__tests__/typechecker.test.js +158 -0
  23. package/dist/ast/types.d.ts +40 -3
  24. package/dist/cli.js +25 -7
  25. package/dist/codegen/mcfunction/index.d.ts +1 -1
  26. package/dist/codegen/mcfunction/index.js +38 -3
  27. package/dist/codegen/structure/index.js +32 -1
  28. package/dist/compile.d.ts +10 -0
  29. package/dist/compile.js +36 -5
  30. package/dist/events/types.d.ts +35 -0
  31. package/dist/events/types.js +59 -0
  32. package/dist/formatter/index.d.ts +1 -0
  33. package/dist/formatter/index.js +26 -0
  34. package/dist/index.js +3 -2
  35. package/dist/ir/builder.d.ts +2 -1
  36. package/dist/ir/types.d.ts +11 -2
  37. package/dist/ir/types.js +1 -1
  38. package/dist/lexer/index.d.ts +1 -1
  39. package/dist/lexer/index.js +2 -0
  40. package/dist/lowering/index.d.ts +34 -1
  41. package/dist/lowering/index.js +622 -23
  42. package/dist/mc-test/runner.d.ts +2 -2
  43. package/dist/mc-test/runner.js +3 -3
  44. package/dist/mc-test/setup.js +2 -2
  45. package/dist/parser/index.d.ts +4 -0
  46. package/dist/parser/index.js +153 -16
  47. package/dist/typechecker/index.d.ts +17 -0
  48. package/dist/typechecker/index.js +343 -17
  49. package/docs/COMPILATION_STATS.md +24 -24
  50. package/docs/ENTITY_TYPE_SYSTEM.md +242 -0
  51. package/docs/IMPLEMENTATION_GUIDE.md +1 -1
  52. package/docs/STRUCTURE_TARGET.md +1 -1
  53. package/editors/vscode/.vscodeignore +1 -0
  54. package/editors/vscode/CHANGELOG.md +9 -0
  55. package/editors/vscode/icons/mcrs.svg +7 -0
  56. package/editors/vscode/icons/redscript-icons.json +10 -0
  57. package/editors/vscode/out/extension.js +1295 -80
  58. package/editors/vscode/package-lock.json +2 -2
  59. package/editors/vscode/package.json +10 -3
  60. package/editors/vscode/src/hover.ts +55 -2
  61. package/editors/vscode/src/symbols.ts +42 -0
  62. package/package.json +1 -1
  63. package/src/__tests__/cli.test.ts +176 -10
  64. package/src/__tests__/codegen.test.ts +28 -1
  65. package/src/__tests__/diagnostics.test.ts +5 -5
  66. package/src/__tests__/e2e.test.ts +335 -17
  67. package/src/__tests__/fixtures/event-test.mcrs +13 -0
  68. package/src/__tests__/fixtures/impl-test.mcrs +46 -0
  69. package/src/__tests__/fixtures/interval-test.mcrs +11 -0
  70. package/src/__tests__/fixtures/is-check-test.mcrs +20 -0
  71. package/src/__tests__/fixtures/timeout-test.mcrs +7 -0
  72. package/src/__tests__/lexer.test.ts +14 -2
  73. package/src/__tests__/lowering.test.ts +226 -12
  74. package/src/__tests__/mc-integration.test.ts +421 -31
  75. package/src/__tests__/mc-syntax.test.ts +3 -3
  76. package/src/__tests__/nbt.test.ts +2 -2
  77. package/src/__tests__/optimizer-advanced.test.ts +5 -5
  78. package/src/__tests__/parser.test.ts +91 -5
  79. package/src/__tests__/runtime.test.ts +9 -9
  80. package/src/__tests__/typechecker.test.ts +171 -0
  81. package/src/ast/types.ts +44 -3
  82. package/src/cli.ts +10 -10
  83. package/src/codegen/mcfunction/index.ts +40 -3
  84. package/src/codegen/structure/index.ts +35 -1
  85. package/src/compile.ts +54 -6
  86. package/src/events/types.ts +69 -0
  87. package/src/examples/capture_the_flag.mcrs +208 -0
  88. package/src/examples/{counter.rs → counter.mcrs} +1 -1
  89. package/src/examples/hunger_games.mcrs +301 -0
  90. package/src/examples/new_features_demo.mcrs +193 -0
  91. package/src/examples/parkour_race.mcrs +233 -0
  92. package/src/examples/rpg.mcrs +13 -0
  93. package/src/examples/{shop.rs → shop.mcrs} +1 -1
  94. package/src/examples/{showcase_game.rs → showcase_game.mcrs} +3 -3
  95. package/src/examples/{turret.rs → turret.mcrs} +1 -1
  96. package/src/examples/zombie_survival.mcrs +314 -0
  97. package/src/index.ts +4 -3
  98. package/src/ir/builder.ts +3 -1
  99. package/src/ir/types.ts +12 -2
  100. package/src/lexer/index.ts +3 -1
  101. package/src/lowering/index.ts +684 -24
  102. package/src/mc-test/runner.ts +3 -3
  103. package/src/mc-test/setup.ts +2 -2
  104. package/src/parser/index.ts +170 -19
  105. package/src/stdlib/README.md +178 -140
  106. package/src/stdlib/bossbar.mcrs +68 -0
  107. package/src/stdlib/{cooldown.rs → cooldown.mcrs} +1 -1
  108. package/src/stdlib/effects.mcrs +64 -0
  109. package/src/stdlib/interactions.mcrs +195 -0
  110. package/src/stdlib/inventory.mcrs +38 -0
  111. package/src/stdlib/mobs.mcrs +99 -0
  112. package/src/stdlib/particles.mcrs +52 -0
  113. package/src/stdlib/sets.mcrs +20 -0
  114. package/src/stdlib/spawn.mcrs +41 -0
  115. package/src/stdlib/tags.mcrs +951 -0
  116. package/src/stdlib/teams.mcrs +68 -0
  117. package/src/stdlib/timer.mcrs +72 -0
  118. package/src/stdlib/world.mcrs +92 -0
  119. package/src/typechecker/index.ts +404 -18
  120. package/src/examples/rpg.rs +0 -13
  121. package/src/stdlib/mobs.rs +0 -99
  122. package/src/stdlib/timer.rs +0 -51
  123. /package/src/examples/{arena.rs → arena.mcrs} +0 -0
  124. /package/src/examples/{pvp_arena.rs → pvp_arena.mcrs} +0 -0
  125. /package/src/examples/{quiz.rs → quiz.mcrs} +0 -0
  126. /package/src/examples/{stdlib_demo.rs → stdlib_demo.mcrs} +0 -0
  127. /package/src/examples/{world_manager.rs → world_manager.mcrs} +0 -0
  128. /package/src/stdlib/{combat.rs → combat.mcrs} +0 -0
  129. /package/src/stdlib/{math.rs → math.mcrs} +0 -0
  130. /package/src/stdlib/{player.rs → player.mcrs} +0 -0
  131. /package/src/stdlib/{strings.rs → strings.mcrs} +0 -0
  132. /package/src/templates/{combat.rs → combat.mcrs} +0 -0
  133. /package/src/templates/{economy.rs → economy.mcrs} +0 -0
  134. /package/src/templates/{mini-game-framework.rs → mini-game-framework.mcrs} +0 -0
  135. /package/src/templates/{quest.rs → quest.mcrs} +0 -0
  136. /package/src/test_programs/{zombie_game.rs → zombie_game.mcrs} +0 -0
@@ -1,99 +0,0 @@
1
- // Vanilla Minecraft Java Edition entity type constants.
2
- // Copy the names you need into your own project until RedScript gets imports.
3
-
4
- // Hostile mobs
5
- const ZOMBIE: string = "minecraft:zombie"
6
- const SKELETON: string = "minecraft:skeleton"
7
- const CREEPER: string = "minecraft:creeper"
8
- const SPIDER: string = "minecraft:spider"
9
- const CAVE_SPIDER: string = "minecraft:cave_spider"
10
- const ENDERMAN: string = "minecraft:enderman"
11
- const WITCH: string = "minecraft:witch"
12
- const PHANTOM: string = "minecraft:phantom"
13
- const DROWNED: string = "minecraft:drowned"
14
- const HUSK: string = "minecraft:husk"
15
- const STRAY: string = "minecraft:stray"
16
- const WARDEN: string = "minecraft:warden"
17
- const PILLAGER: string = "minecraft:pillager"
18
- const RAVAGER: string = "minecraft:ravager"
19
- const VINDICATOR: string = "minecraft:vindicator"
20
- const EVOKER: string = "minecraft:evoker"
21
- const VEXE: string = "minecraft:vex"
22
- const ZOMBIE_VILLAGER: string = "minecraft:zombie_villager"
23
- const BLAZE: string = "minecraft:blaze"
24
- const GHAST: string = "minecraft:ghast"
25
- const MAGMA_CUBE: string = "minecraft:magma_cube"
26
- const SLIME: string = "minecraft:slime"
27
- const PIGLIN_BRUTE: string = "minecraft:piglin_brute"
28
- const HOGLIN: string = "minecraft:hoglin"
29
- const ZOGLIN: string = "minecraft:zoglin"
30
- const ENDERMITE: string = "minecraft:endermite"
31
- const SILVERFISH: string = "minecraft:silverfish"
32
- const SHULKER: string = "minecraft:shulker"
33
- const GUARDIAN: string = "minecraft:guardian"
34
- const ELDER_GUARDIAN: string = "minecraft:elder_guardian"
35
- const BOGGED: string = "minecraft:bogged"
36
- const BREEZE: string = "minecraft:breeze"
37
-
38
- // Passive mobs
39
- const PIG: string = "minecraft:pig"
40
- const COW: string = "minecraft:cow"
41
- const SHEEP: string = "minecraft:sheep"
42
- const CHICKEN: string = "minecraft:chicken"
43
- const HORSE: string = "minecraft:horse"
44
- const DONKEY: string = "minecraft:donkey"
45
- const MULE: string = "minecraft:mule"
46
- const RABBIT: string = "minecraft:rabbit"
47
- const COD: string = "minecraft:cod"
48
- const SALMON: string = "minecraft:salmon"
49
- const TROPICAL_FISH: string = "minecraft:tropical_fish"
50
- const PUFFERFISH: string = "minecraft:pufferfish"
51
- const SQUID: string = "minecraft:squid"
52
- const GLOW_SQUID: string = "minecraft:glow_squid"
53
- const BAT: string = "minecraft:bat"
54
- const VILLAGER: string = "minecraft:villager"
55
- const WANDERING_TRADER: string = "minecraft:wandering_trader"
56
- const SNOW_GOLEM: string = "minecraft:snow_golem"
57
- const STRIDER: string = "minecraft:strider"
58
- const AXOLOTL: string = "minecraft:axolotl"
59
- const FROG: string = "minecraft:frog"
60
- const TADPOLE: string = "minecraft:tadpole"
61
- const ALLAY: string = "minecraft:allay"
62
- const SNIFFER: string = "minecraft:sniffer"
63
- const ARMADILLO: string = "minecraft:armadillo"
64
- const TURTLE: string = "minecraft:turtle"
65
-
66
- // Neutral mobs
67
- const WOLF: string = "minecraft:wolf"
68
- const BEE: string = "minecraft:bee"
69
- const POLAR_BEAR: string = "minecraft:polar_bear"
70
- const DOLPHIN: string = "minecraft:dolphin"
71
- const IRON_GOLEM: string = "minecraft:iron_golem"
72
- const PIGLIN: string = "minecraft:piglin"
73
- const ZOMBIFIED_PIGLIN: string = "minecraft:zombified_piglin"
74
- const PANDA: string = "minecraft:panda"
75
- const LLAMA: string = "minecraft:llama"
76
- const TRADER_LLAMA: string = "minecraft:trader_llama"
77
- const CAT: string = "minecraft:cat"
78
- const OCELOT: string = "minecraft:ocelot"
79
- const FOX: string = "minecraft:fox"
80
- const GOAT: string = "minecraft:goat"
81
- const CAMEL: string = "minecraft:camel"
82
-
83
- // Bosses
84
- const ENDER_DRAGON: string = "minecraft:ender_dragon"
85
- const WITHER: string = "minecraft:wither"
86
-
87
- // Special / misc
88
- const ARMOR_STAND: string = "minecraft:armor_stand"
89
- const ITEM_FRAME: string = "minecraft:item_frame"
90
- const GLOW_ITEM_FRAME: string = "minecraft:glow_item_frame"
91
- const PAINTING: string = "minecraft:painting"
92
- const BOAT: string = "minecraft:boat"
93
- const MINECART: string = "minecraft:minecart"
94
- const TNT: string = "minecraft:tnt"
95
- const FALLING_BLOCK: string = "minecraft:falling_block"
96
- const ITEM: string = "minecraft:item"
97
- const XP_ORB: string = "minecraft:experience_orb"
98
- const FIREBALL: string = "minecraft:fireball"
99
- const PLAYER: string = "minecraft:player"
@@ -1,51 +0,0 @@
1
- // Countdown timer helpers.
2
- //
3
- // The current compiler does not propagate string literals through user-defined
4
- // function calls yet, so the `name` parameter is a forward-compatible placeholder.
5
- // This module manages one timer slot backed by fake players on the `rs` objective.
6
-
7
- struct Timer {
8
- ticks: int,
9
- active: int
10
- }
11
-
12
- fn timer_start(name: string, duration: int) {
13
- scoreboard_set("timer_ticks", #rs, duration);
14
- scoreboard_set("timer_active", #rs, 1);
15
- }
16
-
17
- fn timer_tick(name: string) -> int {
18
- let active: int = scoreboard_get("timer_active", #rs);
19
- let ticks: int = scoreboard_get("timer_ticks", #rs);
20
-
21
- if (active == 0) {
22
- return 0;
23
- }
24
-
25
- if (ticks > 0) {
26
- let next: int = ticks - 1;
27
- scoreboard_set("timer_ticks", #rs, next);
28
-
29
- if (next == 0) {
30
- scoreboard_set("timer_active", #rs, 0);
31
- }
32
-
33
- return next;
34
- }
35
-
36
- scoreboard_set("timer_active", #rs, 0);
37
- return 0;
38
- }
39
-
40
- fn timer_done(name: string) -> int {
41
- let active: int = scoreboard_get("timer_active", #rs);
42
- let ticks: int = scoreboard_get("timer_ticks", #rs);
43
-
44
- if (active == 0) {
45
- if (ticks <= 0) {
46
- return 1;
47
- }
48
- }
49
-
50
- return 0;
51
- }
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes