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 { level2Conditions } from "../../levelConditions/level2"; import { mindKeeper, CURRENT_LEVEL } from "../../main"; import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block"; const level5CommandBlockPos: Vector3 = vector3(-255, 67, 244); const level5StartPosition: Vector3 = vector3(-226, 65, 244); const level5EndPosition: Vector3 = vector3(-226, 65, 229); const level5ResetCommandBlockPos: Vector3 = vector3(56, 68, 211); let diamondAndPickaxePositions = [ vector3(-224, 64, 242), vector3(-216, 64, 242), vector3(-217, 64, 240), vector3(-226, 64, 239), vector3(-214, 64, 238), vector3(-220, 64, 238), vector3(-219, 64, 236), vector3(-221, 64, 235), vector3(-225, 64, 235), vector3(-215, 64, 233), vector3(-227, 64, 232), vector3(-225, 64, 231), vector3(-218, 64, 231), vector3(-223, 64, 230), vector3(-219, 64, 229), ]; const level5: Level = new Level( () => { pupeteer.sendWorldMessage("%message.level5.started"); pupeteer.setTitleTimed("%message.level5.name", 2.5); startLevel(level5CommandBlockPos); teleportAndFaceAgent(level5StartPosition, vector3(-226, 65, 229)); }, () => { pupeteer.setActionBar("%message.level5.make"); }, () => { pupeteer.clearActionBar(); pupeteer.sendWorldMessage("%message.level5.complete"); pupeteer.setTitleTimed("%message.level5.complete", 2.5); // world.getDimension("Overworld").runCommand("/fill -128 71 255 -128 74 276 air replace barrier"); mindKeeper.increment(CURRENT_LEVEL); }, () => { let isComplete = false; let isOutOfBounds = false; //6 blocks lower is lava let agentPos = getAgentLocation(); let blockAir = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0))); let blockMagma = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0))); let blockTNT = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0))); if ( blockAir && blockAir.type.id === MinecraftBlockTypes.Air && blockMagma && blockMagma.type.id === MinecraftBlockTypes.Magma && blockTNT && blockTNT.type.id === MinecraftBlockTypes.Tnt ) { isOutOfBounds = true; } if (isAgentAt(level5EndPosition)) { isComplete = true; } if (isOutOfBounds) { pupeteer.sendWorldMessage("%message.level5.outOfBounds"); pupeteer.setTitleTimed("%message.level5.outOfBounds", 2.5); world.getDimension("overworld").runCommand("execute as @p run codebuilder runtime stop @s"); let volume: BlockVolume = new BlockVolume(vector3(-163, 67, 291), vector3(-163, 67, 291)); world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.RedstoneBlock); for (let i = 0; i < diamondAndPickaxePositions.length; i++) { let blockToReplace = world.getDimension("overworld").getBlock(diamondAndPickaxePositions[i]); if (blockToReplace?.type.id === MinecraftBlockTypes.Stone) { placeBlock(diamondAndPickaxePositions[i], MinecraftBlockTypes.PurpleWool); } } teleportAndFaceAgent(level5StartPosition, vector3(-226, 65, 229)); return false; } else if (isComplete) { return true; } return false; }, () => { world.getDimension("Overworld").runCommand("/fill -213 64 244 -227 64 229 stone replace podzol"); for (let i = 0; i < diamondAndPickaxePositions.length; i++) { let blockToReplace = world.getDimension("overworld").getBlock(diamondAndPickaxePositions[i]); if (blockToReplace?.type.id === MinecraftBlockTypes.Stone) { placeBlock(diamondAndPickaxePositions[i], MinecraftBlockTypes.PurpleWool); } } let volume: BlockVolume = new BlockVolume(vector3(-255, 67, 246), vector3(-255, 67, 246)); world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.RedstoneBlock); } ); function placeBlock(position: Vector3, blockType: MinecraftBlockTypes) { const block = world.getDimension("overworld").getBlock(position); block!.setType(blockType); } function teleportAndFaceAgent(position: Vector3, facing: Vector3 = vector3(0, 0, 0)): void { if (facing == vector3(-226, 65, 229)) { 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 level5;