aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin
diff options
context:
space:
mode:
authorMy-Name-Is-Jeff <37018278+My-Name-Is-Jeff@users.noreply.github.com>2021-09-07 17:47:46 -0400
committerMy-Name-Is-Jeff <37018278+My-Name-Is-Jeff@users.noreply.github.com>2021-09-07 17:47:46 -0400
commitf620648099ddfd3021f484418b507acb672af4ae (patch)
tree64d0a3391d9109c3b183bf014a01186dea6e3439 /src/main/kotlin
parenta5658b53d13943452612a6ea7e5f97ea78553d7f (diff)
downloadSkytilsMod-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')
-rw-r--r--src/main/kotlin/skytils/skytilsmod/features/impl/misc/ItemFeatures.kt122
-rw-r--r--src/main/kotlin/skytils/skytilsmod/features/impl/misc/MiscFeatures.kt80
-rw-r--r--src/main/kotlin/skytils/skytilsmod/features/impl/misc/PetFeatures.kt32
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,