Add Formatting (Thank God)

This commit is contained in:
2024-08-29 15:47:58 +02:00
parent 545e47a9f3
commit 1ab45204b9
35 changed files with 2331 additions and 254 deletions

11
eslint.config.mjs Normal file
View File

@@ -0,0 +1,11 @@
import globals from "globals";
import pluginJs from "@eslint/js";
import tseslint from "typescript-eslint";
export default [
{ files: ["**/*.{js,mjs,cjs,ts}"] },
{ languageOptions: { globals: globals.browser } },
pluginJs.configs.recommended,
// Dont make errors of unused parameters in lambdas
...tseslint.configs.recommended,
];

2124
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -5,8 +5,11 @@
"description": "Minecraft TypeScript Starter Project", "description": "Minecraft TypeScript Starter Project",
"private": true, "private": true,
"devDependencies": { "devDependencies": {
"@eslint/js": "^9.9.1",
"@minecraft/server-ui": "^1.1.0", "@minecraft/server-ui": "^1.1.0",
"del": "^6.0.0", "del": "^6.0.0",
"eslint": "^9.9.1",
"globals": "^15.9.0",
"gulp": "^4.0.2", "gulp": "^4.0.2",
"gulp-cli": "^2.3.0", "gulp-cli": "^2.3.0",
"gulp-rename": "^2.0.0", "gulp-rename": "^2.0.0",
@@ -17,6 +20,7 @@
"readline-sync": "^1.4.10", "readline-sync": "^1.4.10",
"source-map": "^0.7.4", "source-map": "^0.7.4",
"typescript": "^4.4.3", "typescript": "^4.4.3",
"typescript-eslint": "^8.3.0",
"yargs": "^17.7.2" "yargs": "^17.7.2"
}, },
"scripts": { "scripts": {

View File

@@ -13,7 +13,7 @@ import {
world, world,
} from "@minecraft/server"; } from "@minecraft/server";
import { vector3, vector3Distance } from "../utils/vectorUtils"; import { vector3, vector3Distance } from "../utils/vectorUtils";
import { Mindkeeper, StoreType } from "../mindKeeper"; import { Mindkeeper } from "../mindKeeper";
import { spawnParticle } from "../utils/particleUtils"; import { spawnParticle } from "../utils/particleUtils";
import { Manager } from "./manager"; import { Manager } from "./manager";
@@ -46,7 +46,7 @@ export class Maker {
} }
if (event.message === "!deleteCurrentTrigger") { if (event.message === "!deleteCurrentTrigger") {
let currentTriggerdTrigger = this.manager const currentTriggerdTrigger = this.manager
.GetTriggers() .GetTriggers()
.filter((trigger) => trigger.IsPlayerInside(event.sender as Player)); .filter((trigger) => trigger.IsPlayerInside(event.sender as Player));
if (currentTriggerdTrigger.length > 0) { if (currentTriggerdTrigger.length > 0) {
@@ -85,12 +85,12 @@ export class Maker {
if (this.waitingForPoint2) { if (this.waitingForPoint2) {
this.point2 = vector3(blockInteracted.location.x, blockInteracted.location.y, blockInteracted.location.z); this.point2 = vector3(blockInteracted.location.x, blockInteracted.location.y, blockInteracted.location.z);
let minX = Math.min(this.point1.x, this.point2.x); const minX = Math.min(this.point1.x, this.point2.x);
let maxX = Math.max(this.point1.x, this.point2.x) + 1; const maxX = Math.max(this.point1.x, this.point2.x) + 1;
let minY = Math.min(this.point1.y, this.point2.y); const minY = Math.min(this.point1.y, this.point2.y);
let maxY = Math.max(this.point1.y, this.point2.y) + 1; const maxY = Math.max(this.point1.y, this.point2.y) + 1;
let minZ = Math.min(this.point1.z, this.point2.z); const minZ = Math.min(this.point1.z, this.point2.z);
let maxZ = Math.max(this.point1.z, this.point2.z) + 1; const maxZ = Math.max(this.point1.z, this.point2.z) + 1;
//Take the outer bounds of the two points //Take the outer bounds of the two points
this.point1 = vector3(minX, minY, minZ); this.point1 = vector3(minX, minY, minZ);
@@ -126,7 +126,7 @@ export class Maker {
const z = pos1.z + (zStep / steps) * i; const z = pos1.z + (zStep / steps) * i;
//make the ends and starts a different color //make the ends and starts a different color
let map = new MolangVariableMap(); const map = new MolangVariableMap();
if (i == 0 || i == steps) { if (i == 0 || i == steps) {
map.setColorRGB("variable.color", { red: 0, green: 255, blue: 0 }); map.setColorRGB("variable.color", { red: 0, green: 255, blue: 0 });
const particleData: MolangVariableMap = new MolangVariableMap(); const particleData: MolangVariableMap = new MolangVariableMap();
@@ -159,7 +159,7 @@ export class Maker {
} }
Update() { Update() {
let shouldRender = this.mindKeeper.get("ShowTriggers") as boolean; const shouldRender = this.mindKeeper.get("ShowTriggers") as boolean;
this.manager.GetTriggers().forEach((trigger: Trigger) => { this.manager.GetTriggers().forEach((trigger: Trigger) => {
trigger.Update(); trigger.Update();
@@ -178,7 +178,6 @@ export class Maker {
}); });
distances.sort((a, b) => a.distance - b.distance); distances.sort((a, b) => a.distance - b.distance);
const closestPlayer = distances[0].player;
const distance = distances[0].distance; const distance = distances[0].distance;
if (distance > 25) return; if (distance > 25) return;

View File

@@ -1,4 +1,4 @@
import { ChatSendAfterEvent, ItemUseOnBeforeEvent, Player, system, world } from "@minecraft/server"; import { ChatSendAfterEvent, ItemUseOnBeforeEvent, Player, world } from "@minecraft/server";
import { Mindkeeper, StoreType } from "../mindKeeper"; import { Mindkeeper, StoreType } from "../mindKeeper";
import { vector3 } from "../utils/vectorUtils"; import { vector3 } from "../utils/vectorUtils";
import { Maker } from "./maker"; import { Maker } from "./maker";
@@ -16,6 +16,12 @@ export class TriggerEvent {
export type TriggerEventHandler = (event: TriggerEvent) => void; export type TriggerEventHandler = (event: TriggerEvent) => void;
type TriggerData = {
point1: { x: number; y: number; z: number };
point2: { x: number; y: number; z: number };
eventToDispatch: string;
};
export class Manager { export class Manager {
private triggers: Trigger[] = []; private triggers: Trigger[] = [];
private functionTriggers: Map<string, TriggerEventHandler> = new Map(); private functionTriggers: Map<string, TriggerEventHandler> = new Map();
@@ -58,13 +64,13 @@ export class Manager {
const triggers = this.mindKeeper.get("triggers") as string; const triggers = this.mindKeeper.get("triggers") as string;
if (triggers === undefined) return; if (triggers === undefined) return;
const data = JSON.parse(triggers); const data = JSON.parse(triggers) as TriggerData[];
data.forEach((trigger: any) => { data.forEach((trigger: TriggerData) => {
let point1 = vector3(trigger.point1.x, trigger.point1.y, trigger.point1.z); const point1 = vector3(trigger.point1.x, trigger.point1.y, trigger.point1.z);
let point2 = vector3(trigger.point2.x, trigger.point2.y, trigger.point2.z); const point2 = vector3(trigger.point2.x, trigger.point2.y, trigger.point2.z);
let eventToDispatch = trigger.eventToDispatch; const eventToDispatch = trigger.eventToDispatch;
let newTrigger = new Trigger(point1, point2); const newTrigger = new Trigger(point1, point2);
newTrigger.eventToDispatch = eventToDispatch; newTrigger.eventToDispatch = eventToDispatch;
this.triggers.push(newTrigger); this.triggers.push(newTrigger);

View File

@@ -42,13 +42,13 @@ async function playAnimation(
world.sendMessage("Animation already playing"); world.sendMessage("Animation already playing");
return; return;
} }
let frameCount = frames.length; const frameCount = frames.length;
if (!force) { if (!force) {
animationPlaying = true; animationPlaying = true;
} }
for (let i = 0; i < frameCount; i++) { for (let i = 0; i < frameCount; i++) {
let frame = reverse ? frames[frameCount - i - 1] : frames[i]; const frame = reverse ? frames[frameCount - i - 1] : frames[i];
await world await world
.getDimension("overworld") .getDimension("overworld")
.runCommandAsync( .runCommandAsync(

View File

@@ -11,7 +11,7 @@ export class Command {
} }
constructor(argv: string[], player: Player) { constructor(argv: string[], player: Player) {
this.argv = (function* () { this.argv = (function* () {
for (let arg of argv) yield arg; for (const arg of argv) yield arg;
})(); })();
this.__player = player; this.__player = player;
} }
@@ -83,13 +83,13 @@ export class Commands {
public static register(prefix: string, command: string, commandFunction: (arg: Command) => void): void { public static register(prefix: string, command: string, commandFunction: (arg: Command) => void): void {
if (prefix.startsWith("/")) throw Error("Unable to register slash commands."); if (prefix.startsWith("/")) throw Error("Unable to register slash commands.");
world.beforeEvents.chatSend.subscribe((arg) => { world.beforeEvents.chatSend.subscribe((arg) => {
var argv = arg.message.split(/(".*?"|[^"\s]+)+(?=\s*|\s*$)/g).filter((e) => e.trim().length > 0); const argv = arg.message.split(/(".*?"|[^"\s]+)+(?=\s*|\s*$)/g).filter((e) => e.trim().length > 0);
if (argv[0] === `${prefix}${command}`) { if (argv[0] === `${prefix}${command}`) {
arg.cancel = true; arg.cancel = true;
try { try {
commandFunction(new Command(argv, arg.sender)); commandFunction(new Command(argv, arg.sender));
} catch (err) { } catch (err) {
let { statusMessage } = JSON.parse(err as string); const { statusMessage } = JSON.parse(err as string);
console.error(err); console.error(err);
arg.sender.sendMessage(`§c${statusMessage}`); arg.sender.sendMessage(`§c${statusMessage}`);
} }

View File

@@ -1,6 +1,5 @@
import { BlockType, Vector3, world } from "@minecraft/server"; import { BlockType, Vector3, world } from "@minecraft/server";
import AbstractLevelCondition from "./AbstractCondition"; import AbstractLevelCondition from "./AbstractCondition";
import { Vector3ToString } from "../utils/vectorUtils";
class BlockCondition extends AbstractLevelCondition { class BlockCondition extends AbstractLevelCondition {
position: Vector3; position: Vector3;

View File

@@ -1,4 +1,4 @@
import { BlockType, Vector3, world } from "@minecraft/server"; import { Vector3, world } from "@minecraft/server";
import AbstractLevelCondition from "./AbstractCondition"; import AbstractLevelCondition from "./AbstractCondition";
class ButtonPushCondition extends AbstractLevelCondition { class ButtonPushCondition extends AbstractLevelCondition {

View File

@@ -1,9 +1,9 @@
import { Vector3, world } from "@minecraft/server"; import { Vector3, world } from "@minecraft/server";
import Level from "./level"; import Level from "./level";
import pupeteer from "../pupeteer"; import pupeteer from "../pupeteer";
import { teleportAgent, isAgentAt, getAgentLocation, getAgent } from "../utils/agentUtils"; import { teleportAgent, isAgentAt, getAgentLocation } from "../utils/agentUtils";
import { startLevel } from "../utils/levelUtils"; import { startLevel } from "../utils/levelUtils";
import { vector3, Vector3Add, Vector3ToCommandString } from "../utils/vectorUtils"; import { vector3, Vector3Add } from "../utils/vectorUtils";
import { mindKeeper, CURRENT_LEVEL } from "../../main"; import { mindKeeper, CURRENT_LEVEL } from "../../main";
import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block"; import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block";
@@ -37,9 +37,9 @@ class AbstractAgentTrackMission extends Level {
let isComplete = false; let isComplete = false;
let isOutOfBounds = false; let isOutOfBounds = false;
let agentPos = getAgentLocation(); const agentPos = getAgentLocation();
let blockLava = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -7, 0))); const blockLava = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -7, 0)));
let blockAir = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0))); const blockAir = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0)));
if ( if (
blockLava && blockLava &&

View File

@@ -1,20 +1,18 @@
import { World } from "@minecraft/server";
class Level { class Level {
levelCompleteCallback: Function; levelCompleteCallback: VoidFunction;
levelCheckCallback: Function; levelCheckCallback: () => boolean;
levelSetupCallback: Function; levelSetupCallback: VoidFunction;
levelUpdateCallback: Function; levelUpdateCallback: VoidFunction;
levelResetCallback: Function; levelResetCallback: VoidFunction;
isCompleted: boolean = false; isCompleted: boolean = false;
isSetup: boolean = false; isSetup: boolean = false;
constructor( constructor(
levelSetupCallback: Function, levelSetupCallback: VoidFunction,
levelUpdateCallback: Function, levelUpdateCallback: VoidFunction,
levelCompleteCallback: Function, levelCompleteCallback: VoidFunction,
levelCheckCallback: Function, levelCheckCallback: () => boolean,
levelResetCallback: Function = () => {} levelResetCallback: VoidFunction = () => {}
) { ) {
this.levelSetupCallback = levelSetupCallback; this.levelSetupCallback = levelSetupCallback;
this.levelCompleteCallback = levelCompleteCallback; this.levelCompleteCallback = levelCompleteCallback;

View File

@@ -1,4 +1,4 @@
import { BlockType, Vector3, world, World } from "@minecraft/server"; import { Vector3, world, World } from "@minecraft/server";
export type blockCondition = { export type blockCondition = {
block: string; block: string;
@@ -14,7 +14,7 @@ export type blockCondition = {
* @throws Throws an error if there is no lever at the specified position. * @throws Throws an error if there is no lever at the specified position.
*/ */
export function leverOn(world: World, position: Vector3): boolean { export function leverOn(world: World, position: Vector3): boolean {
let lever = world.getDimension("overworld").getBlock(position); const lever = world.getDimension("overworld").getBlock(position);
if (!(lever?.typeId == "minecraft:lever")) { if (!(lever?.typeId == "minecraft:lever")) {
throw new Error(`No lever at ${position}`); throw new Error(`No lever at ${position}`);
} }
@@ -46,7 +46,7 @@ export type LevelNoGoZone = {
export const checkBlockCondition = (condition: LevelBlockCondition): boolean => { export const checkBlockCondition = (condition: LevelBlockCondition): boolean => {
let isComplete: boolean = true; let isComplete: boolean = true;
condition.conditions.forEach((condition) => { condition.conditions.forEach((condition) => {
let block = world.getDimension("overworld").getBlock(condition.position); const block = world.getDimension("overworld").getBlock(condition.position);
if (block!.typeId != condition.block) { if (block!.typeId != condition.block) {
isComplete = false; isComplete = false;
} }

View File

@@ -75,10 +75,11 @@ class Mindkeeper {
for (let i = 0; i < this.registerdStores.length; i++) { for (let i = 0; i < this.registerdStores.length; i++) {
let isAlreadyDefined = true; let isAlreadyDefined = true;
try { try {
let test = this.world.getDynamicProperty(this.registerdStores[i].getName()); const test = this.world.getDynamicProperty(this.registerdStores[i].getName());
if (test === undefined) { if (test === undefined) {
isAlreadyDefined = false; isAlreadyDefined = false;
} }
// eslint-disable-next-line @typescript-eslint/no-unused-vars
} catch (e) { } catch (e) {
isAlreadyDefined = false; isAlreadyDefined = false;
} }
@@ -125,12 +126,13 @@ class Mindkeeper {
*/ */
get(store: string): string | number | boolean | Vector3 | undefined { get(store: string): string | number | boolean | Vector3 | undefined {
try { try {
let data = this.world.getDynamicProperty(store); const data = this.world.getDynamicProperty(store);
if (data === undefined) { if (data === undefined) {
this.world.sendMessage(`Store ${store} is not defined`); this.world.sendMessage(`Store ${store} is not defined`);
return undefined; return undefined;
} }
return data; return data;
// eslint-disable-next-line @typescript-eslint/no-unused-vars
} catch (e) { } catch (e) {
// this.world.sendMessage(`Store ${store} is not defined`); // this.world.sendMessage(`Store ${store} is not defined`);
return undefined; return undefined;
@@ -142,7 +144,7 @@ class Mindkeeper {
* @param store The name of the store. * @param store The name of the store.
*/ */
increment(store: string): void { increment(store: string): void {
let data = this.get(store); const data = this.get(store);
if (typeof data === "number") { if (typeof data === "number") {
this.set(store, data + 1); this.set(store, data + 1);
} }
@@ -155,6 +157,7 @@ class Mindkeeper {
private secondWarning = false; private secondWarning = false;
chatCommands(event: ChatSendAfterEvent) { chatCommands(event: ChatSendAfterEvent) {
const command = event.message.split(" ")[0]; const command = event.message.split(" ")[0];
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const args = event.message.split(" ").slice(1); const args = event.message.split(" ").slice(1);
if (command === "!get") { if (command === "!get") {
@@ -173,9 +176,8 @@ class Mindkeeper {
this.world.sendMessage(`Please provide a value to set for ${store}`); this.world.sendMessage(`Please provide a value to set for ${store}`);
return; return;
} }
const type = event.message.split(" ")[3];
let actualType = this.getStores() const actualType = this.getStores()
.find((s) => s.getName() === store) .find((s) => s.getName() === store)
?.getType(); ?.getType();
@@ -195,10 +197,11 @@ class Mindkeeper {
} }
this.set(store, Number(value)); this.set(store, Number(value));
break; break;
case StoreType.boolean: case StoreType.boolean: {
const ActualValue = value.toLowerCase(); const ActualValue = value.toLowerCase();
this.set(store, ActualValue === "true"); this.set(store, ActualValue === "true");
break; break;
}
} }
this.world.sendMessage(`Value of ${store} is ${value}`); this.world.sendMessage(`Value of ${store} is ${value}`);
} }

View File

@@ -1,7 +1,10 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
class NextLevel { class NextLevel {
currentState = 0; currentState = 0;
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
states: Array<Function> = []; states: Array<Function> = [];
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
constructor(states: Array<Function>) { constructor(states: Array<Function>) {
this.states = states; this.states = states;
} }

View File

@@ -6,7 +6,6 @@ import {
TicksPerSecond, TicksPerSecond,
TitleDisplayOptions, TitleDisplayOptions,
Vector3, Vector3,
World,
system, system,
world, world,
} from "@minecraft/server"; } from "@minecraft/server";
@@ -46,7 +45,7 @@ class Pupeteer {
static setTitleTimed(message: string, duration: number): void { static setTitleTimed(message: string, duration: number): void {
world.getPlayers().forEach((player) => { world.getPlayers().forEach((player) => {
let options: TitleDisplayOptions = { const options: TitleDisplayOptions = {
fadeInDuration: 20, fadeInDuration: 20,
fadeOutDuration: 20, fadeOutDuration: 20,
stayDuration: duration * TicksPerSecond, stayDuration: duration * TicksPerSecond,
@@ -88,11 +87,11 @@ class Pupeteer {
static testForLocation(location: Vector3, radius: number): boolean { static testForLocation(location: Vector3, radius: number): boolean {
let isPlayerInArea = false; let isPlayerInArea = false;
world.getPlayers().forEach((player) => { world.getPlayers().forEach((player) => {
let dx = location.x - player.location.x; const dx = location.x - player.location.x;
let dy = location.y - player.location.y; const dy = location.y - player.location.y;
let dz = location.z - player.location.z; const dz = location.z - player.location.z;
let distance = Math.sqrt(dx * dx + dy * dy + dz * dz); const distance = Math.sqrt(dx * dx + dy * dy + dz * dz);
if (distance < radius) { if (distance < radius) {
isPlayerInArea = true; isPlayerInArea = true;
} }

View File

@@ -1,5 +1,4 @@
import { MolangVariableMap, Vector3, world } from "@minecraft/server"; import { MolangVariableMap, Vector3 } from "@minecraft/server";
import { Vector3Add } from "../utils/vectorUtils";
import { TrailType } from "./trailTypes"; import { TrailType } from "./trailTypes";
import { PARTICLES, spawnParticle } from "../utils/particleUtils"; import { PARTICLES, spawnParticle } from "../utils/particleUtils";
@@ -14,10 +13,12 @@ class TrailPoint {
spawn() { spawn() {
// let spawnPosition: Vector3 = Vector3Add(this.postion, { x: 0.5, y: 0.5, z: 0.5 }); // let spawnPosition: Vector3 = Vector3Add(this.postion, { x: 0.5, y: 0.5, z: 0.5 });
let spawnPosition: Vector3 = this.postion; const spawnPosition: Vector3 = this.postion;
try { try {
spawnParticle(spawnPosition, PARTICLES.balloon_gas_particle, new MolangVariableMap()); spawnParticle(spawnPosition, PARTICLES.balloon_gas_particle, new MolangVariableMap());
} catch (e) {} } catch (error) {
console.error("Error spawning particle", error);
}
} }
} }
@@ -54,7 +55,6 @@ class Trail {
if (this.currentParticleCounter >= this.nextParticleTimer) { if (this.currentParticleCounter >= this.nextParticleTimer) {
this.currentParticleCounter = 0; this.currentParticleCounter = 0;
//wrapindex is in how many segments the trail is divided into //wrapindex is in how many segments the trail is divided into
let pointsPerInterval = this.wrapIndex > 0 ? this.calculatedLength / this.wrapIndex : 0;
this.points this.points
.filter((point) => { .filter((point) => {
if (this.wrapIndex > 0) { if (this.wrapIndex > 0) {
@@ -68,7 +68,7 @@ class Trail {
}); });
this.currentPoint++; this.currentPoint++;
let actualLength = this.wrapIndex > 0 ? this.wrapIndex : this.calculatedLength; const actualLength = this.wrapIndex > 0 ? this.wrapIndex : this.calculatedLength;
if (this.currentPoint >= actualLength) { if (this.currentPoint >= actualLength) {
this.currentPoint = 0; this.currentPoint = 0;
} }

View File

@@ -1,7 +1,6 @@
import { import {
Block, Block,
ChatSendAfterEvent, ChatSendAfterEvent,
EntityInventoryComponent,
ItemStack, ItemStack,
ItemUseOnBeforeEvent, ItemUseOnBeforeEvent,
MolangVariableMap, MolangVariableMap,
@@ -14,6 +13,7 @@ import { spawnParticle } from "../utils/particleUtils";
import Pupeteer from "../pupeteer"; import Pupeteer from "../pupeteer";
import Chalk from "../chalk"; import Chalk from "../chalk";
// eslint-disable-next-line @typescript-eslint/no-namespace
export namespace TrailMaker { export namespace TrailMaker {
export class Maker { export class Maker {
currentTrail: Trail; currentTrail: Trail;

View File

@@ -1,17 +1,15 @@
import { Entity, Vector3, world } from "@minecraft/server"; import { Entity, Vector3, world } from "@minecraft/server";
import { Vector3Add, Vector3ToString, vector3 } from "./vectorUtils"; import { Vector3Add, vector3 } from "./vectorUtils";
import { mindKeeper } from "../../main"; import { mindKeeper } from "../../main";
//Make a facing with vector3 //Make a facing with vector3
type Facing = Vector3;
function teleportAgent(position: Vector3, facing: Vector3 = vector3(0, 0, 0)): void { function teleportAgent(position: Vector3, facing: Vector3 = vector3(0, 0, 0)): void {
if (facing == vector3(0, 0, 0)) { if (facing == vector3(0, 0, 0)) {
world world
.getDimension("overworld") .getDimension("overworld")
.runCommand(`/execute as @a run tp @e[type=agent] ${position.x} ${position.y} ${position.z}`); .runCommand(`/execute as @a run tp @e[type=agent] ${position.x} ${position.y} ${position.z}`);
} else { } else {
let facing2 = Vector3Add(position, facing); const facing2 = Vector3Add(position, facing);
world world
.getDimension("overworld") .getDimension("overworld")
.runCommand( .runCommand(
@@ -38,13 +36,13 @@ function isAgentAt(position: Vector3): boolean {
} }
function getAgent(): Entity { function getAgent(): Entity {
let agent = world.getEntity(mindKeeper.get("agentid") as string); const agent = world.getEntity(mindKeeper.get("agentid") as string);
return agent!; return agent!;
} }
function getAgentLocation(): Vector3 { function getAgentLocation(): Vector3 {
let agentLocation: Vector3 = vector3(0, 0, 0); let agentLocation: Vector3 = vector3(0, 0, 0);
let agent = world.getEntity(mindKeeper.get("agentid") as string); const agent = world.getEntity(mindKeeper.get("agentid") as string);
agentLocation = agent!.location; agentLocation = agent!.location;
return agentLocation; return agentLocation;

View File

@@ -1,8 +1,8 @@
import { MolangVariableMap, Vector3, world } from "@minecraft/server"; import { MolangVariableMap, Vector3 } from "@minecraft/server";
import { Vector3Add, vector3 } from "./vectorUtils"; import { Vector3Add, vector3 } from "./vectorUtils";
import { PARTICLES, spawnParticle } from "./particleUtils"; import { PARTICLES, spawnParticle } from "./particleUtils";
let arrowTemplate: Vector3[] = [ const arrowTemplate: Vector3[] = [
vector3(0, 0, 0), vector3(0, 0, 0),
vector3(1, 1, 0), vector3(1, 1, 0),
@@ -21,18 +21,16 @@ let arrowTemplate: Vector3[] = [
vector3(0, 5, 0), vector3(0, 5, 0),
]; ];
let offset: Vector3 = vector3(0, 0, 0);
let angleOffset = 0; let angleOffset = 0;
let heightBobbing = 0; let heightBobbing = 0;
let tickCounter = 0; let tickCounter = 0;
function rotate(pos: Vector3, angle: number) { function rotate(pos: Vector3, angle: number) {
let x = pos.x; const x = pos.x;
let z = pos.z; const z = pos.z;
let newX = x * Math.cos(angle) - z * Math.sin(angle); const newX = x * Math.cos(angle) - z * Math.sin(angle);
let newZ = x * Math.sin(angle) + z * Math.cos(angle); const newZ = x * Math.sin(angle) + z * Math.cos(angle);
return vector3(newX, pos.y, newZ); return vector3(newX, pos.y, newZ);
} }
@@ -49,10 +47,9 @@ function drawArrow(offsetPos: Vector3) {
if (tickCounter % 2 == 0) { if (tickCounter % 2 == 0) {
angleOffset += 0.1; angleOffset += 0.1;
heightBobbing += 0.3; heightBobbing += 0.3;
offset = vector3(46.5, 75, 220.5);
arrowTemplate.forEach((pos) => { arrowTemplate.forEach((pos) => {
let rotatedPos = rotate(pos, angleOffset); const rotatedPos = rotate(pos, angleOffset);
let finalPos = Vector3Add(offsetPos, rotatedPos); const finalPos = Vector3Add(offsetPos, rotatedPos);
finalPos.y += Math.sin(heightBobbing) / 2; finalPos.y += Math.sin(heightBobbing) / 2;
spawnParticle(finalPos, PARTICLES.point, particleData); spawnParticle(finalPos, PARTICLES.point, particleData);
}); });

View File

@@ -1,4 +1,4 @@
import { BlockType, BlockTypes, BlockVolume, Vector3, world } from "@minecraft/server"; import { BlockVolume, Vector3, world } from "@minecraft/server";
import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block"; import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block";
type Wall = { type Wall = {
@@ -7,18 +7,17 @@ type Wall = {
}; };
function clearWall(wall: Wall) { function clearWall(wall: Wall) {
let volume: BlockVolume = new BlockVolume(wall.startPos, wall.endPos); const volume: BlockVolume = new BlockVolume(wall.startPos, wall.endPos);
world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.Air); world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.Air);
} }
function fillWall(wall: Wall, block: string) { function fillWall(wall: Wall, block: string) {
let volume: BlockVolume = new BlockVolume(wall.startPos, wall.endPos); const volume: BlockVolume = new BlockVolume(wall.startPos, wall.endPos);
world.getDimension("overworld").fillBlocks(volume, block); world.getDimension("overworld").fillBlocks(volume, block);
} }
function startLevel(commandBlockPos: Vector3) { function startLevel(commandBlockPos: Vector3) {
let volume: BlockVolume = new BlockVolume(commandBlockPos, commandBlockPos); const volume: BlockVolume = new BlockVolume(commandBlockPos, commandBlockPos);
world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.RedstoneBlock); world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.RedstoneBlock);
} }
BlockTypes;
export { Wall, clearWall, fillWall, startLevel }; export { Wall, clearWall, fillWall, startLevel };

View File

@@ -172,13 +172,13 @@ class ParticleColumn {
generatePoints() { generatePoints() {
for (let layer = 0; layer < this.layerCount; layer++) { for (let layer = 0; layer < this.layerCount; layer++) {
let layerRadius = this.radius - layer; const layerRadius = this.radius - layer;
for (let point = 0; point < this.pointsPerLayer; point++) { for (let point = 0; point < this.pointsPerLayer; point++) {
let angle = (point / this.pointsPerLayer) * (Math.PI * 2); const angle = (point / this.pointsPerLayer) * (Math.PI * 2);
this.anglePerLayer.push(angle); this.anglePerLayer.push(angle);
let x = Math.cos(angle) * layerRadius; const x = Math.cos(angle) * layerRadius;
let z = Math.sin(angle) * layerRadius; const z = Math.sin(angle) * layerRadius;
let y = layer; const y = layer;
this.points.push(Vector3Add(this.pos, vector3(x, y, z))); this.points.push(Vector3Add(this.pos, vector3(x, y, z)));
} }
} }
@@ -186,20 +186,17 @@ class ParticleColumn {
update() { update() {
//update each point by increasing the angle by the speed //update each point by increasing the angle by the speed
let layerCount = 0;
let pointCount = 0;
this.tickCounter++; this.tickCounter++;
if (this.tickCounter % 2 == 0) { if (this.tickCounter % 2 == 0) {
this.points.forEach((point, index) => { this.points.forEach((point, index) => {
let layer = Math.floor(index / this.pointsPerLayer); const layer = Math.floor(index / this.pointsPerLayer);
let angle = this.anglePerLayer[index]; let angle = this.anglePerLayer[index];
angle += this.speed * (layer / 5); angle += this.speed * (layer / 5);
this.anglePerLayer[index] = angle; this.anglePerLayer[index] = angle;
let layerRadius = this.radius - Math.floor(index / this.pointsPerLayer); const calcAngle = angle;
let calcAngle = angle; const x = Math.cos(calcAngle) * this.radius;
let x = Math.cos(calcAngle) * this.radius; const z = Math.sin(calcAngle) * this.radius;
let z = Math.sin(calcAngle) * this.radius; const y = Math.floor(index / this.pointsPerLayer) + (this.tickCounter % 2);
let y = Math.floor(index / this.pointsPerLayer) + (this.tickCounter % 2);
this.points[index] = Vector3Add(this.pos, vector3(x, y, z)); this.points[index] = Vector3Add(this.pos, vector3(x, y, z));
}); });
} }

View File

@@ -1,13 +1,15 @@
import { system } from "@minecraft/server"; import { system } from "@minecraft/server";
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
function delayedRun(callback: Function, delay: number) { function delayedRun(callback: Function, delay: number) {
let timer = system.runTimeout(() => { const timer = system.runTimeout(() => {
callback(); callback();
system.clearRun(timer); system.clearRun(timer);
}, delay); }, delay);
} }
function delay(t: number) { function delay(t: number) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
return new Promise((r: any) => { return new Promise((r: any) => {
system.runTimeout(r, t); system.runTimeout(r, t);
}); });

View File

@@ -1,8 +1,8 @@
import { LevelBlockCondition, LevelLeverCondition } from "../Commandeer/level/levelTypes"; import { LevelBlockCondition } from "../Commandeer/level/levelTypes";
import { vector3 } from "../Commandeer/utils/vectorUtils"; import { vector3 } from "../Commandeer/utils/vectorUtils";
import { MinecraftBlockTypes } from "../vanilla-data/mojang-block"; import { MinecraftBlockTypes } from "../vanilla-data/mojang-block";
let levelIntroConditions: LevelBlockCondition = { const levelIntroConditions: LevelBlockCondition = {
conditions: [ conditions: [
{ {
block: MinecraftBlockTypes.EmeraldBlock, block: MinecraftBlockTypes.EmeraldBlock,

View File

@@ -1,8 +1,8 @@
import { LevelBlockCondition, LevelLeverCondition } from "../Commandeer/level/levelTypes"; import { LevelBlockCondition } from "../Commandeer/level/levelTypes";
import { vector3 } from "../Commandeer/utils/vectorUtils"; import { vector3 } from "../Commandeer/utils/vectorUtils";
import { MinecraftBlockTypes } from "../vanilla-data/mojang-block"; import { MinecraftBlockTypes } from "../vanilla-data/mojang-block";
let mission2part1Conditions: LevelBlockCondition = { const mission2part1Conditions: LevelBlockCondition = {
conditions: [ conditions: [
{ {
position: vector3(2455, -2, 11), position: vector3(2455, -2, 11),

View File

@@ -1,8 +1,8 @@
import { LevelBlockCondition, LevelLeverCondition } from "../Commandeer/level/levelTypes"; import { LevelBlockCondition } from "../Commandeer/level/levelTypes";
import { vector3 } from "../Commandeer/utils/vectorUtils"; import { vector3 } from "../Commandeer/utils/vectorUtils";
import { MinecraftBlockTypes } from "../vanilla-data/mojang-block"; import { MinecraftBlockTypes } from "../vanilla-data/mojang-block";
let mission2part2Conditions: LevelBlockCondition = { const mission2part2Conditions: LevelBlockCondition = {
conditions: [ conditions: [
{ {
position: vector3(2467, -2, 11), position: vector3(2467, -2, 11),

View File

@@ -1,8 +1,5 @@
import { BlockType, Vector3, world } from "@minecraft/server"; import { Vector3, world } from "@minecraft/server";
import Level from "../Commandeer/level/level"; import Level from "../Commandeer/level/level";
import { leverOn } from "../Commandeer/level/levelTypes";
import { teleportAgent, isAgentAt } from "../Commandeer/utils/agentUtils";
import { startLevel } from "../Commandeer/utils/levelUtils";
import { vector3 } from "../Commandeer/utils/vectorUtils"; import { vector3 } from "../Commandeer/utils/vectorUtils";
import { levelIntroConditions } from "../levelConditions/levelIntro"; import { levelIntroConditions } from "../levelConditions/levelIntro";
import { CURRENT_LEVEL, mindKeeper } from "../main"; import { CURRENT_LEVEL, mindKeeper } from "../main";
@@ -26,8 +23,7 @@ const blockPositions: Vector3[] = [
vector3(2464, 12, 108), vector3(2464, 12, 108),
]; ];
let currentBlockSequence: string[] = []; const currentBlockSequence: string[] = [];
let currentBlockSeuqenceIndex: number[] = [];
const blockCycle: string[] = [ const blockCycle: string[] = [
// MinecraftBlockTypes.RedstoneBlock, // MinecraftBlockTypes.RedstoneBlock,
@@ -37,7 +33,7 @@ const blockCycle: string[] = [
MinecraftBlockTypes.LapisBlock, MinecraftBlockTypes.LapisBlock,
]; ];
let buttonPressed: boolean[] = buttonPositions.map(() => false); const buttonPressed: boolean[] = buttonPositions.map(() => false);
const levelIntro: Level = new Level( const levelIntro: Level = new Level(
() => { () => {
@@ -46,9 +42,9 @@ const levelIntro: Level = new Level(
// startLevel(levelIntroCommandBlockPos); // startLevel(levelIntroCommandBlockPos);
// teleportAgent(levelIntroStartPosition); // teleportAgent(levelIntroStartPosition);
blockPositions.forEach((pos) => { blockPositions.forEach((pos) => {
let block = world.getDimension("overworld").getBlock(pos); const block = world.getDimension("overworld").getBlock(pos);
let index = blockPositions.indexOf(pos); const index = blockPositions.indexOf(pos);
let blockType = block!.type; const blockType = block!.type;
currentBlockSequence[index] = blockType.id; currentBlockSequence[index] = blockType.id;
}); });
}, },
@@ -56,21 +52,21 @@ const levelIntro: Level = new Level(
Pupeteer.setActionBar("%message.intro.make"); Pupeteer.setActionBar("%message.intro.make");
buttonPositions.forEach((pos) => { buttonPositions.forEach((pos) => {
let block = world.getDimension("overworld").getBlock(pos); const block = world.getDimension("overworld").getBlock(pos);
if (!block) return; if (!block) return;
let index = buttonPositions.indexOf(pos); const index = buttonPositions.indexOf(pos);
let prevState = buttonPressed[index]; const prevState = buttonPressed[index];
let currentState = block!.getRedstonePower()! > 0; const currentState = block!.getRedstonePower()! > 0;
if (currentState && !prevState) { if (currentState && !prevState) {
buttonPressed[index] = true; buttonPressed[index] = true;
//NextBlock //NextBlock
let nextBlock = currentBlockSequence[index]; const nextBlock = currentBlockSequence[index];
let nextIndex = blockCycle.indexOf(nextBlock); let nextIndex = blockCycle.indexOf(nextBlock);
nextIndex = (nextIndex + 1) % blockCycle.length; nextIndex = (nextIndex + 1) % blockCycle.length;
currentBlockSequence[index] = blockCycle[nextIndex]; currentBlockSequence[index] = blockCycle[nextIndex];
//Update the block //Update the block
let blockPos = blockPositions[index]; const blockPos = blockPositions[index];
world.getDimension("overworld").getBlock(blockPos)!.setType(blockCycle[nextIndex]); world.getDimension("overworld").getBlock(blockPos)!.setType(blockCycle[nextIndex]);
} }
@@ -87,13 +83,11 @@ const levelIntro: Level = new Level(
mindKeeper.increment(CURRENT_LEVEL); mindKeeper.increment(CURRENT_LEVEL);
}, },
() => { () => {
let counter = 0;
let isComplete = true; let isComplete = true;
levelIntroConditions.conditions.forEach((condition) => { levelIntroConditions.conditions.forEach((condition) => {
let blockInworld = world.getDimension("overworld").getBlock(condition.position); const blockInworld = world.getDimension("overworld").getBlock(condition.position);
if (blockInworld?.type.id !== condition.block) { if (blockInworld?.type.id !== condition.block) {
isComplete = false; isComplete = false;
counter++;
} }
}); });
if (isComplete) { if (isComplete) {
@@ -103,8 +97,8 @@ const levelIntro: Level = new Level(
}, },
() => { () => {
blockPositions.forEach((pos) => { blockPositions.forEach((pos) => {
let block = world.getDimension("overworld").getBlock(pos); const block = world.getDimension("overworld").getBlock(pos);
let randomBlock = blockCycle[Math.floor(Math.random() * blockCycle.length)]; const randomBlock = blockCycle[Math.floor(Math.random() * blockCycle.length)];
block!.setType(randomBlock); block!.setType(randomBlock);
}); });
} }

View File

@@ -9,7 +9,7 @@ const level1StartPosition: Vector3 = vector3(2451, -2, 57);
const level1AgentFacing: Vector3 = vector3(0, 0, -1); const level1AgentFacing: Vector3 = vector3(0, 0, -1);
const Level1EndPosition: Vector3 = vector3(2451, -2, 41); const Level1EndPosition: Vector3 = vector3(2451, -2, 41);
let mission1part1: AbstractAgentTrackMission = new AbstractAgentTrackMission( const mission1part1: AbstractAgentTrackMission = new AbstractAgentTrackMission(
"mission1part1", "mission1part1",
level1StartPosition, level1StartPosition,
level1AgentFacing, level1AgentFacing,

View File

@@ -8,9 +8,7 @@ const level2StartPosition: Vector3 = vector3(2446, -2, 40);
const level2AgentFacing: Vector3 = vector3(1, 0, 0); const level2AgentFacing: Vector3 = vector3(1, 0, 0);
const Level2EndPosition: Vector3 = vector3(2446, -2, 30); const Level2EndPosition: Vector3 = vector3(2446, -2, 30);
const level2ResetCommandBlockPos: Vector3 = vector3(56, 68, 211); const mission1part2: AbstractAgentTrackMission = new AbstractAgentTrackMission(
let mission1part2: AbstractAgentTrackMission = new AbstractAgentTrackMission(
"mission1part2", "mission1part2",
level2StartPosition, level2StartPosition,
level2AgentFacing, level2AgentFacing,

View File

@@ -7,9 +7,7 @@ const level3AgentFacing: Vector3 = vector3(0, 0, -1);
const level3StartPosition: Vector3 = vector3(2447, -2, 30); const level3StartPosition: Vector3 = vector3(2447, -2, 30);
const level3EndPosition: Vector3 = vector3(2451, -2, 18); const level3EndPosition: Vector3 = vector3(2451, -2, 18);
const level3ResetCommandBlockPos: Vector3 = vector3(56, 68, 211); const mission1part3: AbstractAgentTrackMission = new AbstractAgentTrackMission(
let mission1part3: AbstractAgentTrackMission = new AbstractAgentTrackMission(
"mission1part3", "mission1part3",
level3StartPosition, level3StartPosition,
level3AgentFacing, level3AgentFacing,

View File

@@ -1,8 +1,8 @@
import { Vector3, world } from "@minecraft/server"; import { Vector3, world } from "@minecraft/server";
import Level from "../../Commandeer/level/level"; import Level from "../../Commandeer/level/level";
import pupeteer from "../../Commandeer/pupeteer"; import pupeteer from "../../Commandeer/pupeteer";
import { teleportAgent, isAgentAt, getAgentLocation, getAgent } from "../../Commandeer/utils/agentUtils"; import { teleportAgent, isAgentAt } from "../../Commandeer/utils/agentUtils";
import { vector3, Vector3Add, Vector3ToCommandString } from "../../Commandeer/utils/vectorUtils"; import { vector3 } from "../../Commandeer/utils/vectorUtils";
import { mindKeeper, CURRENT_LEVEL } from "../../main"; import { mindKeeper, CURRENT_LEVEL } from "../../main";
import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block"; import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block";
import { mission2part1Conditions } from "../../levelConditions/mission2part1Conditions"; import { mission2part1Conditions } from "../../levelConditions/mission2part1Conditions";
@@ -38,9 +38,9 @@ const mission2part1: Level = new Level(
//Check if the agent is at the end position //Check if the agent is at the end position
//than check if the level is correct //than check if the level is correct
let isComplete = false; let isComplete = false;
let isAgentAtEndPosition = isAgentAt(mission2part1EndPosition); const isAgentAtEndPosition = isAgentAt(mission2part1EndPosition);
if (isAgentAtEndPosition) { if (isAgentAtEndPosition) {
let isCorrect = checkBlockCondition(mission2part1Conditions); const isCorrect = checkBlockCondition(mission2part1Conditions);
if (isCorrect) { if (isCorrect) {
isComplete = true; isComplete = true;

View File

@@ -1,8 +1,8 @@
import { Vector3, world } from "@minecraft/server"; import { Vector3, world } from "@minecraft/server";
import Level from "../../Commandeer/level/level"; import Level from "../../Commandeer/level/level";
import pupeteer from "../../Commandeer/pupeteer"; import pupeteer from "../../Commandeer/pupeteer";
import { teleportAgent, isAgentAt, getAgentLocation, getAgent } from "../../Commandeer/utils/agentUtils"; import { teleportAgent, isAgentAt } from "../../Commandeer/utils/agentUtils";
import { vector3, Vector3Add, Vector3ToCommandString } from "../../Commandeer/utils/vectorUtils"; import { vector3 } from "../../Commandeer/utils/vectorUtils";
import { mindKeeper, CURRENT_LEVEL } from "../../main"; import { mindKeeper, CURRENT_LEVEL } from "../../main";
import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block"; import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block";
import { checkBlockCondition } from "../../Commandeer/level/levelTypes"; import { checkBlockCondition } from "../../Commandeer/level/levelTypes";
@@ -38,9 +38,9 @@ const mission2part2: Level = new Level(
//Check if the agent is at the end position //Check if the agent is at the end position
//than check if the level is correct //than check if the level is correct
let isComplete = false; let isComplete = false;
let isAgentAtEndPosition = isAgentAt(mission2part2EndPosition); const isAgentAtEndPosition = isAgentAt(mission2part2EndPosition);
if (isAgentAtEndPosition) { if (isAgentAtEndPosition) {
let isCorrect = checkBlockCondition(mission2part2Conditions); const isCorrect = checkBlockCondition(mission2part2Conditions);
if (isCorrect) { if (isCorrect) {
isComplete = true; isComplete = true;

View File

@@ -8,7 +8,7 @@ const level1StartPosition: Vector3 = vector3(2487, -2, 36);
const level1AgentFacing: Vector3 = vector3(1, 0, 0); const level1AgentFacing: Vector3 = vector3(1, 0, 0);
const Level1EndPosition: Vector3 = vector3(2488, -2, 57); const Level1EndPosition: Vector3 = vector3(2488, -2, 57);
let mission3part2: AbstractAgentTrackMission = new AbstractAgentTrackMission( const mission3part2: AbstractAgentTrackMission = new AbstractAgentTrackMission(
"mission3part2", "mission3part2",
level1StartPosition, level1StartPosition,
level1AgentFacing, level1AgentFacing,

View File

@@ -5,7 +5,6 @@ import {
MolangVariableMap, MolangVariableMap,
ChatSendAfterEvent, ChatSendAfterEvent,
Dimension, Dimension,
TicksPerSecond,
BlockVolume, BlockVolume,
ScriptEventCommandMessageAfterEvent, ScriptEventCommandMessageAfterEvent,
} from "@minecraft/server"; } from "@minecraft/server";
@@ -32,23 +31,16 @@ import mission1part1 from "./levels/mission1/mission1part1";
import mission1part2 from "./levels/mission1/mission1part2"; import mission1part2 from "./levels/mission1/mission1part2";
import mission1part3 from "./levels/mission1/mission1part3"; import mission1part3 from "./levels/mission1/mission1part3";
import mission2part1 from "./levels/mission2/mission2part1"; import mission2part1 from "./levels/mission2/mission2part1";
import { mission2part1Conditions } from "./levelConditions/mission2part1Conditions";
import mission2part2 from "./levels/mission2/mission2part2"; import mission2part2 from "./levels/mission2/mission2part2";
import { mission2part2Conditions } from "./levelConditions/mission2part2Conditions"; // eslint-disable-next-line @typescript-eslint/no-unused-vars
import Chalk from "./Commandeer/chalk"; import Chalk from "./Commandeer/chalk";
import mission3part1 from "./levels/mission3/mission3part1"; import mission3part1 from "./levels/mission3/mission3part1";
import mission3part2 from "./levels/mission3/mission3part2"; import mission3part2 from "./levels/mission3/mission3part2";
import mission3part3 from "./levels/mission3/mission3part3"; import mission3part3 from "./levels/mission3/mission3part3";
import { runEntityEventOnTag, setNPCDialog } from "./Commandeer/utils/entityUtils"; import { runEntityEventOnTag, setNPCDialog } from "./Commandeer/utils/entityUtils";
import { import { animationPlaying, playAnimation, setAmimationPlaying, SetFrame } from "./Commandeer/animations/animation";
animationPlaying,
ClonePos,
playAnimation,
setAmimationPlaying,
SetFrame,
} from "./Commandeer/animations/animation";
import { doNothingStupidTSIWantFilesNotAGiantAssMainFile } from "./triggers"; import { doNothingStupidTSIWantFilesNotAGiantAssMainFile } from "./triggers";
import { clearWall, fillWall, startLevel, Wall } from "./Commandeer/utils/levelUtils"; import { fillWall, startLevel, Wall } from "./Commandeer/utils/levelUtils";
import { drawArrow } from "./Commandeer/utils/arrow"; import { drawArrow } from "./Commandeer/utils/arrow";
import { import {
glassBreakingFrames, glassBreakingFrames,
@@ -71,7 +63,7 @@ export { mindKeeper, CURRENT_LEVEL, triggerManager, PREFIX, DEVELOPER_MODE };
// loadTriggers(); // loadTriggers();
// loadCommands(); // loadCommands();
triggerManager.RegisterFunctionTrigger("resetPath", (event) => { triggerManager.RegisterFunctionTrigger("resetPath", () => {
resetLightPath(); resetLightPath();
}); });
@@ -79,19 +71,16 @@ async function resetLightPath() {
world.getDimension("overworld").runCommand("/fill 2467 9 87 2468 9 105 air"); world.getDimension("overworld").runCommand("/fill 2467 9 87 2468 9 105 air");
} }
let introToGlassBreakTimer: number = 0;
const glassBreakTime = 1 * TicksPerSecond;
let isIntroToLevel1Sqeuence = false; let isIntroToLevel1Sqeuence = false;
let introTrail: Trail = new Trail("introTrail", 2, 25 / 5); const introTrail: Trail = new Trail("introTrail", 2, 25 / 5);
introTrail.fromTrail(startTrail); introTrail.fromTrail(startTrail);
let introToLevelTrail = new Trail("introToLevelTrail", 2, 74 / 2); const introToLevelTrail = new Trail("introToLevelTrail", 2, 74 / 2);
introToLevelTrail.fromTrail(IntroToLevel1Trail); introToLevelTrail.fromTrail(IntroToLevel1Trail);
//fill 2466 0 48 2469 -1 48 //fill 2466 0 48 2469 -1 48
let bilalBlock: Wall = { const bilalBlock: Wall = {
startPos: vector3(2466, 0, 48), startPos: vector3(2466, 0, 48),
endPos: vector3(2469, -1, 48), endPos: vector3(2469, -1, 48),
}; };
@@ -101,10 +90,11 @@ let prevCurrentLevel: number = 0;
let isBreaking: boolean = false; let isBreaking: boolean = false;
let airlockParticles = new ParticleColumn(vector3(2475.5, 10, 92), 2, 2, 3, 0.5, PARTICLES.point); const airlockParticles = new ParticleColumn(vector3(2475.5, 10, 92), 2, 2, 3, 0.5, PARTICLES.point);
let level1Particles = new ParticleColumn(vector3(2455, -1, 49), 1.1, 2, 4, 0.7, PARTICLES.balloon_gas_particle); const level1Particles = new ParticleColumn(vector3(2455, -1, 49), 1.1, 2, 4, 0.7, PARTICLES.balloon_gas_particle);
airlockParticles.generatePoints(); airlockParticles.generatePoints();
level1Particles.generatePoints();
let tickCounter = 0; let tickCounter = 0;
system.runInterval(() => { system.runInterval(() => {
tickCounter++; tickCounter++;
@@ -242,27 +232,32 @@ system.runInterval(() => {
} }
}); });
triggerManager.RegisterFunctionTrigger("lightPath", (event) => { triggerManager.RegisterFunctionTrigger("lightPath", () => {
lightUpPath(); lightUpPath();
}); });
Commands.register(PREFIX, "k3isgeweldig", () => {
world.sendMessage("K3 is geweldig! - Bram");
DEVELOPER_MODE = true;
});
//fill 2467 9 87 2468 9 105 redstone_block //fill 2467 9 87 2468 9 105 redstone_block
async function lightUpPath() { async function lightUpPath() {
let overworld: Dimension = world.getDimension("overworld"); const overworld: Dimension = world.getDimension("overworld");
let pos1 = vector3(2467, 9, 87); const pos1 = vector3(2467, 9, 87);
let pos2 = vector3(2468, 9, 105); const pos2 = vector3(2468, 9, 105);
for (let z = pos2.z; z >= pos1.z; z--) { for (let z = pos2.z; z >= pos1.z; z--) {
let volume: BlockVolume = new BlockVolume(vector3(pos1.x, pos1.y, z), vector3(pos1.x + 1, pos1.y, z)); const volume: BlockVolume = new BlockVolume(vector3(pos1.x, pos1.y, z), vector3(pos1.x + 1, pos1.y, z));
overworld.fillBlocks(volume, MinecraftBlockTypes.RedstoneBlock); overworld.fillBlocks(volume, MinecraftBlockTypes.RedstoneBlock);
await delay(4); await delay(4);
} }
// let pos2 = vector3(2468, 9, 105); // let pos2 = vector3(2468, 9, 105);
} }
let triggerAlarm = () => runEntityEventOnTag("alarmLights", "cc:add_rotating"); const triggerAlarm = () => runEntityEventOnTag("alarmLights", "cc:add_rotating");
let resetAlarm = () => runEntityEventOnTag("alarmLights", "cc:remove_rotating"); const resetAlarm = () => runEntityEventOnTag("alarmLights", "cc:remove_rotating");
world.afterEvents.worldInitialize.subscribe(() => { world.afterEvents.worldInitialize.subscribe(() => {
mindKeeper.registerStore(CURRENT_LEVEL, StoreType.number); mindKeeper.registerStore(CURRENT_LEVEL, StoreType.number);
@@ -283,11 +278,11 @@ world.beforeEvents.itemUseOn.subscribe((event) => {
}); });
async function randomExplosions() { async function randomExplosions() {
let pos1 = vector3(2465, 10, 82); const pos1 = vector3(2465, 10, 82);
let pos2 = vector3(2471, 18, 90); const pos2 = vector3(2471, 18, 90);
for (let i = 0; i < 5; i++) { for (let i = 0; i < 5; i++) {
let pos = vector3( const pos = vector3(
pos1.x + Math.random() * (pos2.x - pos1.x), pos1.x + Math.random() * (pos2.x - pos1.x),
pos1.y + Math.random() * (pos2.y - pos1.y), pos1.y + Math.random() * (pos2.y - pos1.y),
pos1.z + Math.random() * (pos2.z - pos1.z) pos1.z + Math.random() * (pos2.z - pos1.z)
@@ -299,14 +294,6 @@ async function randomExplosions() {
} }
} }
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() { function blowUpDoor() {
if (DEVELOPER_MODE) { if (DEVELOPER_MODE) {
world.sendMessage("Blowing up door"); world.sendMessage("Blowing up door");
@@ -369,7 +356,7 @@ world.afterEvents.chatSend.subscribe(async (event: ChatSendAfterEvent) => {
system.afterEvents.scriptEventReceive.subscribe((event) => { system.afterEvents.scriptEventReceive.subscribe((event) => {
if (event.id == "cc:getId") { if (event.id == "cc:getId") {
let id = event.message; const id = event.message;
if (DEVELOPER_MODE) { if (DEVELOPER_MODE) {
world.sendMessage("Script got the id " + id); world.sendMessage("Script got the id " + id);
} }
@@ -412,13 +399,13 @@ triggerManager.RegisterFunctionTrigger("tp", (event) => {
// end center pos /setblock 2490 -12 118 // end center pos /setblock 2490 -12 118
// start center pos /setblock 2489 10 118 // start center pos /setblock 2489 10 118
let pos = vector3(2489, 10, 118); const pos = vector3(2489, 10, 118);
let endPos = vector3(2490, -12, 118); const endPos = vector3(2490, -12, 118);
world.sendMessage(Vector3ToFancyString(Vector3Subtract(endPos, pos))); world.sendMessage(Vector3ToFancyString(Vector3Subtract(endPos, pos)));
//Find offset and tp player to end pos + offset so its seamless //Find offset and tp player to end pos + offset so its seamless
let playerPos = event.player.location; const playerPos = event.player.location;
let offset = Vector3Subtract(endPos, playerPos); const offset = Vector3Subtract(endPos, playerPos);
let finalPos = Vector3Add(pos, offset); const finalPos = Vector3Add(pos, offset);
event.player.teleport(finalPos); event.player.teleport(finalPos);
}); });
@@ -443,7 +430,7 @@ Commands.register(PREFIX, "info", (arg) => {
world.sendMessage("-----------------"); world.sendMessage("-----------------");
}); });
Commands.register(PREFIX, "kboom", (arg) => { Commands.register(PREFIX, "kboom", () => {
if (DEVELOPER_MODE) { if (DEVELOPER_MODE) {
(async () => { (async () => {
for (let i = 0; i < 10; i++) { for (let i = 0; i < 10; i++) {
@@ -455,20 +442,20 @@ Commands.register(PREFIX, "kboom", (arg) => {
} }
}); });
let openDoor = () => { const openDoor = () => {
runEntityEventOnTag("door", "cc:add_open"); runEntityEventOnTag("door", "cc:add_open");
if (DEVELOPER_MODE) { if (DEVELOPER_MODE) {
world.sendMessage("Opening door"); world.sendMessage("Opening door");
} }
}; };
let closeDoor = () => { const closeDoor = () => {
runEntityEventOnTag("door", "cc:remove_open"); runEntityEventOnTag("door", "cc:remove_open");
if (DEVELOPER_MODE) { if (DEVELOPER_MODE) {
world.sendMessage("Closing door"); world.sendMessage("Closing door");
} }
}; };
Commands.register(PREFIX, "restore", (arg) => { Commands.register(PREFIX, "restore", () => {
restoreDoor(); restoreDoor();
}); });
@@ -490,26 +477,15 @@ enum AirLockChamberState {
Empty, Empty,
} }
enum ExplosiveDoorState {
Closed,
Open,
}
let glassWindowState: GlassWindowState = GlassWindowState.Fixed; let glassWindowState: GlassWindowState = GlassWindowState.Fixed;
let explosiveDoorState: ExplosiveDoorState = ExplosiveDoorState.Closed;
const doorRoot: Vector3 = vector3(2465, 11, 94); const doorRoot: Vector3 = vector3(2465, 11, 94);
const glassWindowClonePos: ClonePos = { Commands.register(PREFIX, "breakGlass", () => {
point1: vector3(2465, 14, 94),
point2: vector3(2470, 11, 94),
};
Commands.register(PREFIX, "breakGlass", (arg) => {
breakGlassWindow(); breakGlassWindow();
glassWindowState = GlassWindowState.Broken; glassWindowState = GlassWindowState.Broken;
}); });
Commands.register(PREFIX, "restoreGlass", (arg) => { Commands.register(PREFIX, "restoreGlass", () => {
restoreGlassWindow(); restoreGlassWindow();
glassWindowState = GlassWindowState.Fixed; glassWindowState = GlassWindowState.Fixed;
}); });
@@ -529,11 +505,11 @@ async function CycleAirLockWater(fill: boolean, delayTime: number) {
return; return;
} }
setAmimationPlaying(true); setAmimationPlaying(true);
let frameCount = AirLockWaterFrames.length; const frameCount = AirLockWaterFrames.length;
for (let i = 0; i < frameCount; i++) { for (let i = 0; i < frameCount; i++) {
let frame = fill ? AirLockWaterFrames[i] : AirLockWaterFrames[frameCount - i - 1]; const frame = fill ? AirLockWaterFrames[i] : AirLockWaterFrames[frameCount - i - 1];
let blockToFill = fill ? "minecraft:water" : "minecraft:air"; const blockToFill = fill ? "minecraft:water" : "minecraft:air";
await world await world
.getDimension("overworld") .getDimension("overworld")
.runCommandAsync( .runCommandAsync(
@@ -552,7 +528,7 @@ let chamberState: AirLockChamberState = AirLockChamberState.Full;
//The airlock sequence is //The airlock sequence is
//Player enters FrontAirLockOutside //Player enters FrontAirLockOutside
//Front door opens //Front door opens
triggerManager.RegisterFunctionTrigger("FrontAirLockOutside", async (event) => { triggerManager.RegisterFunctionTrigger("FrontAirLockOutside", async () => {
if (chamberState == AirLockChamberState.Empty) { if (chamberState == AirLockChamberState.Empty) {
if (DEVELOPER_MODE) { if (DEVELOPER_MODE) {
world.sendMessage("Filling airlock"); world.sendMessage("Filling airlock");
@@ -567,7 +543,7 @@ triggerManager.RegisterFunctionTrigger("FrontAirLockOutside", async (event) => {
} }
}); });
triggerManager.RegisterFunctionTrigger("TempleFrontDoor", async (event) => { triggerManager.RegisterFunctionTrigger("TempleFrontDoor", async () => {
if (mindKeeper.get(CURRENT_LEVEL) == 8) { if (mindKeeper.get(CURRENT_LEVEL) == 8) {
closeDoor(); closeDoor();
} }
@@ -578,7 +554,7 @@ triggerManager.RegisterFunctionTrigger("TempleFrontDoor", async (event) => {
} }
}); });
triggerManager.RegisterFunctionTrigger("level1start", async (event) => { triggerManager.RegisterFunctionTrigger("level1start", async () => {
// This is after the player talks to suki // This is after the player talks to suki
if (mindKeeper.get(CURRENT_LEVEL) == 9) { if (mindKeeper.get(CURRENT_LEVEL) == 9) {
mindKeeper.increment(CURRENT_LEVEL); mindKeeper.increment(CURRENT_LEVEL);
@@ -589,7 +565,7 @@ triggerManager.RegisterFunctionTrigger("level1start", async (event) => {
//Front door closes //Front door closes
//Water drains //Water drains
//Back door opens //Back door opens
triggerManager.RegisterFunctionTrigger("FrontAirLockInside", async (event) => { triggerManager.RegisterFunctionTrigger("FrontAirLockInside", async () => {
if (frontAirlockState == AirLockState.Open) { if (frontAirlockState == AirLockState.Open) {
await PlayFrontDoorCloseAnimation(); await PlayFrontDoorCloseAnimation();
frontAirlockState = AirLockState.Closed; frontAirlockState = AirLockState.Closed;
@@ -612,7 +588,7 @@ triggerManager.RegisterFunctionTrigger("FrontAirLockInside", async (event) => {
//Player enters BackAirLockOutside //Player enters BackAirLockOutside
//Back door closes //Back door closes
triggerManager.RegisterFunctionTrigger("BackAirLockOutside", async (event) => { triggerManager.RegisterFunctionTrigger("BackAirLockOutside", async () => {
if (backAirlockState == AirLockState.Open) { if (backAirlockState == AirLockState.Open) {
world.sendMessage("Closing back door"); world.sendMessage("Closing back door");
await PlayBackDoorCloseAnimation(); await PlayBackDoorCloseAnimation();
@@ -622,8 +598,8 @@ triggerManager.RegisterFunctionTrigger("BackAirLockOutside", async (event) => {
//#endregion Airlock //#endregion Airlock
let activateAirlockLights = () => runEntityEventOnTag("airlockLights", "cc:add_rotating"); const activateAirlockLights = () => runEntityEventOnTag("airlockLights", "cc:add_rotating");
let deactivateAirlockLights = () => runEntityEventOnTag("airlockLights", "cc:remove_rotating"); const deactivateAirlockLights = () => runEntityEventOnTag("airlockLights", "cc:remove_rotating");
function resetAirLock() { function resetAirLock() {
SetFrontDoorClosed(); SetFrontDoorClosed();
@@ -636,42 +612,45 @@ function resetAirLock() {
glassWindowState = GlassWindowState.Fixed; glassWindowState = GlassWindowState.Fixed;
} }
Commands.register(PREFIX, "resetAirlock", (arg) => resetAirLock); Commands.register(PREFIX, "resetAirlock", () => resetAirLock);
let frontDoorRoot: Vector3 = vector3(2474, 11, 94); const frontDoorRoot: Vector3 = vector3(2474, 11, 94);
let backDoorRoot: Vector3 = vector3(2472, 11, 100); const backDoorRoot: Vector3 = vector3(2472, 11, 100);
const frameDuration = 7; const frameDuration = 7;
let SetFrontDoorClosed = () => SetFrame(FrontAirLockOpenFrames[0], frontDoorRoot); const SetFrontDoorClosed = () => SetFrame(FrontAirLockOpenFrames[0], frontDoorRoot);
let SetFrontDoorOpen = () => SetFrame(FrontAirLockOpenFrames[FrontAirLockOpenFrames.length - 1], frontDoorRoot); // eslint-disable-next-line @typescript-eslint/no-unused-vars
let PlayFrontDoorOpenAnimation = async () => { const SetFrontDoorOpen = () => SetFrame(FrontAirLockOpenFrames[FrontAirLockOpenFrames.length - 1], frontDoorRoot);
const PlayFrontDoorOpenAnimation = async () => {
playAnimation(FrontAirLockOpenFrames, frameDuration, false, frontDoorRoot); playAnimation(FrontAirLockOpenFrames, frameDuration, false, frontDoorRoot);
if (mindKeeper.get(CURRENT_LEVEL) == 0) { if (mindKeeper.get(CURRENT_LEVEL) == 0) {
mindKeeper.increment(CURRENT_LEVEL); mindKeeper.increment(CURRENT_LEVEL);
} }
}; };
let PlayFrontDoorCloseAnimation = async () => playAnimation(FrontAirLockOpenFrames, frameDuration, true, frontDoorRoot); const PlayFrontDoorCloseAnimation = async () =>
playAnimation(FrontAirLockOpenFrames, frameDuration, true, frontDoorRoot);
let SetBackDoorClosed = () => SetFrame(BackAirLockOpenFrames[0], backDoorRoot); const SetBackDoorClosed = () => SetFrame(BackAirLockOpenFrames[0], backDoorRoot);
let SetBackDoorOpen = () => SetFrame(BackAirLockOpenFrames[BackAirLockOpenFrames.length - 1], backDoorRoot); // eslint-disable-next-line @typescript-eslint/no-unused-vars
let PlayBackDoorOpenAnimation = async () => playAnimation(BackAirLockOpenFrames, frameDuration, false, backDoorRoot); const SetBackDoorOpen = () => SetFrame(BackAirLockOpenFrames[BackAirLockOpenFrames.length - 1], backDoorRoot);
let PlayBackDoorCloseAnimation = async () => const PlayBackDoorOpenAnimation = async () => playAnimation(BackAirLockOpenFrames, frameDuration, false, backDoorRoot);
const PlayBackDoorCloseAnimation = async () =>
playAnimation(BackAirLockOpenFrames, frameDuration, true, backDoorRoot, true); playAnimation(BackAirLockOpenFrames, frameDuration, true, backDoorRoot, true);
let FillAirlockWater = async () => CycleAirLockWater(true, frameDuration / 1.5); const FillAirlockWater = async () => CycleAirLockWater(true, frameDuration / 1.5);
let EmptyAirlockWater = async () => { const EmptyAirlockWater = async () => {
await CycleAirLockWater(false, frameDuration / 1.5); await CycleAirLockWater(false, frameDuration / 1.5);
if (mindKeeper.get(CURRENT_LEVEL) == 1) { if (mindKeeper.get(CURRENT_LEVEL) == 1) {
mindKeeper.increment(CURRENT_LEVEL); mindKeeper.increment(CURRENT_LEVEL);
} }
}; };
triggerManager.RegisterFunctionTrigger("openFrontDoor", (event) => PlayFrontDoorOpenAnimation()); triggerManager.RegisterFunctionTrigger("openFrontDoor", () => PlayFrontDoorOpenAnimation());
triggerManager.RegisterFunctionTrigger("closeFrontDoor", (event) => PlayFrontDoorCloseAnimation()); triggerManager.RegisterFunctionTrigger("closeFrontDoor", () => PlayFrontDoorCloseAnimation());
triggerManager.RegisterFunctionTrigger("openBackDoor", (event) => PlayBackDoorOpenAnimation()); triggerManager.RegisterFunctionTrigger("openBackDoor", () => PlayBackDoorOpenAnimation());
triggerManager.RegisterFunctionTrigger("closeBackDoor", (event) => PlayBackDoorCloseAnimation()); triggerManager.RegisterFunctionTrigger("closeBackDoor", () => PlayBackDoorCloseAnimation());
triggerManager.RegisterFunctionTrigger("fillAirlock", (event) => FillAirlockWater()); triggerManager.RegisterFunctionTrigger("fillAirlock", () => FillAirlockWater());
triggerManager.RegisterFunctionTrigger("emptyAirlock", (event) => EmptyAirlockWater()); triggerManager.RegisterFunctionTrigger("emptyAirlock", () => EmptyAirlockWater());

View File

@@ -1,8 +1,7 @@
import { Vector3 } from "@minecraft/server";
import { TrailType } from "../Commandeer/trail/trailTypes"; import { TrailType } from "../Commandeer/trail/trailTypes";
import { vector3 } from "../Commandeer/utils/vectorUtils"; import { vector3 } from "../Commandeer/utils/vectorUtils";
let startTrail: TrailType = { const startTrail: TrailType = {
name: "startTrail", name: "startTrail",
points: [ points: [
{ index: 0, position: vector3(2493.5, 38.1, 88.5) }, { index: 0, position: vector3(2493.5, 38.1, 88.5) },

View File

@@ -1,9 +1,5 @@
import { BlockVolume, Dimension, world } from "@minecraft/server"; import { world } from "@minecraft/server";
import { CCTrigger } from "./Commandeer/Trigger/CCTrigger"; import { triggerManager } from "./main";
import { mindKeeper, triggerManager } from "./main";
import { vector3 } from "./Commandeer/utils/vectorUtils";
import { delay } from "./Commandeer/utils/waitUtil";
import { MinecraftBlockTypes } from "./vanilla-data/mojang-block";
function doNothingStupidTSIWantFilesNotAGiantAssMainFile() { function doNothingStupidTSIWantFilesNotAGiantAssMainFile() {
triggerManager.RegisterFunctionTrigger("helpme", (event) => { triggerManager.RegisterFunctionTrigger("helpme", (event) => {