Skip to content

Commit 0f3e5b7

Browse files
committed
Always generate buttons and use as reference for slot collection
1 parent de6a8e2 commit 0f3e5b7

File tree

7 files changed

+206
-118
lines changed

7 files changed

+206
-118
lines changed

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

Lines changed: 153 additions & 96 deletions
Large diffs are not rendered by default.

common/src/main/java/dev/terminalmc/clientsort/client/gui/widget/TriggerButton.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public abstract class TriggerButton extends Button {
5555

5656
private final AbstractContainerScreen<?> screen;
5757
public final Container container;
58-
private final Slot referenceSlot;
58+
public final Slot referenceSlot;
5959
public final boolean isPlayerInv;
6060

6161
private final WidgetSprites sprites;

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

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import dev.terminalmc.clientsort.client.ClientSort;
2121
import dev.terminalmc.clientsort.client.compat.itemlocks.ItemLocksWrapper;
2222
import dev.terminalmc.clientsort.client.config.ClassPolicy;
23+
import dev.terminalmc.clientsort.client.gui.TriggerButtonManager;
2324
import dev.terminalmc.clientsort.client.inventory.Scope;
2425
import dev.terminalmc.clientsort.client.inventory.helper.ContainerScreenHelper;
2526
import dev.terminalmc.clientsort.client.inventory.operator.client.ClientCreativeOperator;
@@ -42,6 +43,7 @@
4243

4344
import java.util.ArrayList;
4445
import java.util.List;
46+
import java.util.Objects;
4547
import java.util.Set;
4648

4749
import static dev.terminalmc.clientsort.ClientSort.debug;
@@ -62,6 +64,7 @@ public abstract class SingleUseOperator {
6264
private boolean hasOperated = false;
6365
protected final AbstractContainerScreen<?> screen;
6466
protected final ContainerScreenHelper<? extends AbstractContainerScreen<?>> screenHelper;
67+
protected final Operation op;
6568
/**
6669
* The slot that was hovered when sorting was triggered.
6770
*/
@@ -94,13 +97,15 @@ public abstract class SingleUseOperator {
9497
*/
9598
protected final ItemStack[] otherScopeStacks;
9699

97-
protected SingleUseOperator(AbstractContainerScreen<?> screen, Slot originSlot) {
100+
protected SingleUseOperator(AbstractContainerScreen<?> screen, Slot originSlot, Operation op) {
98101
this.screen = screen;
99102
this.screenHelper = ContainerScreenHelper.of(screen);
100103
this.originSlot = originSlot;
104+
this.op = op;
105+
101106
// Collect slots in origin scope
102107
Scope originScope = screenHelper.getScope(originSlot);
103-
originScopeSlots = collectSlots(originScope);
108+
originScopeSlots = collectSlots(originSlot);
104109
if (debug()) {
105110
ClientSort.LOG.info(
106111
"Discovered {} slots in origin scope ({} - {}):",
@@ -116,13 +121,20 @@ protected SingleUseOperator(AbstractContainerScreen<?> screen, Slot originSlot)
116121
originScopeStacks[i] = originScopeSlots[i].getItem().copy();
117122
}
118123

124+
// Get the other container, if any
125+
LocalPlayer player = Objects.requireNonNull(Minecraft.getInstance().player);
126+
@Nullable Slot otherSlot = originSlot.container == player.getInventory()
127+
? TriggerButtonManager.getContainerRefSlot(op)
128+
: TriggerButtonManager.getPlayerRefSlot(op);
129+
if (otherSlot == null || op.equals(Operation.SORT)) {
130+
otherScopeSlots = new Slot[]{};
131+
otherScopeStacks = new ItemStack[]{};
132+
return;
133+
}
134+
119135
// Collect slots in other container scope, if any
120-
Scope otherScope = switch (originScope) {
121-
case PLAYER_INV -> Scope.CONTAINER_INV;
122-
case CONTAINER_INV -> Scope.PLAYER_INV;
123-
default -> Scope.INVALID;
124-
};
125-
otherScopeSlots = collectSlots(otherScope);
136+
Scope otherScope = screenHelper.getScope(otherSlot);
137+
otherScopeSlots = collectSlots(otherSlot);
126138
if (debug()) {
127139
ClientSort.LOG.info(
128140
"Discovered {} slots in other scope ({} - {}):",
@@ -142,8 +154,9 @@ protected SingleUseOperator(AbstractContainerScreen<?> screen, Slot originSlot)
142154
/**
143155
* Finds all the valid inventory menu slots that are in {@code scope}.
144156
*/
145-
private Slot[] collectSlots(Scope scope) {
157+
private Slot[] collectSlots(Slot refSlot) {
146158
LocalPlayer player = Minecraft.getInstance().player;
159+
Scope scope = screenHelper.getScope(refSlot);
147160
if (scope == Scope.INVALID)
148161
return new Slot[0];
149162

@@ -153,6 +166,12 @@ private Slot[] collectSlots(Scope scope) {
153166
int slotId = ((ISlot) slot).clientsort$getIndexInMenu();
154167
int slotIdx = ((ISlot) slot).clientsort$getIndexInContainer();
155168

169+
//noinspection ConstantValue
170+
if (slot.container == null)
171+
continue;
172+
if (slot.container != refSlot.container)
173+
continue;
174+
156175
// Ignore slots in different scope
157176
if (screenHelper.getScope(slot) != scope)
158177
continue;
@@ -295,7 +314,7 @@ public static boolean transfer(
295314
&& ClientServices.PLATFORM.canSendToServer(operation.type)) {
296315
if (debug())
297316
ClientSort.LOG.info("Preparing server operator for {}", operation.name());
298-
return new ServerOperator(screen, originSlot);
317+
return new ServerOperator(screen, originSlot, operation);
299318
}
300319

301320
// Check that there is not already an op running
@@ -313,11 +332,11 @@ public static boolean transfer(
313332
&& screen instanceof CreativeModeInventoryScreen) {
314333
if (debug())
315334
ClientSort.LOG.info("Preparing client-creative operator for {}", operation.name());
316-
return new ClientCreativeOperator(screen, originSlot);
335+
return new ClientCreativeOperator(screen, originSlot, operation);
317336
} else {
318337
if (debug())
319338
ClientSort.LOG.info("Preparing client-survival operator for {}", operation.name());
320-
return new ClientSurvivalOperator(screen, originSlot);
339+
return new ClientSurvivalOperator(screen, originSlot, operation);
321340
}
322341
}
323342

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import dev.terminalmc.clientsort.ClientSort;
2020
import dev.terminalmc.clientsort.client.interaction.InteractionManager;
21+
import dev.terminalmc.clientsort.client.inventory.operator.Operation;
2122
import dev.terminalmc.clientsort.client.util.SoundManager;
2223
import dev.terminalmc.clientsort.util.inject.ISlot;
2324
import net.minecraft.client.Minecraft;
@@ -36,8 +37,12 @@
3637
*/
3738
public class ClientCreativeOperator extends ClientOperator {
3839

39-
public ClientCreativeOperator(AbstractContainerScreen<?> screen, Slot originSlot) {
40-
super(screen, originSlot);
40+
public ClientCreativeOperator(
41+
AbstractContainerScreen<?> screen,
42+
Slot originSlot,
43+
Operation op
44+
) {
45+
super(screen, originSlot, op);
4146
}
4247

4348
/**

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import dev.terminalmc.clientsort.client.ClientSort;
2020
import dev.terminalmc.clientsort.client.interaction.InteractionManager;
21+
import dev.terminalmc.clientsort.client.inventory.operator.Operation;
2122
import dev.terminalmc.clientsort.client.inventory.operator.SingleUseOperator;
2223
import dev.terminalmc.clientsort.client.order.SortContext;
2324
import dev.terminalmc.clientsort.client.order.SortOrder;
@@ -32,8 +33,8 @@
3233
*/
3334
public abstract class ClientOperator extends SingleUseOperator {
3435

35-
public ClientOperator(AbstractContainerScreen<?> screen, Slot originSlot) {
36-
super(screen, originSlot);
36+
public ClientOperator(AbstractContainerScreen<?> screen, Slot originSlot, Operation op) {
37+
super(screen, originSlot, op);
3738
}
3839

3940
/**

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

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import dev.terminalmc.clientsort.ClientSort;
2121
import dev.terminalmc.clientsort.client.interaction.InteractionManager;
2222
import dev.terminalmc.clientsort.client.interaction.InteractionManager.InteractionEvent;
23+
import dev.terminalmc.clientsort.client.inventory.operator.Operation;
2324
import dev.terminalmc.clientsort.client.util.SoundManager;
2425
import dev.terminalmc.clientsort.mixin.client.accessor.AbstractContainerScreenAccessor;
2526
import dev.terminalmc.clientsort.util.inject.ISlot;
@@ -44,8 +45,12 @@
4445
*/
4546
public class ClientSurvivalOperator extends ClientOperator {
4647

47-
public ClientSurvivalOperator(AbstractContainerScreen<?> screen, Slot originSlot) {
48-
super(screen, originSlot);
48+
public ClientSurvivalOperator(
49+
AbstractContainerScreen<?> screen,
50+
Slot originSlot,
51+
Operation op
52+
) {
53+
super(screen, originSlot, op);
4954
}
5055

5156
/**

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package dev.terminalmc.clientsort.client.inventory.operator.server;
1818

1919
import dev.terminalmc.clientsort.client.ClientSort;
20+
import dev.terminalmc.clientsort.client.inventory.operator.Operation;
2021
import dev.terminalmc.clientsort.client.inventory.operator.SingleUseOperator;
2122
import dev.terminalmc.clientsort.client.network.handler.CollectResultHandler;
2223
import dev.terminalmc.clientsort.client.network.handler.SortResultHandler;
@@ -49,8 +50,8 @@
4950
*/
5051
public class ServerOperator extends SingleUseOperator {
5152

52-
public ServerOperator(AbstractContainerScreen<?> screen, Slot originSlot) {
53-
super(screen, originSlot);
53+
public ServerOperator(AbstractContainerScreen<?> screen, Slot originSlot, Operation op) {
54+
super(screen, originSlot, op);
5455
}
5556

5657
@Override
@@ -76,7 +77,7 @@ protected void sort(SortOrder sortOrder) {
7677
}
7778
};
7879

79-
ServerOperator sorter = new ServerOperator(screen, originSlot);
80+
ServerOperator sorter = new ServerOperator(screen, originSlot, op);
8081
int[] slotMapping = sorter.createSlotMapping(sortOrder);
8182
if (debug())
8283
ClientSort.LOG.info("Sending payload for operation SORT");

0 commit comments

Comments
 (0)