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

135 lines
4.9 KiB
TypeScript

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) {
teleportAndFaceAgent(level5StartPosition, vector3(-226, 65, 229));
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(-255, 67, 246), vector3(-255, 67, 246));
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);
}
}
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;