From f69021ab5c7b96e5f1e69b8e16903b41e01fa16a Mon Sep 17 00:00:00 2001 From: TarLaboratories Date: Sun, 31 May 2026 19:30:54 +0300 Subject: [PATCH 1/6] add ability to transfer multiples of specified count --- .../resources/assets/gtceu/lang/en_ud.json | 2 + .../resources/assets/gtceu/lang/en_us.json | 2 + .../gtceu/common/cover/RobotArmCover.java | 39 ++++++++++++++++++- .../gtceu/data/lang/LangHandler.java | 2 + 4 files changed, 43 insertions(+), 2 deletions(-) diff --git a/src/generated/resources/assets/gtceu/lang/en_ud.json b/src/generated/resources/assets/gtceu/lang/en_ud.json index 385b481e206..125cfcce85d 100644 --- a/src/generated/resources/assets/gtceu/lang/en_ud.json +++ b/src/generated/resources/assets/gtceu/lang/en_ud.json @@ -2126,6 +2126,8 @@ "cover.pump.mode.import": "ʇɹodɯI :ǝpoW", "cover.pump.title": ")%s( sbuıʇʇǝS ɹǝʌoƆ dɯnԀ", "cover.pump.transfer_rate": "%s", + "cover.robot_arm.allow_multiples": "sǝןdıʇןnɯ ʍoןןⱯ", + "cover.robot_arm.allow_multiples.tooltip": "uoıʇɐɹǝdo Ɩ uı pǝɹǝɟsuɐɹʇ ǝq ןןıʍ sɯǝʇı 6ᄅ >= ʇndʇno uı ɯǝʇı Ɩ 'ʇnduı uı sɯǝʇı ᄅƐ 'sɯǝʇı ϛ 'ǝpoɯ ʇɔɐxǝ dǝǝʞ - \nuoıʇɐɹǝdo Ɩ uı pǝɹǝɟsuɐɹʇ ǝq ןןıʍ sɯǝʇı 0Ɛ >= ʇnduı uı sɯǝʇı ᄅƐ 'sɯǝʇı ϛ 'ǝpoɯ ʇɔɐxǝ ʎןddnS - \n:ǝןdɯɐxǝ ɹoℲ\n˙ǝpoɯ ʇɔɐxǝ dǝǝʞ/ʎןddns uı uoıʇɐɹǝdo Ɩ uı ʇunoɯɐ pǝıɟıɔǝds ǝɥʇ ɟo sǝןdıʇןnɯ ɹǝɟsuɐɹʇ oʇ ɯɹɐ ʇoqoɹ ǝɥʇ sʍoןןⱯ", "cover.robotic_arm.transfer_mode.description.0": "˙ǝןqıssod sɐ ɹǝʇןıɟ sʇı buıɥɔʇɐɯ sɯǝʇı ʎuɐɯ sɐ ɹǝɟsuɐɹʇ ןןıʍ ɹǝʌoɔ 'ǝpoɯ sıɥʇ uı - ɹ§ʎuⱯ ɹǝɟsuɐɹ⟘ǝ§", "cover.robotic_arm.transfer_mode.description.1": "˙pǝʌoɯ ǝq ʇ,uoʍ sɯǝʇı 'ǝzıs uoıʇɹod uɐɥʇ ssǝן sı sɯǝʇı ɟo ʇunoɯɐ ɟI ˙)ɹǝʇןıɟ bɐʇ ɹoɟ uoʇʇnq sıɥʇ ɹǝpun ǝןqɐıɹɐʌ ɹo( sʇoןs ɹǝʇןıɟ ɯǝʇı uı pǝıɟıɔǝds suoıʇɹod uı sɯǝʇı ʎןddns ןןıʍ ɹǝʌoɔ 'ǝpoɯ sıɥʇ uı - ɹ§ʇɔɐxƎ ʎןddnSǝ§", "cover.robotic_arm.transfer_mode.description.2": "˙pǝɹınbǝɹ ɟı sɯǝʇı ɟo ʇunoɯɐ ןɐuoıʇıppɐ buıʎןddns 'ʎɹoʇuǝʌuı uoıʇɐuıʇsǝp ǝɥʇ uı sɯǝʇı ɟo ʇunoɯɐ pǝıɟıɔǝds dǝǝʞ ןןıʍ ɹǝʌoɔ 'ǝpoɯ sıɥʇ uı - ɹ§ʇɔɐxƎ dǝǝʞǝ§", diff --git a/src/generated/resources/assets/gtceu/lang/en_us.json b/src/generated/resources/assets/gtceu/lang/en_us.json index 0f901a21151..a416032d8e7 100644 --- a/src/generated/resources/assets/gtceu/lang/en_us.json +++ b/src/generated/resources/assets/gtceu/lang/en_us.json @@ -2126,6 +2126,8 @@ "cover.pump.mode.import": "Mode: Import", "cover.pump.title": "Pump Cover Settings (%s)", "cover.pump.transfer_rate": "%s", + "cover.robot_arm.allow_multiples": "Allow multiples", + "cover.robot_arm.allow_multiples.tooltip": "Allows the robot arm to transfer multiples of the specified amount in 1 operation in supply/keep exact mode.\nFor example:\n - Supply exact mode, 5 items, 32 items in input => 30 items will be transfered in 1 operation\n - Keep exact mode, 5 items, 32 items in input, 1 item in output => 29 items will be transfered in 1 operation", "cover.robotic_arm.transfer_mode.description.0": "§eTransfer Any§r - in this mode, cover will transfer as many items matching its filter as possible.", "cover.robotic_arm.transfer_mode.description.1": "§eSupply Exact§r - in this mode, cover will supply items in portions specified in item filter slots (or variable under this button for tag filter). If amount of items is less than portion size, items won't be moved.", "cover.robotic_arm.transfer_mode.description.2": "§eKeep Exact§r - in this mode, cover will keep specified amount of items in the destination inventory, supplying additional amount of items if required.", diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java index 2d08db1f8e6..300243e7e1a 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java @@ -1,5 +1,12 @@ package com.gregtechceu.gtceu.common.cover; +import brachy.modularui.api.drawable.Text; +import brachy.modularui.drawable.GuiTextures; +import brachy.modularui.screen.ModularPanel; +import brachy.modularui.utils.Alignment; +import brachy.modularui.value.sync.BooleanSyncValue; +import brachy.modularui.widgets.TextWidget; +import brachy.modularui.widgets.ToggleButton; import com.gregtechceu.gtceu.api.capability.ICoverable; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.cover.CoverDefinition; @@ -43,6 +50,10 @@ public class RobotArmCover extends ConveyorCover { @SaveField @Getter protected int globalTransferLimit; + @Setter + @SaveField + @Getter + protected boolean allowMultiples; protected int itemsTransferBuffered; public RobotArmCover(CoverDefinition definition, ICoverable coverHolder, Direction attachedSide, int tier, @@ -80,7 +91,11 @@ protected int doTransferExact(IItemHandler sourceInventory, IItemHandler targetI int itemToMoveAmount = getFilteredItemAmount(sourceInfo.itemStack); if (itemAmount >= itemToMoveAmount) { - sourceInfo.totalCount = itemToMoveAmount; + if (allowMultiples) { + sourceInfo.totalCount = itemAmount - (itemAmount % itemToMoveAmount); + } else { + sourceInfo.totalCount = itemToMoveAmount; + } } else { iterator.remove(); } @@ -116,6 +131,7 @@ protected int doKeepExact(IItemHandler sourceInventory, IItemHandler targetInven while (iterator.hasNext()) { ItemStack filteredItem = iterator.next(); GroupItemInfo sourceInfo = sourceItemAmounts.get(filteredItem); + int sourceAmount = sourceInfo.totalCount; int itemToKeepAmount = getFilteredItemAmount(sourceInfo.itemStack); int itemAmount = 0; @@ -123,7 +139,10 @@ protected int doKeepExact(IItemHandler sourceInventory, IItemHandler targetInven GroupItemInfo destItemInfo = targetItemAmounts.get(filteredItem); itemAmount = destItemInfo.totalCount; } - if (itemAmount < itemToKeepAmount) { + int maxMultiple = ((sourceAmount + itemAmount) / itemToKeepAmount)*itemToKeepAmount; + if (allowMultiples && itemAmount < maxMultiple) { + sourceInfo.totalCount = maxMultiple - itemAmount; + } else if (itemAmount < itemToKeepAmount) { sourceInfo.totalCount = itemToKeepAmount - itemAmount; } else { iterator.remove(); @@ -156,6 +175,12 @@ public void clearBuffer() { ////////////////////////////////////// // *********** GUI ***********// + @Override + public ModularPanel buildUI(SidedPosGuiData data, PanelSyncManager syncManager, UISettings settings) { + return super.buildUI(data, syncManager, settings) + .height(192 + 18 + 40); + } + @Override public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManager syncManager, UISettings settings) { @@ -164,14 +189,24 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage var transferMode = new EnumSyncValue<>(TransferMode.class, this::getTransferMode, this::setTransferMode) .allowC2S(); var transferSize = new IntSyncValue(this::getGlobalTransferLimit, this::setGlobalTransferLimit).allowC2S(); + var allowMultiples = new BooleanSyncValue(this::isAllowMultiples, this::setAllowMultiples).allowC2S(); syncManager.syncValue("transferMode", transferMode); syncManager.syncValue("transferSize", transferSize); + syncManager.syncValue("allowMultiples", allowMultiples); GTMuiCoverUtil.addTransferModeRow(column, transferMode); column.child(GTMuiWidgets.createIntInputWithButtons(transferSize, () -> 1, () -> getTransferMode().maxStackSize) .setEnabledIf($ -> shouldShowStackSize())); + column.child(Flow.row() + .child(new ToggleButton() + .value(allowMultiples) + .overlay(true, GuiTextures.CHECKMARK)) + .child(new TextWidget<>(Text.lang("cover.robot_arm.allow_multiples")) + .addTooltipElement(Text.lang("cover.robot_arm.allow_multiples.tooltip")) + .right(0) + .verticalCenter())); } public void setTransferMode(TransferMode transferMode) { diff --git a/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java b/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java index ca620c09b2e..a03c126d51b 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java @@ -474,6 +474,8 @@ public static void init(RegistrateLangProvider provider) { provider.add("cover.conveyor.mode", "Mode: %s"); provider.add("cover.conveyor.mode.export", "Mode: Export"); provider.add("cover.conveyor.mode.import", "Mode: Import"); + provider.add("cover.robot_arm.allow_multiples", "Allow multiples"); + provider.add("cover.robot_arm.allow_multiples.tooltip", "Allows the robot arm to transfer multiples of the specified amount in 1 operation in supply/keep exact mode.\nFor example:\n - Supply exact mode, 5 items, 32 items in input => 30 items will be transfered in 1 operation\n - Keep exact mode, 5 items, 32 items in input, 1 item in output => 29 items will be transfered in 1 operation"); provider.add("cover.distribution.mode.title", "Distribution Mode"); provider.add("cover.distribution.mode.round_robin_global", "Round Robin"); provider.add("cover.distribution.mode.round_robin_prio", "Round Robin with Restriction"); From c01f5ef1b36b3c26080da276a342cc6b2ad22d1c Mon Sep 17 00:00:00 2001 From: TarLaboratories Date: Sun, 31 May 2026 20:14:42 +0300 Subject: [PATCH 2/6] turn this into transfer modes --- .../resources/assets/gtceu/lang/en_ud.json | 8 +++-- .../resources/assets/gtceu/lang/en_us.json | 8 +++-- .../common/cover/FluidRegulatorCover.java | 6 ++-- .../gtceu/common/cover/RobotArmCover.java | 31 +++++++------------ .../gtceu/common/cover/data/TransferMode.java | 4 ++- .../gtceu/data/lang/LangHandler.java | 6 ++-- 6 files changed, 30 insertions(+), 33 deletions(-) diff --git a/src/generated/resources/assets/gtceu/lang/en_ud.json b/src/generated/resources/assets/gtceu/lang/en_ud.json index 125cfcce85d..ba5af3ed1e3 100644 --- a/src/generated/resources/assets/gtceu/lang/en_ud.json +++ b/src/generated/resources/assets/gtceu/lang/en_ud.json @@ -2126,16 +2126,18 @@ "cover.pump.mode.import": "ʇɹodɯI :ǝpoW", "cover.pump.title": ")%s( sbuıʇʇǝS ɹǝʌoƆ dɯnԀ", "cover.pump.transfer_rate": "%s", - "cover.robot_arm.allow_multiples": "sǝןdıʇןnɯ ʍoןןⱯ", - "cover.robot_arm.allow_multiples.tooltip": "uoıʇɐɹǝdo Ɩ uı pǝɹǝɟsuɐɹʇ ǝq ןןıʍ sɯǝʇı 6ᄅ >= ʇndʇno uı ɯǝʇı Ɩ 'ʇnduı uı sɯǝʇı ᄅƐ 'sɯǝʇı ϛ 'ǝpoɯ ʇɔɐxǝ dǝǝʞ - \nuoıʇɐɹǝdo Ɩ uı pǝɹǝɟsuɐɹʇ ǝq ןןıʍ sɯǝʇı 0Ɛ >= ʇnduı uı sɯǝʇı ᄅƐ 'sɯǝʇı ϛ 'ǝpoɯ ʇɔɐxǝ ʎןddnS - \n:ǝןdɯɐxǝ ɹoℲ\n˙ǝpoɯ ʇɔɐxǝ dǝǝʞ/ʎןddns uı uoıʇɐɹǝdo Ɩ uı ʇunoɯɐ pǝıɟıɔǝds ǝɥʇ ɟo sǝןdıʇןnɯ ɹǝɟsuɐɹʇ oʇ ɯɹɐ ʇoqoɹ ǝɥʇ sʍoןןⱯ", "cover.robotic_arm.transfer_mode.description.0": "˙ǝןqıssod sɐ ɹǝʇןıɟ sʇı buıɥɔʇɐɯ sɯǝʇı ʎuɐɯ sɐ ɹǝɟsuɐɹʇ ןןıʍ ɹǝʌoɔ 'ǝpoɯ sıɥʇ uı - ɹ§ʎuⱯ ɹǝɟsuɐɹ⟘ǝ§", "cover.robotic_arm.transfer_mode.description.1": "˙pǝʌoɯ ǝq ʇ,uoʍ sɯǝʇı 'ǝzıs uoıʇɹod uɐɥʇ ssǝן sı sɯǝʇı ɟo ʇunoɯɐ ɟI ˙)ɹǝʇןıɟ bɐʇ ɹoɟ uoʇʇnq sıɥʇ ɹǝpun ǝןqɐıɹɐʌ ɹo( sʇoןs ɹǝʇןıɟ ɯǝʇı uı pǝıɟıɔǝds suoıʇɹod uı sɯǝʇı ʎןddns ןןıʍ ɹǝʌoɔ 'ǝpoɯ sıɥʇ uı - ɹ§ʇɔɐxƎ ʎןddnSǝ§", "cover.robotic_arm.transfer_mode.description.2": "˙pǝɹınbǝɹ ɟı sɯǝʇı ɟo ʇunoɯɐ ןɐuoıʇıppɐ buıʎןddns 'ʎɹoʇuǝʌuı uoıʇɐuıʇsǝp ǝɥʇ uı sɯǝʇı ɟo ʇunoɯɐ pǝıɟıɔǝds dǝǝʞ ןןıʍ ɹǝʌoɔ 'ǝpoɯ sıɥʇ uı - ɹ§ʇɔɐxƎ dǝǝʞǝ§", - "cover.robotic_arm.transfer_mode.description.3": "˙ɹǝʇsɐɟ ʇunoɯɐ ǝbuɐɥɔ oʇ buıʞɔıןɔ ʇɟıɥs ǝsn 'ʇunoɯɐ ɯǝʇı ǝbuɐɥɔ oʇ sʇoןs ɹǝʇןıɟ uo ʞɔıןɔ ʇɥbıɹ/ʇɟǝן :dı⟘ㄥ§", + "cover.robotic_arm.transfer_mode.description.3": "˙)pǝɹɹǝɟsuɐɹʇ ǝq ןןıʍ 0Ɛ 'ʇnduı ǝɥʇ uı sɯǝʇı ᄅƐ ǝɹɐ ǝɹǝɥʇ puɐ 'ϛ sı ʇunoɯɐ ǝɥʇ ɟı ˙ǝ˙ı( uoıʇɐɹǝdo Ɩ uı ʇunoɯɐ pǝıɟıɔǝds ǝɥʇ ɟo ǝןdıʇןnɯ ɐ ɹǝɟsuɐɹʇ uɐɔ ʇnq 'ʇɔɐxǝ ʎןddns ǝʞıן - ɹ§ǝןdıʇןnW ɹǝɟsuɐɹ⟘ǝ§", + "cover.robotic_arm.transfer_mode.description.4": "˙sɯǝʇı ɟo ʇunoɯɐ pǝıɟıɔǝds ǝɥʇ ɟo ǝןdıʇןnɯ ɐ ǝʌɐɥ ןןıʍ ʇndʇno ǝɥʇ ʇɐɥʇ ɥɔns 'ǝןqıssod sɐ sɯǝʇı ʎuɐɯ sɐ ɹǝɟsuɐɹʇ ןןıʍ ɹǝʌoɔ ǝɥʇ 'ǝpoɯ sıɥʇ uı - ɹ§ǝןdıʇןnW dǝǝʞǝ§", + "cover.robotic_arm.transfer_mode.description.5": "˙ɹǝʇsɐɟ ʇunoɯɐ ǝbuɐɥɔ oʇ buıʞɔıןɔ ʇɟıɥs ǝsn 'ʇunoɯɐ ɯǝʇı ǝbuɐɥɔ oʇ sʇoןs ɹǝʇןıɟ uo ʞɔıןɔ ʇɥbıɹ/ʇɟǝן :dı⟘ㄥ§", "cover.robotic_arm.transfer_mode.keep_exact": "ʇɔɐxƎ dǝǝʞ", + "cover.robotic_arm.transfer_mode.keep_multiple": "ǝןdıʇןnW dǝǝʞ", "cover.robotic_arm.transfer_mode.title": "ǝpoW ɹǝɟsuɐɹ⟘", "cover.robotic_arm.transfer_mode.transfer_any": "ʎuⱯ ɹǝɟsuɐɹ⟘", "cover.robotic_arm.transfer_mode.transfer_exact": "ʇɔɐxƎ ʎןddnS", + "cover.robotic_arm.transfer_mode.transfer_multiple": "ǝןdıʇןnW ɹǝɟsuɐɹ⟘", "cover.shutter.message.disabled": "ɹǝʇʇnɥs pǝuǝdO", "cover.shutter.message.enabled": "ɹǝʇʇnɥs pǝsoןƆ", "cover.storage.title": "ɹǝʌoƆ ǝbɐɹoʇS", diff --git a/src/generated/resources/assets/gtceu/lang/en_us.json b/src/generated/resources/assets/gtceu/lang/en_us.json index a416032d8e7..0a02ae10115 100644 --- a/src/generated/resources/assets/gtceu/lang/en_us.json +++ b/src/generated/resources/assets/gtceu/lang/en_us.json @@ -2126,16 +2126,18 @@ "cover.pump.mode.import": "Mode: Import", "cover.pump.title": "Pump Cover Settings (%s)", "cover.pump.transfer_rate": "%s", - "cover.robot_arm.allow_multiples": "Allow multiples", - "cover.robot_arm.allow_multiples.tooltip": "Allows the robot arm to transfer multiples of the specified amount in 1 operation in supply/keep exact mode.\nFor example:\n - Supply exact mode, 5 items, 32 items in input => 30 items will be transfered in 1 operation\n - Keep exact mode, 5 items, 32 items in input, 1 item in output => 29 items will be transfered in 1 operation", "cover.robotic_arm.transfer_mode.description.0": "§eTransfer Any§r - in this mode, cover will transfer as many items matching its filter as possible.", "cover.robotic_arm.transfer_mode.description.1": "§eSupply Exact§r - in this mode, cover will supply items in portions specified in item filter slots (or variable under this button for tag filter). If amount of items is less than portion size, items won't be moved.", "cover.robotic_arm.transfer_mode.description.2": "§eKeep Exact§r - in this mode, cover will keep specified amount of items in the destination inventory, supplying additional amount of items if required.", - "cover.robotic_arm.transfer_mode.description.3": "§7Tip: left/right click on filter slots to change item amount, use shift clicking to change amount faster.", + "cover.robotic_arm.transfer_mode.description.3": "§eTransfer Multiple§r - like supply exact, but can transfer a multiple of the specified amount in 1 operation (i.e. if the amount is 5, and there are 32 items in the input, 30 will be transferred).", + "cover.robotic_arm.transfer_mode.description.4": "§eKeep Multiple§r - in this mode, the cover will transfer as many items as possible, such that the output will have a multiple of the specified amount of items.", + "cover.robotic_arm.transfer_mode.description.5": "§7Tip: left/right click on filter slots to change item amount, use shift clicking to change amount faster.", "cover.robotic_arm.transfer_mode.keep_exact": "Keep Exact", + "cover.robotic_arm.transfer_mode.keep_multiple": "Keep Multiple", "cover.robotic_arm.transfer_mode.title": "Transfer Mode", "cover.robotic_arm.transfer_mode.transfer_any": "Transfer Any", "cover.robotic_arm.transfer_mode.transfer_exact": "Supply Exact", + "cover.robotic_arm.transfer_mode.transfer_multiple": "Transfer Multiple", "cover.shutter.message.disabled": "Opened shutter", "cover.shutter.message.enabled": "Closed shutter", "cover.storage.title": "Storage Cover", diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/FluidRegulatorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/FluidRegulatorCover.java index c50a42f5615..6da2dcf2a49 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/FluidRegulatorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/FluidRegulatorCover.java @@ -68,10 +68,10 @@ public FluidRegulatorCover(CoverDefinition definition, ICoverable coverHolder, D @Override protected int doTransferFluidsInternal(IFluidHandlerModifiable source, IFluidHandlerModifiable destination, int platformTransferLimit) { - return switch (transferMode) { + return switch (transferMode) { // TRANSFER_MULTIPLE and KEEP_MULTIPLE don't do anything special with fluids right now case TRANSFER_ANY -> transferAny(source, destination, platformTransferLimit); - case TRANSFER_EXACT -> transferExact(source, destination, platformTransferLimit); - case KEEP_EXACT -> keepExact(source, destination, platformTransferLimit); + case TRANSFER_EXACT, TRANSFER_MULTIPLE -> transferExact(source, destination, platformTransferLimit); + case KEEP_EXACT, KEEP_MULTIPLE -> keepExact(source, destination, platformTransferLimit); }; } diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java index 300243e7e1a..7baebccaf3c 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java @@ -1,12 +1,5 @@ package com.gregtechceu.gtceu.common.cover; -import brachy.modularui.api.drawable.Text; -import brachy.modularui.drawable.GuiTextures; -import brachy.modularui.screen.ModularPanel; -import brachy.modularui.utils.Alignment; -import brachy.modularui.value.sync.BooleanSyncValue; -import brachy.modularui.widgets.TextWidget; -import brachy.modularui.widgets.ToggleButton; import com.gregtechceu.gtceu.api.capability.ICoverable; import com.gregtechceu.gtceu.api.capability.recipe.IO; import com.gregtechceu.gtceu.api.cover.CoverDefinition; @@ -25,11 +18,16 @@ import net.minecraft.world.item.ItemStack; import net.minecraftforge.items.IItemHandler; +import brachy.modularui.api.drawable.Text; +import brachy.modularui.drawable.GuiTextures; import brachy.modularui.factory.SidedPosGuiData; +import brachy.modularui.screen.ModularPanel; import brachy.modularui.screen.UISettings; import brachy.modularui.value.sync.EnumSyncValue; import brachy.modularui.value.sync.IntSyncValue; import brachy.modularui.value.sync.PanelSyncManager; +import brachy.modularui.widgets.TextWidget; +import brachy.modularui.widgets.ToggleButton; import brachy.modularui.widgets.layout.Flow; import lombok.Getter; import lombok.Setter; @@ -50,10 +48,6 @@ public class RobotArmCover extends ConveyorCover { @SaveField @Getter protected int globalTransferLimit; - @Setter - @SaveField - @Getter - protected boolean allowMultiples; protected int itemsTransferBuffered; public RobotArmCover(CoverDefinition definition, ICoverable coverHolder, Direction attachedSide, int tier, @@ -76,8 +70,8 @@ protected int doTransferItems(IItemHandler itemHandler, IItemHandler myItemHandl } return switch (transferMode) { case TRANSFER_ANY -> moveInventoryItems(itemHandler, myItemHandler, maxTransferAmount); - case TRANSFER_EXACT -> doTransferExact(itemHandler, myItemHandler, maxTransferAmount); - case KEEP_EXACT -> doKeepExact(itemHandler, myItemHandler, maxTransferAmount); + case TRANSFER_EXACT, TRANSFER_MULTIPLE -> doTransferExact(itemHandler, myItemHandler, maxTransferAmount); + case KEEP_EXACT, KEEP_MULTIPLE -> doKeepExact(itemHandler, myItemHandler, maxTransferAmount); }; } @@ -91,7 +85,7 @@ protected int doTransferExact(IItemHandler sourceInventory, IItemHandler targetI int itemToMoveAmount = getFilteredItemAmount(sourceInfo.itemStack); if (itemAmount >= itemToMoveAmount) { - if (allowMultiples) { + if (transferMode == TransferMode.TRANSFER_MULTIPLE) { sourceInfo.totalCount = itemAmount - (itemAmount % itemToMoveAmount); } else { sourceInfo.totalCount = itemToMoveAmount; @@ -139,8 +133,8 @@ protected int doKeepExact(IItemHandler sourceInventory, IItemHandler targetInven GroupItemInfo destItemInfo = targetItemAmounts.get(filteredItem); itemAmount = destItemInfo.totalCount; } - int maxMultiple = ((sourceAmount + itemAmount) / itemToKeepAmount)*itemToKeepAmount; - if (allowMultiples && itemAmount < maxMultiple) { + int maxMultiple = ((sourceAmount + itemAmount) / itemToKeepAmount) * itemToKeepAmount; + if (transferMode == TransferMode.KEEP_MULTIPLE && itemAmount < maxMultiple) { sourceInfo.totalCount = maxMultiple - itemAmount; } else if (itemAmount < itemToKeepAmount) { sourceInfo.totalCount = itemToKeepAmount - itemAmount; @@ -178,7 +172,7 @@ public void clearBuffer() { @Override public ModularPanel buildUI(SidedPosGuiData data, PanelSyncManager syncManager, UISettings settings) { return super.buildUI(data, syncManager, settings) - .height(192 + 18 + 40); + .height(192 + 18 + 20); } @Override @@ -189,11 +183,9 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage var transferMode = new EnumSyncValue<>(TransferMode.class, this::getTransferMode, this::setTransferMode) .allowC2S(); var transferSize = new IntSyncValue(this::getGlobalTransferLimit, this::setGlobalTransferLimit).allowC2S(); - var allowMultiples = new BooleanSyncValue(this::isAllowMultiples, this::setAllowMultiples).allowC2S(); syncManager.syncValue("transferMode", transferMode); syncManager.syncValue("transferSize", transferSize); - syncManager.syncValue("allowMultiples", allowMultiples); GTMuiCoverUtil.addTransferModeRow(column, transferMode); @@ -201,7 +193,6 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage .setEnabledIf($ -> shouldShowStackSize())); column.child(Flow.row() .child(new ToggleButton() - .value(allowMultiples) .overlay(true, GuiTextures.CHECKMARK)) .child(new TextWidget<>(Text.lang("cover.robot_arm.allow_multiples")) .addTooltipElement(Text.lang("cover.robot_arm.allow_multiples.tooltip")) diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/data/TransferMode.java b/src/main/java/com/gregtechceu/gtceu/common/cover/data/TransferMode.java index 8ca75e62bb3..7c73f681226 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/data/TransferMode.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/data/TransferMode.java @@ -6,7 +6,9 @@ public enum TransferMode { TRANSFER_ANY("transfer_any", 1), TRANSFER_EXACT("transfer_exact", 1024), - KEEP_EXACT("keep_exact", 1024); + KEEP_EXACT("keep_exact", 1024), + TRANSFER_MULTIPLE("transfer_multiple", 1024), + KEEP_MULTIPLE("keep_multiple", 1024); public static final TransferMode[] VALUES = values(); diff --git a/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java b/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java index a03c126d51b..564478dd1d5 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java @@ -474,8 +474,6 @@ public static void init(RegistrateLangProvider provider) { provider.add("cover.conveyor.mode", "Mode: %s"); provider.add("cover.conveyor.mode.export", "Mode: Export"); provider.add("cover.conveyor.mode.import", "Mode: Import"); - provider.add("cover.robot_arm.allow_multiples", "Allow multiples"); - provider.add("cover.robot_arm.allow_multiples.tooltip", "Allows the robot arm to transfer multiples of the specified amount in 1 operation in supply/keep exact mode.\nFor example:\n - Supply exact mode, 5 items, 32 items in input => 30 items will be transfered in 1 operation\n - Keep exact mode, 5 items, 32 items in input, 1 item in output => 29 items will be transfered in 1 operation"); provider.add("cover.distribution.mode.title", "Distribution Mode"); provider.add("cover.distribution.mode.round_robin_global", "Round Robin"); provider.add("cover.distribution.mode.round_robin_prio", "Round Robin with Restriction"); @@ -508,8 +506,10 @@ public static void init(RegistrateLangProvider provider) { provider.add("cover.robotic_arm.transfer_mode.transfer_any", "Transfer Any"); provider.add("cover.robotic_arm.transfer_mode.transfer_exact", "Supply Exact"); provider.add("cover.robotic_arm.transfer_mode.keep_exact", "Keep Exact"); + provider.add("cover.robotic_arm.transfer_mode.transfer_multiple", "Transfer Multiple"); + provider.add("cover.robotic_arm.transfer_mode.keep_multiple", "Keep Multiple"); multilineLang(provider, "cover.robotic_arm.transfer_mode.description", - "§eTransfer Any§r - in this mode, cover will transfer as many items matching its filter as possible.\n§eSupply Exact§r - in this mode, cover will supply items in portions specified in item filter slots (or variable under this button for tag filter). If amount of items is less than portion size, items won't be moved.\n§eKeep Exact§r - in this mode, cover will keep specified amount of items in the destination inventory, supplying additional amount of items if required.\n§7Tip: left/right click on filter slots to change item amount, use shift clicking to change amount faster."); + "§eTransfer Any§r - in this mode, cover will transfer as many items matching its filter as possible.\n§eSupply Exact§r - in this mode, cover will supply items in portions specified in item filter slots (or variable under this button for tag filter). If amount of items is less than portion size, items won't be moved.\n§eKeep Exact§r - in this mode, cover will keep specified amount of items in the destination inventory, supplying additional amount of items if required.\n§eTransfer Multiple§r - like supply exact, but can transfer a multiple of the specified amount in 1 operation (i.e. if the amount is 5, and there are 32 items in the input, 30 will be transferred).\n§eKeep Multiple§r - in this mode, the cover will transfer as many items as possible, such that the output will have a multiple of the specified amount of items.\n§7Tip: left/right click on filter slots to change item amount, use shift clicking to change amount faster."); provider.add("cover.pump.title", "Pump Cover Settings (%s)"); provider.add("cover.pump.transfer_rate", "%s"); provider.add("cover.pump.mode.export", "Mode: Export"); From 55cfe8998ac1ed2be47ad7347026198d55126c89 Mon Sep 17 00:00:00 2001 From: TarLaboratories Date: Sun, 31 May 2026 22:35:59 +0300 Subject: [PATCH 3/6] add textures --- .../gtceu/common/mui/GTGuiTextures.java | 2 +- .../gui/overlay/transfer_mode_overlay.png | Bin 378 -> 1240 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuiTextures.java b/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuiTextures.java index 8896f43443f..0ed0bf624cd 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuiTextures.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTGuiTextures.java @@ -206,7 +206,7 @@ interface IDs { 18, 18 * 2, 18, 18, ColorType.DEFAULT); UITexture[] TRANSFER_MODE_OVERLAY = slice("textures/gui/overlay/transfer_mode_overlay.png", - 40, 40 * 3, 40, 40, ColorType.DEFAULT); + 40, 40 * 5, 40, 40, ColorType.DEFAULT); UITexture[] BUTTON_DISTINCT = slice( "textures/gui/widget/button_distinct_buses.png", diff --git a/src/main/resources/assets/gtceu/textures/gui/overlay/transfer_mode_overlay.png b/src/main/resources/assets/gtceu/textures/gui/overlay/transfer_mode_overlay.png index 5d25ec7dfa4cd2a00740abfcff18dc40ccce2079..c6b07db091016295ac9a562e62e785034c7d56ba 100644 GIT binary patch delta 1233 zcmeyxbc1t(c>M_uHUlFzsbG9Fo3ZbX0*~u+PO>q{`}hiUpV0#_oU_`gVzq*;>!d0(qvD3d(9Un^QZVp zmer;C`j$Ulo}Bu#(B*~1t@V-YKf7-2)?0IiscAy%68Vkc!IBPU^>5`4Eb7_RFz2tx zr0Q_t>RJt^Cl98*liv7lUbIm^LpndhHnrR9!<5s%CiO66$2ULi^6lgNnH=%Ii^1JL z``|?P#lJ(Yr!rn<2-TW?hT+?T9pNWrzuU}V-E+{^zG6$Vn87XiAG6jh2OChsyum`j zx{`T9b@=3s*Rr0hiR;O)XAomgQD>Uc9Lc`vZ~h&}fBvgaMr4~7h3OwNXXs|$B+Pi~ z;2P$eb$1;tXOt@3UT>|zzL_uOcPaaSeRl2nZt;ajr?_ic{y4Gj)T3BFGx^dxlI4tt z3|V$^O*kyTuAJl|vvPNuXadW{)vXf*6?&DK8shg%T&wPOMd!Kur?@MB{?vCVAIQFV zPJ!u2qu{}Q<`dV1m9wUOR<6{~s;fIH_+aacrwcfb?_AAb$+A&h$?eF*UD;ubZUSqg z#QToLHaHhpGg?-A?3R&fN}kA2sHki?qp&~DvV&Xlg?r-;Oh+O@2fy^1J z32(2XlIM0op3#(T@jj7a$Va!n2->+Pm)!Nbja{ASd zy-}6>pY?<@%#)VQ-_LjR^zmuC`<*9fGrng~{;c;T&%w@xLz3~*jY+vab0q|;Cpu5t zef*5?nvFXoln*35T<6Jh!avztaQ)XS*LFk&s>Q412r=H8wf(r74EuYwdY*@6%w-Sn zF+EWi+F0-HTwwD4Usoc>RK_E%>RgUdM|l#m&o8ZHOnW;8=4en>vxTu@u&Ch>DhhozF+l^M!OMKH$tsCR4J z8=g1iS7aY5{3h&R=JZ7|$>ohJUu2)e%{%>T|7?B6`QYjnjTeUs&*>dd+%dOdj_s0I zKE8t+JsNgQm?(2*hkO0|a?2Bu!9owF|xt^5)e112d&3dxH zI9Y2-bMUsEYL+j~%;0(oS9)kF-zT06*<3H~ZQ&Bw@cZ7@JGH*$`;d?0??Q{{En^rYt*!Hh5k1EK~G8aIQX2f2#8djtR%6C2W;4 z+_baz$%Og8XUyu{bM&YLqZoI&uaZNZRCHIx+U47pg(}BK{}*Mv)bO=KLQwfpXx5=Z z2mT4B`C2WHAIK?4E5tY->A1J1?b}Pna}FOI1Fl%J9A~q2;B(69=n&j{f00}Q3*!f2 z*J{&jTLGDA#Sm{@QIgEqXLU77ojv+o&$FiwRs^ptE!yz(Ohz0ZNcg)r o1H=FSwa3f!fdv&CsDxr>$W_=q@p#m=k3bOyPgg&ebxsLQ0C#6So&W#< delta 364 zcmV-y0h9jN3Hkz%7k_vN1^@s6fN-#y00001b5ch_0Itp)=>Px$G)Y83RCt{2+uaVr zAPk0KX1xFV+tthi<4?#ag|-&6_c@#nzm$nuW+?ywAk&ucnn&aKX_i}H5Eq#Nx1yNA z*?_HSa%ZWaHRPcg!#c&`m7IMS*TKS818LyV>V$;62aMTU=YNLQK`G!!b;G9EV;yXT zQ>}A7)_~z3m6mI;7tUn~nyp~Qmkdmam@3zGkne+51hiT{AOHXW0ANAt)?DV#PE|;+ zfc2(~YLiCuoE3h!iy=MsNxsK8gkvM)ysc0{kyit=uH0EA&z|4Su|frxY{+ZhD2|Y*v0000< KMNUMnLSTZBJFWWw From 242562182d047ef61bc2d12f803897b7323c71af Mon Sep 17 00:00:00 2001 From: TarLaboratories Date: Sun, 31 May 2026 22:38:19 +0300 Subject: [PATCH 4/6] spotless --- .../gregtechceu/gtceu/common/cover/FluidRegulatorCover.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/FluidRegulatorCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/FluidRegulatorCover.java index 6da2dcf2a49..b261df2c354 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/FluidRegulatorCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/FluidRegulatorCover.java @@ -68,7 +68,8 @@ public FluidRegulatorCover(CoverDefinition definition, ICoverable coverHolder, D @Override protected int doTransferFluidsInternal(IFluidHandlerModifiable source, IFluidHandlerModifiable destination, int platformTransferLimit) { - return switch (transferMode) { // TRANSFER_MULTIPLE and KEEP_MULTIPLE don't do anything special with fluids right now + return switch (transferMode) { // TRANSFER_MULTIPLE and KEEP_MULTIPLE don't do anything special with fluids + // right now case TRANSFER_ANY -> transferAny(source, destination, platformTransferLimit); case TRANSFER_EXACT, TRANSFER_MULTIPLE -> transferExact(source, destination, platformTransferLimit); case KEEP_EXACT, KEEP_MULTIPLE -> keepExact(source, destination, platformTransferLimit); From 9c7c0a11474259b22c3108789deb7732e73d4324 Mon Sep 17 00:00:00 2001 From: TarLaboratories Date: Mon, 1 Jun 2026 21:33:55 +0300 Subject: [PATCH 5/6] adjust ui width --- .../java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java index 7baebccaf3c..2b76a45f481 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java @@ -172,7 +172,8 @@ public void clearBuffer() { @Override public ModularPanel buildUI(SidedPosGuiData data, PanelSyncManager syncManager, UISettings settings) { return super.buildUI(data, syncManager, settings) - .height(192 + 18 + 20); + .height(192 + 18 + 20) + .width(176 + 20); } @Override From 26fd3793f3a14f2f4ac4c11bf5dec3d0df9f6495 Mon Sep 17 00:00:00 2001 From: TarLaboratories Date: Mon, 1 Jun 2026 21:45:40 +0300 Subject: [PATCH 6/6] add tooltips to each button explaining the mode --- .../resources/assets/gtceu/lang/en_ud.json | 17 ++++++----------- .../resources/assets/gtceu/lang/en_us.json | 17 ++++++----------- .../gregtechceu/gtceu/api/cover/IMuiCover.java | 3 +-- .../gtceu/common/cover/RobotArmCover.java | 11 ----------- .../gtceu/common/mui/GTMuiCoverUtil.java | 9 +++------ .../gtceu/data/lang/LangHandler.java | 17 +++++++++++------ 6 files changed, 27 insertions(+), 47 deletions(-) diff --git a/src/generated/resources/assets/gtceu/lang/en_ud.json b/src/generated/resources/assets/gtceu/lang/en_ud.json index ba5af3ed1e3..22e72efe603 100644 --- a/src/generated/resources/assets/gtceu/lang/en_ud.json +++ b/src/generated/resources/assets/gtceu/lang/en_ud.json @@ -2126,18 +2126,13 @@ "cover.pump.mode.import": "ʇɹodɯI :ǝpoW", "cover.pump.title": ")%s( sbuıʇʇǝS ɹǝʌoƆ dɯnԀ", "cover.pump.transfer_rate": "%s", - "cover.robotic_arm.transfer_mode.description.0": "˙ǝןqıssod sɐ ɹǝʇןıɟ sʇı buıɥɔʇɐɯ sɯǝʇı ʎuɐɯ sɐ ɹǝɟsuɐɹʇ ןןıʍ ɹǝʌoɔ 'ǝpoɯ sıɥʇ uı - ɹ§ʎuⱯ ɹǝɟsuɐɹ⟘ǝ§", - "cover.robotic_arm.transfer_mode.description.1": "˙pǝʌoɯ ǝq ʇ,uoʍ sɯǝʇı 'ǝzıs uoıʇɹod uɐɥʇ ssǝן sı sɯǝʇı ɟo ʇunoɯɐ ɟI ˙)ɹǝʇןıɟ bɐʇ ɹoɟ uoʇʇnq sıɥʇ ɹǝpun ǝןqɐıɹɐʌ ɹo( sʇoןs ɹǝʇןıɟ ɯǝʇı uı pǝıɟıɔǝds suoıʇɹod uı sɯǝʇı ʎןddns ןןıʍ ɹǝʌoɔ 'ǝpoɯ sıɥʇ uı - ɹ§ʇɔɐxƎ ʎןddnSǝ§", - "cover.robotic_arm.transfer_mode.description.2": "˙pǝɹınbǝɹ ɟı sɯǝʇı ɟo ʇunoɯɐ ןɐuoıʇıppɐ buıʎןddns 'ʎɹoʇuǝʌuı uoıʇɐuıʇsǝp ǝɥʇ uı sɯǝʇı ɟo ʇunoɯɐ pǝıɟıɔǝds dǝǝʞ ןןıʍ ɹǝʌoɔ 'ǝpoɯ sıɥʇ uı - ɹ§ʇɔɐxƎ dǝǝʞǝ§", - "cover.robotic_arm.transfer_mode.description.3": "˙)pǝɹɹǝɟsuɐɹʇ ǝq ןןıʍ 0Ɛ 'ʇnduı ǝɥʇ uı sɯǝʇı ᄅƐ ǝɹɐ ǝɹǝɥʇ puɐ 'ϛ sı ʇunoɯɐ ǝɥʇ ɟı ˙ǝ˙ı( uoıʇɐɹǝdo Ɩ uı ʇunoɯɐ pǝıɟıɔǝds ǝɥʇ ɟo ǝןdıʇןnɯ ɐ ɹǝɟsuɐɹʇ uɐɔ ʇnq 'ʇɔɐxǝ ʎןddns ǝʞıן - ɹ§ǝןdıʇןnW ɹǝɟsuɐɹ⟘ǝ§", - "cover.robotic_arm.transfer_mode.description.4": "˙sɯǝʇı ɟo ʇunoɯɐ pǝıɟıɔǝds ǝɥʇ ɟo ǝןdıʇןnɯ ɐ ǝʌɐɥ ןןıʍ ʇndʇno ǝɥʇ ʇɐɥʇ ɥɔns 'ǝןqıssod sɐ sɯǝʇı ʎuɐɯ sɐ ɹǝɟsuɐɹʇ ןןıʍ ɹǝʌoɔ ǝɥʇ 'ǝpoɯ sıɥʇ uı - ɹ§ǝןdıʇןnW dǝǝʞǝ§", - "cover.robotic_arm.transfer_mode.description.5": "˙ɹǝʇsɐɟ ʇunoɯɐ ǝbuɐɥɔ oʇ buıʞɔıןɔ ʇɟıɥs ǝsn 'ʇunoɯɐ ɯǝʇı ǝbuɐɥɔ oʇ sʇoןs ɹǝʇןıɟ uo ʞɔıןɔ ʇɥbıɹ/ʇɟǝן :dı⟘ㄥ§", - "cover.robotic_arm.transfer_mode.keep_exact": "ʇɔɐxƎ dǝǝʞ", - "cover.robotic_arm.transfer_mode.keep_multiple": "ǝןdıʇןnW dǝǝʞ", + "cover.robotic_arm.transfer_mode.description.0": "˙ɹǝʇsɐɟ ʇunoɯɐ ǝbuɐɥɔ oʇ buıʞɔıןɔ ʇɟıɥs ǝsn 'ʇunoɯɐ ɯǝʇı ǝbuɐɥɔ oʇ sʇoןs ɹǝʇןıɟ uo ʞɔıןɔ ʇɥbıɹ/ʇɟǝן :dı⟘ㄥ§", + "cover.robotic_arm.transfer_mode.keep_exact": "˙pǝɹınbǝɹ ɟı sɯǝʇı ɟo ʇunoɯɐ ןɐuoıʇıppɐ buıʎןddns 'ʎɹoʇuǝʌuı uoıʇɐuıʇsǝp ǝɥʇ uı sɯǝʇı ɟo ʇunoɯɐ pǝıɟıɔǝds dǝǝʞ ןןıʍ ɹǝʌoɔ 'ǝpoɯ sıɥʇ uı - ɹ§ʇɔɐxƎ dǝǝʞǝ§", + "cover.robotic_arm.transfer_mode.keep_multiple": "˙sɯǝʇı ɟo ʇunoɯɐ pǝıɟıɔǝds ǝɥʇ ɟo ǝןdıʇןnɯ ɐ ǝʌɐɥ ןןıʍ ʇndʇno ǝɥʇ ʇɐɥʇ ɥɔns 'ǝןqıssod sɐ sɯǝʇı ʎuɐɯ sɐ ɹǝɟsuɐɹʇ ןןıʍ ɹǝʌoɔ ǝɥʇ 'ǝpoɯ sıɥʇ uı - ɹ§ǝןdıʇןnW dǝǝʞǝ§", "cover.robotic_arm.transfer_mode.title": "ǝpoW ɹǝɟsuɐɹ⟘", - "cover.robotic_arm.transfer_mode.transfer_any": "ʎuⱯ ɹǝɟsuɐɹ⟘", - "cover.robotic_arm.transfer_mode.transfer_exact": "ʇɔɐxƎ ʎןddnS", - "cover.robotic_arm.transfer_mode.transfer_multiple": "ǝןdıʇןnW ɹǝɟsuɐɹ⟘", + "cover.robotic_arm.transfer_mode.transfer_any": "˙ǝןqıssod sɐ ɹǝʇןıɟ sʇı buıɥɔʇɐɯ sɯǝʇı ʎuɐɯ sɐ ɹǝɟsuɐɹʇ ןןıʍ ɹǝʌoɔ 'ǝpoɯ sıɥʇ uı - ɹ§ʎuⱯ ɹǝɟsuɐɹ⟘ǝ§", + "cover.robotic_arm.transfer_mode.transfer_exact": "˙pǝʌoɯ ǝq ʇ,uoʍ sɯǝʇı 'ǝzıs uoıʇɹod uɐɥʇ ssǝן sı sɯǝʇı ɟo ʇunoɯɐ ɟI ˙)ɹǝʇןıɟ bɐʇ ɹoɟ uoʇʇnq sıɥʇ ɹǝpun ǝןqɐıɹɐʌ ɹo( sʇoןs ɹǝʇןıɟ ɯǝʇı uı pǝıɟıɔǝds suoıʇɹod uı sɯǝʇı ʎןddns ןןıʍ ɹǝʌoɔ 'ǝpoɯ sıɥʇ uı - ɹ§ʇɔɐxƎ ʎןddnSǝ§", + "cover.robotic_arm.transfer_mode.transfer_multiple": "˙)pǝɹɹǝɟsuɐɹʇ ǝq ןןıʍ 0Ɛ 'ʇnduı ǝɥʇ uı sɯǝʇı ᄅƐ ǝɹɐ ǝɹǝɥʇ puɐ 'ϛ sı ʇunoɯɐ ǝɥʇ ɟı ˙ǝ˙ı( uoıʇɐɹǝdo Ɩ uı ʇunoɯɐ pǝıɟıɔǝds ǝɥʇ ɟo ǝןdıʇןnɯ ɐ ɹǝɟsuɐɹʇ uɐɔ ʇnq 'ʇɔɐxǝ ʎןddns ǝʞıן - ɹ§ǝןdıʇןnW ɹǝɟsuɐɹ⟘ǝ§", "cover.shutter.message.disabled": "ɹǝʇʇnɥs pǝuǝdO", "cover.shutter.message.enabled": "ɹǝʇʇnɥs pǝsoןƆ", "cover.storage.title": "ɹǝʌoƆ ǝbɐɹoʇS", diff --git a/src/generated/resources/assets/gtceu/lang/en_us.json b/src/generated/resources/assets/gtceu/lang/en_us.json index 0a02ae10115..1dac70bb047 100644 --- a/src/generated/resources/assets/gtceu/lang/en_us.json +++ b/src/generated/resources/assets/gtceu/lang/en_us.json @@ -2126,18 +2126,13 @@ "cover.pump.mode.import": "Mode: Import", "cover.pump.title": "Pump Cover Settings (%s)", "cover.pump.transfer_rate": "%s", - "cover.robotic_arm.transfer_mode.description.0": "§eTransfer Any§r - in this mode, cover will transfer as many items matching its filter as possible.", - "cover.robotic_arm.transfer_mode.description.1": "§eSupply Exact§r - in this mode, cover will supply items in portions specified in item filter slots (or variable under this button for tag filter). If amount of items is less than portion size, items won't be moved.", - "cover.robotic_arm.transfer_mode.description.2": "§eKeep Exact§r - in this mode, cover will keep specified amount of items in the destination inventory, supplying additional amount of items if required.", - "cover.robotic_arm.transfer_mode.description.3": "§eTransfer Multiple§r - like supply exact, but can transfer a multiple of the specified amount in 1 operation (i.e. if the amount is 5, and there are 32 items in the input, 30 will be transferred).", - "cover.robotic_arm.transfer_mode.description.4": "§eKeep Multiple§r - in this mode, the cover will transfer as many items as possible, such that the output will have a multiple of the specified amount of items.", - "cover.robotic_arm.transfer_mode.description.5": "§7Tip: left/right click on filter slots to change item amount, use shift clicking to change amount faster.", - "cover.robotic_arm.transfer_mode.keep_exact": "Keep Exact", - "cover.robotic_arm.transfer_mode.keep_multiple": "Keep Multiple", + "cover.robotic_arm.transfer_mode.description.0": "§7Tip: left/right click on filter slots to change item amount, use shift clicking to change amount faster.", + "cover.robotic_arm.transfer_mode.keep_exact": "§eKeep Exact§r - in this mode, cover will keep specified amount of items in the destination inventory, supplying additional amount of items if required.", + "cover.robotic_arm.transfer_mode.keep_multiple": "§eKeep Multiple§r - in this mode, the cover will transfer as many items as possible, such that the output will have a multiple of the specified amount of items.", "cover.robotic_arm.transfer_mode.title": "Transfer Mode", - "cover.robotic_arm.transfer_mode.transfer_any": "Transfer Any", - "cover.robotic_arm.transfer_mode.transfer_exact": "Supply Exact", - "cover.robotic_arm.transfer_mode.transfer_multiple": "Transfer Multiple", + "cover.robotic_arm.transfer_mode.transfer_any": "§eTransfer Any§r - in this mode, cover will transfer as many items matching its filter as possible.", + "cover.robotic_arm.transfer_mode.transfer_exact": "§eSupply Exact§r - in this mode, cover will supply items in portions specified in item filter slots (or variable under this button for tag filter). If amount of items is less than portion size, items won't be moved.", + "cover.robotic_arm.transfer_mode.transfer_multiple": "§eTransfer Multiple§r - like supply exact, but can transfer a multiple of the specified amount in 1 operation (i.e. if the amount is 5, and there are 32 items in the input, 30 will be transferred).", "cover.shutter.message.disabled": "Opened shutter", "cover.shutter.message.enabled": "Closed shutter", "cover.storage.title": "Storage Cover", diff --git a/src/main/java/com/gregtechceu/gtceu/api/cover/IMuiCover.java b/src/main/java/com/gregtechceu/gtceu/api/cover/IMuiCover.java index 82c03427bec..1c74d8f1965 100644 --- a/src/main/java/com/gregtechceu/gtceu/api/cover/IMuiCover.java +++ b/src/main/java/com/gregtechceu/gtceu/api/cover/IMuiCover.java @@ -17,7 +17,6 @@ import brachy.modularui.value.BoolValue; import brachy.modularui.value.sync.EnumSyncValue; import brachy.modularui.value.sync.PanelSyncManager; -import brachy.modularui.widgets.SlotGroupWidget; import brachy.modularui.widgets.layout.Flow; public interface IMuiCover extends IUIHolder { @@ -57,7 +56,7 @@ default ModularPanel buildUI(SidedPosGuiData data, PanelSyncManager syncManag createCoverUIRows(column, data, syncManager, settings); return panel.child(column) - .child(SlotGroupWidget.playerInventory(false).left(7).bottom(7)); + .bindPlayerInventory(); } /** diff --git a/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java b/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java index 2b76a45f481..26425d24236 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java +++ b/src/main/java/com/gregtechceu/gtceu/common/cover/RobotArmCover.java @@ -18,16 +18,12 @@ import net.minecraft.world.item.ItemStack; import net.minecraftforge.items.IItemHandler; -import brachy.modularui.api.drawable.Text; -import brachy.modularui.drawable.GuiTextures; import brachy.modularui.factory.SidedPosGuiData; import brachy.modularui.screen.ModularPanel; import brachy.modularui.screen.UISettings; import brachy.modularui.value.sync.EnumSyncValue; import brachy.modularui.value.sync.IntSyncValue; import brachy.modularui.value.sync.PanelSyncManager; -import brachy.modularui.widgets.TextWidget; -import brachy.modularui.widgets.ToggleButton; import brachy.modularui.widgets.layout.Flow; import lombok.Getter; import lombok.Setter; @@ -192,13 +188,6 @@ public void createCoverUIRows(Flow column, SidedPosGuiData data, PanelSyncManage column.child(GTMuiWidgets.createIntInputWithButtons(transferSize, () -> 1, () -> getTransferMode().maxStackSize) .setEnabledIf($ -> shouldShowStackSize())); - column.child(Flow.row() - .child(new ToggleButton() - .overlay(true, GuiTextures.CHECKMARK)) - .child(new TextWidget<>(Text.lang("cover.robot_arm.allow_multiples")) - .addTooltipElement(Text.lang("cover.robot_arm.allow_multiples.tooltip")) - .right(0) - .verticalCenter())); } public void setTransferMode(TransferMode transferMode) { diff --git a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiCoverUtil.java b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiCoverUtil.java index 7013b9103ed..cba8f5df91b 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiCoverUtil.java +++ b/src/main/java/com/gregtechceu/gtceu/common/mui/GTMuiCoverUtil.java @@ -4,6 +4,7 @@ import com.gregtechceu.gtceu.common.cover.data.FilterMode; import com.gregtechceu.gtceu.common.cover.data.ManualIOMode; import com.gregtechceu.gtceu.common.cover.data.TransferMode; +import com.gregtechceu.gtceu.data.lang.LangHandler; import net.minecraft.network.chat.Component; @@ -65,12 +66,8 @@ public static void addFilterModeRow(Flow column, EnumSyncValue value } public static void addTransferModeRow(Flow column, EnumSyncValue value) { - Component[] transferModeDesc = { - Component.translatable("cover.robotic_arm.transfer_mode.description.0"), - Component.translatable("cover.robotic_arm.transfer_mode.description.1"), - Component.translatable("cover.robotic_arm.transfer_mode.description.2"), - Component.translatable("cover.robotic_arm.transfer_mode.description.3"), - }; + Component[] transferModeDesc = LangHandler.getMultiLang("cover.robotic_arm.transfer_mode.description") + .toArray(new Component[0]); column.child(new GTMuiWidgets.EnumRowBuilder<>(TransferMode.class) .value(value) .buttonTooltipSupplier((v) -> () -> Component.translatable(v.getTooltip())) diff --git a/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java b/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java index 564478dd1d5..36bfd2217c3 100644 --- a/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java +++ b/src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java @@ -503,13 +503,18 @@ public static void init(RegistrateLangProvider provider) { multiLang(provider, "cover.conveyor.tag.title", "Tag Name", "(use * for wildcard)"); provider.add("cover.robotic_arm.transfer_mode.title", "Transfer Mode"); - provider.add("cover.robotic_arm.transfer_mode.transfer_any", "Transfer Any"); - provider.add("cover.robotic_arm.transfer_mode.transfer_exact", "Supply Exact"); - provider.add("cover.robotic_arm.transfer_mode.keep_exact", "Keep Exact"); - provider.add("cover.robotic_arm.transfer_mode.transfer_multiple", "Transfer Multiple"); - provider.add("cover.robotic_arm.transfer_mode.keep_multiple", "Keep Multiple"); + provider.add("cover.robotic_arm.transfer_mode.transfer_any", + "§eTransfer Any§r - in this mode, cover will transfer as many items matching its filter as possible."); + provider.add("cover.robotic_arm.transfer_mode.transfer_exact", + "§eSupply Exact§r - in this mode, cover will supply items in portions specified in item filter slots (or variable under this button for tag filter). If amount of items is less than portion size, items won't be moved."); + provider.add("cover.robotic_arm.transfer_mode.keep_exact", + "§eKeep Exact§r - in this mode, cover will keep specified amount of items in the destination inventory, supplying additional amount of items if required."); + provider.add("cover.robotic_arm.transfer_mode.transfer_multiple", + "§eTransfer Multiple§r - like supply exact, but can transfer a multiple of the specified amount in 1 operation (i.e. if the amount is 5, and there are 32 items in the input, 30 will be transferred)."); + provider.add("cover.robotic_arm.transfer_mode.keep_multiple", + "§eKeep Multiple§r - in this mode, the cover will transfer as many items as possible, such that the output will have a multiple of the specified amount of items."); multilineLang(provider, "cover.robotic_arm.transfer_mode.description", - "§eTransfer Any§r - in this mode, cover will transfer as many items matching its filter as possible.\n§eSupply Exact§r - in this mode, cover will supply items in portions specified in item filter slots (or variable under this button for tag filter). If amount of items is less than portion size, items won't be moved.\n§eKeep Exact§r - in this mode, cover will keep specified amount of items in the destination inventory, supplying additional amount of items if required.\n§eTransfer Multiple§r - like supply exact, but can transfer a multiple of the specified amount in 1 operation (i.e. if the amount is 5, and there are 32 items in the input, 30 will be transferred).\n§eKeep Multiple§r - in this mode, the cover will transfer as many items as possible, such that the output will have a multiple of the specified amount of items.\n§7Tip: left/right click on filter slots to change item amount, use shift clicking to change amount faster."); + "§7Tip: left/right click on filter slots to change item amount, use shift clicking to change amount faster."); provider.add("cover.pump.title", "Pump Cover Settings (%s)"); provider.add("cover.pump.transfer_rate", "%s"); provider.add("cover.pump.mode.export", "Mode: Export");