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
109
110
111
112
|
package me.Danker.features.puzzlesolvers;
import me.Danker.commands.ToggleCommand;
import me.Danker.events.ChestSlotClickedEvent;
import me.Danker.events.GuiChestBackgroundDrawnEvent;
import me.Danker.handlers.TextRenderer;
import me.Danker.utils.RenderUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.init.Blocks;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.StringUtils;
import net.minecraftforge.client.event.GuiOpenEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import org.lwjgl.input.Keyboard;
import java.util.ArrayList;
import java.util.List;
public class ChronomatronSolver {
static int lastChronomatronRound = 0;
static List<String> chronomatronPattern = new ArrayList<>();
static int chronomatronMouseClicks = 0;
public static int CHRONOMATRON_NEXT;
public static int CHRONOMATRON_NEXT_TO_NEXT;
@SubscribeEvent
public void onSlotClick(ChestSlotClickedEvent event) {
if (ToggleCommand.chronomatronToggled && event.inventoryName.startsWith("Chronomatron (")) {
IInventory inventory = event.inventory;
ItemStack item = event.item;
if (item == null) {
if (event.isCancelable() && !Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) && !Keyboard.isKeyDown(Keyboard.KEY_RCONTROL)) {
event.setCanceled(true);
}
return;
}
if (inventory.getStackInSlot(49).getDisplayName().startsWith("§7Timer: §a") && (item.getItem() == Item.getItemFromBlock(Blocks.stained_glass) || item.getItem() == Item.getItemFromBlock(Blocks.stained_hardened_clay))) {
if (chronomatronPattern.size() > chronomatronMouseClicks && !item.getDisplayName().equals(chronomatronPattern.get(chronomatronMouseClicks))) {
if (event.isCancelable() && !Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) && !Keyboard.isKeyDown(Keyboard.KEY_RCONTROL)) {
event.setCanceled(true);
return;
}
}
chronomatronMouseClicks++;
} else if (inventory.getStackInSlot(49).getDisplayName().startsWith("§aRemember the pattern!")) {
if (event.isCancelable()) event.setCanceled(true);
}
}
}
@SubscribeEvent
public void onGuiRender(GuiChestBackgroundDrawnEvent event) {
if (ToggleCommand.chronomatronToggled && event.displayName.startsWith("Chronomatron (")) {
int chestSize = event.chestSize;
List<Slot> invSlots = event.slots;
if (invSlots.size() > 48 && invSlots.get(49).getStack() != null) {
if (invSlots.get(49).getStack().getDisplayName().startsWith("§7Timer: §a") && invSlots.get(4).getStack() != null) {
int round = invSlots.get(4).getStack().stackSize;
int timerSeconds = Integer.parseInt(StringUtils.stripControlCodes(invSlots.get(49).getStack().getDisplayName()).replaceAll("[^\\d]", ""));
if (round != lastChronomatronRound && timerSeconds == round + 2) {
lastChronomatronRound = round;
for (int i = 10; i <= 43; i++) {
ItemStack stack = invSlots.get(i).getStack();
if (stack == null) continue;
if (stack.getItem() == Item.getItemFromBlock(Blocks.stained_hardened_clay)) {
chronomatronPattern.add(stack.getDisplayName());
break;
}
}
}
if (chronomatronMouseClicks < chronomatronPattern.size()) {
for (int i = 10; i <= 43; i++) {
ItemStack glass = invSlots.get(i).getStack();
if (glass == null) continue;
Slot glassSlot = invSlots.get(i);
if (glass.getDisplayName().equals(chronomatronPattern.get(chronomatronMouseClicks))) {
RenderUtils.drawOnSlot(chestSize, glassSlot.xDisplayPosition, glassSlot.yDisplayPosition, CHRONOMATRON_NEXT + 0xE5000000);
} else if (chronomatronMouseClicks + 1 < chronomatronPattern.size() && glass.getDisplayName().equals(chronomatronPattern.get(chronomatronMouseClicks + 1))) {
RenderUtils.drawOnSlot(chestSize, glassSlot.xDisplayPosition, glassSlot.yDisplayPosition, CHRONOMATRON_NEXT_TO_NEXT + 0XBE000000);
}
}
}
} else if (invSlots.get(49).getStack().getDisplayName().equals("§aRemember the pattern!")) {
chronomatronMouseClicks = 0;
}
}
Minecraft mc = Minecraft.getMinecraft();
ScaledResolution sr = new ScaledResolution(mc);
int guiLeft = (sr.getScaledWidth() - 176) / 2;
new TextRenderer(mc, String.join("\n", chronomatronPattern), (int) (guiLeft * 0.8), 10, 1);
}
}
@SubscribeEvent
public void onGuiOpen(GuiOpenEvent event) {
lastChronomatronRound = 0;
chronomatronPattern.clear();
chronomatronMouseClicks = 0;
}
}
|