578 lines
14 KiB
Java
578 lines
14 KiB
Java
package eu.univento.core.api;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import org.bukkit.Location;
|
|
import org.bukkit.Material;
|
|
import org.bukkit.block.Block;
|
|
|
|
import eu.univento.core.api.utils.Direction;
|
|
|
|
public enum Letters
|
|
{
|
|
LETTER_A('a',
|
|
new boolean[][] {
|
|
{ false, true },
|
|
{ true, false, true },
|
|
{ true, false, true },
|
|
{ true, true, true },
|
|
{ true, false, true } }),
|
|
|
|
LETTER_B('b',
|
|
new boolean[][] {
|
|
{ true, true },
|
|
{ true, false, true },
|
|
{ true, true, true },
|
|
{ true, false, true },
|
|
{ true, true } }),
|
|
|
|
LETTER_C('c',
|
|
new boolean[][] {
|
|
{ false, true, true },
|
|
{ true },
|
|
{ true },
|
|
{ true },
|
|
{ false, true, true } }),
|
|
|
|
LETTER_D('d',
|
|
new boolean[][] {
|
|
{ true, true },
|
|
{ true, false, true },
|
|
{ true, false, true },
|
|
{ true, false, true },
|
|
{ true, true } }),
|
|
|
|
LETTER_E('e',
|
|
new boolean[][] {
|
|
{ true, true, true },
|
|
{ true },
|
|
{ true, true },
|
|
{ true },
|
|
{ true, true, true } }),
|
|
|
|
LETTER_F('f',
|
|
new boolean[][] {
|
|
{ true, true, true },
|
|
{ true },
|
|
{ true, true },
|
|
{ true },
|
|
{ true } }),
|
|
|
|
LETTER_G('g',
|
|
new boolean[][] {
|
|
{ false, true, true },
|
|
{ true },
|
|
{ true, false, true, true },
|
|
{ true, false, false, true },
|
|
{ false, true, true, true } }),
|
|
|
|
LETTER_H('h',
|
|
new boolean[][] {
|
|
{ true, false, true },
|
|
{ true, false, true },
|
|
{ true, true, true },
|
|
{ true, false, true },
|
|
{ true, false, true } }),
|
|
|
|
LETTER_I('i',
|
|
new boolean[][] {
|
|
{ true },
|
|
{ true },
|
|
{ true },
|
|
{ true },
|
|
{ true } }),
|
|
|
|
LETTER_J('j',
|
|
new boolean[][] {
|
|
{ false, false, true },
|
|
{ false, false, true },
|
|
{ false, false, true },
|
|
{ true, false, true },
|
|
{ true, true, true } }),
|
|
|
|
LETTER_K('k',
|
|
new boolean[][] {
|
|
{ true, false, false, true },
|
|
{ true, false, true },
|
|
{ true, true },
|
|
{ true, false, true },
|
|
{ true, false, false, true } }),
|
|
|
|
LETTER_L('l',
|
|
new boolean[][] {
|
|
{ true },
|
|
{ true },
|
|
{ true },
|
|
{ true },
|
|
{ true, true, true } }),
|
|
|
|
LETTER_M('m',
|
|
new boolean[][] {
|
|
{ true, true, true, true, true },
|
|
{ true, false, true, false, true },
|
|
{ true, false, true, false, true },
|
|
{ true, false, false, false, true },
|
|
{ true, false, false, false, true } }),
|
|
|
|
LETTER_N('n',
|
|
new boolean[][] {
|
|
{ true, false, false, true },
|
|
{ true, true, false, true },
|
|
{ true, false, true, true },
|
|
{ true, false, false, true },
|
|
{ true, false, false, true } }),
|
|
|
|
LETTER_O('o',
|
|
new boolean[][] {
|
|
{ false, true },
|
|
{ true, false, true },
|
|
{ true, false, true },
|
|
{ true, false, true },
|
|
{ false, true } }),
|
|
|
|
LETTER_P('p',
|
|
new boolean[][] {
|
|
{ true, true },
|
|
{ true, false, true },
|
|
{ true, true },
|
|
{ true },
|
|
{ true } }),
|
|
|
|
LETTER_Q('q',
|
|
new boolean[][] {
|
|
{ false, true, true },
|
|
{ true, false, false, true },
|
|
{ true, false, false, true },
|
|
{ true, false, true, true },
|
|
{ false, true, true } }),
|
|
|
|
LETTER_R('r',
|
|
new boolean[][] {
|
|
{ true, true },
|
|
{ true, false, true },
|
|
{ true, false, true },
|
|
{ true, true },
|
|
{ true, false, true } }),
|
|
|
|
LETTER_S('s',
|
|
new boolean[][] {
|
|
{ false, true, true },
|
|
{ true },
|
|
{ false, true },
|
|
{ false, false, true },
|
|
{ true, true } }),
|
|
|
|
LETTER_T('t',
|
|
new boolean[][] {
|
|
{ true, true, true },
|
|
{ false, true },
|
|
{ false, true },
|
|
{ false, true },
|
|
{ false, true } }),
|
|
|
|
LETTER_U('u',
|
|
new boolean[][] {
|
|
{ true, false, true },
|
|
{ true, false, true },
|
|
{ true, false, true },
|
|
{ true, false, true },
|
|
{ false, true } }),
|
|
|
|
LETTER_V('v',
|
|
new boolean[][] {
|
|
{ true, false, false, false, true },
|
|
{ true, false, false, false, true },
|
|
{ false, true, false, true },
|
|
{ false, true, false, true },
|
|
{ false, false, true } }),
|
|
|
|
LETTER_W('w',
|
|
new boolean[][] {
|
|
{ true, false, false, false, true },
|
|
{ true, false, false, false, true },
|
|
{ true, false, false, false, true },
|
|
{ true, false, true, false, true },
|
|
{ true, true, true, true, true } }),
|
|
|
|
LETTER_X('x',
|
|
new boolean[][] {
|
|
{ true, false, false, false, true },
|
|
{ false, true, false, true },
|
|
{ false, false, true },
|
|
{ false, true, false, true },
|
|
{ true, false, false, false, true } }),
|
|
|
|
LETTER_Y('y',
|
|
new boolean[][] {
|
|
{ true, false, false, true },
|
|
{ false, true, true },
|
|
{ false, false, true },
|
|
{ false, true },
|
|
{ true } }),
|
|
|
|
LETTER_Z('z',
|
|
new boolean[][] {
|
|
{ true, true, true, true, true },
|
|
{ false, false, false, true },
|
|
{ false, false, true },
|
|
{ false, true },
|
|
{ true, true, true, true, true } }),
|
|
|
|
LETTER_0('0',
|
|
new boolean[][] {
|
|
{ true, true, true },
|
|
{ true, false, true },
|
|
{ true, false, true },
|
|
{ true, false, true },
|
|
{ true, true, true } }),
|
|
|
|
LETTER_1('1',
|
|
new boolean[][] {
|
|
{ true, true },
|
|
{ false, true },
|
|
{ false, true },
|
|
{ false, true },
|
|
{ true, true, true } }),
|
|
|
|
LETTER_2('2',
|
|
new boolean[][] {
|
|
{ true, true },
|
|
{ false, false, true },
|
|
{ false, true },
|
|
{ true },
|
|
{ true, true, true } }),
|
|
|
|
LETTER_3('3',
|
|
new boolean[][] {
|
|
{ true, true },
|
|
{ false, false, true },
|
|
{ true, true },
|
|
{ false, false, true },
|
|
{ true, true } }),
|
|
|
|
LETTER_4('4',
|
|
new boolean[][] {
|
|
{ true, false, true },
|
|
{ true, false, true },
|
|
{ true, true, true },
|
|
{ false, false, true },
|
|
{ false, false, true } }),
|
|
|
|
LETTER_5('5',
|
|
new boolean[][] {
|
|
{ true, true, true },
|
|
{ true },
|
|
{ true, true, true },
|
|
{ false, false, true },
|
|
{ true, true, true } }),
|
|
|
|
LETTER_6('6',
|
|
new boolean[][] {
|
|
{ true, true, true },
|
|
{ true },
|
|
{ true, true, true },
|
|
{ true, false, true },
|
|
{ true, true, true } }),
|
|
|
|
LETTER_7('7',
|
|
new boolean[][] {
|
|
{ true, true, true },
|
|
{ false, false, true },
|
|
{ false, false, true },
|
|
{ false, false, true },
|
|
{ false, false, true } }),
|
|
|
|
LETTER_8('8',
|
|
new boolean[][] {
|
|
{ true, true, true },
|
|
{ true, false, true },
|
|
{ true, true, true },
|
|
{ true, false, true },
|
|
{ true, true, true } }),
|
|
|
|
LETTER_9('9',
|
|
new boolean[][] {
|
|
{ true, true, true },
|
|
{ true, false, true },
|
|
{ true, true, true },
|
|
{ false, false, true },
|
|
{ true, true, true } }),
|
|
|
|
LETTER_DOT('.',
|
|
new boolean[][] {
|
|
{ true } }),
|
|
|
|
LETTER_UNDERSCORE('_',
|
|
new boolean[][] {
|
|
{ true, true, true } }),
|
|
|
|
LETTER_SPACE(' ',
|
|
new boolean[][] {
|
|
new boolean[3] }),
|
|
|
|
LETTER_PERCENT('%',
|
|
new boolean[][] {
|
|
{ true, false, false, false, true },
|
|
{ false, false, false, true },
|
|
{ false, false, true },
|
|
{ false, true },
|
|
{ true, false, false, false, true } }),
|
|
|
|
LETTER_UP_ARROW('^',
|
|
new boolean[][] {
|
|
{ false, false, true },
|
|
{ false, true, false, true },
|
|
{ true, false, false, false, true },
|
|
new boolean[5],
|
|
new boolean[5] }),
|
|
|
|
LETTER_LEFT_ARROW('<',
|
|
new boolean[][] {
|
|
{ false, false, true },
|
|
{ false, true },
|
|
{ true },
|
|
{ false, true },
|
|
{ false, false, true } }),
|
|
|
|
LETTER_RIGHT_ARROW('>',
|
|
new boolean[][] {
|
|
{ true },
|
|
{ false, true },
|
|
{ false, false, true },
|
|
{ false, true },
|
|
{ true } }),
|
|
|
|
LETTER_AMPERSAND('*',
|
|
new boolean[][] {
|
|
{ true, false, true, false, true },
|
|
{ false, true, true, true },
|
|
{ true, true, true, true, true },
|
|
{ false, true, true, true },
|
|
{ true, false, true, false, true } }),
|
|
|
|
LETTER_HASHTAG('#',
|
|
new boolean[][] {
|
|
{ false, true, false, true },
|
|
{ true, true, true, true, true },
|
|
{ false, true, false, true },
|
|
{ true, true, true, true, true },
|
|
{ false, true, false, true } }),
|
|
|
|
LETTER_COMMA(',',
|
|
new boolean[][] {
|
|
{ true },
|
|
{ true } }),
|
|
|
|
LETTER_COLON(':',
|
|
new boolean[][] {
|
|
{ true },
|
|
new boolean[1],
|
|
new boolean[1],
|
|
new boolean[1],
|
|
{ true } }),
|
|
|
|
LETTER_DASH('-',
|
|
new boolean[][] {
|
|
{ true, true, true },
|
|
new boolean[3],
|
|
new boolean[3] }),
|
|
|
|
LETTER_PLUS('+',
|
|
new boolean[][] {
|
|
{ false, false, true },
|
|
{ false, false, true },
|
|
{ true, true, true, true, true },
|
|
{ false, false, true },
|
|
{ false, false, true } }),
|
|
|
|
LETTER_MINUS('-',
|
|
new boolean[][] {
|
|
{ true, true, true, true, true },
|
|
new boolean[5],
|
|
new boolean[5] }),
|
|
|
|
LETTER_EQUAL('=',
|
|
new boolean[][] {
|
|
{ true, true, true, true, true },
|
|
new boolean[5],
|
|
{ true, true, true, true, true },
|
|
new boolean[5] }),
|
|
|
|
LETTER_LEFT_ROUND_BRACKET('(',
|
|
new boolean[][] {
|
|
{ false, true },
|
|
{ true },
|
|
{ true },
|
|
{ true },
|
|
{ false, true } }),
|
|
|
|
LETTER_RIGHT_ROUND_BRACKET(')',
|
|
new boolean[][] {
|
|
{ true },
|
|
{ false, true },
|
|
{ false, true },
|
|
{ false, true },
|
|
{ true } }),
|
|
|
|
LETTER_LEFT_SQUARE_BRACKET('[',
|
|
new boolean[][] {
|
|
{ true, true },
|
|
{ true },
|
|
{ true },
|
|
{ true },
|
|
{ true, true } }),
|
|
|
|
LETTER_RIGHT_SQUARE_BRACKET(']',
|
|
new boolean[][] {
|
|
{ true, true },
|
|
{ false, true },
|
|
{ false, true },
|
|
{ false, true },
|
|
{ true, true } }),
|
|
|
|
LETTER_QUESTION('?',
|
|
new boolean[][] {
|
|
{ true, true, true },
|
|
{ false, false, true },
|
|
{ false, true, true },
|
|
new boolean[3],
|
|
{ false, true } });
|
|
|
|
private char character;
|
|
private int height;
|
|
private int width;
|
|
private boolean[][] blocks;
|
|
|
|
private Letters(char character, boolean[][] blocks) {
|
|
this.character = character;
|
|
this.blocks = blocks;
|
|
this.height = blocks.length;
|
|
this.width = blocks[0].length;
|
|
boolean[][] reversed = new boolean[this.height][this.width];
|
|
for (int i = 0; i < this.height; i++)
|
|
{
|
|
reversed[(this.height - i - 1)] = blocks[i];
|
|
}
|
|
this.blocks = reversed;
|
|
}
|
|
|
|
public int getWidth() {
|
|
return this.width;
|
|
}
|
|
|
|
public int getHeight() {
|
|
return this.height;
|
|
}
|
|
|
|
public char getCharacter() {
|
|
return this.character;
|
|
}
|
|
|
|
@SuppressWarnings("deprecation")
|
|
public void draw(Material type, byte data, Location loc, Direction dir)
|
|
{
|
|
for (int y = 0; y < this.height; y++)
|
|
{
|
|
for (int x = 0; x < this.width; x++)
|
|
{
|
|
Location l = loc.clone().add(x * dir.getX(), y, x * dir.getZ());
|
|
if ((l.getBlock() == null) || (this.blocks[y][x] == 0))
|
|
continue;
|
|
l.getBlock().setType(type);
|
|
l.getBlock().setData(data);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static int strHeight()
|
|
{
|
|
return 5;
|
|
}
|
|
|
|
public static int strHeight(String[] str) {
|
|
return (strHeight() + 1) * str.length - 1;
|
|
}
|
|
|
|
public static int strWidth(String str) {
|
|
int w = 0;
|
|
List letters = fromString(str);
|
|
for (Letters l : letters)
|
|
{
|
|
w += l.getWidth() + 1;
|
|
}
|
|
return w > 0 ? w - 1 : w;
|
|
}
|
|
|
|
public static int strWidth(String[] str) {
|
|
int width = 0;
|
|
String[] arrayOfString = str; int j = str.length; for (int i = 0; i < j; i++) { String s = arrayOfString[i];
|
|
|
|
if (strWidth(s) > width)
|
|
width = strWidth(s);
|
|
}
|
|
return width;
|
|
}
|
|
|
|
public static void centreString(String text, Material type, byte data, Location centre, Direction dir)
|
|
{
|
|
int width = strWidth(text);
|
|
Location start = centre.subtract(width / 2 * dir.getX(), 0.0D, width / 2 *
|
|
dir.getZ());
|
|
drawString(text, type, data, start, dir);
|
|
}
|
|
|
|
public static void centreString(String[] text, Material type, byte data, Location centre, Direction dir)
|
|
{
|
|
int height = 0;
|
|
String[] arrayOfString = text; int j = text.length; for (int i = 0; i < j; i++) { String s = arrayOfString[i];
|
|
|
|
height++;
|
|
height += strHeight();
|
|
centreString(s, type, data, centre.clone().subtract(0.0D, height, 0.0D), dir); }
|
|
}
|
|
|
|
public static void drawString(String str, Material type, byte data, Location loc, Direction dir)
|
|
{
|
|
List letters = fromString(str);
|
|
for (Letters l : letters)
|
|
{
|
|
l.draw(type, data, loc.clone(), dir);
|
|
loc = loc.add((l.getWidth() + 1) * dir.getX(), 0.0D, (l.getWidth() + 1) *
|
|
dir.getZ());
|
|
}
|
|
}
|
|
|
|
public static void drawString(String[] text, Material type, byte data, Location loc, Direction dir) {
|
|
int height = 0;
|
|
String[] arrayOfString = text; int j = text.length; for (int i = 0; i < j; i++) { String s = arrayOfString[i];
|
|
|
|
height++;
|
|
height += strHeight();
|
|
centreString(s, type, data, loc.clone().subtract(0.0D, height, 0.0D), dir); }
|
|
}
|
|
|
|
public static Letters fromCharacter(char character)
|
|
{
|
|
for (Letters l : values())
|
|
{
|
|
if (l.character.equalsIgnoreCase(character))
|
|
{
|
|
return l;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public static List<Letters> fromString(String string) {
|
|
List letters = new ArrayList();
|
|
for (char character : string.toCharArray())
|
|
{
|
|
Letters l = fromCharacter(character);
|
|
if (l == null)
|
|
continue;
|
|
letters.add(l);
|
|
}
|
|
|
|
return letters;
|
|
}
|
|
} |