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 level5 from "../level3/mission1"; const Level4CommandBlockPos: Vector3 = vector3(-161, 68, 291); const level4StartPosition: Vector3 = vector3(-161, 62, 261); const level4EndPosition: Vector3 = vector3(-174, 62, 268); let volumeResetRedstoneBlock: BlockVolume = new BlockVolume(vector3(-163, 67, 291), vector3(-163, 67, 291)); let isComplete = false; let isOutOfBounds = false; const level4: Level = new Level( () => { pupeteer.sendWorldMessage("%message.level4.started"); pupeteer.setTitleTimed("%message.level4.name", 2.5); startLevel(Level4CommandBlockPos); teleportAndFaceAgent(level4StartPosition, vector3(-175, 62, 261)); world.getDimension("overworld").fillBlocks(volumeResetRedstoneBlock, MinecraftBlockTypes.RedstoneBlock); }, () => { pupeteer.setActionBar("%message.level4.make"); }, () => { pupeteer.clearActionBar(); pupeteer.sendWorldMessage("%message.level4.complete"); pupeteer.setTitleTimed("%message.level4.complete", 2.5); world.getDimension("Overworld").runCommand("/fill -182 69 255 -182 74 276 air replace barrier"); mindKeeper.increment(CURRENT_LEVEL); level5.reset(); }, () => { let agentPos = getAgentLocation(); let blockAir = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0))); if (blockAir && blockAir.type.id === MinecraftBlockTypes.Air) { isOutOfBounds = true; } if (isAgentAt(level4EndPosition)) { isComplete = true; } if (isOutOfBounds) { world.getDimension("overworld").runCommand("execute as @p run codebuilder runtime stop @s"); teleportAndFaceAgent(level4StartPosition, vector3(-175, 62, 261)); pupeteer.sendWorldMessage("%message.level4.outOfBounds"); pupeteer.setTitleTimed("%message.level4.outOfBounds", 2.5); 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 level4;