Add Formatting (Thank God)
This commit is contained in:
@@ -13,7 +13,7 @@ import {
|
||||
world,
|
||||
} from "@minecraft/server";
|
||||
import { vector3, vector3Distance } from "../utils/vectorUtils";
|
||||
import { Mindkeeper, StoreType } from "../mindKeeper";
|
||||
import { Mindkeeper } from "../mindKeeper";
|
||||
import { spawnParticle } from "../utils/particleUtils";
|
||||
import { Manager } from "./manager";
|
||||
|
||||
@@ -46,7 +46,7 @@ export class Maker {
|
||||
}
|
||||
|
||||
if (event.message === "!deleteCurrentTrigger") {
|
||||
let currentTriggerdTrigger = this.manager
|
||||
const currentTriggerdTrigger = this.manager
|
||||
.GetTriggers()
|
||||
.filter((trigger) => trigger.IsPlayerInside(event.sender as Player));
|
||||
if (currentTriggerdTrigger.length > 0) {
|
||||
@@ -85,12 +85,12 @@ export class Maker {
|
||||
if (this.waitingForPoint2) {
|
||||
this.point2 = vector3(blockInteracted.location.x, blockInteracted.location.y, blockInteracted.location.z);
|
||||
|
||||
let minX = Math.min(this.point1.x, this.point2.x);
|
||||
let maxX = Math.max(this.point1.x, this.point2.x) + 1;
|
||||
let minY = Math.min(this.point1.y, this.point2.y);
|
||||
let maxY = Math.max(this.point1.y, this.point2.y) + 1;
|
||||
let minZ = Math.min(this.point1.z, this.point2.z);
|
||||
let maxZ = Math.max(this.point1.z, this.point2.z) + 1;
|
||||
const minX = Math.min(this.point1.x, this.point2.x);
|
||||
const maxX = Math.max(this.point1.x, this.point2.x) + 1;
|
||||
const minY = Math.min(this.point1.y, this.point2.y);
|
||||
const maxY = Math.max(this.point1.y, this.point2.y) + 1;
|
||||
const minZ = Math.min(this.point1.z, this.point2.z);
|
||||
const maxZ = Math.max(this.point1.z, this.point2.z) + 1;
|
||||
|
||||
//Take the outer bounds of the two points
|
||||
this.point1 = vector3(minX, minY, minZ);
|
||||
@@ -126,7 +126,7 @@ export class Maker {
|
||||
const z = pos1.z + (zStep / steps) * i;
|
||||
|
||||
//make the ends and starts a different color
|
||||
let map = new MolangVariableMap();
|
||||
const map = new MolangVariableMap();
|
||||
if (i == 0 || i == steps) {
|
||||
map.setColorRGB("variable.color", { red: 0, green: 255, blue: 0 });
|
||||
const particleData: MolangVariableMap = new MolangVariableMap();
|
||||
@@ -159,7 +159,7 @@ export class Maker {
|
||||
}
|
||||
|
||||
Update() {
|
||||
let shouldRender = this.mindKeeper.get("ShowTriggers") as boolean;
|
||||
const shouldRender = this.mindKeeper.get("ShowTriggers") as boolean;
|
||||
this.manager.GetTriggers().forEach((trigger: Trigger) => {
|
||||
trigger.Update();
|
||||
|
||||
@@ -178,7 +178,6 @@ export class Maker {
|
||||
});
|
||||
|
||||
distances.sort((a, b) => a.distance - b.distance);
|
||||
const closestPlayer = distances[0].player;
|
||||
const distance = distances[0].distance;
|
||||
|
||||
if (distance > 25) return;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { ChatSendAfterEvent, ItemUseOnBeforeEvent, Player, system, world } from "@minecraft/server";
|
||||
import { ChatSendAfterEvent, ItemUseOnBeforeEvent, Player, world } from "@minecraft/server";
|
||||
import { Mindkeeper, StoreType } from "../mindKeeper";
|
||||
import { vector3 } from "../utils/vectorUtils";
|
||||
import { Maker } from "./maker";
|
||||
@@ -16,6 +16,12 @@ export class TriggerEvent {
|
||||
|
||||
export type TriggerEventHandler = (event: TriggerEvent) => void;
|
||||
|
||||
type TriggerData = {
|
||||
point1: { x: number; y: number; z: number };
|
||||
point2: { x: number; y: number; z: number };
|
||||
eventToDispatch: string;
|
||||
};
|
||||
|
||||
export class Manager {
|
||||
private triggers: Trigger[] = [];
|
||||
private functionTriggers: Map<string, TriggerEventHandler> = new Map();
|
||||
@@ -58,13 +64,13 @@ export class Manager {
|
||||
const triggers = this.mindKeeper.get("triggers") as string;
|
||||
if (triggers === undefined) return;
|
||||
|
||||
const data = JSON.parse(triggers);
|
||||
data.forEach((trigger: any) => {
|
||||
let point1 = vector3(trigger.point1.x, trigger.point1.y, trigger.point1.z);
|
||||
let point2 = vector3(trigger.point2.x, trigger.point2.y, trigger.point2.z);
|
||||
let eventToDispatch = trigger.eventToDispatch;
|
||||
const data = JSON.parse(triggers) as TriggerData[];
|
||||
data.forEach((trigger: TriggerData) => {
|
||||
const point1 = vector3(trigger.point1.x, trigger.point1.y, trigger.point1.z);
|
||||
const point2 = vector3(trigger.point2.x, trigger.point2.y, trigger.point2.z);
|
||||
const eventToDispatch = trigger.eventToDispatch;
|
||||
|
||||
let newTrigger = new Trigger(point1, point2);
|
||||
const newTrigger = new Trigger(point1, point2);
|
||||
newTrigger.eventToDispatch = eventToDispatch;
|
||||
|
||||
this.triggers.push(newTrigger);
|
||||
|
||||
@@ -42,13 +42,13 @@ async function playAnimation(
|
||||
world.sendMessage("Animation already playing");
|
||||
return;
|
||||
}
|
||||
let frameCount = frames.length;
|
||||
const frameCount = frames.length;
|
||||
if (!force) {
|
||||
animationPlaying = true;
|
||||
}
|
||||
|
||||
for (let i = 0; i < frameCount; i++) {
|
||||
let frame = reverse ? frames[frameCount - i - 1] : frames[i];
|
||||
const frame = reverse ? frames[frameCount - i - 1] : frames[i];
|
||||
await world
|
||||
.getDimension("overworld")
|
||||
.runCommandAsync(
|
||||
|
||||
@@ -11,7 +11,7 @@ export class Command {
|
||||
}
|
||||
constructor(argv: string[], player: Player) {
|
||||
this.argv = (function* () {
|
||||
for (let arg of argv) yield arg;
|
||||
for (const arg of argv) yield arg;
|
||||
})();
|
||||
this.__player = player;
|
||||
}
|
||||
@@ -83,13 +83,13 @@ export class Commands {
|
||||
public static register(prefix: string, command: string, commandFunction: (arg: Command) => void): void {
|
||||
if (prefix.startsWith("/")) throw Error("Unable to register slash commands.");
|
||||
world.beforeEvents.chatSend.subscribe((arg) => {
|
||||
var argv = arg.message.split(/(".*?"|[^"\s]+)+(?=\s*|\s*$)/g).filter((e) => e.trim().length > 0);
|
||||
const argv = arg.message.split(/(".*?"|[^"\s]+)+(?=\s*|\s*$)/g).filter((e) => e.trim().length > 0);
|
||||
if (argv[0] === `${prefix}${command}`) {
|
||||
arg.cancel = true;
|
||||
try {
|
||||
commandFunction(new Command(argv, arg.sender));
|
||||
} catch (err) {
|
||||
let { statusMessage } = JSON.parse(err as string);
|
||||
const { statusMessage } = JSON.parse(err as string);
|
||||
console.error(err);
|
||||
arg.sender.sendMessage(`§c${statusMessage}`);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import { BlockType, Vector3, world } from "@minecraft/server";
|
||||
import AbstractLevelCondition from "./AbstractCondition";
|
||||
import { Vector3ToString } from "../utils/vectorUtils";
|
||||
|
||||
class BlockCondition extends AbstractLevelCondition {
|
||||
position: Vector3;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { BlockType, Vector3, world } from "@minecraft/server";
|
||||
import { Vector3, world } from "@minecraft/server";
|
||||
import AbstractLevelCondition from "./AbstractCondition";
|
||||
|
||||
class ButtonPushCondition extends AbstractLevelCondition {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { Vector3, world } from "@minecraft/server";
|
||||
import Level from "./level";
|
||||
import pupeteer from "../pupeteer";
|
||||
import { teleportAgent, isAgentAt, getAgentLocation, getAgent } from "../utils/agentUtils";
|
||||
import { teleportAgent, isAgentAt, getAgentLocation } from "../utils/agentUtils";
|
||||
import { startLevel } from "../utils/levelUtils";
|
||||
import { vector3, Vector3Add, Vector3ToCommandString } from "../utils/vectorUtils";
|
||||
import { vector3, Vector3Add } from "../utils/vectorUtils";
|
||||
import { mindKeeper, CURRENT_LEVEL } from "../../main";
|
||||
import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block";
|
||||
|
||||
@@ -37,9 +37,9 @@ class AbstractAgentTrackMission extends Level {
|
||||
let isComplete = false;
|
||||
let isOutOfBounds = false;
|
||||
|
||||
let agentPos = getAgentLocation();
|
||||
let blockLava = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -7, 0)));
|
||||
let blockAir = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0)));
|
||||
const agentPos = getAgentLocation();
|
||||
const blockLava = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -7, 0)));
|
||||
const blockAir = world.getDimension("overworld").getBlock(Vector3Add(agentPos, vector3(0, -1, 0)));
|
||||
|
||||
if (
|
||||
blockLava &&
|
||||
|
||||
@@ -1,20 +1,18 @@
|
||||
import { World } from "@minecraft/server";
|
||||
|
||||
class Level {
|
||||
levelCompleteCallback: Function;
|
||||
levelCheckCallback: Function;
|
||||
levelSetupCallback: Function;
|
||||
levelUpdateCallback: Function;
|
||||
levelResetCallback: Function;
|
||||
levelCompleteCallback: VoidFunction;
|
||||
levelCheckCallback: () => boolean;
|
||||
levelSetupCallback: VoidFunction;
|
||||
levelUpdateCallback: VoidFunction;
|
||||
levelResetCallback: VoidFunction;
|
||||
isCompleted: boolean = false;
|
||||
isSetup: boolean = false;
|
||||
|
||||
constructor(
|
||||
levelSetupCallback: Function,
|
||||
levelUpdateCallback: Function,
|
||||
levelCompleteCallback: Function,
|
||||
levelCheckCallback: Function,
|
||||
levelResetCallback: Function = () => {}
|
||||
levelSetupCallback: VoidFunction,
|
||||
levelUpdateCallback: VoidFunction,
|
||||
levelCompleteCallback: VoidFunction,
|
||||
levelCheckCallback: () => boolean,
|
||||
levelResetCallback: VoidFunction = () => {}
|
||||
) {
|
||||
this.levelSetupCallback = levelSetupCallback;
|
||||
this.levelCompleteCallback = levelCompleteCallback;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { BlockType, Vector3, world, World } from "@minecraft/server";
|
||||
import { Vector3, world, World } from "@minecraft/server";
|
||||
|
||||
export type blockCondition = {
|
||||
block: string;
|
||||
@@ -14,7 +14,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}`);
|
||||
}
|
||||
@@ -46,7 +46,7 @@ export type LevelNoGoZone = {
|
||||
export const checkBlockCondition = (condition: LevelBlockCondition): boolean => {
|
||||
let isComplete: boolean = true;
|
||||
condition.conditions.forEach((condition) => {
|
||||
let block = world.getDimension("overworld").getBlock(condition.position);
|
||||
const block = world.getDimension("overworld").getBlock(condition.position);
|
||||
if (block!.typeId != condition.block) {
|
||||
isComplete = false;
|
||||
}
|
||||
|
||||
@@ -75,10 +75,11 @@ class Mindkeeper {
|
||||
for (let i = 0; i < this.registerdStores.length; i++) {
|
||||
let isAlreadyDefined = true;
|
||||
try {
|
||||
let test = this.world.getDynamicProperty(this.registerdStores[i].getName());
|
||||
const test = this.world.getDynamicProperty(this.registerdStores[i].getName());
|
||||
if (test === undefined) {
|
||||
isAlreadyDefined = false;
|
||||
}
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
} catch (e) {
|
||||
isAlreadyDefined = false;
|
||||
}
|
||||
@@ -125,12 +126,13 @@ class Mindkeeper {
|
||||
*/
|
||||
get(store: string): string | number | boolean | Vector3 | undefined {
|
||||
try {
|
||||
let data = this.world.getDynamicProperty(store);
|
||||
const data = this.world.getDynamicProperty(store);
|
||||
if (data === undefined) {
|
||||
this.world.sendMessage(`Store ${store} is not defined`);
|
||||
return undefined;
|
||||
}
|
||||
return data;
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
} catch (e) {
|
||||
// this.world.sendMessage(`Store ${store} is not defined`);
|
||||
return undefined;
|
||||
@@ -142,7 +144,7 @@ class Mindkeeper {
|
||||
* @param store The name of the store.
|
||||
*/
|
||||
increment(store: string): void {
|
||||
let data = this.get(store);
|
||||
const data = this.get(store);
|
||||
if (typeof data === "number") {
|
||||
this.set(store, data + 1);
|
||||
}
|
||||
@@ -155,6 +157,7 @@ class Mindkeeper {
|
||||
private secondWarning = false;
|
||||
chatCommands(event: ChatSendAfterEvent) {
|
||||
const command = event.message.split(" ")[0];
|
||||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||
const args = event.message.split(" ").slice(1);
|
||||
|
||||
if (command === "!get") {
|
||||
@@ -173,9 +176,8 @@ class Mindkeeper {
|
||||
this.world.sendMessage(`Please provide a value to set for ${store}`);
|
||||
return;
|
||||
}
|
||||
const type = event.message.split(" ")[3];
|
||||
|
||||
let actualType = this.getStores()
|
||||
const actualType = this.getStores()
|
||||
.find((s) => s.getName() === store)
|
||||
?.getType();
|
||||
|
||||
@@ -195,10 +197,11 @@ class Mindkeeper {
|
||||
}
|
||||
this.set(store, Number(value));
|
||||
break;
|
||||
case StoreType.boolean:
|
||||
case StoreType.boolean: {
|
||||
const ActualValue = value.toLowerCase();
|
||||
this.set(store, ActualValue === "true");
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.world.sendMessage(`Value of ${store} is ${value}`);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,10 @@
|
||||
/* eslint-disable @typescript-eslint/no-unused-vars */
|
||||
class NextLevel {
|
||||
currentState = 0;
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
||||
states: Array<Function> = [];
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
||||
constructor(states: Array<Function>) {
|
||||
this.states = states;
|
||||
}
|
||||
|
||||
@@ -6,7 +6,6 @@ import {
|
||||
TicksPerSecond,
|
||||
TitleDisplayOptions,
|
||||
Vector3,
|
||||
World,
|
||||
system,
|
||||
world,
|
||||
} from "@minecraft/server";
|
||||
@@ -46,7 +45,7 @@ class Pupeteer {
|
||||
|
||||
static setTitleTimed(message: string, duration: number): void {
|
||||
world.getPlayers().forEach((player) => {
|
||||
let options: TitleDisplayOptions = {
|
||||
const options: TitleDisplayOptions = {
|
||||
fadeInDuration: 20,
|
||||
fadeOutDuration: 20,
|
||||
stayDuration: duration * TicksPerSecond,
|
||||
@@ -88,11 +87,11 @@ class Pupeteer {
|
||||
static testForLocation(location: Vector3, radius: number): boolean {
|
||||
let isPlayerInArea = false;
|
||||
world.getPlayers().forEach((player) => {
|
||||
let dx = location.x - player.location.x;
|
||||
let dy = location.y - player.location.y;
|
||||
let dz = location.z - player.location.z;
|
||||
const dx = location.x - player.location.x;
|
||||
const dy = location.y - player.location.y;
|
||||
const dz = location.z - player.location.z;
|
||||
|
||||
let distance = Math.sqrt(dx * dx + dy * dy + dz * dz);
|
||||
const distance = Math.sqrt(dx * dx + dy * dy + dz * dz);
|
||||
if (distance < radius) {
|
||||
isPlayerInArea = true;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import { MolangVariableMap, Vector3, world } from "@minecraft/server";
|
||||
import { Vector3Add } from "../utils/vectorUtils";
|
||||
import { MolangVariableMap, Vector3 } from "@minecraft/server";
|
||||
import { TrailType } from "./trailTypes";
|
||||
import { PARTICLES, spawnParticle } from "../utils/particleUtils";
|
||||
|
||||
@@ -14,10 +13,12 @@ class TrailPoint {
|
||||
|
||||
spawn() {
|
||||
// let spawnPosition: Vector3 = Vector3Add(this.postion, { x: 0.5, y: 0.5, z: 0.5 });
|
||||
let spawnPosition: Vector3 = this.postion;
|
||||
const spawnPosition: Vector3 = this.postion;
|
||||
try {
|
||||
spawnParticle(spawnPosition, PARTICLES.balloon_gas_particle, new MolangVariableMap());
|
||||
} catch (e) {}
|
||||
} catch (error) {
|
||||
console.error("Error spawning particle", error);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,7 +55,6 @@ class Trail {
|
||||
if (this.currentParticleCounter >= this.nextParticleTimer) {
|
||||
this.currentParticleCounter = 0;
|
||||
//wrapindex is in how many segments the trail is divided into
|
||||
let pointsPerInterval = this.wrapIndex > 0 ? this.calculatedLength / this.wrapIndex : 0;
|
||||
this.points
|
||||
.filter((point) => {
|
||||
if (this.wrapIndex > 0) {
|
||||
@@ -68,7 +68,7 @@ class Trail {
|
||||
});
|
||||
|
||||
this.currentPoint++;
|
||||
let actualLength = this.wrapIndex > 0 ? this.wrapIndex : this.calculatedLength;
|
||||
const actualLength = this.wrapIndex > 0 ? this.wrapIndex : this.calculatedLength;
|
||||
if (this.currentPoint >= actualLength) {
|
||||
this.currentPoint = 0;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import {
|
||||
Block,
|
||||
ChatSendAfterEvent,
|
||||
EntityInventoryComponent,
|
||||
ItemStack,
|
||||
ItemUseOnBeforeEvent,
|
||||
MolangVariableMap,
|
||||
@@ -14,6 +13,7 @@ import { spawnParticle } from "../utils/particleUtils";
|
||||
import Pupeteer from "../pupeteer";
|
||||
import Chalk from "../chalk";
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-namespace
|
||||
export namespace TrailMaker {
|
||||
export class Maker {
|
||||
currentTrail: Trail;
|
||||
|
||||
@@ -1,17 +1,15 @@
|
||||
import { Entity, Vector3, world } from "@minecraft/server";
|
||||
import { Vector3Add, Vector3ToString, vector3 } from "./vectorUtils";
|
||||
import { Vector3Add, vector3 } from "./vectorUtils";
|
||||
import { mindKeeper } from "../../main";
|
||||
|
||||
//Make a facing with vector3
|
||||
type Facing = Vector3;
|
||||
|
||||
function teleportAgent(position: Vector3, facing: Vector3 = vector3(0, 0, 0)): void {
|
||||
if (facing == vector3(0, 0, 0)) {
|
||||
world
|
||||
.getDimension("overworld")
|
||||
.runCommand(`/execute as @a run tp @e[type=agent] ${position.x} ${position.y} ${position.z}`);
|
||||
} else {
|
||||
let facing2 = Vector3Add(position, facing);
|
||||
const facing2 = Vector3Add(position, facing);
|
||||
world
|
||||
.getDimension("overworld")
|
||||
.runCommand(
|
||||
@@ -38,13 +36,13 @@ function isAgentAt(position: Vector3): boolean {
|
||||
}
|
||||
|
||||
function getAgent(): Entity {
|
||||
let agent = world.getEntity(mindKeeper.get("agentid") as string);
|
||||
const agent = world.getEntity(mindKeeper.get("agentid") as string);
|
||||
return agent!;
|
||||
}
|
||||
|
||||
function getAgentLocation(): Vector3 {
|
||||
let agentLocation: Vector3 = vector3(0, 0, 0);
|
||||
let agent = world.getEntity(mindKeeper.get("agentid") as string);
|
||||
const agent = world.getEntity(mindKeeper.get("agentid") as string);
|
||||
agentLocation = agent!.location;
|
||||
|
||||
return agentLocation;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import { MolangVariableMap, Vector3, world } from "@minecraft/server";
|
||||
import { MolangVariableMap, Vector3 } from "@minecraft/server";
|
||||
import { Vector3Add, vector3 } from "./vectorUtils";
|
||||
import { PARTICLES, spawnParticle } from "./particleUtils";
|
||||
|
||||
let arrowTemplate: Vector3[] = [
|
||||
const arrowTemplate: Vector3[] = [
|
||||
vector3(0, 0, 0),
|
||||
|
||||
vector3(1, 1, 0),
|
||||
@@ -21,18 +21,16 @@ let arrowTemplate: Vector3[] = [
|
||||
vector3(0, 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;
|
||||
const x = pos.x;
|
||||
const z = pos.z;
|
||||
|
||||
let newX = x * Math.cos(angle) - z * Math.sin(angle);
|
||||
let newZ = x * Math.sin(angle) + z * Math.cos(angle);
|
||||
const newX = x * Math.cos(angle) - z * Math.sin(angle);
|
||||
const newZ = x * Math.sin(angle) + z * Math.cos(angle);
|
||||
|
||||
return vector3(newX, pos.y, newZ);
|
||||
}
|
||||
@@ -49,10 +47,9 @@ function drawArrow(offsetPos: Vector3) {
|
||||
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);
|
||||
const rotatedPos = rotate(pos, angleOffset);
|
||||
const finalPos = Vector3Add(offsetPos, rotatedPos);
|
||||
finalPos.y += Math.sin(heightBobbing) / 2;
|
||||
spawnParticle(finalPos, PARTICLES.point, particleData);
|
||||
});
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { BlockType, BlockTypes, BlockVolume, Vector3, world } from "@minecraft/server";
|
||||
import { BlockVolume, Vector3, world } from "@minecraft/server";
|
||||
import { MinecraftBlockTypes } from "../../vanilla-data/mojang-block";
|
||||
|
||||
type Wall = {
|
||||
@@ -7,18 +7,17 @@ type Wall = {
|
||||
};
|
||||
|
||||
function clearWall(wall: Wall) {
|
||||
let volume: BlockVolume = new BlockVolume(wall.startPos, wall.endPos);
|
||||
const volume: BlockVolume = new BlockVolume(wall.startPos, wall.endPos);
|
||||
world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.Air);
|
||||
}
|
||||
|
||||
function fillWall(wall: Wall, block: string) {
|
||||
let volume: BlockVolume = new BlockVolume(wall.startPos, wall.endPos);
|
||||
const volume: BlockVolume = new BlockVolume(wall.startPos, wall.endPos);
|
||||
world.getDimension("overworld").fillBlocks(volume, block);
|
||||
}
|
||||
|
||||
function startLevel(commandBlockPos: Vector3) {
|
||||
let volume: BlockVolume = new BlockVolume(commandBlockPos, commandBlockPos);
|
||||
const volume: BlockVolume = new BlockVolume(commandBlockPos, commandBlockPos);
|
||||
world.getDimension("overworld").fillBlocks(volume, MinecraftBlockTypes.RedstoneBlock);
|
||||
}
|
||||
BlockTypes;
|
||||
export { Wall, clearWall, fillWall, startLevel };
|
||||
|
||||
@@ -172,13 +172,13 @@ class ParticleColumn {
|
||||
|
||||
generatePoints() {
|
||||
for (let layer = 0; layer < this.layerCount; layer++) {
|
||||
let layerRadius = this.radius - layer;
|
||||
const layerRadius = this.radius - layer;
|
||||
for (let point = 0; point < this.pointsPerLayer; point++) {
|
||||
let angle = (point / this.pointsPerLayer) * (Math.PI * 2);
|
||||
const angle = (point / this.pointsPerLayer) * (Math.PI * 2);
|
||||
this.anglePerLayer.push(angle);
|
||||
let x = Math.cos(angle) * layerRadius;
|
||||
let z = Math.sin(angle) * layerRadius;
|
||||
let y = layer;
|
||||
const x = Math.cos(angle) * layerRadius;
|
||||
const z = Math.sin(angle) * layerRadius;
|
||||
const y = layer;
|
||||
this.points.push(Vector3Add(this.pos, vector3(x, y, z)));
|
||||
}
|
||||
}
|
||||
@@ -186,20 +186,17 @@ class ParticleColumn {
|
||||
|
||||
update() {
|
||||
//update each point by increasing the angle by the speed
|
||||
let layerCount = 0;
|
||||
let pointCount = 0;
|
||||
this.tickCounter++;
|
||||
if (this.tickCounter % 2 == 0) {
|
||||
this.points.forEach((point, index) => {
|
||||
let layer = Math.floor(index / this.pointsPerLayer);
|
||||
const layer = Math.floor(index / this.pointsPerLayer);
|
||||
let angle = this.anglePerLayer[index];
|
||||
angle += this.speed * (layer / 5);
|
||||
this.anglePerLayer[index] = angle;
|
||||
let layerRadius = this.radius - Math.floor(index / this.pointsPerLayer);
|
||||
let calcAngle = angle;
|
||||
let x = Math.cos(calcAngle) * this.radius;
|
||||
let z = Math.sin(calcAngle) * this.radius;
|
||||
let y = Math.floor(index / this.pointsPerLayer) + (this.tickCounter % 2);
|
||||
const calcAngle = angle;
|
||||
const x = Math.cos(calcAngle) * this.radius;
|
||||
const z = Math.sin(calcAngle) * this.radius;
|
||||
const y = Math.floor(index / this.pointsPerLayer) + (this.tickCounter % 2);
|
||||
this.points[index] = Vector3Add(this.pos, vector3(x, y, z));
|
||||
});
|
||||
}
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
import { system } from "@minecraft/server";
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
|
||||
function delayedRun(callback: Function, delay: number) {
|
||||
let timer = system.runTimeout(() => {
|
||||
const timer = system.runTimeout(() => {
|
||||
callback();
|
||||
system.clearRun(timer);
|
||||
}, delay);
|
||||
}
|
||||
|
||||
function delay(t: number) {
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
return new Promise((r: any) => {
|
||||
system.runTimeout(r, t);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user