NPCs included, finishing touches zijn nog nodig

This commit is contained in:
2024-09-11 16:54:16 +02:00
parent 283f95e00a
commit c323e98bcd
25 changed files with 1665 additions and 891 deletions

View File

@@ -1,7 +1,9 @@
import { BlockType, Vector3, World } from "@minecraft/server";
import { Vector3, world, World } from "@minecraft/server";
import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block";
import { vector3 } from "../utils/vectorUtils";
export type blockCondition = {
block: string;
block: (string | MinecraftBlockTypes)[];
position: Vector3;
};
@@ -14,7 +16,7 @@ export type blockCondition = {
* @throws Throws an error if there is no lever at the specified position.
*/
export function leverOn(world: World, position: Vector3): boolean {
let lever = world.getDimension("overworld").getBlock(position);
const lever = world.getDimension("overworld").getBlock(position);
if (!(lever?.typeId == "minecraft:lever")) {
throw new Error(`No lever at ${position}`);
}
@@ -42,3 +44,14 @@ export type AgentNoGoZone = {
export type LevelNoGoZone = {
zones: AgentNoGoZone[];
};
export const checkBlockCondition = (condition: LevelBlockCondition): boolean => {
let isComplete: boolean = true;
condition.conditions.forEach((condition) => {
const block = world.getDimension("overworld").getBlock(condition.position);
if (condition.block.indexOf(block!.typeId) === -1) {
isComplete = false;
}
});
return isComplete;
};

View File

@@ -39,8 +39,8 @@ function rotate(pos: Vector3, angle: number) {
const particleData = new MolangVariableMap();
particleData.setColorRGB("variable.color", {
red: 1,
green: 1,
red: 0,
green: 0.5,
blue: 1,
});

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

@@ -1,5 +1,6 @@
import { BlockType, BlockTypes, BlockVolume, Vector3, world } from "@minecraft/server";
import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block";
import { vector3 } from "./vectorUtils";
type Wall = {
startPos: Vector3;
@@ -20,5 +21,19 @@ function startLevel(commandBlockPos: Vector3) {
let volume: BlockVolume = new BlockVolume(commandBlockPos, commandBlockPos);
world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.RedstoneBlock);
}
function teleportAndFaceAgent(position: Vector3, facing: Vector3 = vector3(0, 0, 0)): void {
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 placeBlock(position: Vector3, blockType: MinecraftBlockTypes) {
const block = world.getDimension("overworld").getBlock(position);
block!.setType(blockType);
}
BlockTypes;
export { Wall, clearWall, fillWall, startLevel };
export { Wall, clearWall, fillWall, startLevel, teleportAndFaceAgent, placeBlock };

View File

@@ -0,0 +1,59 @@
import { MolangVariableMap, Vector3, world } from "@minecraft/server";
import { Vector3Add, vector3 } from "./vectorUtils";
import { PARTICLES, spawnParticle } from "./particleUtils";
let arrowTemplate: Vector3[] = [
vector3(0, 0, 0),
vector3(0.5, 0.5, 0),
vector3(-0.5, 0.5, 0),
vector3(0.75, 1, 0),
vector3(-0.75, 1, 0),
vector3(0, 0.5, 0),
vector3(0, 1, 0),
vector3(0, 1.5, 0),
vector3(0, 2, 0),
vector3(0, 2.5, 0),
];
let offset: Vector3 = vector3(0, 0, 0);
let angleOffset = 0;
let heightBobbing = 0;
let tickCounter = 0;
function rotate(pos: Vector3, angle: number) {
let x = pos.x;
let z = pos.z;
let newX = x * Math.cos(angle) - z * Math.sin(angle);
let newZ = x * Math.sin(angle) + z * Math.cos(angle);
return vector3(newX, pos.y, newZ);
}
const particleData = new MolangVariableMap();
particleData.setColorRGB("variable.color", {
red: 0,
green: 0.5,
blue: 1,
});
function drawSmallArrow(offsetPos: Vector3) {
tickCounter++;
if (tickCounter % 2 == 0) {
angleOffset += 0.1;
heightBobbing += 0.3;
offset = vector3(46.5, 75, 220.5);
arrowTemplate.forEach((pos) => {
let rotatedPos = rotate(pos, angleOffset);
let finalPos = Vector3Add(offsetPos, rotatedPos);
finalPos.y += Math.sin(heightBobbing) / 2;
spawnParticle(finalPos, PARTICLES.point, particleData);
});
}
}
export { drawSmallArrow };

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

@@ -6,138 +6,316 @@ import { MinecraftBlockTypes } from "../vanilla-data/mojang-block";
let level2Conditions: LevelBlockCondition = {
conditions: [
{
block: MinecraftBlockTypes.Air,
position: vector3(45, 70, 220),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-112, 69, 272),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(44, 70, 220),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-112, 69, 271),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(43, 70, 220),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-111, 69, 271),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(42, 70, 220),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-111, 69, 270),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(41, 70, 220),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-111, 69, 269),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(40, 70, 220),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-113, 69, 271),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(39, 70, 220),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-114, 69, 271),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(38, 70, 220),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-114, 69, 270),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(37, 70, 220),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-115, 69, 270),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(36, 70, 220),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-115, 69, 269),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(35, 70, 220),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-115, 69, 268),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(34, 70, 220),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-116, 69, 268),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 220),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 219),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-116, 69, 269),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 218),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-117, 69, 267),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 217),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-117, 69, 266),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 216),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-117, 69, 265),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 215),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-117, 69, 264),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 214),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-117, 69, 263),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 213),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-116, 69, 261),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(33, 70, 212),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(34, 70, 212),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-116, 69, 262),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(35, 70, 212),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-116, 69, 263),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(36, 70, 212),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-116, 69, 264),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(37, 70, 212),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-116, 69, 265),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(38, 70, 212),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-116, 69, 266),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(39, 70, 212),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-118, 69, 268),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(40, 70, 212),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-118, 69, 267),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(41, 70, 212),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-119, 69, 265),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(42, 70, 212),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-119, 69, 267),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(43, 70, 212),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-119, 69, 268),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(44, 70, 212),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-120, 69, 269),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(45, 70, 212),
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-120, 69, 268),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-120, 69, 267),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-121, 69, 269),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-122, 69, 268),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-123, 69, 267),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-123, 69, 266),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-122, 69, 266),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-121, 69, 265),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-122, 69, 265),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-123, 69, 265),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-123, 69, 263),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-122, 69, 263),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-122, 69, 262),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-122, 69, 261),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-119, 69, 261),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-118, 69, 261),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-118, 69, 260),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-119, 69, 260),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-120, 69, 260),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-122, 69, 260),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-124, 69, 260),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-124, 69, 259),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-122, 69, 259),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-122, 69, 258),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.JungleSapling],
position: vector3(-123, 69, 258),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.SweetBerryBush],
position: vector3(-113, 69, 269),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.SweetBerryBush],
position: vector3(-114, 69, 269),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.SweetBerryBush],
position: vector3(-114, 69, 268),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.SweetBerryBush],
position: vector3(-116, 69, 267),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.SweetBerryBush],
position: vector3(-117, 69, 269),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.SweetBerryBush],
position: vector3(-117, 69, 268),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.SweetBerryBush],
position: vector3(-117, 69, 262),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.SweetBerryBush],
position: vector3(-117, 69, 261),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.SweetBerryBush],
position: vector3(-118, 69, 262),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.SweetBerryBush],
position: vector3(-118, 69, 265),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.SweetBerryBush],
position: vector3(-118, 69, 266),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.SweetBerryBush],
position: vector3(-119, 69, 266),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.SweetBerryBush],
position: vector3(-120, 69, 261),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.SweetBerryBush],
position: vector3(-121, 69, 259),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.SweetBerryBush],
position: vector3(-121, 69, 260),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.SweetBerryBush],
position: vector3(-121, 69, 266),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.SweetBerryBush],
position: vector3(-121, 69, 267),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.SweetBerryBush],
position: vector3(-121, 69, 268),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.SweetBerryBush],
position: vector3(-122, 69, 267),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.SweetBerryBush],
position: vector3(-122, 69, 264),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.SweetBerryBush],
position: vector3(-123, 69, 264),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.SweetBerryBush],
position: vector3(-123, 69, 260),
},
{
block: [MinecraftBlockTypes.Air, MinecraftBlockTypes.SweetBerryBush],
position: vector3(-123, 69, 259),
},
],
};

View File

