Skip to content

Commit 46f54aa

Browse files
committed
Add an option to reverse transfer scan order
1 parent 46fa7ea commit 46f54aa

File tree

10 files changed

+66
-16
lines changed

10 files changed

+66
-16
lines changed

changelog.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,15 @@
22

33
## 2.2.0
44

5+
Note: this version includes networking changes, servers and clients must be upgraded together.
6+
7+
- Added an option to reverse the default transfer iteration order
58
- Added an option to arrange buttons horizontally rather than vertically
69
- Added support for creating separate class policies for unique inventory titles
710
- Added a per-policy option to anchor buttons to the reference slot instead of the GUI edge
11+
12+
## 2.1.8
13+
814
- Fixed detection of CTRL/CMD keys in 1.21.9-11
915

1016
## 2.1.7

common/src/main/java/dev/terminalmc/clientsort/client/config/Config.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ public enum ExtraSlotScope {
113113
public static final boolean bundlesUseLeftClickDefault = false;
114114
public boolean bundlesUseLeftClick = bundlesUseLeftClickDefault;
115115

116+
public static final boolean transferReverseOrderDefault = true;
117+
public boolean transferReverseOrder = transferReverseOrderDefault;
118+
116119
// Matching options
117120

118121
public static final boolean alwaysMatchByTypeDefault = false;

common/src/main/java/dev/terminalmc/clientsort/client/gui/screen/config/ClothScreenProvider.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -183,11 +183,16 @@ else if (val > Config.Options.AUTO_OP_DELAY_MAX)
183183
)
184184
.setTooltip(localized("option", "bundlesUseLeftClick.tooltip"))
185185
.setDefaultValue(Config.Options.bundlesUseLeftClickDefault)
186-
.setSaveConsumer(val -> {
187-
options.bundlesUseLeftClick = val;
188-
if (val)
189-
CreativeSearchOrder.tryRefreshStackPositionMap();
190-
})
186+
.setSaveConsumer(val -> options.bundlesUseLeftClick = val)
187+
.build());
188+
189+
general.addEntry(eb.startBooleanToggle(
190+
localized("option", "transferReverseOrder"),
191+
options.transferReverseOrder
192+
)
193+
.setTooltip(localized("option", "transferReverseOrder.tooltip"))
194+
.setDefaultValue(Config.Options.transferReverseOrderDefault)
195+
.setSaveConsumer(val -> options.transferReverseOrder = val)
191196
.build());
192197

