This commit is contained in:
2024-08-21 16:15:22 +02:00
parent cd5f473460
commit 35af9ffc97
38 changed files with 1122 additions and 1090 deletions

View File

@@ -139,11 +139,19 @@ export class Maker {
} else {
map.setColorRGB("variable.color", { red: 0, green: 255, blue: 0 });
const particleData: MolangVariableMap = new MolangVariableMap();
particleData.setColorRGB("variable.color", {
red: 1,
green: 1,
blue: 1,
});
if (color == PaletteColor.Red) {
particleData.setColorRGB("variable.color", {
red: 1,
green: 0,
blue: 0,
});
} else if (color == PaletteColor.White) {
particleData.setColorRGB("variable.color", {
red: 1,
green: 1,
blue: 1,
});
}
spawnParticle(vector3(x, y + 0.1, z), "codecosmos:point", particleData);
}
}
@@ -162,16 +170,16 @@ export class Maker {
(trigger.point1.y + trigger.point2.y) / 2,
(trigger.point1.z + trigger.point2.z) / 2
);
const distnaces = players.map((player) => {
const distances = players.map((player) => {
return {
player: player,
distance: vector3Distance(player.location, triggerCenter),
};
});
distnaces.sort((a, b) => a.distance - b.distance);
const closestPlayer = distnaces[0].player;
const distance = distnaces[0].distance;
distances.sort((a, b) => a.distance - b.distance);
const closestPlayer = distances[0].player;
const distance = distances[0].distance;
if (distance > 25) return;

View File

@@ -69,14 +69,14 @@ export class Trigger {
}
Update() {
world
.getDimension("overworld")
.getEntities({ type: "minecraft:player" })
.forEach((player) => {
//Check if the distance between the player and the trigger is less than the width of the trigger
// if (this.hasPlayerEnterdTrigger(player.location)) {
// world.sendMessage(`Player ${player.nameTag} is in trigger`);
// }
});
// world
// .getDimension("overworld")
// .getEntities({ type: "minecraft:player" })
// .forEach((player) => {
// //Check if the distance between the player and the trigger is less than the width of the trigger
// // if (this.hasPlayerEnterdTrigger(player.location)) {
// // world.sendMessage(`Player ${player.nameTag} is in trigger`);
// // }
// });
}
}

View File

@@ -0,0 +1,66 @@
import { Vector3, world } from "@minecraft/server";
import { Vector3ToCommandString } from "../utils/vectorUtils";
import { delay } from "../utils/waitUtil";
let animationPlaying = false;
function setAmimationPlaying(value: boolean) {
animationPlaying = value;
}
function getAnimationPlaying() {
return animationPlaying;
}
class ClonePos {
point1: Vector3;
point2: Vector3;
constructor(point1: Vector3, point2: Vector3) {
this.point1 = point1;
this.point2 = point2;
}
}
async function SetFrame(frame: ClonePos, destination: Vector3) {
await world
.getDimension("overworld")
.runCommandAsync(
`/clone ${Vector3ToCommandString(frame.point1)} ${Vector3ToCommandString(frame.point2)} ${Vector3ToCommandString(
destination
)}`
);
}
async function playAnimation(
frames: ClonePos[],
delayTime: number,
reverse: boolean,
destination: Vector3,
force: boolean = false
) {
if (animationPlaying && !force) {
world.sendMessage("Animation already playing");
return;
}
let frameCount = frames.length;
if (!force) {
animationPlaying = true;
}
for (let i = 0; i < frameCount; i++) {
let frame = reverse ? frames[frameCount - i - 1] : frames[i];
await world
.getDimension("overworld")
.runCommandAsync(
`/clone ${Vector3ToCommandString(frame.point1)} ${Vector3ToCommandString(
frame.point2
)} ${Vector3ToCommandString(destination)}`
);
await delay(delayTime);
}
if (!force) {
animationPlaying = false;
}
}
export { SetFrame, ClonePos, playAnimation, animationPlaying, setAmimationPlaying, getAnimationPlaying };

View File

@@ -0,0 +1,74 @@
import { Vector3, world } from "@minecraft/server";
import Level from "./level";
import pupeteer from "../pupeteer";
import { teleportAgent, isAgentAt, getAgentLocation, getAgent } from "../utils/agentUtils";
import { startLevel } from "../utils/levelUtils";
import { vector3, Vector3Add, Vector3ToCommandString } from "../utils/vectorUtils";
import { mindKeeper, CURRENT_LEVEL } from "../../main";
import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block";
class AbstractAgentTrackMission extends Level {
levelid: string;
constructor(
levelid: string,
agentStartPositon: Vector3,
agentEndPosition: Vector3,
startLevelCommandBlockPos: Vector3
) {
super(
() => {
pupeteer.sendWorldMessage(`%message.${levelid}.started`);
pupeteer.setTitleTimed(`%message.${levelid}.name`, 2.5);
startLevel(startLevelCommandBlockPos);
teleportAgent(agentStartPositon);
},
() => {
pupeteer.setActionBar(`%message.${levelid}.make`);
},
() => {
pupeteer.clearActionBar();
pupeteer.sendWorldMessage(`%message.${levelid}.complete`);
pupeteer.setTitleTimed(`%message.${levelid}.complete`, 2.5);
mindKeeper.increment(CURRENT_LEVEL);
},
() => {
let isComplete = false;
let isOutOfBounds = false;
let agentPos = getAgentLocation();
let blockLava = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -7, 0)));
let blockAir = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0)));
if (
blockLava &&
blockLava.type.id === MinecraftBlockTypes.Lava &&
blockAir &&
blockAir.type.id === MinecraftBlockTypes.Air
) {
isOutOfBounds = true;
}
if (isAgentAt(agentEndPosition)) {
isComplete = true;
}
if (isOutOfBounds) {
pupeteer.sendWorldMessage(`%message.outofbounds`);
pupeteer.setTitleTimed(`%message.outofbounds`, 2.5);
// world.getDimension("overworld").runCommand("/kill @e[type=agent]");
world.getDimension("overworld").runCommand("execute as @p run codebuilder runtime stop @s");
teleportAgent(agentStartPositon);
return false;
} else if (isComplete) {
return true;
}
return false;
}
);
this.levelid = levelid;
}
}
export default AbstractAgentTrackMission;

View File