@@ -1,138 +1,509 @@
import { BlockType, Vector3 } from "@minecraft/server";
import { LevelBlockCondition } from "../Commandeer/level/levelTypes";
import { LevelBlockCondition, LevelNoGoZone } 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.GrassBlock],
position: vector3(-134, 67, 265),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(58, 70, 235),
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-135, 67, 265),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(59, 70, 235),
block: [MinecraftBlockTypes.Podzol],
position: vector3(-136, 67, 265),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 235),
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-137, 67, 265),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 234),
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-138, 67, 265),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 233),
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-139, 67, 265),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 232),
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-141, 67, 265),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(60, 70, 231),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(61, 70, 231),
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-146, 67, 265),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(62, 70, 231),
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-147, 67, 265),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(63, 70, 231),
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-133, 67, 264),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 231),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 232),
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-134, 67, 264),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 233),
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-135, 67, 264),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 234),
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-136, 67, 264),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 235),
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-138, 67, 264),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 236),
block: [MinecraftBlockTypes.Podzol],
position: vector3(-139, 67, 264),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 237),
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-140, 67, 264),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 238),
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-141, 67, 264),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(64, 70, 239),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(65, 70, 239),
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-145, 67, 264),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(66, 70, 239),
block: [MinecraftBlockTypes.Podzol],
position: vector3(-146, 67, 264),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(67, 70, 239),
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-147, 67, 264),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 239),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 238),
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-148, 67, 264),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 237),
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-133, 67, 263),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 236),
block: [MinecraftBlockTypes.Podzol],
position: vector3(-135, 67, 263),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(68, 70, 235),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(69, 70, 235),
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-137, 67, 263),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(70, 70, 235),
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-138, 67, 263),
},
{
block: MinecraftBlockTypes.Air,
position: vector3(71, 70, 235),
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-139, 67, 263),
},
{
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-140, 67, 263),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-141, 67, 263),
},
{
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-142, 67, 263),
},
{
block: [MinecraftBlockTypes.Podzol],
position: vector3(-143, 67, 263),
},
{
block: [MinecraftBlockTypes.Podzol],
position: vector3(-144, 67, 263),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-145, 67, 263),
},
{
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-146, 67, 263),
},
{
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-147, 67, 263),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-148, 67, 263),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-133, 67, 262),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-134, 67, 262),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-135, 67, 262),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-138, 67, 262),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-139, 67, 262),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-140, 67, 262),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-142, 67, 262),
},
{
block: [MinecraftBlockTypes.Podzol],
position: vector3(-143, 67, 262),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-144, 67, 262),
},
{
block: [MinecraftBlockTypes.Podzol],
position: vector3(-145, 67, 262),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-147, 67, 262),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-148, 67, 262),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-133, 67, 261),
},
{
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-134, 67, 261),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-135, 67, 261),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-136, 67, 261),
},
{
block: [MinecraftBlockTypes.Podzol],
position: vector3(-138, 67, 261),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-139, 67, 261),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-140, 67, 261),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-141, 67, 261),
},
{
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-142, 67, 261),
},
{
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-143, 67, 261),
},
{
block: [MinecraftBlockTypes.Podzol],
position: vector3(-145, 67, 261),
},
{
block: [MinecraftBlockTypes.Podzol],
position: vector3(-146, 67, 261),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-147, 67, 261),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-148, 67, 261),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-133, 67, 260),
},
{
block: [MinecraftBlockTypes.Podzol],
position: vector3(-134, 67, 260),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-135, 67, 260),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-136, 67, 260),
},
{
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-137, 67, 260),
},
{
block: [MinecraftBlockTypes.Podzol],
position: vector3(-138, 67, 260),
},
{
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-139, 67, 260),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-141, 67, 260),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-142, 67, 260),
},
{
block: [MinecraftBlockTypes.Podzol],
position: vector3(-143, 67, 260),
},
{
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-144, 67, 260),
},
{
block: [MinecraftBlockTypes.Podzol],
position: vector3(-145, 67, 260),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-147, 67, 260),
},
{
block: [MinecraftBlockTypes.Podzol],
position: vector3(-148, 67, 260),
},
{
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-133, 67, 259),
},
{
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-134, 67, 259),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-135, 67, 259),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-136, 67, 259),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-137, 67, 259),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-138, 67, 259),
},
{
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-139, 67, 259),
},
{
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-140, 67, 259),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-141, 67, 259),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-142, 67, 259),
},
{
block: [MinecraftBlockTypes.Podzol],
position: vector3(-143, 67, 259),
},
{
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-144, 67, 259),
},
{
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-145, 67, 259),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-146, 67, 259),
},
{
block: [MinecraftBlockTypes.Podzol],
position: vector3(-147, 67, 259),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-148, 67, 259),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-133, 67, 258),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-134, 67, 258),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-138, 67, 258),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-139, 67, 258),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-140, 67, 258),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-141, 67, 258),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-142, 67, 258),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-143, 67, 258),
},
{
block: [MinecraftBlockTypes.Podzol],
position: vector3(-144, 67, 258),
},
{
block: [MinecraftBlockTypes.Podzol],
position: vector3(-145, 67, 258),
},
{
block: [MinecraftBlockTypes.Podzol],
position: vector3(-146, 67, 258),
},
{
block: [MinecraftBlockTypes.Podzol],
position: vector3(-147, 67, 258),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-148, 67, 258),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-145, 67, 266),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-145, 67, 267),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-145, 67, 269),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-146, 67, 266),
},
{
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-146, 67, 269),
},
{
block: [MinecraftBlockTypes.Magma, MinecraftBlockTypes.Cobblestone],
position: vector3(-146, 67, 270),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-146, 67, 272),
},
{
block: [MinecraftBlockTypes.Podzol],
position: vector3(-147, 67, 266),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-147, 67, 267),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-147, 67, 268),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-147, 67, 269),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-147, 67, 270),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-147, 67, 271),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-147, 67, 272),
},
{
block: [MinecraftBlockTypes.Podzol],
position: vector3(-148, 67, 266),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-148, 67, 267),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-148, 67, 268),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-148, 67, 269),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-148, 67, 270),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-148, 67, 271),
},
{
block: [MinecraftBlockTypes.GrassBlock],
position: vector3(-148, 67, 272),
},
],
};

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,26 +0,0 @@
import { LevelBlockCondition, LevelLeverCondition } from "../Commandeer/level/levelTypes";
import { vector3 } from "../Commandeer/utils/vectorUtils";
import { MinecraftBlockTypes } from "../vanilla-data/mojang-block";
let levelIntroConditions: LevelBlockCondition = {
conditions: [
{
block: MinecraftBlockTypes.EmeraldBlock,
position: vector3(2471, 12, 108),
},
{
block: MinecraftBlockTypes.EmeraldBlock,
position: vector3(2469, 12, 108),
},
{
block: MinecraftBlockTypes.LapisBlock,
position: vector3(2468, 12, 108),
},
{
block: MinecraftBlockTypes.LapisBlock,
position: vector3(2464, 12, 108),
},
],
};
export { levelIntroConditions };

View File

