aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/Danker/features/puzzlesolvers/ClickInOrderSolver.java
blob: 1665ba796b2e062ed62cc054eef000ef2e0b0438 (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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package me.Danker.features.puzzlesolvers;

import me.Danker.commands.ToggleCommand;
import me.Danker.events.GuiChestBackgroundDrawnEvent;
import me.Danker.utils.RenderUtils;
import me.Danker.utils.Utils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.gui.inventory.GuiChest;
import net.minecraft.init.Blocks;
import net.minecraft.inventory.ContainerChest;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.client.event.GuiOpenEvent;
import net.minecraftforge.event.entity.player.ItemTooltipEvent;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;

import java.util.List;

public class ClickInOrderSolver {

    static Slot[] clickInOrderSlots = new Slot[36];
    static int[] terminalNumberNeeded = new int[4];
    public static int CLICK_IN_ORDER_NEXT;
    public static int CLICK_IN_ORDER_NEXT_TO_NEXT;

    @SubscribeEvent(priority = EventPriority.LOW)
    public void onTooltipLow(ItemTooltipEvent event) {
        if (!Utils.inSkyblock) return;
        if (event.toolTip == null) return;

        Minecraft mc = Minecraft.getMinecraft();
        EntityPlayerSP player = mc.thePlayer;

        if (mc.currentScreen instanceof GuiChest) {
            ContainerChest chest = (ContainerChest) player.openContainer;
            IInventory inv = chest.getLowerChestInventory();
            String chestName = inv.getDisplayName().getUnformattedText();

            if (ToggleCommand.clickInOrderToggled && chestName.equals("Click in order!")) {
                event.toolTip.clear();
            }
        }
    }

    @SubscribeEvent
    public void onTick(TickEvent.ClientTickEvent event) {
        if (event.phase != TickEvent.Phase.START) return;

        Minecraft mc = Minecraft.getMinecraft();
        EntityPlayerSP player = mc.thePlayer;
        if (mc.currentScreen instanceof GuiChest) {
            if (player == null) return;
            ContainerChest chest = (ContainerChest) player.openContainer;
            List<Slot> invSlots = ((GuiChest) mc.currentScreen).inventorySlots.inventorySlots;
            String chestName = chest.getLowerChestInventory().getDisplayName().getUnformattedText().trim();

            if (ToggleCommand.clickInOrderToggled && chestName.equals("Click in order!")) {
                if (terminalNumberNeeded[0] == 0) terminalNumberNeeded[0] = 15;
                if (terminalNumberNeeded[2] == 0) terminalNumberNeeded[2] = 15;
                for (int i = 10; i <= 25; i++) {
                    if (i == 17 || i == 18) continue;
                    ItemStack prevStack = invSlots.get(terminalNumberNeeded[1]).getStack();
                    if (prevStack == null) terminalNumberNeeded[0] = 15;
                    else if (prevStack.getItem() != Item.getItemFromBlock(Blocks.stained_glass_pane))
                        terminalNumberNeeded[0] = 15;
                    else if (prevStack.getItemDamage() == 5) terminalNumberNeeded[0] = 15;

                    ItemStack itemStack = invSlots.get(i).getStack();
                    if (itemStack == null) continue;
                    if (itemStack.getItem() != Item.getItemFromBlock(Blocks.stained_glass_pane)) continue;
                    if (itemStack.getItemDamage() != 14) continue;
                    if (itemStack.stackSize < terminalNumberNeeded[0]) {
                        terminalNumberNeeded[0] = itemStack.stackSize;
                        terminalNumberNeeded[1] = i;
                    } else if (itemStack.stackSize == terminalNumberNeeded[0] + 1) {
                        terminalNumberNeeded[2] = itemStack.stackSize;
                        terminalNumberNeeded[3] = i;
                    }
                }
            }
        }
    }

    @SubscribeEvent
    public void onGuiRender(GuiChestBackgroundDrawnEvent event) {
        if (ToggleCommand.clickInOrderToggled && event.displayName.equals("Click in order!")) {
            int chestSize = event.chestSize;
            List<Slot> invSlots = event.slots;
            Slot slot = invSlots.get(terminalNumberNeeded[1]);
            RenderUtils.drawOnSlot(chestSize, slot.xDisplayPosition, slot.yDisplayPosition, CLICK_IN_ORDER_NEXT + 0xFF000000);
            Slot nextSlot = invSlots.get(terminalNumberNeeded[3]);
            if (nextSlot != slot && nextSlot.getSlotIndex() != 0) {
                RenderUtils.drawOnSlot(chestSize, nextSlot.xDisplayPosition, nextSlot.yDisplayPosition, CLICK_IN_ORDER_NEXT_TO_NEXT + 0xFF000000);
            }
        }
    }

    @SubscribeEvent
    public void onGuiOpen(GuiOpenEvent event) {
        terminalNumberNeeded = new int[4];
    }

}