76 lines
2.5 KiB
TypeScript
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;
|