From 734f1d6784dff7d95709ae3053a12b928e1abcd8 Mon Sep 17 00:00:00 2001 From: Ryan Cooper <45916709+Bumperdo09@users.noreply.github.com> Date: Sun, 8 Mar 2026 16:29:02 -0400 Subject: [PATCH 1/3] Changing fluid amounts with scroll defaults to 1B Shift scroll and ctrl scroll reduce the amount so you can still set by mb if needed --- .../panel/FactoryPanelScreenMixin.java | 24 ++++++++++++++++++ .../RedstoneRequesterScreenMixin.java | 25 +++++++++++++++++++ .../StockKeeperRequestScreenMixin.java | 17 +++++++++++++ 3 files changed, 66 insertions(+) diff --git a/forge/src/main/java/ru/zznty/create_factory_logistics/mixin/logistics/panel/FactoryPanelScreenMixin.java b/forge/src/main/java/ru/zznty/create_factory_logistics/mixin/logistics/panel/FactoryPanelScreenMixin.java index 5cfb05c..e4ecaa6 100644 --- a/forge/src/main/java/ru/zznty/create_factory_logistics/mixin/logistics/panel/FactoryPanelScreenMixin.java +++ b/forge/src/main/java/ru/zznty/create_factory_logistics/mixin/logistics/panel/FactoryPanelScreenMixin.java @@ -18,6 +18,7 @@ import net.minecraft.client.gui.GuiGraphics; import net.minecraft.world.item.ItemStack; import net.minecraft.world.level.block.Blocks; +import net.minecraftforge.fluids.FluidStack; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Overwrite; import org.spongepowered.asm.mixin.Shadow; @@ -27,6 +28,7 @@ import ru.zznty.create_factory_abstractions.generic.impl.GenericContentExtender; import ru.zznty.create_factory_abstractions.generic.support.BigGenericStack; import ru.zznty.create_factory_logistics.FactoryBlocks; +import ru.zznty.create_factory_logistics.logistics.generic.FluidKey; import ru.zznty.create_factory_logistics.logistics.jar.JarPackageItem; import ru.zznty.create_factory_logistics.logistics.panel.FactoryFluidPanelBehaviour; @@ -336,6 +338,17 @@ private int scrollInputClampRemoval(int value, int min, int max, Operation genericStackLocalRef){ + if (genericStackLocalRef.get().key() instanceof FluidKey){ + var scrollAmount = (transfer-amounts.get(i))/(hasShiftDown() ? 10 : 1); //get back scroll amount + var multiplier = 1000; //If no keys are pressed + + if (hasShiftDown() && hasControlDown()) {multiplier = 1;} + else if (hasControlDown()) {multiplier = 10;} + else if (hasShiftDown()) {multiplier = 100;} + + transfer = amounts.get(i) + scrollAmount * multiplier; + } + return transfer; + } + @ModifyConstant( method = "mouseScrolled", constant = @Constant(intValue = 256) diff --git a/forge/src/main/java/ru/zznty/create_factory_logistics/mixin/logistics/stockKeeper/StockKeeperRequestScreenMixin.java b/forge/src/main/java/ru/zznty/create_factory_logistics/mixin/logistics/stockKeeper/StockKeeperRequestScreenMixin.java index 405b15f..4022a00 100644 --- a/forge/src/main/java/ru/zznty/create_factory_logistics/mixin/logistics/stockKeeper/StockKeeperRequestScreenMixin.java +++ b/forge/src/main/java/ru/zznty/create_factory_logistics/mixin/logistics/stockKeeper/StockKeeperRequestScreenMixin.java @@ -25,6 +25,7 @@ import net.minecraft.world.level.block.Blocks; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.ModifyArg; import org.spongepowered.asm.mixin.injection.Redirect; import ru.zznty.create_factory_abstractions.api.generic.crafting.OrderProvider; import ru.zznty.create_factory_abstractions.api.generic.crafting.RecipeRequestHelper; @@ -36,6 +37,7 @@ import ru.zznty.create_factory_abstractions.generic.support.BigGenericStack; import ru.zznty.create_factory_abstractions.generic.support.CraftableGenericStack; import ru.zznty.create_factory_abstractions.generic.support.GenericInventorySummary; +import ru.zznty.create_factory_logistics.logistics.generic.FluidKey; import ru.zznty.create_factory_logistics.logistics.ingredient.ClickableIngredientProvider; import ru.zznty.create_factory_logistics.mixin.accessor.CategoryEntryAccessor; import ru.zznty.create_factory_logistics.mixin.accessor.StockTickerBlockEntityAccessor; @@ -167,6 +169,21 @@ private BigItemStack createOrderForIngredientInClicked(ItemStack $, int count, return genericStack.asStack(); } + @ModifyArg( + method = "mouseScrolled", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/util/Mth;ceil(D)I" + ) + ) + private double transferNum(double transfer, @Local BigItemStack entry){ + if (BigGenericStack.of(entry).get().key() instanceof FluidKey){ + var scrollAmount = transfer/(hasControlDown() ? 10 : 1); //Get back scroll amount + transfer = scrollAmount * (hasControlDown()? 10 : 1000); + } + return transfer; + } + @Redirect( method = "mouseScrolled", at = @At( From 8149462311957497b745ddad466ca12b71ec4c1a Mon Sep 17 00:00:00 2001 From: Ryan Cooper <45916709+Bumperdo09@users.noreply.github.com> Date: Sun, 8 Mar 2026 16:59:24 -0400 Subject: [PATCH 2/3] Clean up mixins --- .../logistics/panel/FactoryPanelScreenMixin.java | 14 +++++--------- .../RedstoneRequesterScreenMixin.java | 6 ++---- .../stockKeeper/StockKeeperRequestScreenMixin.java | 6 +++--- 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/forge/src/main/java/ru/zznty/create_factory_logistics/mixin/logistics/panel/FactoryPanelScreenMixin.java b/forge/src/main/java/ru/zznty/create_factory_logistics/mixin/logistics/panel/FactoryPanelScreenMixin.java index e4ecaa6..86ecc49 100644 --- a/forge/src/main/java/ru/zznty/create_factory_logistics/mixin/logistics/panel/FactoryPanelScreenMixin.java +++ b/forge/src/main/java/ru/zznty/create_factory_logistics/mixin/logistics/panel/FactoryPanelScreenMixin.java @@ -332,21 +332,19 @@ private void setOutputIngredientCount(BigItemStack instance, int value) { ) ) private int scrollInputClampRemoval(int value, int min, int max, Operation original, - @Local BigItemStack itemStack) { + @Local BigItemStack itemStack, @Local(ordinal = 2, argsOnly = true) double pDelta) { BigGenericStack stack = BigGenericStack.of(itemStack); int maxStackSize = GenericContentExtender.registrationOf(stack.get().key()).clientProvider().guiHandler() .maxStackSize(stack.get().key()); if (stack.get().key() instanceof FluidKey){ - var scrollAmount = (value - stack.asStack().count) / (hasShiftDown() ? 10 : 1); - var multiplier = 1000; - + var multiplier = 1000; //If no keys pressed if (hasShiftDown() && hasControlDown()) {multiplier = 1;} else if (hasControlDown()) {multiplier = 10;} else if (hasShiftDown()) {multiplier = 100;} - value = stack.asStack().count + scrollAmount * multiplier; + value = (int) (stack.asStack().count + Math.signum(pDelta) * multiplier); } if (maxStackSize < 0) @@ -363,21 +361,19 @@ private int scrollInputClampRemoval(int value, int min, int max, Operation original) { + private int scrollOutputClampRemoval(int value, int min, int max, Operation original, @Local(ordinal = 2, argsOnly = true) double pDelta) { BigGenericStack stack = BigGenericStack.of(outputConfig); int maxStackSize = GenericContentExtender.registrationOf(stack.get().key()).clientProvider().guiHandler() .maxStackSize(stack.get().key()); if (stack.get().key() instanceof FluidKey){ - var scrollAmount = (value - stack.asStack().count) / (hasShiftDown() ? 10 : 1); //Get back scroll amount - var multiplier = 1000; //If no keys pressed if (hasShiftDown() && hasControlDown()) {multiplier = 1;} else if (hasControlDown()) {multiplier = 10;} else if (hasShiftDown()) {multiplier = 100;} - value = stack.asStack().count + scrollAmount * multiplier; + value = (int) (stack.asStack().count + Math.signum(pDelta) * multiplier); } if (maxStackSize < 0) diff --git a/forge/src/main/java/ru/zznty/create_factory_logistics/mixin/logistics/redstoneRequester/RedstoneRequesterScreenMixin.java b/forge/src/main/java/ru/zznty/create_factory_logistics/mixin/logistics/redstoneRequester/RedstoneRequesterScreenMixin.java index 087b542..cab4ceb 100644 --- a/forge/src/main/java/ru/zznty/create_factory_logistics/mixin/logistics/redstoneRequester/RedstoneRequesterScreenMixin.java +++ b/forge/src/main/java/ru/zznty/create_factory_logistics/mixin/logistics/redstoneRequester/RedstoneRequesterScreenMixin.java @@ -174,16 +174,14 @@ private boolean isIngredientEmptyMouseHandler(boolean original, ), index = 0 ) - private int transferNum(int transfer,@Local(ordinal = 2) int i, @Share("genericStackLocalRef") LocalRef genericStackLocalRef){ + private int transferNum(int transfer, @Local(ordinal = 2) int i, @Local(ordinal = 2, argsOnly = true) double pDelta , @Share("genericStackLocalRef") LocalRef genericStackLocalRef){ if (genericStackLocalRef.get().key() instanceof FluidKey){ - var scrollAmount = (transfer-amounts.get(i))/(hasShiftDown() ? 10 : 1); //get back scroll amount var multiplier = 1000; //If no keys are pressed - if (hasShiftDown() && hasControlDown()) {multiplier = 1;} else if (hasControlDown()) {multiplier = 10;} else if (hasShiftDown()) {multiplier = 100;} - transfer = amounts.get(i) + scrollAmount * multiplier; + transfer = (int) (amounts.get(i) + Math.signum(pDelta) * multiplier); } return transfer; } diff --git a/forge/src/main/java/ru/zznty/create_factory_logistics/mixin/logistics/stockKeeper/StockKeeperRequestScreenMixin.java b/forge/src/main/java/ru/zznty/create_factory_logistics/mixin/logistics/stockKeeper/StockKeeperRequestScreenMixin.java index 4022a00..7f7cf52 100644 --- a/forge/src/main/java/ru/zznty/create_factory_logistics/mixin/logistics/stockKeeper/StockKeeperRequestScreenMixin.java +++ b/forge/src/main/java/ru/zznty/create_factory_logistics/mixin/logistics/stockKeeper/StockKeeperRequestScreenMixin.java @@ -17,6 +17,7 @@ import net.minecraft.client.gui.components.EditBox; import net.minecraft.client.renderer.Rect2i; import net.minecraft.network.chat.Component; +import net.minecraft.util.Mth; import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; @@ -176,10 +177,9 @@ private BigItemStack createOrderForIngredientInClicked(ItemStack $, int count, target = "Lnet/minecraft/util/Mth;ceil(D)I" ) ) - private double transferNum(double transfer, @Local BigItemStack entry){ + private double transferNum(double transfer, @Local BigItemStack entry, @Local(ordinal = 2, argsOnly = true) double delta){ if (BigGenericStack.of(entry).get().key() instanceof FluidKey){ - var scrollAmount = transfer/(hasControlDown() ? 10 : 1); //Get back scroll amount - transfer = scrollAmount * (hasControlDown()? 10 : 1000); + transfer = Mth.ceil(Math.abs(delta)) * (hasControlDown()? 10 : 1000); } return transfer; } From 492ec2cb1de6b5d3974999a8335f840b5d80c32d Mon Sep 17 00:00:00 2001 From: Ryan Cooper <45916709+Bumperdo09@users.noreply.github.com> Date: Sun, 8 Mar 2026 17:48:24 -0400 Subject: [PATCH 3/3] Improve how fluid amounts are shown on gauges Milibuckets are now only shown if there is less than 2B of fluid --- .../panel/FactoryFluidPanelBehaviour.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/forge/src/main/java/ru/zznty/create_factory_logistics/logistics/panel/FactoryFluidPanelBehaviour.java b/forge/src/main/java/ru/zznty/create_factory_logistics/logistics/panel/FactoryFluidPanelBehaviour.java index 4205ebf..38af246 100644 --- a/forge/src/main/java/ru/zznty/create_factory_logistics/logistics/panel/FactoryFluidPanelBehaviour.java +++ b/forge/src/main/java/ru/zznty/create_factory_logistics/logistics/panel/FactoryFluidPanelBehaviour.java @@ -121,24 +121,30 @@ public static LangBuilder formatLevel(int level, boolean round) { if (level >= BigItemStack.INF) return CreateLang.text("\u221e"); - if (!round || level < 1000 || level % 1000 != 0) { - if (level % 1000 == 0) - return CreateLang.number((float) level / 1000).add(CreateLang.translate("generic.unit.buckets")); + if (level >= 1_000_000){ // If more than 1k buckets, show as thousands + return CreateLang.number((float) level / 1_000_000) + .add(CreateLang.text("k")) + .add(CreateLang.translate("generic.unit.buckets")); + } + + if (level % 1000 == 0){ //If perfect bucket, show as buckets + return CreateLang.number((float) level / 1000).add(CreateLang.translate("generic.unit.buckets")); + } + if (level < 2_000){ // Less than 2B, always show mb return CreateLang.number(level).add(CreateLang.translate("generic.unit.millibuckets")); } - // 1000 buckets - if (level < 1_000_000) { + if (round){ // If more than 2B and rounding, show as buckets float d = (float) level / 1000; if (d >= 100) - d = Math.round(d); + d = Math.round(d); //stop showing decimals if more than 100B return CreateLang.number(d).add(CreateLang.translate("generic.unit.buckets")); } - return CreateLang.number((float) level / 1_000_000) - .add(CreateLang.text("k")) - .add(CreateLang.translate("generic.unit.buckets")); + // More than 2B and no rounding, show mb + return CreateLang.number(level).add(CreateLang.translate("generic.unit.millibuckets")); + } @Override