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

@@ -0,0 +1,217 @@
{
"format_version": "1.19.50",
"minecraft:npc_dialogue": {
"scenes": [
{
"scene_tag": "chanel_greeting_1",
"npc_name": {
"rawtext": [
{
"translate": "npc.name.chanel"
}
]
},
"text": {
"rawtext": [
{
"translate": "chanel.greeting.1.text",
"with": ["\n"]
}
]
},
"buttons": [
{
"name": {
"rawtext": [
{
"translate": "chanel.greeting.1.button"
}
]
},
"commands": ["/dialogue open @e[tag=chanel1] @initiator chanel_greeting_2"]
}
]
},
{
"scene_tag": "chanel_greeting_2",
"npc_name": {
"rawtext": [
{
"translate": "npc.name.chanel"
}
]
},
"text": {
"rawtext": [
{
"translate": "chanel.greeting.2.text",
"with": ["\n"]
}
]
},
"buttons": [
{
"name": {
"rawtext": [
{
"translate": "chanel.greeting.2.button"
}
]
},
"commands": ["/dialogue open @e[tag=chanel1] @initiator chanel_greeting_3"]
}
]
},
{
"scene_tag": "chanel_greeting_3",
"npc_name": {
"rawtext": [
{
"translate": "npc.name.chanel"
}
]
},
"text": {
"rawtext": [
{
"translate": "chanel.greeting.3.text",
"with": ["\n"]
}
]
},
"buttons": [
{
"name": {
"rawtext": [
{
"translate": "chanel.greeting.3.button"
}
]
},
"commands": ["/scriptevent cc:startIntro"]
}
]
},
{
"scene_tag": "chanel_goto_temple",
"npc_name": {
"rawtext": [
{
"translate": "npc.name.chanel"
}
]
},
"text": {
"rawtext": [
{
"translate": "chanel.goto_temple.text",
"with": ["\n"]
}
]
},
"buttons": [
{
"name": {
"rawtext": [
{
"translate": "chanel.goto_temple.button"
}
]
},
"commands": []
}
]
},
{
"scene_tag": "bilal_greeting_1",
"npc_name": {
"rawtext": [
{
"translate": "npc.name.bilal"
}
]
},
"text": {
"rawtext": [
{
"translate": "bilal.greeting.1.text",
"with": ["\n"]
}
]
},
"buttons": [
{
"name": {
"rawtext": [
{
"translate": "bilal.greeting.1.button"
}
]
},
"commands": ["/scriptevent cc:startTemple"]
}
]
},
{
"scene_tag": "suki_greeting_1",
"npc_name": {
"rawtext": [
{
"translate": "npc.name.suki"
}
]
},
"text": {
"rawtext": [
{
"translate": "suki.greeting.1.text",
"with": ["\n"]
}
]
},
"buttons": [
{
"name": {
"rawtext": [
{
"translate": "suki.greeting.1.button"
}
]
},
"commands": ["/dialogue open @e[tag=suki1] @initiator suki_greeting_2"]
}
]
},
{
"scene_tag": "suki_greeting_2",
"npc_name": {
"rawtext": [
{
"translate": "npc.name.suki"
}
]
},
"text": {
"rawtext": [
{
"translate": "suki.greeting.2.text",
"with": ["\n"]
}
]
},
"buttons": [
{
"name": {
"rawtext": [
{
"translate": "suki.greeting.2.button"
}
]
},
"commands": ["/scriptevent cc:StartLevel1"]
}
]
}
]
}
}

View File

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,13 @@
{
"format_version": "1.14.0",
"sound_definitions": {
"cc.alarm": {
"category": "neutral",
"sounds": ["sounds/alarm"]
},
"cc.sam": {
"category": "neutral",
"sounds": ["sounds/samgooris"]
}
}
}

View File

