Init
This commit is contained in:
99
scripts/Commandeer/pupeteer.ts
Normal file
99
scripts/Commandeer/pupeteer.ts
Normal file
@@ -0,0 +1,99 @@
|
||||
import { RawText, TicksPerSecond, TitleDisplayOptions, Vector3, World, system } from "@minecraft/server";
|
||||
import { delayedRun } from "./utils/waitUtil";
|
||||
|
||||
class Pupeteer {
|
||||
world: World;
|
||||
|
||||
constructor(world: World) {
|
||||
this.world = world;
|
||||
}
|
||||
|
||||
private getActualString(message: string): string | RawText {
|
||||
if (message.startsWith("%")) {
|
||||
const key = message.substring(1);
|
||||
return { rawtext: [{ translate: key }] };
|
||||
}
|
||||
return message;
|
||||
}
|
||||
|
||||
setActionBarTimed(message: string, duration: number): void {
|
||||
this.world.getPlayers().forEach((player) => {
|
||||
player.onScreenDisplay.setActionBar(this.getActualString(message));
|
||||
});
|
||||
delayedRun(() => {
|
||||
this.clearActionBar();
|
||||
}, duration * TicksPerSecond);
|
||||
}
|
||||
|
||||
setActionBar(message: string): void {
|
||||
this.world.getPlayers().forEach((player) => {
|
||||
player.onScreenDisplay.setActionBar(this.getActualString(message));
|
||||
});
|
||||
}
|
||||
|
||||
sendWorldMessage(message: string): void {
|
||||
this.world.sendMessage(this.getActualString(message));
|
||||
}
|
||||
|
||||
setTitleTimed(message: string, duration: number): void {
|
||||
this.world.getPlayers().forEach((player) => {
|
||||
let options: TitleDisplayOptions = {
|
||||
fadeInDuration: 20,
|
||||
fadeOutDuration: 20,
|
||||
stayDuration: duration * TicksPerSecond,
|
||||
};
|
||||
player.onScreenDisplay.setTitle(this.getActualString(message), options);
|
||||
});
|
||||
}
|
||||
|
||||
setTitle(message: string): void {
|
||||
this.world.getPlayers().forEach((player) => {
|
||||
player.onScreenDisplay.setTitle(message);
|
||||
});
|
||||
}
|
||||
|
||||
updateSubtitle(message: string): void {
|
||||
this.world.getPlayers().forEach((player) => {
|
||||
player.onScreenDisplay.updateSubtitle(this.getActualString(message));
|
||||
});
|
||||
}
|
||||
|
||||
clearTitle(): void {
|
||||
this.world.getPlayers().forEach((player) => {
|
||||
player.onScreenDisplay.setTitle("");
|
||||
});
|
||||
}
|
||||
|
||||
clearSubtitle(): void {
|
||||
this.world.getPlayers().forEach((player) => {
|
||||
player.onScreenDisplay.updateSubtitle("");
|
||||
});
|
||||
}
|
||||
|
||||
clearActionBar(): void {
|
||||
this.world.getPlayers().forEach((player) => {
|
||||
player.onScreenDisplay.setActionBar("");
|
||||
});
|
||||
}
|
||||
|
||||
testForLocation(location: Vector3, radius: number): boolean {
|
||||
let isPlayerInArea = false;
|
||||
this.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;
|
||||
|
||||
let distance = Math.sqrt(dx * dx + dy * dy + dz * dz);
|
||||
if (distance < radius) {
|
||||
isPlayerInArea = true;
|
||||
}
|
||||
});
|
||||
return isPlayerInArea;
|
||||
}
|
||||
|
||||
setNpcText(npcTag: string, sceneName: string) {
|
||||
this.world.getDimension("overworld").runCommand(`/dialogue change @e[tag=${npcTag}] ${sceneName} @a`);
|
||||
}
|
||||
}
|
||||
|
||||
export default Pupeteer;
|
||||
Reference in New Issue
Block a user