@@ -10,47 +10,17 @@ import {
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 { placeBlock, startLevel, teleportAndFaceAgent } 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";
import { MinecraftBiomeTypes } from "../../vanilla-data/mojang-biome";
import level2 from "../level2/mission1";
const Level1CommandBlockPos: Vector3 = vector3(-73, 71, 283);
const Level1CommandBlockPos: Vector3 = vector3(-73, 71, 283);
const level1StartPosition: Vector3 = vector3(-73, 69, 272);
const Level1EndPosition: Vector3 = vector3(-83, 69, 258);
let toolPositions = [vector3(-75, 68, 268), vector3(-77, 68, 266), vector3(-79, 68, 264), vector3(-81, 68, 262)];
let flowerPositions = [
vector3(-74, 69, 272),
vector3(-75, 69, 272),
vector3(-75, 69, 271),
vector3(-75, 69, 270),
vector3(-75, 69, 269),
vector3(-76, 69, 270),
vector3(-77, 69, 270),
vector3(-77, 69, 269),
vector3(-77, 69, 268),
vector3(-77, 69, 267),
vector3(-78, 69, 268),
vector3(-79, 69, 268),
vector3(-79, 69, 267),
vector3(-79, 69, 266),
vector3(-79, 69, 265),
vector3(-80, 69, 266),
vector3(-81, 69, 266),
vector3(-81, 69, 265),
vector3(-81, 69, 264),
vector3(-81, 69, 263),
vector3(-82, 69, 264),
vector3(-83, 69, 264),
vector3(-83, 69, 263),
vector3(-83, 69, 262),
vector3(-83, 69, 261),
vector3(-83, 69, 260),
vector3(-83, 69, 259),
];
let toolBlocks = [
MinecraftBlockTypes.RedWool,
@@ -61,8 +31,10 @@ let toolBlocks = [
let noDrillYet = true;
let noChainsawYet = true;
let isComplete = false;
let hasAllTools = false;
let isOutOfBounds = false;
const level1ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
const level1: Level = new Level(
() => {
pupeteer.sendWorldMessage("%message.level1.started");
@@ -80,14 +52,8 @@ const level1: Level = new Level(
world.getDimension("Overworld").runCommand("/fill -86 71 253 -86 75 275 air replace barrier");
mindKeeper.increment(CURRENT_LEVEL);
level2.reset();
world.getDimension("Overworld").runCommand("/fill -128 71 255 -128 74 276 barrier replace air");
},
() => {
let isComplete = false;
let isOutOfBounds = false;
let hasAllTools = false;
let plantedAllFlowers = false;
for (let i = 0; i < toolPositions.length; i++) {
let block = world.getDimension("overworld").getBlock(toolPositions[i]);
if (block?.type.id == MinecraftBlockTypes.Air) {
@@ -109,19 +75,9 @@ const level1: Level = new Level(
world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.RedstoneBlock);
}
for (let i = 0; i < flowerPositions.length; i++) {
let block = world.getDimension("overworld").getBlock(flowerPositions[i]);
if (block?.type.id == MinecraftBlockTypes.BlueOrchid) {
flowerPositions.splice(i, 1);
}
}
if (toolPositions.length == 0) {
hasAllTools = true;
}
if (flowerPositions.length == 0) {
plantedAllFlowers = true;
}
let agentPos = getAgentLocation();
let blockAir = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0)));
@@ -129,31 +85,31 @@ const level1: Level = new Level(
if (blockAir && blockAir.type.id === MinecraftBlockTypes.Air) {
if (blockBarrier && blockBarrier.type.id === MinecraftBlockTypes.Barrier) {
return false;
isOutOfBounds = false;
} else {
return true;
isOutOfBounds = true;
}
}
if (isAgentAt(Level1EndPosition) && hasAllTools && plantedAllFlowers) {
if (isAgentAt(Level1EndPosition) && hasAllTools) {
isComplete = true;
} else if (isAgentAt(Level1EndPosition) && !hasAllTools) {
isOutOfBounds = true;
}
if (isOutOfBounds) {
teleportAndFaceAgent(level1StartPosition, vector3(-84, 69, 272));
world.getDimension("overworld").runCommand("execute as @p run codebuilder runtime stop @s");
noDrillYet = true;
noChainsawYet = true;
pupeteer.sendWorldMessage("%message.level1.outOfBounds");
pupeteer.setTitleTimed("%message.level1.outOfBounds", 2.5);
world.getDimension("overworld").runCommand("execute as @p run codebuilder runtime stop @s");
world.getDimension("Overworld").runCommand("/fill -74 69 272 -83 69 259 air replace blue_orchid");
toolPositions = [vector3(-75, 68, 268), vector3(-77, 68, 266), vector3(-79, 68, 264), vector3(-81, 68, 262)];
for (let i = 0; i < toolPositions.length; i++) {
let blockToReplace = world.getDimension("overworld").getBlock(toolPositions[i]);
if (blockToReplace?.type.id === MinecraftBlockTypes.Air) {
placeBlock(toolPositions[i], toolBlocks[i]);
}
}
teleportAndFaceAgent(level1StartPosition, vector3(-84, 69, 272));
return false;
} else if (isComplete) {
return true;
@@ -161,32 +117,18 @@ const level1: Level = new Level(
return false;
},
() => {
world.getDimension("Overworld").runCommand("/fill -74 69 272 -83 69 259 air replace blue_orchid");
isComplete = false;
noDrillYet = true;
noChainsawYet = true;
teleportAndFaceAgent(level1StartPosition, vector3(-84, 69, 272));
toolPositions = [vector3(-75, 68, 268), vector3(-77, 68, 266), vector3(-79, 68, 264), vector3(-81, 68, 262)];
for (let i = 0; i < toolPositions.length; i++) {
placeBlock(toolPositions[i], toolBlocks[i]);
let blockToReplace = world.getDimension("overworld").getBlock(toolPositions[i]);
if (blockToReplace?.type.id === MinecraftBlockTypes.Air) {
placeBlock(toolPositions[i], toolBlocks[i]);
}
}
}
);
function placeBlock(position: Vector3, blockType: MinecraftBlockTypes) {
const block = world.getDimension("overworld").getBlock(position);
block!.setType(blockType);
}
function teleportAndFaceAgent(position: Vector3, facing: Vector3 = vector3(0, 0, 0)): void {
if (facing == vector3(-84, 69, 272)) {
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}`
);
}
}
export default level1;

View File

@@ -2,18 +2,22 @@ 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 { startLevel, teleportAndFaceAgent } from "../../Commandeer/utils/levelUtils";
import { vector3, Vector3Add, Vector3ToCommandString } from "../../Commandeer/utils/vectorUtils";
// import { level2Conditions } from "../../levelConditions/level2";
import { mindKeeper, CURRENT_LEVEL } from "../../main";
import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block";
import level3 from "./mission2";
const level2CommandBlockPos: Vector3 = vector3(-111, 70, 282);
import { checkBlockCondition } from "../../Commandeer/level/levelTypes";
import { level2Conditions } from "../../levelConditions/level2";
const level2CommandBlockPos: Vector3 = vector3(-111, 70, 282);
const level2StartPosition: Vector3 = vector3(-111, 69, 272);
const level2EndPosition: Vector3 = vector3(-124, 69, 258);
const level2ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
let isComplete = false;
let isOutOfBounds = false;
const level2: Level = new Level(
() => {
pupeteer.sendWorldMessage("%message.level2.started");
@@ -28,15 +32,10 @@ const level2: Level = new Level(
pupeteer.clearActionBar();
pupeteer.sendWorldMessage("%message.level2.complete");
pupeteer.setTitleTimed("%message.level2.complete", 2.5);
world.getDimension("Overworld").runCommand("/fill -128 71 255 -128 74 276 air replace barrier");
mindKeeper.increment(CURRENT_LEVEL);
level3.reset();
world.getDimension("Overworld").runCommand("/fill -154 69 255 -154 74 276 barrier replace air");
},
() => {
let isComplete = false;
let isOutOfBounds = false;
let agentPos = getAgentLocation();
let blockAir = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0)));
@@ -44,15 +43,20 @@ const level2: Level = new Level(
isOutOfBounds = true;
}
if (isAgentAt(level2EndPosition)) {
const isCorrect = checkBlockCondition(level2Conditions);
if (isAgentAt(level2EndPosition) && isCorrect) {
isComplete = true;
}
if (isOutOfBounds) {
if (isOutOfBounds || (isAgentAt(level2EndPosition) && !isCorrect)) {
teleportAndFaceAgent(level2StartPosition, vector3(-125, 69, 272));
if (!isCorrect) {
pupeteer.sendWorldMessage("%message.level.inCorrect");
} else {
pupeteer.sendWorldMessage("%message.level2.outOfBounds");
pupeteer.setTitleTimed("%message.level2.outOfBounds", 2.5);
}
pupeteer.sendWorldMessage("%message.level2.outOfBounds");
pupeteer.setTitleTimed("%message.level2.outOfBounds", 2.5);
world.getDimension("overworld").runCommand("execute as @p run codebuilder runtime stop @s");
world.getDimension("Overworld").runCommand("/fill -111 69 272 -124 69 258 air replace sweet_berry_bush");
world.getDimension("Overworld").runCommand("/fill -111 69 272 -124 69 258 air replace jungle_sapling");
@@ -64,23 +68,10 @@ const level2: Level = new Level(
return false;
},
() => {
isComplete = false;
world.getDimension("Overworld").runCommand("/fill -111 69 272 -124 69 258 air replace sweet_berry_bush");
world.getDimension("Overworld").runCommand("/fill -111 69 272 -124 69 258 air replace jungle_sapling");
}
);
function teleportAndFaceAgent(position: Vector3, facing: Vector3 = vector3(0, 0, 0)): void {
if (facing == vector3(-125, 69, 272)) {
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}`
);
}
}
export default level2;

View File

@@ -2,23 +2,29 @@ import { BlockVolume, 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 { startLevel, teleportAndFaceAgent } 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";
import level4 from "./mission3";
const Level3CommandBlockPos: Vector3 = vector3(-133, 68, 281);
import { level3Conditions } from "../../levelConditions/level3";
import { checkBlockCondition } from "../../Commandeer/level/levelTypes";
const level3CommandBlockPos: Vector3 = vector3(-133, 68, 281);
const level3StartPosition: Vector3 = vector3(-133, 68, 265);
const Level3EndPosition: Vector3 = vector3(-148, 68, 265);
const level3EndPosition: Vector3 = vector3(-148, 68, 265);
let volumeResetRedstoneBlock: BlockVolume = new BlockVolume(vector3(-133, 68, 281), vector3(-133, 68, 281));
let isComplete = false;
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);
startLevel(level3CommandBlockPos);
teleportAndFaceAgent(level3StartPosition, vector3(-148, 68, 265));
world.getDimension("overworld").fillBlocks(volumeResetRedstoneBlock, MinecraftBlockTypes.RedstoneBlock);
},
() => {
pupeteer.setActionBar("%message.level3.make");
@@ -27,41 +33,28 @@ const level3: Level = new Level(
pupeteer.clearActionBar();
pupeteer.sendWorldMessage("%message.level3.complete");
pupeteer.setTitleTimed("%message.level3.complete", 2.5);
world.getDimension("Overworld").runCommand("/fill -154 69 255 -154 74 276 air replace barrier");
mindKeeper.increment(CURRENT_LEVEL);
level4.reset();
world.getDimension("Overworld").runCommand("/fill -182 69 255 -182 74 276 barrier replace air");
},
() => {
let isComplete = false;
let isOutOfBounds = false;
const isCorrect = checkBlockCondition(level3Conditions);
let agentPos = getAgentLocation();
let blockAir = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0)));
let blockBarrier = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -2, 0)));
if (blockAir && blockAir.type.id === MinecraftBlockTypes.Air) {
if (blockBarrier && blockBarrier.type.id === MinecraftBlockTypes.Barrier) {
return false;
} else {
return true;
}
}
if (isAgentAt(Level3EndPosition)) {
if (isAgentAt(level3EndPosition) && isCorrect) {
isComplete = true;
}
if (isOutOfBounds) {
if (isAgentAt(level3EndPosition) && !isCorrect) {
teleportAndFaceAgent(level3StartPosition, vector3(-148, 68, 265));
pupeteer.sendWorldMessage("%message.level3.outOfBounds");
pupeteer.setTitleTimed("%message.level3.outOfBounds", 2.5);
if (!isCorrect) {
pupeteer.sendWorldMessage("%message.level.inCorrect");
} else {
pupeteer.sendWorldMessage("%message.level3.outOfBounds");
pupeteer.setTitleTimed("%message.level3.outOfBounds", 2.5);
}
world.getDimension("overworld").runCommand("execute as @p run codebuilder runtime stop @s");
world.getDimension("Overworld").runCommand("/fill -133 68 272 -148 68 258 air replace sweet_berry_bush");
world.getDimension("Overworld").runCommand("/fill -133 67 272 -148 67 258 magma replace cobblestone");
let volume: BlockVolume = new BlockVolume(vector3(-131, 69, 284), vector3(-131, 69, 284));
world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.RedstoneBlock);
world.getDimension("overworld").fillBlocks(volumeResetRedstoneBlock, MinecraftBlockTypes.RedstoneBlock);
return false;
} else if (isComplete) {
@@ -70,25 +63,9 @@ const level3: Level = new Level(
return false;
},
() => {
world.getDimension("Overworld").runCommand("/fill -133 68 272 -148 68 258 air replace sweet_berry_bush");
world.getDimension("Overworld").runCommand("/fill -133 67 272 -148 67 258 magma replace cobblestone");
let volume: BlockVolume = new BlockVolume(vector3(-131, 69, 284), vector3(-131, 69, 284));
world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.RedstoneBlock);
isComplete = false;
world.getDimension("overworld").fillBlocks(volumeResetRedstoneBlock, MinecraftBlockTypes.RedstoneBlock);
}
);
function teleportAndFaceAgent(position: Vector3, facing: Vector3 = vector3(0, 0, 0)): void {
if (facing == vector3(-148, 68, 265)) {
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}`
);
}
}
export default level3;

View File

@@ -2,22 +2,28 @@ import { BlockVolume, 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 { startLevel, teleportAndFaceAgent } 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";
import level5 from "../level3/mission1";
const Level4CommandBlockPos: Vector3 = vector3(-161, 68, 291);
const level4StartPosition: Vector3 = vector3(-161, 62, 261);
const level4EndPosition: Vector3 = vector3(-174, 62, 268);
const level4ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
let volumeResetRedstoneBlock: BlockVolume = new BlockVolume(vector3(-163, 67, 291), vector3(-163, 67, 291));
let isComplete = false;
let isOutOfBounds = false;
const level4: Level = new Level(
() => {
pupeteer.sendWorldMessage("%message.level4.started");
pupeteer.setTitleTimed("%message.level4.name", 2.5);
startLevel(Level4CommandBlockPos);
teleportAndFaceAgent(level4StartPosition, vector3(-175, 62, 261));
world.getDimension("overworld").fillBlocks(volumeResetRedstoneBlock, MinecraftBlockTypes.RedstoneBlock);
},
() => {
pupeteer.setActionBar("%message.level4.make");
@@ -31,9 +37,6 @@ const level4: Level = new Level(
level5.reset();
},
() => {
let isComplete = false;
let isOutOfBounds = false;
let agentPos = getAgentLocation();
let blockAir = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0)));
@@ -46,13 +49,12 @@ const level4: Level = new Level(
}
if (isOutOfBounds) {
world.getDimension("overworld").runCommand("execute as @p run codebuilder runtime stop @s");
teleportAndFaceAgent(level4StartPosition, vector3(-175, 62, 261));
pupeteer.sendWorldMessage("%message.level4.outOfBounds");
pupeteer.setTitleTimed("%message.level4.outOfBounds", 2.5);
world.getDimension("overworld").runCommand("execute as @p run codebuilder runtime stop @s");
let volume: BlockVolume = new BlockVolume(vector3(-163, 67, 291), vector3(-163, 67, 291));
world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.RedstoneBlock);
world.getDimension("overworld").fillBlocks(volumeResetRedstoneBlock, MinecraftBlockTypes.RedstoneBlock);
return false;
} else if (isComplete) {
@@ -61,23 +63,9 @@ const level4: Level = new Level(
return false;
},
() => {
let volume: BlockVolume = new BlockVolume(vector3(-163, 67, 291), vector3(-163, 67, 291));
world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.RedstoneBlock);
isComplete = false;
world.getDimension("overworld").fillBlocks(volumeResetRedstoneBlock, MinecraftBlockTypes.RedstoneBlock);
}
);
function teleportAndFaceAgent(position: Vector3, facing: Vector3 = vector3(0, 0, 0)): void {
if (facing == vector3(-175, 62, 261)) {
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}`
);
}
}
export default level4;

