Init
This commit is contained in:
223
scripts/main.ts
Normal file
223
scripts/main.ts
Normal file
@@ -0,0 +1,223 @@
|
||||
import {
|
||||
world,
|
||||
system,
|
||||
MinecraftBlockTypes,
|
||||
Vector3,
|
||||
MolangVariableMap,
|
||||
ChatSendAfterEvent,
|
||||
Player,
|
||||
Dimension,
|
||||
BlockType,
|
||||
Block,
|
||||
} from "@minecraft/server";
|
||||
import { Mindkeeper, Store, StoreType } from "./Commandeer/mindKeeper";
|
||||
import Pupeteer from "./Commandeer/pupeteer";
|
||||
import Level from "./Commandeer/level/level";
|
||||
import { leverOn } from "./Commandeer/level/levelTypes";
|
||||
import { levelIntroConditions } from "./levelConditions/levelIntro";
|
||||
import { Vector3ToFancyString, Vector3ToString, vector3 } from "./Commandeer/utils/vectorUtils";
|
||||
import { delay } from "./Commandeer/utils/waitUtil";
|
||||
import { PARTICLES, ParticleColumn, bedrockParticles, spawnParticle } from "./Commandeer/utils/particleUtils";
|
||||
import { drawArrow } from "./Commandeer/utils/arrow";
|
||||
import * as agentUtils from "./Commandeer/utils/agentUtils";
|
||||
import { level3Conditions } from "./levelConditions/level3";
|
||||
import { TrailMaker } from "./Commandeer/Makers/trailMaker";
|
||||
import * as CCTrigger from "./Commandeer/Trigger/CCTrigger";
|
||||
import { Command, Commands } from "./Commandeer/command/command";
|
||||
|
||||
const mindKeeper = new Mindkeeper(world);
|
||||
const pupeteer = new Pupeteer(world);
|
||||
const trailMaker: TrailMaker.Maker = new TrailMaker.Maker();
|
||||
const triggerManager = new CCTrigger.Manager(mindKeeper);
|
||||
const CURRENT_LEVEL = "currentLevel";
|
||||
const AGENT_ID = "agentid";
|
||||
const PREFIX = "!";
|
||||
export { pupeteer, mindKeeper, CURRENT_LEVEL };
|
||||
|
||||
const DEVELOPER_MODE = true;
|
||||
let tickCounter = 0;
|
||||
system.runInterval(() => {
|
||||
tickCounter++;
|
||||
if (mindKeeper.initialised) {
|
||||
trailMaker.Update();
|
||||
updateIntro();
|
||||
//run every 4 ticks
|
||||
if (tickCounter % 2 == 0) {
|
||||
triggerManager.Update();
|
||||
}
|
||||
const currentLevel = mindKeeper.get(CURRENT_LEVEL);
|
||||
switch (currentLevel) {
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
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),
|
||||
];
|
||||
|
||||
let currentBlockSequence: BlockType[] = [];
|
||||
let currentBlockSeuqenceIndex: number[] = [];
|
||||
|
||||
triggerManager.RegisterFunctionTrigger("lightPath", (event) => {
|
||||
lightUpPath();
|
||||
});
|
||||
|
||||
//fill 2467 9 87 2468 9 105 redstone_block
|
||||
async function lightUpPath() {
|
||||
let overworld: Dimension = world.getDimension("overworld");
|
||||
let pos1 = vector3(2467, 9, 87);
|
||||
let pos2 = vector3(2468, 9, 105);
|
||||
|
||||
for (let z = pos2.z; z >= pos1.z; z--) {
|
||||
overworld.fillBlocks(vector3(pos1.x, pos1.y, z), vector3(pos1.x + 1, pos1.y, z), MinecraftBlockTypes.redstoneBlock);
|
||||
await delay(4);
|
||||
}
|
||||
// let pos2 = vector3(2468, 9, 105);
|
||||
}
|
||||
|
||||
const blockCycle: BlockType[] = [
|
||||
MinecraftBlockTypes.redstoneBlock,
|
||||
MinecraftBlockTypes.goldBlock,
|
||||
MinecraftBlockTypes.diamondBlock,
|
||||
MinecraftBlockTypes.emeraldBlock,
|
||||
MinecraftBlockTypes.lapisBlock,
|
||||
];
|
||||
|
||||
let buttonPressed: boolean[] = buttonPositions.map(() => false);
|
||||
|
||||
function startIntro() {
|
||||
//Determine the current squence
|
||||
|
||||
blockPositions.forEach((pos) => {
|
||||
let block = world.getDimension("overworld").getBlock(pos);
|
||||
let index = blockPositions.indexOf(pos);
|
||||
let blockType = block!.type;
|
||||
currentBlockSequence[index] = blockType;
|
||||
});
|
||||
}
|
||||
|
||||
function updateIntro() {
|
||||
//Check each button if it's pressed
|
||||
|
||||
buttonPositions.forEach((pos) => {
|
||||
let block = world.getDimension("overworld").getBlock(pos);
|
||||
let index = buttonPositions.indexOf(pos);
|
||||
let prevState = buttonPressed[index];
|
||||
let currentState = block!.getRedstonePower()! > 0;
|
||||
|
||||
if (currentState && !prevState) {
|
||||
buttonPressed[index] = true;
|
||||
//NextBlock
|
||||
let nextBlock = currentBlockSequence[index];
|
||||
let nextIndex = blockCycle.indexOf(nextBlock);
|
||||
nextIndex = (nextIndex + 1) % blockCycle.length;
|
||||
currentBlockSequence[index] = blockCycle[nextIndex];
|
||||
//Update the block
|
||||
let blockPos = blockPositions[index];
|
||||
world.getDimension("overworld").getBlock(blockPos)!.setType(blockCycle[nextIndex]);
|
||||
}
|
||||
|
||||
if (!currentState && prevState) {
|
||||
buttonPressed[index] = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
world.afterEvents.worldInitialize.subscribe(({ propertyRegistry }) => {
|
||||
mindKeeper.registerStore(CURRENT_LEVEL, StoreType.number);
|
||||
mindKeeper.registerStore(AGENT_ID, StoreType.string);
|
||||
// mindKeeper.set("ShowTriggers", true);
|
||||
triggerManager.RegisterStores();
|
||||
mindKeeper.registerToWorld(propertyRegistry);
|
||||
|
||||
triggerManager.Load();
|
||||
});
|
||||
|
||||
world.beforeEvents.itemUseOn.subscribe((event) => {
|
||||
trailMaker.OnItemUse(event);
|
||||
triggerManager.OnItemUse(event);
|
||||
});
|
||||
|
||||
function randomExplosions() {
|
||||
let pos1 = vector3(2465, 10, 82);
|
||||
let pos2 = vector3(2471, 18, 90);
|
||||
|
||||
for (let i = 0; i < 5; i++) {
|
||||
let pos = vector3(
|
||||
pos1.x + Math.random() * (pos2.x - pos1.x),
|
||||
pos1.y + Math.random() * (pos2.y - pos1.y),
|
||||
pos1.z + Math.random() * (pos2.z - pos1.z)
|
||||
);
|
||||
//create a particle
|
||||
spawnParticle(pos, "minecraft:huge_explosion_emitter", new MolangVariableMap());
|
||||
}
|
||||
}
|
||||
|
||||
let originalDoorPos = vector3(2465, 10, 82);
|
||||
let closedDoorPos = vector3(2465, 10, 82);
|
||||
let openDoorPos = vector3(2465, 10, 82);
|
||||
|
||||
let doorSize = vector3(7, 7, 7);
|
||||
///clone 2463 -10 81 2470 -3 87 2463 10 81
|
||||
///clone 2463 -30 81 2470 -23 87 2463 10 81
|
||||
|
||||
function blowUpDoor() {
|
||||
world.getDimension("overworld").runCommand("/clone 2463 -10 81 2470 -3 87 2463 10 81");
|
||||
}
|
||||
function restoreDoor() {
|
||||
world.getDimension("overworld").runCommand("/clone 2463 -30 81 2470 -23 87 2463 10 81");
|
||||
}
|
||||
|
||||
world.afterEvents.chatSend.subscribe((event: ChatSendAfterEvent) => {
|
||||
const command = event.message.split(" ")[0];
|
||||
|
||||
trailMaker.OnChat(event);
|
||||
mindKeeper.chatCommands(event);
|
||||
triggerManager.OnChat(event);
|
||||
|
||||
if (command === "!reset") {
|
||||
world.sendMessage("Resetting");
|
||||
}
|
||||
});
|
||||
|
||||
Commands.register(PREFIX, "info", (arg) => {
|
||||
world.sendMessage("-----------------");
|
||||
world.sendMessage("Current level: " + mindKeeper.get(CURRENT_LEVEL));
|
||||
world.sendMessage("Agent ID: " + mindKeeper.get(AGENT_ID));
|
||||
world.sendMessage("Engine Version: 1.0.2");
|
||||
world.sendMessage("Engine is running");
|
||||
world.sendMessage("Active players: " + world.getPlayers().length);
|
||||
world.sendMessage("Current dimension: " + arg.player.dimension.id);
|
||||
world.sendMessage("Current position: " + Vector3ToFancyString(arg.player.location));
|
||||
world.sendMessage("-----------------");
|
||||
});
|
||||
|
||||
Commands.register(PREFIX, "kboom", (arg) => {
|
||||
(async () => {
|
||||
for (let i = 0; i < 10; i++) {
|
||||
randomExplosions();
|
||||
await delay(1);
|
||||
}
|
||||
blowUpDoor();
|
||||
})();
|
||||
});
|
||||
|
||||
Commands.register(PREFIX, "restore", restoreDoor);
|
||||
|
||||
system.afterEvents.scriptEventReceive.subscribe((event) => {
|
||||
if (event.id == "cc:getId") {
|
||||
let id = event.message;
|
||||
world.sendMessage("Script got the id " + id);
|
||||
mindKeeper.set(AGENT_ID, id);
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user