working version without custom blocks/textures
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { BlockType, BlockTypes, Vector3, world } from "@minecraft/server";
|
||||
import { BlockType, BlockTypes, EntityInventoryComponent, Player, 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";
|
||||
@@ -7,10 +7,49 @@ import { vector3, Vector3Add, Vector3ToCommandString } from "../../Commandeer/ut
|
||||
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 level1StartPosition: Vector3 = vector3(-73, 69, 267);
|
||||
const Level1EndPosition: Vector3 = vector3(-82, 69, 265);
|
||||
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,
|
||||
MinecraftBlockTypes.GreenWool,
|
||||
MinecraftBlockTypes.YellowWool,
|
||||
MinecraftBlockTypes.BlueWool,
|
||||
];
|
||||
|
||||
const level1ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
|
||||
const level1: Level = new Level(
|
||||
@@ -18,7 +57,7 @@ const level1: Level = new Level(
|
||||
pupeteer.sendWorldMessage("%message.level1.started");
|
||||
pupeteer.setTitleTimed("%message.level1.name", 2.5);
|
||||
startLevel(Level1CommandBlockPos);
|
||||
teleportAgent(level1StartPosition);
|
||||
teleportAndFaceAgent(level1StartPosition, vector3(-84, 69, 272));
|
||||
},
|
||||
() => {
|
||||
pupeteer.setActionBar("%message.level1.make");
|
||||
@@ -27,43 +66,102 @@ const level1: Level = new Level(
|
||||
pupeteer.clearActionBar();
|
||||
pupeteer.sendWorldMessage("%message.level1.complete");
|
||||
pupeteer.setTitleTimed("%message.level1.complete", 2.5);
|
||||
|
||||
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;
|
||||
|
||||
//6 blocks lower is lava
|
||||
for (let i = 0; i < toolPositions.length; i++) {
|
||||
let block = world.getDimension("overworld").getBlock(toolPositions[i]);
|
||||
if (block?.type.id == MinecraftBlockTypes.Air) {
|
||||
toolPositions.splice(i, 1);
|
||||
}
|
||||
}
|
||||
|
||||
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)));
|
||||
let blockBarrier = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -2, 0)));
|
||||
|
||||
if (blockAir && blockAir.type.id === MinecraftBlockTypes.Air) {
|
||||
isOutOfBounds = true;
|
||||
if (blockBarrier && blockBarrier.type.id === MinecraftBlockTypes.Barrier) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (isAgentAt(Level1EndPosition) && hasAllTools) {
|
||||
if (isAgentAt(Level1EndPosition) && hasAllTools && plantedAllFlowers) {
|
||||
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");
|
||||
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));
|
||||
|
||||
teleportAgent(level1StartPosition);
|
||||
return false;
|
||||
} else if (isComplete) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
() => {
|
||||
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++) {
|
||||
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;
|
||||
|
||||
@@ -7,6 +7,7 @@ import { vector3, Vector3Add, Vector3ToCommandString } from "../../Commandeer/ut
|
||||
// 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);
|
||||
|
||||
const level2StartPosition: Vector3 = vector3(-111, 69, 272);
|
||||
@@ -18,7 +19,7 @@ const level2: Level = new Level(
|
||||
pupeteer.sendWorldMessage("%message.level2.started");
|
||||
pupeteer.setTitleTimed("%message.level2.name", 2.5);
|
||||
startLevel(level2CommandBlockPos);
|
||||
teleportAgent(level2StartPosition);
|
||||
teleportAndFaceAgent(level2StartPosition, vector3(-125, 69, 272));
|
||||
},
|
||||
() => {
|
||||
pupeteer.setActionBar("%message.level2.make");
|
||||
@@ -27,15 +28,15 @@ 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;
|
||||
|
||||
//6 blocks lower is lava
|
||||
|
||||
let agentPos = getAgentLocation();
|
||||
let blockAir = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0)));
|
||||
|
||||
@@ -47,22 +48,38 @@ const level2: Level = new Level(
|
||||
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");
|
||||
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");
|
||||
|
||||
teleportAgent(level2StartPosition);
|
||||
teleportAndFaceAgent(level2StartPosition, vector3(-125, 69, 272));
|
||||
return false;
|
||||
} else if (isComplete) {
|
||||
return true;
|
||||
}
|
||||
return 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;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Vector3, world } from "@minecraft/server";
|
||||
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";
|
||||
@@ -6,6 +6,7 @@ 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";
|
||||
import level4 from "./mission3";
|
||||
const Level3CommandBlockPos: Vector3 = vector3(-133, 68, 281);
|
||||
|
||||
const level3StartPosition: Vector3 = vector3(-133, 68, 265);
|
||||
@@ -17,7 +18,7 @@ const level3: Level = new Level(
|
||||
pupeteer.sendWorldMessage("%message.level3.started");
|
||||
pupeteer.setTitleTimed("%message.level3.name", 2.5);
|
||||
startLevel(Level3CommandBlockPos);
|
||||
teleportAgent(level3StartPosition);
|
||||
teleportAndFaceAgent(level3StartPosition, vector3(-148, 68, 265));
|
||||
},
|
||||
() => {
|
||||
pupeteer.setActionBar("%message.level3.make");
|
||||
@@ -26,48 +27,66 @@ 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;
|
||||
|
||||
//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)));
|
||||
let blockBarrier = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -2, 0)));
|
||||
|
||||
if (
|
||||
blockLava &&
|
||||
blockLava.type.id === MinecraftBlockTypes.Lava &&
|
||||
blockAir &&
|
||||
blockAir.type.id === MinecraftBlockTypes.Air
|
||||
) {
|
||||
isOutOfBounds = true;
|
||||
if (blockAir && blockAir.type.id === MinecraftBlockTypes.Air) {
|
||||
if (blockBarrier && blockBarrier.type.id === MinecraftBlockTypes.Barrier) {
|
||||
return false;
|
||||
} else {
|
||||
return 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");
|
||||
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");
|
||||
world.getDimension("overworld").runCommand("/execute at @e[tag=KillingPandas] run kill @e[type=panda, r=10]");
|
||||
|
||||
teleportAgent(level3StartPosition);
|
||||
teleportAndFaceAgent(level3StartPosition, vector3(-148, 68, 265));
|
||||
return false;
|
||||
} else if (isComplete) {
|
||||
return true;
|
||||
}
|
||||
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);
|
||||
}
|
||||
);
|
||||
|
||||
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;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Vector3, world } from "@minecraft/server";
|
||||
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";
|
||||
@@ -6,6 +6,7 @@ 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";
|
||||
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);
|
||||
@@ -16,7 +17,7 @@ const level4: Level = new Level(
|
||||
pupeteer.sendWorldMessage("%message.level4.started");
|
||||
pupeteer.setTitleTimed("%message.level4.name", 2.5);
|
||||
startLevel(Level4CommandBlockPos);
|
||||
teleportAgent(level4StartPosition);
|
||||
teleportAndFaceAgent(level4StartPosition, vector3(-175, 62, 261));
|
||||
},
|
||||
() => {
|
||||
pupeteer.setActionBar("%message.level4.make");
|
||||
@@ -25,25 +26,18 @@ const level4: Level = new Level(
|
||||
pupeteer.clearActionBar();
|
||||
pupeteer.sendWorldMessage("%message.level4.complete");
|
||||
pupeteer.setTitleTimed("%message.level4.complete", 2.5);
|
||||
|
||||
world.getDimension("Overworld").runCommand("/fill -182 69 255 -182 74 276 air replace barrier");
|
||||
mindKeeper.increment(CURRENT_LEVEL);
|
||||
level5.reset();
|
||||
},
|
||||
() => {
|
||||
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
|
||||
) {
|
||||
if (blockAir && blockAir.type.id === MinecraftBlockTypes.Air) {
|
||||
isOutOfBounds = true;
|
||||
}
|
||||
|
||||
@@ -51,16 +45,14 @@ const level4: Level = new Level(
|
||||
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");
|
||||
let volume: BlockVolume = new BlockVolume(vector3(-163, 67, 291), vector3(-163, 67, 291));
|
||||
world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.RedstoneBlock);
|
||||
|
||||
teleportAgent(level4StartPosition);
|
||||
teleportAndFaceAgent(level4StartPosition, vector3(-175, 62, 261));
|
||||
return false;
|
||||
} else if (isComplete) {
|
||||
return true;
|
||||
@@ -69,4 +61,18 @@ const level4: Level = new Level(
|
||||
}
|
||||
);
|
||||
|
||||
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;
|
||||
|
||||
133
scripts/levels/level3/mission1.ts
Normal file
133
scripts/levels/level3/mission1.ts
Normal file
@@ -0,0 +1,133 @@
|
||||
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 { 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 level5StartPosition: Vector3 = vector3(-226, 65, 244);
|
||||
const level5EndPosition: Vector3 = vector3(-226, 65, 229);
|
||||
|
||||
const level5ResetCommandBlockPos: Vector3 = vector3(56, 68, 211);
|
||||
|
||||
let diamondAndPickaxePositions = [
|
||||
vector3(-224, 64, 242),
|
||||
vector3(-216, 64, 242),
|
||||
vector3(-217, 64, 240),
|
||||
vector3(-226, 64, 239),
|
||||
vector3(-214, 64, 238),
|
||||
vector3(-220, 64, 238),
|
||||
vector3(-219, 64, 236),
|
||||
vector3(-221, 64, 235),
|
||||
vector3(-225, 64, 235),
|
||||
vector3(-215, 64, 233),
|
||||
vector3(-227, 64, 232),
|
||||
vector3(-225, 64, 231),
|
||||
vector3(-218, 64, 231),
|
||||
vector3(-223, 64, 230),
|
||||
vector3(-219, 64, 229),
|
||||
];
|
||||
|
||||
const level5: Level = new Level(
|
||||
() => {
|
||||
pupeteer.sendWorldMessage("%message.level5.started");
|
||||
pupeteer.setTitleTimed("%message.level5.name", 2.5);
|
||||
startLevel(level5CommandBlockPos);
|
||||
teleportAndFaceAgent(level5StartPosition, vector3(-226, 65, 229));
|
||||
},
|
||||
() => {
|
||||
pupeteer.setActionBar("%message.level5.make");
|
||||
},
|
||||
() => {
|
||||
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)));
|
||||
let blockTNT = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0)));
|
||||
|
||||
if (
|
||||
blockAir &&
|
||||
blockAir.type.id === MinecraftBlockTypes.Air &&
|
||||
blockMagma &&
|
||||
blockMagma.type.id === MinecraftBlockTypes.Magma &&
|
||||
blockTNT &&
|
||||
blockTNT.type.id === MinecraftBlockTypes.Tnt
|
||||
) {
|
||||
isOutOfBounds = true;
|
||||
}
|
||||
|
||||
if (isAgentAt(level5EndPosition)) {
|
||||
isComplete = true;
|
||||
}
|
||||
|
||||
if (isOutOfBounds) {
|
||||
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(-163, 67, 291), vector3(-163, 67, 291));
|
||||
world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.RedstoneBlock);
|
||||
|
||||
for (let i = 0; i < diamondAndPickaxePositions.length; i++) {
|
||||
let blockToReplace = world.getDimension("overworld").getBlock(diamondAndPickaxePositions[i]);
|
||||
if (blockToReplace?.type.id === MinecraftBlockTypes.Stone) {
|
||||
placeBlock(diamondAndPickaxePositions[i], MinecraftBlockTypes.PurpleWool);
|
||||
}
|
||||
}
|
||||
|
||||
teleportAndFaceAgent(level5StartPosition, vector3(-226, 65, 229));
|
||||
return false;
|
||||
} else if (isComplete) {
|
||||
return true;
|
||||
}
|
||||
return 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]);
|
||||
if (blockToReplace?.type.id === MinecraftBlockTypes.Stone) {
|
||||
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);
|
||||
}
|
||||
);
|
||||
|
||||
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;
|
||||
@@ -1,115 +0,0 @@
|
||||
import { BlockType, Vector3, world } from "@minecraft/server";
|
||||
import Level from "../Commandeer/level/level";
|
||||
import { leverOn } from "../Commandeer/level/levelTypes";
|
||||
import { teleportAgent, isAgentAt } from "../Commandeer/utils/agentUtils";
|
||||
import { startLevel } from "../Commandeer/utils/levelUtils";
|
||||
import { vector3 } from "../Commandeer/utils/vectorUtils";
|
||||
import { levelIntroConditions } from "../levelConditions/levelIntro";
|
||||
import { CURRENT_LEVEL, mindKeeper } from "../main";
|
||||
import Pupeteer from "../Commandeer/pupeteer";
|
||||
import { MinecraftBlockTypes } from "../vanilla-data/mojang-block";
|
||||
|
||||
// const levelIntroCommandBlockPos: Vector3 = vector3(58, 66, 276);
|
||||
// const levelIntroStartPosition: Vector3 = vector3(28, 70, 269);
|
||||
// const levelIntroEndPosition: Vector3 = vector3(39, 70, 269);
|
||||
const buttonPositions: Vector3[] = [
|
||||
vector3(2471, 11, 106),
|
||||
vector3(2469, 11, 106),
|
||||
vector3(2468, 11, 106),
|
||||
vector3(2464, 11, 106),
|
||||
];
|
||||
|
||||
const blockPositions: Vector3[] = [
|
||||
vector3(2471, 12, 108),
|
||||
vector3(2469, 12, 108),
|
||||
vector3(2468, 12, 108),
|
||||
vector3(2464, 12, 108),
|
||||
];
|
||||
|
||||
let currentBlockSequence: string[] = [];
|
||||
let currentBlockSeuqenceIndex: number[] = [];
|
||||
|
||||
const blockCycle: string[] = [
|
||||
MinecraftBlockTypes.RedstoneBlock,
|
||||
MinecraftBlockTypes.GoldBlock,
|
||||
MinecraftBlockTypes.DiamondBlock,
|
||||
MinecraftBlockTypes.EmeraldBlock,
|
||||
MinecraftBlockTypes.LapisBlock,
|
||||
];
|
||||
|
||||
let buttonPressed: boolean[] = buttonPositions.map(() => false);
|
||||
|
||||
const levelIntro: Level = new Level(
|
||||
() => {
|
||||
Pupeteer.sendWorldMessage("%message.intro.started");
|
||||
Pupeteer.setTitleTimed("%message.intro.started", 2.5);
|
||||
// startLevel(levelIntroCommandBlockPos);
|
||||
// teleportAgent(levelIntroStartPosition);
|
||||
blockPositions.forEach((pos) => {
|
||||
let block = world.getDimension("overworld").getBlock(pos);
|
||||
let index = blockPositions.indexOf(pos);
|
||||
let blockType = block!.type;
|
||||
currentBlockSequence[index] = blockType.id;
|
||||
});
|
||||
},
|
||||
() => {
|
||||
Pupeteer.setActionBar("%message.intro.make");
|
||||
|
||||
buttonPositions.forEach((pos) => {
|
||||
let block = world.getDimension("overworld").getBlock(pos);
|
||||
if (!block) return;
|
||||
let index = buttonPositions.indexOf(pos);
|
||||
let prevState = buttonPressed[index];
|
||||
let currentState = block!.getRedstonePower()! > 0;
|
||||
|
||||
if (currentState && !prevState) {
|
||||
buttonPressed[index] = true;
|
||||
//NextBlock
|
||||
let nextBlock = currentBlockSequence[index];
|
||||
let nextIndex = blockCycle.indexOf(nextBlock);
|
||||
nextIndex = (nextIndex + 1) % blockCycle.length;
|
||||
currentBlockSequence[index] = blockCycle[nextIndex];
|
||||
//Update the block
|
||||
let blockPos = blockPositions[index];
|
||||
world.getDimension("overworld").getBlock(blockPos)!.setType(blockCycle[nextIndex]);
|
||||
}
|
||||
|
||||
if (!currentState && prevState) {
|
||||
buttonPressed[index] = false;
|
||||
}
|
||||
});
|
||||
},
|
||||
() => {
|
||||
Pupeteer.clearActionBar();
|
||||
world.sendMessage("%message.intro.done");
|
||||
Pupeteer.setTitleTimed("%message.intro.done", 2.5);
|
||||
|
||||
mindKeeper.increment(CURRENT_LEVEL);
|
||||
},
|
||||
() => {
|
||||
let counter = 0;
|
||||
let isComplete = true;
|
||||
levelIntroConditions.conditions.forEach((condition) => {
|
||||
let blockInworld = world.getDimension("overworld").getBlock(condition.position);
|
||||
if (blockInworld?.type.id !== condition.block) {
|
||||
isComplete = false;
|
||||
counter++;
|
||||
}
|
||||
});
|
||||
world.sendMessage(`%message.intro.progress ${counter}/${levelIntroConditions.conditions.length}`);
|
||||
world.sendMessage(`isComplete: ${isComplete}`);
|
||||
if (isComplete) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
() => {
|
||||
blockPositions.forEach((pos) => {
|
||||
let block = world.getDimension("overworld").getBlock(pos);
|
||||
let randomBlock = blockCycle[Math.floor(Math.random() * blockCycle.length)];
|
||||
block!.setType(randomBlock);
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
export default levelIntro;
|
||||
Reference in New Issue
Block a user