Skip to content

Commit 7659e7c

Browse files
committed
Add auto op triggering
1 parent f18d7b5 commit 7659e7c

18 files changed

Lines changed: 241 additions & 46 deletions

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

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import java.text.ParseException;
2424
import java.util.Arrays;
25+
import java.util.List;
2526
import java.util.Set;
2627
import java.util.TreeSet;
2728
import java.util.regex.Matcher;
@@ -37,6 +38,8 @@ public record ClassPolicy(
3738
@NotNull Policy stackFillPolicy,
3839
@NotNull Policy matchTransferPolicy,
3940
@NotNull Policy transferPolicy,
41+
@Nullable Operation autoOp,
42+
boolean autoOpOther,
4043
@NotNull TreeSet<Integer> ignoredSlots
4144
) {
4245

@@ -94,11 +97,27 @@ public boolean showTransferButton() {
9497
return transferPolicy.button;
9598
}
9699

100+
public boolean autoSort() {
101+
return autoOp == Operation.SORT;
102+
}
103+
104+
public boolean autoStackFill() {
105+
return autoOp == Operation.STACK_FILL;
106+
}
107+
108+
public boolean autoMatchTransfer() {
109+
return autoOp == Operation.MATCH_TRANSFER;
110+
}
111+
112+
public boolean autoTransfer() {
113+
return autoOp == Operation.TRANSFER;
114+
}
115+
97116
// Config data-string serialization
98117

99-
public static final String DATA_FORMAT = "%s,(%s),%s,%s,%s,%s,(%s)";
118+
public static final String DATA_FORMAT = "%s,(%s),%s,%s,%s,%s,%d%s,(%s)";
100119
public static final String DATA_PATTERN_STRING =
101-
"^(.+),\\((?:(-?\\d+),(-?\\d+))?\\),([012]),([012]),([012]),([012]),\\(((?:\\d+(?:,\\d+)*)?)\\)$";
120+
"^(.+),\\((?:(-?\\d+),(-?\\d+))?\\),([012]),([012]),([012]),([012]),([01234])([NR]),\\(((?:\\d+(?:,\\d+)*)?)\\)$";
102121
public static final Pattern DATA_PATTERN = Pattern.compile(DATA_PATTERN_STRING);
103122

104123
public String toDataString() {
@@ -110,6 +129,8 @@ public String toDataString() {
110129
stackFillPolicy.toSimpleString(),
111130
matchTransferPolicy.toSimpleString(),
112131
transferPolicy.toSimpleString(),
132+
autoOp == null ? 0 : List.of(Operation.values()).indexOf(autoOp) + 1,
133+
autoOpOther ? "R" : "N",
113134
Strings.join(ignoredSlots.stream().map(String::valueOf).toList(), ",")
114135
);
115136
}
@@ -159,7 +180,12 @@ public static ClassPolicy fromDataString(
159180
Policy.fromSimpleString(matcher.group(5)),
160181
Policy.fromSimpleString(matcher.group(6)),
161182
Policy.fromSimpleString(matcher.group(7)),
162-
new TreeSet<>(Arrays.stream(matcher.group(8).split(",")).filter((s) -> !s.isBlank())
183+
matcher.group(8).equals("0")
184+
? null
185+
: Operation.values()[Integer.parseInt(matcher.group(8)) - 1],
186+
matcher.group(9).equals("R"),
187+
new TreeSet<>(Arrays.stream(matcher.group(10).split(","))
188+
.filter((s) -> !s.isBlank())
163189
.map(Integer::parseInt).sorted().toList())
164190
);
165191
}

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

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import com.google.gson.GsonBuilder;
2121
import dev.terminalmc.clientsort.client.ClientSort;
2222
import dev.terminalmc.clientsort.client.config.legacy.ButtonLayout;
23-
import dev.terminalmc.clientsort.client.inventory.operator.Operation;
2423
import dev.terminalmc.clientsort.client.order.SortOrder;
2524
import dev.terminalmc.clientsort.platform.Services;
2625
import net.minecraft.resources.ResourceLocation;
@@ -292,6 +291,8 @@ private static Operation validateUniqueOp(
292291
Policy.KEYBIND,
293292
Policy.KEYBIND_BUTTON,
294293
Policy.KEYBIND_BUTTON,
294+
null,
295+
false,
295296
new TreeSet<>()
296297
),
297298
new ClassPolicy(
@@ -301,6 +302,8 @@ private static Operation validateUniqueOp(
301302
Policy.KEYBIND_BUTTON,
302303
Policy.KEYBIND_BUTTON,
303304
Policy.KEYBIND_BUTTON,
305+
null,
306+
false,
304307
new TreeSet<>()
305308
),
306309
new ClassPolicy(
@@ -310,6 +313,8 @@ private static Operation validateUniqueOp(
310313
Policy.KEYBIND,
311314
Policy.KEYBIND_BUTTON,
312315
Policy.KEYBIND_BUTTON,
316+
null,
317+
false,
313318
new TreeSet<>()
314319
),
315320
new ClassPolicy(
@@ -319,6 +324,8 @@ private static Operation validateUniqueOp(
319324
Policy.KEYBIND,
320325
Policy.KEYBIND,
321326
Policy.KEYBIND_BUTTON,
327+
null,
328+
false,
322329
new TreeSet<>(List.of(0))
323330
),
324331
new ClassPolicy(
@@ -328,6 +335,8 @@ private static Operation validateUniqueOp(
328335
Policy.KEYBIND_BUTTON,
329336
Policy.KEYBIND_BUTTON,
330337
Policy.KEYBIND_BUTTON,
338+
null,
339+
false,
331340
new TreeSet<>()
332341
),
333342
new ClassPolicy(
@@ -337,6 +346,8 @@ private static Operation validateUniqueOp(
337346
Policy.KEYBIND_BUTTON,
338347
Policy.KEYBIND_BUTTON,
339348
Policy.KEYBIND_BUTTON,
349+
null,
350+
false,
340351
new TreeSet<>()
341352
),
342353
new ClassPolicy(
@@ -346,6 +357,8 @@ private static Operation validateUniqueOp(
346357
Policy.KEYBIND_BUTTON,
347358
Policy.KEYBIND_BUTTON,
348359
Policy.KEYBIND_BUTTON,
360+
null,
361+
false,
349362
new TreeSet<>()
350363
),
351364
new ClassPolicy(
@@ -355,6 +368,8 @@ private static Operation validateUniqueOp(
355368
Policy.NONE,
356369
Policy.NONE,
357370
Policy.NONE,
371+
null,
372+
false,
358373
new TreeSet<>()
359374
),
360375
new ClassPolicy(
@@ -364,6 +379,8 @@ private static Operation validateUniqueOp(
364379
Policy.NONE,
365380
Policy.NONE,
366381
Policy.NONE,
382+
null,
383+
false,
367384
new TreeSet<>()
368385
),
369386
new ClassPolicy(
@@ -373,6 +390,8 @@ private static Operation validateUniqueOp(
373390
Policy.NONE,
374391
Policy.NONE,
375392
Policy.NONE,
393+
null,
394+
false,
376395
new TreeSet<>()
377396
),
378397
new ClassPolicy(
@@ -382,6 +401,8 @@ private static Operation validateUniqueOp(
382401
Policy.NONE,
383402
Policy.NONE,
384403
Policy.NONE,
404+
null,
405+
false,
385406
new TreeSet<>()
386407
)
387408
);
@@ -407,6 +428,8 @@ private static Operation validateUniqueOp(
407428
Options.policyValidator.validate(cp.stackFillPolicy()),
408429
Options.policyValidator.validate(cp.matchTransferPolicy()),
409430
Options.policyValidator.validate(cp.transferPolicy()),
431+
cp.autoOp(),
432+
cp.autoOpOther(),
410433
cp.ignoredSlots() == null ? new TreeSet<>() : cp.ignoredSlots()
411434
)
412435
);
@@ -517,6 +540,8 @@ private void upgradeLegacy() {
517540
Policy.KEYBIND,
518541
Boolean.TRUE.equals(bl.transferEnabled())
519542
? Policy.KEYBIND_BUTTON : Policy.KEYBIND,
543+
null,
544+
false,
520545
new TreeSet<>()
521546
)
522547
));

common/src/main/java/dev/terminalmc/clientsort/client/inventory/operator/Operation.java renamed to common/src/main/java/dev/terminalmc/clientsort/client/config/Operation.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
package dev.terminalmc.clientsort.client.inventory.operator;
17+
package dev.terminalmc.clientsort.client.config;
1818

1919
import dev.terminalmc.clientsort.network.payload.SortPayload;
2020
import dev.terminalmc.clientsort.network.payload.StackFillPayload;
@@ -23,17 +23,19 @@
2323
import net.minecraft.resources.ResourceLocation;
2424

2525
public enum Operation {
26-
SORT(SortPayload.TYPE),
27-
STACK_FILL(StackFillPayload.TYPE),
28-
MATCH_TRANSFER(TransferPayload.TYPE),
29-
TRANSFER(TransferPayload.TYPE);
26+
SORT(SortPayload.TYPE, "sort"),
27+
STACK_FILL(StackFillPayload.TYPE, "stackFill"),
28+
MATCH_TRANSFER(TransferPayload.TYPE, "matchTransfer"),
29+
TRANSFER(TransferPayload.TYPE, "transfer");
3030

3131
public final CustomPacketPayload.Type<?> type;
3232
public final ResourceLocation id;
33+
public final String translationKey;
3334

34-
Operation(CustomPacketPayload.Type<?> type) {
35+
Operation(CustomPacketPayload.Type<?> type, String translationKey) {
3536
this.type = type;
3637
this.id = type.id();
38+
this.translationKey = translationKey;
3739
}
3840

3941
public boolean isDirectional() {

common/src/main/java/dev/terminalmc/clientsort/client/gui/TriggerButtonManager.java

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,17 @@
1717

1818
package dev.terminalmc.clientsort.client.gui;
1919

20+
import dev.terminalmc.clientsort.client.ClientSort;
2021
import dev.terminalmc.clientsort.client.config.ClassPolicy;
22+
import dev.terminalmc.clientsort.client.config.Operation;
2123
import dev.terminalmc.clientsort.client.config.Vec2i;
2224
import dev.terminalmc.clientsort.client.gui.screen.edit.ContainerEditorScreen;
2325
import dev.terminalmc.clientsort.client.gui.screen.edit.PlayerEditorScreen;
2426
import dev.terminalmc.clientsort.client.gui.screen.edit.SelectorScreen;
2527
import dev.terminalmc.clientsort.client.gui.widget.*;
2628
import dev.terminalmc.clientsort.client.inventory.Scope;
2729
import dev.terminalmc.clientsort.client.inventory.helper.ContainerScreenHelper;
28-
import dev.terminalmc.clientsort.client.inventory.operator.Operation;
30+
import dev.terminalmc.clientsort.client.util.KeybindManager;
2931
import dev.terminalmc.clientsort.client.util.PolicyManager;
3032
import dev.terminalmc.clientsort.mixin.client.accessor.ScreenAccessor;
3133
import net.minecraft.client.Minecraft;
@@ -174,6 +176,7 @@ private static void generate(
174176
enabled,
175177
ClassPolicy::canSort,
176178
ClassPolicy::showSortButton,
179+
ClassPolicy::autoSort,
177180
SortButton::new,
178181
localized("key", "op.sort")
179182
);
@@ -185,6 +188,7 @@ private static void generate(
185188
enabled,
186189
ClassPolicy::canStackFill,
187190
ClassPolicy::showStackFillButton,
191+
ClassPolicy::autoStackFill,
188192
StackFillButton::new,
189193
localized("key", "op.stackFill")
190194
);
@@ -196,6 +200,7 @@ private static void generate(
196200
enabled,
197201
ClassPolicy::canMatchTransfer,
198202
ClassPolicy::showMatchTransferButton,
203+
ClassPolicy::autoMatchTransfer,
199204
MatchTransferButton::new,
200205
localized("key", "op.matchTransfer")
201206
);
@@ -207,6 +212,7 @@ private static void generate(
207212
enabled,
208213
ClassPolicy::canTransfer,
209214
ClassPolicy::showTransferButton,
215+
ClassPolicy::autoTransfer,
210216
TransferButton::new,
211217
localized("key", "op.transfer")
212218
);
@@ -221,9 +227,12 @@ private static void generateSimpleButton(
221227
boolean enabled,
222228
Function<ClassPolicy, Boolean> opCheck,
223229
Function<ClassPolicy, Boolean> buttonCheck,
230+
Function<ClassPolicy, Boolean> autoCheck,
224231
TriggerButtonCreator creator,
225232
Component name
226233
) {
234+
boolean autoPress = false;
235+
227236
// Sanity check; we need a player to work with
228237
@Nullable LocalPlayer player = Minecraft.getInstance().player;
229238
if (player == null)
@@ -257,6 +266,10 @@ private static void generateSimpleButton(
257266
? policy.getButtonOffset()
258267
: options().layoutOffset;
259268

269+
// Check the auto trigger
270+
if (policy != null && autoCheck.apply(policy))
271+
autoPress = true;
272+
260273
// Create and add
261274
TriggerButton button = creator.create(
262275
screen,
@@ -273,6 +286,17 @@ private static void generateSimpleButton(
273286
(isPlayerInv ? visiblePlayerButtons : visibleContainerButtons).add(button);
274287
((ScreenAccessor) screen).clientsort$addRenderableWidget(button);
275288
}
289+
if (autoPress) {
290+
ClientSort.taskManager.schedule(
291+
2,
292+
() -> {
293+
if (Minecraft.getInstance().screen == screen
294+
&& !KeybindManager.CANCEL_AUTO_KEY.isDown()) {
295+
button.onPress();
296+
}
297+
}
298+
);
299+
}
276300
}
277301

278302
private static void generateDirectionalButton(
@@ -283,9 +307,12 @@ private static void generateDirectionalButton(
283307
boolean enabled,
284308
Function<ClassPolicy, Boolean> opCheck,
285309
Function<ClassPolicy, Boolean> buttonCheck,
310+
Function<ClassPolicy, Boolean> autoCheck,
286311
TriggerButtonCreator creator,
287312
Component name
288313
) {
314+
boolean autoPress = false;
315+
289316
// Sanity check; we need a player to work with
290317
@Nullable LocalPlayer player = Minecraft.getInstance().player;
291318
if (player == null)
@@ -319,6 +346,10 @@ private static void generateDirectionalButton(
319346
? policy.getButtonOffset()
320347
: options().layoutOffset;
321348

349+
// Check the auto trigger
350+
if (policy != null && autoCheck.apply(policy) && !policy.autoOpOther())
351+
autoPress = true;
352+
322353
// Get the destination container, if any
323354
@Nullable Container dstContainer = isPlayerInv
324355
? getContainer(player)
@@ -337,6 +368,10 @@ private static void generateDirectionalButton(
337368
add = add && (isEditor || (dstPolicy != null && buttonCheck.apply(dstPolicy)));
338369
if (!create)
339370
return;
371+
372+
// Check the auto trigger
373+
if (dstPolicy != null && autoCheck.apply(dstPolicy) && dstPolicy.autoOpOther())
374+
autoPress = true;
340375
}
341376

342377
// Create and add
@@ -355,6 +390,17 @@ private static void generateDirectionalButton(
355390
(isPlayerInv ? visiblePlayerButtons : visibleContainerButtons).add(button);
356391
((ScreenAccessor) screen).clientsort$addRenderableWidget(button);
357392
}
393+
if (autoPress) {
394+
ClientSort.taskManager.schedule(
395+
2,
396+
() -> {
397+
if (Minecraft.getInstance().screen == screen
398+
&& !KeybindManager.CANCEL_AUTO_KEY.isDown()) {
399+
button.onPress();
400+
}
401+
}
402+
);
403+
}
358404
}
359405

360406
/**

0 commit comments

Comments
 (0)