@@ -1,4 +1,4 @@
import { BlockType, Vector3, World } from "@minecraft/server";
import { BlockType, Vector3, world, World } from "@minecraft/server";
export type blockCondition = {
block: string;
@@ -42,3 +42,14 @@ export type AgentNoGoZone = {
export type LevelNoGoZone = {
zones: AgentNoGoZone[];
};
export const checkBlockCondition = (condition: LevelBlockCondition): boolean => {
let isComplete: boolean = true;
condition.conditions.forEach((condition) => {
let block = world.getDimension("overworld").getBlock(condition.position);
if (block!.typeId != condition.block) {
isComplete = false;
}
});
return isComplete;
};

View File

@@ -29,7 +29,6 @@ enum StoreType {
*/
class Mindkeeper {
registerdStores: Array<Store> = [];
// propertyManager = new DynamicPropertiesDefinition();
world: World;
initialised: boolean = false;
debugLog: string[] = [];
@@ -75,7 +74,6 @@ class Mindkeeper {
registerToWorld() {
for (let i = 0; i < this.registerdStores.length; i++) {
let isAlreadyDefined = true;
try {
let test = this.world.getDynamicProperty(this.registerdStores[i].getName());
if (test === undefined) {
@@ -218,9 +216,8 @@ class Mindkeeper {
if (command === "!deleteStoresConfirm") {
this.getStores().forEach((store) => {
this.world.sendMessage(`Deleting ${store.getName()}`);
this.world.sendMessage("This feature no longer works, thanks minecraft ");
// this.world.dynami(store.getName());
});
this.world.clearDynamicProperties();
this.secondWarning = false;
}
}

View File

@@ -1,10 +1,22 @@
import { Entity, Vector3, world } from "@minecraft/server";
import { Vector3ToString, vector3 } from "./vectorUtils";
import { mindKeeper } from "../../main";
function teleportAgent(position: Vector3) {
world
.getDimension("overworld")
.runCommand(`/execute as @a run tp @e[type=agent] ${position.x} ${position.y} ${position.z}`);
//Make a facing with vector3
type Facing = Vector3;
function teleportAgent(position: Vector3, facing: Vector3 = vector3(0, 0, 0)): void {
if (facing == vector3(0, 0, 0)) {
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}`
);
}
}
function isAgentAt(position: Vector3): boolean {

View File

@@ -0,0 +1,15 @@
import { system, world } from "@minecraft/server";
function runEntityEventOnTag(tag: string, event: string) {
system.run(() => {
world.getDimension("overworld").runCommand(`/event entity @e[tag=${tag}] ${event}`);
});
}
function setNPCDialog(npcTag: string, dialogId: string) {
system.run(() => {
world.getDimension("overworld").runCommand(`/dialogue change @e[tag=${npcTag}] ${dialogId} @a`);
});
}
export { runEntityEventOnTag, setNPCDialog };

View File

@@ -11,7 +11,7 @@ function clearWall(wall: Wall) {
world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.Air);
}
function fillWall(wall: Wall, block: BlockType) {
function fillWall(wall: Wall, block: string) {
let volume: BlockVolume = new BlockVolume(wall.startPos, wall.endPos);
world.getDimension("overworld").fillBlocks(volume, block);
}

View File

@@ -1,5 +1,31 @@
import { Vector3 } from "@minecraft/server";
enum Direction {
North = 0,
East = 1,
South = 2,
West = 3,
Up = 4,
Down = 5,
}
function directionToVector3(direction: Direction): Vector3 {
switch (direction) {
case Direction.North:
return vector3(0, 0, -1);
case Direction.East:
return vector3(1, 0, 0);
case Direction.South:
return vector3(0, 0, 1);
case Direction.West:
return vector3(-1, 0, 0);
case Direction.Up:
return vector3(0, 1, 0);
case Direction.Down:
return vector3(0, -1, 0);
}
}
function vector3(x: number, y: number, z: number): Vector3 {
return { x: x, y: y, z: z };
}
@@ -55,6 +81,8 @@ function vector3Distance(vector1: Vector3, vector2: Vector3): number {
}
export {
Direction,
directionToVector3,
Vector3ToString,
Vector3ToFancyString,
Vector3Add,

View File

@@ -1,141 +0,0 @@
import { BlockType, Vector3 } from "@minecraft/server";
import { LevelBlockCondition, LevelNoGoZone } from "../Commandeer/level/levelTypes";
import { vector3 } from "../Commandeer/utils/vectorUtils";
import { MinecraftBlockTypes } from "../vanilla-data/mojang-block";
let level1Conditions: LevelBlockCondition = {
conditions: [
{
block: MinecraftBlockTypes.Air,
position: vector3(55, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(56, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(57, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(58, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(59, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(61, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(62, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(63, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(65, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(66, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(67, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(69, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(70, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(71, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(72, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(73, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(74, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(74, 70, 216),
},
],
};
let level1NoGoZones: LevelNoGoZone = {
zones: [
{ position: vector3(55, 70, 215) },
{ position: vector3(56, 70, 215) },
{ position: vector3(57, 70, 215) },
{ position: vector3(58, 70, 215) },
{ position: vector3(59, 70, 215) },
{ position: vector3(60, 70, 215) },
{ position: vector3(61, 70, 215) },
{ position: vector3(62, 70, 215) },
{ position: vector3(63, 70, 215) },
{ position: vector3(64, 70, 215) },
{ position: vector3(65, 70, 215) },
{ position: vector3(66, 70, 215) },
{ position: vector3(67, 70, 215) },
{ position: vector3(68, 70, 215) },
{ position: vector3(69, 70, 215) },
{ position: vector3(70, 70, 215) },
{ position: vector3(71, 70, 215) },
{ position: vector3(72, 70, 215) },
{ position: vector3(73, 70, 215) },
{ position: vector3(74, 70, 215) },
{ position: vector3(55, 70, 217) },
{ position: vector3(56, 70, 217) },
{ position: vector3(57, 70, 217) },
{ position: vector3(58, 70, 217) },
{ position: vector3(59, 70, 217) },
{ position: vector3(60, 70, 217) },
{ position: vector3(61, 70, 217) },
{ position: vector3(62, 70, 217) },
{ position: vector3(63, 70, 217) },
{ position: vector3(64, 70, 217) },
{ position: vector3(65, 70, 217) },
{ position: vector3(66, 70, 217) },
{ position: vector3(67, 70, 217) },
{ position: vector3(68, 70, 217) },
{ position: vector3(69, 70, 217) },
{ position: vector3(70, 70, 217) },
{ position: vector3(71, 70, 217) },
{ position: vector3(72, 70, 217) },
{ position: vector3(73, 70, 217) },
{ position: vector3(74, 70, 217) },
],
};
export { level1Conditions, level1NoGoZones };

View File

@@ -1,145 +0,0 @@
import { BlockType, Vector3 } from "@minecraft/server";
import { LevelBlockCondition, LevelNoGoZone } from "../Commandeer/level/levelTypes";
import { vector3 } from "../Commandeer/utils/vectorUtils";
import { MinecraftBlockTypes } from "../vanilla-data/mojang-block";
let level2Conditions: LevelBlockCondition = {
conditions: [
{
block: MinecraftBlockTypes.Air,
position: vector3(45, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(44, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(43, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(42, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(41, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(40, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(39, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(38, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(37, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(36, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(35, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(34, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 219),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 218),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 217),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 216),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 215),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 214),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 213),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(34, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(35, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(36, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(37, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(38, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(39, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(40, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(41, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(42, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(43, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(44, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(45, 70, 212),
},
],
};
export { level2Conditions };

View File

@@ -1,140 +0,0 @@
import { BlockType, Vector3 } from "@minecraft/server";
import { LevelBlockCondition } from "../Commandeer/level/levelTypes";
import { vector3 } from "../Commandeer/utils/vectorUtils";
import { MinecraftBlockTypes } from "../vanilla-data/mojang-block";
let level3Conditions: LevelBlockCondition = {
conditions: [
{
block: MinecraftBlockTypes.Air,
position: vector3(57, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(58, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(59, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 234),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 233),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 232),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 231),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(61, 70, 231),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(62, 70, 231),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(63, 70, 231),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 231),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 232),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 233),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 234),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 236),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 237),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 238),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 239),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(65, 70, 239),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(66, 70, 239),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(67, 70, 239),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 239),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 238),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 237),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 236),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(69, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(70, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(71, 70, 235),
},
],
};
export { level3Conditions };

View File

@@ -1,140 +0,0 @@
import { BlockType, Vector3 } from "@minecraft/server";
import { LevelBlockCondition } from "../Commandeer/level/levelTypes";
import { vector3 } from "../Commandeer/utils/vectorUtils";
import { MinecraftBlockTypes } from "../vanilla-data/mojang-block";
let level3Conditions: LevelBlockCondition = {
conditions: [
{
block: MinecraftBlockTypes.Air,
position: vector3(57, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(58, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(59, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 234),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 233),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 232),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 231),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(61, 70, 231),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(62, 70, 231),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(63, 70, 231),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 231),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 232),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 233),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 234),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 236),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 237),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 238),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 239),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(65, 70, 239),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(66, 70, 239),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(67, 70, 239),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 239),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 238),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 237),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 236),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(69, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(70, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(71, 70, 235),
},
],
};
export { level3Conditions };

View File

@@ -0,0 +1,50 @@
import { LevelBlockCondition, LevelLeverCondition } from "../Commandeer/level/levelTypes";
import { vector3 } from "../Commandeer/utils/vectorUtils";
import { MinecraftBlockTypes } from "../vanilla-data/mojang-block";
let mission2part1Conditions: LevelBlockCondition = {
conditions: [
{
position: vector3(2455, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
{
position: vector3(2456, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
{
position: vector3(2457, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
{
position: vector3(2458, -2, 11),
block: MinecraftBlockTypes.RedNetherBrick,
},
{
position: vector3(2459, -2, 11),
block: MinecraftBlockTypes.RedNetherBrick,
},
{
position: vector3(2460, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
{
position: vector3(2461, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
{
position: vector3(2462, -2, 11),
block: MinecraftBlockTypes.RedNetherBrick,
},
{
position: vector3(2463, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
{
position: vector3(2464, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
],
};
export { mission2part1Conditions };

View File

@@ -0,0 +1,66 @@
import { LevelBlockCondition, LevelLeverCondition } from "../Commandeer/level/levelTypes";
import { vector3 } from "../Commandeer/utils/vectorUtils";
import { MinecraftBlockTypes } from "../vanilla-data/mojang-block";
let mission2part2Conditions: LevelBlockCondition = {
conditions: [
{
position: vector3(2467, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
{
position: vector3(2468, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
{
position: vector3(2469, -2, 11),
block: MinecraftBlockTypes.HornCoralBlock,
},
{
position: vector3(2470, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
{
position: vector3(2471, -2, 11),
block: MinecraftBlockTypes.HornCoralBlock,
},
{
position: vector3(2472, -2, 11),
block: MinecraftBlockTypes.RedNetherBrick,
},
{
position: vector3(2473, -2, 11),
block: MinecraftBlockTypes.RedNetherBrick,
},
{
position: vector3(2474, -2, 11),
block: MinecraftBlockTypes.HornCoralBlock,
},
{
position: vector3(2475, -2, 11),
block: MinecraftBlockTypes.RedNetherBrick,
},
{
position: vector3(2476, -2, 11),
block: MinecraftBlockTypes.HornCoralBlock,
},
{
position: vector3(2477, -2, 11),
block: MinecraftBlockTypes.HornCoralBlock,
},
{
position: vector3(2478, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
{
position: vector3(2479, -2, 11),
block: MinecraftBlockTypes.FireCoralBlock,
},
{
position: vector3(2480, -2, 11),
block: MinecraftBlockTypes.RedNetherBrick,
},
],
};
export { mission2part2Conditions };

View File

@@ -1,74 +0,0 @@
import { BlockType, BlockTypes, 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";
const Level1CommandBlockPos: Vector3 = vector3(2439, 0, 36);
const level1StartPosition: Vector3 = vector3(2451, -2, 57);
const Level1EndPosition: Vector3 = vector3(2451, -2, 41);
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);
teleportAgent(level1StartPosition);
},
() => {
pupeteer.setActionBar("%message.level1.make");
},
() => {
pupeteer.clearActionBar();
pupeteer.sendWorldMessage("%message.level1.complete");
pupeteer.setTitleTimed("%message.level1.complete", 2.5);
mindKeeper.increment(CURRENT_LEVEL);
},
() => {
let isComplete = false;
let isOutOfBounds = false;
//6 blocks lower is lava
let agentPos = getAgentLocation();
let blockLava = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -7, 0)));
let blockAir = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0)));
if (
blockLava &&
blockLava.type.id === MinecraftBlockTypes.Lava &&
blockAir &&
blockAir.type.id === MinecraftBlockTypes.Air
) {
isOutOfBounds = true;
}
if (isAgentAt(Level1EndPosition)) {
isComplete = true;
}
// world.sendMessage(`isComplete: ${isComplete}`);
// world.sendMessage(`isOutOfBounds: ${isOutOfBounds}`);
if (isOutOfBounds) {
pupeteer.sendWorldMessage("%message.level1.outOfBounds");
pupeteer.setTitleTimed("%message.level1.outOfBounds", 2.5);
// world.getDimension("overworld").runCommand("/kill @e[type=agent]");
world.getDimension("overworld").runCommand("execute as @p run codebuilder runtime stop @s");
teleportAgent(level1StartPosition);
return false;
} else if (isComplete) {
return true;
}
return false;
}
);
export default level1;

View File

@@ -1,73 +0,0 @@
import { 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 { mindKeeper, CURRENT_LEVEL } from "../../main";
import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block";
const Level2CommandBlockPos: Vector3 = vector3(2439, 0, 35);
const level2StartPosition: Vector3 = vector3(2446, -2, 40);
const Level2EndPosition: Vector3 = vector3(2446, -2, 30);
const level2ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
const level2: Level = new Level(
() => {
pupeteer.sendWorldMessage("%message.level2.started");
pupeteer.setTitleTimed("%message.level2.name", 2.5);
startLevel(Level2CommandBlockPos);
teleportAgent(level2StartPosition);
},
() => {
pupeteer.setActionBar("%message.level2.make");
},
() => {
pupeteer.clearActionBar();
pupeteer.sendWorldMessage("%message.level2.complete");
pupeteer.setTitleTimed("%message.level2.complete", 2.5);
mindKeeper.increment(CURRENT_LEVEL);
},
() => {
let isComplete = false;
let isOutOfBounds = false;
//6 blocks lower is lava
let agentPos = getAgentLocation();
let blockLava = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -7, 0)));
let blockAir = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0)));
if (
blockLava &&
blockLava.type.id === MinecraftBlockTypes.Lava &&
blockAir &&
blockAir.type.id === MinecraftBlockTypes.Air
) {
isOutOfBounds = true;
}
if (isAgentAt(Level2EndPosition)) {
isComplete = true;
}
// world.sendMessage(`isComplete: ${isComplete}`);
// world.sendMessage(`isOutOfBounds: ${isOutOfBounds}`);
if (isOutOfBounds) {
pupeteer.sendWorldMessage("%message.level2.outOfBounds");
pupeteer.setTitleTimed("%message.level2.outOfBounds", 2.5);
// world.getDimension("overworld").runCommand("/kill @e[type=agent]");
world.getDimension("overworld").runCommand("execute as @p run codebuilder runtime stop @s");
teleportAgent(level2StartPosition);
return false;
} else if (isComplete) {
return true;
}
return false;
}
);
export default level2;

View File

@@ -1,72 +0,0 @@
import { 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 { mindKeeper, CURRENT_LEVEL } from "../../main";
import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block";
const Level3CommandBlockPos: Vector3 = vector3(2439, 0, 34);
const level3StartPosition: Vector3 = vector3(2447, -2, 30);
const level3EndPosition: Vector3 = vector3(2451, -2, 18);
const level3ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
const level3: Level = new Level(
() => {
pupeteer.sendWorldMessage("%message.level3.started");
pupeteer.setTitleTimed("%message.level3.name", 2.5);
startLevel(Level3CommandBlockPos);
teleportAgent(level3StartPosition);
},
() => {
pupeteer.setActionBar("%message.level3.make");
},
() => {
pupeteer.clearActionBar();
pupeteer.sendWorldMessage("%message.level3.complete");
pupeteer.setTitleTimed("%message.level3.complete", 2.5);
mindKeeper.increment(CURRENT_LEVEL);
},
() => {
let isComplete = false;
let isOutOfBounds = false;
//6 blocks lower is lava
let agentPos = getAgentLocation();
let blockLava = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -7, 0)));
let blockAir = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0)));
if (
blockLava &&
blockLava.type.id === MinecraftBlockTypes.Lava &&
blockAir &&
blockAir.type.id === MinecraftBlockTypes.Air
) {
isOutOfBounds = true;
}
if (isAgentAt(level3EndPosition)) {
isComplete = true;
}
// world.sendMessage(`isComplete: ${isComplete}`);
// world.sendMessage(`isOutOfBounds: ${isOutOfBounds}`);
if (isOutOfBounds) {
pupeteer.sendWorldMessage("%message.level3.outOfBounds");
pupeteer.setTitleTimed("%message.level3.outOfBounds", 2.5);
// world.getDimension("overworld").runCommand("/kill @e[type=agent]");
world.getDimension("overworld").runCommand("execute as @p run codebuilder runtime stop @s");
teleportAgent(level3StartPosition);
return false;
} else if (isComplete) {
return true;
}
return false;
}
);
export default level3;

View File

@@ -1,74 +0,0 @@
import { 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 { level4Conditions } from "../../levelConditions/level4";
import { mindKeeper, CURRENT_LEVEL } from "../../main";
import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block";
const level4CommandBlockPos: Vector3 = vector3(2439, 0, 36);
const level4StartPosition: Vector3 = vector3(2451, -2, 57);
const level4EndPosition: Vector3 = vector3(2451, -2, 41);
const level4ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
const level4: Level = new Level(
() => {
pupeteer.sendWorldMessage("%message.level4.started");
pupeteer.setTitleTimed("%message.level4.name", 2.5);
startLevel(level4CommandBlockPos);
teleportAgent(level4StartPosition);
},
() => {
pupeteer.setActionBar("%message.level4.make");
},
() => {
pupeteer.clearActionBar();
pupeteer.sendWorldMessage("%message.level4.complete");
pupeteer.setTitleTimed("%message.level4.complete", 2.5);
mindKeeper.increment(CURRENT_LEVEL);
},
() => {
let isComplete = false;
let isOutOfBounds = false;
//6 blocks lower is lava
let agentPos = getAgentLocation();
let blockLava = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -7, 0)));
let blockAir = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0)));
if (
blockLava &&
blockLava.type.id === MinecraftBlockTypes.Lava &&
blockAir &&
blockAir.type.id === MinecraftBlockTypes.Air
) {
isOutOfBounds = true;
}
if (isAgentAt(level4EndPosition)) {
isComplete = true;
}
// world.sendMessage(`isComplete: ${isComplete}`);
// world.sendMessage(`isOutOfBounds: ${isOutOfBounds}`);
if (isOutOfBounds) {
pupeteer.sendWorldMessage("%message.level4.outOfBounds");
pupeteer.setTitleTimed("%message.level4.outOfBounds", 2.5);
// world.getDimension("overworld").runCommand("/kill @e[type=agent]");
world.getDimension("overworld").runCommand("execute as @p run codebuilder runtime stop @s");
teleportAgent(level4StartPosition);
return false;
} else if (isComplete) {
return true;
}
return false;
}
);
export default level4;

View File

@@ -96,8 +96,6 @@ const levelIntro: Level = new Level(
counter++;
}
});
world.sendMessage(`%message.intro.progress ${counter}/${levelIntroConditions.conditions.length}`);
world.sendMessage(`isComplete: ${isComplete}`);
if (isComplete) {
return true;
}

View File

@@ -0,0 +1,17 @@
import { Vector3 } from "@minecraft/server";
import AbstractAgentTrackMission from "../../Commandeer/level/abstractTrackFollowMission";
import { vector3 } from "../../Commandeer/utils/vectorUtils";
const Level1CommandBlockPos: Vector3 = vector3(2439, 0, 36);
const level1StartPosition: Vector3 = vector3(2451, -2, 57);
const Level1EndPosition: Vector3 = vector3(2451, -2, 41);
let mission1part1: AbstractAgentTrackMission = new AbstractAgentTrackMission(
"mission1part1",
level1StartPosition,
Level1EndPosition,
Level1CommandBlockPos
);
export default mission1part1;

View File

@@ -0,0 +1,19 @@
import { Vector3 } from "@minecraft/server";
import AbstractAgentTrackMission from "../../Commandeer/level/abstractTrackFollowMission";
import { vector3 } from "../../Commandeer/utils/vectorUtils";
const Level2CommandBlockPos: Vector3 = vector3(2439, 0, 35);
const level2StartPosition: Vector3 = vector3(2446, -2, 40);
const Level2EndPosition: Vector3 = vector3(2446, -2, 30);
const level2ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
let mission1part2: AbstractAgentTrackMission = new AbstractAgentTrackMission(
"mission1part2",
level2StartPosition,
Level2EndPosition,
Level2CommandBlockPos
);
export default mission1part2;

View File

@@ -0,0 +1,17 @@
import { Vector3 } from "@minecraft/server";
import AbstractAgentTrackMission from "../../Commandeer/level/abstractTrackFollowMission";
import { vector3 } from "../../Commandeer/utils/vectorUtils";
const Level3CommandBlockPos: Vector3 = vector3(2439, 0, 34);
const level3StartPosition: Vector3 = vector3(2447, -2, 30);
const level3EndPosition: Vector3 = vector3(2451, -2, 18);
const level3ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
let mission1part3: AbstractAgentTrackMission = new AbstractAgentTrackMission(
"mission1part3",
level3StartPosition,
level3EndPosition,
Level3CommandBlockPos
);
export default mission1part3;

View File

@@ -0,0 +1,62 @@
import { 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 { vector3, Vector3Add, Vector3ToCommandString } from "../../Commandeer/utils/vectorUtils";
import { mindKeeper, CURRENT_LEVEL } from "../../main";
import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block";
import { mission2part1Conditions } from "../../levelConditions/mission2part1Conditions";
import { checkBlockCondition } from "../../Commandeer/level/levelTypes";
import { startLevel } from "../../Commandeer/utils/levelUtils";
const mission2part1CommandBlockPos: Vector3 = vector3(2460, -1, 4);
const mission2part1StartPosition: Vector3 = vector3(2455, -1, 11);
const mission2part1EndPosition: Vector3 = vector3(2465, -1, 11);
const mission2part1ResetCommandBlockPos: Vector3 = vector3(2456, -1, 4);
const mission2part1: Level = new Level(
() => {
pupeteer.sendWorldMessage("%message.mission2part1.started");
pupeteer.setTitleTimed("%message.mission2part1.name", 2.5);
startLevel(mission2part1CommandBlockPos);
teleportAgent(mission2part1StartPosition);
startLevel(mission2part1ResetCommandBlockPos);
},
() => {
pupeteer.setActionBar("%message.mission2part1.make");
},
() => {
pupeteer.clearActionBar();
pupeteer.sendWorldMessage("%message.mission2part1.complete");
pupeteer.setTitleTimed("%message.mission2part1.complete", 2.5);
mindKeeper.increment(CURRENT_LEVEL);
},
() => {
//Check if the agent is at the end position
//than check if the level is correct
let isComplete = false;
let isAgentAtEndPosition = isAgentAt(mission2part1EndPosition);
if (isAgentAtEndPosition) {
let isCorrect = checkBlockCondition(mission2part1Conditions);
if (isCorrect) {
isComplete = true;
world.sendMessage("Shit works");
} else {
isComplete = false;
pupeteer.sendWorldMessage("%message.incorrect");
pupeteer.setTitleTimed("%message.incorrect", 2.5);
teleportAgent(mission2part1StartPosition);
world
.getDimension("overworld")
.setBlockType(mission2part1ResetCommandBlockPos, MinecraftBlockTypes.RedstoneBlock);
}
}
return isComplete;
}
);
export default mission2part1;

View File

@@ -0,0 +1,62 @@
import { 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 { vector3, Vector3Add, Vector3ToCommandString } from "../../Commandeer/utils/vectorUtils";
import { mindKeeper, CURRENT_LEVEL } from "../../main";
import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block";
import { checkBlockCondition } from "../../Commandeer/level/levelTypes";
import { mission2part2Conditions } from "../../levelConditions/mission2part2Conditions";
import { startLevel } from "../../Commandeer/utils/levelUtils";
const mission2part2CommandBlockPos: Vector3 = vector3(2461, -1, 4);
const mission2part2StartPosition: Vector3 = vector3(2467, -1, 11);
const mission2part2EndPosition: Vector3 = vector3(2481, -1, 11);
const mission2part2ResetCommandBlockPos: Vector3 = vector3(2457, -1, 4);
const mission2part2: Level = new Level(
() => {
pupeteer.sendWorldMessage("%message.mission2part2.started");
pupeteer.setTitleTimed("%message.mission2part2.name", 2.5);
startLevel(mission2part2CommandBlockPos);
teleportAgent(mission2part2StartPosition);
startLevel(mission2part2ResetCommandBlockPos);
},
() => {
pupeteer.setActionBar("%message.mission2part2.make");
},
() => {
pupeteer.clearActionBar();
pupeteer.sendWorldMessage("%message.mission2part2.complete");
pupeteer.setTitleTimed("%message.mission2part2.complete", 2.5);
mindKeeper.increment(CURRENT_LEVEL);
},
() => {
//Check if the agent is at the end position
//than check if the level is correct
let isComplete = false;
let isAgentAtEndPosition = isAgentAt(mission2part2EndPosition);
if (isAgentAtEndPosition) {
let isCorrect = checkBlockCondition(mission2part2Conditions);
if (isCorrect) {
isComplete = true;
world.sendMessage("Shit works");
} else {
isComplete = false;
pupeteer.sendWorldMessage("%message.incorrect");
pupeteer.setTitleTimed("%message.incorrect", 2.5);
teleportAgent(mission2part2StartPosition);
world
.getDimension("overworld")
.setBlockType(mission2part2ResetCommandBlockPos, MinecraftBlockTypes.RedstoneBlock);
}
}
return isComplete;
}
);
export default mission2part2;

View File

@@ -0,0 +1,17 @@
import { Vector3 } from "@minecraft/server";
import AbstractAgentTrackMission from "../../Commandeer/level/abstractTrackFollowMission";
import { vector3 } from "../../Commandeer/utils/vectorUtils";
const Level1CommandBlockPos: Vector3 = vector3(2495, -1, 26);
const level1StartPosition: Vector3 = vector3(2488, -2, 7);
const Level1EndPosition: Vector3 = vector3(2488, -2, 22);
let mission3part1: AbstractAgentTrackMission = new AbstractAgentTrackMission(
"mission3part1",
level1StartPosition,
Level1EndPosition,
Level1CommandBlockPos
);
export default mission3part1;

View File

@@ -0,0 +1,17 @@
import { Vector3 } from "@minecraft/server";
import AbstractAgentTrackMission from "../../Commandeer/level/abstractTrackFollowMission";
import { vector3 } from "../../Commandeer/utils/vectorUtils";
const Level1CommandBlockPos: Vector3 = vector3(2495, -1, 27);
const level1StartPosition: Vector3 = vector3(2492, -2, 26);
const Level1EndPosition: Vector3 = vector3(2484, -2, 32);
let mission3part2: AbstractAgentTrackMission = new AbstractAgentTrackMission(
"mission3part2",
level1StartPosition,
Level1EndPosition,
Level1CommandBlockPos
);
export default mission3part2;

View File

@@ -0,0 +1,17 @@
import { Vector3 } from "@minecraft/server";
import AbstractAgentTrackMission from "../../Commandeer/level/abstractTrackFollowMission";
import { vector3 } from "../../Commandeer/utils/vectorUtils";
const Level1CommandBlockPos: Vector3 = vector3(2495, -1, 28);
const level1StartPosition: Vector3 = vector3(2487, -2, 36);
const Level1EndPosition: Vector3 = vector3(2488, -2, 57);
let mission3part2: AbstractAgentTrackMission = new AbstractAgentTrackMission(
"mission3part2",
level1StartPosition,
Level1EndPosition,
Level1CommandBlockPos
);
export default mission3part2;

View File

@@ -10,9 +10,9 @@ import {
} from "@minecraft/server";
import { Mindkeeper, StoreType } from "./Commandeer/mindKeeper";
import Pupeteer from "./Commandeer/pupeteer";
import { Vector3ToCommandString, Vector3ToFancyString, vector3 } from "./Commandeer/utils/vectorUtils";
import { Vector3Add, Vector3ToCommandString, Vector3ToFancyString, vector3 } from "./Commandeer/utils/vectorUtils";
import { delay } from "./Commandeer/utils/waitUtil";
import { spawnParticle } from "./Commandeer/utils/particleUtils";
import { PARTICLES, spawnParticle } from "./Commandeer/utils/particleUtils";
import { TrailMaker } from "./Commandeer/trail/trailMaker";
import * as CCTrigger from "./Commandeer/Trigger/CCTrigger";
import { Commands } from "./Commandeer/command/command";
@@ -20,10 +20,28 @@ import levelIntro from "./levels/levelIntro";
import { Trail } from "./Commandeer/trail/trailEngine";
import { startTrail } from "./trails/startTrail";
import { IntroToLevel1Trail } from "./trails/IntroToLevel1Trail";
import level1 from "./levels/level1/mission1";
import level2 from "./levels/level1/mission2";
import level3 from "./levels/level1/mission3";
import { MinecraftBlockTypes } from "./vanilla-data/mojang-block";
import mission1part1 from "./levels/mission1/mission1part1";
import mission1part2 from "./levels/mission1/mission1part2";
import mission1part3 from "./levels/mission1/mission1part3";
import mission2part1 from "./levels/mission2/mission2part1";
import { mission2part1Conditions } from "./levelConditions/mission2part1Conditions";
import mission2part2 from "./levels/mission2/mission2part2";
import { mission2part2Conditions } from "./levelConditions/mission2part2Conditions";
import Chalk from "./Commandeer/chalk";
import mission3part1 from "./levels/mission3/mission3part1";
import mission3part2 from "./levels/mission3/mission3part2";
import mission3part3 from "./levels/mission3/mission3part3";
import { runEntityEventOnTag, setNPCDialog } from "./Commandeer/utils/entityUtils";
import {
animationPlaying,
ClonePos,
playAnimation,
setAmimationPlaying,
SetFrame,
} from "./Commandeer/animations/animation";
import { doNothingStupidTSIWantFilesNotAGiantAssMainFile } from "./triggers";
import { clearWall, fillWall, Wall } from "./Commandeer/utils/levelUtils";
// import { loadTriggers } from "./triggers";
const mindKeeper = new Mindkeeper(world);
@@ -46,7 +64,7 @@ async function resetLightPath() {
}
let introToGlassBreakTimer: number = 0;
const glassBreakTime = 2 * TicksPerSecond;
const glassBreakTime = 5 * TicksPerSecond;
let isIntroToLevel1Sqeuence = false;
@@ -56,6 +74,14 @@ introTrail.fromTrail(startTrail);
let introToLevelTrail = new Trail("introToLevelTrail", 2, 2);
introToLevelTrail.fromTrail(IntroToLevel1Trail);
//fill 2466 0 48 2469 -1 48
let bilalBlock: Wall = {
startPos: vector3(2466, 0, 48),
endPos: vector3(2469, -1, 48),
};
// spawn a sphere of particle
const DEVELOPER_MODE = true;
let tickCounter = 0;
system.runInterval(async () => {
@@ -70,59 +96,89 @@ system.runInterval(async () => {
switch (currentLevel) {
case 0:
// Show goto airlock text
Pupeteer.setActionBar("Go to the airlock");
Pupeteer.setActionBar("%message.goto.airlock");
introTrail.spawnNext();
break;
case 1:
Pupeteer.setActionBar("Enter the airlock");
// Show Enter airlock text
Pupeteer.setActionBar("%message.enter.airlock");
break;
case 2:
levelIntro.update();
Pupeteer.setActionBar("%message.talkto.chanel");
//Wait for the scriptevent cc:startIntro
break;
case 3:
levelIntro.update();
break;
case 4:
if (!isIntroToLevel1Sqeuence) {
isIntroToLevel1Sqeuence = true;
world.sendMessage("Intro to level1 sequence start");
// world.sendMessage("Intro to level1 sequence start");
await lightUpPath();
await randomExplosions();
blowUpDoor();
mindKeeper.increment(CURRENT_LEVEL);
triggerAlarm();
}
break;
case 4:
case 5:
introToGlassBreakTimer++;
world.sendMessage("Glass break timer: " + introToGlassBreakTimer);
// world.sendMessage("Glass break timer: " + introToGlassBreakTimer);
if (introToGlassBreakTimer > glassBreakTime) {
introToGlassBreakTimer = 0;
mindKeeper.increment(CURRENT_LEVEL);
}
case 4:
case 6:
// Show Goto Level 1
if (glassWindowState == GlassWindowState.Fixed) {
glassWindowState = GlassWindowState.Broken;
system.run(async () => {
world.sendMessage("Breaking glass");
if (DEVELOPER_MODE) {
world.sendMessage("Breaking glass");
}
await delay(10);
breakGlassWindow();
await breakGlassWindow();
mindKeeper.increment(CURRENT_LEVEL);
setNPCDialog("chanel1", "chanel_goto_temple");
});
}
break;
case 5:
introToLevelTrail.spawnNext();
Pupeteer.setActionBar("Follow the path to the temple");
break;
case 6:
level1.update();
break;
case 7:
level2.update();
introToLevelTrail.spawnNext();
Pupeteer.setActionBar("%message.follow.path.temple");
//Talk to Bilal
break;
case 8:
level3.update();
Pupeteer.setActionBar("%message.goto.temple");
//Talk to Suki
break;
case 9:
mission1part1.update();
break;
case 10:
mission1part2.update();
break;
case 11:
mission1part3.update();
break;
case 12:
Pupeteer.setActionBar("%message.goto.level2");
case 13:
mission2part1.update();
break;
case 14:
mission2part2.update();
break;
case 15:
mission3part1.update();
break;
case 15:
mission3part2.update();
break;
case 16:
mission3part3.update();
break;
case 17:
Pupeteer.setActionBar("Goto the door");
break;
}
}
@@ -146,7 +202,9 @@ async function lightUpPath() {
// let pos2 = vector3(2468, 9, 105);
}
//iojediojaiw
let triggerAlarm = () => runEntityEventOnTag("alarmLights", "cc:add_rotating");
let resetAlarm = () => runEntityEventOnTag("alarmLights", "cc:remove_rotating");
world.afterEvents.worldInitialize.subscribe(() => {
mindKeeper.registerStore(CURRENT_LEVEL, StoreType.number);
@@ -156,6 +214,8 @@ world.afterEvents.worldInitialize.subscribe(() => {
mindKeeper.registerToWorld();
triggerManager.Load();
doNothingStupidTSIWantFilesNotAGiantAssMainFile();
// loadCommands();
});
@@ -190,11 +250,15 @@ let doorSize = vector3(7, 7, 7);
///clone 2463 -30 81 2470 -23 87 2463 10 81
function blowUpDoor() {
world.sendMessage("Blowing up door");
if (DEVELOPER_MODE) {
world.sendMessage("Blowing up door");
}
world.getDimension("overworld").runCommand("/clone 2463 -10 81 2470 -3 87 2463 10 81");
}
function restoreDoor() {
world.sendMessage("Restoring door");
if (DEVELOPER_MODE) {
world.sendMessage("Restoring door");
}
world.getDimension("overworld").runCommandAsync("/clone 2463 -30 81 2470 -23 87 2463 10 81");
}
@@ -217,11 +281,24 @@ world.afterEvents.chatSend.subscribe(async (event: ChatSendAfterEvent) => {
resetLightPath();
levelIntro.reset();
level1.reset();
level2.reset();
mission1part1.reset();
mission1part2.reset();
mission1part3.reset();
mission2part1.reset();
mission2part2.reset();
//Reset the combination to a random squence
resetAlarm();
deactivateAirlockLights();
setNPCDialog("chanel1", "chanel_greeting_1");
setNPCDialog("bilal1", "bilal_greeting_1");
setNPCDialog("suki1", "suki_greeting_1");
fillWall(bilalBlock, MinecraftBlockTypes.Barrier);
isIntroToLevel1Sqeuence = false;
}
});
@@ -229,20 +306,88 @@ world.afterEvents.chatSend.subscribe(async (event: ChatSendAfterEvent) => {
system.afterEvents.scriptEventReceive.subscribe((event) => {
if (event.id == "cc:getId") {
let id = event.message;
world.sendMessage("Script got the id " + id);
if (DEVELOPER_MODE) {
world.sendMessage("Script got the id " + id);
}
mindKeeper.set(AGENT_ID, id);
}
if (event.id == "cc:startIntro") {
if (mindKeeper.get(CURRENT_LEVEL) == 2) {
mindKeeper.increment(CURRENT_LEVEL);
} else {
if (DEVELOPER_MODE) {
world.sendMessage("Intro already started?");
}
}
}
if (event.id == "cc:startTemple") {
if (mindKeeper.get(CURRENT_LEVEL) == 7) {
mindKeeper.increment(CURRENT_LEVEL);
fillWall(bilalBlock, MinecraftBlockTypes.Air);
}
}
if (event.id == "cc:startLevel1") {
if (mindKeeper.get(CURRENT_LEVEL) == 8) {
mindKeeper.increment(CURRENT_LEVEL);
}
}
if (event.id == "cc:afterLevel1") {
}
});
class ClonePos {
point1: Vector3;
point2: Vector3;
Commands.register(PREFIX, "fien", (arg) => {
system.run(() => {
arg.player.teleport(vector3(2468, 11, 114));
});
});
constructor(point1: Vector3, point2: Vector3) {
this.point1 = point1;
this.point2 = point2;
Commands.register(PREFIX, "openDoor", () => openDoor());
Commands.register(PREFIX, "closeDoor", () => closeDoor());
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.3");
world.sendMessage("Engine is running, duh :)");
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();
})();
});
let openDoor = () => {
runEntityEventOnTag("door", "cc:add_open");
if (DEVELOPER_MODE) {
world.sendMessage("Opening door");
}
}
};
let closeDoor = () => {
runEntityEventOnTag("door", "cc:remove_open");
if (DEVELOPER_MODE) {
world.sendMessage("Closing door");
}
};
Commands.register(PREFIX, "restore", (arg) => {
restoreDoor();
});
//#region Airlock
enum GlassWindowState {
Broken,
@@ -302,24 +447,6 @@ const glassBreakingFrames: ClonePos[] = [
},
];
const crackedGlass: string = "cc:cracked_glass";
Commands.register(PREFIX, "breakGlass", (arg) => {
breakGlassWindow();
glassWindowState = GlassWindowState.Broken;
});
Commands.register(PREFIX, "restoreGlass", (arg) => {
restoreGlassWindow();
glassWindowState = GlassWindowState.Fixed;
});
async function breakGlassWindow() {
playAnimation(glassBreakingFrames, 5, false, doorRoot);
glassWindowState = GlassWindowState.Broken;
}
async function restoreGlassWindow(force: boolean = false) {
playAnimation(glassBreakingFrames, 5, true, doorRoot, force);
}
const FrontAirLockOpenFrames: ClonePos[] = [
{
point1: vector3(2476, 9, 94),
@@ -377,12 +504,29 @@ const AirLockWaterFrames: ClonePos[] = [
},
];
Commands.register(PREFIX, "breakGlass", (arg) => {
breakGlassWindow();
glassWindowState = GlassWindowState.Broken;
});
Commands.register(PREFIX, "restoreGlass", (arg) => {
restoreGlassWindow();
glassWindowState = GlassWindowState.Fixed;
});
async function breakGlassWindow() {
playAnimation(glassBreakingFrames, 5, false, doorRoot);
glassWindowState = GlassWindowState.Broken;
}
async function restoreGlassWindow(force: boolean = false) {
playAnimation(glassBreakingFrames, 5, true, doorRoot, force);
}
async function CycleAirLockWater(fill: boolean, delayTime: number) {
if (animationPlaying) {
world.sendMessage("Animation already playing");
return;
}
animationPlaying = true;
setAmimationPlaying(true);
let frameCount = AirLockWaterFrames.length;
for (let i = 0; i < frameCount; i++) {
@@ -395,7 +539,7 @@ async function CycleAirLockWater(fill: boolean, delayTime: number) {
);
await delay(delayTime);
}
animationPlaying = false;
setAmimationPlaying(false);
}
let frontAirlockState: AirLockState = AirLockState.Closed;
@@ -408,7 +552,9 @@ let chamberState: AirLockChamberState = AirLockChamberState.Full;
//Front door opens
triggerManager.RegisterFunctionTrigger("FrontAirLockOutside", async (event) => {
if (chamberState == AirLockChamberState.Empty) {
world.sendMessage("Filling airlock");
if (DEVELOPER_MODE) {
world.sendMessage("Filling airlock");
}
await FillAirlockWater();
chamberState = AirLockChamberState.Full;
}
@@ -420,8 +566,13 @@ triggerManager.RegisterFunctionTrigger("FrontAirLockOutside", async (event) => {
});
triggerManager.RegisterFunctionTrigger("TempleFrontDoor", async (event) => {
if (mindKeeper.get(CURRENT_LEVEL) == 5) {
if (mindKeeper.get(CURRENT_LEVEL) == 8) {
mindKeeper.increment(CURRENT_LEVEL);
closeDoor();
}
if (mindKeeper.get(CURRENT_LEVEL) == 15) {
openDoor();
}
});
@@ -435,8 +586,10 @@ triggerManager.RegisterFunctionTrigger("FrontAirLockInside", async (event) => {
frontAirlockState = AirLockState.Closed;
}
if (chamberState == AirLockChamberState.Full) {
await delay(7);
activateAirlockLights();
await delay(50);
await EmptyAirlockWater();
deactivateAirlockLights();
chamberState = AirLockChamberState.Empty;
}
@@ -458,38 +611,10 @@ triggerManager.RegisterFunctionTrigger("BackAirLockOutside", async (event) => {
}
});
// function loadCommands() {
Commands.register(PREFIX, "fien", (arg) => {
system.run(() => {
arg.player.teleport(vector3(2468, 11, 114));
});
});
//#endregion Airlock
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", (arg) => {
restoreDoor();
});
let activateAirlockLights = () => runEntityEventOnTag("airlockLights", "cc:add_rotating");
let deactivateAirlockLights = () => runEntityEventOnTag("airlockLights", "cc:remove_rotating");
function resetAirLock() {
SetFrontDoorClosed();
@@ -540,54 +665,3 @@ triggerManager.RegisterFunctionTrigger("closeBackDoor", (event) => PlayBackDoorC
triggerManager.RegisterFunctionTrigger("fillAirlock", (event) => FillAirlockWater());
triggerManager.RegisterFunctionTrigger("emptyAirlock", (event) => EmptyAirlockWater());
async function SetFrame(frame: ClonePos, destination: Vector3) {
await world
.getDimension("overworld")
.runCommandAsync(
`/clone ${Vector3ToCommandString(frame.point1)} ${Vector3ToCommandString(frame.point2)} ${Vector3ToCommandString(
destination
)}`
);
}
let animationPlaying = false;
async function playAnimation(
frames: ClonePos[],
delayTime: number,
reverse: boolean,
destination: Vector3,
force: boolean = false
) {
if (animationPlaying && !force) {
world.sendMessage("Animation already playing");
return;
}
let frameCount = frames.length;
if (!force) {
animationPlaying = true;
}
for (let i = 0; i < frameCount; i++) {
let frame = reverse ? frames[frameCount - i - 1] : frames[i];
await world
.getDimension("overworld")
.runCommandAsync(
`/clone ${Vector3ToCommandString(frame.point1)} ${Vector3ToCommandString(
frame.point2
)} ${Vector3ToCommandString(destination)}`
);
await delay(delayTime);
}
if (!force) {
animationPlaying = false;
}
}
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);
}
});

View File

@@ -5,44 +5,13 @@ import { vector3 } from "./Commandeer/utils/vectorUtils";
import { delay } from "./Commandeer/utils/waitUtil";
import { MinecraftBlockTypes } from "./vanilla-data/mojang-block";
// const triggerManager = new CCTrigger.Manager(mindKeeper);
function doNothingStupidTSIWantFilesNotAGiantAssMainFile() {
triggerManager.RegisterFunctionTrigger("helpme", (event) => {
world.sendMessage("Wow, this is a trigger :O");
world.sendMessage("This was caused by " + event.player.name);
});
triggerManager.RegisterFunctionTrigger("test", (event) => {
world.sendMessage("Wow, this is a trigger :O");
world.sendMessage("This was caused by " + event.player.name);
});
triggerManager.RegisterFunctionTrigger("lightPath", (event) => {
lightUpPath();
});
triggerManager.RegisterFunctionTrigger("resetPath", (event) => {
resetLightPath();
});
triggerManager.RegisterFunctionTrigger("test2", (event) => {
world.sendMessage("Wow, this is another trigger :O");
});
triggerManager.RegisterFunctionTrigger("die", (event) => {
world.sendMessage("You died");
event.player.applyDamage(1000);
});
//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--) {
let volume: BlockVolume = new BlockVolume(vector3(pos1.x, pos1.y, z), vector3(pos1.x + 1, pos1.y, z));
overworld.fillBlocks(volume, MinecraftBlockTypes.RedstoneBlock);
await delay(4);
}
// let pos2 = vector3(2468, 9, 105);
return;
}
async function resetLightPath() {
world.getDimension("overworld").runCommand("/fill 2467 9 87 2468 9 105 air");
}
export { doNothingStupidTSIWantFilesNotAGiantAssMainFile };