2021-05-16 15:19:32 +02:00

248 lines
7.5 KiB
Java

package com.hbm.inventory.gui;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.math.NumberUtils;
import org.lwjgl.opengl.GL11;
import com.hbm.items.tool.ItemGuideBook.BookType;
import com.hbm.items.tool.ItemGuideBook.GuidePage;
import com.hbm.lib.RefStrings;
import com.hbm.util.I18nUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ResourceLocation;
public class GUIScreenGuide extends GuiScreen {
private static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/book/book.png");
private static final ResourceLocation texture_cover = new ResourceLocation(RefStrings.MODID + ":textures/gui/book/book_cover.png");
protected int xSize;
protected int ySize;
protected int guiLeft;
protected int guiTop;
private BookType type;
int page;
int maxPage;
public GUIScreenGuide(EntityPlayer player) {
type = BookType.getType(player.getHeldItem().getItemDamage());
System.out.println(type.toString());
page = -1;
maxPage = (int)Math.ceil(type.pages.size() / 2D) - 1;
this.xSize = 272;
this.ySize = 182;
}
@Override
public void initGui() {
super.initGui();
this.guiLeft = (this.width - this.xSize) / 2;
this.guiTop = (this.height - this.ySize) / 2;
}
@Override
public void drawScreen(int mouseX, int mouseY, float f) {
this.drawDefaultBackground();
this.drawGuiContainerBackgroundLayer(f, mouseX, mouseY);
GL11.glDisable(GL11.GL_LIGHTING);
this.drawGuiContainerForegroundLayer(mouseX, mouseY);
GL11.glEnable(GL11.GL_LIGHTING);
}
protected void drawGuiContainerBackgroundLayer(float f, int i, int j) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
if(page < 0) {
Minecraft.getMinecraft().getTextureManager().bindTexture(texture_cover);
func_146110_a(guiLeft, guiTop, 0, 0, xSize, ySize, 512, 512);
return;
}
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
func_146110_a(guiLeft, guiTop, 0, 0, xSize, ySize, 512, 512);
boolean overLeft = i >= guiLeft + 24 && i < guiLeft + 42 && j >= guiTop + 155 && j < guiTop + 165;
boolean overRight = i >= guiLeft + 230 && i < guiLeft + 248 && j >= guiTop + 155 && j < guiTop + 165;
if(this.page > 0) {
if(!overLeft)
func_146110_a(guiLeft + 24, guiTop + 155, 3, 207, 18, 10, 512, 512);
else
func_146110_a(guiLeft + 24, guiTop + 155, 26, 207, 18, 10, 512, 512);
}
if(this.page < this.maxPage) {
if(!overRight)
func_146110_a(guiLeft + 230, guiTop + 155, 3, 194, 18, 10, 512, 512);
else
func_146110_a(guiLeft + 230, guiTop + 155, 26, 194, 18, 10, 512, 512);
}
}
public static void drawImage(int x, int y, int dimX, int dimY) {
Tessellator tessellator = Tessellator.instance;
tessellator.setBrightness(240);
tessellator.setColorRGBA_F(1.0F, 1.0F, 1.0F, 1.0F);
tessellator.startDrawingQuads();
tessellator.addVertexWithUV(x, y + dimY, 0.0D, 0, 1);
tessellator.addVertexWithUV(x + dimX, y + dimY, 0.0D, 1, 1);
tessellator.addVertexWithUV(x + dimX, y, 0.0D, 1, 0);
tessellator.addVertexWithUV(x, y, 0.0D, 0, 0);
tessellator.draw();
}
protected void drawGuiContainerForegroundLayer(int x, int y) {
if(this.page < 0) {
float scale = this.type.titleScale;
String[] coverLines = I18nUtil.resolveKeyArray(this.type.title);
for(int i = 0; i < coverLines.length; i++) {
String cover = coverLines[i];
GL11.glPushMatrix();
GL11.glScalef(scale, scale, 1F);
this.fontRendererObj.drawString(cover, (int)((guiLeft + ((this.xSize / 2) - (this.fontRendererObj.getStringWidth(cover) / 2 * scale))) / scale), (int)((guiTop + 50 + i * 10 * scale) / scale), 0xfece00);
GL11.glPopMatrix();
}
return;
}
int sideOffset = 130;
for(int i = 0; i < 2; i++) {
int defacto = this.page * 2 + i;
if(defacto < this.type.pages.size()) {
GuidePage page = this.type.pages.get(defacto);
float scale = page.scale;
String text = I18nUtil.resolveKey(page.text);
int width = 100;
int widthScaled = (int) (width * scale);
List<String> lines = new ArrayList();
String[] words = text.split(" ");
lines.add(words[0]);
int indent = this.fontRendererObj.getStringWidth(words[0]);
for(int w = 1; w < words.length; w++) {
indent += this.fontRendererObj.getStringWidth(" " + words[w]);
if(indent <= widthScaled) {
String last = lines.get(lines.size() - 1);
lines.set(lines.size() - 1, last += (" " + words[w]));
} else {
lines.add(words[w]);
indent = this.fontRendererObj.getStringWidth(words[w]);
}
}
float titleScale = getOverrideScale(page.titleScale, page.title + ".scale");
GL11.glPushMatrix();
GL11.glScalef(1F/scale, 1F/scale, 1F);
float topOffset = page.title == null ? 0 : 6 / titleScale;
for(int l = 0; l < lines.size(); l++) {
this.fontRendererObj.drawString(lines.get(l), (int)((guiLeft + 20 + i * sideOffset) * scale), (int)((guiTop + 30 + topOffset) * scale + (12 * l)), 4210752);
}
GL11.glPopMatrix();
if(page.title != null) {
float tScale = titleScale;
String titleLoc = I18nUtil.resolveKey(page.title);
GL11.glPushMatrix();
GL11.glScalef(1F/tScale, 1F/tScale, 1F);
this.fontRendererObj.drawString(titleLoc, (int)((guiLeft + 20 + i * sideOffset + ((width / 2) - (this.fontRendererObj.getStringWidth(titleLoc) / 2 / tScale))) * tScale), (int)((guiTop + 20) * tScale), page.titleColor);
GL11.glPopMatrix();
}
if(page.image != null) {
GL11.glColor4f(1F, 1F, 1F, 1F);
Minecraft.getMinecraft().getTextureManager().bindTexture(page.image);
int ix = page.x;
if(ix == -1)
ix = width / 2 - page.sizeX / 2;
drawImage(guiLeft + 20 + ix + sideOffset * i, guiTop + page.y, page.sizeX, page.sizeY);
}
String pageLabel = (defacto + 1) + "/" + (this.type.pages.size());
this.fontRendererObj.drawString(pageLabel, guiLeft + 44 + i * 185 - i * this.fontRendererObj.getStringWidth(pageLabel), guiTop + 156, 4210752);
}
}
}
private float getOverrideScale(float def, String tag) {
String scale = I18nUtil.resolveKey(tag);
if(NumberUtils.isNumber(scale)) {
return 1F / NumberUtils.toFloat(scale);
}
return def;
}
@Override
protected void mouseClicked(int i, int j, int k) {
if(page < 0) {
page = 0;
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
return;
}
boolean overLeft = i >= guiLeft + 24 && i < guiLeft + 42 && j >= guiTop + 155 && j < guiTop + 165;
boolean overRight = i >= guiLeft + 230 && i < guiLeft + 248 && j >= guiTop + 155 && j < guiTop + 165;
if(overLeft && page > 0) {
page--;
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
}
if(overRight && page < maxPage) {
page++;
mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F));
}
}
@Override
protected void keyTyped(char p_73869_1_, int p_73869_2_) {
if(p_73869_2_ == 1 || p_73869_2_ == Minecraft.getMinecraft().gameSettings.keyBindInventory.getKeyCode()) {
Minecraft.getMinecraft().thePlayer.closeScreen();
}
}
}