From ae0a9f8357b79c8d589a4252d644ccac90cb0ce9 Mon Sep 17 00:00:00 2001 From: Roelymole Date: Tue, 28 Jan 2025 01:34:39 +0000 Subject: [PATCH 1/2] fix: improved the tabs at the sides of the machine GUIs including specifying better exclusion zones for REI and fixing small mistakes in the texture --- build.gradle.kts | 2 +- .../client/api/screen/MachineScreen.java | 126 ++++++++++-------- .../compat/MachineLibREIClientPlugin.java | 28 +++- .../machinelib/impl/Constant.java | 2 +- .../textures/gui/machine_panels.png | Bin 2551 -> 6657 bytes 5 files changed, 98 insertions(+), 60 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index b1e738cb..3e39f97d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -200,7 +200,7 @@ dependencies { "testmodImplementation"(sourceSets.main.get().output) "modTestmodImplementation"("net.fabricmc.fabric-api:fabric-api:$fabric") -// modRuntimeOnly("me.shedaniel:RoughlyEnoughItems-fabric:$rei") + modRuntimeOnly("me.shedaniel:RoughlyEnoughItems-fabric:$rei") modRuntimeOnly("mcp.mobius.waila:wthit:fabric-$wthit") } diff --git a/src/main/java/dev/galacticraft/machinelib/client/api/screen/MachineScreen.java b/src/main/java/dev/galacticraft/machinelib/client/api/screen/MachineScreen.java index 560e54e2..eeb970da 100644 --- a/src/main/java/dev/galacticraft/machinelib/client/api/screen/MachineScreen.java +++ b/src/main/java/dev/galacticraft/machinelib/client/api/screen/MachineScreen.java @@ -100,12 +100,13 @@ public class MachineScreen lines) { */ protected void drawConfigurationPanels(@NotNull GuiGraphics graphics, int mouseX, int mouseY) { assert this.minecraft != null; - boolean secondary = false; PoseStack poseStack = graphics.pose(); + int leftX = this.leftPos; + int rightX = this.leftPos + this.imageWidth; + int leftY = this.topPos + SPACING; + int rightY = this.topPos + SPACING; + int width; + int height; for (Tab tab : Tab.values()) { // 0, 1, 2, 3 poseStack.pushPose(); - if (secondary) poseStack.translate(0, SPACING, 0); - graphics.blit(Constant.ScreenTexture.MACHINE_CONFIG_PANELS, this.leftPos + (tab.isLeft() ? tab.isOpen() ? -PANEL_WIDTH : -22 : this.imageWidth), this.topPos + (secondary ? Tab.values()[tab.ordinal() - 1].isOpen() ? PANEL_HEIGHT : TAB_HEIGHT : 0) + SPACING, tab.getU(), tab.getV(), tab.isOpen() ? PANEL_WIDTH : TAB_WIDTH, tab.isOpen() ? PANEL_HEIGHT : TAB_HEIGHT); - if (!tab.isOpen()) { - graphics.renderFakeItem(tab.getItem(), this.leftPos + (tab.isLeft() ? -22 : this.imageWidth) + (tab.isLeft() ? 4 : 2), this.topPos + (secondary ? Tab.values()[tab.ordinal() - 1].isOpen() ? PANEL_HEIGHT : TAB_HEIGHT : 0) + SPACING + 3); + width = tab.isOpen() ? PANEL_WIDTH : TAB_WIDTH; + height = tab.isOpen() ? PANEL_HEIGHT : TAB_HEIGHT; + if (tab.isLeft()) { + graphics.blit(Constant.ScreenTexture.MACHINE_CONFIG_PANELS, leftX - width, leftY, tab.getU(), tab.getV(), width, height); + if (!tab.isOpen()) { + graphics.renderFakeItem(tab.getItem(), leftX - TAB_WIDTH + 4, leftY + 3); + } + leftY += height + SPACING; + } else { + graphics.blit(Constant.ScreenTexture.MACHINE_CONFIG_PANELS, rightX, rightY, tab.getU(), tab.getV(), width, height); + if (!tab.isOpen()) { + graphics.renderFakeItem(tab.getItem(), rightX + 2, rightY + 3); + } + rightY += height + SPACING; } - secondary = !secondary; poseStack.popPose(); } poseStack.pushPose(); @@ -290,13 +308,13 @@ protected void drawConfigurationPanels(@NotNull GuiGraphics graphics, int mouseX this.drawButton(graphics, REDSTONE_IGNORE_X, REDSTONE_IGNORE_Y, mouseX + PANEL_WIDTH - this.leftPos, mouseY - SPACING - this.topPos, menu.redstoneMode == RedstoneMode.IGNORE); this.drawButton(graphics, REDSTONE_LOW_X, REDSTONE_LOW_Y, mouseX + PANEL_WIDTH - this.leftPos, mouseY - SPACING - this.topPos, menu.redstoneMode == RedstoneMode.LOW); this.drawButton(graphics, REDSTONE_HIGH_X, REDSTONE_HIGH_Y, mouseX + PANEL_WIDTH - this.leftPos, mouseY - SPACING - this.topPos, menu.redstoneMode == RedstoneMode.HIGH); - graphics.renderFakeItem(REDSTONE, PANEL_ICON_X, PANEL_ICON_Y); + graphics.renderFakeItem(REDSTONE, (Tab.REDSTONE.isLeft() ? PANEL_ICON_X_LEFT : PANEL_ICON_X_RIGHT), PANEL_ICON_Y); graphics.renderFakeItem(GUNPOWDER, REDSTONE_IGNORE_X, REDSTONE_IGNORE_Y); graphics.renderFakeItem(UNLIT_TORCH, REDSTONE_LOW_X, REDSTONE_LOW_Y - 2); graphics.renderFakeItem(REDSTONE_TORCH, REDSTONE_HIGH_X, REDSTONE_HIGH_Y - 2); - graphics.drawString(this.font, Component.translatable(Constant.TranslationKey.REDSTONE_MODE) - .setStyle(Constant.Text.GRAY_STYLE), PANEL_TITLE_X, PANEL_TITLE_Y, 0xFFFFFFFF); + graphics.drawString(this.font, Component.translatable(Constant.TranslationKey.REDSTONE_MODE).setStyle(Constant.Text.GRAY_STYLE), + (Tab.REDSTONE.isLeft() ? PANEL_ICON_X_LEFT : PANEL_ICON_X_RIGHT) + PANEL_TITLE_X - 1, PANEL_TITLE_Y, 0xFFFFFFFF); graphics.drawString(this.font, Component.translatable(Constant.TranslationKey.REDSTONE_STATE, menu.redstoneMode.getName()).setStyle(Constant.Text.GRAY_STYLE), REDSTONE_STATE_TEXT_X, REDSTONE_STATE_TEXT_Y, 0xFFFFFFFF); graphics.drawString(this.font, Component.translatable(Constant.TranslationKey.REDSTONE_STATUS, @@ -307,12 +325,13 @@ protected void drawConfigurationPanels(@NotNull GuiGraphics graphics, int mouseX poseStack.popPose(); } + if (Tab.CONFIGURATION.isOpen()) { poseStack.pushPose(); - poseStack.translate(-PANEL_WIDTH, TAB_HEIGHT + SPACING + SPACING, 0); - graphics.renderFakeItem(WRENCH, PANEL_ICON_X, PANEL_ICON_Y); - graphics.drawString(this.font, Component.translatable(Constant.TranslationKey.CONFIGURATION) - .setStyle(Constant.Text.GRAY_STYLE), PANEL_TITLE_X, PANEL_TITLE_Y, 0xFFFFFFFF); + poseStack.translate(-PANEL_WIDTH, TAB_HEIGHT + SPACING * 2, 0); + graphics.renderFakeItem(WRENCH, (Tab.CONFIGURATION.isLeft() ? PANEL_ICON_X_LEFT : PANEL_ICON_X_RIGHT), PANEL_ICON_Y); + graphics.drawString(this.font, Component.translatable(Constant.TranslationKey.CONFIGURATION).setStyle(Constant.Text.GRAY_STYLE), + (Tab.CONFIGURATION.isLeft() ? PANEL_ICON_X_LEFT : PANEL_ICON_X_RIGHT) + PANEL_TITLE_X, PANEL_TITLE_Y, 0xFFFFFFFF); RenderSystem.setShaderTexture(0, InventoryMenu.BLOCK_ATLAS); this.drawMachineFace(graphics, TOP_FACE_X, TOP_FACE_Y, this.menu.configuration, BlockFace.TOP); @@ -323,36 +342,37 @@ protected void drawConfigurationPanels(@NotNull GuiGraphics graphics, int mouseX this.drawMachineFace(graphics, BOTTOM_FACE_X, BOTTOM_FACE_Y, this.menu.configuration, BlockFace.BOTTOM); poseStack.popPose(); } + if (Tab.STATS.isOpen()) { poseStack.pushPose(); poseStack.translate(this.imageWidth, SPACING, 0); - graphics.renderFakeItem(ALUMINUM_WIRE, PANEL_ICON_X, PANEL_ICON_Y); + graphics.renderFakeItem(ALUMINUM_WIRE, (Tab.STATS.isLeft() ? PANEL_ICON_X_LEFT : PANEL_ICON_X_RIGHT), PANEL_ICON_Y); PlayerFaceRenderer.draw(graphics, this.ownerSkin.getNow(DefaultPlayerSkin.get(this.menu.security.getOwner() == null ? this.menu.player.getUUID() : this.menu.security.getOwner())), OWNER_FACE_X, OWNER_FACE_Y, OWNER_FACE_SIZE); - graphics.drawString(this.font, Component.translatable(Constant.TranslationKey.STATISTICS) - .setStyle(Constant.Text.GREEN_STYLE), PANEL_TITLE_X, PANEL_TITLE_Y, 0xFFFFFFFF); - List text = this.font.split(this.menu.be.getBlockState().getBlock().getName(), 64); - int offsetY = 0; - for (FormattedCharSequence orderedText : text) { - graphics.drawString(this.font, orderedText, 40, 22 + offsetY, 0xFFFFFFFF, false); - offsetY += this.font.lineHeight + 2; - } + graphics.drawString(this.font, Component.translatable(Constant.TranslationKey.STATISTICS).setStyle(Constant.Text.GRAY_STYLE), + (Tab.STATS.isLeft() ? PANEL_ICON_X_LEFT : PANEL_ICON_X_RIGHT) + PANEL_TITLE_X, PANEL_TITLE_Y, 0xFFFFFFFF); + // List text = this.font.split(this.menu.be.getBlockState().getBlock().getName(), 64); + // int offsetY = 0; + // for (FormattedCharSequence orderedText : text) { + // graphics.drawString(this.font, orderedText, STATS_TEXT_X, STATS_TEXT_Y + offsetY, 0xFFFFFFFF, false); + // offsetY += this.font.lineHeight + 2; + // } poseStack.popPose(); } if (Tab.SECURITY.isOpen()) { poseStack.pushPose(); - poseStack.translate(this.imageWidth, TAB_HEIGHT + SPACING + SPACING, 0); - graphics.blit(Constant.ScreenTexture.MACHINE_CONFIG_PANELS, PANEL_ICON_X, PANEL_ICON_Y, ICON_LOCK_PRIVATE_U, ICON_LOCK_PRIVATE_V, ICON_WIDTH, ICON_HEIGHT); + poseStack.translate(this.imageWidth, TAB_HEIGHT + SPACING * 2, 0); + graphics.renderFakeItem(IRON_CHESTPLATE, (Tab.SECURITY.isLeft() ? PANEL_ICON_X_LEFT : PANEL_ICON_X_RIGHT), PANEL_ICON_Y); - this.drawButton(graphics, SECURITY_PUBLIC_X, SECURITY_PUBLIC_Y, mouseX - this.imageWidth - this.leftPos, mouseY - (TAB_HEIGHT + SPACING + SPACING) - this.topPos, this.menu.security.getAccessLevel() == AccessLevel.PUBLIC || !this.menu.security.isOwner(this.menu.player)); - this.drawButton(graphics, SECURITY_TEAM_X, SECURITY_TEAM_Y, mouseX - this.imageWidth - this.leftPos, mouseY - (TAB_HEIGHT + SPACING + SPACING) - this.topPos, this.menu.security.getAccessLevel() == AccessLevel.TEAM || !this.menu.security.isOwner(this.menu.player)); - this.drawButton(graphics, SECURITY_PRIVATE_X, SECURITY_PRIVATE_Y, mouseX - this.imageWidth - this.leftPos, mouseY - (TAB_HEIGHT + SPACING + SPACING) - this.topPos, this.menu.security.getAccessLevel() == AccessLevel.PRIVATE || !this.menu.security.isOwner(this.menu.player)); + this.drawButton(graphics, SECURITY_PUBLIC_X, SECURITY_PUBLIC_Y, mouseX - this.imageWidth - this.leftPos, mouseY - (TAB_HEIGHT + SPACING * 2) - this.topPos, this.menu.security.getAccessLevel() == AccessLevel.PUBLIC || !this.menu.security.isOwner(this.menu.player)); + this.drawButton(graphics, SECURITY_TEAM_X, SECURITY_TEAM_Y, mouseX - this.imageWidth - this.leftPos, mouseY - (TAB_HEIGHT + SPACING * 2) - this.topPos, this.menu.security.getAccessLevel() == AccessLevel.TEAM || !this.menu.security.isOwner(this.menu.player)); + this.drawButton(graphics, SECURITY_PRIVATE_X, SECURITY_PRIVATE_Y, mouseX - this.imageWidth - this.leftPos, mouseY - (TAB_HEIGHT + SPACING * 2) - this.topPos, this.menu.security.getAccessLevel() == AccessLevel.PRIVATE || !this.menu.security.isOwner(this.menu.player)); graphics.blit(Constant.ScreenTexture.MACHINE_CONFIG_PANELS, SECURITY_PUBLIC_X, SECURITY_PUBLIC_Y, ICON_LOCK_PRIVATE_U, ICON_LOCK_PRIVATE_V, ICON_WIDTH, ICON_HEIGHT); graphics.blit(Constant.ScreenTexture.MACHINE_CONFIG_PANELS, SECURITY_TEAM_X, SECURITY_TEAM_Y, ICON_LOCK_PARTY_U, ICON_LOCK_PARTY_V, ICON_WIDTH, ICON_HEIGHT); graphics.blit(Constant.ScreenTexture.MACHINE_CONFIG_PANELS, SECURITY_PRIVATE_X, SECURITY_PRIVATE_Y, ICON_LOCK_PUBLIC_U, ICON_LOCK_PUBLIC_V, ICON_WIDTH, ICON_HEIGHT); - graphics.drawString(this.font, Component.translatable(Constant.TranslationKey.SECURITY) - .setStyle(Constant.Text.GRAY_STYLE), PANEL_TITLE_X, PANEL_TITLE_Y, 0xFFFFFFFF); + graphics.drawString(this.font, Component.translatable(Constant.TranslationKey.SECURITY).setStyle(Constant.Text.GRAY_STYLE), + (Tab.SECURITY.isLeft() ? PANEL_ICON_X_LEFT : PANEL_ICON_X_RIGHT) + PANEL_TITLE_X, PANEL_TITLE_Y, 0xFFFFFFFF); graphics.drawString(this.font, Component.translatable(Constant.TranslationKey.ACCESS_LEVEL, this.menu.security.getAccessLevel().getName()).setStyle(Constant.Text.GRAY_STYLE), SECURITY_STATE_TEXT_X, SECURITY_STATE_TEXT_Y, 0xFFFFFFFF); @@ -462,7 +482,7 @@ public boolean checkConfigurationPanelClick(double mouseX, double mouseY, int bu mouseY = mY - this.topPos; if (Tab.CONFIGURATION.isOpen()) { mouseX += PANEL_WIDTH; - mouseY -= TAB_HEIGHT + SPACING + SPACING; + mouseY -= TAB_HEIGHT + SPACING * 2; if (mouseIn(mouseX, mouseY, 0, 0, PANEL_WIDTH, PANEL_UPPER_HEIGHT)) { Tab.CONFIGURATION.toggle(); return true; @@ -491,9 +511,9 @@ public boolean checkConfigurationPanelClick(double mouseX, double mouseY, int bu } else { mouseX += TAB_WIDTH; if (Tab.REDSTONE.isOpen()) { - mouseY -= PANEL_HEIGHT + SPACING + SPACING; + mouseY -= PANEL_HEIGHT + SPACING * 2; } else { - mouseY -= TAB_HEIGHT + SPACING + SPACING; + mouseY -= TAB_HEIGHT + SPACING * 2; } if (mouseIn(mouseX, mouseY, 0, 0, TAB_WIDTH, TAB_HEIGHT)) { Tab.CONFIGURATION.toggle(); @@ -519,7 +539,7 @@ public boolean checkConfigurationPanelClick(double mouseX, double mouseY, int bu mouseY = mY - this.topPos; mouseX -= this.imageWidth; if (Tab.SECURITY.isOpen()) { - mouseY -= TAB_HEIGHT + SPACING + SPACING; + mouseY -= TAB_HEIGHT + SPACING * 2; if (mouseIn(mouseX, mouseY, 0, 0, PANEL_WIDTH, PANEL_UPPER_HEIGHT)) { Tab.SECURITY.toggle(); return true; @@ -544,9 +564,9 @@ public boolean checkConfigurationPanelClick(double mouseX, double mouseY, int bu } } else { if (Tab.STATS.isOpen()) { - mouseY -= PANEL_HEIGHT + SPACING + SPACING; + mouseY -= PANEL_HEIGHT + SPACING * 2; } else { - mouseY -= TAB_HEIGHT + SPACING + SPACING; + mouseY -= TAB_HEIGHT + SPACING * 2; } if (mouseIn(mouseX, mouseY, 0, 0, TAB_WIDTH, TAB_HEIGHT)) { Tab.SECURITY.toggle(); @@ -609,7 +629,7 @@ protected void drawConfigurationPanelTooltips(GuiGraphics graphics, int mouseX, mouseY = mY - this.topPos; if (Tab.CONFIGURATION.isOpen()) { mouseX += PANEL_WIDTH; - mouseY -= TAB_HEIGHT + SPACING + SPACING; + mouseY -= TAB_HEIGHT + SPACING * 2; if (mouseIn(mouseX, mouseY, TOP_FACE_X, TOP_FACE_Y, MACHINE_FACE_SIZE, MACHINE_FACE_SIZE)) { this.renderFaceTooltip(graphics, BlockFace.TOP, mX, mY); } @@ -660,7 +680,7 @@ protected void drawConfigurationPanelTooltips(GuiGraphics graphics, int mouseX, mouseY = mY - this.topPos; if (Tab.SECURITY.isOpen()) { mouseX -= this.imageWidth; - mouseY -= TAB_HEIGHT + SPACING + SPACING; + mouseY -= TAB_HEIGHT + SPACING * 2; if (this.menu.security.isOwner(this.menu.player)) { if (mouseIn(mouseX, mouseY, REDSTONE_IGNORE_X, REDSTONE_IGNORE_Y, BUTTON_WIDTH, BUTTON_HEIGHT)) { @@ -682,12 +702,12 @@ protected void drawConfigurationPanelTooltips(GuiGraphics graphics, int mouseX, } else { mouseX -= this.imageWidth; if (Tab.STATS.isOpen()) { - mouseY -= PANEL_HEIGHT + SPACING + SPACING; + mouseY -= PANEL_HEIGHT + SPACING * 2; } else { - mouseY -= TAB_HEIGHT + SPACING + SPACING; + mouseY -= TAB_HEIGHT + SPACING * 2; } if (mouseIn(mouseX, mouseY, 0, 0, TAB_WIDTH, TAB_HEIGHT)) { - graphics.renderTooltip(this.font, Component.translatable(Constant.TranslationKey.SECURITY).setStyle(Constant.Text.BLUE_STYLE), mX, mY); + graphics.renderTooltip(this.font, Component.translatable(Constant.TranslationKey.SECURITY).setStyle(Constant.Text.GREEN_STYLE), mX, mY); } } } @@ -826,7 +846,7 @@ protected void drawTanks(GuiGraphics graphics, int mouseX, int mouseY) { private void handleSlotHighlight(GuiGraphics graphics, int mouseX, int mouseY) { if (Tab.CONFIGURATION.isOpen()) { mouseX -= (this.leftPos - PANEL_WIDTH); - mouseY -= (this.topPos + (TAB_HEIGHT + SPACING + SPACING)); + mouseY -= (this.topPos + (TAB_HEIGHT + SPACING * 2)); IOFace config = null; if (mouseIn(mouseX, mouseY, TOP_FACE_X, TOP_FACE_Y, MACHINE_FACE_SIZE, MACHINE_FACE_SIZE)) { config = this.menu.configuration.get(BlockFace.TOP); diff --git a/src/main/java/dev/galacticraft/machinelib/client/impl/compat/MachineLibREIClientPlugin.java b/src/main/java/dev/galacticraft/machinelib/client/impl/compat/MachineLibREIClientPlugin.java index da67395d..325b67fa 100644 --- a/src/main/java/dev/galacticraft/machinelib/client/impl/compat/MachineLibREIClientPlugin.java +++ b/src/main/java/dev/galacticraft/machinelib/client/impl/compat/MachineLibREIClientPlugin.java @@ -25,6 +25,7 @@ import dev.architectury.event.CompoundEventResult; import dev.galacticraft.machinelib.client.api.screen.MachineScreen; import dev.galacticraft.machinelib.impl.Constant; +import dev.galacticraft.machinelib.impl.Constant.TextureCoordinate; import me.shedaniel.math.Rectangle; import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.client.registry.screen.ExclusionZones; @@ -49,13 +50,30 @@ public void registerScreens(ScreenRegistry registry) { @Override public void registerExclusionZones(ExclusionZones zones) { - zones.register(MachineScreen.class, screen -> { + zones.register(MachineScreen.class, provider -> { List areas = new ArrayList<>(); - if (MachineScreen.Tab.STATS.isOpen() || MachineScreen.Tab.SECURITY.isOpen()) { - areas.add(new Rectangle(screen.getX() + screen.getImageWidth(), screen.getY() + (MachineScreen.Tab.STATS.isOpen() ? 0 : Constant.TextureCoordinate.TAB_HEIGHT), Constant.TextureCoordinate.PANEL_WIDTH, Constant.TextureCoordinate.PANEL_HEIGHT)); - areas.add(new Rectangle(screen.getX() + screen.getImageWidth(), screen.getY() + Constant.TextureCoordinate.TAB_HEIGHT, Constant.TextureCoordinate.TAB_WIDTH, Constant.TextureCoordinate.PANEL_HEIGHT)); + int leftX = provider.getX(); + int rightX = provider.getX() + provider.getImageWidth(); + int leftY = provider.getY() + MachineScreen.SPACING; + int rightY = provider.getY() + MachineScreen.SPACING; + int width; + int height; + for (MachineScreen.Tab tab : MachineScreen.Tab.values()) { + if (tab.isOpen()) { + width = TextureCoordinate.PANEL_WIDTH; + height = TextureCoordinate.PANEL_HEIGHT; + } else { + width = TextureCoordinate.TAB_WIDTH; + height = TextureCoordinate.TAB_HEIGHT; + } + if (tab.isLeft()) { + areas.add(new Rectangle(leftX - width, leftY, width, height)); + leftY += height + MachineScreen.SPACING; + } else { + areas.add(new Rectangle(rightX, rightY, width, height)); + rightY += height + MachineScreen.SPACING; + } } - areas.add(new Rectangle(screen.getX() + screen.getImageWidth(), screen.getY(), Constant.TextureCoordinate.TAB_WIDTH, Constant.TextureCoordinate.TAB_HEIGHT * 2)); return areas; }); } diff --git a/src/main/java/dev/galacticraft/machinelib/impl/Constant.java b/src/main/java/dev/galacticraft/machinelib/impl/Constant.java index 7ee6c738..f27dc68f 100644 --- a/src/main/java/dev/galacticraft/machinelib/impl/Constant.java +++ b/src/main/java/dev/galacticraft/machinelib/impl/Constant.java @@ -102,7 +102,7 @@ interface TextureCoordinate { /** * The height of a configuration panel. */ - int PANEL_HEIGHT = 93; + int PANEL_HEIGHT = 92; /** * The width of a configuration tab. */ diff --git a/src/main/resources/assets/machinelib/textures/gui/machine_panels.png b/src/main/resources/assets/machinelib/textures/gui/machine_panels.png index 92d23a2d5669ced8c13a969d4bea795ecba61d43..b18b9f1ab854dda5a30db1efb26c16fc715aecd6 100644 GIT binary patch literal 6657 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 UT_3OCAel<4!zxO_GXKB+6DAldJ^%m! delta 2363 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 Date: Mon, 3 Feb 2025 21:22:33 +0000 Subject: [PATCH 2/2] chore: replaced machine_panels.png texture with machine_config.png from TeamGalacticraft/Galacticraft with a slight tweak --- .../textures/gui/machine_panels.png | Bin 6657 -> 6683 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/machinelib/textures/gui/machine_panels.png b/src/main/resources/assets/machinelib/textures/gui/machine_panels.png index b18b9f1ab854dda5a30db1efb26c16fc715aecd6..b28d8602032d41d3032e2e50f598e11021e62f15 100644 GIT binary patch delta 3259 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 MD<{j66O=#x2X;QtHvj+t delta 3269 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