From 8dad596c164dd8ae97b15bb94d060361fa291fd3 Mon Sep 17 00:00:00 2001 From: Ranzu <66495944+Ranzuu@users.noreply.github.com> Date: Wed, 14 Jan 2026 19:35:05 +0100 Subject: [PATCH 1/2] Added optional color customization --- .../backpack/factory/FactoryBackpackNormal.java | 11 ++++++++++- .../eydamos/backpack/factory/FactoryPersonalSlot.java | 10 +++++++++- .../java/de/eydamos/backpack/misc/Localizations.java | 1 + 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/java/de/eydamos/backpack/factory/FactoryBackpackNormal.java b/src/main/java/de/eydamos/backpack/factory/FactoryBackpackNormal.java index 58397471..4b03b1d0 100644 --- a/src/main/java/de/eydamos/backpack/factory/FactoryBackpackNormal.java +++ b/src/main/java/de/eydamos/backpack/factory/FactoryBackpackNormal.java @@ -1,10 +1,12 @@ package de.eydamos.backpack.factory; import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.InventoryEnderChest; import net.minecraft.inventory.Slot; +import net.minecraft.util.StatCollector; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -13,6 +15,7 @@ import de.eydamos.backpack.inventory.container.Boundaries; import de.eydamos.backpack.inventory.container.ContainerAdvanced; import de.eydamos.backpack.inventory.slot.SlotBackpack; +import de.eydamos.backpack.misc.Localizations; import de.eydamos.backpack.saves.BackpackSave; import de.eydamos.guiadvanced.form.Label; import de.eydamos.guiadvanced.subpart.GuiSlot; @@ -95,7 +98,13 @@ public GuiContainer getGuiContainer(BackpackSave backpack, IInventory[] inventor int inventorySpaceBefore = (int) Math.round(container.getWidth() / 2. - (SLOT * 9) / 2.); - guiBackpack.addSubPart(new Label(X_SPACING, 6, 0x404040, inventories[1].getInventoryName())); + String baseTitle = I18n.format(inventories[1].getInventoryName()); + String guiTitle = baseTitle; + if (StatCollector.canTranslate(Localizations.GUI_TITLE_FORMAT)) { + guiTitle = I18n.format(Localizations.GUI_TITLE_FORMAT, baseTitle); + } + + guiBackpack.addSubPart(new Label(X_SPACING, 6, 0x404040, guiTitle)); guiBackpack.addSubPart(new Label(inventorySpaceBefore, textPositionY, 0x404040, "container.inventory")); return guiBackpack; diff --git a/src/main/java/de/eydamos/backpack/factory/FactoryPersonalSlot.java b/src/main/java/de/eydamos/backpack/factory/FactoryPersonalSlot.java index 1e80d7d6..493de23f 100644 --- a/src/main/java/de/eydamos/backpack/factory/FactoryPersonalSlot.java +++ b/src/main/java/de/eydamos/backpack/factory/FactoryPersonalSlot.java @@ -1,9 +1,11 @@ package de.eydamos.backpack.factory; import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; +import net.minecraft.util.StatCollector; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -109,7 +111,13 @@ public GuiContainer getGuiContainer(PlayerSave player, IInventory[] inventories, guiBackpack.addSubPart(guiSlot); } - guiBackpack.addSubPart(new Label(X_SPACING, 6, 0x404040, container.getInventoryToSave().getInventoryName())); + String baseTitle = I18n.format(container.getInventoryToSave().getInventoryName()); + String guiTitle = baseTitle; + if (StatCollector.canTranslate(Localizations.GUI_TITLE_FORMAT)) { + guiTitle = I18n.format(Localizations.GUI_TITLE_FORMAT, baseTitle); + } + + guiBackpack.addSubPart(new Label(X_SPACING, 6, 0x404040, guiTitle)); guiBackpack.addSubPart(new Label(X_SPACING, 38, 0x404040, container.getInventoryPickup().getInventoryName())); return guiBackpack; diff --git a/src/main/java/de/eydamos/backpack/misc/Localizations.java b/src/main/java/de/eydamos/backpack/misc/Localizations.java index 02e8cde7..8e120edb 100644 --- a/src/main/java/de/eydamos/backpack/misc/Localizations.java +++ b/src/main/java/de/eydamos/backpack/misc/Localizations.java @@ -26,6 +26,7 @@ public class Localizations { public static final String LABEL_NEW_NAME = "text.backpack.new_name"; public static final String LABEL_BACKPACK_CONFIG = "text.backpack.configuration"; + public static final String GUI_TITLE_FORMAT = "text.backpack.title_format"; public static final String BUTTON_OK = "button.backpack.ok"; public static final String BUTTON_CANCEL = "button.backpack.cancel"; From 6659309dc6380f00d513d19ef72f782d5ad62afa Mon Sep 17 00:00:00 2001 From: Ranzu <66495944+Ranzuu@users.noreply.github.com> Date: Wed, 14 Jan 2026 19:50:36 +0100 Subject: [PATCH 2/2] added inventory/hotbar slot --- .../factory/FactoryBackpackNormal.java | 5 +++- .../backpack/factory/FactoryPersonalSlot.java | 5 +++- .../factory/FactoryWorkbenchBackpack.java | 7 +++-- .../eydamos/guiadvanced/subpart/GuiSlot.java | 25 +++++++++++------- .../backpack/textures/gui/guiCombined.png | Bin 3308 -> 2008 bytes 5 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/main/java/de/eydamos/backpack/factory/FactoryBackpackNormal.java b/src/main/java/de/eydamos/backpack/factory/FactoryBackpackNormal.java index 4b03b1d0..00519997 100644 --- a/src/main/java/de/eydamos/backpack/factory/FactoryBackpackNormal.java +++ b/src/main/java/de/eydamos/backpack/factory/FactoryBackpackNormal.java @@ -88,11 +88,14 @@ public GuiContainer getGuiContainer(BackpackSave backpack, IInventory[] inventor int slotsPerRow = backpack.getSlotsPerRow(); int inventoryRows = (int) Math.ceil(inventories[1].getSizeInventory() / (float) slotsPerRow); int textPositionY = 17 + inventoryRows * SLOT + 2; + int inventoryStart = container.getBoundary(Boundaries.INVENTORY); + int hotbarEnd = container.getBoundary(Boundaries.HOTBAR_END); GuiSlot guiSlot; for (int i = 0; i < container.inventorySlots.size(); i++) { Slot slot = (Slot) container.inventorySlots.get(i); - guiSlot = new GuiSlot(slot.xDisplayPosition - 1, slot.yDisplayPosition - 1); + int yOffset = (i >= inventoryStart && i < hotbarEnd) ? 44 : 0; + guiSlot = new GuiSlot(slot.xDisplayPosition - 1, slot.yDisplayPosition - 1, 18, 18, yOffset); guiBackpack.addSubPart(guiSlot); } diff --git a/src/main/java/de/eydamos/backpack/factory/FactoryPersonalSlot.java b/src/main/java/de/eydamos/backpack/factory/FactoryPersonalSlot.java index 493de23f..7d6da69c 100644 --- a/src/main/java/de/eydamos/backpack/factory/FactoryPersonalSlot.java +++ b/src/main/java/de/eydamos/backpack/factory/FactoryPersonalSlot.java @@ -104,10 +104,13 @@ public GuiContainer getGuiContainer(PlayerSave player, IInventory[] inventories, ContainerPersonalSlot container = (ContainerPersonalSlot) getContainer(player, inventories, entityPlayer); GuiBackpack guiBackpack = new GuiBackpack(container); + int inventoryStart = container.getBoundary(Boundaries.INVENTORY); + int hotbarEnd = container.getBoundary(Boundaries.HOTBAR_END); GuiSlot guiSlot; for (int i = 0; i < container.inventorySlots.size(); i++) { Slot slot = (Slot) container.inventorySlots.get(i); - guiSlot = new GuiSlot(slot.xDisplayPosition - 1, slot.yDisplayPosition - 1); + int yOffset = (i >= inventoryStart && i < hotbarEnd) ? 44 : 0; + guiSlot = new GuiSlot(slot.xDisplayPosition - 1, slot.yDisplayPosition - 1, 18, 18, yOffset); guiBackpack.addSubPart(guiSlot); } diff --git a/src/main/java/de/eydamos/backpack/factory/FactoryWorkbenchBackpack.java b/src/main/java/de/eydamos/backpack/factory/FactoryWorkbenchBackpack.java index 7b6169a9..9c69ae6a 100644 --- a/src/main/java/de/eydamos/backpack/factory/FactoryWorkbenchBackpack.java +++ b/src/main/java/de/eydamos/backpack/factory/FactoryWorkbenchBackpack.java @@ -165,13 +165,16 @@ public GuiContainer getGuiContainer(BackpackSave backpack, IInventory[] inventor ContainerAdvanced container = getContainer(backpack, inventories, entityPlayer); GuiWorkbenchBackpack guiBackpack = new GuiWorkbenchBackpack(container); + int inventoryStart = container.getBoundary(Boundaries.INVENTORY); + int hotbarEnd = container.getBoundary(Boundaries.HOTBAR_END); GuiSlot guiSlot; for (int i = 0; i < container.inventorySlots.size(); i++) { Slot slot = (Slot) container.inventorySlots.get(i); + int yOffset = (i >= inventoryStart && i < hotbarEnd) ? 44 : 0; if (i == 0) { - guiSlot = new GuiSlot(slot.xDisplayPosition - 5, slot.yDisplayPosition - 5, 26); + guiSlot = new GuiSlot(slot.xDisplayPosition - 5, slot.yDisplayPosition - 5, 26, 26, yOffset); } else { - guiSlot = new GuiSlot(slot.xDisplayPosition - 1, slot.yDisplayPosition - 1); + guiSlot = new GuiSlot(slot.xDisplayPosition - 1, slot.yDisplayPosition - 1, 18, 18, yOffset); } guiBackpack.addSubPart(guiSlot); } diff --git a/src/main/java/de/eydamos/guiadvanced/subpart/GuiSlot.java b/src/main/java/de/eydamos/guiadvanced/subpart/GuiSlot.java index 7189f5a8..4d5dfc28 100644 --- a/src/main/java/de/eydamos/guiadvanced/subpart/GuiSlot.java +++ b/src/main/java/de/eydamos/guiadvanced/subpart/GuiSlot.java @@ -14,6 +14,7 @@ public class GuiSlot implements AbstractGuiPart { protected int relativePositionY; protected int width; protected int height; + protected int textureYOffset; public GuiSlot(int posX, int posY) { this(posX, posY, 18, 18); @@ -24,8 +25,13 @@ public GuiSlot(int posX, int posY, int widthHeight) { } public GuiSlot(int posX, int posY, int width, int height) { + this(posX, posY, width, height, 0); + } + + public GuiSlot(int posX, int posY, int width, int height, int textureYOffset) { setWidth(width); setHeight(height); + this.textureYOffset = textureYOffset; relativePositionX = posX; relativePositionY = posY; } @@ -54,27 +60,28 @@ public void setHeight(int value) { public void draw(Minecraft mc, int mouseX, int mouseY, float something) { Rectangle rectangle = new Rectangle(1, 1); rectangle.startDrawing(); + int yOffset = textureYOffset; // draw upper left corner - rectangle.setBackgroundPosition(201, 0); + rectangle.setBackgroundPosition(201, yOffset); rectangle.addBoxVertices(xPosition, yPosition); // draw upper right corner - rectangle.setBackgroundPosition(218, 0); + rectangle.setBackgroundPosition(218, yOffset); rectangle.addBoxVertices(xPosition + width - 1, yPosition); // draw lower left corner - rectangle.setBackgroundPosition(201, 17); + rectangle.setBackgroundPosition(201, 17 + yOffset); rectangle.addBoxVertices(xPosition, yPosition + height - 1); // draw lower right corner - rectangle.setBackgroundPosition(218, 17); + rectangle.setBackgroundPosition(218, 17 + yOffset); rectangle.addBoxVertices(xPosition + width - 1, yPosition + height - 1); // borders top/bottom rectangle.setWidth(width - 2); rectangle.setBackgroundRepeat(BackgroundRepeat.REPEAT_X); // draw top border - rectangle.setBackgroundPosition(202, 0); + rectangle.setBackgroundPosition(202, yOffset); rectangle.addBoxVertices(xPosition + 1, yPosition); // draw bottom border - rectangle.setBackgroundPosition(202, 17); + rectangle.setBackgroundPosition(202, 17 + yOffset); rectangle.addBoxVertices(xPosition + 1, yPosition + height - 1); // borders left/right @@ -82,10 +89,10 @@ public void draw(Minecraft mc, int mouseX, int mouseY, float something) { rectangle.setHeight(height - 2); rectangle.setBackgroundRepeat(BackgroundRepeat.REPEAT_Y); // draw left border - rectangle.setBackgroundPosition(201, 1); + rectangle.setBackgroundPosition(201, 1 + yOffset); rectangle.addBoxVertices(xPosition, yPosition + 1); // draw right border - rectangle.setBackgroundPosition(218, 1); + rectangle.setBackgroundPosition(218, 1 + yOffset); rectangle.addBoxVertices(xPosition + width - 1, yPosition + 1); // draw background @@ -93,7 +100,7 @@ public void draw(Minecraft mc, int mouseX, int mouseY, float something) { rectangle.setHeight(height - 2); rectangle.setBackgroundSize(14, 14); rectangle.setBackgroundRepeat(BackgroundRepeat.REPEAT); - rectangle.setBackgroundPosition(202, 1); + rectangle.setBackgroundPosition(202, 1 + yOffset); rectangle.addBoxVertices(xPosition + 1, yPosition + 1); rectangle.performDrawing(); } diff --git a/src/main/resources/assets/backpack/textures/gui/guiCombined.png b/src/main/resources/assets/backpack/textures/gui/guiCombined.png index a1961f90e7836f27a6e1526083857910cd59ac8a..b8dda770a51b6b57abe8fd1c85b0358f279b1ac6 100644 GIT binary patch literal 2008 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