aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/lorenz/mod/items
diff options
context:
space:
mode:
authorLorenz <ESs95s3P5z8Pheb>2022-07-14 12:06:07 +0200
committerLorenz <ESs95s3P5z8Pheb>2022-07-14 12:06:07 +0200
commitd1a99b2a9a9859c922002771c3d8229fab2ecb8d (patch)
treedbbe5b208e6871378a10868d1206d1d78beeb950 /src/main/java/at/lorenz/mod/items
parentf20b096222ebbffd7decec2fecf1416002644865 (diff)
downloadSkyHanni-d1a99b2a9a9859c922002771c3d8229fab2ecb8d.tar.gz
SkyHanni-d1a99b2a9a9859c922002771c3d8229fab2ecb8d.tar.bz2
SkyHanni-d1a99b2a9a9859c922002771c3d8229fab2ecb8d.zip
renamed mod to SkyHanni
Diffstat (limited to 'src/main/java/at/lorenz/mod/items')
-rw-r--r--src/main/java/at/lorenz/mod/items/HideNotClickableItems.kt450
-rw-r--r--src/main/java/at/lorenz/mod/items/ItemDisplayOverlayFeatures.kt120
-rw-r--r--src/main/java/at/lorenz/mod/items/abilitycooldown/ItemAbilityCooldown.kt197
-rw-r--r--src/main/java/at/lorenz/mod/items/abilitycooldown/WitherImpactDetection.kt65
4 files changed, 0 insertions, 832 deletions
diff --git a/src/main/java/at/lorenz/mod/items/HideNotClickableItems.kt b/src/main/java/at/lorenz/mod/items/HideNotClickableItems.kt
deleted file mode 100644
index 75a49b578..000000000
--- a/src/main/java/at/lorenz/mod/items/HideNotClickableItems.kt
+++ /dev/null
@@ -1,450 +0,0 @@
-package at.lorenz.mod.items
-
-import at.lorenz.mod.LorenzMod
-import at.lorenz.mod.bazaar.BazaarApi
-import at.lorenz.mod.events.GuiContainerEvent
-import at.lorenz.mod.utils.ItemUtils
-import at.lorenz.mod.utils.ItemUtils.cleanName
-import at.lorenz.mod.utils.ItemUtils.getLore
-import at.lorenz.mod.utils.LorenzColor
-import at.lorenz.mod.utils.LorenzUtils
-import at.lorenz.mod.utils.LorenzUtils.removeColorCodes
-import at.lorenz.mod.utils.RenderUtils.highlight
-import net.minecraft.client.Minecraft
-import net.minecraft.client.gui.inventory.GuiChest
-import net.minecraft.client.renderer.GlStateManager
-import net.minecraft.inventory.ContainerChest
-import net.minecraft.item.ItemStack
-import net.minecraftforge.event.entity.player.ItemTooltipEvent
-import net.minecraftforge.fml.common.eventhandler.EventPriority
-import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
-import org.lwjgl.opengl.GL11
-
-class HideNotClickableItems {
-
- private var hideReason = ""
-
- private var lastClickTime = 0L
- private var bypassUntil = 0L
-
- @SubscribeEvent
- fun onBackgroundDrawn(event: GuiContainerEvent.BackgroundDrawnEvent) {
- if (!LorenzUtils.inSkyblock) return
- if (isDisabled()) return
- if (event.gui !is GuiChest) return
- val guiChest = event.gui
- val chest = guiChest.inventorySlots as ContainerChest
- val chestName = chest.lowerChestInventory.displayName.unformattedText.trim()
-
- val lightingState = GL11.glIsEnabled(GL11.GL_LIGHTING)
- GlStateManager.disableLighting()
- GlStateManager.color(1f, 1f, 1f, 1f)
-
- for (slot in chest.inventorySlots) {
- if (slot == null) continue
-
- if (slot.slotNumber == slot.slotIndex) continue
- if (slot.stack == null) continue
-
- if (hide(chestName, slot.stack)) {
- slot highlight LorenzColor.GRAY
- }
- }
-
- if (lightingState) GlStateManager.enableLighting()
- }
-
- @SubscribeEvent
- fun onDrawSlot(event: GuiContainerEvent.DrawSlotEvent.Pre) {
- if (isDisabled()) return
- if (event.gui !is GuiChest) return
- val guiChest = event.gui
- val chest = guiChest.inventorySlots as ContainerChest
- val chestName = chest.lowerChestInventory.displayName.unformattedText.trim()
-
- val slot = event.slot
- if (slot.slotNumber == slot.slotIndex) return
- if (slot.stack == null) return
-
- val stack = slot.stack
-
- if (hide(chestName, stack)) {
- event.isCanceled = true
- }
- }
-
- @SubscribeEvent(priority = EventPriority.LOWEST)
- fun onTooltip(event: ItemTooltipEvent) {
- if (isDisabled()) return
- if (event.toolTip == null) return
- val guiChest = Minecraft.getMinecraft().currentScreen
- if (guiChest !is GuiChest) return
- val chest = guiChest.inventorySlots as ContainerChest
- val chestName = chest.lowerChestInventory.displayName.unformattedText.trim()
-
- val stack = event.itemStack
- if (ItemUtils.getItemsInOpenChest().contains(stack)) return
-
- if (hide(chestName, stack)) {
- val first = event.toolTip[0]
- event.toolTip.clear()
- event.toolTip.add("§7" + first.removeColorCodes())
- event.toolTip.add("")
- if (hideReason == "") {
- event.toolTip.add("§4No hide reason!")
- LorenzUtils.warning("Not hide reason for not clickable item!")
- } else {
- event.toolTip.add("§c$hideReason")
- }
- }
- }
-
- @SubscribeEvent
- fun onSlotClick(event: GuiContainerEvent.SlotClickEvent) {
- if (isDisabled()) return
- if (event.gui !is GuiChest) return
- val guiChest = event.gui
- val chest = guiChest.inventorySlots as ContainerChest
- val chestName = chest.lowerChestInventory.displayName.unformattedText.trim()
-
- val slot = event.slot ?: return
-
- if (slot.slotNumber == slot.slotIndex) return
- if (slot.stack == null) return
-
- val stack = slot.stack
-
- if (hide(chestName, stack)) {
- event.isCanceled = true
-// SoundQueue.addToQueue("note.bass", 0.5f, 1f)
-
- if (System.currentTimeMillis() > lastClickTime + 5_000) {
- lastClickTime = System.currentTimeMillis()
-// EssentialAPI.getNotifications()
-// .push(
-// "§cThis item cannot be moved!",
-// "§eClick here §fto disable this feature for 10 seconds!\n" +
-// "§fOr disable it forever: §6/st §f+ '§6Hide Not Clickable Items§f'.",
-// 5f,
-// action = {
-// bypassUntil = System.currentTimeMillis() + 10_000
-// })
- }
- return
- }
- }
-
- private fun isDisabled(): Boolean {
- if (bypassUntil > System.currentTimeMillis()) return true
-
- return !LorenzMod.feature.items.hideNotClickableItems
- }
-
- private fun hide(chestName: String, stack: ItemStack): Boolean {
- hideReason = ""
- return when {
- hideNpcSell(chestName, stack) -> true
- hideChestBackpack(chestName, stack) -> true
- hideSalvage(chestName, stack) -> true
- hideTrade(chestName, stack) -> true
- hideBazaarOrAH(chestName, stack) -> true
- hideAccessoryBag(chestName, stack) -> true
- hideSackOfSacks(chestName, stack) -> true
- hideFishingBag(chestName, stack) -> true
- hidePotionBag(chestName, stack) -> true
-
- else -> false
- }
- }
-
- private fun hidePotionBag(chestName: String, stack: ItemStack): Boolean {
- if (!chestName.startsWith("Potion Bag")) return false
-
- val name = stack.cleanName()
- if (isSkyBlockMenuItem(name)) {
- hideReason = "The SkyBlock Menu cannot be put into the potion bag!"
- return true
- }
-
- if (stack.cleanName().endsWith(" Potion")) return false
-
- hideReason = "This item is not a potion!"
- return true
- }
-
- private fun hideFishingBag(chestName: String, stack: ItemStack): Boolean {
- if (!chestName.startsWith("Fishing Bag")) return false
-
- val name = stack.cleanName()
- if (isSkyBlockMenuItem(name)) {
- hideReason = "The SkyBlock Menu cannot be put into the fishing bag!"
- return true
- }
-
- if (stack.cleanName().endsWith(" Bait")) return false
-
- hideReason = "This item is not a fishing bait!"
- return true
- }
-
- private fun hideSackOfSacks(chestName: String, stack: ItemStack): Boolean {
- if (!chestName.startsWith("Sack of Sacks")) return false
-
- val name = stack.cleanName()
- if (ItemUtils.isSack(name)) return false
- if (isSkyBlockMenuItem(name)) return false
-
- hideReason = "This item is not a sack!"
- return true
- }
-
- private fun hideAccessoryBag(chestName: String, stack: ItemStack): Boolean {
- if (!chestName.startsWith("Accessory Bag")) return false
-
- if (stack.getLore().any { it.contains("ACCESSORY") }) return false
- if (isSkyBlockMenuItem(stack.cleanName())) return false
-
- hideReason = "This item is not an accessory!"
- return true
- }
-
- private fun hideTrade(chestName: String, stack: ItemStack): Boolean {
- if (!chestName.startsWith("You ")) return false
-
- if (ItemUtils.isCoOpSoulBound(stack)) {
- hideReason = "Coop-Soulbound items cannot be traded!"
- return true
- }
-
- val name = stack.cleanName()
-
- if (ItemUtils.isSack(name)) {
- hideReason = "Sacks cannot be traded!"
- return true
- }
-
- if (isSkyBlockMenuItem(name)) {
- hideReason = "The SkyBlock Menu cannot be traded!"
- return true
- }
-
- val result = when {
- name.contains("Personal Deletor") -> true
- name.contains("Day Crystal") -> true
- name.contains("Night Crystal") -> true
- name.contains("Cat Talisman") -> true
- name.contains("Lynx Talisman") -> true
- name.contains("Cheetah Talisman") -> true
- else -> false
- }
-
- if (result) hideReason = "This item cannot be traded!"
- return result
- }
-
- private fun hideNpcSell(chestName: String, stack: ItemStack): Boolean {
- if (chestName != "Trades" && chestName != "Ophelia") return false
-
- var name = stack.cleanName()
- val size = stack.stackSize
- val amountText = " x$size"
- if (name.endsWith(amountText)) {
- name = name.substring(0, name.length - amountText.length)
- }
-
- if (isSkyBlockMenuItem(name)) {
- hideReason = "The SkyBlock Menu cannot be sold at the NPC!"
- return true
- }
-
- if (!ItemUtils.isRecombobulated(stack)) {
- when (name) {
- "Health Potion VIII Splash Potion" -> return false
- "Stone Button" -> return false
- "Revive Stone" -> return false
- "Premium Flesh" -> return false
- "Defuse Kit" -> return false
- "White Wool" -> return false
- "Enchanted Wool" -> return false
- "Training Weights" -> return false
- "Journal Entry" -> return false
- "Twilight Arrow Poison" -> return false
- "Lever" -> return false
-
- "Fairy's Galoshes" -> return false
- }
- if (name.endsWith("Gem Rune I")) return false
-
- if (name.startsWith("Music Disc")) return false
- }
-
- hideReason = "This item should not be sold at the NPC!"
- return true
- }
-
- private fun hideChestBackpack(chestName: String, stack: ItemStack): Boolean {
- if (!chestName.contains("Ender Chest") && !chestName.contains("Backpack")) return false
-
- val name = stack.cleanName()
-
- if (isSkyBlockMenuItem(name)) {
- hideReason = "The SkyBlock Menu cannot be put into the storage!"
- return true
- }
- if (ItemUtils.isSack(name)) {
- hideReason = "Sacks cannot be put into the storage!"
- return true
- }
-
- val result = when {
- name.endsWith(" New Year Cake Bag") -> true
- name == "Nether Wart Pouch" -> true
- name == "Basket of Seeds" -> true
- name == "Builder's Wand" -> true
-
- else -> false
- }
-
- if (result) hideReason = "Bags cannot be put into the storage!"
- return result
- }
-
- private fun hideSalvage(chestName: String, stack: ItemStack): Boolean {
- if (chestName != "Salvage Item") return false
-
- if (ItemUtils.isRecombobulated(stack)) {
- hideReason = "This item should not be salvaged! (Recombobulated)"
- return true
- }
- for (line in stack.getLore()) {
- if (line.contains("LEGENDARY DUNGEON")) {
- hideReason = "This item should not be salvaged! (Legendary)"
- return true
- }
- }
-
- val name = stack.cleanName()
-
- val armorSets = listOf(
- "Zombie Knight",
- "Heavy",
- "Zombie Soldier",
- "Skeleton Grunt",
- "Skeleton Soldier",
- "Zombie Commander",
- "Skeleton Master",
- "Sniper",
- "Skeletor",
- "Rotten",
- )
-
- val items = mutableListOf<String>()
- for (armor in armorSets) {
- items.add("$armor Helmet")
- items.add("$armor Chestplate")
- items.add("$armor Leggings")
- items.add("$armor Boots")
- }
-
- items.add("Zombie Soldier Cutlass")
- items.add("Silent Death")
- items.add("Zombie Knight Sword")
- items.add("Conjuring")
- items.add("Dreadlord Sword")
- items.add("Soulstealer Bow")
- items.add("Machine Gun Bow")
- items.add("Earth Shard")
- items.add("Zombie Commander Whip")
- items.add("Sniper Bow")
-
- for (item in items) {
- if (name.endsWith(" $item")) {
- return false
- }
- }
-
- if (isSkyBlockMenuItem(name)) {
- hideReason = "The SkyBlock Menu cannot be salvaged!"
- return true
- }
-
- hideReason = "This item cannot be salvaged!"
- return true
- }
-
- private fun hideBazaarOrAH(chestName: String, stack: ItemStack): Boolean {
- val bazaarInventory = BazaarApi.isBazaarInventory(chestName)
-
- val auctionHouseInventory =
- chestName == "Co-op Auction House" || chestName == "Auction House" || chestName == "Create BIN Auction" || chestName == "Create Auction"
- if (!bazaarInventory && !auctionHouseInventory) return false
-
-
- val displayName = stack.displayName
-
- if (isSkyBlockMenuItem(displayName.removeColorCodes())) {
- if (bazaarInventory) hideReason = "The SkyBlock Menu is not a Bazaar Product!"
- if (auctionHouseInventory) hideReason = "The SkyBlock Menu cannot be auctioned!"
- return true
- }
-
- if (bazaarInventory != BazaarApi.isBazaarItem(displayName)) {
- if (bazaarInventory) hideReason = "This item is not a Bazaar Product!"
- if (auctionHouseInventory) hideReason = "Bazaar Products cannot be auctioned!"
-
- return true
- }
-
- if (isNotAuctionable(stack)) return true
-
- return false
- }
-
- private fun isNotAuctionable(stack: ItemStack): Boolean {
- if (ItemUtils.isCoOpSoulBound(stack)) {
- hideReason = "Coop-Soulbound items cannot be auctioned!"
- return true
- }
-
- val name = stack.cleanName()
-
- if (ItemUtils.isSack(name)) {
- hideReason = "Sacks cannot be auctioned!"
- return true
- }
-
- val result = when {
- name.contains("Personal Deletor") -> true
- name.contains("Day Crystal") -> true
- name.contains("Night Crystal") -> true
-
- name.contains("Cat Talisman") -> true
- name.contains("Lynx Talisman") -> true
- name.contains("Cheetah Talisman") -> true
-
- name.contains("Hoe of Great Tilling") -> true
- name.contains("Hoe of Greater Tilling") -> true
- name.contains("InfiniDirt") -> true
- name.contains("Prismapump") -> true
- name.contains("Mathematical Hoe Blueprint") -> true
- name.contains("Basket of Seeds") -> true
- name.contains("Nether Wart Pouch") -> true
-
- name.contains("Carrot Hoe") -> true
- name.contains("Sugar Cane Hoe") -> true
- name.contains("Nether Warts Hoe") -> true
- name.contains("Potato Hoe") -> true
- name.contains("Melon Dicer") -> true
- name.contains("Pumpkin Dicer") -> true
- name.contains("Coco Chopper") -> true
- name.contains("Wheat Hoe") -> true
-
- else -> false
- }
-
- if (result) hideReason = "This item cannot be auctioned!"
- return result
- }
-
- private fun isSkyBlockMenuItem(name: String): Boolean = name == "SkyBlock Menu (Right Click)"
-}
diff --git a/src/main/java/at/lorenz/mod/items/ItemDisplayOverlayFeatures.kt b/src/main/java/at/lorenz/mod/items/ItemDisplayOverlayFeatures.kt
deleted file mode 100644
index 3d16af280..000000000
--- a/src/main/java/at/lorenz/mod/items/ItemDisplayOverlayFeatures.kt
+++ /dev/null
@@ -1,120 +0,0 @@
-package at.lorenz.mod.items
-
-import at.lorenz.mod.LorenzMod
-import at.lorenz.mod.events.GuiRenderItemEvent
-import at.lorenz.mod.utils.ItemUtils
-import at.lorenz.mod.utils.ItemUtils.cleanName
-import at.lorenz.mod.utils.LorenzDebug
-import at.lorenz.mod.utils.LorenzUtils
-import at.lorenz.mod.utils.LorenzUtils.between
-import at.lorenz.mod.utils.LorenzUtils.matchRegex
-import at.lorenz.mod.utils.NumberUtil.romanToDecimal
-import net.minecraft.client.renderer.GlStateManager
-import net.minecraft.item.ItemStack
-import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
-
-class ItemDisplayOverlayFeatures {
-
- @SubscribeEvent
- fun onRenderItemOverlayPost(event: GuiRenderItemEvent.RenderOverlayEvent.Post) {
- val item = event.stack ?: return
-
- if (!LorenzUtils.inSkyblock || item.stackSize != 1) return
-
- val stackTip = getStackTip(item)
-
- if (stackTip.isNotEmpty()) {
- GlStateManager.disableLighting()
- GlStateManager.disableDepth()
- GlStateManager.disableBlend()
- event.fr.drawStringWithShadow(
- stackTip,
- (event.x + 17 - event.fr.getStringWidth(stackTip)).toFloat(),
- (event.y + 9).toFloat(),
- 16777215
- )
- GlStateManager.enableLighting()
- GlStateManager.enableDepth()
- }
-
- }
-
- private fun getStackTip(item: ItemStack): String {
- val name = item.cleanName()
-
- if (LorenzMod.feature.items.displayMasterStarNumber) {
- when (name) {
- "First Master Star" -> return "1"
- "Second Master Star" -> return "2"
- "Third Master Star" -> return "3"
- "Fourth Master Star" -> return "4"
- "Fifth Master Star" -> return "5"
- }
- }
-
- if (LorenzMod.feature.items.displayMasterSkullNumber) {
- if (name.matchRegex("(.*)Master Skull - Tier .")) {
- return name.substring(name.length - 1)
- }
- }
-
- if (LorenzMod.feature.items.displayDungeonHeadFloor) {
- if (name.contains("Golden ") || name.contains("Diamond ")) {
- when {
- name.contains("Bonzo") -> return "1"
- name.contains("Scarf") -> return "2"
- name.contains("Professor") -> return "3"
- name.contains("Thorn") -> return "4"
- name.contains("Livid") -> return "5"
- name.contains("Sadan") -> return "6"
- name.contains("Necron") -> return "7"
- }
- }
- }
-
- if (LorenzMod.feature.items.displayNewYearCakeNumber) {
- if (name.startsWith("New Year Cake (")) {
- try {
- return "§b" + name.between("(Year ", ")")
- } catch (e: IndexOutOfBoundsException) {
- val message = "New Year Cake error in string: '$name': ${e.message}"
- LorenzDebug.log(message)
- LorenzUtils.error(message)
- }
- }
- }
-
- if (LorenzMod.feature.items.displayPetLevel) {
- if (ItemUtils.isPet(name)) {
- try {
- val level = name.between("Lvl ", "] ").toInt()
- if (level != ItemUtils.maxPetLevel(name)) {
- return "$level"
- }
- } catch (e: java.lang.NumberFormatException) {
- e.printStackTrace()
- LorenzDebug.log("name: '$name'")
- LorenzUtils.warning("NumberFormatException at lorenzItemDisplayPetLevel")
- }
- }
- }
-
- if (LorenzMod.feature.items.displaySackName) {
- if (ItemUtils.isSack(name)) {
- val split = name.split(" ")
- val sackName = split[split.size - 2]
- return (if (name.contains("Enchanted")) "§5" else "") + sackName.substring(0, 2)
- }
- }
-
- if (LorenzMod.feature.items.displayMinionTier) {
- if (name.contains(" Minion ")) {
- val array = name.split(" ")
- val last = array[array.size - 1]
- return last.romanToDecimal().toString()
- }
- }
-
- return ""
- }
-} \ No newline at end of file
diff --git a/src/main/java/at/lorenz/mod/items/abilitycooldown/ItemAbilityCooldown.kt b/src/main/java/at/lorenz/mod/items/abilitycooldown/ItemAbilityCooldown.kt
deleted file mode 100644
index 6f4648817..000000000
--- a/src/main/java/at/lorenz/mod/items/abilitycooldown/ItemAbilityCooldown.kt
+++ /dev/null
@@ -1,197 +0,0 @@
-package at.lorenz.mod.items.abilitycooldown
-
-import at.lorenz.mod.LorenzMod
-import at.lorenz.mod.events.GuiRenderItemEvent
-import at.lorenz.mod.events.LorenzActionBarEvent
-import at.lorenz.mod.utils.ItemUtils
-import at.lorenz.mod.utils.ItemUtils.cleanName
-import at.lorenz.mod.utils.LorenzColor
-import at.lorenz.mod.utils.LorenzUtils
-import at.lorenz.mod.utils.LorenzUtils.between
-import net.minecraft.client.Minecraft
-import net.minecraft.client.renderer.GlStateManager
-import net.minecraft.item.ItemStack
-import net.minecraftforge.common.MinecraftForge
-import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
-import net.minecraftforge.fml.common.gameevent.TickEvent
-
-class ItemAbilityCooldown {
-
- var lastAbility = ""
- var tick = 0
- val items = mutableMapOf<ItemStack, ItemText>()
- val witherImpactDetection = WitherImpactDetection(this)
-
- init {
- MinecraftForge.EVENT_BUS.register(witherImpactDetection)
- }
-
- fun clickWitherImpact() {
- Ability.WITHER_IMPACT.click()
- }
-
- @SubscribeEvent
- fun onActionBar(event: LorenzActionBarEvent) {
- if (!isEnabled()) return
-
- val message: String = event.message
- if (message.contains(" (§6")) {
- if (message.contains("§b) ")) {
- val name: String = message.between(" (§6", "§b) ")
- if (name == lastAbility) return
- lastAbility = name
- for (ability in Ability.values()) {
- if (ability.abilityName == name) {
- click(ability)
- return
- }
- }
- return
- }
- }
- lastAbility = ""
- }
-
- private fun isEnabled(): Boolean {
- return LorenzUtils.inSkyblock && LorenzMod.feature.items.itemAbilityCooldown
- }
-
- private fun click(ability: Ability) {
-// if (ability.isActive()) return
- if (!ability.actionBarDetection) return
- ability.click()
- }
-
- @SubscribeEvent
- fun onTick(event: TickEvent.ClientTickEvent) {
- if (!isEnabled()) return
-
- tick++
- if (tick % 2 == 0) {
- checkHotbar()
- }
- }
-
- private fun checkHotbar() {
- items.clear()
- for ((stack, slot) in ItemUtils.getItemsInInventoryWithSlots(true)) {
-// val inHotbar = slot in 36..43
-
- val itemName: String = stack.cleanName()
- val ability = hasAbility(itemName)
- if (ability != null) {
-
- if (ability.isOnCooldown()) {
- val duration: Long = ability.lastClick + ability.getCooldown() - System.currentTimeMillis()
- val color = if (duration < 600) LorenzColor.RED else LorenzColor.YELLOW
- items[stack] = ItemText(color, ability.getDurationText(), true)
- } else {
- items[stack] = ItemText(LorenzColor.GREEN, "R", false)
- }
- }
- }
-
- }
-
- @SubscribeEvent
- fun onRenderItemOverlayPost(event: GuiRenderItemEvent.RenderOverlayEvent.Post) {
- if (!isEnabled()) return
-
- val item = event.stack ?: return
- if (item.stackSize != 1) return
-
- var stackTip = ""
-
- val guiOpen = Minecraft.getMinecraft().currentScreen != null
- val itemText = items.filter { it.key == item }
- .firstNotNullOfOrNull { it.value } ?: return
- if (guiOpen && !itemText.onCooldown) return
-
- stackTip = itemText.color.getChatColor() + itemText.text
-
- if (stackTip.isNotEmpty()) {
- GlStateManager.disableLighting()
- GlStateManager.disableDepth()
- GlStateManager.disableBlend()
- event.fr.drawStringWithShadow(
- stackTip,
- (event.x + 17 - event.fr.getStringWidth(stackTip)).toFloat(),
- (event.y + 9).toFloat(),
- 16777215
- )
- GlStateManager.enableLighting()
- GlStateManager.enableDepth()
- }
- }
-
- private fun hasAbility(itemName: String): Ability? {
- for (ability in Ability.values()) {
- for (name in ability.itemNames) {
- if (itemName.contains(name)) {
- return ability
- }
- }
- }
- return null
- }
-
- enum class Ability(
- val abilityName: String,
- val cooldownInSeconds: Long,
- vararg val itemNames: String,
- var lastClick: Long = 0L,
- val actionBarDetection: Boolean = true
- ) {
- ATOMSPLIT("Soulcry", 4, "Atomsplit Katana", "Vorpal Katana", "Voidedge Katana"),
- WITHER_IMPACT("Wither Impact", 5, "Hyperion", "Scylla", "Valkyrie", "Astrea", actionBarDetection = false),
-
- HEAL_1("Small Heal", 7, "Wand of Healing"),
- HEAL_2("Medium Heal", 7, "Wand of Mending"),
- HEAL_3("Big Heal", 7, "Wand of Restoration"),
- HEAL_4("Huge Heal", 7, "Wand of Atonement"),
-
- ICE_SPRAY("Ice Spray", 5, "Ice Spray Wand"),
- GYRO("Gravity Storm", 30, "Gyrokinetic Wand"),
- GIANTS_SWORD("Giant's Slam", 30, "Giant's Sword"),
-
- STAR_FALL("Starfall", 2, "Starlight Wand"),
- VODOO_DOLL("Acupuncture", 5, "Voodoo Doll"),
- INK_WAND("Ink Bomb", 30, "Ink Wand"),
- GOLEM_SWORD("Iron Punch", 3, "Golem Sword"),
- EMBER_ROD("Fire Blast", 30, "Ember Rod"),
- ENDER_BOW("Ender Warp", 30, "Ender Bow"),
-
- LIVID_DAGGER("Throw", 5, "Livid Dagger"),
- WEIRD_TUBA("Howl", 20, "Weird Tuba"),
-
- ENDSTONE_SWORD("Extreme Focus", 5, "End Stone Sword"),
- PIGMAN_SWORD("Burning Souls", 5, "Pigman Sword"),
-
- SOULWARD("Soulward", 20, "Soul Esoward");
-
- fun click() {
- lastClick = System.currentTimeMillis()
- }
-
- fun isOnCooldown(): Boolean = lastClick + getCooldown() > System.currentTimeMillis()
-
- fun getCooldown(): Long = cooldownInSeconds * 1000
-
- fun getDurationText(): String {
- var duration: Long = lastClick + getCooldown() - System.currentTimeMillis()
- return if (duration < 1600) {
- duration /= 100
- var d = duration.toDouble()
- d /= 10.0
- LorenzUtils.formatDouble(d)
- } else {
- duration /= 1000
- duration++
- LorenzUtils.formatInteger(duration.toInt())
- }
- }
-
- }
-
- class ItemText(val color: LorenzColor, val text: String, val onCooldown: Boolean)
-} \ No newline at end of file
diff --git a/src/main/java/at/lorenz/mod/items/abilitycooldown/WitherImpactDetection.kt b/src/main/java/at/lorenz/mod/items/abilitycooldown/WitherImpactDetection.kt
deleted file mode 100644
index e9f1d7eed..000000000
--- a/src/main/java/at/lorenz/mod/items/abilitycooldown/WitherImpactDetection.kt
+++ /dev/null
@@ -1,65 +0,0 @@
-package at.lorenz.mod.items.abilitycooldown
-
-import at.lorenz.mod.events.PacketEvent
-import at.lorenz.mod.utils.ItemUtil.asStringSet
-import at.lorenz.mod.utils.ItemUtil.getExtraAttributes
-import at.lorenz.mod.utils.LorenzUtils
-import net.minecraft.client.Minecraft
-import net.minecraft.init.Items
-import net.minecraft.network.play.client.C08PacketPlayerBlockPlacement
-import net.minecraft.network.play.server.S1CPacketEntityMetadata
-import net.minecraft.network.play.server.S2APacketParticles
-import net.minecraft.util.EnumParticleTypes
-import net.minecraftforge.common.util.Constants
-import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
-import net.minecraftforge.fml.common.gameevent.TickEvent
-
-/**
- * Taken from Skytils under AGPL 3.0
- * Modified
- * https://github.com/Skytils/SkytilsMod/blob/1.x/LICENSE.md
- * @author Skytils
- */
-class WitherImpactDetection(private val itemAbilityCooldown: ItemAbilityCooldown) {
-
- val S2APacketParticles.type: EnumParticleTypes
- get() = this.particleType
- var lastShieldUse = -1L
- var lastShieldClick = 0L
-
- @SubscribeEvent
- fun onReceivePacket(event: PacketEvent.ReceiveEvent) {
- val mc = Minecraft.getMinecraft()
- if (!LorenzUtils.inSkyblock || mc.theWorld == null) return
-
- event.packet.apply {
-
- if (this is S1CPacketEntityMetadata && lastShieldClick != -1L && entityId == mc.thePlayer?.entityId && System.currentTimeMillis() - lastShieldClick <= 500 && func_149376_c()?.any { it.dataValueId == 17 } == true) {
- lastShieldUse = System.currentTimeMillis()
- lastShieldClick = -1
- itemAbilityCooldown.clickWitherImpact()
- }
- }
- }
-
- @SubscribeEvent
- fun onSendPacket(event: PacketEvent.SendEvent) {
- val mc = Minecraft.getMinecraft()
- if (!LorenzUtils.inSkyblock || lastShieldUse != -1L || mc.thePlayer?.heldItem == null) return
- if (event.packet is C08PacketPlayerBlockPlacement && mc.thePlayer.heldItem.item == Items.iron_sword && getExtraAttributes(
- mc.thePlayer.heldItem
- )?.getTagList("ability_scroll", Constants.NBT.TAG_STRING)?.asStringSet()
- ?.contains("WITHER_SHIELD_SCROLL") == true
- ) {
- lastShieldClick = System.currentTimeMillis()
- }
- }
-
- @SubscribeEvent
- fun onTick(event: TickEvent.ClientTickEvent) {
- if (lastShieldUse != -1L) {
- val diff = ((lastShieldUse + 5000 - System.currentTimeMillis()) / 1000f)
- if (diff < 0) lastShieldUse = -1
- }
- }
-} \ No newline at end of file