@kradle/challenges-sdk 0.10.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 +32 -1
  2. package/LLM_README.md +235 -2333
  3. package/README.md +151 -570
  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 -40
  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 -582
  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 -78
  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 -195
  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,582 +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_provider;
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
- if (this._events.init_participants) {
227
- console.warn(`[kradle] Warning: the "init_participants" event is deprecated — it now runs in the same tick as ` +
228
- `"start_challenge", immediately after it. Per-player state (player_number, individual variable ` +
229
- `defaults) is already initialized when "start_challenge" runs, so move your setup there ` +
230
- `(use forEveryPlayer() for per-player logic).`);
231
- }
232
- return this;
233
- }
234
- /**
235
- * Returns the name of the variable based on its score.
236
- */
237
- getVariableName(variable) {
238
- const variableName = Object.entries(this.full_variables).find(([_name, value]) => value.score === variable);
239
- if (!variableName) {
240
- throw new Error(`Variable with score ${variable} not found in variables.`);
241
- }
242
- return variableName[0];
243
- }
244
- /**
245
- * Returns the type of the variable (individual/global) based on its score.
246
- */
247
- getVariableType(score) {
248
- const variableName = this.getVariableName(score);
249
- if (!variableName) {
250
- throw new Error(`Score ${score} not found in variables.`);
251
- }
252
- return this.full_variables[variableName].type;
253
- }
254
- custom_events(custom_events) {
255
- const inputCustomEvents = custom_events(this.variables, this.roles);
256
- // First, we translate advancement-based events directly into dedicated scores, and create the related Advancement
257
- const advancementsAsScoreCustomEvents = inputCustomEvents
258
- .filter(isAdvancementCustomEvent)
259
- .map((event, index) => {
260
- const trigger = (event.criteria?.[0].trigger ?? "").split("minecraft:").at(-1)?.replace(/[:/]/g, "_");
261
- const name = `adv_${trigger}__${index}`;
262
- const score = getOrCreateObjective(getUniqueObjectiveName(name), "dummy")("@s");
263
- this.addVariable(name, {
264
- score: score,
265
- default: 0,
266
- type: "individual",
267
- updater: undefined,
268
- });
269
- const setMCFunction = (0, sandstone_1.MCFunction)(`custom_events_advancements/${name}`, () => {
270
- // Called when the advancement is granted. This sets the score to 1 and revokes the advancement.
271
- score.set(1);
272
- advancement.revoke((0, sandstone_1.Selector)("@s"));
273
- });
274
- const advancement = (0, sandstone_1.Advancement)(name, {
275
- criteria: Object.fromEntries(event.criteria.map((criterion, criterionIndex) => [`criterion_${criterionIndex}`, criterion])),
276
- rewards: {
277
- function: setMCFunction,
278
- },
279
- });
280
- return {
281
- actions: () => {
282
- // First action is to reset the score to 0
283
- actions_1.Actions.set({ variable: score, value: 0 });
284
- event.actions();
285
- },
286
- mode: event.mode,
287
- score: score,
288
- };
289
- });
290
- this._userInputCustomEvents = [...inputCustomEvents.filter(isScoreCustomEvent), ...advancementsAsScoreCustomEvents];
291
- return this;
292
- }
293
- end_condition(condition) {
294
- // Deferred to build(): an eager call would read undefined for the
295
- // documented endReached bridge pattern (KRA-1851).
296
- this._end_condition_provider = condition;
297
- return this;
298
- }
299
- win_conditions(condition) {
300
- this._win_conditions = condition(this.variables, this.roles);
301
- this.build();
302
- }
303
- /**
304
- * Processes a custom score event by checking if the score has reached the target,
305
- * and if so, executes the actions associated with the event.
306
- *
307
- * @param event - The custom event to process.
308
- * @param mcFunctionReference - Optional reference to the parent MCFunction - used to give better naming to the children functions.
309
- */
310
- processCustomScoreEvent(event) {
311
- const { score, target, actions, mode } = event.inputEvent;
312
- const { type, counter, debugName } = event;
313
- const previousScore = this.getPreviousValueScore(this.getVariableName(score));
314
- // If no target is specified, we assume the event fires when the score changes from its previous value
315
- const scoreCondition = target
316
- ? sandstone_1._.and(previousScore.notEqualTo(target), score.equalTo(target))
317
- : score.notEqualTo(previousScore);
318
- // If the mode is "fire_once", we also check if the counter is 0.
319
- const condition = mode === "repeatable" ? scoreCondition : sandstone_1._.and(scoreCondition, counter.equalTo(0));
320
- if (type === "global") {
321
- // For global scores, we can directly use the condition
322
- (0, sandstone_1.comment)(`Processing global custom score event ${debugName}`);
323
- sandstone_1._.if(condition, () => {
324
- actions();
325
- counter.add(1);
326
- });
327
- }
328
- else {
329
- // For individual scores, we need to check each player's score
330
- (0, sandstone_1.comment)(`Processing individual custom score event ${debugName}`);
331
- // `at @s` as well as `as @s`: process_custom_events runs from the server-context tick, so without a
332
- // position, relative coords / distance selectors in the handler resolve from world spawn, not the player.
333
- sandstone_1.execute.as(constants_1.ALL).at("@s").run((0, utils_1.getChildFunctionName)(debugName), () => {
334
- sandstone_1._.if(condition, () => {
335
- actions();
336
- counter.add(1);
337
- });
338
- });
339
- }
340
- }
341
- /**
342
- * Builds the datapack based on the challenge configuration.
343
- */
344
- build() {
345
- // Initialize previous values objectives
346
- // Will store the previous values of all variables
347
- this.variablesPreviousValues = Object.fromEntries(Object.entries(this.full_variables).map(([name, { type, score }]) => {
348
- if (type === "global") {
349
- // For global variables, we create a single global objective to store previous values
350
- const objective = getOrCreateObjective(PREVIOUS_VALUES_GLOBAL_OBJECTIVE_NAME, "dummy");
351
- return [name, objective(`${name}__${score.target}`)];
352
- }
353
- // For individual variables, we create a dedicated mirror objective
354
- const objective = sandstone_1.Objective.create(getUniqueObjectiveName(PREVIOUS_VALUE_PREFIX + name), "dummy");
355
- return [name, objective(score.target)];
356
- }));
357
- // "Build" the custom events (initializes the tracking objective)
358
- const customScoreEvents = [...this._userInputCustomEvents, ...(0, constants_1.BUILTIN_SCORE_EVENTS)(this.variables)].map((event, index) => this.buildCustomScoreEvent(event, index));
359
- // Initialize the challenge
360
- const spawnPoint = this.spawnPoint;
361
- if (spawnPoint) {
362
- // If an entity has been provided, try to set the world spawn point until it succeeds
363
- const set_world_spawn_point = (0, sandstone_1.MCFunction)("set_world_spawn_point", () => {
364
- if (spawnPoint) {
365
- if (spawnPoint instanceof sandstone_1.SelectorClass) {
366
- // Entity selector - execute setworld=spawn at the entity's location
367
- sandstone_1._.if(spawnPoint, () => {
368
- sandstone_1.execute.at(spawnPoint).run.setworldspawn();
369
- }).else(() => {
370
- // Schedule 1 tick later to try again
371
- set_world_spawn_point.schedule(1);
372
- });
373
- }
374
- else {
375
- // Explicit coordinates
376
- (0, sandstone_1.setworldspawn)((0, sandstone_1.abs)(spawnPoint.x, spawnPoint.y, spawnPoint.z));
377
- }
378
- }
379
- }, {
380
- runOnLoad: true,
381
- });
382
- // Everytime a player joins, set their spawn point and tp them to it
383
- const SPAWN_POINT_SET_TAG = "kradle.spawn_point_set";
384
- (0, sandstone_1.MCFunction)("set_spawn_point", () => {
385
- const positionedExecute = spawnPoint instanceof sandstone_1.SelectorClass
386
- ? sandstone_1.execute.at(spawnPoint)
387
- : sandstone_1.execute.positioned((0, sandstone_1.abs)(spawnPoint.x, spawnPoint.y, spawnPoint.z));
388
- positionedExecute.as((0, sandstone_1.Selector)("@a", { tag: `!${SPAWN_POINT_SET_TAG}` })).run(() => {
389
- (0, sandstone_1.tag)("@s").add(SPAWN_POINT_SET_TAG);
390
- (0, sandstone_1.teleport)("@s", (0, sandstone_1.rel)(0, 0, 0));
391
- (0, sandstone_1.spawnpoint)("@s", (0, sandstone_1.rel)(0, 0, 0));
392
- });
393
- }, {
394
- runEveryTick: true,
395
- });
396
- }
397
- // All setup — global AND per-player — runs in a single tick: the arena
398
- // only invokes start_challenge at ALL_CONNECTED, when every participant
399
- // is already connected and tagged. See AGENTS.md "SINGLE-TICK SETUP".
400
- (0, sandstone_1.MCFunction)("start_challenge", () => {
401
- (0, sandstone_1.comment)("1. Setup all variables (global and individual) to their default values,");
402
- (0, sandstone_1.comment)(" along with their previous-value mirrors.");
403
- for (const [name, variable] of Object.entries(this.full_variables)) {
404
- const previousValue = this.getPreviousValueScore(name);
405
- if (typeof previousValue === "undefined") {
406
- throw new Error(`Previous value for variable ${name} not found.`);
407
- }
408
- if (variable.type === "individual" && variable.default !== undefined) {
409
- sandstone_1.execute.as(constants_1.ALL).run((0, utils_1.getChildFunctionName)(name), () => {
410
- variable.score.set(variable.default);
411
- previousValue.set(variable.default);
412
- });
413
- }
414
- if (variable.type === "global" && variable.default !== undefined) {
415
- variable.score.set(variable.default);
416
- previousValue.set(variable.default);
417
- }
418
- }
419
- (0, sandstone_1.tag)(constants_1.ALL).remove(constants_1.WINNER_TAG);
420
- (0, sandstone_1.comment)("2. Set up test mode if it's enabled - needs to run here so the tester player is tagged");
421
- if (testmode_1.test_mode_enabled) {
422
- (0, testmode_1.set_up_test_mode)();
423
- }
424
- (0, sandstone_1.comment)("3. Assign player_number to every participant *before* user events run.", " The on_tick updater skips work while game_state != ON (set at step 7),", " so without this step every user-side `scores: { player_number: N }`", " selector in step 6 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).");
425
- const playerNumberVar = this.full_variables.player_number;
426
- if (playerNumberVar?.updater) {
427
- sandstone_1.execute.as(constants_1.ALL).run("start_challenge/assign_player_numbers", () => {
428
- playerNumberVar.updater?.(playerNumberVar.score, this.variables);
429
- });
430
- }
431
- (0, sandstone_1.comment)("4. Set the events fire counters to 0");
432
- for (const event of customScoreEvents) {
433
- // We could make the distinction between global and individual counters,
434
- // but it just works to make all players set event fires to 0
435
- sandstone_1.execute.as(constants_1.ALL).run(() => {
436
- event.counter.set(0);
437
- });
438
- }
439
- if (this.resolvedDefaults !== null) {
440
- (0, sandstone_1.comment)("5. Apply implicit setup (overridable via the `defaults` config field).", " Per-rule overrides let wave-defense / boss / PvP designs opt out of", " individual rules. Runs BEFORE user events, so items given in the", " user's start_challenge handler survive the inventory clear.");
441
- const d = this.resolvedDefaults;
442
- const t = d.time;
443
- if (t !== false)
444
- sandstone_1.time.set(t);
445
- (0, sandstone_1.gamerule)("doDaylightCycle", d.daylightCycle);
446
- (0, sandstone_1.gamerule)("doMobSpawning", d.mobSpawning);
447
- (0, sandstone_1.gamerule)("naturalRegeneration", d.naturalRegeneration);
448
- if (d.clearInventory)
449
- (0, sandstone_1.clear)(constants_1.ALL);
450
- if (d.maxHealth !== false) {
451
- actions_1.Actions.setAttribute({
452
- target: "all",
453
- attribute_: "minecraft:generic.max_health",
454
- value: d.maxHealth,
455
- });
456
- }
457
- }
458
- (0, sandstone_1.comment)("6. Process the start_challenge events, then the (deprecated) init_participants");
459
- (0, sandstone_1.comment)(" events — same tick, immediately after. Per-player state (player_number,");
460
- (0, sandstone_1.comment)(" individual variable defaults) is fully initialized before both.");
461
- this._events.start_challenge?.();
462
- this._events.init_participants?.();
463
- (0, sandstone_1.comment)("7. Set the game state to ON");
464
- this.full_variables.game_state.score.set(constants_1.GAME_STATES.ON);
465
- (0, sandstone_1.comment)("8. Display the game objective");
466
- sandstone_1.scoreboard.objectives.setDisplay("sidebar", constants_1.VISIBLE_OBJECTIVE.name);
467
- });
468
- // Defined once at module scope so end_challenge can replay the
469
- // updaters one final time before the watcher snapshots scores —
470
- // otherwise score changes that happen after on_tick's updater
471
- // pass (notably from process_custom_events firing on the same
472
- // tick that triggers end_challenge) never propagate to
473
- // main_score / kradle.board, and the orchestrator records a
474
- // stale score.
475
- const custom_variable_updaters = (0, sandstone_1.MCFunction)("custom_variable_updaters", () => {
476
- for (const [name, variable] of Object.entries(this.full_variables)) {
477
- if (variable.updater) {
478
- (0, sandstone_1.comment)(`Updating variable ${name}`);
479
- if (variable.type === "individual") {
480
- sandstone_1.execute
481
- .as(constants_1.ALL)
482
- .at("@s")
483
- .run((0, utils_1.getChildFunctionName)(`update_${name}`), () => {
484
- variable.updater?.(variable.score, this.variables);
485
- });
486
- }
487
- else {
488
- variable.updater(variable.score, this.variables);
489
- }
490
- }
491
- }
492
- });
493
- (0, sandstone_1.MCFunction)("on_tick", () => {
494
- sandstone_1._.if(this.variables.game_state.equalTo(constants_1.GAME_STATES.ON), () => {
495
- (0, sandstone_1.comment)("1. Run all updaters");
496
- custom_variable_updaters();
497
- (0, sandstone_1.comment)("2. Process the on_tick event");
498
- this._events.on_tick?.();
499
- (0, sandstone_1.comment)("3. Process custom events");
500
- (0, sandstone_1.MCFunction)("process_custom_events", () => {
501
- // We process all custom events - this checks if the condition is reached & fire them if necessary
502
- customScoreEvents.forEach((event) => {
503
- this.processCustomScoreEvent(event);
504
- });
505
- })();
506
- (0, sandstone_1.comment)("4. Set previous values for all variables");
507
- sandstone_1.execute.as(constants_1.ALL).run((0, utils_1.getChildFunctionName)("set_previous_values"), () => {
508
- for (const [name, variable] of Object.entries(this.full_variables)) {
509
- // We could also make the distinction between global and individual variables,
510
- // but again it just works to run it on all players
511
- const previousValue = this.getPreviousValueScore(name);
512
- previousValue.set(variable.score);
513
- }
514
- });
515
- (0, sandstone_1.comment)("5. Check end conditions");
516
- // Evaluated here — after this._events.on_tick?.() above — so a
517
- // condition bridged out of the on_tick closure (the documented
518
- // endReached pattern for Actions.setEndStates) is already assigned.
519
- let userEndCondition;
520
- if (this._end_condition_provider) {
521
- userEndCondition = this._end_condition_provider(this.variables, this.roles);
522
- if (userEndCondition == null) {
523
- throw new Error("end_condition callback returned undefined — return a ConditionType, or omit .end_condition() to end only via GAME_DURATION.");
524
- }
525
- }
526
- let endCondition;
527
- if (userEndCondition !== undefined && this.game_duration !== undefined) {
528
- endCondition = sandstone_1._.or(userEndCondition, this.variables.game_timer.equalTo(this.game_duration));
529
- }
530
- else if (userEndCondition !== undefined) {
531
- endCondition = userEndCondition;
532
- }
533
- else if (this.game_duration !== undefined) {
534
- endCondition = this.variables.game_timer.equalTo(this.game_duration);
535
- }
536
- if (endCondition) {
537
- sandstone_1._.if(endCondition, () => {
538
- end_challenge();
539
- });
540
- }
541
- });
542
- }, {
543
- runEveryTick: true,
544
- });
545
- const end_challenge = (0, sandstone_1.MCFunction)("end_challenge", () => {
546
- (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.");
547
- custom_variable_updaters();
548
- custom_variable_updaters();
549
- (0, sandstone_1.comment)("1. Set the game state to OFF");
550
- this.full_variables.game_state.score.set(constants_1.GAME_STATES.OFF);
551
- (0, sandstone_1.comment)("2. Process the end_challenge events");
552
- this._events.end_challenge?.();
553
- (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.");
554
- custom_variable_updaters();
555
- custom_variable_updaters();
556
- (0, sandstone_1.comment)("3. Announce the winners");
557
- for (const [role, condition] of Object.entries(this._win_conditions || {})) {
558
- sandstone_1.execute.as((0, actions_1.mapTarget)(role)).run((0, utils_1.getChildFunctionName)(`check_winner_team_${role}`), () => {
559
- sandstone_1._.if(condition, () => {
560
- actions_1.Actions.announce({
561
- message: [(0, sandstone_1.Selector)("@s"), " has won the challenge!"],
562
- });
563
- (0, sandstone_1.tag)("@s").add(constants_1.WINNER_TAG);
564
- });
565
- });
566
- }
567
- commands_1.Commands.gameOver();
568
- });
569
- (0, sandstone_1.savePack)("datapack", {
570
- customPath: path.join(this.kradle_challenge_path, this.name),
571
- formatVersion: 26,
572
- });
573
- }
574
- }
575
- exports.ChallengeBase = ChallengeBase;
576
- /**
577
- * Creates a new challenge with the provided configuration.
578
- */
579
- function createChallenge(config) {
580
- return new ChallengeBase(config);
581
- }
582
- //# sourceMappingURL=challenge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"challenge.js","sourceRoot":"","sources":["../src/challenge.ts"],"names":[],"mappings":"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"}