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
|
package at.hannibal2.skyhanni.data
import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.config.core.config.Position
import at.hannibal2.skyhanni.config.core.config.gui.GuiPositionEditor
import at.hannibal2.skyhanni.events.GuiRenderEvent
import at.hannibal2.skyhanni.utils.InventoryUtils
import at.hannibal2.skyhanni.utils.LorenzUtils
import io.github.moulberry.notenoughupdates.NEUOverlay
import io.github.moulberry.notenoughupdates.overlays.AuctionSearchOverlay
import io.github.moulberry.notenoughupdates.overlays.BazaarSearchOverlay
import net.minecraft.client.Minecraft
import net.minecraft.client.gui.inventory.GuiChest
import net.minecraft.client.gui.inventory.GuiEditSign
import net.minecraft.client.gui.inventory.GuiInventory
import net.minecraft.client.renderer.GlStateManager
import net.minecraftforge.fml.common.eventhandler.EventPriority
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import net.minecraftforge.fml.common.gameevent.TickEvent
import org.lwjgl.input.Keyboard
import java.util.*
class GuiEditManager {
// TODO Make utils method for this
@SubscribeEvent
fun onTick(event: TickEvent.ClientTickEvent) {
if (!LorenzUtils.inSkyBlock) return
Minecraft.getMinecraft().currentScreen?.let {
if (it !is GuiInventory && it !is GuiChest && it !is GuiEditSign) return
}
if (!Keyboard.getEventKeyState()) return
val key = if (Keyboard.getEventKey() == 0) Keyboard.getEventCharacter().code + 256 else Keyboard.getEventKey()
if (SkyHanniMod.feature.gui.keyBindOpen != key) return
if (NEUOverlay.searchBarHasFocus) return
if (AuctionSearchOverlay.shouldReplace()) return
if (BazaarSearchOverlay.shouldReplace()) return
if (InventoryUtils.inStorage()) return
if (isInGui()) return
openGuiEditor()
}
@SubscribeEvent(priority = EventPriority.LOWEST)
fun onRenderOverlay(event: GuiRenderEvent.GameOverlayRenderEvent) {
latestPositions = currentPositions.toMap()
currentPositions.clear()
}
companion object {
var currentPositions = mutableMapOf<String, Position>()
private var latestPositions = mapOf<String, Position>()
private var currentBorderSize = mutableMapOf<String, Pair<Int, Int>>()
@JvmStatic
fun add(position: Position, posLabel: String, x: Int, y: Int) {
var name = position.internalName
if (name == null) {
name = if (posLabel == "none") "none " + UUID.randomUUID() else posLabel
position.internalName = name
}
if (!currentPositions.containsKey(name)) {
currentPositions[name] = position
currentBorderSize[posLabel] = Pair(x, y)
}
}
@JvmStatic
fun openGuiEditor() {
SkyHanniMod.screenToOpen = GuiPositionEditor(latestPositions.values.toList(), 2)
}
@JvmStatic
fun renderLast() {
if (!isInGui()) return
GlStateManager.translate(0f, 0f, 200f)
GuiRenderEvent.GameOverlayRenderEvent().postAndCatch()
GlStateManager.pushMatrix()
GlStateManager.enableDepth()
GuiRenderEvent.ChestBackgroundRenderEvent().postAndCatch()
GlStateManager.popMatrix()
GlStateManager.translate(0f, 0f, -200f)
}
fun isInGui() = Minecraft.getMinecraft().currentScreen is GuiPositionEditor
fun Position.getDummySize(random: Boolean = false): Vector2i {
if (random) {
return Vector2i(5, 5)
} else {
val (x, y) = currentBorderSize[internalName] ?: return Vector2i(1, 1)
return Vector2i(x, y)
}
}
fun Position.getAbsX() = getAbsX0(getDummySize(true).x)
fun Position.getAbsY() = getAbsY0(getDummySize(true).y)
}
}
class Vector2i(val x: Int, val y: Int)
|