UNPKG

@tendrock/lib

Version:

A lib under the Tendrock system for Minecraft Bedrock Script API

86 lines (85 loc) 3.77 kB
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'], ]);