diff options
Diffstat (limited to 'src/main/java/at')
4 files changed, 89 insertions, 47 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/data/ItemTipHelper.kt b/src/main/java/at/hannibal2/skyhanni/data/ItemTipHelper.kt index 7937ab2ae..943e4f50d 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/ItemTipHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/ItemTipHelper.kt @@ -29,24 +29,23 @@ class ItemTipHelper { // if (lastColorCacheTime.getOrDefault(uuid, 0L) + 1000 > System.currentTimeMillis()) { // stackTip = cache[uuid]!! // } else { - val itemTipEvent = RenderItemTipEvent(stack) + val itemTipEvent = RenderItemTipEvent(stack, mutableListOf()) itemTipEvent.postAndCatch() - stackTip = itemTipEvent.stackTip -// cache[uuid] = stackTip -// lastColorCacheTime[uuid] = System.currentTimeMillis() -// } - if (stackTip.isEmpty()) return + if (itemTipEvent.renderObjects.isEmpty()) return GlStateManager.disableLighting() GlStateManager.disableDepth() GlStateManager.disableBlend() - val fontRenderer = event.fontRenderer - val x = event.x + 17 - fontRenderer.getStringWidth(stackTip) - val y = event.y + 9 + for (renderObject in itemTipEvent.renderObjects) { + val fontRenderer = event.fontRenderer + val text = renderObject.text + val x = event.x + 17 - fontRenderer.getStringWidth(text) + renderObject.offsetX + val y = event.y + 9 + renderObject.offsetY + fontRenderer.drawStringWithShadow(text, x.toFloat(), y.toFloat(), 16777215) + } - fontRenderer.drawStringWithShadow(stackTip, x.toFloat(), y.toFloat(), 16777215) GlStateManager.enableLighting() GlStateManager.enableDepth() } diff --git a/src/main/java/at/hannibal2/skyhanni/events/RenderItemTipEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/RenderItemTipEvent.kt index aa4831225..f5ec1d257 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/RenderItemTipEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/RenderItemTipEvent.kt @@ -4,5 +4,12 @@ import net.minecraft.item.ItemStack class RenderItemTipEvent( val stack: ItemStack, - var stackTip: String = "", -) : LorenzEvent()
\ No newline at end of file + var renderObjects: MutableList<RenderObject>, +) : LorenzEvent() { + var stackTip = "" + set(value) { + renderObjects.add(RenderObject(value, 0, 0)) + } +} + +class RenderObject(val text: String, var offsetX: Int = 0, var offsetY: Int = 0,)
\ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbility.kt b/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbility.kt index 69f5742b7..fa6d63578 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbility.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbility.kt @@ -7,6 +7,7 @@ enum class ItemAbility( val abilityName: String, private val cooldownInSeconds: Int, vararg val itemNames: String, + val alternativePosition: Boolean = false, var lastActivation: Long = 0L, var specialColor: LorenzColor? = null, var lastItemClick: Long = 0L, @@ -15,7 +16,8 @@ enum class ItemAbility( //TODO add into repo HYPERION(5, "SCYLLA", "VALKYRIE", "ASTREA"), - GYROKINETIC_WAND(30), + GYROKINETIC_WAND_LEFT(30, "GYROKINETIC_WAND", alternativePosition = true), + GYROKINETIC_WAND_RIGHT(10, "GYROKINETIC_WAND"), GIANTS_SWORD(30), ICE_SPRAY_WAND(5), ATOMSPLIT_KATANA(4, "VORPAL_KATANA", "VOIDEDGE_KATANA"), @@ -47,7 +49,7 @@ enum class ItemAbility( var newVariant = false var internalNames = mutableListOf<String>() - constructor(cooldownInSeconds: Int, vararg alternateInternalNames: String) : this("no name", cooldownInSeconds, actionBarDetection = false) { + constructor(cooldownInSeconds: Int, vararg alternateInternalNames: String, alternativePosition: Boolean = false) : this("no name", cooldownInSeconds, actionBarDetection = false, alternativePosition = alternativePosition) { newVariant = true internalNames.addAll(alternateInternalNames) internalNames.add(name) diff --git a/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbilityCooldown.kt b/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbilityCooldown.kt index 9ae351da2..8ba7eca09 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbilityCooldown.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbilityCooldown.kt @@ -9,16 +9,17 @@ import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import at.hannibal2.skyhanni.utils.LorenzColor import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.between +import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import net.minecraft.client.Minecraft import net.minecraft.item.ItemStack import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import net.minecraftforge.fml.common.gameevent.TickEvent class ItemAbilityCooldown { - - var lastAbility = "" + private var lastAbility = "" var tick = 0 - val items = mutableMapOf<ItemStack, ItemText>() + var items = mapOf<ItemStack, List<ItemText>>() + private val youAlignedOthersPattern = "§eYou aligned §r§a.* §r§eother player(s)?!".toPattern() @SubscribeEvent fun onSoundEvent(event: PlaySoundEvent) { @@ -34,7 +35,7 @@ class ItemAbilityCooldown { } if (event.soundName == "mob.endermen.portal") { if (event.pitch == 0.61904764f && event.volume == 1f) { - ItemAbility.GYROKINETIC_WAND.sound() + ItemAbility.GYROKINETIC_WAND_LEFT.sound() } } if (event.soundName == "random.anvil_land") { @@ -169,27 +170,44 @@ class ItemAbilityCooldown { tick++ if (tick % 2 == 0) { - checkHotbar() + checkHotBar() } } - private fun checkHotbar() { - items.clear() + private fun checkHotBar() { + val items = mutableMapOf<ItemStack, MutableList<ItemText>>() for ((stack, _) in ItemUtils.getItemsInInventoryWithSlots(true)) { - val ability = hasAbility(stack) - if (ability != null) { + for (ability in hasAbility(stack)) { + items.getOrPut(stack) { mutableListOf() }.add(createItemText(ability)) + } + } + this.items = items + } - if (ability.isOnCooldown()) { - val duration: Long = ability.lastActivation + ability.getCooldown() - System.currentTimeMillis() - val color = ability.specialColor ?: if (duration < 600) LorenzColor.RED else LorenzColor.YELLOW - items[stack] = ItemText(color, ability.getDurationText(), true) - } else { - ability.specialColor = null - items[stack] = ItemText(LorenzColor.GREEN, "R", false) - } + private fun createItemText(ability: ItemAbility): ItemText { + val specialColor = ability.specialColor + return if (ability.isOnCooldown()) { + val duration: Long = + ability.lastActivation + ability.getCooldown() - System.currentTimeMillis() + val color = + specialColor ?: if (duration < 600) LorenzColor.RED else LorenzColor.YELLOW + ItemText(color, ability.getDurationText(), true, ability.alternativePosition) + } else { + if (specialColor != null) { + ability.specialColor = null + tryHandleNextPhase(ability, specialColor) + return createItemText(ability) } + ItemText(LorenzColor.GREEN, "R", false, ability.alternativePosition) } + } + private fun tryHandleNextPhase(ability: ItemAbility, specialColor: LorenzColor) { + if (ability == ItemAbility.GYROKINETIC_WAND_RIGHT) { + if (specialColor == LorenzColor.BLUE) { + ability.activate(null, -4_000) + } + } } @SubscribeEvent @@ -199,19 +217,27 @@ class ItemAbilityCooldown { val stack = event.stack val guiOpen = Minecraft.getMinecraft().currentScreen != null - val itemText = items.filter { it.key == stack } + val list = items.filter { it.key == stack } .firstNotNullOfOrNull { it.value } ?: return - if (guiOpen && !itemText.onCooldown) return - val color = itemText.color - event.stackTip = color.getChatColor() + itemText.text + for (itemText in list) { + if (guiOpen && !itemText.onCooldown) continue + val color = itemText.color + val renderObject = RenderObject(color.getChatColor() + itemText.text) + if (itemText.alternativePosition) { + renderObject.offsetX = -8 + renderObject.offsetY = -10 + } + event.renderObjects.add(renderObject) - if (SkyHanniMod.feature.itemAbilities.itemAbilityCooldownBackground) { - var opacity = 130 - if (color == LorenzColor.GREEN) { - opacity = 80 + // fix multiple problems when having multiple abilities + if (SkyHanniMod.feature.itemAbilities.itemAbilityCooldownBackground) { + var opacity = 130 + if (color == LorenzColor.GREEN) { + opacity = 80 + } + stack.background = color.addOpacity(opacity).rgb } - stack.background = color.addOpacity(opacity).rgb } } @@ -221,34 +247,42 @@ class ItemAbilityCooldown { if (message == "§dCreeper Veil §r§aActivated!") { ItemAbility.WITHER_CLOAK.activate(LorenzColor.LIGHT_PURPLE) } - if (message == "§dCreeper Veil §r§cDe-activated! §r§8(Expired)" || - message == "§cNot enough mana! §r§dCreeper Veil §r§cDe-activated!" + if (message == "§dCreeper Veil §r§cDe-activated! §r§8(Expired)" + || message == "§cNot enough mana! §r§dCreeper Veil §r§cDe-activated!" ) { ItemAbility.WITHER_CLOAK.activate() } if (message == "§dCreeper Veil §r§cDe-activated!") { ItemAbility.WITHER_CLOAK.activate(null, -5000L) } + + youAlignedOthersPattern.matchMatcher(message) { + ItemAbility.GYROKINETIC_WAND_RIGHT.activate(LorenzColor.BLUE, -4_000) + } + if (message == "§eYou §r§aaligned §r§eyourself!") { + ItemAbility.GYROKINETIC_WAND_RIGHT.activate(LorenzColor.BLUE, -4_000) + } } - private fun hasAbility(stack: ItemStack): ItemAbility? { + private fun hasAbility(stack: ItemStack): MutableList<ItemAbility> { val itemName: String = stack.cleanName() val internalName = stack.getInternalName() + val list = mutableListOf<ItemAbility>() for (ability in ItemAbility.values()) { if (ability.newVariant) { if (ability.internalNames.contains(internalName)) { - return ability + list.add(ability) } } else { for (name in ability.itemNames) { if (itemName.contains(name)) { - return ability + list.add(ability) } } } } - return null + return list } private fun ItemAbility.sound() { @@ -258,5 +292,5 @@ class ItemAbilityCooldown { } } - class ItemText(val color: LorenzColor, val text: String, val onCooldown: Boolean) + class ItemText(val color: LorenzColor, val text: String, val onCooldown: Boolean, val alternativePosition: Boolean) } |