193198
general.addEntry(eb.startBooleanToggle(

common/src/main/java/dev/terminalmc/clientsort/client/inventory/operator/client/ClientSurvivalOperator.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333

3434
import java.util.ArrayDeque;
3535
import java.util.BitSet;
36+
import java.util.function.Function;
3637

3738
import static dev.terminalmc.clientsort.ClientSort.debug;
3839
import static dev.terminalmc.clientsort.client.config.Config.options;
@@ -504,7 +505,11 @@ protected void transfer(Slot[] originSlots) {
504505

505506
// Work backwards from the end of the source slot array, looking for a
506507
// nonempty stack
507-
for (int i = originSlots.length - 1; i >= 0; i--) {
508+
boolean reversed = options().transferReverseOrder;
509+
int start = reversed ? originSlots.length - 1 : 0;
510+
Function<Integer,Boolean> end = reversed ? (i) -> i >= 0 : (i) -> i < originSlots.length;
511+
Function<Integer,Integer> step = reversed ? (i) -> i - 1 : (i) -> i + 1;
512+
for (int i = start; end.apply(i); i = step.apply(i)) {
508513
Slot srcSlot = originSlots[i];
509514
ItemStack srcStack = originStacks[i];
510515

common/src/main/java/dev/terminalmc/clientsort/client/inventory/operator/server/ServerOperator.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,8 @@ protected void fillStacks() {
133133
ClientPlatformServices.getInstance().sendToServer(new StackFillPayload(
134134
screen.getMenu().containerId,
135135
srcSlotIds,
136-
dstSlotIds
136+
dstSlotIds,
137+
options().transferReverseOrder
137138
));
138139
}
139140

@@ -192,7 +193,8 @@ private void transfer(@Nullable Slot[] overrideSlots) {
192193
ClientPlatformServices.getInstance().sendToServer(new TransferPayload(
193194
screen.getMenu().containerId,
194195
srcSlotIds,
195-
dstSlotIds
196+
dstSlotIds,
197+
options().transferReverseOrder
196198
));
197199
}
198200

common/src/main/java/dev/terminalmc/clientsort/network/handler/StackFillHandler.java

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
import net.minecraft.world.inventory.Slot;
3131
import net.minecraft.world.item.ItemStack;
3232

33+
import java.util.function.Function;
34+
3335
import static dev.terminalmc.clientsort.ClientSort.getObj;
3436
import static dev.terminalmc.clientsort.network.handler.validate.SchemaValidator.validateSlotArray;
3537

@@ -56,7 +58,7 @@ public static void handle(
5658
validateSlotArray(player, menu, payload.srcSlotIds());
5759
validateSlotArray(player, menu, payload.dstSlotIds());
5860
},
59-
(menu) -> fillStacks(server, menu, payload.srcSlotIds(), payload.dstSlotIds()),
61+
(menu) -> fillStacks(server, menu, payload.srcSlotIds(), payload.dstSlotIds(), payload.reversed()),
6062
StackFillPayload.TYPE,
6163
StackFillResultPayload.TYPE,
6264
(result, message) -> new StackFillResultPayload(result.code, message)
@@ -67,11 +69,15 @@ private static void fillStacks(
6769
MinecraftServer server,
6870
AbstractContainerMenu menu,
6971
int[] srcSlotIds,
70-
int[] dstSlotIds
72+
int[] dstSlotIds,
73+
boolean reversed
7174
) throws PayloadHandlerException {
7275
// Work backwards from the end of the source array, looking for a
7376
// nonempty stack
74-
for (int i = srcSlotIds.length - 1; i >= 0; i--) {
77+
int start = reversed ? srcSlotIds.length - 1 : 0;
78+
Function<Integer,Boolean> end = reversed ? (i) -> i >= 0 : (i) -> i < srcSlotIds.length;
79+
Function<Integer,Integer> step = reversed ? (i) -> i - 1 : (i) -> i + 1;
80+
for (int i = start; end.apply(i); i = step.apply(i)) {
7581
int srcSlotId = srcSlotIds[i];
7682
Slot srcSlot = menu.slots.get(srcSlotId);
7783
ItemStack srcStack = srcSlot.getItem();

common/src/main/java/dev/terminalmc/clientsort/network/handler/TransferHandler.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@
3030
import net.minecraft.world.inventory.Slot;
3131
import net.minecraft.world.item.ItemStack;
3232

33+
import java.util.function.Function;
34+
3335
import static dev.terminalmc.clientsort.ClientSort.getObj;
3436
import static dev.terminalmc.clientsort.network.handler.validate.SchemaValidator.validateSlotArray;
3537

@@ -56,7 +58,13 @@ public static void handle(
5658
validateSlotArray(player, menu, payload.srcSlotIds());
5759
validateSlotArray(player, menu, payload.dstSlotIds());
5860
},
59-
(menu) -> transfer(server, menu, payload.srcSlotIds(), payload.dstSlotIds()),
61+
(menu) -> transfer(
62+
server,
63+
menu,
64+
payload.srcSlotIds(),
65+
payload.dstSlotIds(),
66+
payload.reversed()
67+
),
6068
TransferPayload.TYPE,
6169
TransferResultPayload.TYPE,
6270
(result, message) -> new TransferResultPayload(result.code, message)
@@ -67,11 +75,15 @@ private static void transfer(
6775
MinecraftServer server,
6876
AbstractContainerMenu menu,
6977
int[] srcSlotIds,
70-
int[] dstSlotIds
78+
int[] dstSlotIds,
79+
boolean reversed
7180
) throws PayloadHandlerException {
7281
// Work backwards from the end of the source array, looking for a
7382
// nonempty stack
74-
for (int i = srcSlotIds.length - 1; i >= 0; i--) {
83+
int start = reversed ? srcSlotIds.length - 1 : 0;
84+
Function<Integer, Boolean> end = reversed ? (i) -> i >= 0 : (i) -> i < srcSlotIds.length;
85+
Function<Integer, Integer> step = reversed ? (i) -> i - 1 : (i) -> i + 1;
86+
for (int i = start; end.apply(i); i = step.apply(i)) {
7587
int srcSlotId = srcSlotIds[i];
7688
Slot srcSlot = menu.slots.get(srcSlotId);
7789
ItemStack srcStack = srcSlot.getItem();

common/src/main/java/dev/terminalmc/clientsort/network/payload/StackFillPayload.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,12 @@
3232
* @param srcSlotIds a sub-array of slots to take items from.
3333
* @param dstSlotIds a sub-array of slots to place items in.
3434
*/
35-
public record StackFillPayload(int srcContainerId, int[] srcSlotIds, int[] dstSlotIds)
35+
public record StackFillPayload(
36+
int srcContainerId,
37+
int[] srcSlotIds,
38+
int[] dstSlotIds,
39+
boolean reversed
40+
)
3641
implements CustomPacketPayload {
3742

3843
public static final StreamCodec<RegistryFriendlyByteBuf, int[]> VAR_INT_ARRAY =
@@ -57,6 +62,8 @@ public void encode(
5762
StackFillPayload::srcSlotIds,
5863
VAR_INT_ARRAY,
5964
StackFillPayload::dstSlotIds,
65+
ByteBufCodecs.BOOL,
66+
StackFillPayload::reversed,
6067
StackFillPayload::new
6168
);
6269

common/src/main/java/dev/terminalmc/clientsort/network/payload/TransferPayload.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
* @param srcSlotIds a sub-array of slots to take items from.
3333
* @param dstSlotIds a sub-array of slots to place items in.
3434
*/
35-
public record TransferPayload(int srcContainerId, int[] srcSlotIds, int[] dstSlotIds)
35+
public record TransferPayload(int srcContainerId, int[] srcSlotIds, int[] dstSlotIds, boolean reversed)
3636
implements CustomPacketPayload {
3737

3838
public static final StreamCodec<RegistryFriendlyByteBuf, int[]> VAR_INT_ARRAY =
@@ -57,6 +57,8 @@ public void encode(
5757
TransferPayload::srcSlotIds,
5858
VAR_INT_ARRAY,
5959
TransferPayload::dstSlotIds,
60+
ByteBufCodecs.BOOL,
61+
TransferPayload::reversed,
6062
TransferPayload::new
6163
);
6264

common/src/main/resources/assets/clientsort/lang/en_us.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@
9292
"option.clientsort.extraSlotScope": "Extra Slot Scope",
9393
"option.clientsort.bundlesUseLeftClick": "Bundles use Left Click",
9494
"option.clientsort.bundlesUseLeftClick.tooltip": "In 1.21.2+, bundles use left-click to load, which can interfere with inventory actions. If playing on a 1.21.2+ server, enable this option.",
95+
"option.clientsort.transferReverseOrder": "Transfer Reverse Order",
96+
"option.clientsort.transferReverseOrder.tooltip": "Whether to scan the source inventory backwards in transfer operations.",
9597
"option.clientsort.showDebugInfo": "Show Debug Info",
9698
"option.clientsort.showDebugInfo.tooltip": "Whether to show debug info on the GUI and enable debug logging. Value will reset when you restart the game.",
9799

0 commit comments

Comments
 (0)