@kradle/challenges-sdk 0.9.0 → 0.11.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 (84) hide show
  1. package/CHANGELOG.md +50 -1
  2. package/LLM_README.md +235 -2340
  3. package/README.md +151 -571
  4. package/dist/index.d.ts +1 -4
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +2 -6
  7. package/dist/index.js.map +1 -1
  8. package/dist/runtime/examples/capture-the-flag.d.ts +33 -0
  9. package/dist/runtime/examples/capture-the-flag.d.ts.map +1 -0
  10. package/dist/runtime/examples/capture-the-flag.js +79 -0
  11. package/dist/runtime/examples/capture-the-flag.js.map +1 -0
  12. package/dist/runtime/examples/climb.d.ts +34 -0
  13. package/dist/runtime/examples/climb.d.ts.map +1 -0
  14. package/dist/runtime/examples/climb.js +54 -0
  15. package/dist/runtime/examples/climb.js.map +1 -0
  16. package/dist/runtime/examples/four-bridges.d.ts +107 -0
  17. package/dist/runtime/examples/four-bridges.d.ts.map +1 -0
  18. package/dist/runtime/examples/four-bridges.js +294 -0
  19. package/dist/runtime/examples/four-bridges.js.map +1 -0
  20. package/dist/runtime/examples/herding.d.ts +59 -0
  21. package/dist/runtime/examples/herding.d.ts.map +1 -0
  22. package/dist/runtime/examples/herding.js +181 -0
  23. package/dist/runtime/examples/herding.js.map +1 -0
  24. package/dist/runtime/examples/skywars.d.ts +116 -0
  25. package/dist/runtime/examples/skywars.d.ts.map +1 -0
  26. package/dist/runtime/examples/skywars.js +253 -0
  27. package/dist/runtime/examples/skywars.js.map +1 -0
  28. package/dist/runtime/harness.d.ts +176 -0
  29. package/dist/runtime/harness.d.ts.map +1 -0
  30. package/dist/runtime/harness.js +441 -0
  31. package/dist/runtime/harness.js.map +1 -0
  32. package/dist/runtime/index.d.ts +2 -0
  33. package/dist/runtime/index.d.ts.map +1 -0
  34. package/dist/runtime/index.js +18 -0
  35. package/dist/runtime/index.js.map +1 -0
  36. package/dist/runtime/sandbox-registry.d.ts +7 -0
  37. package/dist/runtime/sandbox-registry.d.ts.map +1 -0
  38. package/dist/runtime/sandbox-registry.js +16 -0
  39. package/dist/runtime/sandbox-registry.js.map +1 -0
  40. package/dist/runtime/sandbox.d.ts +29 -0
  41. package/dist/runtime/sandbox.d.ts.map +1 -0
  42. package/dist/runtime/sandbox.js +70 -0
  43. package/dist/runtime/sandbox.js.map +1 -0
  44. package/dist/runtime/sdk.d.ts +1038 -0
  45. package/dist/runtime/sdk.d.ts.map +1 -0
  46. package/dist/runtime/sdk.js +1271 -0
  47. package/dist/runtime/sdk.js.map +1 -0
  48. package/dist/runtime/world.d.ts +141 -0
  49. package/dist/runtime/world.d.ts.map +1 -0
  50. package/dist/runtime/world.js +344 -0
  51. package/dist/runtime/world.js.map +1 -0
  52. package/package.json +76 -39
  53. package/dist/actions.d.ts +0 -901
  54. package/dist/actions.d.ts.map +0 -1
  55. package/dist/actions.js +0 -1155
  56. package/dist/actions.js.map +0 -1
  57. package/dist/api_utils.d.ts +0 -25
  58. package/dist/api_utils.d.ts.map +0 -1
  59. package/dist/api_utils.js +0 -48
  60. package/dist/api_utils.js.map +0 -1
  61. package/dist/challenge.d.ts +0 -58
  62. package/dist/challenge.d.ts.map +0 -1
  63. package/dist/challenge.js +0 -578
  64. package/dist/challenge.js.map +0 -1
  65. package/dist/commands.d.ts +0 -57
  66. package/dist/commands.d.ts.map +0 -1
  67. package/dist/commands.js +0 -200
  68. package/dist/commands.js.map +0 -1
  69. package/dist/constants.d.ts +0 -72
  70. package/dist/constants.d.ts.map +0 -1
  71. package/dist/constants.js +0 -109
  72. package/dist/constants.js.map +0 -1
  73. package/dist/testmode.d.ts +0 -3
  74. package/dist/testmode.d.ts.map +0 -1
  75. package/dist/testmode.js +0 -19
  76. package/dist/testmode.js.map +0 -1
  77. package/dist/types.d.ts +0 -197
  78. package/dist/types.d.ts.map +0 -1
  79. package/dist/types.js +0 -38
  80. package/dist/types.js.map +0 -1
  81. package/dist/utils.d.ts +0 -17
  82. package/dist/utils.d.ts.map +0 -1
  83. package/dist/utils.js +0 -22
  84. package/dist/utils.js.map +0 -1
