Files
Reeks2Missie9/scripts/levels/level1/mission1.ts

193 lines
6.8 KiB
TypeScript

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;