Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature: Experimentation Table Guardian warning #2127

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,12 @@ public static class EnchantingConfig {
@ConfigEditorBoolean
@FeatureToggle
public boolean ultraRareBookAlert = false;

@Expose
@ConfigOption(name = "Guardian Reminder", desc = "Sends a warning when opening the Experimentation Table without a §9§lGuardian Pet §7equipped.")
@ConfigEditorBoolean
@FeatureToggle
public boolean guardianReminder = false;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package at.hannibal2.skyhanni.features.inventory.experiments

import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.data.PetAPI
import at.hannibal2.skyhanni.events.GuiRenderEvent
import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent
import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule
import at.hannibal2.skyhanni.utils.ChatUtils
import at.hannibal2.skyhanni.utils.ColorUtils.withAlpha
import at.hannibal2.skyhanni.utils.HypixelCommands
import at.hannibal2.skyhanni.utils.InventoryUtils
import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.RegexUtils.matches
import at.hannibal2.skyhanni.utils.RenderUtils
import at.hannibal2.skyhanni.utils.SimpleTimeMark
import at.hannibal2.skyhanni.utils.SoundUtils
import at.hannibal2.skyhanni.utils.renderables.Renderable
import at.hannibal2.skyhanni.utils.renderables.RenderableUtils.renderXYAligned
import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
import net.minecraft.client.Minecraft
import net.minecraft.client.gui.inventory.GuiContainer
import net.minecraft.client.renderer.GlStateManager
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import java.awt.Color
import kotlin.time.Duration.Companion.milliseconds
import kotlin.time.Duration.Companion.seconds

@SkyHanniModule
object GuardianReminder {

private val config get() = SkyHanniMod.feature.inventory.helper.enchanting
private var lastInventoryOpen = SimpleTimeMark.farPast()
private var lastErrorSound = SimpleTimeMark.farPast()

private val patternGroup = RepoPattern.group("data.enchanting.inventory.experimentstable")
private val inventoryNamePattern by patternGroup.pattern(
"mainmenu",
"Experimentation Table",
)
private val petNamePattern by patternGroup.pattern(
"guardianpet",
"§[956d]Guardian",
)

@SubscribeEvent
fun onInventory(event: InventoryFullyOpenedEvent) {
if (!isEnabled()) return
if (!inventoryNamePattern.matches(event.inventoryName)) return
if (petNamePattern.matches(PetAPI.currentPet)) return

lastInventoryOpen = SimpleTimeMark.now()
ChatUtils.clickToActionOrDisable(
"Use a §9§lGuardian Pet §efor more Exp in the Experimentation Table.",
option = config::guardianReminder,
actionName = "open pets menu",
action = {
HypixelCommands.pet()
},
)
}

@SubscribeEvent
fun onRenderOverlay(event: GuiRenderEvent.ChestGuiOverlayRenderEvent) {
if (!isEnabled()) return
if (!inventoryNamePattern.matches(InventoryUtils.openInventoryName())) return
if (lastInventoryOpen.passedSince() > 2.seconds) return
val gui = Minecraft.getMinecraft().currentScreen as? GuiContainer ?: return

sendTitle(gui.width, gui.height)
if (lastErrorSound.passedSince() > 200.milliseconds) {
lastErrorSound = SimpleTimeMark.now()
SoundUtils.playPlingSound()
}
}

// TODO rename to "send title in inventory", move to utils
private fun sendTitle(width: Int, height: Int) {
GlStateManager.pushMatrix()
GlStateManager.translate(0f, -150f, 500f)
Renderable.drawInsideRoundedRect(
Renderable.string("§cWrong Pet equipped!", 1.5),
Color(Color.DARK_GRAY.withAlpha(0), true),
horizontalAlign = RenderUtils.HorizontalAlignment.CENTER,
verticalAlign = RenderUtils.VerticalAlignment.CENTER,
).renderXYAligned(0, 125, width, height)

GlStateManager.translate(0f, 150f, -500f)
GlStateManager.popMatrix()
}

private fun isEnabled() = LorenzUtils.inSkyBlock && config.guardianReminder
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package at.hannibal2.skyhanni.features.inventory
package at.hannibal2.skyhanni.features.inventory.experiments

import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.events.GuiRenderEvent
Expand Down
Loading