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 } 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"; const Level3CommandBlockPos: Vector3 = vector3(-133, 68, 281); const level3StartPosition: Vector3 = vector3(-133, 68, 265); const Level3EndPosition: Vector3 = vector3(-148, 68, 265); 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); teleportAndFaceAgent(level3StartPosition, vector3(-148, 68, 265)); }, () => { pupeteer.setActionBar("%message.level3.make"); }, () => { pupeteer.clearActionBar(); pupeteer.sendWorldMessage("%message.level3.complete"); pupeteer.setTitleTimed("%message.level3.complete", 2.5); world.getDimension("Overworld").runCommand("/fill -154 69 255 -154 74 276 air replace barrier"); mindKeeper.increment(CURRENT_LEVEL); level4.reset(); world.getDimension("Overworld").runCommand("/fill -182 69 255 -182 74 276 barrier replace air"); }, () => { let isComplete = false; let isOutOfBounds = false; let agentPos = getAgentLocation(); let blockAir = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0))); let blockBarrier = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -2, 0))); if (blockAir && blockAir.type.id === MinecraftBlockTypes.Air) { if (blockBarrier && blockBarrier.type.id === MinecraftBlockTypes.Barrier) { return false; } else { return true; } } if (isAgentAt(Level3EndPosition)) { isComplete = true; } if (isOutOfBounds) { teleportAndFaceAgent(level3StartPosition, vector3(-148, 68, 265)); 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").runCommand("/fill -133 68 272 -148 68 258 air replace sweet_berry_bush"); world.getDimension("Overworld").runCommand("/fill -133 67 272 -148 67 258 magma replace cobblestone"); let volume: BlockVolume = new BlockVolume(vector3(-131, 69, 284), vector3(-131, 69, 284)); world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.RedstoneBlock); return false; } else if (isComplete) { return true; } return false; }, () => { world.getDimension("Overworld").runCommand("/fill -133 68 272 -148 68 258 air replace sweet_berry_bush"); world.getDimension("Overworld").runCommand("/fill -133 67 272 -148 67 258 magma replace cobblestone"); let volume: BlockVolume = new BlockVolume(vector3(-131, 69, 284), vector3(-131, 69, 284)); world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.RedstoneBlock); } ); function teleportAndFaceAgent(position: Vector3, facing: Vector3 = vector3(0, 0, 0)): void { if (facing == vector3(-148, 68, 265)) { world .getDimension("overworld") .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}` ); } } export default level3;