From bfd93753eb3d78673d0f9df17b215e5bab788a2b Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Wed, 31 May 2023 21:25:04 +0100 Subject: [PATCH] Move some gui elements to sprites --- .../elements/AbstractConfigPopupElement.java | 3 +- .../builder/slot/elements/ButtonElement.java | 4 +- .../slot/elements/CheckBoxElement.java | 11 +-- .../slot/elements/ConfigFluidElement.java | 2 +- .../slot/elements/ConfigSlotElement.java | 2 +- .../builder/slot/elements/ElementBase.java | 18 ++--- .../elements/FluidConfigPopupElement.java | 2 +- .../slot/elements/GuiSpriteAtlasHolder.java | 47 ++++++++++++ .../gui/builder/slot/elements/GuiSprites.java | 71 ++++++++++++++++++ .../builder/slot/elements/ParentElement.java | 3 +- .../slot/elements/SlotConfigPopupElement.java | 2 +- .../gui/builder/slot/elements/SlotType.java | 18 +++-- .../gui/builder/slot/elements/Sprite.java | 64 ---------------- .../client/mixin/MixinMinecraftClient.java | 58 ++++++++++++++ .../assets/reborncore/atlases/gui.json | 9 +++ .../resources/reborncore.client.mixins.json | 3 +- .../reborncore/textures/gui/elements.png | Bin 11802 -> 0 bytes .../button_hover_overlay_slot_normal.png | Bin 0 -> 116 bytes .../gui/sprites/button_slot_normal.png | Bin 0 -> 99 bytes .../textures/gui/sprites/charge_slot_icon.png | Bin 0 -> 281 bytes .../textures/gui/sprites/configure_icon.png | Bin 0 -> 397 bytes .../gui/sprites/dark_check_box_normal.png | Bin 0 -> 101 bytes .../gui/sprites/dark_check_box_ticked.png | Bin 0 -> 169 bytes .../gui/sprites/discharge_slot_icon.png | Bin 0 -> 294 bytes .../textures/gui/sprites/energy_bar.png | Bin 0 -> 845 bytes .../gui/sprites/energy_bar_background.png | Bin 0 -> 113 bytes .../textures/gui/sprites/energy_icon.png | Bin 0 -> 219 bytes .../gui/sprites/energy_icon_empty.png | Bin 0 -> 237 bytes .../gui/sprites/exit_button_hovered.png | Bin 0 -> 155 bytes .../gui/sprites/exit_button_normal.png | Bin 0 -> 135 bytes .../textures/gui/sprites/fake_slot.png | Bin 0 -> 103 bytes .../textures/gui/sprites/jei_icon.png | Bin 0 -> 383 bytes .../textures/gui/sprites/left_tab.png | Bin 0 -> 139 bytes .../gui/sprites/left_tab_selected.png | Bin 0 -> 144 bytes .../gui/sprites/light_check_box_normal.png | Bin 0 -> 100 bytes .../gui/sprites/light_check_box_ticked.png | Bin 0 -> 166 bytes .../gui/sprites/slot_config_popup.png | Bin 0 -> 350 bytes .../textures/gui/sprites/slot_normal.png | Bin 0 -> 100 bytes .../textures/gui/sprites/top_energy_bar.png | Bin 0 -> 749 bytes .../gui/sprites/top_energy_bar_background.png | Bin 0 -> 483 bytes .../textures/gui/sprites/upgrade_icon.png | Bin 0 -> 436 bytes 41 files changed, 221 insertions(+), 96 deletions(-) create mode 100644 RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/GuiSpriteAtlasHolder.java create mode 100644 RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/GuiSprites.java delete mode 100644 RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/Sprite.java create mode 100644 RebornCore/src/client/java/reborncore/client/mixin/MixinMinecraftClient.java create mode 100644 RebornCore/src/client/resources/assets/reborncore/atlases/gui.json delete mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/elements.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/button_hover_overlay_slot_normal.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/button_slot_normal.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/charge_slot_icon.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/configure_icon.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/dark_check_box_normal.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/dark_check_box_ticked.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/discharge_slot_icon.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/energy_bar.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/energy_bar_background.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/energy_icon.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/energy_icon_empty.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/exit_button_hovered.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/exit_button_normal.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/fake_slot.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/jei_icon.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/left_tab.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/left_tab_selected.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/light_check_box_normal.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/light_check_box_ticked.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/slot_config_popup.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/slot_normal.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/top_energy_bar.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/top_energy_bar_background.png create mode 100644 RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/upgrade_icon.png diff --git a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/AbstractConfigPopupElement.java b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/AbstractConfigPopupElement.java index eb9734f09..9e6e93316 100644 --- a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/AbstractConfigPopupElement.java +++ b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/AbstractConfigPopupElement.java @@ -33,6 +33,7 @@ import net.minecraft.client.render.Tessellator; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.block.BlockRenderManager; import net.minecraft.client.render.model.BakedModel; +import net.minecraft.client.util.SpriteIdentifier; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.util.math.Direction; import net.minecraft.util.math.RotationAxis; @@ -44,7 +45,7 @@ import reborncore.common.util.MachineFacing; public abstract class AbstractConfigPopupElement extends ElementBase { public boolean filter = false; - public AbstractConfigPopupElement(int x, int y, Sprite sprite) { + public AbstractConfigPopupElement(int x, int y, SpriteIdentifier sprite) { super(x, y, sprite); } diff --git a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/ButtonElement.java b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/ButtonElement.java index 60b4e31be..9a3dc4e27 100644 --- a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/ButtonElement.java +++ b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/ButtonElement.java @@ -28,10 +28,10 @@ import net.minecraft.client.gui.DrawContext; import reborncore.client.gui.builder.GuiBase; public class ButtonElement extends ElementBase { - private final Sprite.Button buttonSprite; + private final GuiSprites.Button buttonSprite; private final Runnable onClicked; - public ButtonElement(int x, int y, Sprite.Button buttonSprite, Runnable onClicked) { + public ButtonElement(int x, int y, GuiSprites.Button buttonSprite, Runnable onClicked) { super(x, y, buttonSprite.normal()); this.buttonSprite = buttonSprite; this.onClicked = onClicked; diff --git a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/CheckBoxElement.java b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/CheckBoxElement.java index 7c64647a0..121973488 100644 --- a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/CheckBoxElement.java +++ b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/CheckBoxElement.java @@ -25,6 +25,7 @@ package reborncore.client.gui.builder.slot.elements; import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.util.SpriteIdentifier; import net.minecraft.text.Text; import reborncore.client.gui.builder.GuiBase; @@ -34,13 +35,13 @@ public class CheckBoxElement extends ElementBase { private final Text label; private final Predicate ticked; private final Runnable onChange; - private final Sprite.CheckBox checkBoxSprite; + private final GuiSprites.CheckBox checkBoxSprite; public CheckBoxElement(Text label, int x, int y, Predicate ticked, Runnable onChange) { - super(x, y, Sprite.LIGHT_CHECK_BOX.normal()); - this.checkBoxSprite = Sprite.LIGHT_CHECK_BOX; + super(x, y, GuiSprites.LIGHT_CHECK_BOX.normal()); + this.checkBoxSprite = GuiSprites.LIGHT_CHECK_BOX; this.label = label; this.ticked = ticked; this.onChange = onChange; @@ -64,12 +65,12 @@ public class CheckBoxElement extends ElementBase { @Override public void draw(DrawContext drawContext, GuiBase gui, int mouseX, int mouseY) { - Sprite sprite = checkBoxSprite.normal(); + SpriteIdentifier sprite = checkBoxSprite.normal(); if (ticked.test(this)) { sprite = checkBoxSprite.ticked(); } drawSprite(drawContext, gui, sprite, getX(), getY() ); - drawText(drawContext, gui, label, getX() + checkBoxSprite.normal().width() + 5, ((getY() + getHeight() / 2) - (gui.getTextRenderer().fontHeight / 2)), 0xFFFFFFFF); + drawText(drawContext, gui, label, getX() + getWidth() + 5, ((getY() + getHeight() / 2) - (gui.getTextRenderer().fontHeight / 2)), 0xFFFFFFFF); } } diff --git a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/ConfigFluidElement.java b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/ConfigFluidElement.java index 86c7146bc..56ad00037 100644 --- a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/ConfigFluidElement.java +++ b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/ConfigFluidElement.java @@ -38,7 +38,7 @@ public class ConfigFluidElement extends ParentElement { FluidConfigPopupElement popupElement; elements.add(popupElement = new FluidConfigPopupElement(x - 22, y - 22, this)); - elements.add(new ButtonElement(x + 37, y - 25, Sprite.EXIT_BUTTON, gui::closeSelectedTab)); + elements.add(new ButtonElement(x + 37, y - 25, GuiSprites.EXIT_BUTTON, gui::closeSelectedTab)); elements.add(new CheckBoxElement(Text.translatable("reborncore.gui.fluidconfig.pullin"), x - 26, y + 42, checkBoxElement -> gui.getMachine().fluidConfiguration.autoInput(), diff --git a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/ConfigSlotElement.java b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/ConfigSlotElement.java index 196a31502..c323afd35 100644 --- a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/ConfigSlotElement.java +++ b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/ConfigSlotElement.java @@ -66,7 +66,7 @@ public class ConfigSlotElement extends ParentElement { elements.add(popupElement = new SlotConfigPopupElement(this.id, x - 22, y - 22, inputEnabled)); - elements.add(new ButtonElement(x + 37, y - 25, Sprite.EXIT_BUTTON, closeConfig)); + elements.add(new ButtonElement(x + 37, y - 25, GuiSprites.EXIT_BUTTON, closeConfig)); if (inputEnabled) { elements.add(new CheckBoxElement(Text.translatable("reborncore.gui.slotconfig.autoinput"), x - 26, y + 42, diff --git a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/ElementBase.java b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/ElementBase.java index f1e7dff6d..5035e4562 100644 --- a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/ElementBase.java +++ b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/ElementBase.java @@ -26,25 +26,23 @@ package reborncore.client.gui.builder.slot.elements; import net.minecraft.client.gui.DrawContext; import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.util.SpriteIdentifier; import net.minecraft.text.Text; -import net.minecraft.util.Identifier; import reborncore.client.gui.builder.GuiBase; import reborncore.client.gui.guibuilder.GuiBuilder; public class ElementBase { private final int x; private final int y; - private Sprite sprite; + private SpriteIdentifier sprite; - public static final Identifier MECH_ELEMENTS = new Identifier("reborncore", "textures/gui/elements.png"); - - public ElementBase(int x, int y, Sprite sprite) { + public ElementBase(int x, int y, SpriteIdentifier sprite) { this.sprite = sprite; this.x = x; this.y = y; } - protected void setSprite(Sprite sprite) { + protected void setSprite(SpriteIdentifier sprite) { this.sprite = sprite; } @@ -61,11 +59,11 @@ public class ElementBase { } public int getWidth() { - return sprite.width(); + return sprite.getSprite().getContents().getWidth(); } public int getHeight() { - return sprite.height(); + return sprite.getSprite().getContents().getHeight(); } public boolean onClick(GuiBase gui, double mouseX, double mouseY) { @@ -94,8 +92,8 @@ public class ElementBase { drawContext.drawText(gui.getTextRenderer(), text, x, y, color, false); } - public void drawSprite(DrawContext drawContext, GuiBase gui, Sprite sprite, int x, int y) { - drawContext.drawTexture(sprite.textureLocation(), x + gui.getGuiLeft(), y + gui.getGuiTop(), sprite.x(), sprite.y(), sprite.width(), sprite.height()); + public void drawSprite(DrawContext drawContext, GuiBase gui, SpriteIdentifier sprite, int x, int y) { + drawContext.drawSprite(x + gui.getGuiLeft(), y + gui.getGuiTop(), 0, getWidth(), getHeight(), sprite.getSprite()); } public void drawDefaultBackground(DrawContext drawContext, Screen gui, int x, int y, int width, int height) { diff --git a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/FluidConfigPopupElement.java b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/FluidConfigPopupElement.java index 0b0319d9d..a53d26422 100644 --- a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/FluidConfigPopupElement.java +++ b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/FluidConfigPopupElement.java @@ -38,7 +38,7 @@ public class FluidConfigPopupElement extends AbstractConfigPopupElement { ConfigFluidElement fluidElement; public FluidConfigPopupElement(int x, int y, ConfigFluidElement fluidElement) { - super(x, y, Sprite.SLOT_CONFIG_POPUP); + super(x, y, GuiSprites.SLOT_CONFIG_POPUP); this.fluidElement = fluidElement; } diff --git a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/GuiSpriteAtlasHolder.java b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/GuiSpriteAtlasHolder.java new file mode 100644 index 000000000..017808b22 --- /dev/null +++ b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/GuiSpriteAtlasHolder.java @@ -0,0 +1,47 @@ +/* + * This file is part of RebornCore, licensed under the MIT License (MIT). + * + * Copyright (c) 2023 TeamReborn + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package reborncore.client.gui.builder.slot.elements; + +import net.minecraft.client.texture.Sprite; +import net.minecraft.client.texture.SpriteAtlasHolder; +import net.minecraft.client.texture.TextureManager; +import net.minecraft.util.Identifier; +import org.jetbrains.annotations.Nullable; + +public class GuiSpriteAtlasHolder extends SpriteAtlasHolder { + @Nullable + public static GuiSpriteAtlasHolder INSTANCE; + + public static final Identifier ATLAS_ID = new Identifier("reborncore", "textures/atlas/gui.png"); + + public GuiSpriteAtlasHolder(TextureManager textureManager) { + super(textureManager, ATLAS_ID, new Identifier("reborncore", "gui")); + } + + @Override + public Sprite getSprite(Identifier objectId) { + return super.getSprite(objectId); + } +} diff --git a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/GuiSprites.java b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/GuiSprites.java new file mode 100644 index 000000000..bb2eb559d --- /dev/null +++ b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/GuiSprites.java @@ -0,0 +1,71 @@ +/* + * This file is part of RebornCore, licensed under the MIT License (MIT). + * + * Copyright (c) 2023 TeamReborn + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package reborncore.client.gui.builder.slot.elements; + +import net.minecraft.client.util.SpriteIdentifier; +import net.minecraft.util.Identifier; + +public final class GuiSprites { + public static final SpriteIdentifier SLOT_NORMAL = create("slot_normal"); + public static final SpriteIdentifier CHARGE_SLOT_ICON = create("charge_slot_icon"); + public static final SpriteIdentifier DISCHARGE_SLOT_ICON = create("discharge_slot_icon"); + public static final SpriteIdentifier ENERGY_BAR = create("energy_bar"); + public static final SpriteIdentifier ENERGY_BAR_BACKGROUND = create("energy_bar_background"); + public static final SpriteIdentifier TOP_ENERGY_BAR = create("top_energy_bar"); + public static final SpriteIdentifier TOP_ENERGY_BAR_BACKGROUND = create("top_energy_bar_background"); + public static final SpriteIdentifier LEFT_TAB = create("left_tab"); + public static final SpriteIdentifier LEFT_TAB_SELECTED = create("left_tab_selected"); + public static final SpriteIdentifier CONFIGURE_ICON = create("configure_icon"); + public static final SpriteIdentifier UPGRADE_ICON = create("upgrade_icon"); + public static final SpriteIdentifier ENERGY_ICON = create("energy_icon"); + public static final SpriteIdentifier ENERGY_ICON_EMPTY = create("energy_icon_empty"); + public static final SpriteIdentifier JEI_ICON = create("jei_icon"); + public static final SpriteIdentifier BUTTON_SLOT_NORMAL = create("button_slot_normal"); + public static final SpriteIdentifier FAKE_SLOT = create("fake_slot"); + public static final SpriteIdentifier BUTTON_HOVER_OVERLAY_SLOT_NORMAL = create("button_hover_overlay_slot_normal"); + public static final SpriteIdentifier SLOT_CONFIG_POPUP = create("slot_config_popup"); + + public static final SpriteIdentifier EXIT_BUTTON_NORMAL = create("exit_button_normal"); + public static final SpriteIdentifier EXIT_BUTTON_HOVERED = create("exit_button_hovered"); + public static final Button EXIT_BUTTON = new Button(EXIT_BUTTON_NORMAL, EXIT_BUTTON_HOVERED); + + public static final SpriteIdentifier DARK_CHECK_BOX_NORMAL = create("dark_check_box_normal"); + public static final SpriteIdentifier DARK_CHECK_BOX_TICKED = create("dark_check_box_ticked"); + public static final CheckBox DARK_CHECK_BOX = new CheckBox(DARK_CHECK_BOX_NORMAL, DARK_CHECK_BOX_TICKED); + + public static final SpriteIdentifier LIGHT_CHECK_BOX_NORMAL = create("light_check_box_normal"); + public static final SpriteIdentifier LIGHT_CHECK_BOX_TICKED = create("light_check_box_ticked"); + public static final CheckBox LIGHT_CHECK_BOX = new CheckBox(LIGHT_CHECK_BOX_NORMAL, LIGHT_CHECK_BOX_TICKED); + + private static SpriteIdentifier create(String name) { + return new SpriteIdentifier(GuiSpriteAtlasHolder.ATLAS_ID, new Identifier("reborncore", name)); + } + + record Button(SpriteIdentifier normal, SpriteIdentifier hovered) { + } + + record CheckBox(SpriteIdentifier normal, SpriteIdentifier ticked) { + } +} diff --git a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/ParentElement.java b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/ParentElement.java index b6cadbce8..8e92d33e1 100644 --- a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/ParentElement.java +++ b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/ParentElement.java @@ -26,6 +26,7 @@ package reborncore.client.gui.builder.slot.elements; import com.google.common.collect.Lists; import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.util.SpriteIdentifier; import reborncore.client.gui.builder.GuiBase; import java.util.ArrayList; @@ -34,7 +35,7 @@ import java.util.List; public abstract class ParentElement extends ElementBase { protected final List elements = new ArrayList<>(); - public ParentElement(int x, int y, Sprite sprite) { + public ParentElement(int x, int y, SpriteIdentifier sprite) { super(x, y, sprite); } diff --git a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/SlotConfigPopupElement.java b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/SlotConfigPopupElement.java index 907125e7f..a5ea5f402 100644 --- a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/SlotConfigPopupElement.java +++ b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/SlotConfigPopupElement.java @@ -39,7 +39,7 @@ public class SlotConfigPopupElement extends AbstractConfigPopupElement { private final boolean allowInput; public SlotConfigPopupElement(int slotId, int x, int y, boolean allowInput) { - super(x, y, Sprite.SLOT_CONFIG_POPUP); + super(x, y, GuiSprites.SLOT_CONFIG_POPUP); this.id = slotId; this.allowInput = allowInput; } diff --git a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/SlotType.java b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/SlotType.java index 64eb4ebbc..a4ce4b5d0 100644 --- a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/SlotType.java +++ b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/SlotType.java @@ -24,16 +24,18 @@ package reborncore.client.gui.builder.slot.elements; +import net.minecraft.client.util.SpriteIdentifier; + public enum SlotType { - NORMAL(1, 1, Sprite.SLOT_NORMAL, Sprite.BUTTON_SLOT_NORMAL, Sprite.BUTTON_HOVER_OVERLAY_SLOT_NORMAL); + NORMAL(1, 1, GuiSprites.SLOT_NORMAL, GuiSprites.BUTTON_SLOT_NORMAL, GuiSprites.BUTTON_HOVER_OVERLAY_SLOT_NORMAL); int slotOffsetX; int slotOffsetY; - Sprite sprite; - Sprite buttonSprite; - Sprite buttonHoverOverlay; + SpriteIdentifier sprite; + SpriteIdentifier buttonSprite; + SpriteIdentifier buttonHoverOverlay; - SlotType(int slotOffsetX, int slotOffsetY, Sprite sprite, Sprite buttonSprite, Sprite buttonHoverOverlay) { + SlotType(int slotOffsetX, int slotOffsetY, SpriteIdentifier sprite, SpriteIdentifier buttonSprite, SpriteIdentifier buttonHoverOverlay) { this.slotOffsetX = slotOffsetX; this.slotOffsetY = slotOffsetY; this.sprite = sprite; @@ -41,15 +43,15 @@ public enum SlotType { this.buttonHoverOverlay = buttonHoverOverlay; } - public Sprite getSprite() { + public SpriteIdentifier getSprite() { return sprite; } - public Sprite getButtonSprite() { + public SpriteIdentifier getButtonSprite() { return buttonSprite; } - public Sprite getButtonHoverOverlay() { + public SpriteIdentifier getButtonHoverOverlay() { return buttonHoverOverlay; } } diff --git a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/Sprite.java b/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/Sprite.java deleted file mode 100644 index 7d58371f9..000000000 --- a/RebornCore/src/client/java/reborncore/client/gui/builder/slot/elements/Sprite.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * This file is part of RebornCore, licensed under the MIT License (MIT). - * - * Copyright (c) 2021 TeamReborn - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package reborncore.client.gui.builder.slot.elements; - -import net.minecraft.util.Identifier; - -public record Sprite(Identifier textureLocation, int x, int y, int width, int height) { - public static final Sprite EMPTY = new Sprite(ElementBase.MECH_ELEMENTS, 0, 0, 0, 0); - public static final Sprite SLOT_NORMAL = new Sprite(ElementBase.MECH_ELEMENTS, 0, 0, 18, 18); - public static final Sprite CHARGE_SLOT_ICON = new Sprite(ElementBase.MECH_ELEMENTS, 18, 0, 18, 18); - public static final Sprite DISCHARGE_SLOT_ICON = new Sprite(ElementBase.MECH_ELEMENTS, 36, 0, 18, 18); - public static final Sprite ENERGY_BAR = new Sprite(ElementBase.MECH_ELEMENTS, 0, 18, 12, 40); - public static final Sprite ENERGY_BAR_BACKGROUND = new Sprite(ElementBase.MECH_ELEMENTS, 12, 18, 14, 42); - public static final Sprite TOP_ENERGY_BAR = new Sprite(ElementBase.MECH_ELEMENTS, 0, 215, 167, 2); - public static final Sprite TOP_ENERGY_BAR_BACKGROUND = new Sprite(ElementBase.MECH_ELEMENTS, 0, 217, 169, 3); - public static final Sprite LEFT_TAB = new Sprite(ElementBase.MECH_ELEMENTS, 0, 86, 23, 26); - public static final Sprite LEFT_TAB_SELECTED = new Sprite(ElementBase.MECH_ELEMENTS, 0, 60, 29, 26); - public static final Sprite CONFIGURE_ICON = new Sprite(ElementBase.MECH_ELEMENTS, 26, 18, 16, 16); - public static final Sprite UPGRADE_ICON = new Sprite(ElementBase.MECH_ELEMENTS, 26, 34, 16, 16); - public static final Sprite ENERGY_ICON = new Sprite(ElementBase.MECH_ELEMENTS, 46, 19, 9, 13); - public static final Sprite ENERGY_ICON_EMPTY = new Sprite(ElementBase.MECH_ELEMENTS, 62, 19, 9, 13); - public static final Sprite JEI_ICON = new Sprite(ElementBase.MECH_ELEMENTS, 42, 34, 16, 16); - public static final Sprite BUTTON_SLOT_NORMAL = new Sprite(ElementBase.MECH_ELEMENTS, 54, 0, 18, 18); - public static final Sprite FAKE_SLOT = new Sprite(ElementBase.MECH_ELEMENTS, 72, 0, 18, 18); - public static final Sprite BUTTON_HOVER_OVERLAY_SLOT_NORMAL = new Sprite(ElementBase.MECH_ELEMENTS, 90, 0, 18, 18); - public static final Sprite SLOT_CONFIG_POPUP = new Sprite(ElementBase.MECH_ELEMENTS, 29, 60, 62, 62); - public static final Sprite.Button EXIT_BUTTON = new Sprite.Button(new Sprite(ElementBase.MECH_ELEMENTS, 26, 122, 13, 13), new Sprite(ElementBase.MECH_ELEMENTS, 39, 122, 13, 13)); - public static final Sprite.CheckBox DARK_CHECK_BOX = new Sprite.CheckBox(new Sprite(ElementBase.MECH_ELEMENTS, 74, 18, 13, 13), new Sprite(ElementBase.MECH_ELEMENTS, 87, 18, 16, 13)); - public static final Sprite.CheckBox LIGHT_CHECK_BOX = new Sprite.CheckBox(new Sprite(ElementBase.MECH_ELEMENTS, 74, 31, 13, 13), new Sprite(ElementBase.MECH_ELEMENTS, 87, 31, 16, 13)); - - public Sprite { - assert x >= 0 && y >= 0 && width >= 0 && height >= 0; - } - - public record Button(Sprite normal, - Sprite hovered) { - } - - public record CheckBox(Sprite normal, - Sprite ticked) { - } -} diff --git a/RebornCore/src/client/java/reborncore/client/mixin/MixinMinecraftClient.java b/RebornCore/src/client/java/reborncore/client/mixin/MixinMinecraftClient.java new file mode 100644 index 000000000..0537d468b --- /dev/null +++ b/RebornCore/src/client/java/reborncore/client/mixin/MixinMinecraftClient.java @@ -0,0 +1,58 @@ +/* + * This file is part of RebornCore, licensed under the MIT License (MIT). + * + * Copyright (c) 2023 TeamReborn + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package reborncore.client.mixin; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.RunArgs; +import net.minecraft.client.texture.TextureManager; +import net.minecraft.resource.ReloadableResourceManagerImpl; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import reborncore.client.gui.builder.slot.elements.GuiSpriteAtlasHolder; + +@Mixin(MinecraftClient.class) +public class MixinMinecraftClient { + @Shadow + @Final + private TextureManager textureManager; + @Shadow + @Final + private ReloadableResourceManagerImpl resourceManager; + + @Inject(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/texture/PaintingManager;(Lnet/minecraft/client/texture/TextureManager;)V")) + private void init(RunArgs args, CallbackInfo ci) { + GuiSpriteAtlasHolder.INSTANCE = new GuiSpriteAtlasHolder(this.textureManager); + this.resourceManager.registerReloader(GuiSpriteAtlasHolder.INSTANCE ); + } + + @Inject(method = "close", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/texture/PaintingManager;close()V")) + private void close(CallbackInfo ci) { + GuiSpriteAtlasHolder.INSTANCE.close(); + } +} diff --git a/RebornCore/src/client/resources/assets/reborncore/atlases/gui.json b/RebornCore/src/client/resources/assets/reborncore/atlases/gui.json new file mode 100644 index 000000000..d382b3869 --- /dev/null +++ b/RebornCore/src/client/resources/assets/reborncore/atlases/gui.json @@ -0,0 +1,9 @@ +{ + "sources": [ + { + "type": "directory", + "source": "gui/sprites", + "prefix": "" + } + ] +} \ No newline at end of file diff --git a/RebornCore/src/client/resources/reborncore.client.mixins.json b/RebornCore/src/client/resources/reborncore.client.mixins.json index e47a98e7c..125fa557a 100644 --- a/RebornCore/src/client/resources/reborncore.client.mixins.json +++ b/RebornCore/src/client/resources/reborncore.client.mixins.json @@ -5,7 +5,8 @@ "client": [ "MixinDebugRenderer", "MixinGameRenderer", - "MixinKeyBinding" + "MixinKeyBinding", + "MixinMinecraftClient" ], "injectors": { "defaultRequire": 1 diff --git a/RebornCore/src/main/resources/assets/reborncore/textures/gui/elements.png b/RebornCore/src/main/resources/assets/reborncore/textures/gui/elements.png deleted file mode 100644 index 658a48dd7aa66f498931d5d3bc39ad53ea1ebe45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11802 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 AiU0rr diff --git a/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/button_hover_overlay_slot_normal.png b/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/button_hover_overlay_slot_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..c1efa5975ef7823a3a6df8fea414d8b4aa70eac9 GIT binary patch literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|Yfl%)kcznEi24`#mp{qw*F4l4 zJm18yK|=NId(A_Pp3B{Ml^Wc6m3lz9eYfKRC(a`aSgMc7WHK@ETo!cvwDvY5&=>|! LS3j3^P6uJ^OrX#@OT+A2xi6e^+}(;1JuRf>FVdQ&MBb@0I~2JT>t<8 literal 0 HcmV?d00001 diff --git a/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/charge_slot_icon.png b/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/charge_slot_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..649ad2c2297445aaf6035a76a36bddff3929d199 GIT binary patch literal 281 zcmV+!0p|XRP)* z7`fn;o!$RaTwMRr#YqCMY;FG^1sZY?h_7*TlV=#nB_KoAa&rD(!NKu=Kajm0$VOL( z7u>P8|Gyik38Z-`(2zAi3^D{{@H`+JT|HLt9B2qg(`}$vK;GE~WN!rGD^UJEAbT?* zmx00rqzR<(22j&kpbJ1Q1L65Vmn;V2YBsk2ZS3s-mk{eR5CFLhWWY3_#ugw(mnRy4 zVyho$z;vKt4U`yk0BF!EXc!S4$k+hLMWC<%MSm|PE?NXNpbLo0fq{%JPc#6 literal 0 HcmV?d00001 diff --git a/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/configure_icon.png b/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/configure_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6c63c298d722610ceb9fd882147a4ebaf001c274 GIT binary patch literal 397 zcmV;80doF{P)&XLojX_moQi z3DY!T7zT>`Ta3qJOeT|Du&(RSG%d$5W-u7Miq2*;^!xo>#noyB&-0%5dc6)7YBrm% z0t72EsoieF_kF~1j3|n*Ua!&X^@JM^hwqaWYPFgq?Du=5X^JFC7dbQAP557ZZ~mPj2BF&Q*^ssslw#r@tCW|xlrJIK8r91Tdh{V#gu^K zIAWP1ysLNity-CEJ z{VpwWHhe3_=Rj-RJMHgwJDg4@5upQGrtrs2aL?R7Ka1ihX4`h|BT-TN{QUp@x%fCZew=4W xdUJpO{EVE;Ov_cAE$*g@*-T4S1)4>87_>_6zsV1q6#>-8;OXk;vd$@?2>`!q8|MH3 literal 0 HcmV?d00001 diff --git a/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/dark_check_box_ticked.png b/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/dark_check_box_ticked.png new file mode 100644 index 0000000000000000000000000000000000000000..184a16b80cc3f6eef032412452d241e67fa20ca6 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^0w6XA8<1SE`<)7qD)4l145^5lI_WLv0R0oneEP)WvMAJJs(&{$5CY!}D2)T0BNh*tNDeRH1h3xbs|JPg%U9f`ODvNuh-ZAu0MhGUYE6?gR%jHk#O-kS sJ;+_MUXoSQ-ktRPTS@^7e3Spw6;pJ3qy~ARX#fBK07*qoM6N<$f>@q?yZ`_I literal 0 HcmV?d00001 diff --git a/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/energy_bar.png b/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/energy_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..fc1cc2391a5e152f8d655e9404d8bb58750dc2f0 GIT binary patch literal 845 zcmV-T1G4;yP)0009NNklpb{D)T|~sf6wN}R zAc7DT6u-)G{q}!vy)Wk8nc1^u)~xxT@@8RS`q$jt^zZrkDWCEGSrPx1_a}*8#V@^J zCBWn3*z@?WTl_Gf3ivO>#_SuDB}MT>r^f` zz@PCerQ3P%Xe1iH#+Q56Vs!4rUZUiW$DT0JB=&y;^l2|lfWDZ-*~z39dAO4JT;jV8 zc%i*}D-tIXDB@G+RO0iAO}^OxN0Y;%7)cRhe^26%02C>v+SAyrxj{7o6q_$6kW^p- z85N-GT{Fs607dXS(>RkD#p5v``yCmND<$`-fP*d3sU42b6xdAz@ugTjoCn9TGzyMn z(u4Wo(m$pU3vqF7DlonR^fcgW0_?rYs{4UZIu=8TeI0-QWRP0nz7}gzNGPF*5|#wU z`D%Q;_a)EOuPv$5$;qG+)qqKhP4W0;8`(R5+bH@x zH2Z8cntqqqTfwt01x)i@DcBP;l_0=76O*@C)KwMospN=EeN0(4ZfXxI;N4ic>E|MHzd*TVf?1#G!dhO zrpAT-pCph3u+N(KOZkrmIveA&3UFQH9EU0{uZbK%C?{s*FJx1!fB=#xndCO!eZ6*a z+~U(+3I%)Mi-vvH#G+x2HF9G8phMJLWG{ zG~MFNHC=GWIc~lyHJ-0@Z^ss!z2lJQU_R7fpuhv99?UK{SH>RrR(f~wsgxX`84RAT KelF{r5}E*3&mph? literal 0 HcmV?d00001 diff --git a/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/energy_icon.png b/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/energy_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..5c23ce7b2fb76e4dcfd48e4f07316202d5412adf GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^oFFy_8<4DKZ~;+^JY5_^D&mq84ltej^y#0wxHF@A z1J^D|i4WSh&Yb_hpJo1{!!4qKh zD-x^%9=a`9WE2zjomtg^EA2rLgHa~u1(7|D7x<>=9AD1BqQ)fJA{5l3ZN)J8qSw<6 TtDWbP0l+XkKG89&l literal 0 HcmV?d00001 diff --git a/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/energy_icon_empty.png b/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/energy_icon_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..6936878c87aac8570cb2cbdd2c72662916f04867 GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^oFFy_8<4DKZ~;+UJY5_^D&mq84lrHP(fPNydtrk} z@#p`2pFaH%b)7xqkNMQzq6_7|Mu)mMIYV^mzllYBqjcQXZEUCwfcWQ%ci$ao+xnrY2eCf zl$nqhAA0qFURKusy(T9A+F!r^Z+`qKqdF_=2BvaV)i+!YYK=AR<{WPtug!Y=$&SZD lTkBuAxY)7v9N{Gl4Au`k`VS`hYXIHP;OXk;vd$@?2>`l6VN?JB literal 0 HcmV?d00001 diff --git a/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/exit_button_hovered.png b/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/exit_button_hovered.png new file mode 100644 index 0000000000000000000000000000000000000000..90f626613d14094a6ec886e65abfb231a038bdb5 GIT binary patch literal 155 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2?+o-U3d6>-Ts%KqQ~-@X06K<{m} zH$ToZBwZo?81Csa9uQgaHVC9V9Uj)8?uyc zs+F|9sF^eCg0GwS;R`N2YVpDvx{VS?lEn8v`_CXDy*W5uHdY&G8-u5-pUXO@geCyr Cx;Rh( literal 0 HcmV?d00001 diff --git a/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/exit_button_normal.png b/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/exit_button_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..a9fdcebdab34a684682f5086dd55d73522544ab2 GIT binary patch literal 135 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2@co-U3d6>)2O8#x&iI9O!Q{>?eK z%#ed=Cy$YkT+QF$k4ZCUp3cf!x=Mb5nvtmUoTUN$ioZmXCL9n{IuXk?)!xvfzNKR3 hX5L*Ft+&kTViQtZy7zwJE)Af`44$rjF6*2UngAJREG+;4 literal 0 HcmV?d00001 diff --git a/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/fake_slot.png b/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/fake_slot.png new file mode 100644 index 0000000000000000000000000000000000000000..d040b464bee2c07e088cde46131ac3d91640c919 GIT binary patch literal 103 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|Jx>?MkcznE7cXD_^w*qcUH-0~ wO`=(7Pwnq-fz2EbfcP;8Kg<*8anxjE_*XHj(fr!Rzd)S~p00i_>zopr0LmgFIsgCw literal 0 HcmV?d00001 diff --git a/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/jei_icon.png b/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/jei_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1d853470429aac9387a4ada68ddf9132613bb8c8 GIT binary patch literal 383 zcmV-_0f7FAP)(6&mPGh3XC41Bq_F&R44mX6VD749q_wrp9}kBBGz{u0Hc0;Q=# zxy>Ni$Uv!QI`7g^ALidzypoBgv-F+V=?J+?l^7SWCR9+@JYhy}HBRnbdr>Z6O^6^_ zOMAkM=O^9Ip ze3~rE`-6~o2gn;ER0<>iw#=JQ!P%r|*$<&8BKK6_O^6^~9YbiV8^IDIjNqnCQG&1$ zhOjO|So>sEgw`^66C(JMu>a*>mtedsBKKTC_HhBaIS1{|K)PWdbu){pT9!9)=lT4m di97qJ`2ZUXu*B4Bq&@%u002ovPDHLkV1m?%tz7^B literal 0 HcmV?d00001 diff --git a/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/left_tab.png b/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/left_tab.png new file mode 100644 index 0000000000000000000000000000000000000000..67563def9d20f126365cabf1c7e3e8c7b9b8e707 GIT binary patch literal 139 zcmeAS@N?(olHy`uVBq!ia0vp^;y^6L!3HE_wj8emQbC?Bjv*CsZ_l3QWH8`xIVh5J z{99@?Czs;>y_tF1XB=D7v$KD(8{R#0s+N1V`npxAeLrf?B*`G)rwW@7t}b3@D{OZ3 fM^@X&g-9*kvuyf`&fm2_(-}Nn{an^LB{Ts5bc`^M literal 0 HcmV?d00001 diff --git a/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/left_tab_selected.png b/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/left_tab_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..75d7d2bead5f14b9eef1c1f46de3858ffb3d33aa GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^vOp}w!3HF~r-g3^QsJI1jv*CsZ_j%3H5l+PUyLyd zKeyGPPh-la)LomFMt)J=+mX(GHzH=Yep!xnL}+}-^b-A&+9gI^X(DGeW(Aro&TzZf rVz$OP?a|qc!>`--3$FmuDaq=^X8(77mhVpoTEXDy>gTe~DWM4frOh;o literal 0 HcmV?d00001 diff --git a/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/light_check_box_normal.png b/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/light_check_box_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..8c2e7d25670d09c76ade6ddfdf56cb1ba7d30bbd GIT binary patch literal 100 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2^jo-U3d6>-Ts%HH0p5Bl))^Yj14 x4HA5Od@he=t;>3{q^`ECyU#8^WOUR zSF=|}YfZ_izqFlMd-kCPKNL=i)a>1NzIx+wOZiK0lU4bi&;POSy>~*%_!XJMH$ zcl_9vtGXgqa5-1Vk=9$Hg{vG~V~FP_u*`~Hn!4!G<|6HN`M)(cr{C>*{r}8U`AtfG zqA$+2p6ap)U0^P*rTr+R@m|b|H66jMRmBT&NygX99DEZw_XpR5N58hscS?Eq=$C!* z&c3U&y^ko%eXOf#y_o#4V#xP)z3zMf!z#gX41MWdc^ qbm)ZCgjs!@YBBeGKDX`JpUi6?rzTeIUM~v_HwI5vKbLh*2~7Ygm7dH1 literal 0 HcmV?d00001 diff --git a/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/slot_normal.png b/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/slot_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..fc75f2f64da3b538be6a8eae5096b6d2c937ab4b GIT binary patch literal 100 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|ZBG}+kczlu19S8L{+jRJz592b uAvvJQG2x2BpNcCAhroD;G)r;-7lY@&c)lEwoeO~47(8A5T-G@yGywoA_a68F literal 0 HcmV?d00001 diff --git a/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/top_energy_bar.png b/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/top_energy_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..5ae7af029758996b1b2a26ef8f5aeac4851c1319 GIT binary patch literal 749 zcmVMh?#jy0R$Lq|ClcWrSOe|l<)NjtG_)2Kg{{22u$`M5F2T1I7KV1v z0e_eHI=BzIsPBds4~TDphoHZtB($LIh1Xl|255%UTdzCBkHI$R%g+zp1qGpp^-p1Z+J&n-2+*9xjjNvNkik33~VNuGS~< zKaZF38}J@X<>Z7Z?j#9b5`Ty=K0|I2d?bDgK7%>#A;rGa_^Ffo3QnWH$e!b@?)eFP zk*7X|HU2jDe4i`M*pwEN1+ z!a>%Qm&8Hj>(Do%Jqo`Fr-uhW%*S7g{t$n9hJE!~XKkSu_c%gsnLX9cf<|=B@J(O^ z|1{h@hiUcW2l{wPt6+h{9p}SugKu@{^oHBnm-raDCg2cWf!hF`^w&Yof${RZ#0=;p zc91&xlO0|MbQQfrDA!A!19}yh?QJ4e|3R!p4i-w}9++gPpl;e*jnpFRe==au*28HBT6d$HzT f%ef0ki2X8k`qBFHB00000NkvXXu0mjfG`e>8 literal 0 HcmV?d00001 diff --git a/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/top_energy_bar_background.png b/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/top_energy_bar_background.png new file mode 100644 index 0000000000000000000000000000000000000000..4b605e36e856bf9380f0f388a77d5b615d950843 GIT binary patch literal 483 zcmV<90UZ8`P)-=;b=rjOaJ`*{n8g-{4>1#Qm4~NtyU{7 z7K;M%X0w^v?RL%&heKK}mpKRZ-ELO^$EVlprPJw@R;yLoZntSX9v8LEW|N^7oQT`+ z_c`|a{mhs3(Cv0JC(8A6KA+QIFnHNlFPFdh_JYrv3J~;h| zc$iM7h2Gw@d_-D%tLq2n+>ghj=+pZ3dYwk2QO@Cdy=LufHY@tP-EMhZctGgY+#N5t z-|zXX_V7luy!eJ5uTSfq&u7+KM~AnD9!Jj?C*r{x91rXChf|~DGoR1%`rvWSs~(&v z*OQulz}~T^H{xIZP*bf|%cxeX`7vCwiwwR}sbmA3Sg+TMT3lk87v*sQ!8aO>k9vG) zH7O6og@N4AKs*w}FonL%2V9`bg)%RX+Pj{I7y}u@8nqa(-~%yW?>vvF8Fnb^Kk?QW zG#^L65aGO)oYtD~P?M{P^Z}fY17i3f^ibwQ`>ucIc}G9N$Dc~@u}A3RT(ohn@Q+@6 ZpTDBoUF#+vt&0Ev002ovPDHLkV1nqj^GE;y literal 0 HcmV?d00001 diff --git a/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/upgrade_icon.png b/RebornCore/src/main/resources/assets/reborncore/textures/gui/sprites/upgrade_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8748ebd19a0dce3cbf1498e8fffa7d06714167cd GIT binary patch literal 436 zcmV;l0ZaagP)~yY!w{3n1VIpBzu&VHKAlc68jU#8Mk1dDh}7@*F&qxz`+g!obxfYkW}t0F zzM`rsdc7Vz&r67+lMu~hvsqby)^c4J-EQ}QwA<|x?{qrcr^^-jN-me<=3p@3b?LNN zfN*lhaaiQn4QM^OgLb>k9t&8O#kFnQ9Dfu@r_<1NJ@IC<3Bxc@uh-FPwb)J5