From a6fce6eca80132823d941a7da620d7f67097229a Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Fri, 2 Jun 2023 12:54:34 +0200 Subject: Showing fished item names --- .../features/fishing/ShowFishingItemName.kt | 90 ++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/main/java/at/hannibal2/skyhanni/features/fishing/ShowFishingItemName.kt (limited to 'src/main/java/at/hannibal2/skyhanni/features') diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/ShowFishingItemName.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/ShowFishingItemName.kt new file mode 100644 index 000000000..1e72f0c4f --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/ShowFishingItemName.kt @@ -0,0 +1,90 @@ +package at.hannibal2.skyhanni.features.fishing + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.utils.InventoryUtils +import at.hannibal2.skyhanni.utils.ItemUtils.name +import at.hannibal2.skyhanni.utils.LocationUtils +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.LorenzVec +import at.hannibal2.skyhanni.utils.RenderUtils.drawString +import at.hannibal2.skyhanni.utils.RenderUtils.exactLocation +import at.hannibal2.skyhanni.utils.StringUtils.removeColor +import com.google.common.cache.CacheBuilder +import net.minecraft.client.Minecraft +import net.minecraft.entity.item.EntityItem +import net.minecraftforge.client.event.RenderWorldLastEvent +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import net.minecraftforge.fml.common.gameevent.TickEvent +import java.util.concurrent.TimeUnit + +class ShowFishingItemName { + private val config get() = SkyHanniMod.feature.fishing.fishedItemName + private var tick = 0 + private var hasRodInHand = false + private var cache = + CacheBuilder.newBuilder().expireAfterWrite(750, TimeUnit.MILLISECONDS) + .build>() + + // Taken from Skytils + private val cheapCoins = setOf( + "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTM4MDcxNzIxY2M1YjRjZDQwNmNlNDMxYTEzZjg2MDgzYTg5NzNlMTA2NGQyZjg4OTc4Njk5MzBlZTZlNTIzNyJ9fX0=", + "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGZhMDg3ZWI3NmU3Njg3YTgxZTRlZjgxYTdlNjc3MjY0OTk5MGY2MTY3Y2ViMGY3NTBhNGM1ZGViNmM0ZmJhZCJ9fX0=" + ) + + @SubscribeEvent + fun onTick(event: TickEvent.ClientTickEvent) { + if (event.phase != TickEvent.Phase.START) return + if (!isEnabled()) return + + tick++ + if (tick % 10 == 0) { + hasRodInHand = isFishingRod() + } + } + + private fun isFishingRod() = InventoryUtils.getItemInHand()?.name?.contains("Rod") ?: false + + @SubscribeEvent + fun onRenderWorld(event: RenderWorldLastEvent) { + if (!isEnabled()) return + if (hasRodInHand) { + for (entityItem in Minecraft.getMinecraft().theWorld.loadedEntityList.filterIsInstance()) { + val location = event.exactLocation(entityItem).add(0.0, 0.8, 0.0) + if (location.distance(LocationUtils.playerLocation()) > 15) continue + val itemStack = entityItem.entityItem + var name = itemStack.name ?: continue + + // Hypixel sometimes replaces the bait item mid air with a stone + if (name.removeColor() == "Stone") continue + + val size = itemStack.stackSize + val isBait = name.endsWith(" Bait") && size == 1 + val prefix = if (!isBait) { + "§a§l+" + } else { + if (!config.showBaits) continue + name = "§7" + name.removeColor() + "§c§l-" + } + + itemStack?.tagCompound?.getTag("SkullOwner")?.toString()?.let { + for (coin in cheapCoins) { + if (it.contains(coin)) { + name = "§6Coins" + } + } + } + + val sizeText = if (size != 1) "§7x$size §r" else "" + cache.put(entityItem, location to "$prefix §r$sizeText$name") + } + } + + for ((location, text) in cache.asMap().values) { + event.drawString(location, text) + } + } + + fun isEnabled() = LorenzUtils.inSkyBlock && config.enabled + +} -- cgit