@kradle/challenges-sdk 0.12.0 → 0.13.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 +56 -1
- package/LLM_README.md +285 -192
- package/MIGRATION-0.13.md +109 -0
- package/README.md +97 -88
- package/dist/engine.d.ts +8 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +17 -0
- package/dist/engine.js.map +1 -0
- package/dist/index.d.ts +19 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -16
- package/dist/index.js.map +1 -1
- package/dist/runtime/builder.d.ts +33 -0
- package/dist/runtime/builder.d.ts.map +1 -0
- package/dist/runtime/builder.js +357 -0
- package/dist/runtime/builder.js.map +1 -0
- package/dist/runtime/errors.d.ts +61 -0
- package/dist/runtime/errors.d.ts.map +1 -0
- package/dist/runtime/errors.js +71 -0
- package/dist/runtime/errors.js.map +1 -0
- package/dist/runtime/reducer.d.ts +205 -0
- package/dist/runtime/reducer.d.ts.map +1 -0
- package/dist/runtime/reducer.js +2025 -0
- package/dist/runtime/reducer.js.map +1 -0
- package/dist/runtime/rules.d.ts +29 -0
- package/dist/runtime/rules.d.ts.map +1 -0
- package/dist/runtime/rules.js +23 -0
- package/dist/runtime/rules.js.map +1 -0
- package/dist/runtime/sandbox.d.ts +2 -1
- package/dist/runtime/sandbox.d.ts.map +1 -1
- package/dist/runtime/sandbox.js +7 -4
- package/dist/runtime/sandbox.js.map +1 -1
- package/dist/runtime/time.d.ts +33 -0
- package/dist/runtime/time.d.ts.map +1 -0
- package/dist/runtime/time.js +53 -0
- package/dist/runtime/time.js.map +1 -0
- package/dist/runtime/types.d.ts +963 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime/types.js +25 -0
- package/dist/runtime/types.js.map +1 -0
- package/dist/runtime/wire.d.ts +858 -0
- package/dist/runtime/wire.d.ts.map +1 -0
- package/dist/runtime/wire.js +28 -0
- package/dist/runtime/wire.js.map +1 -0
- package/dist/runtime/world.d.ts +58 -3
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js +12 -0
- package/dist/runtime/world.js.map +1 -1
- package/dist/structures.d.ts +119 -0
- package/dist/structures.d.ts.map +1 -0
- package/dist/structures.js +279 -0
- package/dist/structures.js.map +1 -0
- package/dist/test/harness.d.ts +133 -29
- package/dist/test/harness.d.ts.map +1 -1
- package/dist/test/harness.js +191 -66
- package/dist/test/harness.js.map +1 -1
- package/dist/test/helpers.d.ts +3 -2
- package/dist/test/helpers.d.ts.map +1 -1
- package/dist/test/helpers.js +2 -2
- package/dist/test/helpers.js.map +1 -1
- package/package.json +28 -6
- package/dist/runtime/examples/capture-the-flag.d.ts +0 -33
- package/dist/runtime/examples/capture-the-flag.d.ts.map +0 -1
- package/dist/runtime/examples/capture-the-flag.js +0 -79
- package/dist/runtime/examples/capture-the-flag.js.map +0 -1
- package/dist/runtime/examples/climb.d.ts +0 -34
- package/dist/runtime/examples/climb.d.ts.map +0 -1
- package/dist/runtime/examples/climb.js +0 -54
- package/dist/runtime/examples/climb.js.map +0 -1
- package/dist/runtime/examples/four-bridges.d.ts +0 -107
- package/dist/runtime/examples/four-bridges.d.ts.map +0 -1
- package/dist/runtime/examples/four-bridges.js +0 -294
- package/dist/runtime/examples/four-bridges.js.map +0 -1
- package/dist/runtime/examples/herding.d.ts +0 -59
- package/dist/runtime/examples/herding.d.ts.map +0 -1
- package/dist/runtime/examples/herding.js +0 -181
- package/dist/runtime/examples/herding.js.map +0 -1
- package/dist/runtime/examples/skywars.d.ts +0 -116
- package/dist/runtime/examples/skywars.d.ts.map +0 -1
- package/dist/runtime/examples/skywars.js +0 -253
- package/dist/runtime/examples/skywars.js.map +0 -1
- package/dist/runtime/sdk.d.ts +0 -1038
- package/dist/runtime/sdk.d.ts.map +0 -1
- package/dist/runtime/sdk.js +0 -1271
- package/dist/runtime/sdk.js.map +0 -1
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import { type ContainerItem, type ContextOf, type Item, type Vec3 } from "../sdk.js";
|
|
2
|
-
export declare const CENTER: Vec3;
|
|
3
|
-
export declare const config: {
|
|
4
|
-
readonly name: "Skywars";
|
|
5
|
-
readonly challengeConfig: {
|
|
6
|
-
readonly locations: {
|
|
7
|
-
readonly center: {
|
|
8
|
-
readonly coordinates: Vec3;
|
|
9
|
-
};
|
|
10
|
-
};
|
|
11
|
-
};
|
|
12
|
-
readonly roles: {
|
|
13
|
-
readonly fighter: {
|
|
14
|
-
readonly description: "fighter";
|
|
15
|
-
readonly minParticipants: 2;
|
|
16
|
-
};
|
|
17
|
-
};
|
|
18
|
-
readonly endStates: {
|
|
19
|
-
readonly last_standing: "One player remains alive; that player wins";
|
|
20
|
-
readonly time_up: "The timer ran out with several players alive; nobody wins";
|
|
21
|
-
};
|
|
22
|
-
};
|
|
23
|
-
export declare const BORDER_SHRINKS: {
|
|
24
|
-
at: import("../sdk.js").Ticks;
|
|
25
|
-
size: number;
|
|
26
|
-
seconds: number;
|
|
27
|
-
message: string;
|
|
28
|
-
}[];
|
|
29
|
-
type Count = number | [number, number];
|
|
30
|
-
type Entry = {
|
|
31
|
-
weight: number;
|
|
32
|
-
items: Array<{
|
|
33
|
-
item: Item;
|
|
34
|
-
count?: Count;
|
|
35
|
-
nbt?: string;
|
|
36
|
-
}>;
|
|
37
|
-
};
|
|
38
|
-
type Pool = {
|
|
39
|
-
rolls: Count;
|
|
40
|
-
entries: Entry[];
|
|
41
|
-
};
|
|
42
|
-
export declare const STARTING_LOOT: Pool[];
|
|
43
|
-
export declare const MID_LOOT: Pool[];
|
|
44
|
-
declare const state: {
|
|
45
|
-
game: () => {
|
|
46
|
-
chests: Vec3[];
|
|
47
|
-
};
|
|
48
|
-
player: () => {
|
|
49
|
-
island: string;
|
|
50
|
-
damageDealt: number;
|
|
51
|
-
};
|
|
52
|
-
markers: {
|
|
53
|
-
tags: string[];
|
|
54
|
-
within: {
|
|
55
|
-
from: {
|
|
56
|
-
x: number;
|
|
57
|
-
y: number;
|
|
58
|
-
z: number;
|
|
59
|
-
};
|
|
60
|
-
to: {
|
|
61
|
-
x: number;
|
|
62
|
-
y: number;
|
|
63
|
-
z: number;
|
|
64
|
-
};
|
|
65
|
-
};
|
|
66
|
-
};
|
|
67
|
-
};
|
|
68
|
-
type G = ContextOf<typeof config, typeof state>;
|
|
69
|
-
/** Rolls every pool of a table into chest items on random slots, like a vanilla loot table would. */
|
|
70
|
-
export declare function rollChest(g: G, table: Pool[]): ContainerItem[];
|
|
71
|
-
declare const _default: import("../sdk.js").Challenge<{
|
|
72
|
-
readonly name: "Skywars";
|
|
73
|
-
readonly challengeConfig: {
|
|
74
|
-
readonly locations: {
|
|
75
|
-
readonly center: {
|
|
76
|
-
readonly coordinates: Vec3;
|
|
77
|
-
};
|
|
78
|
-
};
|
|
79
|
-
};
|
|
80
|
-
readonly roles: {
|
|
81
|
-
readonly fighter: {
|
|
82
|
-
readonly description: "fighter";
|
|
83
|
-
readonly minParticipants: 2;
|
|
84
|
-
};
|
|
85
|
-
};
|
|
86
|
-
readonly endStates: {
|
|
87
|
-
readonly last_standing: "One player remains alive; that player wins";
|
|
88
|
-
readonly time_up: "The timer ran out with several players alive; nobody wins";
|
|
89
|
-
};
|
|
90
|
-
}, {
|
|
91
|
-
chests: Vec3[];
|
|
92
|
-
}, import("../sdk.js").ResolvePlayers<{
|
|
93
|
-
readonly name: "Skywars";
|
|
94
|
-
readonly challengeConfig: {
|
|
95
|
-
readonly locations: {
|
|
96
|
-
readonly center: {
|
|
97
|
-
readonly coordinates: Vec3;
|
|
98
|
-
};
|
|
99
|
-
};
|
|
100
|
-
};
|
|
101
|
-
readonly roles: {
|
|
102
|
-
readonly fighter: {
|
|
103
|
-
readonly description: "fighter";
|
|
104
|
-
readonly minParticipants: 2;
|
|
105
|
-
};
|
|
106
|
-
};
|
|
107
|
-
readonly endStates: {
|
|
108
|
-
readonly last_standing: "One player remains alive; that player wins";
|
|
109
|
-
readonly time_up: "The timer ran out with several players alive; nobody wins";
|
|
110
|
-
};
|
|
111
|
-
}, {
|
|
112
|
-
island: string;
|
|
113
|
-
damageDealt: number;
|
|
114
|
-
}, Record<never, never>>, string, never, never>;
|
|
115
|
-
export default _default;
|
|
116
|
-
//# sourceMappingURL=skywars.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skywars.d.ts","sourceRoot":"","sources":["../../../src/runtime/examples/skywars.ts"],"names":[],"mappings":"AAMA,OAAO,EAEN,KAAK,aAAa,EAClB,KAAK,SAAS,EAEd,KAAK,IAAI,EAGT,KAAK,IAAI,EACT,MAAM,WAAW,CAAC;AAEnB,eAAO,MAAM,MAAM,EAAE,IAA+B,CAAC;AAErD,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;CAQiB,CAAC;AASrC,eAAO,MAAM,cAAc;;;;;GAI1B,CAAC;AAIF,KAAK,KAAK,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACvC,KAAK,KAAK,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,KAAK,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC;AAC3F,KAAK,IAAI,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,KAAK,EAAE,CAAA;CAAE,CAAC;AAY/C,eAAO,MAAM,aAAa,EAAE,IAAI,EAiC/B,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,IAAI,EA6B1B,CAAC;AAIF,QAAA,MAAM,KAAK;;gBACmB,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;CASnC,CAAC;AACF,KAAK,CAAC,GAAG,SAAS,CAAC,OAAO,MAAM,EAAE,OAAO,KAAK,CAAC,CAAC;AAqBhD,qGAAqG;AACrG,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,aAAa,EAAE,CAY9D;;;;;;;;;;;;;;;;;;;;;YA5C6B,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;AAgDpC,wBA0GG"}
|
|
@@ -1,253 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MID_LOOT = exports.STARTING_LOOT = exports.BORDER_SHRINKS = exports.config = exports.CENTER = void 0;
|
|
4
|
-
exports.rollChest = rollChest;
|
|
5
|
-
// Skywars on the runtime SDK. Same rules as team-kradle-challenges/challenges/skywars:
|
|
6
|
-
// four starting islands around a mid island, random chests with weighted loot,
|
|
7
|
-
// a border that shrinks at 3:00, 4:00 and 4:30, one life, last player standing wins.
|
|
8
|
-
// The world carries armor stands tagged kradle.island.<name> plus kradle.chest or
|
|
9
|
-
// kradle.spawn; the loot tables are data here and roll from the run's seed, so a
|
|
10
|
-
// replay opens the same chests.
|
|
11
|
-
const sdk_js_1 = require("../sdk.js");
|
|
12
|
-
exports.CENTER = { x: 70, y: -51, z: 12 };
|
|
13
|
-
exports.config = {
|
|
14
|
-
name: "Skywars",
|
|
15
|
-
challengeConfig: { locations: { center: { coordinates: exports.CENTER } } },
|
|
16
|
-
roles: { fighter: { description: "fighter", minParticipants: 2 } },
|
|
17
|
-
endStates: {
|
|
18
|
-
last_standing: "One player remains alive; that player wins",
|
|
19
|
-
time_up: "The timer ran out with several players alive; nobody wins",
|
|
20
|
-
},
|
|
21
|
-
};
|
|
22
|
-
const INITIAL_BORDER_SIZE = 100;
|
|
23
|
-
const STARTING_ISLANDS = ["north", "east", "south", "west"];
|
|
24
|
-
const MIDDLE_ISLAND = "middle";
|
|
25
|
-
const STARTING_CHESTS_PER_ISLAND = 2;
|
|
26
|
-
const MIDDLE_CHESTS = 4;
|
|
27
|
-
const CHEST_SLOTS = 27;
|
|
28
|
-
exports.BORDER_SHRINKS = [
|
|
29
|
-
{ at: (0, sdk_js_1.seconds)(180), size: 50, seconds: 30, message: "The world border is SHRINKING! Move toward the center!" },
|
|
30
|
-
{ at: (0, sdk_js_1.seconds)(240), size: 15, seconds: 15, message: "The border is closing in FAST!" },
|
|
31
|
-
{ at: (0, sdk_js_1.seconds)(270), size: 5, seconds: 10, message: "FINAL CIRCLE! Fight or die!" },
|
|
32
|
-
];
|
|
33
|
-
const one = (item, weight, count, nbt) => ({
|
|
34
|
-
weight,
|
|
35
|
-
items: [{ item, ...(count === undefined ? {} : { count }), ...(nbt === undefined ? {} : { nbt }) }],
|
|
36
|
-
});
|
|
37
|
-
const bowAndArrows = (weight) => ({
|
|
38
|
-
weight,
|
|
39
|
-
items: [{ item: "minecraft:bow" }, { item: "minecraft:arrow", count: [3, 6] }],
|
|
40
|
-
});
|
|
41
|
-
const SHARPNESS_1 = '{Enchantments:[{id:"minecraft:sharpness",lvl:1s}]}';
|
|
42
|
-
exports.STARTING_LOOT = [
|
|
43
|
-
// Weapon: stone sword / iron sword / bow + 3-6 arrows
|
|
44
|
-
{
|
|
45
|
-
rolls: 1,
|
|
46
|
-
entries: [
|
|
47
|
-
one("minecraft:stone_sword", 3),
|
|
48
|
-
one("minecraft:wooden_sword", 1, undefined, SHARPNESS_1),
|
|
49
|
-
one("minecraft:iron_sword", 1),
|
|
50
|
-
bowAndArrows(2),
|
|
51
|
-
],
|
|
52
|
-
},
|
|
53
|
-
// Armor: leather piece / chainmail helmet
|
|
54
|
-
{
|
|
55
|
-
rolls: 1,
|
|
56
|
-
entries: [
|
|
57
|
-
one("minecraft:leather_helmet", 2),
|
|
58
|
-
one("minecraft:leather_chestplate", 2),
|
|
59
|
-
one("minecraft:leather_leggings", 2),
|
|
60
|
-
one("minecraft:leather_boots", 2),
|
|
61
|
-
one("minecraft:chainmail_helmet", 1),
|
|
62
|
-
],
|
|
63
|
-
},
|
|
64
|
-
// Food: bread / cooked beef / golden apple
|
|
65
|
-
{
|
|
66
|
-
rolls: 1,
|
|
67
|
-
entries: [
|
|
68
|
-
one("minecraft:bread", 3, [3, 8]),
|
|
69
|
-
one("minecraft:cooked_beef", 2, [2, 5]),
|
|
70
|
-
one("minecraft:golden_apple", 1),
|
|
71
|
-
],
|
|
72
|
-
},
|
|
73
|
-
// Blocks: cobblestone / oak planks (for bridging)
|
|
74
|
-
{ rolls: 1, entries: [one("minecraft:cobblestone", 3, 16), one("minecraft:oak_planks", 2, 16)] },
|
|
75
|
-
];
|
|
76
|
-
exports.MID_LOOT = [
|
|
77
|
-
// Weapon: iron sword / diamond sword / bow + 3-6 arrows
|
|
78
|
-
{ rolls: 1, entries: [one("minecraft:iron_sword", 3), one("minecraft:diamond_sword", 1), bowAndArrows(2)] },
|
|
79
|
-
// Armor (1-2 pieces): iron set / diamond helmet / diamond chestplate
|
|
80
|
-
{
|
|
81
|
-
rolls: [1, 2],
|
|
82
|
-
entries: [
|
|
83
|
-
one("minecraft:iron_helmet", 2),
|
|
84
|
-
one("minecraft:iron_chestplate", 2),
|
|
85
|
-
one("minecraft:iron_leggings", 2),
|
|
86
|
-
one("minecraft:iron_boots", 2),
|
|
87
|
-
one("minecraft:diamond_helmet", 1),
|
|
88
|
-
one("minecraft:diamond_chestplate", 1),
|
|
89
|
-
],
|
|
90
|
-
},
|
|
91
|
-
// Food: golden apples / enchanted golden apple / cooked beef
|
|
92
|
-
{
|
|
93
|
-
rolls: 1,
|
|
94
|
-
entries: [
|
|
95
|
-
one("minecraft:golden_apple", 2, 3),
|
|
96
|
-
one("minecraft:enchanted_golden_apple", 1),
|
|
97
|
-
one("minecraft:cooked_beef", 3, 8),
|
|
98
|
-
],
|
|
99
|
-
},
|
|
100
|
-
// Utility: ender pearls / cobblestone / arrows
|
|
101
|
-
{
|
|
102
|
-
rolls: 1,
|
|
103
|
-
entries: [one("minecraft:ender_pearl", 2, 2), one("minecraft:cobblestone", 3, 32), one("minecraft:arrow", 2, 16)],
|
|
104
|
-
},
|
|
105
|
-
];
|
|
106
|
-
// ---------------------------------------------------------------- state
|
|
107
|
-
const state = {
|
|
108
|
-
game: () => ({ chests: [] }),
|
|
109
|
-
player: () => ({ island: "", damageDealt: 0 }),
|
|
110
|
-
markers: {
|
|
111
|
-
tags: ["kradle.island.", "kradle.chest", "kradle.spawn"],
|
|
112
|
-
within: {
|
|
113
|
-
from: { x: exports.CENTER.x - 90, y: -64, z: exports.CENTER.z - 90 },
|
|
114
|
-
to: { x: exports.CENTER.x + 90, y: 100, z: exports.CENTER.z + 90 },
|
|
115
|
-
},
|
|
116
|
-
},
|
|
117
|
-
};
|
|
118
|
-
const blockOf = (at) => ({ x: Math.floor(at.x), y: Math.floor(at.y), z: Math.floor(at.z) });
|
|
119
|
-
const island = (m) => m.tags.find((t) => t.startsWith("kradle.island."))?.slice("kradle.island.".length);
|
|
120
|
-
function count(g, c) {
|
|
121
|
-
if (c === undefined)
|
|
122
|
-
return 1;
|
|
123
|
-
return typeof c === "number" ? c : g.rand(c[0], c[1]);
|
|
124
|
-
}
|
|
125
|
-
function pickEntry(g, entries) {
|
|
126
|
-
const total = entries.reduce((n, e) => n + e.weight, 0);
|
|
127
|
-
let r = g.rand(1, total);
|
|
128
|
-
for (const e of entries) {
|
|
129
|
-
r -= e.weight;
|
|
130
|
-
if (r <= 0)
|
|
131
|
-
return e;
|
|
132
|
-
}
|
|
133
|
-
return entries[entries.length - 1];
|
|
134
|
-
}
|
|
135
|
-
/** Rolls every pool of a table into chest items on random slots, like a vanilla loot table would. */
|
|
136
|
-
function rollChest(g, table) {
|
|
137
|
-
const stacks = [];
|
|
138
|
-
for (const pool of table) {
|
|
139
|
-
const rolls = count(g, pool.rolls);
|
|
140
|
-
for (let i = 0; i < rolls; i++) {
|
|
141
|
-
for (const it of pickEntry(g, pool.entries).items) {
|
|
142
|
-
stacks.push({ item: it.item, count: count(g, it.count), ...(it.nbt === undefined ? {} : { nbt: it.nbt }) });
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
const slots = g.shuffle(Array.from({ length: CHEST_SLOTS }, (_, i) => i));
|
|
147
|
-
return stacks.map((stack, i) => ({ slot: slots[i], ...stack }));
|
|
148
|
-
}
|
|
149
|
-
// ---------------------------------------------------------------- the challenge
|
|
150
|
-
exports.default = (0, sdk_js_1.defineChallenge)(exports.config, {
|
|
151
|
-
...state,
|
|
152
|
-
duration: (0, sdk_js_1.seconds)(300),
|
|
153
|
-
life: "single",
|
|
154
|
-
announce: { deaths: false },
|
|
155
|
-
world: { spawn: exports.CENTER, naturalRegeneration: true },
|
|
156
|
-
// The world build is one batch: border, health display, and every chest with its loot.
|
|
157
|
-
setup(g) {
|
|
158
|
-
g.gamerule("doWeatherCycle", false);
|
|
159
|
-
g.worldBorder({ center: { x: exports.CENTER.x, z: exports.CENTER.z }, size: INITIAL_BORDER_SIZE });
|
|
160
|
-
g.command('scoreboard objectives add kradle.health health {"text":"❤","color":"red","bold":true}');
|
|
161
|
-
g.command("scoreboard objectives setdisplay below_name kradle.health");
|
|
162
|
-
// The world must carry its markers: without them the game would start
|
|
163
|
-
// with no chest or with players who have no island.
|
|
164
|
-
const chestStands = g.markers("kradle.chest");
|
|
165
|
-
if (chestStands.length === 0)
|
|
166
|
-
throw new Error("The world has no kradle.chest marker; no chest can be placed.");
|
|
167
|
-
const spawns = g.markers("kradle.spawn");
|
|
168
|
-
const noSpawn = STARTING_ISLANDS.filter((name) => !spawns.some((m) => island(m) === name));
|
|
169
|
-
if (noSpawn.length > 0)
|
|
170
|
-
throw new Error(`The world has no kradle.spawn marker for: ${noSpawn.join(", ")}.`);
|
|
171
|
-
// Each island must offer as many distinct chest spots as the layout places:
|
|
172
|
-
// fewer, or markers on the same block, would give players unequal loot.
|
|
173
|
-
const spotsOn = (name) => new Set(chestStands
|
|
174
|
-
.filter((m) => island(m) === name)
|
|
175
|
-
.map((m) => `${blockOf(m.at).x},${blockOf(m.at).y},${blockOf(m.at).z}`)).size;
|
|
176
|
-
const short = [
|
|
177
|
-
...STARTING_ISLANDS.map((name) => [name, STARTING_CHESTS_PER_ISLAND]),
|
|
178
|
-
[MIDDLE_ISLAND, MIDDLE_CHESTS],
|
|
179
|
-
]
|
|
180
|
-
.filter(([name, n]) => spotsOn(name) < n)
|
|
181
|
-
.map(([name, n]) => `${name} (${spotsOn(name)} of ${n})`);
|
|
182
|
-
if (short.length > 0)
|
|
183
|
-
throw new Error(`The world has too few distinct kradle.chest markers: ${short.join(", ")}.`);
|
|
184
|
-
const plan = [
|
|
185
|
-
...STARTING_ISLANDS.map((name) => [name, STARTING_CHESTS_PER_ISLAND, exports.STARTING_LOOT]),
|
|
186
|
-
[MIDDLE_ISLAND, MIDDLE_CHESTS, exports.MID_LOOT],
|
|
187
|
-
];
|
|
188
|
-
for (const [name, n, table] of plan) {
|
|
189
|
-
// One marker per block: two markers on one block are one chest spot.
|
|
190
|
-
const distinct = [
|
|
191
|
-
...new Map(chestStands
|
|
192
|
-
.filter((m) => island(m) === name)
|
|
193
|
-
.map((m) => [`${blockOf(m.at).x},${blockOf(m.at).y},${blockOf(m.at).z}`, m])).values(),
|
|
194
|
-
];
|
|
195
|
-
const spots = g.shuffle(distinct).slice(0, n);
|
|
196
|
-
for (const spot of spots) {
|
|
197
|
-
const at = blockOf(spot.at);
|
|
198
|
-
g.game.chests.push(at);
|
|
199
|
-
g.setblock(at, "minecraft:chest");
|
|
200
|
-
g.container(at, rollChest(g, table));
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
},
|
|
204
|
-
start(g) {
|
|
205
|
-
g.say("=== SKYBLOCK BATTLE ROYALE ===");
|
|
206
|
-
g.say("Loot chests, gear up, and fight! Last player standing wins!");
|
|
207
|
-
const spawns = g.markers("kradle.spawn");
|
|
208
|
-
const order = g.shuffle([...STARTING_ISLANDS]);
|
|
209
|
-
g.players.forEach((p, i) => {
|
|
210
|
-
const name = order[i % order.length];
|
|
211
|
-
const spawn = spawns.find((m) => island(m) === name);
|
|
212
|
-
p.island = name;
|
|
213
|
-
if (spawn)
|
|
214
|
-
g.teleport(p, spawn.at);
|
|
215
|
-
g.tell(p, `You spawned on ${name.toUpperCase()}! Find chests to gear up!`);
|
|
216
|
-
});
|
|
217
|
-
g.say(`The CENTER ISLAND is at X: ${exports.CENTER.x} Z: ${exports.CENTER.z}: bridge there for BETTER GEAR!`);
|
|
218
|
-
g.say(`The world border shrinks at ${exports.BORDER_SHRINKS[0].at / 1200}:00! Stay inside or die!`);
|
|
219
|
-
},
|
|
220
|
-
at: exports.BORDER_SHRINKS.map((shrink) => ({
|
|
221
|
-
at: shrink.at,
|
|
222
|
-
run: (g) => {
|
|
223
|
-
g.worldBorder({ size: shrink.size, seconds: shrink.seconds });
|
|
224
|
-
g.say(shrink.message);
|
|
225
|
-
},
|
|
226
|
-
})),
|
|
227
|
-
on: {
|
|
228
|
-
damaged(_g, { attacker, amount }) {
|
|
229
|
-
if (attacker)
|
|
230
|
-
attacker.damageDealt += amount;
|
|
231
|
-
},
|
|
232
|
-
died(g, { player, killer }) {
|
|
233
|
-
g.say(`${player.name} has been eliminated!`);
|
|
234
|
-
if (killer)
|
|
235
|
-
killer.score = killer.kills;
|
|
236
|
-
},
|
|
237
|
-
},
|
|
238
|
-
end: (g) => g.active.length <= 1,
|
|
239
|
-
endState: (g) => (g.active.length <= 1 ? "last_standing" : "time_up"),
|
|
240
|
-
winners: (g) => (g.active.length === 1 ? g.active.filter((p) => p.deaths === 0) : []),
|
|
241
|
-
onOver(g) {
|
|
242
|
-
const winners = new Set(g.active.length === 1 ? g.active.filter((p) => p.deaths === 0).map((p) => p.name) : []);
|
|
243
|
-
for (const p of g.players) {
|
|
244
|
-
const won = winners.has(p.name);
|
|
245
|
-
g.title(p, won ? "VICTORY" : "DEFEAT", won ? "You won the challenge!" : "You lost the challenge.", {
|
|
246
|
-
fadeIn: 10,
|
|
247
|
-
stay: 100,
|
|
248
|
-
fadeOut: 20,
|
|
249
|
-
});
|
|
250
|
-
}
|
|
251
|
-
},
|
|
252
|
-
});
|
|
253
|
-
//# sourceMappingURL=skywars.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skywars.js","sourceRoot":"","sources":["../../../src/runtime/examples/skywars.ts"],"names":[],"mappings":"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"}
|