168 lines
5.9 KiB
TypeScript
168 lines
5.9 KiB
TypeScript
import { BlockType, BlockTypes, 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,
|
|
];
|
|
|
|
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);
|
|
}
|
|
}
|
|
|
|
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) {
|
|
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]);
|
|
}
|
|
}
|
|
|
|
teleportAndFaceAgent(level1StartPosition, vector3(-84, 69, 272));
|
|
|
|
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;
|