package/dist/challenge.js DELETED
@@ -1,578 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.ChallengeBase = exports.DEFAULT_CHALLENGE_PATH = void 0;
37
- exports.createChallenge = createChallenge;
38
- const path = __importStar(require("node:path"));
39
- const sandstone_1 = require("sandstone");
40
- const actions_1 = require("./actions");
41
- const commands_1 = require("./commands");
42
- const constants_1 = require("./constants");
43
- const testmode_1 = require("./testmode");
44
- const types_1 = require("./types");
45
- const utils_1 = require("./utils");
46
- exports.DEFAULT_CHALLENGE_PATH = "kradle-studio/challenges";
47
- const PREVIOUS_VALUE_PREFIX = "_prev_";
48
- const PREVIOUS_VALUES_GLOBAL_OBJECTIVE_NAME = "prev_glob_values";
49
- const EVENT_FIRES_COUNTER_PREFIX = "_count_";
50
- const EVENT_FIRES_GLOBAL_COUNTER_OBJECTIVE_NAME = "fired_ev_counter";
51
- let uniqueObjectiveCounter = 0;
52
- /**
53
- * Adds a suffix to the objective name while ensuring it fits within the 16 character limit.
54
- */
55
- function addSuffixToObjectiveName(name, suffix) {
56
- const trimmedName = name.slice(0, 16 - suffix.length);
57
- return `${trimmedName}${suffix}`;
58
- }
59
- /**
60
- * Makes sure the objective name is unique by appending a counter to it.
61
- * This is necessary because Minecraft requires objective names to be unique,
62
- * as well as to fit within the 16 character limit.
63
- *
64
- * This is meant to be used for mass-generated objectives (previous values, counter of fired events...)
65
- */
66
- function getUniqueObjectiveName(name) {
67
- uniqueObjectiveCounter++;
68
- return addSuffixToObjectiveName(name, uniqueObjectiveCounter.toString());
69
- }
70
- /**
71
- * Returns an Objective instance for the given name and type.
72
- * If the objective already exists, it returns the existing one.
73
- * This is useful to avoid creating multiple objectives with the same name.
74
- */
75
- function getOrCreateObjective(name, type) {
76
- try {
77
- return sandstone_1.Objective.create(name, type);
78
- }
79
- catch (_) {
80
- return sandstone_1.Objective.get(name);
81
- }
82
- }
83
- function isScoreCustomEvent(event) {
84
- return "score" in event;
85
- }
86
- function isAdvancementCustomEvent(event) {
87
- return "criteria" in event;
88
- }
89
- class ChallengeBase {
90
- game_duration;
91
- roles;
92
- full_variables;
93
- variablesPreviousValues;
94
- _events = {};
95
- /* The custom score events provided by the user, still in input type */
96
- _userInputCustomEvents = [];
97
- _end_condition;
98
- _win_conditions;
99
- name;
100
- kradle_challenge_path;
101
- spawnPoint;
102
- resolvedDefaults;
103
- constructor(config) {
104
- this.name = config.name;
105
- // Output path is CLI-managed: it injects KRADLE_CHALLENGES_PATH and reads
106
- // the built datapack back from there. We resolve from the env var and
107
- // ignore config.kradle_challenge_path so a hand- or LLM-authored value
108
- // (e.g. "./output") can't redirect the build away from where the CLI
109
- // packages it. Falls back to DEFAULT_CHALLENGE_PATH for standalone use.
110
- this.kradle_challenge_path = process.env.KRADLE_CHALLENGES_PATH || exports.DEFAULT_CHALLENGE_PATH;
111
- if (config.kradle_challenge_path !== undefined) {
112
- console.warn(`[kradle] Warning: "kradle_challenge_path" is deprecated and ignored — the datapack output path is managed by the CLI. Please remove it from your createChallenge() config.`);
113
- }
114
- // undefined or 0 means no time limit
115
- this.game_duration = config.GAME_DURATION || undefined;
116
- // `null` means the user explicitly opted out of all implicit setup;
117
- // a populated object means apply (with their per-rule overrides on top
118
- // of the SDK defaults).
119
- this.resolvedDefaults = (0, types_1.resolveChallengeDefaults)(config.defaults);
120
- // Validate roles against allowed values if env var is set
121
- const allowedRoles = process.env.KRADLE_CHALLENGE_ROLES;
122
- if (allowedRoles) {
123
- const validRoles = JSON.parse(allowedRoles);
124
- for (const role of config.roles) {
125
- if (!validRoles.includes(role)) {
126
- throw new Error(`Invalid role "${role}". Valid roles are: ${validRoles.join(", ")}. ` +
127
- `Make sure the role is defined in config.ts under "roles".`);
128
- }
129
- }
130
- }
131
- this.roles = Object.fromEntries(config.roles.map((role) => [role, role]));
132
- this.spawnPoint = config.spawnPoint;
133
- const all_variables = {
134
- ...constants_1.BUILTIN_VARIABLES,
135
- ...config.custom_variables,
136
- };
137
- this.full_variables = {
138
- ...Object.fromEntries(Object.entries(all_variables).map(([key, value]) => {
139
- if ((0, types_1.isSpecificObjectiveVariable)(value)) {
140
- return [
141
- key,
142
- {
143
- type: value.type,
144
- score: sandstone_1.Objective.create(key, value.objective_type)("@s"),
145
- default: value.default,
146
- updater: value.updater,
147
- },
148
- ];
149
- }
150
- if (value.type === "global") {
151
- const objective = value.hidden ? constants_1.HIDDEN_OBJECTIVE : constants_1.VISIBLE_OBJECTIVE;
152
- return [
153
- key,
154
- {
155
- type: value.type,
156
- score: objective(key),
157
- default: value.default,
158
- updater: value.updater,
159
- },
160
- ];
161
- }
162
- return [
163
- key,
164
- {
165
- type: value.type,
166
- score: sandstone_1.Objective.create(key, "dummy")("@s"),
167
- default: value.default,
168
- updater: value.updater,
169
- },
170
- ];
171
- })),
172
- };
173
- }
174
- get variables() {
175
- return Object.fromEntries(Object.entries(this.full_variables).map(([key, value]) => {
176
- return [key, value.score];
177
- }));
178
- }
179
- /**
180
- * Build a CustomScoreEvent from an _InputScoreCustomEventType.
181
- * This will setup the tracking objective.
182
- *
183
- * @param event The input event to create the custom event from.
184
- * @param suffix A suffix that will be added to the variable's debug name, ensuring its uniqueness.
185
- */
186
- buildCustomScoreEvent(event, suffix) {
187
- // How we store fire counters will depend whether the score is global or individual
188
- const variableName = this.getVariableName(event.score);
189
- const variableType = this.getVariableType(event.score);
190
- const debugName = `${variableName}__${suffix}`;
191
- if (variableType === "global") {
192
- // For global scores, we create a single global objective.
193
- const objective = getOrCreateObjective(EVENT_FIRES_GLOBAL_COUNTER_OBJECTIVE_NAME, "dummy");
194
- return {
195
- inputEvent: event,
196
- counter: objective(debugName),
197
- type: variableType,
198
- debugName: debugName,
199
- };
200
- }
201
- // For individual scores, we have to create a dedicated mirror objective
202
- const objective = getOrCreateObjective(getUniqueObjectiveName(EVENT_FIRES_COUNTER_PREFIX + variableName), "dummy");
203
- return {
204
- inputEvent: event,
205
- counter: objective(event.score.target),
206
- type: variableType,
207
- debugName: debugName,
208
- };
209
- }
210
- addVariable(name, variable) {
211
- // @ts-expect-error
212
- if (this.full_variables[name]) {
213
- throw new Error(`Variable with name ${name} already exists.`);
214
- }
215
- // @ts-expect-error
216
- this.full_variables[name] = variable;
217
- }
218
- getPreviousValueScore(name) {
219
- if (!this.variablesPreviousValues) {
220
- throw new Error("Variables previous values not initialized.");
221
- }
222
- return this.variablesPreviousValues[name];
223
- }
224
- events(events) {
225
- this._events = events(this.variables, this.roles);
226
- return this;
227
- }
228
- /**
229
- * Returns the name of the variable based on its score.
230
- */
231
- getVariableName(variable) {
232
- const variableName = Object.entries(this.full_variables).find(([_name, value]) => value.score === variable);
233
- if (!variableName) {
234
- throw new Error(`Variable with score ${variable} not found in variables.`);
235
- }
236
- return variableName[0];
237
- }
238
- /**
239
- * Returns the type of the variable (individual/global) based on its score.
240
- */
241
- getVariableType(score) {
242
- const variableName = this.getVariableName(score);
243
- if (!variableName) {
244
- throw new Error(`Score ${score} not found in variables.`);
245
- }
246
- return this.full_variables[variableName].type;
247
- }
248
- custom_events(custom_events) {
249
- const inputCustomEvents = custom_events(this.variables, this.roles);
250
- // First, we translate advancement-based events directly into dedicated scores, and create the related Advancement
251
- const advancementsAsScoreCustomEvents = inputCustomEvents
252
- .filter(isAdvancementCustomEvent)
253
- .map((event, index) => {
254
- const trigger = (event.criteria?.[0].trigger ?? "").split("minecraft:").at(-1)?.replace(/[:/]/g, "_");
255
- const name = `adv_${trigger}__${index}`;
256
- const score = getOrCreateObjective(getUniqueObjectiveName(name), "dummy")("@s");
257
- this.addVariable(name, {
258
- score: score,
259
- default: 0,
260
- type: "individual",
261
- updater: undefined,
262
- });
263
- const setMCFunction = (0, sandstone_1.MCFunction)(`custom_events_advancements/${name}`, () => {
264
- // Called when the advancement is granted. This sets the score to 1 and revokes the advancement.
265
- score.set(1);
266
- advancement.revoke((0, sandstone_1.Selector)("@s"));
267
- });
268
- const advancement = (0, sandstone_1.Advancement)(name, {
269
- criteria: Object.fromEntries(event.criteria.map((criterion, criterionIndex) => [`criterion_${criterionIndex}`, criterion])),
270
- rewards: {
271
- function: setMCFunction,
272
- },
273
- });
274
- return {
275
- actions: () => {
276
- // First action is to reset the score to 0
277
- actions_1.Actions.set({ variable: score, value: 0 });
278
- event.actions();
279
- },
280
- mode: event.mode,
281
- score: score,
282
- };
283
- });
284
- this._userInputCustomEvents = [...inputCustomEvents.filter(isScoreCustomEvent), ...advancementsAsScoreCustomEvents];
285
- return this;
286
- }
287
- end_condition(condition) {
288
- this._end_condition = condition?.(this.variables, this.roles);
289
- return this;
290
- }
291
- win_conditions(condition) {
292
- this._win_conditions = condition(this.variables, this.roles);
293
- this.build();
294
- }
295
- /**
296
- * Processes a custom score event by checking if the score has reached the target,
297
- * and if so, executes the actions associated with the event.
298
- *
299
- * @param event - The custom event to process.
300
- * @param mcFunctionReference - Optional reference to the parent MCFunction - used to give better naming to the children functions.
301
- */
302
- processCustomScoreEvent(event) {
303
- const { score, target, actions, mode } = event.inputEvent;
304
- const { type, counter, debugName } = event;
305
- const previousScore = this.getPreviousValueScore(this.getVariableName(score));
306
- // If no target is specified, we assume the event fires when the score changes from its previous value
307
- const scoreCondition = target
308
- ? sandstone_1._.and(previousScore.notEqualTo(target), score.equalTo(target))
309
- : score.notEqualTo(previousScore);
310
- // If the mode is "fire_once", we also check if the counter is 0.
311
- const condition = mode === "repeatable" ? scoreCondition : sandstone_1._.and(scoreCondition, counter.equalTo(0));
312
- if (type === "global") {
313
- // For global scores, we can directly use the condition
314
- (0, sandstone_1.comment)(`Processing global custom score event ${debugName}`);
315
- sandstone_1._.if(condition, () => {
316
- actions();
317
- counter.add(1);
318
- });
319
- }
320
- else {
321
- // For individual scores, we need to check each player's score
322
- (0, sandstone_1.comment)(`Processing individual custom score event ${debugName}`);
323
- // `at @s` as well as `as @s`: process_custom_events runs from the server-context tick, so without a
324
- // position, relative coords / distance selectors in the handler resolve from world spawn, not the player.
325
- sandstone_1.execute.as(constants_1.ALL).at("@s").run((0, utils_1.getChildFunctionName)(debugName), () => {
326
- sandstone_1._.if(condition, () => {
327
- actions();
328
- counter.add(1);
329
- });
330
- });
331
- }
332
- }
333
- /**
334
- * Builds the datapack based on the challenge configuration.
335
- */
336
- build() {
337
- // Initialize previous values objectives
338
- // Will store the previous values of all variables
339
- this.variablesPreviousValues = Object.fromEntries(Object.entries(this.full_variables).map(([name, { type, score }]) => {
340
- if (type === "global") {
341
- // For global variables, we create a single global objective to store previous values
342
- const objective = getOrCreateObjective(PREVIOUS_VALUES_GLOBAL_OBJECTIVE_NAME, "dummy");
343
- return [name, objective(`${name}__${score.target}`)];
344
- }
345
- // For individual variables, we create a dedicated mirror objective
346
- const objective = sandstone_1.Objective.create(getUniqueObjectiveName(PREVIOUS_VALUE_PREFIX + name), "dummy");
347
- return [name, objective(score.target)];
348
- }));
349
- // "Build" the custom events (initializes the tracking objective)
350
- const customScoreEvents = [...this._userInputCustomEvents, ...(0, constants_1.BUILTIN_SCORE_EVENTS)(this.variables)].map((event, index) => this.buildCustomScoreEvent(event, index));
351
- // Initialize the challenge
352
- const spawnPoint = this.spawnPoint;
353
- if (spawnPoint) {
354
- // If an entity has been provided, try to set the world spawn point until it succeeds
355
- const set_world_spawn_point = (0, sandstone_1.MCFunction)("set_world_spawn_point", () => {
356
- if (spawnPoint) {
357
- if (spawnPoint instanceof sandstone_1.SelectorClass) {
358
- // Entity selector - execute setworld=spawn at the entity's location
359
- sandstone_1._.if(spawnPoint, () => {
360
- sandstone_1.execute.at(spawnPoint).run.setworldspawn();
361
- }).else(() => {
362
- // Schedule 1 tick later to try again
363
- set_world_spawn_point.schedule(1);
364
- });
365
- }
366
- else {
367
- // Explicit coordinates
368
- (0, sandstone_1.setworldspawn)((0, sandstone_1.abs)(spawnPoint.x, spawnPoint.y, spawnPoint.z));
369
- }
370
- }
371
- }, {
372
- runOnLoad: true,
373
- });
374
- // Everytime a player joins, set their spawn point and tp them to it
375
- const SPAWN_POINT_SET_TAG = "kradle.spawn_point_set";
376
- (0, sandstone_1.MCFunction)("set_spawn_point", () => {
377
- const positionedExecute = spawnPoint instanceof sandstone_1.SelectorClass
378
- ? sandstone_1.execute.at(spawnPoint)
379
- : sandstone_1.execute.positioned((0, sandstone_1.abs)(spawnPoint.x, spawnPoint.y, spawnPoint.z));
380
- positionedExecute.as((0, sandstone_1.Selector)("@a", { tag: `!${SPAWN_POINT_SET_TAG}` })).run(() => {
381
- (0, sandstone_1.tag)("@s").add(SPAWN_POINT_SET_TAG);
382
- (0, sandstone_1.teleport)("@s", (0, sandstone_1.rel)(0, 0, 0));
383
- (0, sandstone_1.spawnpoint)("@s", (0, sandstone_1.rel)(0, 0, 0));
384
- });
385
- }, {
386
- runEveryTick: true,
387
- });
388
- }
389
- (0, sandstone_1.MCFunction)("start_challenge", () => {
390
- (0, sandstone_1.comment)("1. Setup all the global variables to their default values.");
391
- if (this.game_duration !== undefined) {
392
- (0, sandstone_1.comment)(" This includes the game timer!");
393
- this.variables.game_timer.set(this.game_duration);
394
- }
395
- for (const variable of Object.values(this.full_variables)) {
396
- if (variable.type === "global" && variable.default !== undefined) {
397
- variable.score.set(variable.default);
398
- }
399
- }
400
- (0, sandstone_1.tag)(constants_1.ALL).remove(constants_1.WINNER_TAG);
401
- (0, sandstone_1.comment)("2. Set up test mode if it's enabled - needs to run here so the tester player is tagged");
402
- if (testmode_1.test_mode_enabled) {
403
- (0, testmode_1.set_up_test_mode)();
404
- }
405
- if (this.resolvedDefaults !== null) {
406
- (0, sandstone_1.comment)("2.5. Apply implicit world setup (overridable via the `defaults` config field).", " Per-rule overrides let wave-defense / boss / PvP designs opt out of individual rules.");
407
- const d = this.resolvedDefaults;
408
- const t = d.time;
409
- if (t !== false)
410
- sandstone_1.time.set(t);
411
- (0, sandstone_1.gamerule)("doDaylightCycle", d.daylightCycle);
412
- (0, sandstone_1.gamerule)("doMobSpawning", d.mobSpawning);
413
- (0, sandstone_1.gamerule)("naturalRegeneration", d.naturalRegeneration);
414
- }
415
- (0, sandstone_1.comment)("3. Process the start_challenge events");
416
- this._events.start_challenge?.();
417
- (0, sandstone_1.comment)("4. Schedule the init_participants function to run after 1s");
418
- init_participants.schedule("1s");
419
- (0, sandstone_1.comment)("5. Display the game objective");
420
- sandstone_1.scoreboard.objectives.setDisplay("sidebar", constants_1.VISIBLE_OBJECTIVE.name);
421
- });
422
- const init_participants = (0, sandstone_1.MCFunction)("init_participants", () => {
423
- (0, sandstone_1.comment)("1. Setup all individual variables to their default values.");
424
- for (const [name, variable] of Object.entries(this.full_variables)) {
425
- const previousValue = this.getPreviousValueScore(name);
426
- if (typeof previousValue === "undefined") {
427
- throw new Error(`Previous value for variable ${name} not found.`);
428
- }
429
- if (variable.type === "individual" && variable.default !== undefined) {
430
- sandstone_1.execute.as(constants_1.ALL).run((0, utils_1.getChildFunctionName)(name), () => {
431
- variable.score.set(variable.default);
432
- previousValue.set(variable.default);
433
- });
434
- }
435
- if (variable.type === "global" && variable.default !== undefined) {
436
- variable.score.set(variable.default);
437
- previousValue.set(variable.default);
438
- }
439
- }
440
- (0, sandstone_1.comment)("1.5. Assign player_number to every participant *before* user events run.", " The on_tick updater skips work while game_state != ON (set at step 4),", " so without this step every user-side `scores: { player_number: N }`", " selector in step 3 would silently match nobody (all players still at", " default 0). Note: relies on step 1 having reset player_number to 0 for", " each participant — without the reset, the score has no entry at all", " and `if score @s player_number matches 0` returns false (no-entry != 0).");
441
- const playerNumberVar = this.full_variables.player_number;
442
- if (playerNumberVar?.updater) {
443
- sandstone_1.execute.as(constants_1.ALL).run("init_participants/assign_player_numbers", () => {
444
- playerNumberVar.updater?.(playerNumberVar.score, this.variables);
445
- });
446
- }
447
- (0, sandstone_1.comment)("2. Set the events fire counters to 0");
448
- for (const event of customScoreEvents) {
449
- // We could make the distinction between global and individual counters,
450
- // but it just works to make all players set event fires to 0
451
- sandstone_1.execute.as(constants_1.ALL).run(() => {
452
- event.counter.set(0);
453
- });
454
- }
455
- if (this.resolvedDefaults !== null) {
456
- (0, sandstone_1.comment)("2.5. Apply implicit per-participant init (overridable via the `defaults` config field).");
457
- const d = this.resolvedDefaults;
458
- if (d.clearInventory)
459
- (0, sandstone_1.clear)(constants_1.ALL);
460
- if (d.maxHealth !== false) {
461
- actions_1.Actions.setAttribute({
462
- target: "all",
463
- attribute_: "minecraft:generic.max_health",
464
- value: d.maxHealth,
465
- });
466
- }
467
- }
468
- (0, sandstone_1.comment)("3. Process the init_participants events");
469
- this._events.init_participants?.();
470
- (0, sandstone_1.comment)("4. Set the game state to ON");
471
- this.full_variables.game_state.score.set(constants_1.GAME_STATES.ON);
472
- //tellraw("@a", [`${DISPLAY_TAG}The challenge has started!`]);
473
- });
474
- // Defined once at module scope so end_challenge can replay the
475
- // updaters one final time before the watcher snapshots scores —
476
- // otherwise score changes that happen after on_tick's updater
477
- // pass (notably from process_custom_events firing on the same
478
- // tick that triggers end_challenge) never propagate to
479
- // main_score / kradle.board, and the orchestrator records a
480
- // stale score.
481
- const custom_variable_updaters = (0, sandstone_1.MCFunction)("custom_variable_updaters", () => {
482
- for (const [name, variable] of Object.entries(this.full_variables)) {
483
- if (variable.updater) {
484
- (0, sandstone_1.comment)(`Updating variable ${name}`);
485
- if (variable.type === "individual") {
486
- sandstone_1.execute
487
- .as(constants_1.ALL)
488
- .at("@s")
489
- .run((0, utils_1.getChildFunctionName)(`update_${name}`), () => {
490
- variable.updater?.(variable.score, this.variables);
491
- });
492
- }
493
- else {
494
- variable.updater(variable.score, this.variables);
495
- }
496
- }
497
- }
498
- });
499
- (0, sandstone_1.MCFunction)("on_tick", () => {
500
- sandstone_1._.if(this.variables.game_state.equalTo(constants_1.GAME_STATES.ON), () => {
501
- (0, sandstone_1.comment)("1. Run all updaters");
502
- custom_variable_updaters();
503
- (0, sandstone_1.comment)("2. Process the on_tick event");
504
- this._events.on_tick?.();
505
- (0, sandstone_1.comment)("3. Process custom events");
506
- (0, sandstone_1.MCFunction)("process_custom_events", () => {
507
- // We process all custom events - this checks if the condition is reached & fire them if necessary
508
- customScoreEvents.forEach((event) => {
509
- this.processCustomScoreEvent(event);
510
- });
511
- })();
512
- (0, sandstone_1.comment)("4. Set previous values for all variables");
513
- sandstone_1.execute.as(constants_1.ALL).run((0, utils_1.getChildFunctionName)("set_previous_values"), () => {
514
- for (const [name, variable] of Object.entries(this.full_variables)) {
515
- // We could also make the distinction between global and individual variables,
516
- // but again it just works to run it on all players
517
- const previousValue = this.getPreviousValueScore(name);
518
- previousValue.set(variable.score);
519
- }
520
- });
521
- (0, sandstone_1.comment)("5. Check end conditions");
522
- let endCondition;
523
- if (this._end_condition && this.game_duration !== undefined) {
524
- endCondition = sandstone_1._.or(this._end_condition, this.variables.game_timer.equalTo(this.game_duration));
525
- }
526
- else if (this._end_condition) {
527
- endCondition = this._end_condition;
528
- }
529
- else if (this.game_duration !== undefined) {
530
- endCondition = this.variables.game_timer.equalTo(this.game_duration);
531
- }
532
- if (endCondition) {
533
- sandstone_1._.if(endCondition, () => {
534
- end_challenge();
535
- });
536
- }
537
- });
538
- }, {
539
- runEveryTick: true,
540
- });
541
- const end_challenge = (0, sandstone_1.MCFunction)("end_challenge", () => {
542
- (0, sandstone_1.comment)("0. Final variable sync — replay updaters TWICE so any score change made by", " process_custom_events on this same tick (e.g. share/defect payouts", " that flipped score AFTER on_tick's main pass) propagates fully through", " the cascade: pass 1 lifts user `score` → `main_score`; pass 2 lifts the", " refreshed `main_score` → `kradle.board` (the visible objective the", " watcher reads). Without both passes the watcher still snapshots a", " tick-stale score before Commands.gameOver() fires.");
543
- custom_variable_updaters();
544
- custom_variable_updaters();
545
- (0, sandstone_1.comment)("1. Set the game state to OFF");
546
- this.full_variables.game_state.score.set(constants_1.GAME_STATES.OFF);
547
- (0, sandstone_1.comment)("2. Process the end_challenge events");
548
- this._events.end_challenge?.();
549
- (0, sandstone_1.comment)("2.5. Re-replay updaters TWICE — the user's end_challenge handler may", " have written to `score` (e.g. cascade awards +10 per correct vote).", " Without these passes those final-tick changes never reach kradle.board.");
550
- custom_variable_updaters();
551
- custom_variable_updaters();
552
- (0, sandstone_1.comment)("3. Announce the winners");
553
- for (const [role, condition] of Object.entries(this._win_conditions || {})) {
554
- sandstone_1.execute.as((0, actions_1.mapTarget)(role)).run((0, utils_1.getChildFunctionName)(`check_winner_team_${role}`), () => {
555
- sandstone_1._.if(condition, () => {
556
- actions_1.Actions.announce({
557
- message: [(0, sandstone_1.Selector)("@s"), " has won the challenge!"],
558
- });
559
- (0, sandstone_1.tag)("@s").add(constants_1.WINNER_TAG);
560
- });
561
- });
562
- }
563
- commands_1.Commands.gameOver();
564
- });
565
- (0, sandstone_1.savePack)("datapack", {
566
- customPath: path.join(this.kradle_challenge_path, this.name),
567
- formatVersion: 26,
568
- });
569
- }
570
- }
571
- exports.ChallengeBase = ChallengeBase;
572
- /**
573
- * Creates a new challenge with the provided configuration.
574
- */
575
- function createChallenge(config) {
576
- return new ChallengeBase(config);
577
- }
578
- //# sourceMappingURL=challenge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"challenge.js","sourceRoot":"","sources":["../src/challenge.ts"],"names":[],"mappings":"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"}