Add alot
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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`);
|
||||
// // }
|
||||
// });
|
||||
}
|
||||
}
|
||||
|
||||
66
scripts/Commandeer/animations/animation.ts
Normal file
66
scripts/Commandeer/animations/animation.ts
Normal 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 };
|
||||
74
scripts/Commandeer/level/abstractTrackFollowMission.ts
Normal file
74
scripts/Commandeer/level/abstractTrackFollowMission.ts
Normal 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;
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
15
scripts/Commandeer/utils/entityUtils.ts
Normal file
15
scripts/Commandeer/utils/entityUtils.ts
Normal 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 };
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 };
|
||||
@@ -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 };
|
||||
@@ -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 };
|
||||
@@ -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 };
|
||||
50
scripts/levelConditions/mission2part1Conditions.ts
Normal file
50
scripts/levelConditions/mission2part1Conditions.ts
Normal 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 };
|
||||
66
scripts/levelConditions/mission2part2Conditions.ts
Normal file
66
scripts/levelConditions/mission2part2Conditions.ts
Normal 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 };
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
17
scripts/levels/mission1/mission1part1.ts
Normal file
17
scripts/levels/mission1/mission1part1.ts
Normal 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;
|
||||
19
scripts/levels/mission1/mission1part2.ts
Normal file
19
scripts/levels/mission1/mission1part2.ts
Normal 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;
|
||||
17
scripts/levels/mission1/mission1part3.ts
Normal file
17
scripts/levels/mission1/mission1part3.ts
Normal 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;
|
||||
62
scripts/levels/mission2/mission2part1.ts
Normal file
62
scripts/levels/mission2/mission2part1.ts
Normal 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;
|
||||
62
scripts/levels/mission2/mission2part2.ts
Normal file
62
scripts/levels/mission2/mission2part2.ts
Normal 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;
|
||||
17
scripts/levels/mission3/mission3part1.ts
Normal file
17
scripts/levels/mission3/mission3part1.ts
Normal 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;
|
||||
17
scripts/levels/mission3/mission3part2.ts
Normal file
17
scripts/levels/mission3/mission3part2.ts
Normal 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;
|
||||
17
scripts/levels/mission3/mission3part3.ts
Normal file
17
scripts/levels/mission3/mission3part3.ts
Normal 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;
|
||||
360
scripts/main.ts
360
scripts/main.ts
@@ -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);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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 };
|
||||
|
||||
Reference in New Issue
Block a user