diff options
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features/mining')
| -rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/mining/ColdOverlay.kt | 67 | ||||
| -rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/mining/MiningNotifications.kt | 42 |
2 files changed, 78 insertions, 31 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/ColdOverlay.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/ColdOverlay.kt new file mode 100644 index 000000000..196f2f6fb --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/ColdOverlay.kt @@ -0,0 +1,67 @@ +package at.hannibal2.skyhanni.features.mining + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.data.MiningAPI.inColdIsland +import at.hannibal2.skyhanni.events.ColdUpdateEvent +import at.hannibal2.skyhanni.events.GuiRenderEvent +import at.hannibal2.skyhanni.utils.DelayedRun +import at.hannibal2.skyhanni.utils.NumberUtil +import at.hannibal2.skyhanni.utils.RenderUtils +import at.hannibal2.skyhanni.utils.SimpleTimeMark +import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.GlStateManager +import net.minecraft.util.ResourceLocation +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import org.lwjgl.opengl.GL11 +import kotlin.time.Duration.Companion.seconds + +class ColdOverlay { + + private val config get() = SkyHanniMod.feature.mining.coldOverlay + + private var cold = 0 + private var lastCold = 0 + private var lastColdUpdate = SimpleTimeMark.farPast() + + private val textureLocation by lazy { ResourceLocation("skyhanni", "cold_overlay.png") } + + @SubscribeEvent + fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { + if (!isEnabled()) return + val alpha = getColdAlpha() + if (alpha == 0f) return + + Minecraft.getMinecraft().textureManager.bindTexture(textureLocation) + + GlStateManager.pushMatrix() + GlStateManager.pushAttrib() + + GL11.glDepthMask(false) + GlStateManager.translate(0f, 0f, -500f) + GlStateManager.color(1f, 1f, 1f, alpha) + + RenderUtils.drawTexturedRect(0f, 0f) + GL11.glDepthMask(true) + + GlStateManager.popMatrix() + GlStateManager.popAttrib() + } + + private fun getColdAlpha(): Float { + val coldInterp = NumberUtil.interpolate(cold.toFloat(), lastCold.toFloat(), lastColdUpdate.toMillis()) + val coldPercentage = (coldInterp - config.coldThreshold) / (100 - config.coldThreshold) + return coldPercentage.coerceAtLeast(0f) * (config.maxAlpha / 100) + } + + @SubscribeEvent + fun onColdUpdate(event: ColdUpdateEvent) { + val duration = if (event.cold == 0) 1.seconds else 0.seconds + DelayedRun.runDelayed(duration) { + lastCold = cold + cold = event.cold + lastColdUpdate = SimpleTimeMark.now() + } + } + + private fun isEnabled() = inColdIsland() && config.enabled +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/MiningNotifications.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/MiningNotifications.kt index acaa23ff5..d018deaa9 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/MiningNotifications.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/MiningNotifications.kt @@ -1,21 +1,19 @@ package at.hannibal2.skyhanni.features.mining import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.data.IslandType +import at.hannibal2.skyhanni.data.MiningAPI.getCold +import at.hannibal2.skyhanni.data.MiningAPI.inColdIsland +import at.hannibal2.skyhanni.data.MiningAPI.lastColdReset +import at.hannibal2.skyhanni.events.ColdUpdateEvent import at.hannibal2.skyhanni.events.ConfigLoadEvent import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent -import at.hannibal2.skyhanni.events.ScoreboardChangeEvent -import at.hannibal2.skyhanni.features.gui.customscoreboard.ScoreboardPattern import at.hannibal2.skyhanni.utils.ConditionalUtils import at.hannibal2.skyhanni.utils.LorenzUtils -import at.hannibal2.skyhanni.utils.SimpleTimeMark import at.hannibal2.skyhanni.utils.SoundUtils -import at.hannibal2.skyhanni.utils.StringUtils.matchFirst import at.hannibal2.skyhanni.utils.StringUtils.matches import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -import kotlin.math.absoluteValue import kotlin.time.Duration.Companion.milliseconds import kotlin.time.Duration.Companion.seconds @@ -28,9 +26,7 @@ object MiningNotifications { DIAMOND_GOBLIN("§bDiamond Goblin", "§bDiamond Goblin"), COLD("§bCold", "§bCold"); - override fun toString(): String { - return str - } + override fun toString() = str } private val patternGroup = RepoPattern.group("mining.notifications") @@ -50,16 +46,10 @@ object MiningNotifications { "goblin.diamondspawn", "§6A §r§bDiamond Goblin §r§6has spawned!" ) - private val coldReset by patternGroup.pattern( - "cold.reset", - "§cThe warmth of the campfire reduced your §r§b❄ Cold §r§cto 0!" - ) private val config get() = SkyHanniMod.feature.mining.notifications - private var cold = 0 private var hasSentCold = false - private var coldResetTimer = SimpleTimeMark.farPast() @SubscribeEvent fun onChat(event: LorenzChatEvent) { @@ -71,25 +61,16 @@ object MiningNotifications { scrapDrop.matches(message) -> sendNotification(MiningNotificationList.SCRAP) goldenGoblinSpawn.matches(message) -> sendNotification(MiningNotificationList.GOLDEN_GOBLIN) diamondGoblinSpawn.matches(message) -> sendNotification(MiningNotificationList.DIAMOND_GOBLIN) - coldReset.matches(message) -> { - cold = 0 - hasSentCold = false - coldResetTimer = SimpleTimeMark.now().plus(1.seconds) - } } } @SubscribeEvent - fun onScoreboardChange(event: ScoreboardChangeEvent) { - if (!LorenzUtils.inAnyIsland(IslandType.DWARVEN_MINES, IslandType.MINESHAFT)) return + fun onColdUpdate(event: ColdUpdateEvent) { + if (!inColdIsland()) return if (!config.enabled) return - val newCold = event.newList.matchFirst(ScoreboardPattern.coldPattern) { - group("cold").toInt().absoluteValue - } ?: 0 - if (cold == newCold) return - cold = newCold - if (coldResetTimer.isInFuture()) return - if (cold >= config.coldThreshold.get() && !hasSentCold) { + if (lastColdReset.passedSince() < 1.seconds) return + + if (event.cold >= config.coldThreshold.get() && !hasSentCold) { hasSentCold = true sendNotification(MiningNotificationList.COLD) } @@ -97,14 +78,13 @@ object MiningNotifications { @SubscribeEvent fun onWorldChange(event: LorenzWorldChangeEvent) { - cold = 0 hasSentCold = false } @SubscribeEvent fun onConfigLoad(event: ConfigLoadEvent) { ConditionalUtils.onToggle(config.coldThreshold) { - if (cold != config.coldThreshold.get()) hasSentCold = false + if (getCold() != config.coldThreshold.get()) hasSentCold = false } } |
