Core/src/eu/univento/core/api/Letters.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;
}
}