@tendrock/lib
Version:
A lib under the Tendrock system for Minecraft Bedrock Script API
86 lines (85 loc) • 3.77 kB
JavaScript
import { Block, Direction } from '@minecraft/server';
import { Axis } from "../lib";
export class DirectionUtils {
static reverse(direction) {
switch (direction) {
case Direction.Up:
return Direction.Down;
case Direction.Down:
return Direction.Up;
case Direction.North:
return Direction.South;
case Direction.South:
return Direction.North;
case Direction.West:
return Direction.East;
case Direction.East:
return Direction.West;
}
}
static getDirectionMethodName(direction) {
return this._DirectionMethodNameMap.get(direction);
}
static rotateClockwise(axis, direction) {
const dirList = this._DirectionClockwiseMap.get(axis);
let index = dirList.indexOf(direction) + 1;
if (index >= dirList.length)
index = 0;
return dirList[index];
}
static fromPropertyStr(propertyStr) {
if (!propertyStr)
return undefined;
return (propertyStr.substring(0, 1).toUpperCase() + propertyStr.substring(1));
}
static fromVanillaFacingDirection(blockOrPermutation) {
const permutation = blockOrPermutation instanceof Block ? blockOrPermutation.permutation : blockOrPermutation;
const vanillaFacing = permutation.getState('minecraft:facing_direction');
if (!vanillaFacing)
return undefined;
const retDir = this.fromPropertyStr(vanillaFacing);
// Reverse the up and down direction
if (retDir === Direction.Up || retDir === Direction.Down) {
return this.reverse(retDir);
}
return retDir;
}
static fromVanillaCardinalDirection(blockOrPermutation) {
const permutation = blockOrPermutation instanceof Block ? blockOrPermutation.permutation : blockOrPermutation;
const vanillaFacing = permutation.getState('minecraft:cardinal_direction');
if (!vanillaFacing)
return undefined;
return this.fromPropertyStr(vanillaFacing);
}
static setDirection(block, stateName, direction) {
if (!this.DirectionStateNames.includes(stateName))
return;
if (direction === Direction.Up || direction === Direction.Down) {
if (stateName === 'minecraft:cardinal_direction') {
throw Error('Cardinal direction dont have up and down directions');
}
// Reverse the up and down direction
direction = this.reverse(direction);
}
block.setPermutation(block.permutation.withState(stateName, direction.toLowerCase()));
}
static allDirectionExclude(...excludeDirectionList) {
return DirectionUtils.AllDirections.concat().filter((direction) => !excludeDirectionList.includes(direction));
}
}
DirectionUtils.AllDirections = [Direction.Up, Direction.Down, Direction.North, Direction.South, Direction.West, Direction.East];
DirectionUtils.AllBlockDirectionMethodNames = ['above', 'below', 'east', 'west', 'south', 'north'];
DirectionUtils.DirectionStateNames = ['minecraft:cardinal_direction', 'minecraft:facing_direction'];
DirectionUtils._DirectionClockwiseMap = new Map([
[Axis.X, [Direction.South, Direction.Up, Direction.North, Direction.Down]],
[Axis.Y, [Direction.South, Direction.West, Direction.North, Direction.East]],
[Axis.Z, [Direction.West, Direction.Up, Direction.East, Direction.Down]],
]);
DirectionUtils._DirectionMethodNameMap = new Map([
[Direction.Up, 'above'],
[Direction.Down, 'below'],
[Direction.North, 'north'],
[Direction.South, 'south'],
[Direction.West, 'west'],
[Direction.East, 'east'],
]);