From 77c1b53e31c85fc3980560b605831540ebc9c091 Mon Sep 17 00:00:00 2001 From: Vaern Date: Thu, 20 Oct 2022 21:06:00 -0700 Subject: [PATCH] Loose Paper appearance type, fixes, new page textures --- .../com/hbm/inventory/gui/GUIBookLore.java | 67 ++++++++++++------ .../com/hbm/items/special/ItemBookLore.java | 4 +- .../worldgen/components/BunkerComponents.java | 3 + .../textures/gui/book/notebook_and_papers.png | Bin 0 -> 13308 bytes .../hbm/textures/items/papers_loose.png | Bin 0 -> 263 bytes 5 files changed, 51 insertions(+), 23 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/gui/book/notebook_and_papers.png create mode 100644 src/main/resources/assets/hbm/textures/items/papers_loose.png diff --git a/src/main/java/com/hbm/inventory/gui/GUIBookLore.java b/src/main/java/com/hbm/inventory/gui/GUIBookLore.java index e0d2839fa..fef6a8986 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIBookLore.java +++ b/src/main/java/com/hbm/inventory/gui/GUIBookLore.java @@ -46,7 +46,7 @@ public class GUIBookLore extends GuiScreen { ySize = setup.mainPage.sizeY; } - maxPage = setup.mainPage.isTwoPages ? (int)Math.ceil(type.pages / 2D) - 1 : type.pages; + maxPage = setup.mainPage.isTwoPages ? (int)Math.ceil(type.pages / 2D) - 1 : type.pages - 1; System.out.print((int)Math.ceil(type.pages / 2D) - 1); } @@ -69,18 +69,21 @@ public class GUIBookLore extends GuiScreen { protected void drawGuiContainerBackgroundLayer(float f, int i, int j) { GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - if(page == maxPage && setup.mainPage.isTwoPages && this.page * 2 >= this.type.pages) //odd numbered pages + if(page == maxPage && (page + 1) * 2 > type.pages) { //odd numbered pages Minecraft.getMinecraft().getTextureManager().bindTexture(setup.auxPage.texture); - else + func_146110_a(guiLeft, guiTop, setup.auxPage.u, setup.auxPage.v, setup.auxPage.sizeX, setup.auxPage.sizeY, 512, 512); + } else { Minecraft.getMinecraft().getTextureManager().bindTexture(setup.mainPage.texture); + func_146110_a(guiLeft, guiTop, setup.mainPage.u, setup.mainPage.v, setup.mainPage.sizeX, setup.mainPage.sizeY, 512, 512); + } - func_146110_a(guiLeft, guiTop, 0, 0, xSize, ySize, 512, 512); + int width = page == maxPage && (page + 1) * 2 > type.pages ? setup.auxPage.sizeX : setup.mainPage.sizeX; if(page > 0) - setup.button.renderButton(this, xSize, guiLeft, guiTop, false, i, j); + setup.button.renderButton(this, width, guiLeft, guiTop, false, i, j); if(page < maxPage) - setup.button.renderButton(this, xSize, guiLeft, guiTop, true, i, j); + setup.button.renderButton(this, width, guiLeft, guiTop, true, i, j); } protected void drawGuiContainerForegroundLayer(int x, int y) { @@ -96,7 +99,11 @@ public class GUIBookLore extends GuiScreen { setup.auxPage.renderText(key + defacto, fontRendererObj, guiLeft, guiTop, false); } else { - setup.mainPage.renderText(key + page, fontRendererObj, guiLeft, guiTop, false); + + if(page < maxPage) + setup.mainPage.renderText(key + (page + 1), fontRendererObj, guiLeft, guiTop, false); + else + setup.auxPage.renderText(key + (page + 1), fontRendererObj, guiLeft, guiTop, false); } } @@ -127,14 +134,18 @@ public class GUIBookLore extends GuiScreen { // turn page buttons, one-page, both page textures, sizes, positions, etc. public enum GUIAppearance { GUIDEBOOK(new GUIPage(272, 182, 20, 20, new ResourceLocation(RefStrings.MODID + ":textures/gui/book/book.png")).setScale(2F), - new GUIPageButton(18, 10, 24, 155, 0, 0, 500, 200, new ResourceLocation(RefStrings.MODID + ":textures/gui/book/starter6.png")), - 0); + new GUIPageButton(18, 10, 24, 155, new ResourceLocation(RefStrings.MODID + ":textures/gui/book/starter6.png")).setUV(0, 0, 500, 200), + 0), + LOOSEPAPER(new GUIPage(133, 165, 10, 24, new ResourceLocation(RefStrings.MODID + ":textures/gui/book/notebook_and_papers.png"), false).setScale(2F), + new GUIPage(130, 165, 10, 24, new ResourceLocation(RefStrings.MODID + ":textures/gui/book/notebook_and_papers.png"), false).setScale(2F).setUV(133, 0), + new GUIPageButton(18, 10, 17, 148, new ResourceLocation(RefStrings.MODID + ":textures/gui/book/notebook_and_papers.png")).setUV(263, 0, 512, 512), + 1); public int itemTexture; protected GUIPage mainPage; //"Main" page, usually two pages. GUI accounts for one-paged main pages. protected GUIPage auxPage; //"Aux" page, AKA the final page if the max pages is oddly numbered. - //If two-sided, text will be positioned on the left page. Can be null if main page is one-sided. + //If two-sided, text will be positioned on the left page. protected GUIPageButton button; private GUIAppearance(GUIPage main, GUIPage aux, GUIPageButton button, int texture) { @@ -156,6 +167,10 @@ public class GUIBookLore extends GuiScreen { private static class GUIPage { protected ResourceLocation texture; + //UV positioning + protected int u = 0; + protected int v = 0; + protected int sizeX; protected int sizeY; @@ -164,7 +179,7 @@ public class GUIBookLore extends GuiScreen { protected int marginY; //Mirrored on both sides if two-sided. protected boolean isTwoPages = true; protected float scale = 1.0F; - + //TODO: split marginX into a left and right margin protected GUIPage(int x, int y, int marX, int marY, ResourceLocation texture, boolean twoPages) { this.sizeX = x; this.sizeY = y; @@ -182,6 +197,12 @@ public class GUIBookLore extends GuiScreen { this.texture = texture; } + protected GUIPage setUV(int u, int v) { + this.u = u; + this.v = v; + return this; + } + protected GUIPage setScale(float scale) { this.scale = scale; return this; @@ -235,21 +256,25 @@ public class GUIBookLore extends GuiScreen { /* Left, Unsel | Right, Unsel * Left, Sel | Right, Sel */ - protected int u; //upper lefthand corner where the button textures lie. - protected int v; //assumes uniform size for each. - protected int sizeU; - protected int sizeV; + protected int u = 0; //upper lefthand corner where the button textures lie. + protected int v = 0; //assumes uniform size for each. + protected int sizeU = sizeX * 2; //Size of UV texture + protected int sizeV = sizeY * 2; - protected GUIPageButton(int sizeX, int sizeY, int x, int y, int u, int v, int sizeU, int sizeV, ResourceLocation tex) { + protected GUIPageButton(int sizeX, int sizeY, int x, int y, ResourceLocation tex) { this.sizeX = sizeX; this.sizeY = sizeY; this.x = x; this.y = y; + this.texture = tex; + } + + protected GUIPageButton setUV(int u, int v, int sizeU, int sizeV) { this.u = u; this.v = v; - this.texture = tex; this.sizeU = sizeU; this.sizeV = sizeV; + return this; } protected void renderButton(GuiScreen screen, int width, int left, int top, boolean rightPage, int i, int j) { @@ -258,15 +283,15 @@ public class GUIBookLore extends GuiScreen { if(!rightPage) { if(i >= left + x && i < left + x + sizeX && overY) { - func_146110_a(left + x, top + y, u, v + sizeY, sizeX, sizeY, sizeX * 2, sizeY * 2); + func_146110_a(left + x, top + y, u, v + sizeY, sizeX, sizeY, sizeU, sizeV); } else { - func_146110_a(left + x, top + y, u, v, sizeX, sizeY, sizeX * 2, sizeY * 2); + func_146110_a(left + x, top + y, u, v, sizeX, sizeY, sizeU, sizeV); } } else { if(i >= left + width - x - sizeX && i < left + width - x && overY) { - func_146110_a(left + width - x - sizeX, top + y, u + sizeX, v + sizeY, sizeX, sizeY, sizeX * 2, sizeY * 2); + func_146110_a(left + width - x - sizeX, top + y, u + sizeX, v + sizeY, sizeX, sizeY, sizeU, sizeV); } else { - func_146110_a(left + width - x - sizeX, top + y, u + sizeX, v, sizeX, sizeY, sizeX * 2, sizeY * 2); + func_146110_a(left + width - x - sizeX, top + y, u + sizeX, v, sizeX, sizeY, sizeU, sizeV); } } } diff --git a/src/main/java/com/hbm/items/special/ItemBookLore.java b/src/main/java/com/hbm/items/special/ItemBookLore.java index e4c6c78bd..2df994562 100644 --- a/src/main/java/com/hbm/items/special/ItemBookLore.java +++ b/src/main/java/com/hbm/items/special/ItemBookLore.java @@ -63,7 +63,7 @@ public class ItemBookLore extends Item implements IGUIProvider { protected IIcon[] icons; //fuck you, fuck enums, fuck guis, fuck this shitty ass fork. shove that string array up your ass. - public static String[] itemTextures = new String[] { ":book_guide" }; + public static String[] itemTextures = new String[] { ":book_guide", ":papers_loose" }; @SideOnly(Side.CLIENT) public void registerIcons(IIconRegister reg) { @@ -98,7 +98,7 @@ public class ItemBookLore extends Item implements IGUIProvider { } public enum BookLoreType { - TEST(true, "test", 5, GUIAppearance.GUIDEBOOK); + TEST(true, "test", 5, GUIAppearance.LOOSEPAPER); //Why? it's quite simple; i am too burnt out and also doing it the other way //is too inflexible for my taste diff --git a/src/main/java/com/hbm/world/worldgen/components/BunkerComponents.java b/src/main/java/com/hbm/world/worldgen/components/BunkerComponents.java index e4763a446..584298485 100644 --- a/src/main/java/com/hbm/world/worldgen/components/BunkerComponents.java +++ b/src/main/java/com/hbm/world/worldgen/components/BunkerComponents.java @@ -23,6 +23,9 @@ import net.minecraftforge.common.util.ForgeDirection; public class BunkerComponents extends ProceduralComponents { public BunkerComponents() { + //TODO: + //add an abstract method to check if each boundingbox/structure is a valid component to ProceduralComponent + //Pass each respective method as a method reference (::) to the weight constructors, in order to boost clarity weightArray = new Weight[] { new Weight(30, -1, (list, rand, x, y, z, mode, type) -> { StructureBoundingBox box = getComponentToAddBoundingBox(x, y, z, -3, -1, 0, 9, 6, 15, mode); //Corridor and Wide version if(box.minY > 10 && StructureComponent.findIntersecting(list, box) == null) return new WideCorridor(type, rand, box, mode); diff --git a/src/main/resources/assets/hbm/textures/gui/book/notebook_and_papers.png b/src/main/resources/assets/hbm/textures/gui/book/notebook_and_papers.png new file mode 100644 index 0000000000000000000000000000000000000000..057b9ec59d00109004a9b383e2529c4545e9c7cc GIT binary patch literal 13308 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 literal 0 HcmV?d00001