diff options
Diffstat (limited to 'src/main/kotlin/com/ambientaddons')
5 files changed, 111 insertions, 15 deletions
| diff --git a/src/main/kotlin/com/ambientaddons/AmbientAddons.kt b/src/main/kotlin/com/ambientaddons/AmbientAddons.kt index 9f63b13..57ded8a 100644 --- a/src/main/kotlin/com/ambientaddons/AmbientAddons.kt +++ b/src/main/kotlin/com/ambientaddons/AmbientAddons.kt @@ -4,6 +4,7 @@ import com.ambientaddons.config.Config  import com.ambientaddons.config.PersistentData  import com.ambientaddons.features.display.CatOverlay  import com.ambientaddons.features.display.PingOverlay +import com.ambientaddons.features.display.ThornOverlay  import com.ambientaddons.features.display.WitherShieldOverlay  import com.ambientaddons.features.dungeon.*  import com.ambientaddons.features.dungeon.terminals.MelodyHelper @@ -72,12 +73,14 @@ class AmbientAddons {              Trapper,              CrimsonFishing,              CatOverlay, -            PingOverlay +            PingOverlay, +            ThornOverlay          ).forEach(MinecraftForge.EVENT_BUS::register)          keyBinds.values.forEach(ClientRegistry::registerKeyBinding)          guiElements = listOf(              CatOverlay.element, -            PingOverlay.element +            PingOverlay.element, +            ThornOverlay.element          )      } diff --git a/src/main/kotlin/com/ambientaddons/config/Config.kt b/src/main/kotlin/com/ambientaddons/config/Config.kt index db2c327..753d401 100644 --- a/src/main/kotlin/com/ambientaddons/config/Config.kt +++ b/src/main/kotlin/com/ambientaddons/config/Config.kt @@ -36,6 +36,7 @@ object Config : Vigilant(      var maskWarning = false      var cat = true      var witherShieldDisplay = 0 +    var spiritBowTimer = 0      var shouldPing = 0      var pingDisplay = 0 @@ -194,6 +195,12 @@ object Config : Vigilant(                  description = "Displays remaining wither shield duration",                  options = listOf("Off", "Default", "Shadow", "Outline")              ) +            selector( +                ::spiritBowTimer, +                name = "Spirit bow break timer", +                description = "Displays time until spirit bow breaks", +                options = listOf("Off", "Default", "Shadow", "Outline") +            )              subcategory("Ping and TPS") {                  selector(                      ::shouldPing, diff --git a/src/main/kotlin/com/ambientaddons/features/display/CatOverlay.kt b/src/main/kotlin/com/ambientaddons/features/display/CatOverlay.kt index ac35729..8f010ae 100644 --- a/src/main/kotlin/com/ambientaddons/features/display/CatOverlay.kt +++ b/src/main/kotlin/com/ambientaddons/features/display/CatOverlay.kt @@ -3,6 +3,7 @@ package com.ambientaddons.features.display  import AmbientAddons.Companion.config  import AmbientAddons.Companion.mc  import com.ambientaddons.gui.GuiElement +import com.ambientaddons.gui.MoveGui  import com.ambientaddons.utils.render.OverlayUtils  import net.minecraft.client.renderer.GlStateManager  import net.minecraft.util.ResourceLocation @@ -16,7 +17,9 @@ object CatOverlay {      @SubscribeEvent      fun onRenderOverlay(event: RenderGameOverlayEvent) { -        if (!config.cat || event.type != RenderGameOverlayEvent.ElementType.TEXT) return +        if ((!config.cat && mc.currentScreen !is MoveGui) || +            event.type != RenderGameOverlayEvent.ElementType.TEXT +        ) return          GlStateManager.pushMatrix()          GlStateManager.enableAlpha()          GlStateManager.color(255f, 255f, 255f, 255f) diff --git a/src/main/kotlin/com/ambientaddons/features/display/PingOverlay.kt b/src/main/kotlin/com/ambientaddons/features/display/PingOverlay.kt index d8689be..409cb33 100644 --- a/src/main/kotlin/com/ambientaddons/features/display/PingOverlay.kt +++ b/src/main/kotlin/com/ambientaddons/features/display/PingOverlay.kt @@ -4,6 +4,7 @@ import AmbientAddons.Companion.config  import AmbientAddons.Companion.mc  import com.ambientaddons.events.ReceivePacketEvent  import com.ambientaddons.gui.GuiElement +import com.ambientaddons.gui.MoveGui  import com.ambientaddons.utils.Alignment  import com.ambientaddons.utils.Extensions.renderWidth  import com.ambientaddons.utils.Extensions.withModPrefix @@ -131,24 +132,38 @@ object PingOverlay {      @SubscribeEvent      fun onRenderOverlay(event: RenderGameOverlayEvent) { -        if (config.pingDisplay == 0 || event.type != RenderGameOverlayEvent.ElementType.TEXT) return -        val textStyle = TextStyle.fromInt(config.pingDisplay - 1) ?: return -        GlStateManager.pushMatrix() -        GlStateManager.translate(element.position.x, element.position.y, 500.0) -        GlStateManager.scale(element.position.scale, element.position.scale, 1.0) -        val tpsValue = averageTps?.let { "${colorizeTps(it) }%.1f".format(it) } ?: "§e?" -        if (shouldPing()) { -            val pingValue = averagePing?.let { "${colorizePing(it)}%.1f".format(it) } ?: "§e?" +        if (event.type != RenderGameOverlayEvent.ElementType.TEXT) return +        val textStyle = TextStyle.fromInt(config.pingDisplay - 1) ?: TextStyle.Outline +        if (config.pingDisplay != 0) { +            GlStateManager.pushMatrix() +            GlStateManager.translate(element.position.x, element.position.y, 500.0) +            GlStateManager.scale(element.position.scale, element.position.scale, 1.0) +            val tpsValue = averageTps?.let { "${colorizeTps(it) }%.1f".format(it) } ?: "§e?" +            if (shouldPing()) { +                val pingValue = averagePing?.let { "${colorizePing(it)}%.1f".format(it) } ?: "§e?" +                val valueWidth = max(pingValue.renderWidth(), tpsValue.renderWidth()) +                OverlayUtils.drawString(0, 0, "§bPing:", textStyle, Alignment.Left) +                OverlayUtils.drawString(0, 10, "§bTPS:", textStyle, Alignment.Left) +                OverlayUtils.drawString(30 + valueWidth, 0, pingValue, textStyle, Alignment.Right) +                OverlayUtils.drawString(30 + valueWidth, 10, tpsValue, textStyle, Alignment.Right) +            } else { +                OverlayUtils.drawString(0, 0, "§bTPS:", textStyle, Alignment.Left) +                OverlayUtils.drawString(30 + tpsValue.renderWidth(), 0, tpsValue, textStyle, Alignment.Right) +            } +            GlStateManager.popMatrix() +        } else if (mc.currentScreen is MoveGui) { +            GlStateManager.pushMatrix() +            GlStateManager.translate(element.position.x, element.position.y, 500.0) +            GlStateManager.scale(element.position.scale, element.position.scale, 1.0) +            val tpsValue = "§a19.8" +            val pingValue = "§e103.1"              val valueWidth = max(pingValue.renderWidth(), tpsValue.renderWidth())              OverlayUtils.drawString(0, 0, "§bPing:", textStyle, Alignment.Left)              OverlayUtils.drawString(0, 10, "§bTPS:", textStyle, Alignment.Left)              OverlayUtils.drawString(30 + valueWidth, 0, pingValue, textStyle, Alignment.Right)              OverlayUtils.drawString(30 + valueWidth, 10, tpsValue, textStyle, Alignment.Right) -        } else { -            OverlayUtils.drawString(0, 0, "§bTPS:", textStyle, Alignment.Left) -            OverlayUtils.drawString(30 + tpsValue.renderWidth(), 0, tpsValue, textStyle, Alignment.Right) +            GlStateManager.popMatrix()          } -        GlStateManager.popMatrix()      } diff --git a/src/main/kotlin/com/ambientaddons/features/display/ThornOverlay.kt b/src/main/kotlin/com/ambientaddons/features/display/ThornOverlay.kt new file mode 100644 index 0000000..70a5d2e --- /dev/null +++ b/src/main/kotlin/com/ambientaddons/features/display/ThornOverlay.kt @@ -0,0 +1,68 @@ +package com.ambientaddons.features.display + +import AmbientAddons.Companion.config +import AmbientAddons.Companion.mc +import com.ambientaddons.gui.GuiElement +import com.ambientaddons.gui.MoveGui +import com.ambientaddons.utils.Alignment +import com.ambientaddons.utils.Extensions.stripControlCodes +import com.ambientaddons.utils.SBLocation +import com.ambientaddons.utils.dungeon.TextStyle +import com.ambientaddons.utils.render.OverlayUtils +import net.minecraft.client.renderer.GlStateManager +import net.minecraftforge.client.event.ClientChatReceivedEvent +import net.minecraftforge.client.event.RenderGameOverlayEvent +import net.minecraftforge.event.world.WorldEvent +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import kotlin.math.roundToInt + +object ThornOverlay { +    val element = GuiElement("thorn", 50, 10) +    private var lastPickedUpBow: Long = -1 +    private const val bowPickedUpString = "You picked up the Spirit Bow! Use it to attack Thorn!" + +    @SubscribeEvent +    fun onChat(event: ClientChatReceivedEvent) { +        if (SBLocation.dungeonFloor?.floor != 4) return +        if (event.message.unformattedText.stripControlCodes() == bowPickedUpString && lastPickedUpBow < 0) { +            lastPickedUpBow = System.currentTimeMillis() +        } +    } + +    @SubscribeEvent +    fun onWorldUnload(event: WorldEvent.Unload) { +        lastPickedUpBow = -1 +    } + +    private fun colorizeTime(time: Double) = when { +        (time < 3) -> "§c" +        (time < 5) -> "§e" +        else -> "§a" +    } + +    @SubscribeEvent +    fun onRenderOverlay(event: RenderGameOverlayEvent) { +        if (event.type != RenderGameOverlayEvent.ElementType.TEXT) return +        val textStyle = TextStyle.fromInt(config.spiritBowTimer - 1) ?: TextStyle.Outline +        val timeUntilBreak = 20.0 - ((System.currentTimeMillis() - lastPickedUpBow) / 1000.0) +        if (config.spiritBowTimer != 0 && SBLocation.dungeonFloor?.floor == 4) { +            if (timeUntilBreak > 0) { +                val timeString = "${colorizeTime(timeUntilBreak)}%.2f".format(timeUntilBreak) +                GlStateManager.pushMatrix() +                GlStateManager.translate(element.position.x, element.position.y, 500.0) +                GlStateManager.scale(element.position.scale, element.position.scale, 1.0) +                OverlayUtils.drawString(0, 0, "§bBow:", textStyle, Alignment.Left) +                OverlayUtils.drawString(50, 0, timeString, textStyle, Alignment.Right) +                GlStateManager.popMatrix() +            } +        } else if (mc.currentScreen is MoveGui) { +            val timeString = "§e4.98" +            GlStateManager.pushMatrix() +            GlStateManager.translate(element.position.x, element.position.y, 500.0) +            GlStateManager.scale(element.position.scale, element.position.scale, 1.0) +            OverlayUtils.drawString(0, 0, "§bBow:", textStyle, Alignment.Left) +            OverlayUtils.drawString(50, 0, timeString, textStyle, Alignment.Right) +            GlStateManager.popMatrix() +        } +    } +}
\ No newline at end of file | 
