blob: 5c2ed152ebf979d9691af506e8b938db1ceebc83 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
package de.hysky.skyblocker.skyblock.experiment;
import de.hysky.skyblocker.config.configs.HelperConfig;
import de.hysky.skyblocker.utils.render.gui.ColorHighlight;
import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.screen.ingame.GenericContainerScreen;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import java.util.*;
public final class SuperpairsSolver extends ExperimentSolver {
private int superpairsPrevClickedSlot;
private ItemStack superpairsCurrentSlot;
private final Set<Integer> superpairsDuplicatedSlots = new HashSet<>();
public SuperpairsSolver() {
super("^Superpairs \\(\\w+\\)$");
}
public void setSuperpairsPrevClickedSlot(int superpairsPrevClickedSlot) {
this.superpairsPrevClickedSlot = superpairsPrevClickedSlot;
}
public void setSuperpairsCurrentSlot(ItemStack superpairsCurrentSlot) {
this.superpairsCurrentSlot = superpairsCurrentSlot;
}
@Override
protected boolean isEnabled(HelperConfig.Experiments experimentsConfig) {
return experimentsConfig.enableSuperpairsSolver;
}
@Override
protected void start(GenericContainerScreen screen) {
super.start(screen);
setState(State.SHOW);
}
@Override
protected void reset() {
super.reset();
superpairsPrevClickedSlot = 0;
superpairsCurrentSlot = null;
superpairsDuplicatedSlots.clear();
}
@Override
protected void tick(Screen screen) {
if (isEnabled() && screen instanceof GenericContainerScreen genericContainerScreen && genericContainerScreen.getTitle().getString().startsWith("Superpairs (")) {
if (getState() == State.SHOW && getSlots().get(superpairsPrevClickedSlot) == null) {
ItemStack itemStack = genericContainerScreen.getScreenHandler().getInventory().getStack(superpairsPrevClickedSlot);
if (!(itemStack.isOf(Items.CYAN_STAINED_GLASS) || itemStack.isOf(Items.BLACK_STAINED_GLASS_PANE) || itemStack.isOf(Items.AIR))) {
getSlots().entrySet().stream().filter((entry -> ItemStack.areEqual(entry.getValue(), itemStack))).findAny().ifPresent(entry -> superpairsDuplicatedSlots.add(entry.getKey()));
getSlots().put(superpairsPrevClickedSlot, itemStack);
superpairsCurrentSlot = itemStack;
}
}
} else {
reset();
}
}
@Override
protected List<ColorHighlight> getColors(String[] groups, Int2ObjectMap<ItemStack> displaySlots) {
List<ColorHighlight> highlights = new ArrayList<>();
if (getState() == State.SHOW) {
for (Int2ObjectMap.Entry<ItemStack> indexStack : displaySlots.int2ObjectEntrySet()) {
int index = indexStack.getIntKey();
ItemStack displayStack = indexStack.getValue();
ItemStack stack = getSlots().get(index);
if (stack != null && !ItemStack.areEqual(stack, displayStack)) {
if (ItemStack.areEqual(superpairsCurrentSlot, stack) && displayStack.getName().getString().equals("Click a second button!")) {
highlights.add(ColorHighlight.green(index));
} else if (superpairsDuplicatedSlots.contains(index)) {
highlights.add(ColorHighlight.yellow(index));
} else {
highlights.add(ColorHighlight.red(index));
}
}
}
}
return highlights;
}
}
|