67 lines
1.6 KiB
TypeScript
67 lines
1.6 KiB
TypeScript
import { Vector3, world } from "@minecraft/server";
|
|
import { Vector3ToCommandString } from "../utils/vectorUtils";
|
|
import { delay } from "../utils/waitUtil";
|
|
|
|
let animationPlaying = false;
|
|
|
|
function setAmimationPlaying(value: boolean) {
|
|
animationPlaying = value;
|
|
}
|
|
function getAnimationPlaying() {
|
|
return animationPlaying;
|
|
}
|
|
|
|
class ClonePos {
|
|
point1: Vector3;
|
|
point2: Vector3;
|
|
|
|
constructor(point1: Vector3, point2: Vector3) {
|
|
this.point1 = point1;
|
|
this.point2 = point2;
|
|
}
|
|
}
|
|
|
|
async function SetFrame(frame: ClonePos, destination: Vector3) {
|
|
await world
|
|
.getDimension("overworld")
|
|
.runCommandAsync(
|
|
`/clone ${Vector3ToCommandString(frame.point1)} ${Vector3ToCommandString(frame.point2)} ${Vector3ToCommandString(
|
|
destination
|
|
)}`
|
|
);
|
|
}
|
|
|
|
async function playAnimation(
|
|
frames: ClonePos[],
|
|
delayTime: number,
|
|
reverse: boolean,
|
|
destination: Vector3,
|
|
force: boolean = false
|
|
) {
|
|
if (animationPlaying && !force) {
|
|
world.sendMessage("Animation already playing");
|
|
return;
|
|
}
|
|
const frameCount = frames.length;
|
|
if (!force) {
|
|
animationPlaying = true;
|
|
}
|
|
|
|
for (let i = 0; i < frameCount; i++) {
|
|
const frame = reverse ? frames[frameCount - i - 1] : frames[i];
|
|
await world
|
|
.getDimension("overworld")
|
|
.runCommandAsync(
|
|
`/clone ${Vector3ToCommandString(frame.point1)} ${Vector3ToCommandString(
|
|
frame.point2
|
|
)} ${Vector3ToCommandString(destination)}`
|
|
);
|
|
await delay(delayTime);
|
|
}
|
|
if (!force) {
|
|
animationPlaying = false;
|
|
}
|
|
}
|
|
|
|
export { SetFrame, ClonePos, playAnimation, animationPlaying, setAmimationPlaying, getAnimationPlaying };
|