This commit is contained in:
2024-08-21 16:15:22 +02:00
parent cd5f473460
commit 35af9ffc97
38 changed files with 1122 additions and 1090 deletions

View File

@@ -0,0 +1,217 @@
{
"format_version": "1.19.50",
"minecraft:npc_dialogue": {
"scenes": [
{
"scene_tag": "chanel_greeting_1",
"npc_name": {
"rawtext": [
{
"translate": "npc.name.chanel"
}
]
},
"text": {
"rawtext": [
{
"translate": "chanel.greeting.1.text",
"with": ["\n"]
}
]
},
"buttons": [
{
"name": {
"rawtext": [
{
"translate": "chanel.greeting.1.button"
}
]
},
"commands": ["/dialogue open @e[tag=chanel1] @initiator chanel_greeting_2"]
}
]
},
{
"scene_tag": "chanel_greeting_2",
"npc_name": {
"rawtext": [
{
"translate": "npc.name.chanel"
}
]
},
"text": {
"rawtext": [
{
"translate": "chanel.greeting.2.text",
"with": ["\n"]
}
]
},
"buttons": [
{
"name": {
"rawtext": [
{
"translate": "chanel.greeting.2.button"
}
]
},
"commands": ["/dialogue open @e[tag=chanel1] @initiator chanel_greeting_3"]
}
]
},
{
"scene_tag": "chanel_greeting_3",
"npc_name": {
"rawtext": [
{
"translate": "npc.name.chanel"
}
]
},
"text": {
"rawtext": [
{
"translate": "chanel.greeting.3.text",
"with": ["\n"]
}
]
},
"buttons": [
{
"name": {
"rawtext": [
{
"translate": "chanel.greeting.3.button"
}
]
},
"commands": ["/scriptevent cc:startIntro"]
}
]
},
{
"scene_tag": "chanel_goto_temple",
"npc_name": {
"rawtext": [
{
"translate": "npc.name.chanel"
}
]
},
"text": {
"rawtext": [
{
"translate": "chanel.goto_temple.text",
"with": ["\n"]
}
]
},
"buttons": [
{
"name": {
"rawtext": [
{
"translate": "chanel.goto_temple.button"
}
]
},
"commands": []
}
]
},
{
"scene_tag": "bilal_greeting_1",
"npc_name": {
"rawtext": [
{
"translate": "npc.name.bilal"
}
]
},
"text": {
"rawtext": [
{
"translate": "bilal.greeting.1.text",
"with": ["\n"]
}
]
},
"buttons": [
{
"name": {
"rawtext": [
{
"translate": "bilal.greeting.1.button"
}
]
},
"commands": ["/scriptevent cc:startTemple"]
}
]
},
{
"scene_tag": "suki_greeting_1",
"npc_name": {
"rawtext": [
{
"translate": "npc.name.suki"
}
]
},
"text": {
"rawtext": [
{
"translate": "suki.greeting.1.text",
"with": ["\n"]
}
]
},
"buttons": [
{
"name": {
"rawtext": [
{
"translate": "suki.greeting.1.button"
}
]
},
"commands": ["/dialogue open @e[tag=suki1] @initiator suki_greeting_2"]
}
]
},
{
"scene_tag": "suki_greeting_2",
"npc_name": {
"rawtext": [
{
"translate": "npc.name.suki"
}
]
},
"text": {
"rawtext": [
{
"translate": "suki.greeting.2.text",
"with": ["\n"]
}
]
},
"buttons": [
{
"name": {
"rawtext": [
{
"translate": "suki.greeting.2.button"
}
]
},
"commands": ["/scriptevent cc:StartLevel1"]
}
]
}
]
}
}

View File

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,13 @@
{
"format_version": "1.14.0",
"sound_definitions": {
"cc.alarm": {
"category": "neutral",
"sounds": ["sounds/alarm"]
},
"cc.sam": {
"category": "neutral",
"sounds": ["sounds/samgooris"]
}
}
}

View File

@@ -2,6 +2,17 @@
message.trail.follow=Follow the trail message.trail.follow=Follow the trail
message.levels.completed=You have completed all levels! message.levels.completed=You have completed all levels!
## goto messages
message.goto.airlock=Go to the Airlock
message.enter.airlock=Enter the Airlock
message.follow.path.temple=Follow the path and talk to §6Bakker Bilal
message.goto.temple=Go to the Temple and talk to §2Veteraan Suki
message.goto.level1=Go to Level 1
message.goto.level2=Go to Level 2
message.goto.level3=Go to Level 3
## Fail conditions ## Fail conditions
message.level.incorrect=§cIncorrect!§b message.level.incorrect=§cIncorrect!§b
@@ -13,8 +24,8 @@ message.level.outofbounds.subtext=You can't be over water!
## npc names ## npc names
npc.name.help=Help npc.name.help=Help
npc.name.suki=§2Suki npc.name.suki=§2Veteraan Suki
npc.name.bilal=§6Bilal npc.name.bilal=§6Bakker Bilal
npc.name.ramses=§dRamses npc.name.ramses=§dRamses
npc.name.chanel=§9Wetenschapper Chanel npc.name.chanel=§9Wetenschapper Chanel
npc.name.paul=§7Paul npc.name.paul=§7Paul
@@ -31,6 +42,11 @@ button.hello=Hello
button.noprob=No problem button.noprob=No problem
button.letsgo=Let's Go! button.letsgo=Let's Go!
## Common
message.outofbounds=§cOut of bounds!§b
message.incorrect=§cIncorrect!§b
message.talkto.ramses=Talk to §dRamses message.talkto.ramses=Talk to §dRamses
message.talkto.chanel=Talk to §9Chanel message.talkto.chanel=Talk to §9Chanel
@@ -40,28 +56,77 @@ message.intro.make=Break the code!
message.intro.done=§aYou have cracked the code!§b message.intro.done=§aYou have cracked the code!§b
## Level 1 messages ## Level 1 messages
message.level1.name=Level 1 message.mission1part1.name=Level 1
message.level1.started=Level 1 is started! message.mission1part1.started=Level 1 is started!
message.level1.complete=Level 1 is complete! message.mission1part1.complete=Level 1 is complete!
message.level1.make=Make Level 1 message.mission1part1.make=Make Level 1
message.level1.outOfBoun=§cOut of bounds!§bwd
## Level 2 messages ## Level 2 messages
message.level2.name=Level 2 message.mission1part2.name=Level 2
message.level2.started=Level 2 is started! message.mission1part2.started=Level 2 is started!
message.level2.complete=Level 2 is complete! message.mission1part2.complete=Level 2 is complete!
message.level2.make=Make Level 2 message.mission1part2.make=Make Level 2
## Level 3 messages ## Level 3 messages
message.level3.name=Level 3 message.mission1part3.name=Level 3
message.level3.started=Level 3 is started! message.mission1part3.started=Level 3 is started!
message.level3.complete=Level 3 is complete! message.mission1part3.complete=Level 3 is complete!
message.level3.make=Make Level 3 message.mission1part3.make=Make Level 3
## mission 2 part 1
message.mission2part1.name=Level 1
message.mission2part1.started=Level 1 is started!
message.mission2part1.complete=Level 1 is complete!
message.mission2part1.make=Make Level 1
## mission 2 part 2
message.mission2part2.name=Level 2
message.mission2part2.started=Level 2 is started!
message.mission2part2.complete=Level 2 is complete!
message.mission2part2.make=Make Level 2
## mission 3 part 1
message.mission3part1.name=Level 1
message.mission3part1.started=Level 1 is started!
message.mission3part1.complete=Level 1 is complete!
message.mission3part1.make=Make Level 1
## mission 3 part 2
message.mission3part2.name=Level 2
message.mission3part2.started=Level 2 is started!
message.mission3part2.complete=Level 2 is complete!
message.mission3part2.make=Make Level 2
## mission 3 part 3
message.mission3part3.name=Level 3
message.mission3part3.started=Level 3 is started!
message.mission3part3.complete=Level 3 is complete!
message.mission3part3.make=Make Level 3
## Goto messages ## Goto messages
message.goto.field.1=Go to the First Field
message.goto.field.2=Go to the Second Field
message.goto.field.3=Go to the Last Field
chanel.greeting.1.text=Hello! I'm §9Chanel§0, the scientist. I'm here to help you with the vault.
chanel.greeting.1.button=Ok!
## Npc messages
chanel.greeting.1.text=Hey daar! Dit is jouw laatste missie in deze onderwaterwereld. De gemene piraten hebben de agent gevangengenomen in de onderwatertempel. Nadat je de agent helpt ontsnappen moet je ook wat koraal herstellen.
chanel.greeting.1.button=Hoe?
chanel.greeting.2.text=Je bevrijdt jouw Agent door alles van de afgelopen missies te gebruiken. In de opdrachten zullen zowel sequentie, eindige herhaling, enkelvoudige en meervoudige selecties voorkomen.
chanel.greeting.2.button=Wow!
chanel.greeting.3.text=Top! Eerst ga je de code moeten kraken om de ingestorte grot open te blazen. De code volgt een patroon. Alleen ik ben vergeten welk patroon...
chanel.greeting.3.button=Oké!
chanel.goto_temple.text=Snel! Ga door het opgeblazen gat voor het terug instort. Ik regel wel dat niks hier instort.
chanel.goto_temple.button=Let's Go!
bilal.greeting.1.text=De agent word gevangengehouden in deze tempel. Pas op, ik denk dat er vallen zijn in die tempel. Wees voorzichtig.
bilal.greeting.1.button=Oké!
suki.greeting.1.text=Oeps, je hebt de val geactiveerd. We zitten nu vast in deze tempel. Ik zal even rondkijken of er een manier is om de deur terug open te krijgen. Probeer jij ondertussen om de agent vrij te krijgen.
suki.greeting.1.button=Zal ik doen!
suki.greeting.2.text=Je moet de agent door het parcours laten wandelen. Pas op, je mag niet boven lava gaan anders zal de agent doodgaan! Veel succes!
suki.greeting.2.button=Oké!

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -139,11 +139,19 @@ export class Maker {
} else { } else {
map.setColorRGB("variable.color", { red: 0, green: 255, blue: 0 }); map.setColorRGB("variable.color", { red: 0, green: 255, blue: 0 });
const particleData: MolangVariableMap = new MolangVariableMap(); const particleData: MolangVariableMap = new MolangVariableMap();
if (color == PaletteColor.Red) {
particleData.setColorRGB("variable.color", {
red: 1,
green: 0,
blue: 0,
});
} else if (color == PaletteColor.White) {
particleData.setColorRGB("variable.color", { particleData.setColorRGB("variable.color", {
red: 1, red: 1,
green: 1, green: 1,
blue: 1, blue: 1,
}); });
}
spawnParticle(vector3(x, y + 0.1, z), "codecosmos:point", particleData); spawnParticle(vector3(x, y + 0.1, z), "codecosmos:point", particleData);
} }
} }
@@ -162,16 +170,16 @@ export class Maker {
(trigger.point1.y + trigger.point2.y) / 2, (trigger.point1.y + trigger.point2.y) / 2,
(trigger.point1.z + trigger.point2.z) / 2 (trigger.point1.z + trigger.point2.z) / 2
); );
const distnaces = players.map((player) => { const distances = players.map((player) => {
return { return {
player: player, player: player,
distance: vector3Distance(player.location, triggerCenter), distance: vector3Distance(player.location, triggerCenter),
}; };
}); });
distnaces.sort((a, b) => a.distance - b.distance); distances.sort((a, b) => a.distance - b.distance);
const closestPlayer = distnaces[0].player; const closestPlayer = distances[0].player;
const distance = distnaces[0].distance; const distance = distances[0].distance;
if (distance > 25) return; if (distance > 25) return;

