diff options
| author | My-Name-Is-Jeff <37018278+My-Name-Is-Jeff@users.noreply.github.com> | 2021-09-07 17:47:46 -0400 |
|---|---|---|
| committer | My-Name-Is-Jeff <37018278+My-Name-Is-Jeff@users.noreply.github.com> | 2021-09-07 17:47:46 -0400 |
| commit | f620648099ddfd3021f484418b507acb672af4ae (patch) | |
| tree | 64d0a3391d9109c3b183bf014a01186dea6e3439 /src/main/kotlin | |
| parent | a5658b53d13943452612a6ea7e5f97ea78553d7f (diff) | |
| download | SkytilsMod-f620648099ddfd3021f484418b507acb672af4ae.tar.gz SkytilsMod-f620648099ddfd3021f484418b507acb672af4ae.tar.bz2 SkytilsMod-f620648099ddfd3021f484418b507acb672af4ae.zip | |
add caching behavior to dolphin, legion, soulflow, and arrow swapper
Diffstat (limited to 'src/main/kotlin')
3 files changed, 127 insertions, 107 deletions
diff --git a/src/main/kotlin/skytils/skytilsmod/features/impl/misc/ItemFeatures.kt b/src/main/kotlin/skytils/skytilsmod/features/impl/misc/ItemFeatures.kt index eff67271..995f2560 100644 --- a/src/main/kotlin/skytils/skytilsmod/features/impl/misc/ItemFeatures.kt +++ b/src/main/kotlin/skytils/skytilsmod/features/impl/misc/ItemFeatures.kt @@ -64,6 +64,22 @@ import java.util.regex.Pattern class ItemFeatures { + companion object { + private val candyPattern = Pattern.compile("§a\\((\\d+)/10\\) Pet Candy Used") + val sellPrices = HashMap<String, Double>() + val bitCosts = HashMap<String, Int>() + val hotbarRarityCache = arrayOfNulls<ItemRarity>(9) + var selectedArrow = "" + var soulflowAmount = "" + var lowSoulFlowPinged = false + + init { + SelectedArrowDisplay() + SoulStrengthGuiElement() + SoulflowGuiElement() + } + } + @SubscribeEvent fun onSlotChanged(event: SlotChangedEvent) { if (mc.thePlayer == null || (!Utils.inSkyblock && mc.thePlayer.ticksExisted > 1)) return @@ -72,6 +88,33 @@ class ItemFeatures { if (slot.inventory == mc.thePlayer.inventory && slot.slotIndex in 0..8) { hotbarRarityCache[slot.slotIndex] = ItemUtil.getRarity(slot.stack) } + + val item = slot.stack ?: return + val extraAttr = getExtraAttributes(item) ?: return + val itemId = getSkyBlockItemID(extraAttr) ?: return + + if (itemId == "ARROW_SWAPPER") { + selectedArrow = getItemLore(item).find { + it.startsWith("§aSelected: §") + }?.substringAfter("§aSelected: ") ?: "§cUnknown" + } + if (Utils.equalsOneOf(itemId, "SOULFLOW_PILE", "SOULFLOW_BATTERY", "SOULFLOW_SUPERCELL")) { + getItemLore(item).find { + it.startsWith("§7Internalized: ") + }?.substringAfter("§7Internalized: ")?.let { s -> + soulflowAmount = s + s.drop(2).filter { it.isDigit() }.toIntOrNull()?.let { + if (Skytils.config.lowSoulflowPing > 0) { + if (it <= Skytils.config.lowSoulflowPing && !lowSoulFlowPinged) { + GuiManager.createTitle("§cLow Soulflow", 20) + lowSoulFlowPinged = true + } else if (it > Skytils.config.lowSoulflowPing) { + lowSoulFlowPinged = false + } + } + } + } + } } @SubscribeEvent @@ -449,19 +492,6 @@ class ItemFeatures { } } - companion object { - private val candyPattern = Pattern.compile("§a\\((\\d+)/10\\) Pet Candy Used") - val sellPrices = HashMap<String, Double>() - val bitCosts = HashMap<String, Int>() - val hotbarRarityCache = arrayOfNulls<ItemRarity>(9) - - init { - SelectedArrowDisplay() - SoulStrengthGuiElement() - SoulflowGuiElement() - } - } - class SoulStrengthGuiElement : GuiElement("Soul Eater Strength", FloatPair(200, 10)) { override fun render() { val player = mc.thePlayer @@ -505,22 +535,16 @@ class ItemFeatures { class SelectedArrowDisplay : GuiElement("Arrow Swapper Display", FloatPair(0.65f, 0.85f)) { override fun render() { if (toggled && Utils.inSkyblock) { - mc.thePlayer.inventory.mainInventory.find { - getSkyBlockItemID(it) == "ARROW_SWAPPER" - }?.let { item -> - val alignment = - if (actualX < UResolution.scaledWidth / 2f) TextAlignment.LEFT_RIGHT else TextAlignment.RIGHT_LEFT - ScreenRenderer.fontRenderer.drawString( - getItemLore(item).find { - it.startsWith("§aSelected: §") - }?.substringAfter("§aSelected: "), - if (actualX < UResolution.scaledWidth / 2f) 0f else width.toFloat(), - 0f, - CommonColors.WHITE, - alignment, - TextShadow.NORMAL - ) - } + val alignment = + if (actualX < UResolution.scaledWidth / 2f) TextAlignment.LEFT_RIGHT else TextAlignment.RIGHT_LEFT + ScreenRenderer.fontRenderer.drawString( + selectedArrow, + if (actualX < UResolution.scaledWidth / 2f) 0f else width.toFloat(), + 0f, + CommonColors.WHITE, + alignment, + TextShadow.NORMAL + ) } } @@ -551,35 +575,17 @@ class ItemFeatures { class SoulflowGuiElement : GuiElement("Soulflow Display", FloatPair(0.65f, 0.85f)) { override fun render() { - if (Utils.inSkyblock) { - for (i in mc.thePlayer.inventory.mainInventory) { - if (i == null) continue - if (!i.displayName.containsAny("Soulflow Pile", "Soulflow Battery", "Soulflow Supercell")) continue - for (str in getItemLore(i)) { - if (!str.startsWith("§7Internalized: ")) continue - if (Skytils.config.lowSoulflowPing > 0) { - val soulflow = (str.substring(18).filter { it.isDigit() }).toInt() - if (soulflow <= Skytils.config.lowSoulflowPing && !pinged) { - GuiManager.createTitle("§cLow Soulflow", 20) - pinged = true - } else if (soulflow > Skytils.config.lowSoulflowPing) { - pinged = false - } - } - if (toggled) { - val alignment = - if (actualX < UResolution.scaledWidth / 2f) TextAlignment.LEFT_RIGHT else TextAlignment.RIGHT_LEFT - ScreenRenderer.fontRenderer.drawString( - str.substring(16), - if (actualX < UResolution.scaledWidth / 2f) 0f else width.toFloat(), - 0f, - CommonColors.WHITE, - alignment, - TextShadow.NORMAL - ) - } - } - } + if (Utils.inSkyblock && toggled) { + val alignment = + if (actualX < UResolution.scaledWidth / 2f) TextAlignment.LEFT_RIGHT else TextAlignment.RIGHT_LEFT + ScreenRenderer.fontRenderer.drawString( + soulflowAmount, + if (actualX < UResolution.scaledWidth / 2f) 0f else width.toFloat(), + 0f, + CommonColors.WHITE, + alignment, + TextShadow.NORMAL + ) } } diff --git a/src/main/kotlin/skytils/skytilsmod/features/impl/misc/MiscFeatures.kt b/src/main/kotlin/skytils/skytilsmod/features/impl/misc/MiscFeatures.kt index cb41fdc9..902cbd0a 100644 --- a/src/main/kotlin/skytils/skytilsmod/features/impl/misc/MiscFeatures.kt +++ b/src/main/kotlin/skytils/skytilsmod/features/impl/misc/MiscFeatures.kt @@ -41,7 +41,10 @@ import net.minecraft.item.Item import net.minecraft.item.ItemMonsterPlacer import net.minecraft.item.ItemStack import net.minecraft.network.play.server.S29PacketSoundEffect -import net.minecraft.util.* +import net.minecraft.util.AxisAlignedBB +import net.minecraft.util.BlockPos +import net.minecraft.util.ChatComponentText +import net.minecraft.util.ResourceLocation import net.minecraftforge.client.event.ClientChatReceivedEvent import net.minecraftforge.client.event.RenderBlockOverlayEvent import net.minecraftforge.client.event.RenderGameOverlayEvent @@ -51,6 +54,7 @@ import net.minecraftforge.event.entity.player.ItemTooltipEvent import net.minecraftforge.fml.common.Loader import net.minecraftforge.fml.common.eventhandler.EventPriority import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import net.minecraftforge.fml.common.gameevent.TickEvent import skytils.skytilsmod.Skytils import skytils.skytilsmod.core.GuiManager.Companion.createTitle import skytils.skytilsmod.core.TickTask @@ -427,9 +431,42 @@ class MiscFeatures { } } + @SubscribeEvent + fun onTick(event: TickEvent.ClientTickEvent) { + if (!Utils.inSkyblock || event.phase != TickEvent.Phase.START || mc.thePlayer == null || mc.theWorld == null) return + + if (Skytils.config.legionPlayerDisplay) { + hasLegion = mc.thePlayer.inventory.armorInventory.any { + getExtraAttributes(it).run { + this != null && this.hasKey("enchantments") && this.getCompoundTag("enchantments") + .hasKey("ultimate_legion") + } + } + if (hasLegion) { + legionPlayers = mc.theWorld.getPlayers<EntityPlayer>( + EntityOtherPlayerMP::class.java + ) { p: EntityPlayer? -> + p != null && p !== mc.thePlayer && p.getDistanceSqToEntity(mc.thePlayer) <= 30 * 30 && p.uniqueID.version() != 2 && isInTablist( + p + ) + }.size + } + } + if (Skytils.config.summoningEyeDisplay && SBInfo.mode != SkyblockIsland.TheEnd.mode) { + placedEyes = PlacedSummoningEyeDisplay.SUMMONING_EYE_FRAMES.count { + mc.theWorld.getBlockState(it).run { + block === Blocks.end_portal_frame && this.getValue(BlockEndPortalFrame.EYE) + } + } + } + } + companion object { private val mc = Minecraft.getMinecraft() private var golemSpawnTime: Long = 0 + var legionPlayers = 0 + var hasLegion = false + var placedEyes = 0 init { GolemSpawnTimerElement() @@ -485,29 +522,10 @@ class MiscFeatures { class LegionPlayerDisplay : GuiElement("Legion Player Display", FloatPair(50, 50)) { override fun render() { - val player = mc.thePlayer - if (toggled && Utils.inSkyblock && player != null && mc.theWorld != null) { - var hasLegion = false - for (armor in player.inventory.armorInventory) { - val extraAttr = getExtraAttributes(armor) - if (extraAttr != null && extraAttr.hasKey("enchantments") && extraAttr.getCompoundTag("enchantments") - .hasKey("ultimate_legion") - ) { - hasLegion = true - break - } - } - if (!hasLegion) return + if (hasLegion && toggled && Utils.inSkyblock && mc.thePlayer != null && mc.theWorld != null) { renderItem(ItemStack(Items.enchanted_book), 0, 0) - val players = mc.theWorld.getPlayers<EntityPlayer>( - EntityOtherPlayerMP::class.java - ) { p: EntityPlayer? -> - p!!.getDistanceSqToEntity(player) <= 30 * 30 && p.uniqueID.version() != 2 && p !== player && isInTablist( - p - ) - } ScreenRenderer.fontRenderer.drawString( - if (Skytils.config.legionCap && players.size > 20) "20" else players.size.toString(), + if (Skytils.config.legionCap && legionPlayers > 20) "20" else legionPlayers.toString(), 20f, 5f, CommonColors.ORANGE, @@ -522,7 +540,7 @@ class MiscFeatures { val y = 0f renderItem(ItemStack(Items.enchanted_book), x.toInt(), y.toInt()) ScreenRenderer.fontRenderer.drawString( - "30", + "69", x + 20, y + 5, CommonColors.ORANGE, @@ -534,7 +552,7 @@ class MiscFeatures { override val height: Int get() = 16 override val width: Int - get() = 20 + ScreenRenderer.fontRenderer.getStringWidth("30") + get() = 20 + ScreenRenderer.fontRenderer.getStringWidth("69") override val toggled: Boolean get() = Skytils.config.legionPlayerDisplay @@ -549,18 +567,6 @@ class MiscFeatures { val player = mc.thePlayer if (toggled && Utils.inSkyblock && player != null && mc.theWorld != null) { if (SBInfo.mode != SkyblockIsland.TheEnd.mode) return - var invalid = false - var placedEyes = 0 - for (pos in SUMMONING_EYE_FRAMES) { - val block = mc.theWorld.getBlockState(pos) - if (block.block !== Blocks.end_portal_frame) { - invalid = true - break - } else if (block.getValue(BlockEndPortalFrame.EYE)) { - placedEyes++ - } - } - if (invalid) return renderTexture(ICON, 0, 0) ScreenRenderer.fontRenderer.drawString( "$placedEyes/8", @@ -594,7 +600,7 @@ class MiscFeatures { get() = Skytils.config.summoningEyeDisplay companion object { - private val SUMMONING_EYE_FRAMES = arrayOf( + val SUMMONING_EYE_FRAMES = arrayOf( BlockPos(-669, 9, -275), BlockPos(-669, 9, -277), BlockPos(-670, 9, -278), diff --git a/src/main/kotlin/skytils/skytilsmod/features/impl/misc/PetFeatures.kt b/src/main/kotlin/skytils/skytilsmod/features/impl/misc/PetFeatures.kt index 47f62e3f..884e9241 100644 --- a/src/main/kotlin/skytils/skytilsmod/features/impl/misc/PetFeatures.kt +++ b/src/main/kotlin/skytils/skytilsmod/features/impl/misc/PetFeatures.kt @@ -17,7 +17,6 @@ */ package skytils.skytilsmod.features.impl.misc -import net.minecraft.client.Minecraft import net.minecraft.client.entity.EntityOtherPlayerMP import net.minecraft.client.renderer.GlStateManager import net.minecraft.entity.item.EntityArmorStand @@ -32,26 +31,27 @@ import net.minecraft.util.ResourceLocation import net.minecraftforge.client.event.ClientChatReceivedEvent import net.minecraftforge.fml.common.eventhandler.EventPriority import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import net.minecraftforge.fml.common.gameevent.TickEvent import skytils.skytilsmod.Skytils +import skytils.skytilsmod.Skytils.Companion.mc import skytils.skytilsmod.core.structure.FloatPair import skytils.skytilsmod.core.structure.GuiElement import skytils.skytilsmod.events.CheckRenderEntityEvent import skytils.skytilsmod.events.GuiContainerEvent import skytils.skytilsmod.events.PacketEvent.SendEvent import skytils.skytilsmod.events.SendChatMessageEvent -import skytils.skytilsmod.utils.DevTools import skytils.skytilsmod.utils.ItemUtil.getItemLore import skytils.skytilsmod.utils.ItemUtil.getSkyBlockItemID import skytils.skytilsmod.utils.RenderUtil.highlight import skytils.skytilsmod.utils.RenderUtil.renderTexture import skytils.skytilsmod.utils.SBInfo -import skytils.skytilsmod.utils.stripControlCodes import skytils.skytilsmod.utils.Utils import skytils.skytilsmod.utils.Utils.isInTablist import skytils.skytilsmod.utils.graphics.ScreenRenderer import skytils.skytilsmod.utils.graphics.SmartFontRenderer.TextAlignment import skytils.skytilsmod.utils.graphics.SmartFontRenderer.TextShadow import skytils.skytilsmod.utils.graphics.colors.CommonColors +import skytils.skytilsmod.utils.stripControlCodes import java.util.regex.Pattern class PetFeatures { @@ -167,14 +167,29 @@ class PetFeatures { } } + @SubscribeEvent + fun onTick(event: TickEvent.ClientTickEvent) { + if (!Utils.inSkyblock || event.phase != TickEvent.Phase.START || mc.thePlayer == null || mc.theWorld == null) return + + if (Skytils.config.dolphinPetDisplay && lastPet == "Dolphin") { + dolphinPlayers = mc.theWorld.getPlayers<EntityPlayer>( + EntityOtherPlayerMP::class.java + ) { p: EntityPlayer? -> + p != null && p !== mc.thePlayer && p.getDistanceSqToEntity(mc.thePlayer) <= 10 * 10 && p.uniqueID.version() != 2 && isInTablist( + p + ) + }.size + } + } + companion object { - private val mc = Minecraft.getMinecraft() private var lastPetConfirmation: Long = 0 private var lastPetLockNotif: Long = 0 var lastPet: String? = null private val SUMMON_PATTERN = Pattern.compile("§r§aYou summoned your §r(?<pet>.+)§r§a!§r") private val AUTOPET_PATTERN = Pattern.compile("§cAutopet §eequipped your §7\\[Lvl (?<level>\\d+)] (?<pet>.+)§e! §a§lVIEW RULE§r") + var dolphinPlayers = 0 init { DolphinPetDisplay() @@ -187,15 +202,8 @@ class PetFeatures { if (toggled && Utils.inSkyblock && player != null && mc.theWorld != null) { if (lastPet != "Dolphin") return renderTexture(ICON, 0, 0) - val players = mc.theWorld.getPlayers<EntityPlayer>( - EntityOtherPlayerMP::class.java - ) { p: EntityPlayer? -> - p!!.getDistanceSqToEntity(player) <= 10 * 10 && p.uniqueID.version() != 2 && p !== player && isInTablist( - p - ) - } ScreenRenderer.fontRenderer.drawString( - if (Skytils.config.dolphinCap && players.size > 5) "5" else players.size.toString(), + if (Skytils.config.dolphinCap && dolphinPlayers > 5) "5" else dolphinPlayers.toString(), 20f, 5f, CommonColors.ORANGE, |