View File

@@ -2,34 +2,41 @@ import { BlockVolume, 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 { placeBlock, startLevel, teleportAndFaceAgent } from "../../Commandeer/utils/levelUtils";
import { vector3, Vector3Add, Vector3ToCommandString } from "../../Commandeer/utils/vectorUtils";
// import { level2Conditions } from "../../levelConditions/level2";
import { mindKeeper, CURRENT_LEVEL } from "../../main";
import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block";
const level5CommandBlockPos: Vector3 = vector3(-255, 67, 244);
const level5CommandBlockPos: Vector3 = vector3(-255, 67, 244);
const level5StartPosition: Vector3 = vector3(-226, 65, 244);
const level5EndPosition: Vector3 = vector3(-226, 65, 229);
const level5ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
let volumeResetRedstoneBlock: BlockVolume = new BlockVolume(vector3(-255, 67, 246), vector3(-255, 67, 246));
let isOutOfBounds = false;
let isComplete = false;
let diamondAndPickaxePositions = [
vector3(-220, 64, 243),
vector3(-224, 64, 242),
vector3(-216, 64, 242),
vector3(-217, 64, 240),
vector3(-218, 64, 241),
vector3(-226, 64, 239),
vector3(-214, 64, 238),
vector3(-217, 64, 238),
vector3(-220, 64, 238),
vector3(-219, 64, 236),
vector3(-221, 64, 235),
vector3(-225, 64, 235),
vector3(-217, 64, 235),
vector3(-215, 64, 233),
vector3(-227, 64, 232),
vector3(-225, 64, 231),
vector3(-218, 64, 231),
vector3(-223, 64, 230),
vector3(-214, 64, 230),
vector3(-219, 64, 229),
vector3(-225, 64, 229),
];
const level5: Level = new Level(
@@ -38,6 +45,7 @@ const level5: Level = new Level(
pupeteer.setTitleTimed("%message.level5.name", 2.5);
startLevel(level5CommandBlockPos);
teleportAndFaceAgent(level5StartPosition, vector3(-226, 65, 229));
world.getDimension("overworld").fillBlocks(volumeResetRedstoneBlock, MinecraftBlockTypes.RedstoneBlock);
},
() => {
pupeteer.setActionBar("%message.level5.make");
@@ -46,16 +54,10 @@ const level5: Level = new Level(
pupeteer.clearActionBar();
pupeteer.sendWorldMessage("%message.level5.complete");
pupeteer.setTitleTimed("%message.level5.complete", 2.5);
// world.getDimension("Overworld").runCommand("/fill -128 71 255 -128 74 276 air replace barrier");
mindKeeper.increment(CURRENT_LEVEL);
},
() => {
let isComplete = false;
let isOutOfBounds = false;
//6 blocks lower is lava
let agentPos = getAgentLocation();
let blockAir = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0)));
let blockMagma = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0)));
@@ -77,14 +79,13 @@ const level5: Level = new Level(
}
if (isOutOfBounds) {
world.getDimension("overworld").runCommand("execute as @p run codebuilder runtime stop @s");
teleportAndFaceAgent(level5StartPosition, vector3(-226, 65, 229));
pupeteer.sendWorldMessage("%message.level5.outOfBounds");
pupeteer.setTitleTimed("%message.level5.outOfBounds", 2.5);
world.getDimension("overworld").runCommand("execute as @p run codebuilder runtime stop @s");
let volume: BlockVolume = new BlockVolume(vector3(-255, 67, 246), vector3(-255, 67, 246));
world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.RedstoneBlock);
world.getDimension("overworld").fillBlocks(volumeResetRedstoneBlock, MinecraftBlockTypes.RedstoneBlock);
for (let i = 0; i < diamondAndPickaxePositions.length; i++) {
let blockToReplace = world.getDimension("overworld").getBlock(diamondAndPickaxePositions[i]);
@@ -100,6 +101,7 @@ const level5: Level = new Level(
return false;
},
() => {
isComplete = false;
world.getDimension("Overworld").runCommand("/fill -213 64 244 -227 64 229 stone replace podzol");
for (let i = 0; i < diamondAndPickaxePositions.length; i++) {
let blockToReplace = world.getDimension("overworld").getBlock(diamondAndPickaxePositions[i]);
@@ -107,28 +109,8 @@ const level5: Level = new Level(
placeBlock(diamondAndPickaxePositions[i], MinecraftBlockTypes.PurpleWool);
}
}
let volume: BlockVolume = new BlockVolume(vector3(-255, 67, 246), vector3(-255, 67, 246));
world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.RedstoneBlock);
world.getDimension("overworld").fillBlocks(volumeResetRedstoneBlock, MinecraftBlockTypes.RedstoneBlock);
}
);
function placeBlock(position: Vector3, blockType: MinecraftBlockTypes) {
const block = world.getDimension("overworld").getBlock(position);
block!.setType(blockType);
}
function teleportAndFaceAgent(position: Vector3, facing: Vector3 = vector3(0, 0, 0)): void {
if (facing == vector3(-226, 65, 229)) {
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}`
);
}
}
export default level5;

View File

@@ -7,6 +7,7 @@ import {
Dimension,
TicksPerSecond,
BlockVolume,
ScriptEventCommandMessageAfterEvent,
} from "@minecraft/server";
import { Mindkeeper, StoreType } from "./Commandeer/mindKeeper";
import Pupeteer from "./Commandeer/pupeteer";
@@ -17,7 +18,7 @@ import { TrailMaker } from "./Commandeer/trail/trailMaker";
import * as CCTrigger from "./Commandeer/Trigger/CCTrigger";
import { Commands } from "./Commandeer/command/command";
import { Trail } from "./Commandeer/trail/trailEngine";
import { startTrail } from "./trails/startTrail";
import { levelStartTrail } from "./trails/startTrail";
import level1 from "./levels/level1/mission1";
import level2 from "./levels/level2/mission1";
import level3 from "./levels/level2/mission2";
@@ -25,10 +26,14 @@ import level4 from "./levels/level2/mission3";
import level5 from "./levels/level3/mission1";
import { MinecraftBlockTypes } from "./vanilla-data/mojang-block";
import { TransitionTrailToLevel2 } from "./trails/TransitionTrailToLevel2";
import { TransitionTrailToLevel3 } from "./trails/TransitionTrailToLevel3";
import { TransitionTrailToLevel4 } from "./trails/TransitionTrailToLevel4";
import { TransitionTrailBeforeLevel3 } from "./trails/TransitionTrailBeforeLevel3";
import { TransitionTrailToLevel5 } from "./trails/TransitionTrailToLevel5";
import { TransitionTrailToTheEnd } from "./trails/TransitionTrailToTheEnd";
import { setNPCDialog } from "./Commandeer/utils/entityUtils";
import { drawArrow } from "./Commandeer/utils/arrow";
import { TransitionTrailBeforeLevel5 } from "./trails/TransitionTrailBeforeLevel5";
import { TransitionTrailBeforeLevel4 } from "./trails/TransitionTrailBeforeLevel4";
import { drawSmallArrow } from "./Commandeer/utils/smallArrow";
const mindKeeper = new Mindkeeper(world);
const trailMaker: TrailMaker.Maker = new TrailMaker.Maker();
@@ -36,27 +41,27 @@ const triggerManager = new CCTrigger.Manager(mindKeeper);
const CURRENT_LEVEL = "currentLevel";
const AGENT_ID = "agentid";
const PREFIX = "!";
const frameDuration = 7;
const DEVELOPER_MODE = true;
export { mindKeeper, CURRENT_LEVEL, triggerManager };
let introTrail: Trail = new Trail("introTrail", 4, 4);
introTrail.fromTrail(startTrail);
let startTrail: Trail = new Trail("startTrail", 4, 4);
startTrail.fromTrail(levelStartTrail);
let transitionTrail1 = new Trail("transitionTrail1", 2, 2);
transitionTrail1.fromTrail(TransitionTrailToLevel2);
let transitionTrail2 = new Trail("transitionTrail2", 2, 2);
transitionTrail2.fromTrail(TransitionTrailToLevel3);
transitionTrail2.fromTrail(TransitionTrailBeforeLevel3);
let transitionTrail3 = new Trail("transitionTrail3", 2, 2);
transitionTrail3.fromTrail(TransitionTrailToLevel4);
transitionTrail3.fromTrail(TransitionTrailBeforeLevel4);
let transitionTrail4 = new Trail("transitionTrail4", 2, 2);
transitionTrail4.fromTrail(TransitionTrailToLevel5);
transitionTrail4.fromTrail(TransitionTrailBeforeLevel5);
let transitionTrail5 = new Trail("transitionTrail5", 2, 2);
transitionTrail5.fromTrail(TransitionTrailToTheEnd);
transitionTrail5.fromTrail(TransitionTrailToLevel5);
let transitionTrail6 = new Trail("transitionTrail6", 2, 2);
transitionTrail6.fromTrail(TransitionTrailToTheEnd);
const frameDuration = 7;
let animationPlaying = false;
let tickCounter = 0;
let gateRoot = vector3(-226, 68, 223);
enum GateState {
open,
@@ -64,8 +69,6 @@ enum GateState {
}
let gateState = GateState.closed;
const DEVELOPER_MODE = true;
let tickCounter = 0;
system.runInterval(async () => {
tickCounter++;
if (mindKeeper.initialised) {
@@ -77,57 +80,92 @@ system.runInterval(async () => {
const currentLevel = mindKeeper.get(CURRENT_LEVEL);
switch (currentLevel) {
case 0:
Pupeteer.setActionBar("Leave the treehouse and go down the ladder.");
introTrail.spawnNext();
Pupeteer.setActionBar("%message.intro");
setNPCDialog("bilal1", "bilal_beforelevel_1_1");
startTrail.spawnNext();
break;
case 1:
level1.update();
Pupeteer.setActionBar("%message.talkto.bilal");
break;
case 2:
Pupeteer.setActionBar("Follow the trail to the next level.");
transitionTrail1.spawnNext();
break;
case 3:
level2.update();
level1.update();
break;
case 4:
Pupeteer.setActionBar("Follow the trail to the next level.");
transitionTrail2.spawnNext();
setNPCDialog("bilal1", "bilal_afterlevel_1_1");
Pupeteer.setActionBar("%message.talkto.bilal");
break;
case 5:
level3.update();
transitionTrail1.spawnNext();
setNPCDialog("chanel1", "chanel_beforelevel_2_1");
Pupeteer.setActionBar("%message.talkto.chanel");
break;
case 6:
Pupeteer.setActionBar("Follow the trail to the next level.");
transitionTrail3.spawnNext();
drawArrow(vector3(-118.5, 78, 265.5));
level2.update();
break;
case 7:
level4.update();
setNPCDialog("chanel1", "chanel_afterlevel_2_1");
transitionTrail2.spawnNext();
Pupeteer.setActionBar("%message.talkto.chanel");
break;
case 8:
Pupeteer.setActionBar("Follow the trail to the next level.");
transitionTrail4.spawnNext();
drawArrow(vector3(-141.5, 78, 265.5));
level3.update();
break;
case 9:
setNPCDialog("chanel1", "chanel_afterlevel_3_1");
transitionTrail3.spawnNext();
Pupeteer.setActionBar("%message.talkto.chanel");
break;
case 10:
drawArrow(vector3(-167.5, 78, 265.5));
drawSmallArrow(vector3(-161.5, 76, 276.5));
level4.update();
break;
case 11:
setNPCDialog("chanel1", "chanel_afterlevel_4_1");
transitionTrail4.spawnNext();
Pupeteer.setActionBar("%message.talkto.chanel");
break;
case 12:
Pupeteer.setActionBar("Follow the trail to the next level.");
transitionTrail5.spawnNext();
break;
case 13:
setNPCDialog("farah1", "farah_beforelevel_5_1");
Pupeteer.setActionBar("%message.talkto.farah");
break;
case 14:
level5.update();
break;
case 10:
transitionTrail5.spawnNext();
case 15:
transitionTrail6.spawnNext();
if (gateState == GateState.closed) {
PlayGateOpenAnimation();
gateState = GateState.open;
PlayGateOpenAnimation();
}
break;
case 11:
Pupeteer.setActionBar("You completed the mission.");
case 16:
Pupeteer.setActionBar("%message.end");
break;
}
}
});
@@ -167,9 +205,6 @@ const gateFrames: ClonePos[] = [
let PlayGateOpenAnimation = async () => {
playAnimation(gateFrames, frameDuration, false, gateRoot);
if (mindKeeper.get(CURRENT_LEVEL) == 0) {
mindKeeper.increment(CURRENT_LEVEL);
}
};
let ResetGate = () => SetFrame(gateFrames[0], gateRoot);
@@ -184,7 +219,6 @@ async function SetFrame(frame: ClonePos, destination: Vector3) {
);
}
let animationPlaying = false;
async function playAnimation(
frames: ClonePos[],
delayTime: number,
@@ -217,38 +251,26 @@ async function playAnimation(
}
}
triggerManager.RegisterFunctionTrigger("BottomTreeHouse", async (event) => {
triggerManager.RegisterFunctionTrigger("BottomTreehouse", async (event) => {
if (mindKeeper.get(CURRENT_LEVEL) == 0) {
mindKeeper.increment(CURRENT_LEVEL);
}
});
triggerManager.RegisterFunctionTrigger("PastLevel1", async (event) => {
triggerManager.RegisterFunctionTrigger("level1", async (event) => {
if (mindKeeper.get(CURRENT_LEVEL) == 2) {
mindKeeper.increment(CURRENT_LEVEL);
}
});
triggerManager.RegisterFunctionTrigger("PastLevel2", async (event) => {
if (mindKeeper.get(CURRENT_LEVEL) == 4) {
mindKeeper.increment(CURRENT_LEVEL);
}
});
triggerManager.RegisterFunctionTrigger("PastLevel3", async (event) => {
if (mindKeeper.get(CURRENT_LEVEL) == 6) {
mindKeeper.increment(CURRENT_LEVEL);
}
});
triggerManager.RegisterFunctionTrigger("PastLevel4", async (event) => {
if (mindKeeper.get(CURRENT_LEVEL) == 8) {
triggerManager.RegisterFunctionTrigger("level5", async (event) => {
if (mindKeeper.get(CURRENT_LEVEL) == 12) {
mindKeeper.increment(CURRENT_LEVEL);
}
});
triggerManager.RegisterFunctionTrigger("CompletedTheMission", async (event) => {
if (mindKeeper.get(CURRENT_LEVEL) == 10) {
if (mindKeeper.get(CURRENT_LEVEL) == 15) {
mindKeeper.increment(CURRENT_LEVEL);
}
});
@@ -271,15 +293,23 @@ system.afterEvents.scriptEventReceive.subscribe((event) => {
world.sendMessage("Script got the id " + id);
mindKeeper.set(AGENT_ID, id);
}
checkNpcResponse(event, "cc:startLevel1", 1);
checkNpcResponse(event, "cc:afterLevel1", 4);
checkNpcResponse(event, "cc:startLevel2", 5);
checkNpcResponse(event, "cc:afterLevel2", 7);
checkNpcResponse(event, "cc:afterLevel3", 9);
checkNpcResponse(event, "cc:afterLevel4", 11);
checkNpcResponse(event, "cc:startLevel5", 13);
});
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);
function checkNpcResponse(event: ScriptEventCommandMessageAfterEvent, id: string, level: number) {
if (event.id == id) {
if (mindKeeper.get(CURRENT_LEVEL) == level) {
mindKeeper.increment(CURRENT_LEVEL);
}
}
});
}
world.afterEvents.worldInitialize.subscribe(() => {
mindKeeper.registerStore(CURRENT_LEVEL, StoreType.number);
@@ -303,6 +333,8 @@ world.afterEvents.chatSend.subscribe(async (event: ChatSendAfterEvent) => {
triggerManager.OnChat(event);
if (command === "!reset") {
mindKeeper.set(CURRENT_LEVEL, 0);
world.sendMessage("currentlevel = " + mindKeeper.get(CURRENT_LEVEL));
world.sendMessage("Resetting");
level1.reset();
level2.reset();
@@ -311,10 +343,9 @@ world.afterEvents.chatSend.subscribe(async (event: ChatSendAfterEvent) => {
level5.reset();
ResetGate();
world.getDimension("Overworld").runCommand("/fill -86 71 253 -86 75 275 barrier replace air");
world.getDimension("Overworld").runCommand("/fill -128 71 255 -128 74 276 barrier replace air");
world.getDimension("Overworld").runCommand("/fill -154 69 255 -154 74 276 barrier replace air");
world.getDimension("Overworld").runCommand("/fill -182 69 255 -182 74 276 barrier replace air");
mindKeeper.set(CURRENT_LEVEL, 0);
world.sendMessage("currentlevel = " + mindKeeper.get(CURRENT_LEVEL));
setNPCDialog("bilal1", "bilal_beforelevel_1_1");
setNPCDialog("chanel1", "chanel_beforelevel_2_1");
setNPCDialog("farah1", "farah_beforelevel_5_1");
}
});

View File

@@ -0,0 +1,41 @@
import { Vector3 } from "@minecraft/server";
import { TrailType } from "../Commandeer/trail/trailTypes";
import { vector3 } from "../Commandeer/utils/vectorUtils";
let TransitionTrailBeforeLevel3: TrailType = {
name: "TransitionTrailBeforeLevel3",
points: [
{ index: 1, position: vector3(-125, 71.1, 265.5) },
{ index: 2, position: vector3(-126, 71.1, 265.5) },
{ index: 3, position: vector3(-127, 71.1, 265.5) },
{ index: 4, position: vector3(-128, 71.1, 265.5) },
{ index: 5, position: vector3(-129, 71.1, 265.5) },
{ index: 6, position: vector3(-130, 71.1, 265.5) },
{ index: 7, position: vector3(-131, 71.1, 265.5) },
{ index: 8, position: vector3(-132, 71.1, 265.5) },
{ index: 9, position: vector3(-133, 71.1, 265.5) },
{ index: 10, position: vector3(-134, 71.1, 265.5) },
{ index: 11, position: vector3(-135, 71.1, 265.5) },
{ index: 12, position: vector3(-136, 71.1, 265.5) },
{ index: 13, position: vector3(-137, 71.1, 265.5) },
{ index: 14, position: vector3(-138, 71.1, 265.5) },
{ index: 15, position: vector3(-139, 71.1, 265.5) },
{ index: 16, position: vector3(-140, 71.1, 265.5) },
{ index: 17, position: vector3(-141, 71.1, 265.5) },
{ index: 18, position: vector3(-141.5, 71.1, 265.5) },
{ index: 19, position: vector3(-141.5, 71.1, 266) },
{ index: 20, position: vector3(-141.5, 71.1, 267) },
{ index: 21, position: vector3(-141.5, 71.1, 268) },
{ index: 22, position: vector3(-141.5, 71.1, 269) },
{ index: 23, position: vector3(-141.5, 71.1, 270) },
{ index: 24, position: vector3(-141.5, 71.1, 271) },
{ index: 25, position: vector3(-141.5, 71.1, 272) },
{ index: 26, position: vector3(-141.5, 71.1, 273) },
{ index: 27, position: vector3(-141.5, 71.1, 274) },
{ index: 28, position: vector3(-141.5, 71.1, 275) },
{ index: 29, position: vector3(-141.5, 71.1, 276) },
{ index: 30, position: vector3(-141.5, 71.1, 277) },
],
};
export { TransitionTrailBeforeLevel3 };

View File

@@ -0,0 +1,24 @@
import { Vector3 } from "@minecraft/server";
import { TrailType } from "../Commandeer/trail/trailTypes";
import { vector3 } from "../Commandeer/utils/vectorUtils";
let TransitionTrailBeforeLevel4: TrailType = {
name: "TransitionTrailBeforeLevel4",
points: [
{ index: 1, position: vector3(-141.5, 71.1, 265.5) },
{ index: 2, position: vector3(-141.5, 71.1, 266) },
{ index: 3, position: vector3(-141.5, 71.1, 267) },
{ index: 4, position: vector3(-141.5, 71.1, 268) },
{ index: 5, position: vector3(-141.5, 71.1, 269) },
{ index: 6, position: vector3(-141.5, 71.1, 270) },
{ index: 7, position: vector3(-141.5, 71.1, 271) },
{ index: 8, position: vector3(-141.5, 71.1, 272) },
{ index: 9, position: vector3(-141.5, 71.1, 273) },
{ index: 10, position: vector3(-141.5, 71.1, 274) },
{ index: 11, position: vector3(-141.5, 71.1, 275) },
{ index: 12, position: vector3(-141.5, 71.1, 276) },
{ index: 13, position: vector3(-141.5, 71.1, 277) },
],
};
export { TransitionTrailBeforeLevel4 };

View File

@@ -0,0 +1,51 @@
import { Vector3 } from "@minecraft/server";
import { TrailType } from "../Commandeer/trail/trailTypes";
import { vector3 } from "../Commandeer/utils/vectorUtils";
let TransitionTrailBeforeLevel5: TrailType = {
name: "TransitionTrailBeforeLevel5",
points: [
{ index: 1, position: vector3(-168, 71.1, 265.5) },
{ index: 2, position: vector3(-167, 71.1, 265.5) },
{ index: 3, position: vector3(-166, 71.1, 265.5) },
{ index: 4, position: vector3(-165, 71.1, 265.5) },
{ index: 5, position: vector3(-164, 71.1, 265.5) },
{ index: 6, position: vector3(-163, 71.1, 265.5) },
{ index: 7, position: vector3(-162, 71.1, 265.5) },
{ index: 8, position: vector3(-161, 71.1, 265.5) },
{ index: 9, position: vector3(-160, 71.1, 265.5) },
{ index: 10, position: vector3(-159, 71.1, 265.5) },
{ index: 11, position: vector3(-158, 71.1, 265.5) },
{ index: 12, position: vector3(-157, 71.1, 265.5) },
{ index: 13, position: vector3(-156, 71.1, 265.5) },
{ index: 14, position: vector3(-155, 71.1, 265.5) },
{ index: 15, position: vector3(-154, 71.1, 265.5) },
{ index: 16, position: vector3(-153, 71.1, 265.5) },
{ index: 17, position: vector3(-152, 71.1, 265.5) },
{ index: 18, position: vector3(-151, 71.1, 265.5) },
{ index: 19, position: vector3(-150, 71.1, 265.5) },
{ index: 20, position: vector3(-149, 71.1, 265.5) },
{ index: 21, position: vector3(-148, 71.1, 265.5) },
{ index: 22, position: vector3(-147, 71.1, 265.5) },
{ index: 23, position: vector3(-146, 71.1, 265.5) },
{ index: 24, position: vector3(-145, 71.1, 265.5) },
{ index: 25, position: vector3(-144, 71.1, 265.5) },
{ index: 26, position: vector3(-143, 71.1, 265.5) },
{ index: 27, position: vector3(-142, 71.1, 265.5) },
{ index: 28, position: vector3(-141.5, 71.1, 265.5) },
{ index: 29, position: vector3(-141.5, 71.1, 266) },
{ index: 30, position: vector3(-141.5, 71.1, 267) },
{ index: 31, position: vector3(-141.5, 71.1, 268) },
{ index: 32, position: vector3(-141.5, 71.1, 269) },
{ index: 33, position: vector3(-141.5, 71.1, 270) },
{ index: 34, position: vector3(-141.5, 71.1, 271) },
{ index: 35, position: vector3(-141.5, 71.1, 272) },
{ index: 36, position: vector3(-141.5, 71.1, 273) },
{ index: 37, position: vector3(-141.5, 71.1, 274) },
{ index: 38, position: vector3(-141.5, 71.1, 275) },
{ index: 39, position: vector3(-141.5, 71.1, 276) },
{ index: 40, position: vector3(-141.5, 71.1, 277) },
],
};
export { TransitionTrailBeforeLevel5 };

View File

@@ -46,6 +46,52 @@ let TransitionTrailToLevel2: TrailType = {
{ index: 38, position: vector3(-106, 71.1, 265.5) },
{ index: 39, position: vector3(-107, 71.1, 265.5) },
{ index: 40, position: vector3(-108, 71.1, 265.5) },
{ index: 41, position: vector3(-109, 71.1, 265.5) },
{ index: 42, position: vector3(-110, 71.1, 265.5) },
{ index: 43, position: vector3(-111, 71.1, 265.5) },
{ index: 44, position: vector3(-112, 71.1, 265.5) },
{ index: 45, position: vector3(-113, 71.1, 265.5) },
{ index: 46, position: vector3(-114, 71.1, 265.5) },
{ index: 47, position: vector3(-115, 71.1, 265.5) },
{ index: 48, position: vector3(-116, 71.1, 265.5) },
{ index: 49, position: vector3(-117, 71.1, 265.5) },
{ index: 50, position: vector3(-118, 71.1, 265.5) },
{ index: 51, position: vector3(-119, 71.1, 265.5) },
{ index: 52, position: vector3(-120, 71.1, 265.5) },
{ index: 53, position: vector3(-121, 71.1, 265.5) },
{ index: 54, position: vector3(-122, 71.1, 265.5) },
{ index: 55, position: vector3(-123, 71.1, 265.5) },
{ index: 56, position: vector3(-124, 71.1, 265.5) },
{ index: 57, position: vector3(-125, 71.1, 265.5) },
{ index: 58, position: vector3(-126, 71.1, 265.5) },
{ index: 59, position: vector3(-127, 71.1, 265.5) },
{ index: 60, position: vector3(-128, 71.1, 265.5) },
{ index: 61, position: vector3(-129, 71.1, 265.5) },
{ index: 62, position: vector3(-130, 71.1, 265.5) },
{ index: 63, position: vector3(-131, 71.1, 265.5) },
{ index: 64, position: vector3(-132, 71.1, 265.5) },
{ index: 65, position: vector3(-133, 71.1, 265.5) },
{ index: 66, position: vector3(-134, 71.1, 265.5) },
{ index: 67, position: vector3(-135, 71.1, 265.5) },
{ index: 68, position: vector3(-136, 71.1, 265.5) },
{ index: 69, position: vector3(-137, 71.1, 265.5) },
{ index: 70, position: vector3(-138, 71.1, 265.5) },
{ index: 71, position: vector3(-139, 71.1, 265.5) },
{ index: 72, position: vector3(-140, 71.1, 265.5) },
{ index: 73, position: vector3(-141, 71.1, 265.5) },
{ index: 74, position: vector3(-141.5, 71.1, 265.5) },
{ index: 75, position: vector3(-141.5, 71.1, 266) },
{ index: 76, position: vector3(-141.5, 71.1, 267) },
{ index: 77, position: vector3(-141.5, 71.1, 268) },
{ index: 78, position: vector3(-141.5, 71.1, 269) },
{ index: 79, position: vector3(-141.5, 71.1, 270) },
{ index: 80, position: vector3(-141.5, 71.1, 271) },
{ index: 81, position: vector3(-141.5, 71.1, 272) },
{ index: 82, position: vector3(-141.5, 71.1, 273) },
{ index: 83, position: vector3(-141.5, 71.1, 274) },
{ index: 84, position: vector3(-141.5, 71.1, 275) },
{ index: 85, position: vector3(-141.5, 71.1, 276) },
{ index: 86, position: vector3(-141.5, 71.1, 277) },
],
};

View File

@@ -1,31 +0,0 @@
import { Vector3 } from "@minecraft/server";
import { TrailType } from "../Commandeer/trail/trailTypes";
import { vector3 } from "../Commandeer/utils/vectorUtils";
let TransitionTrailToLevel3: TrailType = {
name: "TransitionTrailToLevel3",
points: [
{ index: 0, position: vector3(-110, 71.1, 265.5) },
{ index: 1, position: vector3(-111, 71.1, 265.5) },
{ index: 2, position: vector3(-112, 71.1, 265.5) },
{ index: 3, position: vector3(-113, 71.1, 265.5) },
{ index: 4, position: vector3(-114, 71.1, 265.5) },
{ index: 5, position: vector3(-115, 71.1, 265.5) },
{ index: 6, position: vector3(-116, 71.1, 265.5) },
{ index: 7, position: vector3(-117, 71.1, 265.5) },
{ index: 8, position: vector3(-118, 71.1, 265.5) },
{ index: 9, position: vector3(-119, 71.1, 265.5) },
{ index: 10, position: vector3(-120, 71.1, 265.5) },
{ index: 11, position: vector3(-121, 71.1, 265.5) },
{ index: 12, position: vector3(-122, 71.1, 265.5) },
{ index: 13, position: vector3(-123, 71.1, 265.5) },
{ index: 14, position: vector3(-124, 71.1, 265.5) },
{ index: 15, position: vector3(-125, 71.1, 265.5) },
{ index: 16, position: vector3(-126, 71.1, 265.5) },
{ index: 17, position: vector3(-127, 71.1, 265.5) },
{ index: 18, position: vector3(-128, 71.1, 265.5) },
{ index: 19, position: vector3(-129, 71.1, 265.5) },
],
};
export { TransitionTrailToLevel3 };

View File

@@ -1,38 +0,0 @@
import { Vector3 } from "@minecraft/server";
import { TrailType } from "../Commandeer/trail/trailTypes";
import { vector3 } from "../Commandeer/utils/vectorUtils";
let TransitionTrailToLevel4: TrailType = {
name: "TransitionTrailToLevel4",
points: [
{ index: 0, position: vector3(-132, 71.1, 265.5) },
{ index: 1, position: vector3(-133, 71.1, 265.5) },
{ index: 2, position: vector3(-134, 71.1, 265.5) },
{ index: 3, position: vector3(-135, 71.1, 265.5) },
{ index: 4, position: vector3(-136, 71.1, 265.5) },
{ index: 5, position: vector3(-137, 71.1, 265.5) },
{ index: 6, position: vector3(-138, 71.1, 265.5) },
{ index: 7, position: vector3(-139, 71.1, 265.5) },
{ index: 8, position: vector3(-140, 71.1, 265.5) },
{ index: 9, position: vector3(-141, 71.1, 265.5) },
{ index: 10, position: vector3(-142, 71.1, 265.5) },
{ index: 11, position: vector3(-143, 71.1, 265.5) },
{ index: 12, position: vector3(-144, 71.1, 265.5) },
{ index: 13, position: vector3(-145, 71.1, 265.5) },
{ index: 14, position: vector3(-146, 71.1, 265.5) },
{ index: 15, position: vector3(-147, 71.1, 265.5) },
{ index: 16, position: vector3(-148, 71.1, 265.5) },
{ index: 17, position: vector3(-149, 71.1, 265.5) },
{ index: 18, position: vector3(-150, 71.1, 265.5) },
{ index: 19, position: vector3(-151, 71.1, 265.5) },
{ index: 20, position: vector3(-152, 71.1, 265.5) },
{ index: 21, position: vector3(-153, 71.1, 265.5) },
{ index: 22, position: vector3(-154, 71.1, 265.5) },
{ index: 23, position: vector3(-155, 71.1, 265.5) },
{ index: 24, position: vector3(-156, 71.1, 265.5) },
{ index: 25, position: vector3(-157, 71.1, 265.5) },
{ index: 26, position: vector3(-158, 71.1, 265.5) },
],
};
export { TransitionTrailToLevel4 };

View File

@@ -2,46 +2,50 @@ import { Vector3 } from "@minecraft/server";
import { TrailType } from "../Commandeer/trail/trailTypes";
import { vector3 } from "../Commandeer/utils/vectorUtils";
let startTrail: TrailType = {
name: "startTrail",
let levelStartTrail: TrailType = {
name: "levelStartTrail",
points: [
{ index: 0, position: vector3(-54, 88.1, 265.5) },
{ index: 1, position: vector3(-55, 88.1, 265.5) },
{ index: 2, position: vector3(-56, 88.1, 265.5) },
{ index: 3, position: vector3(-57, 88.1, 265.5) },
{ index: 4, position: vector3(-58, 88.1, 265.5) },
{ index: 5, position: vector3(-58, 87.1, 265.5) },
{ index: 6, position: vector3(-58, 86.1, 265.5) },
{ index: 7, position: vector3(-58, 85.1, 265.5) },
{ index: 8, position: vector3(-58, 84.1, 265.5) },
{ index: 9, position: vector3(-58, 83.1, 265.5) },
{ index: 10, position: vector3(-58, 82.1, 265.5) },
{ index: 11, position: vector3(-58, 81.1, 265.5) },
{ index: 12, position: vector3(-58, 80.1, 265.5) },
{ index: 13, position: vector3(-58, 79.1, 265.5) },
{ index: 14, position: vector3(-58, 78.1, 265.5) },
{ index: 15, position: vector3(-58, 77.1, 265.5) },
{ index: 16, position: vector3(-58, 76.1, 265.5) },
{ index: 17, position: vector3(-58, 75.1, 265.5) },
{ index: 18, position: vector3(-58, 74.1, 265.5) },
{ index: 19, position: vector3(-58, 74.1, 264.5) },
{ index: 20, position: vector3(-59, 74.1, 264.5) },
{ index: 21, position: vector3(-59, 74.1, 263.5) },
{ index: 22, position: vector3(-60, 74.1, 263.5) },
{ index: 23, position: vector3(-61, 74.1, 263.5) },
{ index: 24, position: vector3(-62, 74.1, 263.5) },
{ index: 25, position: vector3(-63, 74.1, 263.5) },
{ index: 26, position: vector3(-63, 73.1, 263.5) },
{ index: 27, position: vector3(-63, 72.1, 263.5) },
{ index: 28, position: vector3(-63, 71.1, 263.5) },
{ index: 29, position: vector3(-64, 71.1, 263.5) },
{ index: 30, position: vector3(-65, 71.1, 263.5) },
{ index: 31, position: vector3(-66, 71.1, 263.5) },
{ index: 32, position: vector3(-67, 71.1, 263.5) },
{ index: 33, position: vector3(-68, 71.1, 263.5) },
{ index: 34, position: vector3(-69, 71.1, 263.5) },
{ index: 35, position: vector3(-70, 71.1, 263.5) },
{ index: 4, position: vector3(-57.5, 88.1, 265.5) },
{ index: 5, position: vector3(-57.5, 87.1, 265.5) },
{ index: 6, position: vector3(-57.5, 86.1, 265.5) },
{ index: 7, position: vector3(-57.5, 85.1, 265.5) },
{ index: 8, position: vector3(-57.5, 84.1, 265.5) },
{ index: 9, position: vector3(-57.5, 83.1, 265.5) },
{ index: 10, position: vector3(-57.5, 82.1, 265.5) },
{ index: 11, position: vector3(-57.5, 81.1, 265.5) },
{ index: 12, position: vector3(-57.5, 80.1, 265.5) },
{ index: 13, position: vector3(-57.5, 79.1, 265.5) },
{ index: 14, position: vector3(-57.5, 78.1, 265.5) },
{ index: 15, position: vector3(-57.5, 77.1, 265.5) },
{ index: 16, position: vector3(-57.5, 76.1, 265.5) },
{ index: 17, position: vector3(-57.5, 75.1, 265.5) },
{ index: 18, position: vector3(-57.5, 74.1, 265.5) },
{ index: 19, position: vector3(-57.5, 74.1, 264.5) },
{ index: 20, position: vector3(-58.5, 74.1, 264.5) },
{ index: 21, position: vector3(-58.5, 74.1, 263.5) },
{ index: 22, position: vector3(-59.5, 74.1, 263.5) },
{ index: 23, position: vector3(-60.5, 74.1, 263.5) },
{ index: 24, position: vector3(-60.5, 74.1, 262.5) },
{ index: 25, position: vector3(-60.5, 74.1, 261.5) },
{ index: 26, position: vector3(-61.5, 74.1, 261.5) },
{ index: 27, position: vector3(-62.5, 74.1, 261.5) },
{ index: 28, position: vector3(-62.5, 73.1, 261.5) },
{ index: 29, position: vector3(-63.5, 73.1, 261.5) },
{ index: 30, position: vector3(-63.5, 72.1, 261.5) },
{ index: 31, position: vector3(-64.5, 72.1, 261.5) },
{ index: 32, position: vector3(-65.5, 72.1, 261.5) },
{ index: 33, position: vector3(-66.5, 72.1, 261.5) },
{ index: 34, position: vector3(-67.5, 71.1, 261.5) },
{ index: 35, position: vector3(-68.5, 71.1, 261.5) },
{ index: 36, position: vector3(-68.5, 71.1, 260.5) },
{ index: 37, position: vector3(-68.5, 71.1, 259.5) },
{ index: 38, position: vector3(-68.5, 71.1, 258.5) },
{ index: 39, position: vector3(-68.5, 71.1, 257.5) },
],
};
export { startTrail };
export { levelStartTrail };