aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/skyblock/experiment/UltrasequencerSolver.java
blob: 796c80ee5fa7089f6cb2be87a8ac9a2283174587 (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
package de.hysky.skyblocker.skyblock.experiment;

import de.hysky.skyblocker.config.configs.HelperConfig;
import de.hysky.skyblocker.utils.render.gui.ColorHighlight;
import de.hysky.skyblocker.utils.container.AbstractContainerSolver;
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.inventory.Inventory;
import net.minecraft.item.ItemStack;

import java.util.ArrayList;
import java.util.List;

public final class UltrasequencerSolver extends ExperimentSolver {
    public static final UltrasequencerSolver INSTANCE = new UltrasequencerSolver();
    private int ultrasequencerNextSlot;

    private UltrasequencerSolver() {
        super("^Ultrasequencer \\(\\w+\\)$");
    }

    public int getUltrasequencerNextSlot() {
        return ultrasequencerNextSlot;
    }

    public void setUltrasequencerNextSlot(int ultrasequencerNextSlot) {
        this.ultrasequencerNextSlot = ultrasequencerNextSlot;
    }

    @Override
    protected boolean isEnabled(HelperConfig.Experiments experimentsConfig) {
        return experimentsConfig.enableUltrasequencerSolver;
    }

    @Override
    protected void tick(Screen screen) {
        if (isEnabled() && screen instanceof GenericContainerScreen genericContainerScreen && genericContainerScreen.getTitle().getString().startsWith("Ultrasequencer (")) {
            switch (getState()) {
                case REMEMBER -> {
                    Inventory inventory = genericContainerScreen.getScreenHandler().getInventory();
                    if (inventory.getStack(49).getName().getString().equals("Remember the pattern!")) {
                        for (int index = 9; index < 45; index++) {
                            ItemStack itemStack = inventory.getStack(index);
                            String name = itemStack.getName().getString();
                            if (name.matches("\\d+")) {
                                if (name.equals("1")) {
                                    ultrasequencerNextSlot = index;
                                }
                                getSlots().put(index, itemStack);
                            }
                        }
                        setState(State.WAIT);
                    }
                }
                case WAIT -> {
                    if (genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString().startsWith("Timer: ")) {
                        setState(State.SHOW);
                        AbstractContainerSolver.markHighlightsDirty();
                    }
                }
                case END -> {
                    String name = genericContainerScreen.getScreenHandler().getInventory().getStack(49).getName().getString();
                    if (!name.startsWith("Timer: ")) {
                        if (name.equals("Remember the pattern!")) {
                            getSlots().clear();
                            setState(State.REMEMBER);
                        } else {
                            reset();
                        }
                    }
                }
            }
        } else {
            reset();
        }
    }

    @Override
    public List<ColorHighlight> getColors(Int2ObjectMap<ItemStack> slots) {
        return getState() == State.SHOW && ultrasequencerNextSlot != 0 ? List.of(ColorHighlight.green(ultrasequencerNextSlot)) : new ArrayList<>();
    }
}