ProjectAres/Commons/bukkit/src/main/java/tc/oc/commons/bukkit/gui/interfaces/render/text/GridTextRenderInterface.java

433 lines
13 KiB
Java

package tc.oc.commons.bukkit.gui.interfaces.render.text;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import tc.oc.commons.bukkit.gui.buttons.Button;
import tc.oc.commons.bukkit.gui.interfaces.render.ChestRenderInterface;
import tc.oc.commons.bukkit.gui.interfaces.render.Coordinate;
import tc.oc.commons.bukkit.util.ItemCreator;
public class GridTextRenderInterface extends ChestRenderInterface {
private String text;
public GridTextRenderInterface(Player player, List<Button> buttons, int size, String title, String text) {
super(player, buttons, size, title);
this.text = text;
}
public String getText() {
return this.text;
}
@Override
public void updateButtons() {
List<Button> buttons = new ArrayList<>();
List<Letter> letters = new ArrayList<>();
for (char c : getText().toCharArray()) {
letters.add(Letter.getLetter(c));
}
double totalX = 0;
for (Letter letter : letters) {
for (final Coordinate coordinate : letter.getCoordinates().keySet()) {
Coordinate newCoordinate = new Coordinate(coordinate.getX(), coordinate.getY());
newCoordinate.setX(coordinate.getX() + totalX);
int renderSlot = getRenderSlot(newCoordinate);
if (renderSlot >= 0) {
ItemCreator itemCreator = letter.getCoordinates().get(coordinate) != null ? letter.getCoordinates().get(coordinate) : new ItemCreator(Material.WOOL).setData(6);
Button button = new Button(itemCreator.setName(newCoordinate.getX() + " " + newCoordinate.getY()), renderSlot);
buttons.add(button);
}
}
totalX = totalX + letter.getLength() + 1;
}
Button up = new Button(new ItemCreator(Material.ARROW)
.setName(ChatColor.GREEN + "Move Up"), 7) {
@Override
public void function(Player player) {
setOrigin(new Coordinate(getOrigin().getX(), getOrigin().getY() + 1));
updateButtons();
}
};
buttons.add(up);
Button down = new Button(new ItemCreator(Material.ARROW)
.setName(ChatColor.GREEN + "Move Down"), 25) {
@Override
public void function(Player player) {
setOrigin(new Coordinate(getOrigin().getX(), getOrigin().getY() - 1));
updateButtons();
}
};
buttons.add(down);
Button left = new Button(new ItemCreator(Material.ARROW)
.setName(ChatColor.GREEN + "Move Left"), 15) {
@Override
public void function(Player player) {
setOrigin(new Coordinate(getOrigin().getX() - 1, getOrigin().getY()));
updateButtons();
}
};
buttons.add(left);
Button right = new Button(new ItemCreator(Material.ARROW)
.setName(ChatColor.GREEN + "Move Right"), 17) {
@Override
public void function(Player player) {
setOrigin(new Coordinate(getOrigin().getX() + 1, getOrigin().getY()));
updateButtons();
}
};
buttons.add(right);
Button compass = new Button(new ItemCreator(Material.COMPASS)
.setName(ChatColor.GREEN + "Use these to move!"), 16);
buttons.add(compass);
setButtons(buttons);
updateInventory();
}
public enum Letter {
A(
'A',
Arrays.asList(
"_X_",
"X_X",
"X_X",
"XXX",
"X_X")),
B(
'B',
Arrays.asList(
"XX_",
"X_X",
"XX_",
"X_X",
"XX_")),
C(
'C',
Arrays.asList(
"_XX",
"X__",
"X__",
"X__",
"_XX")),
D(
'D',
Arrays.asList(
"XX_",
"X_X",
"X_X",
"X_X",
"XX_")),
E(
'E',
Arrays.asList(
"XXX",
"X__",
"XX_",
"X__",
"XXX")),
F(
'F',
Arrays.asList(
"XXX",
"X__",
"XX_",
"X__",
"X__")),
G(
'G',
Arrays.asList(
"XXX",
"X__",
"X__",
"X_X",
"XXX")),
H(
'H',
Arrays.asList(
"X_X",
"X_X",
"XXX",
"X_X",
"X_X")),
I(
'I',
Arrays.asList(
"XXX",
"_X_",
"_X_",
"_X_",
"XXX")),
J(
'J',
Arrays.asList(
"__X",
"__X",
"__X",
"X_X",
"XXX")),
K(
'K',
Arrays.asList(
"X_X",
"X_X",
"XX_",
"X_X",
"X_X")),
L(
'L',
Arrays.asList(
"X__",
"X__",
"X__",
"X__",
"XXX")),
M(
'M',
Arrays.asList(
"X_X",
"XXX",
"X_X",
"X_X",
"X_X")),
N(
'N',
Arrays.asList(
"X__X",
"XX_X",
"X_XX",
"X__X",
"X__X")),
O(
'O',
Arrays.asList(
"XXX",
"X_X",
"X_X",
"X_X",
"XXX")),
P(
'P',
Arrays.asList(
"XXX",
"X_X",
"XXX",
"X__",
"X__")),
Q(
'Q',
Arrays.asList(
"XXX",
"X_X",
"X_X",
"XX_",
"__X")),
R(
'R',
Arrays.asList(
"XXX",
"X_X",
"XX_",
"X_X",
"X_X")),
S(
'S',
Arrays.asList(
"XXX",
"X__",
"XXX",
"__X",
"XXX")),
T(
'T',
Arrays.asList(
"XXX",
"_X_",
"_X_",
"_X_",
"_X_")),
U(
'U',
Arrays.asList(
"X_X",
"X_X",
"X_X",
"X_X",
"XXX")),
V(
'V',
Arrays.asList(
"X_X",
"X_X",
"X_X",
"X_X",
"_X_")),
W(
'W',
Arrays.asList(
"X_X",
"X_X",
"XXX",
"XXX",
"X_X")),
X(
'X',
Arrays.asList(
"X_X",
"X_X",
"_X_",
"X_X",
"X_X")),
Y(
'Y',
Arrays.asList(
"X_X",
"X_X",
"_X_",
"_X_",
"_X_")),
Z(
'Z',
Arrays.asList(
"XXX",
"__X",
"_X_",
"X__",
"XXX")),
SPACE(
' ',
Arrays.asList(
"_",
"_",
"_",
"_",
"_")),
COLON(
':',
Arrays.asList(
"_",
"X",
"_",
"X",
"_")),
RIGHT_PARENTHESIS(
')',
Arrays.asList(
"X_",
"_X",
"_X",
"_X",
"X_"));
private char letter;
private List<String> lines = new ArrayList<>();
private HashMap<Coordinate, ItemCreator> coordinates = new HashMap<>();
private ItemCreator itemCreator;
Letter(char letter, List<String> lines) {
this.letter = letter;
this.lines = lines;
this.coordinates = draw();
}
Letter(char letter, List<String> lines, ItemCreator itemCreator) {
this.letter = letter;
this.lines = lines;
this.itemCreator = itemCreator;
this.coordinates = draw();
}
public static Letter getLetter(char c) {
for (Letter letter : values()) {
if (letter.getLetter() == c) {
return letter;
}
}
return A;
}
public static double getLength(String text) {
double length = 0;
for (char c : text.toCharArray()) {
length = length + Letter.getLetter(c).getLength();
if (c != ' ') {
length = length + 1;
} else {
length = length + 2;
}
}
return length;
}
public HashMap<Coordinate, ItemCreator> draw() {
HashMap<Coordinate, ItemCreator> map = new HashMap<>();
int currentX = 0;
int currentY = 0;
for (String line : getLines()) {
for (char c : line.toCharArray()) {
Coordinate coordinate = new Coordinate(currentX, currentY);
ItemCreator itemCreator = c == '_' ? new ItemCreator(Material.AIR) : getItemCreator();
map.put(coordinate, itemCreator);
currentX++;
}
currentX = 0;
currentY--;
}
return map;
}
public HashMap<Coordinate, ItemCreator> getCoordinates() {
return this.coordinates;
}
public char getLetter() {
return this.letter;
}
public List<String> getLines() {
return this.lines;
}
public ItemCreator getItemCreator() {
return this.itemCreator;
}
public double getHeight() {
return getLines().size();
/*double lowestPoint = 0;
double highestPoint = 0;
for (Coordinate coordinate : getCoordinates().keySet()) {
if (coordinate.getY() < lowestPoint) {
lowestPoint = coordinate.getY();
} else if (coordinate.getY() > highestPoint) {
highestPoint = coordinate.getY();
}
}
return Math.abs(highestPoint - lowestPoint) + 1;*/
}
public double getLength() {
return getLines().get(0).length();
/*double leftmostPoint = 0;
double rightmostPoint = 0;
for (Coordinate coordinate : getCoordinates().keySet()) {
if (coordinate.getX() <= leftmostPoint) {
leftmostPoint = coordinate.getX();
} else if (coordinate.getX() >= rightmostPoint) {
rightmostPoint = coordinate.getX();
}
}
return Math.abs(leftmostPoint - rightmostPoint) + 1;*/
}
}
}