import { BlockType, BlockTypes, BlockVolume, EntityInventoryComponent, Player, 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 { level1Conditions } from "../../levelConditions/level1"; import { mindKeeper, CURRENT_LEVEL } from "../../main"; import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block"; import { MinecraftBiomeTypes } from "../../vanilla-data/mojang-biome"; import level2 from "../level2/mission1"; const Level1CommandBlockPos: Vector3 = vector3(-73, 71, 283); const level1StartPosition: Vector3 = vector3(-73, 69, 272); const Level1EndPosition: Vector3 = vector3(-83, 69, 258); let toolPositions = [vector3(-75, 68, 268), vector3(-77, 68, 266), vector3(-79, 68, 264), vector3(-81, 68, 262)]; let flowerPositions = [ vector3(-74, 69, 272), vector3(-75, 69, 272), vector3(-75, 69, 271), vector3(-75, 69, 270), vector3(-75, 69, 269), vector3(-76, 69, 270), vector3(-77, 69, 270), vector3(-77, 69, 269), vector3(-77, 69, 268), vector3(-77, 69, 267), vector3(-78, 69, 268), vector3(-79, 69, 268), vector3(-79, 69, 267), vector3(-79, 69, 266), vector3(-79, 69, 265), vector3(-80, 69, 266), vector3(-81, 69, 266), vector3(-81, 69, 265), vector3(-81, 69, 264), vector3(-81, 69, 263), vector3(-82, 69, 264), vector3(-83, 69, 264), vector3(-83, 69, 263), vector3(-83, 69, 262), vector3(-83, 69, 261), vector3(-83, 69, 260), vector3(-83, 69, 259), ]; let toolBlocks = [ MinecraftBlockTypes.RedWool, MinecraftBlockTypes.GreenWool, MinecraftBlockTypes.YellowWool, MinecraftBlockTypes.BlueWool, ]; let noDrillYet = true; let noChainsawYet = true; const level1ResetCommandBlockPos: Vector3 = vector3(56, 68, 211); const level1: Level = new Level( () => { pupeteer.sendWorldMessage("%message.level1.started"); pupeteer.setTitleTimed("%message.level1.name", 2.5); startLevel(Level1CommandBlockPos); teleportAndFaceAgent(level1StartPosition, vector3(-84, 69, 272)); }, () => { pupeteer.setActionBar("%message.level1.make"); }, () => { pupeteer.clearActionBar(); pupeteer.sendWorldMessage("%message.level1.complete"); pupeteer.setTitleTimed("%message.level1.complete", 2.5); world.getDimension("Overworld").runCommand("/fill -86 71 253 -86 75 275 air replace barrier"); mindKeeper.increment(CURRENT_LEVEL); level2.reset(); world.getDimension("Overworld").runCommand("/fill -128 71 255 -128 74 276 barrier replace air"); }, () => { let isComplete = false; let isOutOfBounds = false; let hasAllTools = false; let plantedAllFlowers = false; for (let i = 0; i < toolPositions.length; i++) { let block = world.getDimension("overworld").getBlock(toolPositions[i]); if (block?.type.id == MinecraftBlockTypes.Air) { toolPositions.splice(i, 1); } } let drillBlock = world.getDimension("overworld").getBlock(vector3(-75, 68, 268)); if (drillBlock?.type.id == MinecraftBlockTypes.Air && noDrillYet) { noDrillYet = false; let volume: BlockVolume = new BlockVolume(vector3(-70, 71, 285), vector3(-70, 71, 285)); world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.RedstoneBlock); } let chainsawBlock = world.getDimension("overworld").getBlock(vector3(-79, 68, 264)); if (chainsawBlock?.type.id == MinecraftBlockTypes.Air && noChainsawYet) { noChainsawYet = false; let volume: BlockVolume = new BlockVolume(vector3(-69, 71, 285), vector3(-69, 71, 285)); world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.RedstoneBlock); } for (let i = 0; i < flowerPositions.length; i++) { let block = world.getDimension("overworld").getBlock(flowerPositions[i]); if (block?.type.id == MinecraftBlockTypes.BlueOrchid) { flowerPositions.splice(i, 1); } } if (toolPositions.length == 0) { hasAllTools = true; } if (flowerPositions.length == 0) { plantedAllFlowers = true; } 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(Level1EndPosition) && hasAllTools && plantedAllFlowers) { isComplete = true; } if (isOutOfBounds) { teleportAndFaceAgent(level1StartPosition, vector3(-84, 69, 272)); pupeteer.sendWorldMessage("%message.level1.outOfBounds"); pupeteer.setTitleTimed("%message.level1.outOfBounds", 2.5); world.getDimension("overworld").runCommand("execute as @p run codebuilder runtime stop @s"); world.getDimension("Overworld").runCommand("/fill -74 69 272 -83 69 259 air replace blue_orchid"); toolPositions = [vector3(-75, 68, 268), vector3(-77, 68, 266), vector3(-79, 68, 264), vector3(-81, 68, 262)]; for (let i = 0; i < toolPositions.length; i++) { let blockToReplace = world.getDimension("overworld").getBlock(toolPositions[i]); if (blockToReplace?.type.id === MinecraftBlockTypes.Air) { placeBlock(toolPositions[i], toolBlocks[i]); } } return false; } else if (isComplete) { return true; } return false; }, () => { world.getDimension("Overworld").runCommand("/fill -74 69 272 -83 69 259 air replace blue_orchid"); toolPositions = [vector3(-75, 68, 268), vector3(-77, 68, 266), vector3(-79, 68, 264), vector3(-81, 68, 262)]; for (let i = 0; i < toolPositions.length; i++) { placeBlock(toolPositions[i], toolBlocks[i]); } } ); 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(-84, 69, 272)) { 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 level1;