Files
Reeks2Missie6/scripts/Commandeer/level/abstractTrackFollowMission.ts

76 lines
2.5 KiB
TypeScript

import { Vector3, world } from "@minecraft/server";
import Level from "./level";
import pupeteer from "../pupeteer";
import { teleportAgent, isAgentAt, getAgentLocation } from "../utils/agentUtils";
import { startLevel } from "../utils/levelUtils";
import { vector3, Vector3Add } 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,
agentStartFacing: Vector3,
agentEndPosition: Vector3,
startLevelCommandBlockPos: Vector3
) {
super(
() => {
pupeteer.sendWorldMessage(`%message.${levelid}.started`);
pupeteer.setTitleTimed(`%message.${levelid}.name`, 2.5);
startLevel(startLevelCommandBlockPos);
teleportAgent(agentStartPositon, agentStartFacing);
},
() => {
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;
const agentPos = getAgentLocation();
const blockLava = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -7, 0)));
const 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;