2929import dev .terminalmc .clientsort .client .inventory .helper .ContainerScreenHelper ;
3030import dev .terminalmc .clientsort .client .util .KeybindManager ;
3131import dev .terminalmc .clientsort .client .util .PolicyManager ;
32+ import dev .terminalmc .clientsort .mixin .client .accessor .AbstractContainerScreenAccessor ;
3233import dev .terminalmc .clientsort .mixin .client .accessor .ScreenAccessor ;
3334import net .minecraft .client .Minecraft ;
3435import net .minecraft .client .gui .screens .Screen ;
@@ -136,22 +137,24 @@ public static void afterScreenInit(Screen initScreen) {
136137 isEditorP = true ;
137138 }
138139
140+ boolean left = options ().anchorButtonsLeft ;
141+
139142 // Generate container-side buttons
140- Slot refSlotC = getReferenceSlot (acs , false );
143+ Slot refSlotC = getReferenceSlot (acs , false , left );
141144 if (refSlotC != null ) {
142- generate (acs , refSlotC , false , isEditorC , enabled , options ().firstButtonOp );
143- generate (acs , refSlotC , false , isEditorC , enabled , options ().secondButtonOp );
144- generate (acs , refSlotC , false , isEditorC , enabled , options ().thirdButtonOp );
145- generate (acs , refSlotC , false , isEditorC , enabled , options ().fourthButtonOp );
145+ generate (acs , refSlotC , left , false , isEditorC , enabled , options ().firstButtonOp );
146+ generate (acs , refSlotC , left , false , isEditorC , enabled , options ().secondButtonOp );
147+ generate (acs , refSlotC , left , false , isEditorC , enabled , options ().thirdButtonOp );
148+ generate (acs , refSlotC , left , false , isEditorC , enabled , options ().fourthButtonOp );
146149 }
147150
148151 // Generate player-side buttons
149- Slot refSlotP = getReferenceSlot (acs , true );
152+ Slot refSlotP = getReferenceSlot (acs , true , left );
150153 if (refSlotP != null ) {
151- generate (acs , refSlotP , true , isEditorP , enabled , options ().firstButtonOp );
152- generate (acs , refSlotP , true , isEditorP , enabled , options ().secondButtonOp );
153- generate (acs , refSlotP , true , isEditorP , enabled , options ().thirdButtonOp );
154- generate (acs , refSlotP , true , isEditorP , enabled , options ().fourthButtonOp );
154+ generate (acs , refSlotP , left , true , isEditorP , enabled , options ().firstButtonOp );
155+ generate (acs , refSlotP , left , true , isEditorP , enabled , options ().secondButtonOp );
156+ generate (acs , refSlotP , left , true , isEditorP , enabled , options ().thirdButtonOp );
157+ generate (acs , refSlotP , left , true , isEditorP , enabled , options ().fourthButtonOp );
155158 }
156159 }
157160
@@ -161,7 +164,8 @@ public static void afterScreenInit(Screen initScreen) {
161164 */
162165 private static void generate (
163166 AbstractContainerScreen <?> screen ,
164- Slot refSlot ,
167+ Slot referenceSlot ,
168+ boolean referenceLeft ,
165169 boolean isPlayerInv ,
166170 boolean isEditor ,
167171 boolean enabled ,
@@ -170,7 +174,8 @@ private static void generate(
170174 switch (op ) {
171175 case SORT -> generateSimpleButton (
172176 screen ,
173- refSlot ,
177+ referenceSlot ,
178+ referenceLeft ,
174179 isPlayerInv ,
175180 isEditor ,
176181 enabled ,
@@ -182,7 +187,8 @@ private static void generate(
182187 );
183188 case STACK_FILL -> generateDirectionalButton (
184189 screen ,
185- refSlot ,
190+ referenceSlot ,
191+ referenceLeft ,
186192 isPlayerInv ,
187193 isEditor ,
188194 enabled ,
@@ -194,7 +200,8 @@ private static void generate(
194200 );
195201 case MATCH_TRANSFER -> generateDirectionalButton (
196202 screen ,
197- refSlot ,
203+ referenceSlot ,
204+ referenceLeft ,
198205 isPlayerInv ,
199206 isEditor ,
200207 enabled ,
@@ -206,7 +213,8 @@ private static void generate(
206213 );
207214 case TRANSFER -> generateDirectionalButton (
208215 screen ,
209- refSlot ,
216+ referenceSlot ,
217+ referenceLeft ,
210218 isPlayerInv ,
211219 isEditor ,
212220 enabled ,
@@ -222,6 +230,7 @@ private static void generate(
222230 private static void generateSimpleButton (
223231 AbstractContainerScreen <?> screen ,
224232 Slot referenceSlot ,
233+ boolean referenceLeft ,
225234 boolean isPlayerInv ,
226235 boolean isEditor ,
227236 boolean enabled ,
@@ -275,6 +284,7 @@ private static void generateSimpleButton(
275284 screen ,
276285 container ,
277286 referenceSlot ,
287+ referenceLeft ,
278288 isPlayerInv ,
279289 policy ,
280290 object .getClass ().getName (),
@@ -304,6 +314,7 @@ private static void generateSimpleButton(
304314 private static void generateDirectionalButton (
305315 AbstractContainerScreen <?> screen ,
306316 Slot referenceSlot ,
317+ boolean referenceLeft ,
307318 boolean isPlayerInv ,
308319 boolean isEditor ,
309320 boolean enabled ,
@@ -381,6 +392,7 @@ private static void generateDirectionalButton(
381392 screen ,
382393 container ,
383394 referenceSlot ,
395+ referenceLeft ,
384396 isPlayerInv ,
385397 policy ,
386398 object .getClass ().getName (),
@@ -452,7 +464,8 @@ public ScoredContainer(Container container, int score) {
452464 */
453465 private static @ Nullable Slot getReferenceSlot (
454466 AbstractContainerScreen <?> screen ,
455- boolean isPlayerInv
467+ boolean isPlayerInv ,
468+ boolean anchorButtonsLeft
456469 ) {
457470 ContainerScreenHelper <?> helper = ContainerScreenHelper .of (screen );
458471 Slot bestSlot = null ;
@@ -461,8 +474,13 @@ public ScoredContainer(Container container, int score) {
461474 Scope scope = isPlayerInv ? Scope .PLAYER_INV : Scope .CONTAINER_INV ;
462475 for (Slot slot : helper .getLargestSlotGroup (scope )) {
463476 // Calculate the weighted positional score
464- double x = Math .clamp (slot .x , 0 , screen .width )
465- / (double ) screen .width ;
477+ double x ;
478+ if (anchorButtonsLeft ) {
479+ x = Math .clamp (slot .x , 0 , screen .width ) / (double ) screen .width ;
480+ } else {
481+ x = ((AbstractContainerScreenAccessor ) screen ).clientsort$getImageWidth ()
482+ - Math .clamp (slot .x , 0 , screen .width ) / (double ) screen .width ;
483+ }
466484 double y = (screen .height - Math .clamp (slot .y , 0 , screen .height ))
467485 / (double ) screen .height ;
468486 double score = x * 0.8D + y * 0.2D ;
@@ -497,6 +515,7 @@ TriggerButton create(
497515 AbstractContainerScreen <?> screen ,
498516 Container container ,
499517 Slot referenceSlot ,
518+ boolean referenceLeft ,
500519 boolean isPlayerInv ,
501520 @ Nullable ClassPolicy policy ,
502521 String lowestPolicyKey ,
0 commit comments