@@ -2,6 +2,17 @@
message.trail.follow=Follow the trail
message.levels.completed=You have completed all levels!
## goto messages
message.goto.airlock=Go to the Airlock
message.enter.airlock=Enter the Airlock
message.follow.path.temple=Follow the path and talk to §6Bakker Bilal
message.goto.temple=Go to the Temple and talk to §2Veteraan Suki
message.goto.level1=Go to Level 1
message.goto.level2=Go to Level 2
message.goto.level3=Go to Level 3
## Fail conditions
message.level.incorrect=§cIncorrect!§b
@@ -13,8 +24,8 @@ message.level.outofbounds.subtext=You can't be over water!
## npc names
npc.name.help=Help
npc.name.suki=§2Suki
npc.name.bilal=§6Bilal
npc.name.suki=§2Veteraan Suki
npc.name.bilal=§6Bakker Bilal
npc.name.ramses=§dRamses
npc.name.chanel=§9Wetenschapper Chanel
npc.name.paul=§7Paul
@@ -31,6 +42,11 @@ button.hello=Hello
button.noprob=No problem
button.letsgo=Let's Go!
## Common
message.outofbounds=§cOut of bounds!§b
message.incorrect=§cIncorrect!§b
message.talkto.ramses=Talk to §dRamses
message.talkto.chanel=Talk to §9Chanel
@@ -40,28 +56,77 @@ message.intro.make=Break the code!
message.intro.done=§aYou have cracked the code!§b
## Level 1 messages
message.level1.name=Level 1
message.level1.started=Level 1 is started!
message.level1.complete=Level 1 is complete!
message.level1.make=Make Level 1
message.level1.outOfBoun=§cOut of bounds!§bwd
message.mission1part1.name=Level 1
message.mission1part1.started=Level 1 is started!
message.mission1part1.complete=Level 1 is complete!
message.mission1part1.make=Make Level 1
## Level 2 messages
message.level2.name=Level 2
message.level2.started=Level 2 is started!
message.level2.complete=Level 2 is complete!
message.level2.make=Make Level 2
message.mission1part2.name=Level 2
message.mission1part2.started=Level 2 is started!
message.mission1part2.complete=Level 2 is complete!
message.mission1part2.make=Make Level 2
## Level 3 messages
message.level3.name=Level 3
message.level3.started=Level 3 is started!
message.level3.complete=Level 3 is complete!
message.level3.make=Make Level 3
message.mission1part3.name=Level 3
message.mission1part3.started=Level 3 is started!
message.mission1part3.complete=Level 3 is complete!
message.mission1part3.make=Make Level 3
## mission 2 part 1
message.mission2part1.name=Level 1
message.mission2part1.started=Level 1 is started!
message.mission2part1.complete=Level 1 is complete!
message.mission2part1.make=Make Level 1
## mission 2 part 2
message.mission2part2.name=Level 2
message.mission2part2.started=Level 2 is started!
message.mission2part2.complete=Level 2 is complete!
message.mission2part2.make=Make Level 2
## mission 3 part 1
message.mission3part1.name=Level 1
message.mission3part1.started=Level 1 is started!
message.mission3part1.complete=Level 1 is complete!
message.mission3part1.make=Make Level 1
## mission 3 part 2
message.mission3part2.name=Level 2
message.mission3part2.started=Level 2 is started!
message.mission3part2.complete=Level 2 is complete!
message.mission3part2.make=Make Level 2
## mission 3 part 3
message.mission3part3.name=Level 3
message.mission3part3.started=Level 3 is started!
message.mission3part3.complete=Level 3 is complete!
message.mission3part3.make=Make Level 3
## Goto messages
message.goto.field.1=Go to the First Field
message.goto.field.2=Go to the Second Field
message.goto.field.3=Go to the Last Field
chanel.greeting.1.text=Hello! I'm §9Chanel§0, the scientist. I'm here to help you with the vault.
chanel.greeting.1.button=Ok!
## Npc messages
chanel.greeting.1.text=Hey daar! Dit is jouw laatste missie in deze onderwaterwereld. De gemene piraten hebben de agent gevangengenomen in de onderwatertempel. Nadat je de agent helpt ontsnappen moet je ook wat koraal herstellen.
chanel.greeting.1.button=Hoe?
chanel.greeting.2.text=Je bevrijdt jouw Agent door alles van de afgelopen missies te gebruiken. In de opdrachten zullen zowel sequentie, eindige herhaling, enkelvoudige en meervoudige selecties voorkomen.
chanel.greeting.2.button=Wow!
chanel.greeting.3.text=Top! Eerst ga je de code moeten kraken om de ingestorte grot open te blazen. De code volgt een patroon. Alleen ik ben vergeten welk patroon...
chanel.greeting.3.button=Oké!
chanel.goto_temple.text=Snel! Ga door het opgeblazen gat voor het terug instort. Ik regel wel dat niks hier instort.
chanel.goto_temple.button=Let's Go!
bilal.greeting.1.text=De agent word gevangengehouden in deze tempel. Pas op, ik denk dat er vallen zijn in die tempel. Wees voorzichtig.
bilal.greeting.1.button=Oké!
suki.greeting.1.text=Oeps, je hebt de val geactiveerd. We zitten nu vast in deze tempel. Ik zal even rondkijken of er een manier is om de deur terug open te krijgen. Probeer jij ondertussen om de agent vrij te krijgen.
suki.greeting.1.button=Zal ik doen!
suki.greeting.2.text=Je moet de agent door het parcours laten wandelen. Pas op, je mag niet boven lava gaan anders zal de agent doodgaan! Veel succes!
suki.greeting.2.button=Oké!

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

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 };