View File

@@ -69,14 +69,14 @@ export class Trigger {
} }
Update() { Update() {
world // world
.getDimension("overworld") // .getDimension("overworld")
.getEntities({ type: "minecraft:player" }) // .getEntities({ type: "minecraft:player" })
.forEach((player) => { // .forEach((player) => {
//Check if the distance between the player and the trigger is less than the width of the trigger // //Check if the distance between the player and the trigger is less than the width of the trigger
// if (this.hasPlayerEnterdTrigger(player.location)) { // // if (this.hasPlayerEnterdTrigger(player.location)) {
// world.sendMessage(`Player ${player.nameTag} is in trigger`); // // world.sendMessage(`Player ${player.nameTag} is in trigger`);
// } // // }
}); // });
} }
} }

View File

@@ -0,0 +1,66 @@
import { Vector3, world } from "@minecraft/server";
import { Vector3ToCommandString } from "../utils/vectorUtils";
import { delay } from "../utils/waitUtil";
let animationPlaying = false;
function setAmimationPlaying(value: boolean) {
animationPlaying = value;
}
function getAnimationPlaying() {
return animationPlaying;
}
class ClonePos {
point1: Vector3;
point2: Vector3;
constructor(point1: Vector3, point2: Vector3) {
this.point1 = point1;
this.point2 = point2;
}
}
async function SetFrame(frame: ClonePos, destination: Vector3) {
await world
.getDimension("overworld")
.runCommandAsync(
`/clone ${Vector3ToCommandString(frame.point1)} ${Vector3ToCommandString(frame.point2)} ${Vector3ToCommandString(
destination
)}`
);
}
async function playAnimation(
frames: ClonePos[],
delayTime: number,
reverse: boolean,
destination: Vector3,
force: boolean = false
) {
if (animationPlaying && !force) {
world.sendMessage("Animation already playing");
return;
}
let frameCount = frames.length;
if (!force) {
animationPlaying = true;
}
for (let i = 0; i < frameCount; i++) {
let frame = reverse ? frames[frameCount - i - 1] : frames[i];
await world
.getDimension("overworld")
.runCommandAsync(
`/clone ${Vector3ToCommandString(frame.point1)} ${Vector3ToCommandString(
frame.point2
)} ${Vector3ToCommandString(destination)}`
);
await delay(delayTime);
}
if (!force) {
animationPlaying = false;
}
}
export { SetFrame, ClonePos, playAnimation, animationPlaying, setAmimationPlaying, getAnimationPlaying };

View File

@@ -0,0 +1,74 @@
import { Vector3, world } from "@minecraft/server";
import Level from "./level";
import pupeteer from "../pupeteer";
import { teleportAgent, isAgentAt, getAgentLocation, getAgent } from "../utils/agentUtils";
import { startLevel } from "../utils/levelUtils";
import { vector3, Vector3Add, Vector3ToCommandString } from "../utils/vectorUtils";
import { mindKeeper, CURRENT_LEVEL } from "../../main";
import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block";
class AbstractAgentTrackMission extends Level {
levelid: string;
constructor(
levelid: string,
agentStartPositon: Vector3,
agentEndPosition: Vector3,
startLevelCommandBlockPos: Vector3
) {
super(
() => {
pupeteer.sendWorldMessage(`%message.${levelid}.started`);
pupeteer.setTitleTimed(`%message.${levelid}.name`, 2.5);
startLevel(startLevelCommandBlockPos);
teleportAgent(agentStartPositon);
},
() => {
pupeteer.setActionBar(`%message.${levelid}.make`);
},
() => {
pupeteer.clearActionBar();
pupeteer.sendWorldMessage(`%message.${levelid}.complete`);
pupeteer.setTitleTimed(`%message.${levelid}.complete`, 2.5);
mindKeeper.increment(CURRENT_LEVEL);
},
() => {
let isComplete = false;
let isOutOfBounds = false;
let agentPos = getAgentLocation();
let blockLava = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -7, 0)));
let blockAir = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0)));
if (
blockLava &&
blockLava.type.id === MinecraftBlockTypes.Lava &&
blockAir &&
blockAir.type.id === MinecraftBlockTypes.Air
) {
isOutOfBounds = true;
}
if (isAgentAt(agentEndPosition)) {
isComplete = true;
}
if (isOutOfBounds) {
pupeteer.sendWorldMessage(`%message.outofbounds`);
pupeteer.setTitleTimed(`%message.outofbounds`, 2.5);
// world.getDimension("overworld").runCommand("/kill @e[type=agent]");
world.getDimension("overworld").runCommand("execute as @p run codebuilder runtime stop @s");
teleportAgent(agentStartPositon);
return false;
} else if (isComplete) {
return true;
}
return false;
}
);
this.levelid = levelid;
}
}
export default AbstractAgentTrackMission;

View File

