@kradle/challenges-sdk 0.23.0 → 0.25.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.
- package/CHANGELOG.md +40 -1
- package/LLM_README.md +49 -13
- package/README.md +57 -0
- package/dist/engine.d.ts +2 -1
- package/dist/engine.d.ts.map +1 -1
- package/dist/engine.js +4 -1
- package/dist/engine.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime/builder.d.ts.map +1 -1
- package/dist/runtime/builder.js +25 -6
- package/dist/runtime/builder.js.map +1 -1
- package/dist/runtime/chat.js.map +1 -1
- package/dist/runtime/dialog.js.map +1 -1
- package/dist/runtime/dimensions.d.ts +24 -0
- package/dist/runtime/dimensions.d.ts.map +1 -0
- package/dist/runtime/dimensions.js +47 -0
- package/dist/runtime/dimensions.js.map +1 -0
- package/dist/runtime/errors.d.ts.map +1 -1
- package/dist/runtime/errors.js.map +1 -1
- package/dist/runtime/reducer.d.ts.map +1 -1
- package/dist/runtime/reducer.js +133 -28
- package/dist/runtime/reducer.js.map +1 -1
- package/dist/runtime/rules.d.ts.map +1 -1
- package/dist/runtime/rules.js.map +1 -1
- package/dist/runtime/sandbox-registry.js.map +1 -1
- package/dist/runtime/sandbox.d.ts.map +1 -1
- package/dist/runtime/sandbox.js.map +1 -1
- package/dist/runtime/time.d.ts.map +1 -1
- package/dist/runtime/time.js.map +1 -1
- package/dist/runtime/types.d.ts +41 -5
- package/dist/runtime/types.d.ts.map +1 -1
- package/dist/runtime/types.js.map +1 -1
- package/dist/runtime/wire.d.ts +43 -1
- package/dist/runtime/wire.d.ts.map +1 -1
- package/dist/runtime/wire.js +1 -0
- package/dist/runtime/wire.js.map +1 -1
- package/dist/runtime/world.d.ts +13 -4
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js +40 -25
- package/dist/runtime/world.js.map +1 -1
- package/dist/structures.d.ts.map +1 -1
- package/dist/structures.js +3 -1
- package/dist/structures.js.map +1 -1
- package/dist/test/harness.d.ts +7 -2
- package/dist/test/harness.d.ts.map +1 -1
- package/dist/test/harness.js +51 -14
- package/dist/test/harness.js.map +1 -1
- package/dist/test/helpers.d.ts.map +1 -1
- package/dist/test/helpers.js +2 -1
- package/dist/test/helpers.js.map +1 -1
- package/package.json +5 -4
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OVERWORLD = exports.DIMENSIONS = void 0;
|
|
4
|
+
exports.enabledDimensions = enabledDimensions;
|
|
5
|
+
exports.dimensionOf = dimensionOf;
|
|
6
|
+
exports.dimensionPrefix = dimensionPrefix;
|
|
7
|
+
exports.positionKey = positionKey;
|
|
8
|
+
exports.keyInChunk = keyInChunk;
|
|
9
|
+
const errors_js_1 = require("./errors.js");
|
|
10
|
+
/** The dimensions that a game can enable. */
|
|
11
|
+
exports.DIMENSIONS = ["minecraft:overworld", "minecraft:the_nether", "minecraft:the_end"];
|
|
12
|
+
/** The dimension when a position or game configuration omits it. */
|
|
13
|
+
exports.OVERWORLD = "minecraft:overworld";
|
|
14
|
+
/** Validate the game dimensions. The Overworld must come first; IDs must be unique. */
|
|
15
|
+
function enabledDimensions(value) {
|
|
16
|
+
if (value === undefined)
|
|
17
|
+
return [exports.OVERWORLD];
|
|
18
|
+
if (!Array.isArray(value) ||
|
|
19
|
+
value.length === 0 ||
|
|
20
|
+
value[0] !== exports.OVERWORLD ||
|
|
21
|
+
new Set(value).size !== value.length ||
|
|
22
|
+
!value.every((id) => exports.DIMENSIONS.includes(id))) {
|
|
23
|
+
throw (0, errors_js_1.definitionError)("bad_dimensions", "dimensions must start with minecraft:overworld and contain unique supported IDs", { path: "challengeConfig.dimensions", value, allowed: exports.DIMENSIONS });
|
|
24
|
+
}
|
|
25
|
+
return [...value];
|
|
26
|
+
}
|
|
27
|
+
/** The dimension of a position. */
|
|
28
|
+
function dimensionOf(position) {
|
|
29
|
+
return position.dimension ?? exports.OVERWORLD;
|
|
30
|
+
}
|
|
31
|
+
/** The spatial key prefix. Old Overworld keys retain their format. */
|
|
32
|
+
function dimensionPrefix(dimension = exports.OVERWORLD) {
|
|
33
|
+
return dimension === exports.OVERWORLD ? "" : `${dimension}|`;
|
|
34
|
+
}
|
|
35
|
+
/** The block key for a position. */
|
|
36
|
+
function positionKey(at) {
|
|
37
|
+
return `${dimensionPrefix(at.dimension)}${Math.floor(at.x)},${Math.floor(at.y)},${Math.floor(at.z)}`;
|
|
38
|
+
}
|
|
39
|
+
/** True when a block key belongs to the specified chunk and dimension. */
|
|
40
|
+
function keyInChunk(key, x, z, dimension = exports.OVERWORLD) {
|
|
41
|
+
const prefix = dimensionPrefix(dimension);
|
|
42
|
+
if (prefix ? !key.startsWith(prefix) : key.includes("|"))
|
|
43
|
+
return false;
|
|
44
|
+
const [bx, , bz] = key.slice(prefix.length).split(",").map(Number);
|
|
45
|
+
return bx >> 4 === x && bz >> 4 === z;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=dimensions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dimensions.js","sourceRoot":"","sources":["../../src/runtime/dimensions.ts"],"names":[],"mappings":";;;;;;;;AAAA,2CAA8C;AAE9C,6CAA6C;AAChC,QAAA,UAAU,GAAG,CAAC,qBAAqB,EAAE,sBAAsB,EAAE,mBAAmB,CAAU,CAAC;AAKxG,oEAAoE;AACvD,QAAA,SAAS,GAAc,qBAAqB,CAAC;AAE1D,uFAAuF;AACvF,2BAAkC,KAAc;IAC/C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,CAAC,QAAA,SAAS,CAAC,CAAC;IAC5C,IACC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,KAAK,CAAC,MAAM,KAAK,CAAC;QAClB,KAAK,CAAC,CAAC,CAAC,KAAK,QAAA,SAAS;QACtB,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM;QACpC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAA,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAC5C,CAAC;QACF,MAAM,IAAA,2BAAe,EACpB,gBAAgB,EAChB,iFAAiF,EACjF,EAAE,IAAI,EAAE,4BAA4B,EAAE,KAAK,EAAE,OAAO,EAAE,QAAA,UAAU,EAAE,CAClE,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACnB,CAAC;AAED,mCAAmC;AACnC,qBAA4B,QAA+C;IAC1E,OAAO,QAAQ,CAAC,SAAS,IAAI,QAAA,SAAS,CAAC;AACxC,CAAC;AAED,sEAAsE;AACtE,yBAAgC,SAAS,GAAc,QAAA,SAAS;IAC/D,OAAO,SAAS,KAAK,QAAA,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC;AACvD,CAAC;AAED,oCAAoC;AACpC,qBAA4B,EAA0E;IACrG,OAAO,GAAG,eAAe,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACtG,CAAC;AAED,0EAA0E;AAC1E,oBAA2B,GAAW,EAAE,CAAS,EAAE,CAAS,EAAE,SAAS,GAAc,QAAA,SAAS;IAC7F,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACvE,MAAM,CAAC,EAAE,EAAE,AAAD,EAAG,EAAE,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAA6B,CAAC;IAC/F,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"AAMA,uDAAuD;AACvD,MAAM,MAAM,aAAa;AACxB,sFAAsF;AACpF,YAAY;AACd,mFAAmF;GACjF,KAAK;AACP,iGAAiG;GAC/F,aAAa,CAAC;AAEjB,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,8FAA8F;IAC9F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gDAAgD;IAChD,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAED,mFAAmF;AACnF,MAAM,WAAW,SAAS;IACzB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,QAAQ,EAAE,aAAa,CAAC;IACxB,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAED;;;GAGG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACxC,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2GAA2G;IAC3G,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,sDAAsD;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,kCAAkC;IAClC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,gDAAgD;IAChD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"AAMA,uDAAuD;AACvD,MAAM,MAAM,aAAa;AACxB,sFAAsF;AACpF,YAAY;AACd,mFAAmF;GACjF,KAAK;AACP,iGAAiG;GAC/F,aAAa,CAAC;AAEjB,0EAA0E;AAC1E,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,8FAA8F;IAC9F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gDAAgD;IAChD,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAED,mFAAmF;AACnF,MAAM,WAAW,SAAS;IACzB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,QAAQ,EAAE,aAAa,CAAC;IACxB,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5B;AAED;;;GAGG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACxC,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,2GAA2G;IAC3G,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,sDAAsD;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,kCAAkC;IAClC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,gDAAgD;IAChD,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IAEhD,YAAY,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,EAQpE;IAED,iEAAiE;IACjE,MAAM,IAAI,SAAS,CASlB;CACD;AAED,mEAAmE;AACnE,eAAO,MAAM,eAAe,SAAU,MAAM,WAAW,MAAM,YAAW,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,mBAC5B,CAAC;AAE3E,iDAAiD;AACjD,eAAO,MAAM,QAAQ,SAAU,MAAM,WAAW,MAAM,YAAW,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,mBAC5B,CAAC;AAEpE,gFAAgF;AAChF,eAAO,MAAM,gBAAgB,SAAU,MAAM,WAAW,MAAM,YAAW,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,mBAC5B,CAAC;AAE5E,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc,CAMnG;AAED,wGAAwG;AACxG,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,GAAG,QAAQ,CAEjE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":";AAAA,4EAA4E;AAC5E,0EAA0E;AAC1E,8EAA8E;AAC9E,2EAA2E;AAC3E,+EAA+E
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":";AAAA,4EAA4E;AAC5E,0EAA0E;AAC1E,8EAA8E;AAC9E,2EAA2E;AAC3E,+EAA+E;;;;;AAoC/E;;;GAGG;AACH,oBAA4B,SAAQ,KAAK;IACxC,mEAAmE;IAC1D,IAAI,CAAS;IACtB,2GAA2G;IAClG,QAAQ,CAAgB;IACjC,sDAAsD;IAC7C,IAAI,CAAqB;IAClC,kCAAkC;IACzB,KAAK,CAAU;IACxB,gDAAgD;IACvC,OAAO,CAAgC;IAEhD,YAAY,IAAY,EAAE,OAAe,EAAE,OAAO,GAAiB,EAAE;QACpE,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC;QAC1C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,CAAC;IAED,iEAAiE;IACjE,MAAM;QACL,MAAM,GAAG,GAAc;YACtB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,OAAO,EAAE,IAAI,CAAC,OAAO;SACrB,CAAC;QACF,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;YAAE,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAClD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS;YAAE,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC3D,OAAO,GAAG,CAAC;IACZ,CAAC;CACD;;AAED,mEAAmE;AAC5D,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,OAAe,EAAE,OAAO,GAAmC,EAAE,EAAE,EAAE,CAC9G,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;AAD9D,QAAA,eAAe,GAAf,eAAe,CAC+C;AAE3E,iDAAiD;AAC1C,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,OAAe,EAAE,OAAO,GAAmC,EAAE,EAAE,EAAE,CACvG,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AADvD,QAAA,QAAQ,GAAR,QAAQ,CAC+C;AAEpE,gFAAgF;AACzE,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,OAAe,EAAE,OAAO,GAAmC,EAAE,EAAE,EAAE,CAC/G,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;AAD/D,QAAA,gBAAgB,GAAhB,gBAAgB,CAC+C;AAE5E,uEAAuE;AACvE,qBAA4B,IAAY,EAAE,IAAY,EAAE,QAA2B;IAClF,OAAO,IAAA,QAAA,QAAQ,EAAC,cAAc,EAAE,IAAI,IAAI,wBAAwB,IAAI,eAAe,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,GAAG,EAAE;QACpH,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,IAAI;QACX,OAAO,EAAE,QAAQ;KACjB,CAAC,CAAC;AACJ,CAAC;AAED,wGAAwG;AACxG,oBAA2B,GAAY;IACtC,OAAO,GAAG,YAAY,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../../src/runtime/reducer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reducer.d.ts","sourceRoot":"","sources":["../../src/runtime/reducer.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/reducer.js
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MAX_ACHIEVEMENTS = exports.MAX_TRANSITIONS_PER_EVENT = exports.MAX_FILL_VOLUME = exports.MAX_BATCH_EFFECTS = void 0;
|
|
4
|
+
exports.assertJson = assertJson;
|
|
5
|
+
exports.parseBlockState = parseBlockState;
|
|
6
|
+
exports.blockSpecString = blockSpecString;
|
|
7
|
+
exports.splitBatches = splitBatches;
|
|
8
|
+
exports.createReducer = createReducer;
|
|
9
|
+
const dimensions_js_1 = require("./dimensions.js");
|
|
2
10
|
// The reducer: one locked definition, one `init()` per run, one `reduce(state,
|
|
3
11
|
// event)` per engine event. Everything a rule sees comes through a context
|
|
4
12
|
// built for the reduction; everything a rule asks for leaves as actions.
|
|
@@ -15,15 +23,8 @@
|
|
|
15
23
|
// the game-over hook, the judge data, `game_over`.
|
|
16
24
|
// - An author error rolls the reduction back and ends the run as
|
|
17
25
|
// `error_challenge` without another author callback.
|
|
18
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.MAX_ACHIEVEMENTS = exports.MAX_TRANSITIONS_PER_EVENT = exports.MAX_FILL_VOLUME = exports.MAX_BATCH_EFFECTS = void 0;
|
|
20
|
-
exports.assertJson = assertJson;
|
|
21
|
-
exports.parseBlockState = parseBlockState;
|
|
22
|
-
exports.blockSpecString = blockSpecString;
|
|
23
|
-
exports.splitBatches = splitBatches;
|
|
24
|
-
exports.createReducer = createReducer;
|
|
25
|
-
const dialog_js_1 = require("./dialog.js");
|
|
26
26
|
const chat_js_1 = require("./chat.js");
|
|
27
|
+
const dialog_js_1 = require("./dialog.js");
|
|
27
28
|
const errors_js_1 = require("./errors.js");
|
|
28
29
|
const time_js_1 = require("./time.js");
|
|
29
30
|
const types_js_1 = require("./types.js");
|
|
@@ -38,6 +39,15 @@ exports.MAX_TRANSITIONS_PER_EVENT = 8;
|
|
|
38
39
|
const SETUP_BATCH_TIMEOUT_TICKS = 30 * 20;
|
|
39
40
|
/** The bound Kradle applies to a result's achievements; mirrored here so the harness reports it. */
|
|
40
41
|
exports.MAX_ACHIEVEMENTS = 64;
|
|
42
|
+
/** A qualified slug, `<creator>:<name>`, as Kradle names a challenge or an agent. The backend checks that it exists. */
|
|
43
|
+
const SLUG = /^[a-z0-9][a-z0-9-]{0,34}[a-z0-9]:[a-z0-9][a-z0-9-]{0,34}[a-z0-9]$/;
|
|
44
|
+
/** A role name, as a challenge's `roles` declares it. */
|
|
45
|
+
const ROLE = /^[a-z0-9][a-z0-9-]{0,34}[a-z0-9]$/;
|
|
46
|
+
/** A param name, as `config.params` declares it. */
|
|
47
|
+
const PARAM_NAME = /^[A-Za-z_][A-Za-z0-9_]{0,39}$/;
|
|
48
|
+
/** The bounds of `g.sendToChallenge`: the agents of one run, and the JSON size of the params. */
|
|
49
|
+
const MAX_SEND_AGENTS = 8;
|
|
50
|
+
const MAX_SEND_PARAMS_CHARS = 4096;
|
|
41
51
|
// ---------------------------------------------------------------- small helpers
|
|
42
52
|
/** The air a player has at the surface, in seconds. */
|
|
43
53
|
const FULL_AIR = 15;
|
|
@@ -103,7 +113,7 @@ function deepFreeze(value, seen = new WeakSet()) {
|
|
|
103
113
|
for (const x of Object.values(value))
|
|
104
114
|
deepFreeze(x, seen);
|
|
105
115
|
}
|
|
106
|
-
const posKey =
|
|
116
|
+
const posKey = dimensions_js_1.positionKey;
|
|
107
117
|
/** `minecraft:oak_stairs[facing=east,half=bottom]` -> `{ id, props }`. */
|
|
108
118
|
function parseBlockState(state) {
|
|
109
119
|
const i = state.indexOf("[");
|
|
@@ -338,6 +348,7 @@ function viewOf(r, p) {
|
|
|
338
348
|
}
|
|
339
349
|
function createReducer(def) {
|
|
340
350
|
const config = def.config;
|
|
351
|
+
const dimensions = (0, dimensions_js_1.enabledDimensions)(config.challengeConfig?.dimensions);
|
|
341
352
|
const roleNames = Object.keys(config.roles);
|
|
342
353
|
const declaredZones = Object.keys(def.zones);
|
|
343
354
|
const derivedScores = def.outcome.scores !== undefined;
|
|
@@ -488,6 +499,21 @@ function createReducer(def) {
|
|
|
488
499
|
}
|
|
489
500
|
};
|
|
490
501
|
const push = (raw) => {
|
|
502
|
+
for (const value of [
|
|
503
|
+
raw,
|
|
504
|
+
...["at", "from", "to", "dest"].map((key) => raw[key]),
|
|
505
|
+
]) {
|
|
506
|
+
if (value &&
|
|
507
|
+
typeof value === "object" &&
|
|
508
|
+
"dimension" in value &&
|
|
509
|
+
value.dimension !== undefined &&
|
|
510
|
+
!dimensions.includes(value.dimension))
|
|
511
|
+
throw (0, errors_js_1.apiError)("invalid_value", "The target dimension is disabled");
|
|
512
|
+
}
|
|
513
|
+
if (raw.kind === "fill" || raw.kind === "clone")
|
|
514
|
+
(0, world_js_1.bounds)({ from: raw.from, to: raw.to });
|
|
515
|
+
if (raw.kind === "clone" && (0, dimensions_js_1.dimensionOf)(raw.from) !== (0, dimensions_js_1.dimensionOf)(raw.dest))
|
|
516
|
+
throw (0, errors_js_1.apiError)("invalid_value", "A clone cannot cross dimensions");
|
|
491
517
|
// A plain copy: an author's argument may be a view (`p.pos`, `g.params.box`).
|
|
492
518
|
const effect = compact(snapshot(raw));
|
|
493
519
|
if (r.batch)
|
|
@@ -580,6 +606,7 @@ function createReducer(def) {
|
|
|
580
606
|
throw (0, errors_js_1.notDeclared)("zones", zone, declaredZones);
|
|
581
607
|
return p.zones.includes(zone);
|
|
582
608
|
}
|
|
609
|
+
(0, world_js_1.bounds)(zone);
|
|
583
610
|
return p.pos !== null && (0, world_js_1.inBox)(p.pos, zone);
|
|
584
611
|
},
|
|
585
612
|
countItems(p, match) {
|
|
@@ -617,6 +644,7 @@ function createReducer(def) {
|
|
|
617
644
|
get worldTime() {
|
|
618
645
|
return s.world.time;
|
|
619
646
|
},
|
|
647
|
+
dimensionTime: (dimension) => (dimension === dimensions_js_1.OVERWORLD ? s.world.time : s.world.times?.[dimension]),
|
|
620
648
|
entities: (filter) => (0, world_js_1.entitiesIn)(s.world, filter).map(world_js_1.freezeObservation),
|
|
621
649
|
entity(id) {
|
|
622
650
|
const e = s.world.entities[id];
|
|
@@ -710,6 +738,65 @@ function createReducer(def) {
|
|
|
710
738
|
throw (0, errors_js_1.apiError)("bad_metric", `setMetric("${name}"): ${value} is not finite`);
|
|
711
739
|
r.actions.push(compact({ type: "metric", name, value, player: opts?.player?.name }));
|
|
712
740
|
},
|
|
741
|
+
sendToChallenge(player, challenge, options) {
|
|
742
|
+
notify("sendToChallenge");
|
|
743
|
+
const target = s.players[player?.name];
|
|
744
|
+
if (!target?.human)
|
|
745
|
+
throw (0, errors_js_1.apiError)("bad_player", "sendToChallenge: select a human participant");
|
|
746
|
+
if (typeof challenge !== "string" || !SLUG.test(challenge)) {
|
|
747
|
+
throw (0, errors_js_1.apiError)("invalid_value", `sendToChallenge: "${challenge}" is not a challenge slug`, {
|
|
748
|
+
value: challenge,
|
|
749
|
+
});
|
|
750
|
+
}
|
|
751
|
+
const role = options?.role;
|
|
752
|
+
if (role !== undefined && (typeof role !== "string" || !ROLE.test(role))) {
|
|
753
|
+
throw (0, errors_js_1.apiError)("invalid_value", `sendToChallenge: "${role}" is not a role name`, { value: role });
|
|
754
|
+
}
|
|
755
|
+
const raw = options?.agents;
|
|
756
|
+
if (raw !== undefined && (!Array.isArray(raw) || raw.length > MAX_SEND_AGENTS)) {
|
|
757
|
+
throw (0, errors_js_1.apiError)("invalid_value", `sendToChallenge: agents is a list of at most ${MAX_SEND_AGENTS} agents`);
|
|
758
|
+
}
|
|
759
|
+
const agents = raw?.map((a) => {
|
|
760
|
+
const one = typeof a === "string" ? { agent: a } : a;
|
|
761
|
+
if (!one || typeof one.agent !== "string" || !SLUG.test(one.agent)) {
|
|
762
|
+
throw (0, errors_js_1.apiError)("invalid_value", "sendToChallenge: an agent is a slug, or { agent, role }", { value: a });
|
|
763
|
+
}
|
|
764
|
+
if (one.role !== undefined && (typeof one.role !== "string" || !ROLE.test(one.role))) {
|
|
765
|
+
throw (0, errors_js_1.apiError)("invalid_value", `sendToChallenge: "${one.role}" is not a role name`, { value: one.role });
|
|
766
|
+
}
|
|
767
|
+
return compact({ agent: one.agent, role: one.role });
|
|
768
|
+
});
|
|
769
|
+
const params = options?.params;
|
|
770
|
+
if (params !== undefined) {
|
|
771
|
+
if (params === null || typeof params !== "object" || Array.isArray(params)) {
|
|
772
|
+
throw (0, errors_js_1.apiError)("invalid_value", "sendToChallenge: params is an object");
|
|
773
|
+
}
|
|
774
|
+
for (const [key, value] of Object.entries(params)) {
|
|
775
|
+
if (!PARAM_NAME.test(key)) {
|
|
776
|
+
throw (0, errors_js_1.apiError)("invalid_value", `sendToChallenge: "${key}" is not a param name`, { value: key });
|
|
777
|
+
}
|
|
778
|
+
const ok = typeof value === "string" ||
|
|
779
|
+
typeof value === "boolean" ||
|
|
780
|
+
(typeof value === "number" && Number.isFinite(value));
|
|
781
|
+
if (!ok) {
|
|
782
|
+
throw (0, errors_js_1.apiError)("invalid_value", `sendToChallenge: the param "${key}" is not a string, a finite number or a boolean`, {
|
|
783
|
+
value,
|
|
784
|
+
});
|
|
785
|
+
}
|
|
786
|
+
}
|
|
787
|
+
if (JSON.stringify(params).length > MAX_SEND_PARAMS_CHARS) {
|
|
788
|
+
throw (0, errors_js_1.apiError)("invalid_value", `sendToChallenge: the params are over ${MAX_SEND_PARAMS_CHARS} characters`);
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
r.actions.push(compact({
|
|
792
|
+
type: "send_to_challenge",
|
|
793
|
+
player: player.name,
|
|
794
|
+
challenge,
|
|
795
|
+
role,
|
|
796
|
+
agents,
|
|
797
|
+
params: params === undefined ? undefined : { ...params },
|
|
798
|
+
}));
|
|
799
|
+
},
|
|
713
800
|
achievement(player, id) {
|
|
714
801
|
notify("achievement");
|
|
715
802
|
if (typeof id !== "string" || !/^[a-z0-9][a-z0-9_-]{0,63}$/.test(id)) {
|
|
@@ -826,17 +913,17 @@ function createReducer(def) {
|
|
|
826
913
|
write("summon");
|
|
827
914
|
push({ kind: "summon", entity, at: { ...at }, nbt: opts?.nbt });
|
|
828
915
|
},
|
|
829
|
-
killEntities(entities) {
|
|
916
|
+
killEntities(entities, dimension) {
|
|
830
917
|
write("killEntities");
|
|
831
|
-
push({ kind: "kill_entities", entities });
|
|
918
|
+
push({ kind: "kill_entities", entities, dimension });
|
|
832
919
|
},
|
|
833
|
-
time(value) {
|
|
920
|
+
time(value, dimension) {
|
|
834
921
|
write("time");
|
|
835
|
-
push({ kind: "time", value });
|
|
922
|
+
push({ kind: "time", value, dimension });
|
|
836
923
|
},
|
|
837
|
-
gamerule(rule, value) {
|
|
924
|
+
gamerule(rule, value, dimension) {
|
|
838
925
|
write("gamerule");
|
|
839
|
-
push({ kind: "gamerule", rule, value });
|
|
926
|
+
push({ kind: "gamerule", rule, value, dimension });
|
|
840
927
|
},
|
|
841
928
|
setSpawn(at) {
|
|
842
929
|
write("setSpawn");
|
|
@@ -846,6 +933,7 @@ function createReducer(def) {
|
|
|
846
933
|
write("worldBorder");
|
|
847
934
|
push({
|
|
848
935
|
kind: "worldborder",
|
|
936
|
+
dimension: opts.dimension,
|
|
849
937
|
center: opts.center,
|
|
850
938
|
size: opts.size,
|
|
851
939
|
seconds: opts.over === undefined ? undefined : (0, time_js_1.toTicks)(opts.over) / 20,
|
|
@@ -866,11 +954,11 @@ function createReducer(def) {
|
|
|
866
954
|
}));
|
|
867
955
|
push({ kind: "container", at: { ...at }, items: out });
|
|
868
956
|
},
|
|
869
|
-
command(cmd, name) {
|
|
957
|
+
command(cmd, name, dimension) {
|
|
870
958
|
write("command");
|
|
871
959
|
r.actions.push({ type: "log", message: `raw command: ${cmd}` });
|
|
872
960
|
if (name === undefined) {
|
|
873
|
-
push({ kind: "command", cmd });
|
|
961
|
+
push({ kind: "command", cmd, dimension });
|
|
874
962
|
return;
|
|
875
963
|
}
|
|
876
964
|
if (typeof name !== "string")
|
|
@@ -879,7 +967,7 @@ function createReducer(def) {
|
|
|
879
967
|
throw (0, errors_js_1.apiError)("lifecycle", `command("${cmd}", "${name}"): a result needs a running game, not .setup (status ${s.status})`);
|
|
880
968
|
const id = `cmd:${s.nextId++}`;
|
|
881
969
|
s.commands[id] = { name };
|
|
882
|
-
push({ kind: "command", cmd, id });
|
|
970
|
+
push({ kind: "command", cmd, id, dimension });
|
|
883
971
|
},
|
|
884
972
|
// ---- flow
|
|
885
973
|
startPhase(name) {
|
|
@@ -1283,11 +1371,19 @@ function createReducer(def) {
|
|
|
1283
1371
|
const out = [];
|
|
1284
1372
|
if (w.spawn)
|
|
1285
1373
|
out.push({ kind: "spawn", at: { ...w.spawn } });
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1374
|
+
for (const dimension of dimensions) {
|
|
1375
|
+
const scope = dimension === dimensions_js_1.OVERWORLD ? {} : { dimension };
|
|
1376
|
+
if (w.time !== false)
|
|
1377
|
+
out.push({ kind: "time", value: w.time, ...scope });
|
|
1378
|
+
out.push({ kind: "gamerule", rule: "minecraft:advance_time", value: w.daylightCycle, ...scope });
|
|
1379
|
+
out.push({ kind: "gamerule", rule: "minecraft:spawn_mobs", value: w.mobSpawning, ...scope });
|
|
1380
|
+
out.push({
|
|
1381
|
+
kind: "gamerule",
|
|
1382
|
+
rule: "minecraft:natural_health_regeneration",
|
|
1383
|
+
value: w.naturalRegeneration,
|
|
1384
|
+
...scope,
|
|
1385
|
+
});
|
|
1386
|
+
}
|
|
1291
1387
|
return out;
|
|
1292
1388
|
}
|
|
1293
1389
|
function worldPlayers(s) {
|
|
@@ -1665,6 +1761,8 @@ function createReducer(def) {
|
|
|
1665
1761
|
if (r.s.status !== "PLAYING")
|
|
1666
1762
|
return;
|
|
1667
1763
|
for (const { m, before, after } of edges) {
|
|
1764
|
+
if ((0, dimensions_js_1.dimensionOf)(m.from) !== (0, dimensions_js_1.dimensionOf)(m.to))
|
|
1765
|
+
fire(r, "dimensionChanged", { player: viewOf(r, m.p), from: m.from, to: { ...m.to } });
|
|
1668
1766
|
for (const zone of after)
|
|
1669
1767
|
if (!before.includes(zone))
|
|
1670
1768
|
fire(r, "zoneEntered", { player: viewOf(r, m.p), zone });
|
|
@@ -1789,6 +1887,8 @@ function createReducer(def) {
|
|
|
1789
1887
|
return;
|
|
1790
1888
|
}
|
|
1791
1889
|
const missing = missingCapabilities(e.capabilities);
|
|
1890
|
+
if (dimensions.length > 1 && !e.capabilities.includes("dimensions"))
|
|
1891
|
+
missing.push("dimensions");
|
|
1792
1892
|
if (def.setup && !e.capabilities.includes("batch"))
|
|
1793
1893
|
missing.push("batch");
|
|
1794
1894
|
if (missing.length > 0) {
|
|
@@ -1849,6 +1949,8 @@ function createReducer(def) {
|
|
|
1849
1949
|
delete s.dialogs[player];
|
|
1850
1950
|
r.actions.push({ type: "effect", effect: { kind: "clear_dialog", player } });
|
|
1851
1951
|
}
|
|
1952
|
+
if (e.times)
|
|
1953
|
+
s.world = { ...s.world, times: { ...s.world.times, ...e.times } };
|
|
1852
1954
|
if (e.entities)
|
|
1853
1955
|
s.world = (0, world_js_1.moveEntities)(s.world, e.entities);
|
|
1854
1956
|
if (e.time !== undefined && e.time !== s.world.time)
|
|
@@ -2127,11 +2229,10 @@ function createReducer(def) {
|
|
|
2127
2229
|
s.world = (0, world_js_1.applyChunk)(s.world, e);
|
|
2128
2230
|
break;
|
|
2129
2231
|
case "chunk_unloaded": {
|
|
2130
|
-
s.world = (0, world_js_1.removeChunk)(s.world, e.x, e.z);
|
|
2232
|
+
s.world = (0, world_js_1.removeChunk)(s.world, e.x, e.z, e.dimension);
|
|
2131
2233
|
// The containers of the chunk are unknown now.
|
|
2132
2234
|
for (const key of Object.keys(s.containers)) {
|
|
2133
|
-
|
|
2134
|
-
if (x >> 4 === e.x && z >> 4 === e.z)
|
|
2235
|
+
if ((0, dimensions_js_1.keyInChunk)(key, e.x, e.z, e.dimension))
|
|
2135
2236
|
delete s.containers[key];
|
|
2136
2237
|
}
|
|
2137
2238
|
break;
|
|
@@ -2141,6 +2242,7 @@ function createReducer(def) {
|
|
|
2141
2242
|
if (playing()) {
|
|
2142
2243
|
fire(r, "blocksChanged", () => ({
|
|
2143
2244
|
changes: e.changes.map((c) => compact({
|
|
2245
|
+
dimension: c.dimension,
|
|
2144
2246
|
x: c.x,
|
|
2145
2247
|
y: c.y,
|
|
2146
2248
|
z: c.z,
|
|
@@ -2165,10 +2267,13 @@ function createReducer(def) {
|
|
|
2165
2267
|
const from = { ...e.from };
|
|
2166
2268
|
const to = { ...e.to };
|
|
2167
2269
|
const { lo, hi } = (0, world_js_1.bounds)({ from, to });
|
|
2168
|
-
const dest = { x: Math.floor(e.dest.x), y: Math.floor(e.dest.y), z: Math.floor(e.dest.z) };
|
|
2270
|
+
const dest = { ...e.dest, x: Math.floor(e.dest.x), y: Math.floor(e.dest.y), z: Math.floor(e.dest.z) };
|
|
2169
2271
|
s.world = (0, world_js_1.cloneBlocks)(s.world, { from, to }, dest, e.mode);
|
|
2170
2272
|
if (playing()) {
|
|
2171
|
-
const box = {
|
|
2273
|
+
const box = {
|
|
2274
|
+
from: dest,
|
|
2275
|
+
to: { ...dest, x: dest.x + hi.x - lo.x, y: dest.y + hi.y - lo.y, z: dest.z + hi.z - lo.z },
|
|
2276
|
+
};
|
|
2172
2277
|
// A move clears the source first: an author who applies the entries in order gets the vanilla result on an overlap.
|
|
2173
2278
|
fire(r, "blocksChanged", {
|
|
2174
2279
|
changes: e.mode === "move"
|