From a30e9fd287bda662bd86a470018315ebc355d3e8 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 14 Nov 2025 00:29:32 -0700 Subject: [PATCH 1/4] fix big int divide issue in pss energy bar fix big int adapter --- .../MetaTileEntityPowerSubstation.java | 6 ++++-- .../mixins/mui2/BigIntAdapterMixin.java | 20 +++++++++++++++++++ src/main/resources/mixins.gregtech.mui2.json | 1 + 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 src/main/java/gregtech/mixins/mui2/BigIntAdapterMixin.java diff --git a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPowerSubstation.java b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPowerSubstation.java index c3fdd2b18b6..6bcd564cadc 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPowerSubstation.java +++ b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPowerSubstation.java @@ -587,8 +587,10 @@ public void registerBars(List> bars, PanelSync syncManager.syncValue("energy_capacity", energyCapacityValue); bars.add(b -> b.progress(() -> { - if (energyCapacityValue.getValue().equals(BigInteger.ZERO)) return 0; - return energyStoredValue.getValue().divide(energyCapacityValue.getValue()).doubleValue(); + BigInteger capacity = energyCapacityValue.getValue(); + BigInteger stored = energyStoredValue.getValue(); + if (capacity.equals(BigInteger.ZERO) || stored.equals(BigInteger.ZERO)) return 0; + return 1 / capacity.divide(stored).doubleValue(); }) .texture(GTGuiTextures.PROGRESS_BAR_MULTI_ENERGY_YELLOW) .tooltipBuilder(t -> { diff --git a/src/main/java/gregtech/mixins/mui2/BigIntAdapterMixin.java b/src/main/java/gregtech/mixins/mui2/BigIntAdapterMixin.java new file mode 100644 index 00000000000..db374739b7d --- /dev/null +++ b/src/main/java/gregtech/mixins/mui2/BigIntAdapterMixin.java @@ -0,0 +1,20 @@ +package gregtech.mixins.mui2; + +import net.minecraft.network.PacketBuffer; + +import io.netty.buffer.ByteBuf; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +// todo remove in next mui2 update +@Mixin(targets = "com.cleanroommc.modularui.utils.serialization.ByteBufAdapters$3") +public class BigIntAdapterMixin { + + @Redirect(method = "serialize(Lnet/minecraft/network/PacketBuffer;Ljava/math/BigInteger;)V", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/network/PacketBuffer;writeBytes([B)Lio/netty/buffer/ByteBuf;")) + public ByteBuf fixIncorrectCall(PacketBuffer instance, byte[] bytes) { + return instance.writeByteArray(bytes); + } +} diff --git a/src/main/resources/mixins.gregtech.mui2.json b/src/main/resources/mixins.gregtech.mui2.json index 72a083a3408..5299e07453a 100644 --- a/src/main/resources/mixins.gregtech.mui2.json +++ b/src/main/resources/mixins.gregtech.mui2.json @@ -8,6 +8,7 @@ "maxShiftBy": 10 }, "mixins": [ + "BigIntAdapterMixin", "TextWidgetMixin" ], "client": [ From 7c07cc218af8a674effa3239a85ef9688c2ce654 Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 14 Nov 2025 17:32:17 -0700 Subject: [PATCH 2/4] address review --- .../multi/electric/MetaTileEntityPowerSubstation.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPowerSubstation.java b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPowerSubstation.java index 6bcd564cadc..371c55bac01 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPowerSubstation.java +++ b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPowerSubstation.java @@ -589,8 +589,10 @@ public void registerBars(List> bars, PanelSync bars.add(b -> b.progress(() -> { BigInteger capacity = energyCapacityValue.getValue(); BigInteger stored = energyStoredValue.getValue(); - if (capacity.equals(BigInteger.ZERO) || stored.equals(BigInteger.ZERO)) return 0; - return 1 / capacity.divide(stored).doubleValue(); + if (capacity.compareTo(stored) < 0) return 0; + double r = capacity.divide(stored).doubleValue(); + if (r == 0) return 0; + return 1 / r; }) .texture(GTGuiTextures.PROGRESS_BAR_MULTI_ENERGY_YELLOW) .tooltipBuilder(t -> { From bb5953458bfc7771861d35f846f772d12146ab5e Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Fri, 14 Nov 2025 17:36:14 -0700 Subject: [PATCH 3/4] spotless? --- .../electric/MetaTileEntityPowerSubstation.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPowerSubstation.java b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPowerSubstation.java index 371c55bac01..aeeb3608f58 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPowerSubstation.java +++ b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPowerSubstation.java @@ -587,12 +587,12 @@ public void registerBars(List> bars, PanelSync syncManager.syncValue("energy_capacity", energyCapacityValue); bars.add(b -> b.progress(() -> { - BigInteger capacity = energyCapacityValue.getValue(); - BigInteger stored = energyStoredValue.getValue(); - if (capacity.compareTo(stored) < 0) return 0; - double r = capacity.divide(stored).doubleValue(); - if (r == 0) return 0; - return 1 / r; + BigInteger capacity = energyCapacityValue.getValue(); + BigInteger stored = energyStoredValue.getValue(); + if (capacity.compareTo(stored) < 0) return 0; + double r = capacity.divide(stored).doubleValue(); + if (r == 0) return 0; + return 1 / r; }) .texture(GTGuiTextures.PROGRESS_BAR_MULTI_ENERGY_YELLOW) .tooltipBuilder(t -> { From c2a83bab3dce3dd73600f0937681baa539bdd4eb Mon Sep 17 00:00:00 2001 From: Ghzdude <44148655+ghzdude@users.noreply.github.com> Date: Sun, 16 Nov 2025 00:22:34 -0700 Subject: [PATCH 4/4] address potential `/ by 0` rename `r` to `factor` --- .../multi/electric/MetaTileEntityPowerSubstation.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPowerSubstation.java b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPowerSubstation.java index aeeb3608f58..af4b6a7a0bd 100644 --- a/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPowerSubstation.java +++ b/src/main/java/gregtech/common/metatileentities/multi/electric/MetaTileEntityPowerSubstation.java @@ -589,10 +589,10 @@ public void registerBars(List> bars, PanelSync bars.add(b -> b.progress(() -> { BigInteger capacity = energyCapacityValue.getValue(); BigInteger stored = energyStoredValue.getValue(); - if (capacity.compareTo(stored) < 0) return 0; - double r = capacity.divide(stored).doubleValue(); - if (r == 0) return 0; - return 1 / r; + if (stored.equals(BigInteger.ZERO)) return 0; + double factor = capacity.divide(stored).doubleValue(); + if (factor == 0) return 0; + return 1 / factor; }) .texture(GTGuiTextures.PROGRESS_BAR_MULTI_ENERGY_YELLOW) .tooltipBuilder(t -> {