@@ -1,4 +1,4 @@
import { BlockType, Vector3, World } from "@minecraft/server"; import { BlockType, Vector3, world, World } from "@minecraft/server";
export type blockCondition = { export type blockCondition = {
block: string; block: string;
@@ -42,3 +42,14 @@ export type AgentNoGoZone = {
export type LevelNoGoZone = { export type LevelNoGoZone = {
zones: AgentNoGoZone[]; zones: AgentNoGoZone[];
}; };
export const checkBlockCondition = (condition: LevelBlockCondition): boolean => {
let isComplete: boolean = true;
condition.conditions.forEach((condition) => {
let block = world.getDimension("overworld").getBlock(condition.position);
if (block!.typeId != condition.block) {
isComplete = false;
}
});
return isComplete;
};

View File

@@ -29,7 +29,6 @@ enum StoreType {
*/ */
class Mindkeeper { class Mindkeeper {
registerdStores: Array<Store> = []; registerdStores: Array<Store> = [];
// propertyManager = new DynamicPropertiesDefinition();
world: World; world: World;
initialised: boolean = false; initialised: boolean = false;
debugLog: string[] = []; debugLog: string[] = [];
@@ -75,7 +74,6 @@ class Mindkeeper {
registerToWorld() { registerToWorld() {
for (let i = 0; i < this.registerdStores.length; i++) { for (let i = 0; i < this.registerdStores.length; i++) {
let isAlreadyDefined = true; let isAlreadyDefined = true;
try { try {
let test = this.world.getDynamicProperty(this.registerdStores[i].getName()); let test = this.world.getDynamicProperty(this.registerdStores[i].getName());
if (test === undefined) { if (test === undefined) {
@@ -218,9 +216,8 @@ class Mindkeeper {
if (command === "!deleteStoresConfirm") { if (command === "!deleteStoresConfirm") {
this.getStores().forEach((store) => { this.getStores().forEach((store) => {
this.world.sendMessage(`Deleting ${store.getName()}`); this.world.sendMessage(`Deleting ${store.getName()}`);
this.world.sendMessage("This feature no longer works, thanks minecraft ");
// this.world.dynami(store.getName());
}); });
this.world.clearDynamicProperties();
this.secondWarning = false; this.secondWarning = false;
} }
} }

View File

@@ -1,10 +1,22 @@
import { Entity, Vector3, world } from "@minecraft/server"; import { Entity, Vector3, world } from "@minecraft/server";
import { Vector3ToString, vector3 } from "./vectorUtils"; import { Vector3ToString, vector3 } from "./vectorUtils";
import { mindKeeper } from "../../main"; import { mindKeeper } from "../../main";
function teleportAgent(position: Vector3) {
//Make a facing with vector3
type Facing = Vector3;
function teleportAgent(position: Vector3, facing: Vector3 = vector3(0, 0, 0)): void {
if (facing == vector3(0, 0, 0)) {
world world
.getDimension("overworld") .getDimension("overworld")
.runCommand(`/execute as @a run tp @e[type=agent] ${position.x} ${position.y} ${position.z}`); .runCommand(`/execute as @a run tp @e[type=agent] ${position.x} ${position.y} ${position.z}`);
} else {
world
.getDimension("overworld")
.runCommand(
`/execute as @a run tp @e[type=agent] ${position.x} ${position.y} ${position.z} facing ${facing.x} ${facing.y} ${facing.z}`
);
}
} }
function isAgentAt(position: Vector3): boolean { function isAgentAt(position: Vector3): boolean {

View File

@@ -0,0 +1,15 @@
import { system, world } from "@minecraft/server";
function runEntityEventOnTag(tag: string, event: string) {
system.run(() => {
world.getDimension("overworld").runCommand(`/event entity @e[tag=${tag}] ${event}`);
});
}
function setNPCDialog(npcTag: string, dialogId: string) {
system.run(() => {
world.getDimension("overworld").runCommand(`/dialogue change @e[tag=${npcTag}] ${dialogId} @a`);
});
}
export { runEntityEventOnTag, setNPCDialog };

View File

@@ -11,7 +11,7 @@ function clearWall(wall: Wall) {
world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.Air); world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.Air);
} }
function fillWall(wall: Wall, block: BlockType) { function fillWall(wall: Wall, block: string) {
let volume: BlockVolume = new BlockVolume(wall.startPos, wall.endPos); let volume: BlockVolume = new BlockVolume(wall.startPos, wall.endPos);
world.getDimension("overworld").fillBlocks(volume, block); world.getDimension("overworld").fillBlocks(volume, block);
} }

View File

@@ -1,5 +1,31 @@
import { Vector3 } from "@minecraft/server"; import { Vector3 } from "@minecraft/server";
enum Direction {
North = 0,
East = 1,
South = 2,
West = 3,
Up = 4,
Down = 5,
}
function directionToVector3(direction: Direction): Vector3 {
switch (direction) {
case Direction.North:
return vector3(0, 0, -1);
case Direction.East:
return vector3(1, 0, 0);
case Direction.South:
return vector3(0, 0, 1);
case Direction.West:
return vector3(-1, 0, 0);
case Direction.Up:
return vector3(0, 1, 0);
case Direction.Down:
return vector3(0, -1, 0);
}
}
function vector3(x: number, y: number, z: number): Vector3 { function vector3(x: number, y: number, z: number): Vector3 {
return { x: x, y: y, z: z }; return { x: x, y: y, z: z };
} }
@@ -55,6 +81,8 @@ function vector3Distance(vector1: Vector3, vector2: Vector3): number {
} }
export { export {
Direction,
directionToVector3,
Vector3ToString, Vector3ToString,
Vector3ToFancyString, Vector3ToFancyString,
Vector3Add, Vector3Add,

View File

@@ -1,141 +0,0 @@
import { BlockType, Vector3 } from "@minecraft/server";
import { LevelBlockCondition, LevelNoGoZone } from "../Commandeer/level/levelTypes";
import { vector3 } from "../Commandeer/utils/vectorUtils";
import { MinecraftBlockTypes } from "../vanilla-data/mojang-block";
let level1Conditions: LevelBlockCondition = {
conditions: [
{
block: MinecraftBlockTypes.Air,
position: vector3(55, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(56, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(57, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(58, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(59, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(61, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(62, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(63, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(65, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(66, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(67, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(69, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(70, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(71, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(72, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(73, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(74, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(74, 70, 216),
},
],
};
let level1NoGoZones: LevelNoGoZone = {
zones: [
{ position: vector3(55, 70, 215) },
{ position: vector3(56, 70, 215) },
{ position: vector3(57, 70, 215) },
{ position: vector3(58, 70, 215) },
{ position: vector3(59, 70, 215) },
{ position: vector3(60, 70, 215) },
{ position: vector3(61, 70, 215) },
{ position: vector3(62, 70, 215) },
{ position: vector3(63, 70, 215) },
{ position: vector3(64, 70, 215) },
{ position: vector3(65, 70, 215) },
{ position: vector3(66, 70, 215) },
{ position: vector3(67, 70, 215) },
{ position: vector3(68, 70, 215) },
{ position: vector3(69, 70, 215) },
{ position: vector3(70, 70, 215) },
{ position: vector3(71, 70, 215) },
{ position: vector3(72, 70, 215) },
{ position: vector3(73, 70, 215) },
{ position: vector3(74, 70, 215) },
{ position: vector3(55, 70, 217) },
{ position: vector3(56, 70, 217) },
{ position: vector3(57, 70, 217) },
{ position: vector3(58, 70, 217) },
{ position: vector3(59, 70, 217) },
{ position: vector3(60, 70, 217) },
{ position: vector3(61, 70, 217) },
{ position: vector3(62, 70, 217) },
{ position: vector3(63, 70, 217) },
{ position: vector3(64, 70, 217) },
{ position: vector3(65, 70, 217) },
{ position: vector3(66, 70, 217) },
{ position: vector3(67, 70, 217) },
{ position: vector3(68, 70, 217) },
{ position: vector3(69, 70, 217) },
{ position: vector3(70, 70, 217) },
{ position: vector3(71, 70, 217) },
{ position: vector3(72, 70, 217) },
{ position: vector3(73, 70, 217) },
{ position: vector3(74, 70, 217) },
],
};
export { level1Conditions, level1NoGoZones };

View File

@@ -1,145 +0,0 @@
import { BlockType, Vector3 } from "@minecraft/server";
import { LevelBlockCondition, LevelNoGoZone } from "../Commandeer/level/levelTypes";
import { vector3 } from "../Commandeer/utils/vectorUtils";
import { MinecraftBlockTypes } from "../vanilla-data/mojang-block";
let level2Conditions: LevelBlockCondition = {
conditions: [
{
block: MinecraftBlockTypes.Air,
position: vector3(45, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(44, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(43, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(42, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(41, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(40, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(39, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(38, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(37, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(36, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(35, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(34, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 219),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 218),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 217),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 215),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 214),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 213),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(34, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(35, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(36, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(37, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(38, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(39, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(40, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(41, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(42, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(43, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(44, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(45, 70, 212),
},
],
};
export { level2Conditions };

View File

@@ -1,140 +0,0 @@
import { BlockType, Vector3 } from "@minecraft/server";
import { LevelBlockCondition } from "../Commandeer/level/levelTypes";
import { vector3 } from "../Commandeer/utils/vectorUtils";
import { MinecraftBlockTypes } from "../vanilla-data/mojang-block";
let level3Conditions: LevelBlockCondition = {
conditions: [
{
block: MinecraftBlockTypes.Air,
position: vector3(57, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(58, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(59, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 234),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 233),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 232),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 231),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(61, 70, 231),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(62, 70, 231),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(63, 70, 231),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 231),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 232),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 233),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 234),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 236),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 237),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 238),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 239),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(65, 70, 239),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(66, 70, 239),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(67, 70, 239),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 239),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 238),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 237),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 236),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(69, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(70, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(71, 70, 235),
},
],
};
export { level3Conditions };

View File

@@ -1,140 +0,0 @@
import { BlockType, Vector3 } from "@minecraft/server";
import { LevelBlockCondition } from "../Commandeer/level/levelTypes";
import { vector3 } from "../Commandeer/utils/vectorUtils";
import { MinecraftBlockTypes } from "../vanilla-data/mojang-block";
let level3Conditions: LevelBlockCondition = {
conditions: [
{
block: MinecraftBlockTypes.Air,
position: vector3(57, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(58, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(59, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 234),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 233),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 232),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 231),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(61, 70, 231),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(62, 70, 231),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(63, 70, 231),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 231),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 232),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 233),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 234),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 236),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 237),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 238),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 239),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(65, 70, 239),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(66, 70, 239),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(67, 70, 239),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 239),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 238),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 237),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 236),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(69, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(70, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(71, 70, 235),
},
],
};
export { level3Conditions };

View File

@@ -0,0 +1,50 @@
import { LevelBlockCondition, LevelLeverCondition } from "../Commandeer/level/levelTypes";
import { vector3 } from "../Commandeer/utils/vectorUtils";
import { MinecraftBlockTypes } from "../vanilla-data/mojang-block";
let mission2part1Conditions: LevelBlockCondition = {
conditions: [
{
position: vector3(2455, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
{
position: vector3(2456, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
{
position: vector3(2457, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
{
position: vector3(2458, -2, 11),
block: MinecraftBlockTypes.RedNetherBrick,
},
{
position: vector3(2459, -2, 11),
block: MinecraftBlockTypes.RedNetherBrick,
},
{
position: vector3(2460, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
{
position: vector3(2461, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
{
position: vector3(2462, -2, 11),
block: MinecraftBlockTypes.RedNetherBrick,
},
{
position: vector3(2463, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
{
position: vector3(2464, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
],
};
export { mission2part1Conditions };

View File

@@ -0,0 +1,66 @@
import { LevelBlockCondition, LevelLeverCondition } from "../Commandeer/level/levelTypes";
import { vector3 } from "../Commandeer/utils/vectorUtils";
import { MinecraftBlockTypes } from "../vanilla-data/mojang-block";
let mission2part2Conditions: LevelBlockCondition = {
conditions: [
{
position: vector3(2467, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
{
position: vector3(2468, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
{
position: vector3(2469, -2, 11),
block: MinecraftBlockTypes.HornCoralBlock,
},
{
position: vector3(2470, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
{
position: vector3(2471, -2, 11),
block: MinecraftBlockTypes.HornCoralBlock,
},
{
position: vector3(2472, -2, 11),
block: MinecraftBlockTypes.RedNetherBrick,
},
{
position: vector3(2473, -2, 11),
block: MinecraftBlockTypes.RedNetherBrick,
},
{
position: vector3(2474, -2, 11),
block: MinecraftBlockTypes.HornCoralBlock,
},
{
position: vector3(2475, -2, 11),
block: MinecraftBlockTypes.RedNetherBrick,
},
{
position: vector3(2476, -2, 11),
block: MinecraftBlockTypes.HornCoralBlock,
},
{
position: vector3(2477, -2, 11),
block: MinecraftBlockTypes.HornCoralBlock,
},
{
position: vector3(2478, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
{
position: vector3(2479, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
{
position: vector3(2480, -2, 11),
block: MinecraftBlockTypes.RedNetherBrick,
},
],
};
export { mission2part2Conditions };

View File

@@ -1,74 +0,0 @@
import { BlockType, BlockTypes, Vector3, world } from "@minecraft/server";
import Level from "../../Commandeer/level/level";
import pupeteer from "../../Commandeer/pupeteer";
import { teleportAgent, isAgentAt, getAgentLocation, getAgent } from "../../Commandeer/utils/agentUtils";
import { startLevel } from "../../Commandeer/utils/levelUtils";
import { vector3, Vector3Add, Vector3ToCommandString } from "../../Commandeer/utils/vectorUtils";
import { level1Conditions } from "../../levelConditions/level1";
import { mindKeeper, CURRENT_LEVEL } from "../../main";
import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block";
const Level1CommandBlockPos: Vector3 = vector3(2439, 0, 36);
const level1StartPosition: Vector3 = vector3(2451, -2, 57);
const Level1EndPosition: Vector3 = vector3(2451, -2, 41);
const level1ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
const level1: Level = new Level(
() => {
pupeteer.sendWorldMessage("%message.level1.started");
pupeteer.setTitleTimed("%message.level1.name", 2.5);
startLevel(Level1CommandBlockPos);
teleportAgent(level1StartPosition);
},
() => {
pupeteer.setActionBar("%message.level1.make");
},
() => {
pupeteer.clearActionBar();
pupeteer.sendWorldMessage("%message.level1.complete");
pupeteer.setTitleTimed("%message.level1.complete", 2.5);
mindKeeper.increment(CURRENT_LEVEL);
},
() => {
let isComplete = false;
let isOutOfBounds = false;
//6 blocks lower is lava
let agentPos = getAgentLocation();
let blockLava = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -7, 0)));
let blockAir = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0)));
if (
blockLava &&
blockLava.type.id === MinecraftBlockTypes.Lava &&
blockAir &&
blockAir.type.id === MinecraftBlockTypes.Air
) {
isOutOfBounds = true;
}
if (isAgentAt(Level1EndPosition)) {
isComplete = true;
}
// world.sendMessage(`isComplete: ${isComplete}`);
// world.sendMessage(`isOutOfBounds: ${isOutOfBounds}`);
if (isOutOfBounds) {
pupeteer.sendWorldMessage("%message.level1.outOfBounds");
pupeteer.setTitleTimed("%message.level1.outOfBounds", 2.5);
// world.getDimension("overworld").runCommand("/kill @e[type=agent]");
world.getDimension("overworld").runCommand("execute as @p run codebuilder runtime stop @s");
teleportAgent(level1StartPosition);
return false;
} else if (isComplete) {
return true;
}
return false;
}
);
export default level1;

View File

@@ -1,73 +0,0 @@
import { Vector3, world } from "@minecraft/server";
import Level from "../../Commandeer/level/level";
import pupeteer from "../../Commandeer/pupeteer";
import { teleportAgent, isAgentAt, getAgentLocation, getAgent } from "../../Commandeer/utils/agentUtils";
import { startLevel } from "../../Commandeer/utils/levelUtils";
import { vector3, Vector3Add, Vector3ToCommandString } from "../../Commandeer/utils/vectorUtils";
import { mindKeeper, CURRENT_LEVEL } from "../../main";
import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block";
const Level2CommandBlockPos: Vector3 = vector3(2439, 0, 35);
const level2StartPosition: Vector3 = vector3(2446, -2, 40);
const Level2EndPosition: Vector3 = vector3(2446, -2, 30);
const level2ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
const level2: Level = new Level(
() => {
pupeteer.sendWorldMessage("%message.level2.started");
pupeteer.setTitleTimed("%message.level2.name", 2.5);
startLevel(Level2CommandBlockPos);
teleportAgent(level2StartPosition);
},
() => {
pupeteer.setActionBar("%message.level2.make");
},
() => {
pupeteer.clearActionBar();
pupeteer.sendWorldMessage("%message.level2.complete");
pupeteer.setTitleTimed("%message.level2.complete", 2.5);
mindKeeper.increment(CURRENT_LEVEL);
},
() => {
let isComplete = false;
let isOutOfBounds = false;
//6 blocks lower is lava
let agentPos = getAgentLocation();
let blockLava = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -7, 0)));
let blockAir = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0)));
if (
blockLava &&
blockLava.type.id === MinecraftBlockTypes.Lava &&
blockAir &&
blockAir.type.id === MinecraftBlockTypes.Air
) {
isOutOfBounds = true;
}
if (isAgentAt(Level2EndPosition)) {
isComplete = true;
}
// world.sendMessage(`isComplete: ${isComplete}`);
// world.sendMessage(`isOutOfBounds: ${isOutOfBounds}`);
if (isOutOfBounds) {
pupeteer.sendWorldMessage("%message.level2.outOfBounds");
pupeteer.setTitleTimed("%message.level2.outOfBounds", 2.5);
// world.getDimension("overworld").runCommand("/kill @e[type=agent]");
world.getDimension("overworld").runCommand("execute as @p run codebuilder runtime stop @s");
teleportAgent(level2StartPosition);
return false;
} else if (isComplete) {
return true;
}
return false;
}
);
export default level2;

View File

@@ -1,72 +0,0 @@
import { Vector3, world } from "@minecraft/server";
import Level from "../../Commandeer/level/level";
import pupeteer from "../../Commandeer/pupeteer";
import { teleportAgent, isAgentAt, getAgentLocation, getAgent } from "../../Commandeer/utils/agentUtils";
import { startLevel } from "../../Commandeer/utils/levelUtils";
import { vector3, Vector3Add, Vector3ToCommandString } from "../../Commandeer/utils/vectorUtils";
import { mindKeeper, CURRENT_LEVEL } from "../../main";
import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block";
const Level3CommandBlockPos: Vector3 = vector3(2439, 0, 34);
const level3StartPosition: Vector3 = vector3(2447, -2, 30);
const level3EndPosition: Vector3 = vector3(2451, -2, 18);
const level3ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
const level3: Level = new Level(
() => {
pupeteer.sendWorldMessage("%message.level3.started");
pupeteer.setTitleTimed("%message.level3.name", 2.5);
startLevel(Level3CommandBlockPos);
teleportAgent(level3StartPosition);
},
() => {
pupeteer.setActionBar("%message.level3.make");
},
() => {
pupeteer.clearActionBar();
pupeteer.sendWorldMessage("%message.level3.complete");
pupeteer.setTitleTimed("%message.level3.complete", 2.5);
mindKeeper.increment(CURRENT_LEVEL);
},
() => {
let isComplete = false;
let isOutOfBounds = false;
//6 blocks lower is lava
let agentPos = getAgentLocation();
let blockLava = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -7, 0)));
let blockAir = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0)));
if (
blockLava &&
blockLava.type.id === MinecraftBlockTypes.Lava &&
blockAir &&
blockAir.type.id === MinecraftBlockTypes.Air
) {
isOutOfBounds = true;
}
if (isAgentAt(level3EndPosition)) {
isComplete = true;
}
// world.sendMessage(`isComplete: ${isComplete}`);
// world.sendMessage(`isOutOfBounds: ${isOutOfBounds}`);
if (isOutOfBounds) {
pupeteer.sendWorldMessage("%message.level3.outOfBounds");
pupeteer.setTitleTimed("%message.level3.outOfBounds", 2.5);
// world.getDimension("overworld").runCommand("/kill @e[type=agent]");
world.getDimension("overworld").runCommand("execute as @p run codebuilder runtime stop @s");
teleportAgent(level3StartPosition);
return false;
} else if (isComplete) {
return true;
}
return false;
}
);
export default level3;

View File

@@ -1,74 +0,0 @@
import { Vector3, world } from "@minecraft/server";
import Level from "../../Commandeer/level/level";
import pupeteer from "../../Commandeer/pupeteer";
import { teleportAgent, isAgentAt, getAgentLocation, getAgent } from "../../Commandeer/utils/agentUtils";
import { startLevel } from "../../Commandeer/utils/levelUtils";
import { vector3, Vector3Add, Vector3ToCommandString } from "../../Commandeer/utils/vectorUtils";
// import { level4Conditions } from "../../levelConditions/level4";
import { mindKeeper, CURRENT_LEVEL } from "../../main";
import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block";
const level4CommandBlockPos: Vector3 = vector3(2439, 0, 36);
const level4StartPosition: Vector3 = vector3(2451, -2, 57);
const level4EndPosition: Vector3 = vector3(2451, -2, 41);
const level4ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
const level4: Level = new Level(
() => {
pupeteer.sendWorldMessage("%message.level4.started");
pupeteer.setTitleTimed("%message.level4.name", 2.5);
startLevel(level4CommandBlockPos);
teleportAgent(level4StartPosition);
},
() => {
pupeteer.setActionBar("%message.level4.make");
},
() => {
pupeteer.clearActionBar();
pupeteer.sendWorldMessage("%message.level4.complete");
pupeteer.setTitleTimed("%message.level4.complete", 2.5);
mindKeeper.increment(CURRENT_LEVEL);
},
() => {
let isComplete = false;
let isOutOfBounds = false;
//6 blocks lower is lava
let agentPos = getAgentLocation();
let blockLava = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -7, 0)));
let blockAir = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0)));
if (
blockLava &&
blockLava.type.id === MinecraftBlockTypes.Lava &&
blockAir &&
blockAir.type.id === MinecraftBlockTypes.Air
) {
isOutOfBounds = true;
}
if (isAgentAt(level4EndPosition)) {
isComplete = true;
}
// world.sendMessage(`isComplete: ${isComplete}`);
// world.sendMessage(`isOutOfBounds: ${isOutOfBounds}`);
if (isOutOfBounds) {
pupeteer.sendWorldMessage("%message.level4.outOfBounds");
pupeteer.setTitleTimed("%message.level4.outOfBounds", 2.5);
// world.getDimension("overworld").runCommand("/kill @e[type=agent]");
world.getDimension("overworld").runCommand("execute as @p run codebuilder runtime stop @s");
teleportAgent(level4StartPosition);
return false;
} else if (isComplete) {
return true;
}
return false;
}
);
export default level4;

View File

@@ -96,8 +96,6 @@ const levelIntro: Level = new Level(
counter++; counter++;
} }
}); });
world.sendMessage(`%message.intro.progress ${counter}/${levelIntroConditions.conditions.length}`);
world.sendMessage(`isComplete: ${isComplete}`);
if (isComplete) { if (isComplete) {
return true; return true;
} }

View File

@@ -0,0 +1,17 @@
import { Vector3 } from "@minecraft/server";
import AbstractAgentTrackMission from "../../Commandeer/level/abstractTrackFollowMission";
import { vector3 } from "../../Commandeer/utils/vectorUtils";
const Level1CommandBlockPos: Vector3 = vector3(2439, 0, 36);
const level1StartPosition: Vector3 = vector3(2451, -2, 57);
const Level1EndPosition: Vector3 = vector3(2451, -2, 41);
let mission1part1: AbstractAgentTrackMission = new AbstractAgentTrackMission(
"mission1part1",
level1StartPosition,
Level1EndPosition,
Level1CommandBlockPos
);
export default mission1part1;

View File

@@ -0,0 +1,19 @@
import { Vector3 } from "@minecraft/server";
import AbstractAgentTrackMission from "../../Commandeer/level/abstractTrackFollowMission";
import { vector3 } from "../../Commandeer/utils/vectorUtils";
const Level2CommandBlockPos: Vector3 = vector3(2439, 0, 35);
const level2StartPosition: Vector3 = vector3(2446, -2, 40);
const Level2EndPosition: Vector3 = vector3(2446, -2, 30);
const level2ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
let mission1part2: AbstractAgentTrackMission = new AbstractAgentTrackMission(
"mission1part2",
level2StartPosition,
Level2EndPosition,
Level2CommandBlockPos
);
export default mission1part2;

View File

@@ -0,0 +1,17 @@
import { Vector3 } from "@minecraft/server";
import AbstractAgentTrackMission from "../../Commandeer/level/abstractTrackFollowMission";
import { vector3 } from "../../Commandeer/utils/vectorUtils";
const Level3CommandBlockPos: Vector3 = vector3(2439, 0, 34);
const level3StartPosition: Vector3 = vector3(2447, -2, 30);
const level3EndPosition: Vector3 = vector3(2451, -2, 18);
const level3ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
let mission1part3: AbstractAgentTrackMission = new AbstractAgentTrackMission(
"mission1part3",
level3StartPosition,
level3EndPosition,
Level3CommandBlockPos
);
export default mission1part3;

View File

@@ -0,0 +1,62 @@
import { Vector3, world } from "@minecraft/server";
import Level from "../../Commandeer/level/level";
import pupeteer from "../../Commandeer/pupeteer";
import { teleportAgent, isAgentAt, getAgentLocation, getAgent } from "../../Commandeer/utils/agentUtils";
import { vector3, Vector3Add, Vector3ToCommandString } from "../../Commandeer/utils/vectorUtils";
import { mindKeeper, CURRENT_LEVEL } from "../../main";
import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block";
import { mission2part1Conditions } from "../../levelConditions/mission2part1Conditions";
import { checkBlockCondition } from "../../Commandeer/level/levelTypes";
import { startLevel } from "../../Commandeer/utils/levelUtils";
const mission2part1CommandBlockPos: Vector3 = vector3(2460, -1, 4);
const mission2part1StartPosition: Vector3 = vector3(2455, -1, 11);
const mission2part1EndPosition: Vector3 = vector3(2465, -1, 11);
const mission2part1ResetCommandBlockPos: Vector3 = vector3(2456, -1, 4);
const mission2part1: Level = new Level(
() => {
pupeteer.sendWorldMessage("%message.mission2part1.started");
pupeteer.setTitleTimed("%message.mission2part1.name", 2.5);
startLevel(mission2part1CommandBlockPos);
teleportAgent(mission2part1StartPosition);
startLevel(mission2part1ResetCommandBlockPos);
},
() => {
pupeteer.setActionBar("%message.mission2part1.make");
},
() => {
pupeteer.clearActionBar();
pupeteer.sendWorldMessage("%message.mission2part1.complete");
pupeteer.setTitleTimed("%message.mission2part1.complete", 2.5);
mindKeeper.increment(CURRENT_LEVEL);
},
() => {
//Check if the agent is at the end position
//than check if the level is correct
let isComplete = false;
let isAgentAtEndPosition = isAgentAt(mission2part1EndPosition);
if (isAgentAtEndPosition) {
let isCorrect = checkBlockCondition(mission2part1Conditions);
if (isCorrect) {
isComplete = true;
world.sendMessage("Shit works");
} else {
isComplete = false;
pupeteer.sendWorldMessage("%message.incorrect");
pupeteer.setTitleTimed("%message.incorrect", 2.5);
teleportAgent(mission2part1StartPosition);
world
.getDimension("overworld")
.setBlockType(mission2part1ResetCommandBlockPos, MinecraftBlockTypes.RedstoneBlock);
}
}
return isComplete;
}
);
export default mission2part1;

View File

@@ -0,0 +1,62 @@
import { Vector3, world } from "@minecraft/server";
import Level from "../../Commandeer/level/level";
import pupeteer from "../../Commandeer/pupeteer";
import { teleportAgent, isAgentAt, getAgentLocation, getAgent } from "../../Commandeer/utils/agentUtils";
import { vector3, Vector3Add, Vector3ToCommandString } from "../../Commandeer/utils/vectorUtils";
import { mindKeeper, CURRENT_LEVEL } from "../../main";
import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block";
import { checkBlockCondition } from "../../Commandeer/level/levelTypes";
import { mission2part2Conditions } from "../../levelConditions/mission2part2Conditions";
import { startLevel } from "../../Commandeer/utils/levelUtils";
const mission2part2CommandBlockPos: Vector3 = vector3(2461, -1, 4);
const mission2part2StartPosition: Vector3 = vector3(2467, -1, 11);
const mission2part2EndPosition: Vector3 = vector3(2481, -1, 11);
const mission2part2ResetCommandBlockPos: Vector3 = vector3(2457, -1, 4);
const mission2part2: Level = new Level(
() => {
pupeteer.sendWorldMessage("%message.mission2part2.started");
pupeteer.setTitleTimed("%message.mission2part2.name", 2.5);
startLevel(mission2part2CommandBlockPos);
teleportAgent(mission2part2StartPosition);
startLevel(mission2part2ResetCommandBlockPos);
},
() => {
pupeteer.setActionBar("%message.mission2part2.make");
},
() => {
pupeteer.clearActionBar();
pupeteer.sendWorldMessage("%message.mission2part2.complete");
pupeteer.setTitleTimed("%message.mission2part2.complete", 2.5);
mindKeeper.increment(CURRENT_LEVEL);
},
() => {
//Check if the agent is at the end position
//than check if the level is correct
let isComplete = false;
let isAgentAtEndPosition = isAgentAt(mission2part2EndPosition);
if (isAgentAtEndPosition) {
let isCorrect = checkBlockCondition(mission2part2Conditions);
if (isCorrect) {
isComplete = true;
world.sendMessage("Shit works");
} else {
isComplete = false;
pupeteer.sendWorldMessage("%message.incorrect");
pupeteer.setTitleTimed("%message.incorrect", 2.5);
teleportAgent(mission2part2StartPosition);
world
.getDimension("overworld")
.setBlockType(mission2part2ResetCommandBlockPos, MinecraftBlockTypes.RedstoneBlock);
}
}
return isComplete;
}
);
export default mission2part2;

View File

@@ -0,0 +1,17 @@
import { Vector3 } from "@minecraft/server";
import AbstractAgentTrackMission from "../../Commandeer/level/abstractTrackFollowMission";
import { vector3 } from "../../Commandeer/utils/vectorUtils";
const Level1CommandBlockPos: Vector3 = vector3(2495, -1, 26);
const level1StartPosition: Vector3 = vector3(2488, -2, 7);
const Level1EndPosition: Vector3 = vector3(2488, -2, 22);
let mission3part1: AbstractAgentTrackMission = new AbstractAgentTrackMission(
"mission3part1",
level1StartPosition,
Level1EndPosition,
Level1CommandBlockPos
);
export default mission3part1;

View File

@@ -0,0 +1,17 @@
import { Vector3 } from "@minecraft/server";
import AbstractAgentTrackMission from "../../Commandeer/level/abstractTrackFollowMission";
import { vector3 } from "../../Commandeer/utils/vectorUtils";
const Level1CommandBlockPos: Vector3 = vector3(2495, -1, 27);
const level1StartPosition: Vector3 = vector3(2492, -2, 26);
const Level1EndPosition: Vector3 = vector3(2484, -2, 32);
let mission3part2: AbstractAgentTrackMission = new AbstractAgentTrackMission(
"mission3part2",
level1StartPosition,
Level1EndPosition,
Level1CommandBlockPos
);
export default mission3part2;

View File

@@ -0,0 +1,17 @@
import { Vector3 } from "@minecraft/server";
import AbstractAgentTrackMission from "../../Commandeer/level/abstractTrackFollowMission";
import { vector3 } from "../../Commandeer/utils/vectorUtils";
const Level1CommandBlockPos: Vector3 = vector3(2495, -1, 28);
const level1StartPosition: Vector3 = vector3(2487, -2, 36);
const Level1EndPosition: Vector3 = vector3(2488, -2, 57);
let mission3part2: AbstractAgentTrackMission = new AbstractAgentTrackMission(
"mission3part2",
level1StartPosition,
Level1EndPosition,
Level1CommandBlockPos
);
export default mission3part2;

View File

@@ -10,9 +10,9 @@ import {
} from "@minecraft/server"; } from "@minecraft/server";
import { Mindkeeper, StoreType } from "./Commandeer/mindKeeper"; import { Mindkeeper, StoreType } from "./Commandeer/mindKeeper";
import Pupeteer from "./Commandeer/pupeteer"; import Pupeteer from "./Commandeer/pupeteer";
import { Vector3ToCommandString, Vector3ToFancyString, vector3 } from "./Commandeer/utils/vectorUtils"; import { Vector3Add, Vector3ToCommandString, Vector3ToFancyString, vector3 } from "./Commandeer/utils/vectorUtils";
import { delay } from "./Commandeer/utils/waitUtil"; import { delay } from "./Commandeer/utils/waitUtil";
import { spawnParticle } from "./Commandeer/utils/particleUtils"; import { PARTICLES, spawnParticle } from "./Commandeer/utils/particleUtils";
import { TrailMaker } from "./Commandeer/trail/trailMaker"; import { TrailMaker } from "./Commandeer/trail/trailMaker";
import * as CCTrigger from "./Commandeer/Trigger/CCTrigger"; import * as CCTrigger from "./Commandeer/Trigger/CCTrigger";
import { Commands } from "./Commandeer/command/command"; import { Commands } from "./Commandeer/command/command";
@@ -20,10 +20,28 @@ import levelIntro from "./levels/levelIntro";
import { Trail } from "./Commandeer/trail/trailEngine"; import { Trail } from "./Commandeer/trail/trailEngine";
import { startTrail } from "./trails/startTrail"; import { startTrail } from "./trails/startTrail";
import { IntroToLevel1Trail } from "./trails/IntroToLevel1Trail"; import { IntroToLevel1Trail } from "./trails/IntroToLevel1Trail";
import level1 from "./levels/level1/mission1";
import level2 from "./levels/level1/mission2";
import level3 from "./levels/level1/mission3";
import { MinecraftBlockTypes } from "./vanilla-data/mojang-block"; import { MinecraftBlockTypes } from "./vanilla-data/mojang-block";
import mission1part1 from "./levels/mission1/mission1part1";
import mission1part2 from "./levels/mission1/mission1part2";
import mission1part3 from "./levels/mission1/mission1part3";
import mission2part1 from "./levels/mission2/mission2part1";
import { mission2part1Conditions } from "./levelConditions/mission2part1Conditions";
import mission2part2 from "./levels/mission2/mission2part2";
import { mission2part2Conditions } from "./levelConditions/mission2part2Conditions";
import Chalk from "./Commandeer/chalk";
import mission3part1 from "./levels/mission3/mission3part1";
import mission3part2 from "./levels/mission3/mission3part2";
import mission3part3 from "./levels/mission3/mission3part3";
import { runEntityEventOnTag, setNPCDialog } from "./Commandeer/utils/entityUtils";
import {
animationPlaying,
ClonePos,
playAnimation,
setAmimationPlaying,
SetFrame,
} from "./Commandeer/animations/animation";
import { doNothingStupidTSIWantFilesNotAGiantAssMainFile } from "./triggers";
import { clearWall, fillWall, Wall } from "./Commandeer/utils/levelUtils";
// import { loadTriggers } from "./triggers"; // import { loadTriggers } from "./triggers";
const mindKeeper = new Mindkeeper(world); const mindKeeper = new Mindkeeper(world);
@@ -46,7 +64,7 @@ async function resetLightPath() {
} }
let introToGlassBreakTimer: number = 0; let introToGlassBreakTimer: number = 0;
const glassBreakTime = 2 * TicksPerSecond; const glassBreakTime = 5 * TicksPerSecond;
let isIntroToLevel1Sqeuence = false; let isIntroToLevel1Sqeuence = false;
@@ -56,6 +74,14 @@ introTrail.fromTrail(startTrail);
let introToLevelTrail = new Trail("introToLevelTrail", 2, 2); let introToLevelTrail = new Trail("introToLevelTrail", 2, 2);
introToLevelTrail.fromTrail(IntroToLevel1Trail); introToLevelTrail.fromTrail(IntroToLevel1Trail);
//fill 2466 0 48 2469 -1 48
let bilalBlock: Wall = {
startPos: vector3(2466, 0, 48),
endPos: vector3(2469, -1, 48),
};
// spawn a sphere of particle
const DEVELOPER_MODE = true; const DEVELOPER_MODE = true;
let tickCounter = 0; let tickCounter = 0;
system.runInterval(async () => { system.runInterval(async () => {
@@ -70,59 +96,89 @@ system.runInterval(async () => {
switch (currentLevel) { switch (currentLevel) {
case 0: case 0:
// Show goto airlock text // Show goto airlock text
Pupeteer.setActionBar("Go to the airlock"); Pupeteer.setActionBar("%message.goto.airlock");
introTrail.spawnNext(); introTrail.spawnNext();
break; break;
case 1: case 1:
Pupeteer.setActionBar("Enter the airlock"); Pupeteer.setActionBar("%message.enter.airlock");
// Show Enter airlock text
break; break;
case 2: case 2:
levelIntro.update(); Pupeteer.setActionBar("%message.talkto.chanel");
//Wait for the scriptevent cc:startIntro
break; break;
case 3: case 3:
levelIntro.update();
break;
case 4:
if (!isIntroToLevel1Sqeuence) { if (!isIntroToLevel1Sqeuence) {
isIntroToLevel1Sqeuence = true; isIntroToLevel1Sqeuence = true;
world.sendMessage("Intro to level1 sequence start"); // world.sendMessage("Intro to level1 sequence start");
await lightUpPath(); await lightUpPath();
await randomExplosions(); await randomExplosions();
blowUpDoor(); blowUpDoor();
mindKeeper.increment(CURRENT_LEVEL); mindKeeper.increment(CURRENT_LEVEL);
triggerAlarm();
} }
break; break;
case 4: case 5:
introToGlassBreakTimer++; introToGlassBreakTimer++;
world.sendMessage("Glass break timer: " + introToGlassBreakTimer); // world.sendMessage("Glass break timer: " + introToGlassBreakTimer);
if (introToGlassBreakTimer > glassBreakTime) { if (introToGlassBreakTimer > glassBreakTime) {
introToGlassBreakTimer = 0; introToGlassBreakTimer = 0;
mindKeeper.increment(CURRENT_LEVEL); mindKeeper.increment(CURRENT_LEVEL);
} }
case 4: case 6:
// Show Goto Level 1 // Show Goto Level 1
if (glassWindowState == GlassWindowState.Fixed) { if (glassWindowState == GlassWindowState.Fixed) {
glassWindowState = GlassWindowState.Broken; glassWindowState = GlassWindowState.Broken;
system.run(async () => { system.run(async () => {
if (DEVELOPER_MODE) {
world.sendMessage("Breaking glass"); world.sendMessage("Breaking glass");
}
await delay(10); await delay(10);
breakGlassWindow(); await breakGlassWindow();
mindKeeper.increment(CURRENT_LEVEL); mindKeeper.increment(CURRENT_LEVEL);
setNPCDialog("chanel1", "chanel_goto_temple");
}); });
} }
break; break;
case 5:
introToLevelTrail.spawnNext();
Pupeteer.setActionBar("Follow the path to the temple");
break;
case 6:
level1.update();
break;
case 7: case 7:
level2.update(); introToLevelTrail.spawnNext();
Pupeteer.setActionBar("%message.follow.path.temple");
//Talk to Bilal
break; break;
case 8: case 8:
level3.update(); Pupeteer.setActionBar("%message.goto.temple");
//Talk to Suki
break; break;
case 9: case 9:
mission1part1.update();
break;
case 10:
mission1part2.update();
break;
case 11:
mission1part3.update();
break;
case 12:
Pupeteer.setActionBar("%message.goto.level2");
case 13:
mission2part1.update();
break;
case 14:
mission2part2.update();
break;
case 15:
mission3part1.update();
break;
case 15:
mission3part2.update();
break;
case 16:
mission3part3.update();
break;
case 17:
Pupeteer.setActionBar("Goto the door");
break; break;
} }
} }
@@ -146,7 +202,9 @@ async function lightUpPath() {
// let pos2 = vector3(2468, 9, 105); // let pos2 = vector3(2468, 9, 105);
} }
//iojediojaiw let triggerAlarm = () => runEntityEventOnTag("alarmLights", "cc:add_rotating");
let resetAlarm = () => runEntityEventOnTag("alarmLights", "cc:remove_rotating");
world.afterEvents.worldInitialize.subscribe(() => { world.afterEvents.worldInitialize.subscribe(() => {
mindKeeper.registerStore(CURRENT_LEVEL, StoreType.number); mindKeeper.registerStore(CURRENT_LEVEL, StoreType.number);
@@ -156,6 +214,8 @@ world.afterEvents.worldInitialize.subscribe(() => {
mindKeeper.registerToWorld(); mindKeeper.registerToWorld();
triggerManager.Load(); triggerManager.Load();
doNothingStupidTSIWantFilesNotAGiantAssMainFile();
// loadCommands(); // loadCommands();
}); });
@@ -190,11 +250,15 @@ let doorSize = vector3(7, 7, 7);
///clone 2463 -30 81 2470 -23 87 2463 10 81 ///clone 2463 -30 81 2470 -23 87 2463 10 81
function blowUpDoor() { function blowUpDoor() {
if (DEVELOPER_MODE) {
world.sendMessage("Blowing up door"); world.sendMessage("Blowing up door");
}
world.getDimension("overworld").runCommand("/clone 2463 -10 81 2470 -3 87 2463 10 81"); world.getDimension("overworld").runCommand("/clone 2463 -10 81 2470 -3 87 2463 10 81");
} }
function restoreDoor() { function restoreDoor() {
if (DEVELOPER_MODE) {
world.sendMessage("Restoring door"); world.sendMessage("Restoring door");
}
world.getDimension("overworld").runCommandAsync("/clone 2463 -30 81 2470 -23 87 2463 10 81"); world.getDimension("overworld").runCommandAsync("/clone 2463 -30 81 2470 -23 87 2463 10 81");
} }
@@ -217,11 +281,24 @@ world.afterEvents.chatSend.subscribe(async (event: ChatSendAfterEvent) => {
resetLightPath(); resetLightPath();
levelIntro.reset(); levelIntro.reset();
level1.reset(); mission1part1.reset();
level2.reset(); mission1part2.reset();
mission1part3.reset();
mission2part1.reset();
mission2part2.reset();
//Reset the combination to a random squence //Reset the combination to a random squence
resetAlarm();
deactivateAirlockLights();
setNPCDialog("chanel1", "chanel_greeting_1");
setNPCDialog("bilal1", "bilal_greeting_1");
setNPCDialog("suki1", "suki_greeting_1");
fillWall(bilalBlock, MinecraftBlockTypes.Barrier);
isIntroToLevel1Sqeuence = false; isIntroToLevel1Sqeuence = false;
} }
}); });
@@ -229,20 +306,88 @@ world.afterEvents.chatSend.subscribe(async (event: ChatSendAfterEvent) => {
system.afterEvents.scriptEventReceive.subscribe((event) => { system.afterEvents.scriptEventReceive.subscribe((event) => {
if (event.id == "cc:getId") { if (event.id == "cc:getId") {
let id = event.message; let id = event.message;
if (DEVELOPER_MODE) {
world.sendMessage("Script got the id " + id); world.sendMessage("Script got the id " + id);
}
mindKeeper.set(AGENT_ID, id); mindKeeper.set(AGENT_ID, id);
} }
if (event.id == "cc:startIntro") {
if (mindKeeper.get(CURRENT_LEVEL) == 2) {
mindKeeper.increment(CURRENT_LEVEL);
} else {
if (DEVELOPER_MODE) {
world.sendMessage("Intro already started?");
}
}
}
if (event.id == "cc:startTemple") {
if (mindKeeper.get(CURRENT_LEVEL) == 7) {
mindKeeper.increment(CURRENT_LEVEL);
fillWall(bilalBlock, MinecraftBlockTypes.Air);
}
}
if (event.id == "cc:startLevel1") {
if (mindKeeper.get(CURRENT_LEVEL) == 8) {
mindKeeper.increment(CURRENT_LEVEL);
}
}
if (event.id == "cc:afterLevel1") {
}
}); });
class ClonePos { Commands.register(PREFIX, "fien", (arg) => {
point1: Vector3; system.run(() => {
point2: Vector3; arg.player.teleport(vector3(2468, 11, 114));
});
});
constructor(point1: Vector3, point2: Vector3) { Commands.register(PREFIX, "openDoor", () => openDoor());
this.point1 = point1; Commands.register(PREFIX, "closeDoor", () => closeDoor());
this.point2 = point2;
Commands.register(PREFIX, "info", (arg) => {
world.sendMessage("-----------------");
world.sendMessage("Current level: " + mindKeeper.get(CURRENT_LEVEL));
world.sendMessage("Agent ID: " + mindKeeper.get(AGENT_ID));
world.sendMessage("Engine Version: 1.0.3");
world.sendMessage("Engine is running, duh :)");
world.sendMessage("Active players: " + world.getPlayers().length);
world.sendMessage("Current dimension: " + arg.player.dimension.id);
world.sendMessage("Current position: " + Vector3ToFancyString(arg.player.location));
world.sendMessage("-----------------");
});
Commands.register(PREFIX, "kboom", (arg) => {
(async () => {
for (let i = 0; i < 10; i++) {
randomExplosions();
await delay(1);
} }
blowUpDoor();
})();
});
let openDoor = () => {
runEntityEventOnTag("door", "cc:add_open");
if (DEVELOPER_MODE) {
world.sendMessage("Opening door");
} }
};
let closeDoor = () => {
runEntityEventOnTag("door", "cc:remove_open");
if (DEVELOPER_MODE) {
world.sendMessage("Closing door");
}
};
Commands.register(PREFIX, "restore", (arg) => {
restoreDoor();
});
//#region Airlock
enum GlassWindowState { enum GlassWindowState {
Broken, Broken,
@@ -302,24 +447,6 @@ const glassBreakingFrames: ClonePos[] = [
}, },
]; ];
const crackedGlass: string = "cc:cracked_glass";
Commands.register(PREFIX, "breakGlass", (arg) => {
breakGlassWindow();
glassWindowState = GlassWindowState.Broken;
});
Commands.register(PREFIX, "restoreGlass", (arg) => {
restoreGlassWindow();
glassWindowState = GlassWindowState.Fixed;
});
async function breakGlassWindow() {
playAnimation(glassBreakingFrames, 5, false, doorRoot);
glassWindowState = GlassWindowState.Broken;
}
async function restoreGlassWindow(force: boolean = false) {
playAnimation(glassBreakingFrames, 5, true, doorRoot, force);
}
const FrontAirLockOpenFrames: ClonePos[] = [ const FrontAirLockOpenFrames: ClonePos[] = [
{ {
point1: vector3(2476, 9, 94), point1: vector3(2476, 9, 94),
@@ -377,12 +504,29 @@ const AirLockWaterFrames: ClonePos[] = [
}, },
]; ];
Commands.register(PREFIX, "breakGlass", (arg) => {
breakGlassWindow();
glassWindowState = GlassWindowState.Broken;
});
Commands.register(PREFIX, "restoreGlass", (arg) => {
restoreGlassWindow();
glassWindowState = GlassWindowState.Fixed;
});
async function breakGlassWindow() {
playAnimation(glassBreakingFrames, 5, false, doorRoot);
glassWindowState = GlassWindowState.Broken;
}
async function restoreGlassWindow(force: boolean = false) {
playAnimation(glassBreakingFrames, 5, true, doorRoot, force);
}
async function CycleAirLockWater(fill: boolean, delayTime: number) { async function CycleAirLockWater(fill: boolean, delayTime: number) {
if (animationPlaying) { if (animationPlaying) {
world.sendMessage("Animation already playing"); world.sendMessage("Animation already playing");
return; return;
} }
animationPlaying = true; setAmimationPlaying(true);
let frameCount = AirLockWaterFrames.length; let frameCount = AirLockWaterFrames.length;
for (let i = 0; i < frameCount; i++) { for (let i = 0; i < frameCount; i++) {
@@ -395,7 +539,7 @@ async function CycleAirLockWater(fill: boolean, delayTime: number) {
); );
await delay(delayTime); await delay(delayTime);
} }
animationPlaying = false; setAmimationPlaying(false);
} }
let frontAirlockState: AirLockState = AirLockState.Closed; let frontAirlockState: AirLockState = AirLockState.Closed;
@@ -408,7 +552,9 @@ let chamberState: AirLockChamberState = AirLockChamberState.Full;
//Front door opens //Front door opens
triggerManager.RegisterFunctionTrigger("FrontAirLockOutside", async (event) => { triggerManager.RegisterFunctionTrigger("FrontAirLockOutside", async (event) => {
if (chamberState == AirLockChamberState.Empty) { if (chamberState == AirLockChamberState.Empty) {
if (DEVELOPER_MODE) {
world.sendMessage("Filling airlock"); world.sendMessage("Filling airlock");
}
await FillAirlockWater(); await FillAirlockWater();
chamberState = AirLockChamberState.Full; chamberState = AirLockChamberState.Full;
} }
@@ -420,8 +566,13 @@ triggerManager.RegisterFunctionTrigger("FrontAirLockOutside", async (event) => {
}); });
triggerManager.RegisterFunctionTrigger("TempleFrontDoor", async (event) => { triggerManager.RegisterFunctionTrigger("TempleFrontDoor", async (event) => {
if (mindKeeper.get(CURRENT_LEVEL) == 5) { if (mindKeeper.get(CURRENT_LEVEL) == 8) {
mindKeeper.increment(CURRENT_LEVEL); mindKeeper.increment(CURRENT_LEVEL);
closeDoor();
}
if (mindKeeper.get(CURRENT_LEVEL) == 15) {
openDoor();
} }
}); });
@@ -435,8 +586,10 @@ triggerManager.RegisterFunctionTrigger("FrontAirLockInside", async (event) => {
frontAirlockState = AirLockState.Closed; frontAirlockState = AirLockState.Closed;
} }
if (chamberState == AirLockChamberState.Full) { if (chamberState == AirLockChamberState.Full) {
await delay(7); activateAirlockLights();
await delay(50);
await EmptyAirlockWater(); await EmptyAirlockWater();
deactivateAirlockLights();
chamberState = AirLockChamberState.Empty; chamberState = AirLockChamberState.Empty;
} }
@@ -458,38 +611,10 @@ triggerManager.RegisterFunctionTrigger("BackAirLockOutside", async (event) => {
} }
}); });
// function loadCommands() { //#endregion Airlock
Commands.register(PREFIX, "fien", (arg) => {
system.run(() => {
arg.player.teleport(vector3(2468, 11, 114));
});
});
Commands.register(PREFIX, "info", (arg) => { let activateAirlockLights = () => runEntityEventOnTag("airlockLights", "cc:add_rotating");
world.sendMessage("-----------------"); let deactivateAirlockLights = () => runEntityEventOnTag("airlockLights", "cc:remove_rotating");
world.sendMessage("Current level: " + mindKeeper.get(CURRENT_LEVEL));
world.sendMessage("Agent ID: " + mindKeeper.get(AGENT_ID));
world.sendMessage("Engine Version: 1.0.2");
world.sendMessage("Engine is running");
world.sendMessage("Active players: " + world.getPlayers().length);
world.sendMessage("Current dimension: " + arg.player.dimension.id);
world.sendMessage("Current position: " + Vector3ToFancyString(arg.player.location));
world.sendMessage("-----------------");
});
Commands.register(PREFIX, "kboom", (arg) => {
(async () => {
for (let i = 0; i < 10; i++) {
randomExplosions();
await delay(1);
}
blowUpDoor();
})();
});
Commands.register(PREFIX, "restore", (arg) => {
restoreDoor();
});
function resetAirLock() { function resetAirLock() {
SetFrontDoorClosed(); SetFrontDoorClosed();
@@ -540,54 +665,3 @@ triggerManager.RegisterFunctionTrigger("closeBackDoor", (event) => PlayBackDoorC
triggerManager.RegisterFunctionTrigger("fillAirlock", (event) => FillAirlockWater()); triggerManager.RegisterFunctionTrigger("fillAirlock", (event) => FillAirlockWater());
triggerManager.RegisterFunctionTrigger("emptyAirlock", (event) => EmptyAirlockWater()); triggerManager.RegisterFunctionTrigger("emptyAirlock", (event) => EmptyAirlockWater());
async function SetFrame(frame: ClonePos, destination: Vector3) {
await world
.getDimension("overworld")
.runCommandAsync(
`/clone ${Vector3ToCommandString(frame.point1)} ${Vector3ToCommandString(frame.point2)} ${Vector3ToCommandString(
destination
)}`
);
}
let animationPlaying = false;
async function playAnimation(
frames: ClonePos[],
delayTime: number,
reverse: boolean,
destination: Vector3,
force: boolean = false
) {
if (animationPlaying && !force) {
world.sendMessage("Animation already playing");
return;
}
let frameCount = frames.length;
if (!force) {
animationPlaying = true;
}
for (let i = 0; i < frameCount; i++) {
let frame = reverse ? frames[frameCount - i - 1] : frames[i];
await world
.getDimension("overworld")
.runCommandAsync(
`/clone ${Vector3ToCommandString(frame.point1)} ${Vector3ToCommandString(
frame.point2
)} ${Vector3ToCommandString(destination)}`
);
await delay(delayTime);
}
if (!force) {
animationPlaying = false;
}
}
system.afterEvents.scriptEventReceive.subscribe((event) => {
if (event.id == "cc:getId") {
let id = event.message;
world.sendMessage("Script got the id " + id);
mindKeeper.set(AGENT_ID, id);
}
});

View File

@@ -5,44 +5,13 @@ import { vector3 } from "./Commandeer/utils/vectorUtils";
import { delay } from "./Commandeer/utils/waitUtil"; import { delay } from "./Commandeer/utils/waitUtil";
import { MinecraftBlockTypes } from "./vanilla-data/mojang-block"; import { MinecraftBlockTypes } from "./vanilla-data/mojang-block";
// const triggerManager = new CCTrigger.Manager(mindKeeper); function doNothingStupidTSIWantFilesNotAGiantAssMainFile() {
triggerManager.RegisterFunctionTrigger("helpme", (event) => {
triggerManager.RegisterFunctionTrigger("test", (event) => {
world.sendMessage("Wow, this is a trigger :O"); world.sendMessage("Wow, this is a trigger :O");
world.sendMessage("This was caused by " + event.player.name); world.sendMessage("This was caused by " + event.player.name);
}); });
triggerManager.RegisterFunctionTrigger("lightPath", (event) => { return;
lightUpPath();
});
triggerManager.RegisterFunctionTrigger("resetPath", (event) => {
resetLightPath();
});
triggerManager.RegisterFunctionTrigger("test2", (event) => {
world.sendMessage("Wow, this is another trigger :O");
});
triggerManager.RegisterFunctionTrigger("die", (event) => {
world.sendMessage("You died");
event.player.applyDamage(1000);
});
//fill 2467 9 87 2468 9 105 redstone_block
async function lightUpPath() {
let overworld: Dimension = world.getDimension("overworld");
let pos1 = vector3(2467, 9, 87);
let pos2 = vector3(2468, 9, 105);
for (let z = pos2.z; z >= pos1.z; z--) {
let volume: BlockVolume = new BlockVolume(vector3(pos1.x, pos1.y, z), vector3(pos1.x + 1, pos1.y, z));
overworld.fillBlocks(volume, MinecraftBlockTypes.RedstoneBlock);
await delay(4);
}
// let pos2 = vector3(2468, 9, 105);
} }
async function resetLightPath() { export { doNothingStupidTSIWantFilesNotAGiantAssMainFile };
world.getDimension("overworld").runCommand("/fill 2467 9 87 2468 9 105 air");
}