Files
Reeks2Missie6/scripts/levels/levelIntro.ts

108 lines
3.4 KiB
TypeScript

import { Vector3, world } from "@minecraft/server";
import Level from "../Commandeer/level/level";
import { vector3 } from "../Commandeer/utils/vectorUtils";
import { levelIntroConditions } from "../levelConditions/levelIntro";
import { CURRENT_LEVEL, mindKeeper } from "../main";
import Pupeteer from "../Commandeer/pupeteer";
import { MinecraftBlockTypes } from "../vanilla-data/mojang-block";
// const levelIntroCommandBlockPos: Vector3 = vector3(58, 66, 276);
// const levelIntroStartPosition: Vector3 = vector3(28, 70, 269);
// const levelIntroEndPosition: Vector3 = vector3(39, 70, 269);
const buttonPositions: Vector3[] = [
vector3(2471, 11, 106),
vector3(2469, 11, 106),
vector3(2468, 11, 106),
vector3(2464, 11, 106),
];
const blockPositions: Vector3[] = [
vector3(2471, 12, 108),
vector3(2469, 12, 108),
vector3(2468, 12, 108),
vector3(2464, 12, 108),
];
const currentBlockSequence: string[] = [];
const blockCycle: string[] = [
// MinecraftBlockTypes.RedstoneBlock,
// MinecraftBlockTypes.GoldBlock,
// MinecraftBlockTypes.DiamondBlock,
MinecraftBlockTypes.EmeraldBlock,
MinecraftBlockTypes.LapisBlock,
];
const buttonPressed: boolean[] = buttonPositions.map(() => false);
const levelIntro: Level = new Level(
() => {
Pupeteer.sendWorldMessage("%message.intro.started");
Pupeteer.setTitleTimed("%message.intro.started", 2.5);
// startLevel(levelIntroCommandBlockPos);
// teleportAgent(levelIntroStartPosition);
blockPositions.forEach((pos) => {
const block = world.getDimension("overworld").getBlock(pos);
const index = blockPositions.indexOf(pos);
const blockType = block!.type;
currentBlockSequence[index] = blockType.id;
});
},
() => {
Pupeteer.setActionBar("%message.intro.make");
buttonPositions.forEach((pos) => {
const block = world.getDimension("overworld").getBlock(pos);
if (!block) return;
const index = buttonPositions.indexOf(pos);
const prevState = buttonPressed[index];
const currentState = block!.getRedstonePower()! > 0;
if (currentState && !prevState) {
buttonPressed[index] = true;
//NextBlock
const nextBlock = currentBlockSequence[index];
let nextIndex = blockCycle.indexOf(nextBlock);
nextIndex = (nextIndex + 1) % blockCycle.length;
currentBlockSequence[index] = blockCycle[nextIndex];
//Update the block
const blockPos = blockPositions[index];
world.getDimension("overworld").getBlock(blockPos)!.setType(blockCycle[nextIndex]);
}
if (!currentState && prevState) {
buttonPressed[index] = false;
}
});
},
() => {
Pupeteer.clearActionBar();
world.sendMessage("%message.intro.done");
Pupeteer.setTitleTimed("%message.intro.done", 2.5);
mindKeeper.increment(CURRENT_LEVEL);
},
() => {
let isComplete = true;
levelIntroConditions.conditions.forEach((condition) => {
const blockInworld = world.getDimension("overworld").getBlock(condition.position);
if (blockInworld?.type.id !== condition.block) {
isComplete = false;
}
});
if (isComplete) {
return true;
}
return false;
},
() => {
blockPositions.forEach((pos) => {
const block = world.getDimension("overworld").getBlock(pos);
const randomBlock = blockCycle[Math.floor(Math.random() * blockCycle.length)];
block!.setType(randomBlock);
});
}
);
export default levelIntro;