1717
1818package dev .terminalmc .clientsort .client .gui ;
1919
20+ import dev .terminalmc .clientsort .client .ClientSort ;
2021import dev .terminalmc .clientsort .client .config .ClassPolicy ;
22+ import dev .terminalmc .clientsort .client .config .Operation ;
2123import dev .terminalmc .clientsort .client .config .Vec2i ;
2224import dev .terminalmc .clientsort .client .gui .screen .edit .ContainerEditorScreen ;
2325import dev .terminalmc .clientsort .client .gui .screen .edit .PlayerEditorScreen ;
2426import dev .terminalmc .clientsort .client .gui .screen .edit .SelectorScreen ;
2527import dev .terminalmc .clientsort .client .gui .widget .*;
2628import dev .terminalmc .clientsort .client .inventory .Scope ;
2729import dev .terminalmc .clientsort .client .inventory .helper .ContainerScreenHelper ;
28- import dev .terminalmc .clientsort .client .inventory . operator . Operation ;
30+ import dev .terminalmc .clientsort .client .util . KeybindManager ;
2931import dev .terminalmc .clientsort .client .util .PolicyManager ;
3032import dev .terminalmc .clientsort .mixin .client .accessor .ScreenAccessor ;
3133import 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