import { BlockVolume, 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, teleportAndFaceAgent } 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"; import level4 from "./mission3"; import { level3Conditions } from "../../levelConditions/level3"; import { checkBlockCondition } from "../../Commandeer/level/levelTypes"; const level3CommandBlockPos: Vector3 = vector3(-133, 68, 281); const level3StartPosition: Vector3 = vector3(-133, 68, 265); const level3EndPosition: Vector3 = vector3(-148, 68, 265); let volumeResetRedstoneBlock: BlockVolume = new BlockVolume(vector3(-133, 68, 281), vector3(-133, 68, 281)); let isComplete = false; const level3: Level = new Level( () => { pupeteer.sendWorldMessage("%message.level3.started"); pupeteer.setTitleTimed("%message.level3.name", 2.5); startLevel(level3CommandBlockPos); teleportAndFaceAgent(level3StartPosition, vector3(-148, 68, 265)); world.getDimension("overworld").fillBlocks(volumeResetRedstoneBlock, MinecraftBlockTypes.RedstoneBlock); }, () => { pupeteer.setActionBar("%message.level3.make"); }, () => { pupeteer.clearActionBar(); pupeteer.sendWorldMessage("%message.level3.complete"); pupeteer.setTitleTimed("%message.level3.complete", 2.5); mindKeeper.increment(CURRENT_LEVEL); level4.reset(); world.getDimension("Overworld").runCommand("/fill -182 69 255 -182 74 276 barrier replace air"); }, () => { const isCorrect = checkBlockCondition(level3Conditions); if (isAgentAt(level3EndPosition) && isCorrect) { isComplete = true; } if (isAgentAt(level3EndPosition) && !isCorrect) { teleportAndFaceAgent(level3StartPosition, vector3(-148, 68, 265)); if (!isCorrect) { pupeteer.sendWorldMessage("%message.level.inCorrect"); } else { pupeteer.sendWorldMessage("%message.level3.outOfBounds"); pupeteer.setTitleTimed("%message.level3.outOfBounds", 2.5); } world.getDimension("overworld").runCommand("execute as @p run codebuilder runtime stop @s"); world.getDimension("overworld").fillBlocks(volumeResetRedstoneBlock, MinecraftBlockTypes.RedstoneBlock); return false; } else if (isComplete) { return true; } return false; }, () => { isComplete = false; world.getDimension("overworld").fillBlocks(volumeResetRedstoneBlock, MinecraftBlockTypes.RedstoneBlock); } ); export default level3;