package com.austinv11.collectiveframework.minecraft.books.simple;
import com.austinv11.collectiveframework.minecraft.books.api.Entry;
import com.austinv11.collectiveframework.utils.math.TwoDimensionalVector;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
/**
* This is an easy-to-use entry implementation for text
*/
public class TextEntry extends Entry {
/**
* Using unicode font makes everything a little less minecrafty
*/
public boolean useUnicodeFont = true;
/**
* Adds a shadow to the text, makes it more visible in most cases
*/
public boolean useFontShadow = true;
/**
* The text alignment
*/
public Alignment alignment = Alignment.LEFT;
private String toRender;
@SideOnly(Side.CLIENT)
private FontRenderer renderer = Minecraft.getMinecraft().fontRenderer;
public TextEntry(TwoDimensionalVector coords, int width, int height, String toRender) {
this(coords, width, height);
this.toRender = toRender;
}
private TextEntry(TwoDimensionalVector coords, int width, int height) {
super(coords, width, height);
}
@SideOnly(Side.CLIENT)
public List<String> fitString() {
List<String> strings = new ArrayList<String>();
String[] lines = toRender.split("\n");
for (String line : lines) {
String currentString = "";
String[] split = line.split(" ");
for (String s : split) {
if (renderer.getStringWidth(currentString+" "+s) > width) {
strings.add(currentString);
currentString = s;
} else
currentString = currentString+" "+s;
}
strings.add(currentString);
}
return strings;
}
@Override
@SideOnly(Side.CLIENT)
public void onRender(int dt) {
List<String> lines = fitString();
boolean unicode = renderer.getUnicodeFlag();
renderer.setUnicodeFlag(useUnicodeFont);
int currentY = getCoords().getRoundedY();
if (alignment == Alignment.LEFT) {
for (String s : lines) {
renderer.drawString(s, getCoords().getRoundedX(), currentY, Color.WHITE.getRGB(), useFontShadow);
currentY += renderer.FONT_HEIGHT;
if (currentY >= getCoords().getRoundedY()+height)
break;
}
} else if (alignment == Alignment.CENTER) {
for (String s : lines) {
renderer.drawString(s, getCoords().getRoundedX() + (width - renderer.getStringWidth(s)) / 2, currentY,
Color.WHITE.getRGB(), useFontShadow);
currentY += renderer.FONT_HEIGHT;
if (currentY >= getCoords().getRoundedY()+height)
break;
}
} else if (alignment == Alignment.RIGHT) {
for (String s : lines) {
renderer.drawString(s, getCoords().getRoundedX()+(width-renderer.getStringWidth(s)), currentY,
Color.WHITE.getRGB(), useFontShadow);
currentY += renderer.FONT_HEIGHT;
if (currentY >= getCoords().getRoundedY()+height)
break;
}
} else {
for (String s : lines) {
int spacesToAdd = (width-renderer.getStringWidth(s))/renderer.getCharWidth(' ');
String[] words = s.split(" ");
spacesToAdd += words.length;
String justified = "";
inner: while (spacesToAdd > 0) {
for (int i = 0; i < words.length; i++) {
if (spacesToAdd == 0)
break inner;
words[i] = words[i]+" ";
spacesToAdd--;
}
}
for (int i = 0; i < words.length; i++)
justified = justified+words[i];
renderer.drawString(justified, getCoords().getRoundedX(), currentY, Color.WHITE.getRGB(), useFontShadow);
currentY += renderer.FONT_HEIGHT;
if (currentY >= getCoords().getRoundedY()+height)
break;
}
}
renderer.setUnicodeFlag(unicode);
}
/**
* This represents the possible text alignments
*/
public static enum Alignment {
LEFT, CENTER, RIGHT, JUSTIFY
}
}