diff options
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/BlazeSlayerDaggerHelper.kt | 135 | ||||
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/HellionShield.kt | 10 |
2 files changed, 106 insertions, 39 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/BlazeSlayerDaggerHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/BlazeSlayerDaggerHelper.kt index 3864f8ee8..16cf1d8f1 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/BlazeSlayerDaggerHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/BlazeSlayerDaggerHelper.kt @@ -9,7 +9,7 @@ import net.minecraft.client.Minecraft import net.minecraft.client.entity.EntityPlayerSP import net.minecraft.client.gui.ScaledResolution import net.minecraft.client.renderer.GlStateManager -import net.minecraft.network.play.client.C07PacketPlayerDigging +import net.minecraft.network.play.client.C08PacketPlayerBlockPlacement import net.minecraft.network.play.server.S45PacketTitle import net.minecraftforge.client.event.RenderGameOverlayEvent import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -18,9 +18,13 @@ import org.lwjgl.input.Keyboard class BlazeSlayerDaggerHelper { - var textToRenderMain = "" - var textToRenderOther = "" var clientSideClicked = false + var textTopLeft = "" + var textTopRight = "" + var textBottomLeft = "" + var textBottomRight = "" + + var lastCheck = 0L @SubscribeEvent fun onTick(event: TickEvent.ClientTickEvent) { @@ -28,13 +32,59 @@ class BlazeSlayerDaggerHelper { val dagger = getDaggerInHand() if (dagger != null) { - textToRenderMain = getDaggerText(dagger) - textToRenderOther = getDaggerText(dagger.other()) + setDaggerText(dagger) return } - textToRenderMain = "" - textToRenderOther = "" + textTopLeft = "" + textTopRight = "" + textBottomLeft = "" + textBottomRight = "" + } + + private fun setDaggerText(holding: Dagger) { + checkActiveDagger() + + val first = Dagger.TWILIGHT + val second = Dagger.FIREDUST + + textTopLeft = format(holding, true, first) + textTopRight = format(holding, true, second) + textBottomLeft = format(holding, false, first) + textBottomRight = format(holding, false, second) + } + + private fun format(dagger: Dagger, active: Boolean, compareInHand: Dagger): String { + var daggerInHand = dagger + val inHand = dagger == compareInHand + + if (!inHand) { + daggerInHand = daggerInHand.other() + } + + var shield = daggerInHand.getActive() + if (!active) { + shield = shield.other() + } + + return if (inHand && active) { + "§7[" + shield.chatColor + shield.cleanName + "§7]" + } else { + shield.chatColor + shield.cleanName + } + + } + + private fun checkActiveDagger() { + if (lastCheck + 1_000 > System.currentTimeMillis()) return + lastCheck = System.currentTimeMillis() + + for (dagger in Dagger.values()) { + val first = dagger.shields[0] + if (!first.active && !dagger.shields[1].active) { + first.active = true + } + } } private fun getDaggerInHand(): Dagger? { @@ -49,20 +99,6 @@ class BlazeSlayerDaggerHelper { return null } - private fun getDaggerText(dagger: Dagger): String { - var activeAbility = "" - var inactiveAbility = "" - for (shield in dagger.shields) { - if (shield.active) { - activeAbility = shield.chatColor + "§l" + shield - } else { - inactiveAbility = " §7/ " + shield.chatColor + shield.toString().lowercase() - } - } - if (activeAbility == "") return "" - return "$activeAbility$inactiveAbility" - } - private fun getName(player: EntityPlayerSP): String { val itemStack = player.inventory.mainInventory[player.inventory.currentItem] ?: return "" return itemStack.name ?: "" @@ -98,18 +134,14 @@ class BlazeSlayerDaggerHelper { @SubscribeEvent fun onRightClick(event: PacketEvent.SendEvent) { if (!isEnabled()) return - if (clientSideClicked) return val packet = event.packet - if (packet is C07PacketPlayerDigging) { - val status = packet.status - if (status == C07PacketPlayerDigging.Action.RELEASE_USE_ITEM) { - val dagger = getDaggerInHand() - dagger?.shields?.forEach { shield -> shield.active = !shield.active } - clientSideClicked = true - } + if (packet is C08PacketPlayerBlockPlacement) { + val dagger = getDaggerInHand() + dagger?.shields?.forEach { shield -> shield.active = !shield.active } + clientSideClicked = true } } @@ -131,6 +163,15 @@ class BlazeSlayerDaggerHelper { } else { TWILIGHT } + + fun getActive(): HellionShield { + for (shield in shields) { + if (shield.active) { + return shield + } + } + throw RuntimeException("no active shield found for dagger $this") + } } @SubscribeEvent @@ -151,15 +192,41 @@ class BlazeSlayerDaggerHelper { val renderer = Minecraft.getMinecraft().fontRendererObj GlStateManager.pushMatrix() - GlStateManager.translate((width / 2).toFloat(), (height / 3.8).toFloat(), 0.0f) + GlStateManager.translate(((width / 2) / 1.18).toFloat(), (height / 3.8).toFloat(), 0.0f) + GlStateManager.scale(4.0f, 4.0f, 4.0f) + TextRenderUtils.drawStringCenteredScaledMaxWidth(textTopLeft, renderer, 0f, 0f, false, 60, 0) + GlStateManager.popMatrix() + + GlStateManager.pushMatrix() + GlStateManager.translate(((width / 2) * 1.18).toFloat(), (height / 3.8).toFloat(), 0.0f) + GlStateManager.scale(4.0f, 4.0f, 4.0f) + TextRenderUtils.drawStringCenteredScaledMaxWidth(textTopRight, renderer, 0f, 0f, false, 60, 0) + GlStateManager.popMatrix() + + GlStateManager.pushMatrix() + GlStateManager.translate(((width / 2) / 1.18).toFloat(), (height / 3.0).toFloat(), 0.0f) GlStateManager.scale(4.0f, 4.0f, 4.0f) - TextRenderUtils.drawStringCenteredScaledMaxWidth(textToRenderMain, renderer, 0f, 0f, false, 55, 0) + TextRenderUtils.drawStringCenteredScaledMaxWidth(textBottomLeft, renderer, 0f, 0f, false, 20, 0) GlStateManager.popMatrix() GlStateManager.pushMatrix() - GlStateManager.translate((width / 2).toFloat(), (height / 3.2).toFloat(), 0.0f) + GlStateManager.translate(((width / 2) * 1.18).toFloat(), (height / 3.0).toFloat(), 0.0f) GlStateManager.scale(4.0f, 4.0f, 4.0f) - TextRenderUtils.drawStringCenteredScaledMaxWidth(textToRenderOther, renderer, 0f, 0f, false, 40, 0) + TextRenderUtils.drawStringCenteredScaledMaxWidth(textBottomRight, renderer, 0f, 0f, false, 20, 0) GlStateManager.popMatrix() } -}
\ No newline at end of file +} + +private fun HellionShield.other(): HellionShield { + for (dagger in BlazeSlayerDaggerHelper.Dagger.values()) { + if (this in dagger.shields) { + for (shield in dagger.shields) { + if (shield != this) { + return shield + } + } + } + } + + throw RuntimeException("Found no other shield for $this") +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/HellionShield.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/HellionShield.kt index 454d1b65f..dffd1ca90 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/HellionShield.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/HellionShield.kt @@ -2,10 +2,10 @@ package at.hannibal2.skyhanni.features.slayer.blaze import at.hannibal2.skyhanni.utils.LorenzColor -enum class HellionShield(val formattedName: String, val color: LorenzColor, val chatColor: String = color.getChatColor(), var active: Boolean = false) { - AURIC("§e§lAURIC", LorenzColor.YELLOW), - ASHEN("§8§lASHEN", LorenzColor.DARK_GRAY), - SPIRIT("§f§lSPIRIT", LorenzColor.WHITE), - CRYSTAL("§b§lCRYSTAL", LorenzColor.AQUA), +enum class HellionShield(val formattedName: String, val cleanName: String, val color: LorenzColor, val chatColor: String = color.getChatColor(), var active: Boolean = false) { + AURIC("§e§lAURIC", "Auric", LorenzColor.YELLOW), + ASHEN("§8§lASHEN", "Ashen", LorenzColor.DARK_GRAY), + SPIRIT("§f§lSPIRIT", "Spirit", LorenzColor.WHITE), + CRYSTAL("§b§lCRYSTAL", "Crystal", LorenzColor.AQUA), ; }
\ No newline at end of file |