From b5eec4d98759d5fd712edb9cb2bdc45f8c8b8a7a Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Sat, 13 Apr 2024 11:44:00 +0200 Subject: [PATCH 01/36] ReforgeHelper --- .../java/at/hannibal2/skyhanni/SkyHanniMod.kt | 6 + .../at/hannibal2/skyhanni/api/ReforgeAPI.kt | 149 +++++++ .../skyhanni/config/ConfigManager.kt | 68 +++ .../inventory/helper/HelperConfig.java | 5 + .../inventory/helper/ReforgeHelperConfig.java | 31 ++ ...uReforgeStoneJson.kt => NeuReforgeJson.kt} | 26 +- .../skyhanni/data/model/SkyblockStat.kt | 85 ++++ .../features/inventory/ReforgeHelper.kt | 391 ++++++++++++++++++ .../features/misc/items/EstimatedItemValue.kt | 4 - .../items/EstimatedItemValueCalculator.kt | 11 +- .../at/hannibal2/skyhanni/utils/NEUItems.kt | 13 + .../at/hannibal2/skyhanni/utils/NumberUtil.kt | 2 + 12 files changed, 771 insertions(+), 20 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java rename src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/neu/{NeuReforgeStoneJson.kt => NeuReforgeJson.kt} (71%) create mode 100644 src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index e87d8c048b4b..e25e43ebceee 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -3,6 +3,7 @@ package at.hannibal2.skyhanni import at.hannibal2.skyhanni.api.CollectionAPI import at.hannibal2.skyhanni.api.DataWatcherAPI import at.hannibal2.skyhanni.api.GetFromSackAPI +import at.hannibal2.skyhanni.api.ReforgeAPI import at.hannibal2.skyhanni.api.SkillAPI import at.hannibal2.skyhanni.config.ConfigFileType import at.hannibal2.skyhanni.config.ConfigManager @@ -246,6 +247,7 @@ import at.hannibal2.skyhanni.features.inventory.ItemStars import at.hannibal2.skyhanni.features.inventory.MaxPurseItems import at.hannibal2.skyhanni.features.inventory.PowerStoneGuideFeatures import at.hannibal2.skyhanni.features.inventory.QuickCraftFeatures +import at.hannibal2.skyhanni.features.inventory.ReforgeHelper import at.hannibal2.skyhanni.features.inventory.RngMeterInventory import at.hannibal2.skyhanni.features.inventory.SackDisplay import at.hannibal2.skyhanni.features.inventory.ShiftClickBrewing @@ -421,6 +423,7 @@ import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.MinecraftConsoleFilter.Companion.initLogging import at.hannibal2.skyhanni.utils.NEUItems import at.hannibal2.skyhanni.utils.NEUVersionCheck.checkIfNeuIsLoaded +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils import at.hannibal2.skyhanni.utils.TabListData import at.hannibal2.skyhanni.utils.UtilsPatterns import at.hannibal2.skyhanni.utils.repopatterns.RepoPatternManager @@ -510,6 +513,7 @@ class SkyHanniMod { loadModule(GardenBestCropTime()) loadModule(ActionBarData) loadModule(TrackerManager) + loadModule(SkyBlockItemModifierUtils) loadModule(ScoreboardPattern) loadModule(UtilsPatterns) loadModule(BossbarData) @@ -548,6 +552,7 @@ class SkyHanniMod { loadModule(LorenzUtils) loadModule(NEUItems) loadModule(PestAPI) + loadModule(ReforgeAPI) loadModule(MiningAPI) loadModule(FossilExcavatorAPI) @@ -579,6 +584,7 @@ class SkyHanniMod { loadModule(BazaarBestSellMethod()) loadModule(ShiftClickBrewing()) loadModule(BazaarOpenPriceWebsite()) + loadModule(ReforgeHelper()) loadModule(AuctionHouseCopyUnderbidPrice()) loadModule(AnvilCombineHelper()) loadModule(SeaCreatureMessageShortener()) diff --git a/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt b/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt new file mode 100644 index 000000000000..c595788c9d95 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt @@ -0,0 +1,149 @@ +package at.hannibal2.skyhanni.api + +import at.hannibal2.skyhanni.data.jsonobjects.repo.neu.NeuReforgeJson +import at.hannibal2.skyhanni.data.model.SkyblockStatList +import at.hannibal2.skyhanni.events.NeuRepositoryReloadEvent +import at.hannibal2.skyhanni.utils.ItemCategory +import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName +import at.hannibal2.skyhanni.utils.ItemUtils.getItemCategoryOrNull +import at.hannibal2.skyhanni.utils.ItemUtils.itemNameWithoutColor +import at.hannibal2.skyhanni.utils.LorenzRarity +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.NEUInternalName +import net.minecraft.item.ItemStack +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +object ReforgeAPI { + var reforgeList: List = emptyList() + private set(value) { + field = value + nonePowerStoneReforge = value.filterNot { it.isReforgeStone } + onlyPowerStoneReforge = value.filter { it.isReforgeStone } + } + + var nonePowerStoneReforge: List = emptyList() + private set + + var onlyPowerStoneReforge: List = emptyList() + private set + + enum class ReforgeType { + SWORD, BOW, ARMOR, CHESTPLATE, HELMET, CLOAK, AXE, HOE, AXE_AND_HOE, PICKAXE, EQUIPMENT, ROD, SWORD_AND_ROD, SPECIAL_ITEMS, VACUUM + } + + class Reforge( + val name: String, + val type: ReforgeType, + val stats: Map, + val reforgeStone: NEUInternalName? = null, + val specialItems: List? = null, + val extraProperty: Map = emptyMap(), + val costs: Map? = null + ) { + + val isReforgeStone = reforgeStone != null + + val rawReforgeStoneName = reforgeStone?.itemNameWithoutColor + + val lowercaseName = name.lowercase() + + fun isValid(itemStack: ItemStack) = isValid(itemStack.getItemCategoryOrNull(), itemStack.getInternalName()) + + fun isValid(itemCategory: ItemCategory?, internalName: NEUInternalName) = + when (type) { + ReforgeType.SWORD -> setOf( + ItemCategory.SWORD, + ItemCategory.GAUNTLET, + ItemCategory.LONGSWORD, + ItemCategory.FISHING_WEAPON + ).contains(itemCategory) + + ReforgeType.BOW -> itemCategory == ItemCategory.BOW || itemCategory == ItemCategory.SHORT_BOW + ReforgeType.ARMOR -> setOf( + ItemCategory.HELMET, + ItemCategory.CHESTPLATE, + ItemCategory.LEGGINGS, + ItemCategory.BOOTS + ).contains(itemCategory) + + ReforgeType.CHESTPLATE -> itemCategory == ItemCategory.CHESTPLATE + ReforgeType.HELMET -> itemCategory == ItemCategory.HELMET + ReforgeType.CLOAK -> itemCategory == ItemCategory.CLOAK + ReforgeType.AXE -> itemCategory == ItemCategory.AXE + ReforgeType.HOE -> itemCategory == ItemCategory.HOE + ReforgeType.AXE_AND_HOE -> itemCategory == ItemCategory.HOE || itemCategory == ItemCategory.AXE + ReforgeType.PICKAXE -> itemCategory == ItemCategory.PICKAXE || itemCategory == ItemCategory.DRILL || itemCategory == ItemCategory.GAUNTLET + ReforgeType.EQUIPMENT -> setOf( + ItemCategory.CLOAK, + ItemCategory.BELT, + ItemCategory.NECKLACE, + ItemCategory.BRACELET, + ItemCategory.GLOVES + ).contains(itemCategory) + + ReforgeType.ROD -> itemCategory == ItemCategory.FISHING_ROD || itemCategory == ItemCategory.FISHING_WEAPON + ReforgeType.SWORD_AND_ROD -> setOf( + ItemCategory.SWORD, + ItemCategory.GAUNTLET, + ItemCategory.LONGSWORD, + ItemCategory.FISHING_ROD, + ItemCategory.FISHING_WEAPON + ).contains(itemCategory) + + ReforgeType.VACUUM -> itemCategory == ItemCategory.VACUUM + ReforgeType.SPECIAL_ITEMS -> specialItems?.contains(internalName) ?: false + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as Reforge + + if (name != other.name) return false + if (type != other.type) return false + if (stats != other.stats) return false + if (reforgeStone != other.reforgeStone) return false + if (specialItems != other.specialItems) return false + if (extraProperty != other.extraProperty) return false + + return true + } + + override fun hashCode(): Int { + var result = name.hashCode() + result = 31 * result + type.hashCode() + result = 31 * result + stats.hashCode() + result = 31 * result + (reforgeStone?.hashCode() ?: 0) + result = 31 * result + (specialItems?.hashCode() ?: 0) + result = 31 * result + extraProperty.hashCode() + return result + } + + override fun toString(): String { + return "Reforge $name" + } + + } + + @SubscribeEvent + fun onNeuRepoReload(event: NeuRepositoryReloadEvent) { + val reforgeStoneData = event.readConstant>("reforgestones").values + val reforgeData = event.readConstant>("reforges").values + reforgeList = (reforgeStoneData + reforgeData).map(::mapReforge) + } + + private fun mapReforge(it: NeuReforgeJson): Reforge { + val type = it.itemType + return Reforge( + name = it.reforgeName, + type = LorenzUtils.enumValueOf(type.first), + stats = it.reforgeStats ?: emptyMap(), + reforgeStone = it.internalName, + specialItems = type.second.takeIf { it.isNotEmpty() }, + extraProperty = it.reforgeAbility, + costs = it.reforgeCosts + ) + } + +} diff --git a/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt b/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt index 93f40cae4c1f..51857d2a48f4 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt @@ -7,6 +7,9 @@ import at.hannibal2.skyhanni.data.jsonobjects.local.FriendsJson import at.hannibal2.skyhanni.data.jsonobjects.local.JacobContestsJson import at.hannibal2.skyhanni.data.jsonobjects.local.KnownFeaturesJson import at.hannibal2.skyhanni.data.jsonobjects.local.VisualWordsJson +import at.hannibal2.skyhanni.data.jsonobjects.other.HypixelApiTrophyFish +import at.hannibal2.skyhanni.data.model.SkyblockStat +import at.hannibal2.skyhanni.data.model.SkyblockStatList import at.hannibal2.skyhanni.events.LorenzEvent import at.hannibal2.skyhanni.features.fishing.trophy.TrophyRarity import at.hannibal2.skyhanni.features.misc.update.UpdateManager @@ -20,6 +23,7 @@ import at.hannibal2.skyhanni.utils.LorenzVec import at.hannibal2.skyhanni.utils.NEUInternalName import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName import at.hannibal2.skyhanni.utils.NEUItems +import at.hannibal2.skyhanni.utils.NumberUtil.isInt import at.hannibal2.skyhanni.utils.SimpleTimeMark import at.hannibal2.skyhanni.utils.SimpleTimeMark.Companion.asTimeMark import at.hannibal2.skyhanni.utils.tracker.SkyHanniTracker @@ -29,6 +33,7 @@ import com.google.gson.JsonObject import com.google.gson.TypeAdapter import com.google.gson.TypeAdapterFactory import com.google.gson.stream.JsonReader +import com.google.gson.stream.JsonToken import com.google.gson.stream.JsonWriter import io.github.notenoughupdates.moulconfig.annotations.ConfigLink import io.github.notenoughupdates.moulconfig.observer.PropertyTypeAdapterFactory @@ -148,6 +153,58 @@ class ConfigManager { return reader.nextString().toLong().asTimeMark() } }.nullSafe()) + .registerTypeAdapter(HypixelApiTrophyFish::class.java, object : TypeAdapter() { + override fun write(out: JsonWriter, value: HypixelApiTrophyFish) {} + + override fun read(reader: JsonReader): HypixelApiTrophyFish { + val trophyFish = mutableMapOf() + var totalCaught = 0 + reader.beginObject() + while (reader.hasNext()) { + val key = reader.nextName() + if (key == "total_caught") { + totalCaught = reader.nextInt() + continue + } + if (reader.peek() == JsonToken.NUMBER) { + val valueAsString = reader.nextString() + if (valueAsString.isInt()) { + trophyFish[key] = valueAsString.toInt() + continue + } + } + reader.skipValue() + } + reader.endObject() + return HypixelApiTrophyFish(totalCaught, trophyFish) + } + }.nullSafe()) + .registerTypeAdapter(SkyblockStat::class.java, object : TypeAdapter() { + override fun write(out: JsonWriter, value: SkyblockStat) { + out.value(value.name.lowercase()) // F you guy who made the stats lowercase + } + + override fun read(reader: JsonReader): SkyblockStat { + return SkyblockStat.valueOf(reader.nextString().uppercase()) + } + }.nullSafe()) + .registerTypeAdapter({ out, value -> + out.beginObject() + value.forEach { + out.name(it.key.name.lowercase()).value(it.value) + } + out.endObject() + }, { reader -> + reader.beginObject() + val list = SkyblockStatList() + while (reader.hasNext()) { + val name = reader.nextName() + val value = reader.nextDouble() + list[SkyblockStat.valueOf(name.uppercase())] = value + } + reader.endObject() + list + }) .enableComplexMapKeySerialization() } @@ -156,6 +213,17 @@ class ConfigManager { .create() var configDirectory = File("config/skyhanni") + + private inline fun GsonBuilder.registerTypeAdapter( + crossinline write: (JsonWriter, T) -> Unit, + crossinline read: (JsonReader) -> T + ): GsonBuilder { + this.registerTypeAdapter(T::class.java, object : TypeAdapter() { + override fun write(out: JsonWriter, value: T) = write(out, value) + override fun read(reader: JsonReader) = read(reader) + }.nullSafe()) + return this + } } val features get() = jsonHolder[ConfigFileType.FEATURES] as Features diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/HelperConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/HelperConfig.java index a8a38af68031..ca3e52fdfd26 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/HelperConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/HelperConfig.java @@ -45,4 +45,9 @@ public static class HarpConfig { @ConfigOption(name = "Tia Relay Abiphone Network Maintenance", desc = "") @Accordion public TiaRelayConfig tiaRelay = new TiaRelayConfig(); + + @Expose + @ConfigOption(name = "Reforge Helper", desc = "") + @Accordion + public ReforgeHelperConfig reforge = new ReforgeHelperConfig(); } diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java new file mode 100644 index 000000000000..9be1df419d64 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java @@ -0,0 +1,31 @@ +package at.hannibal2.skyhanni.config.features.inventory.helper; + +import at.hannibal2.skyhanni.config.FeatureToggle; +import at.hannibal2.skyhanni.config.core.config.Position; +import com.google.gson.annotations.Expose; +import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorBoolean; +import io.github.notenoughupdates.moulconfig.annotations.ConfigOption; + +public class ReforgeHelperConfig { + + @Expose + public Position posList = new Position(-200, 85, true, true); + @Expose + public Position posCurrent = new Position(280, 45, true, true); + + @Expose + @ConfigOption(name = "Enable", desc = "Enables the reforge helper") + @ConfigEditorBoolean + @FeatureToggle + public boolean enable = true; + + @Expose + @ConfigOption(name = "Reforge Stones Hex Only", desc = "Displays reforge stones only when in Hex") + @ConfigEditorBoolean + public boolean reforgeStonesOnlyHex = true; + + @Expose + @ConfigOption(name = "Hide chat", desc = "Hides the vanilla chat messages from reforging") + @ConfigEditorBoolean + public boolean hideChat = false; +} diff --git a/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/neu/NeuReforgeStoneJson.kt b/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/neu/NeuReforgeJson.kt similarity index 71% rename from src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/neu/NeuReforgeStoneJson.kt rename to src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/neu/NeuReforgeJson.kt index c450e391055e..01d35846b670 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/neu/NeuReforgeStoneJson.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/neu/NeuReforgeJson.kt @@ -1,21 +1,26 @@ package at.hannibal2.skyhanni.data.jsonobjects.repo.neu; +import at.hannibal2.skyhanni.data.model.SkyblockStatList import at.hannibal2.skyhanni.utils.LorenzRarity import at.hannibal2.skyhanni.utils.NEUInternalName +import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName +import at.hannibal2.skyhanni.utils.NEUItems import com.google.gson.annotations.Expose import com.google.gson.annotations.SerializedName +import net.minecraft.item.Item -data class NeuReforgeStoneJson( - @Expose val internalName: NEUInternalName, +data class NeuReforgeJson( + @Expose @SerializedName("internalName") val internalName: NEUInternalName?, @Expose val reforgeName: String, @Expose @SerializedName("itemTypes") val rawItemTypes: Any, @Expose val requiredRarities: List, - @Expose val reforgeCosts: Map, - @Expose val reforgeStats: Map>, + @Expose val reforgeCosts: Map?, + @Expose val reforgeStats: Map?, @Expose @SerializedName("reforgeAbility") val rawReforgeAbility: Any?, ) { private lateinit var reforgeAbilityField: Map + private lateinit var itemTypeField: Pair> val reforgeAbility get() = if (this::reforgeAbilityField.isInitialized) reforgeAbilityField @@ -36,28 +41,27 @@ data class NeuReforgeStoneJson( reforgeAbilityField } - /* used in ReforgeAPI which isn't in beta yet - val itemType: Pair> by lazy { + val itemType: Pair> + get() = if (this::itemTypeField.isInitialized) itemTypeField + else run { val any = this.rawItemTypes - return@lazy when (any) { + return when (any) { is String -> { any.replace("/", "_AND_").uppercase() to emptyList() } is Map<*, *> -> { val type = "SPECIAL_ITEMS" - val map = any as? Map> ?: return@lazy type to emptyList() + val map = any as? Map> ?: return type to emptyList() val internalNames = map["internalName"]?.map { it.asInternalName() } ?: emptyList() val itemType = map["itemid"]?.map { NEUItems.getInternalNamesForItemId(Item.getByNameOrId(it)) - }?.flatten() - ?: emptyList() + }?.flatten() ?: emptyList() type to (internalNames + itemType) } else -> throw IllegalStateException() } } -*/ } diff --git a/src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt b/src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt new file mode 100644 index 000000000000..4695ad3b7278 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt @@ -0,0 +1,85 @@ +package at.hannibal2.skyhanni.data.model + +import at.hannibal2.skyhanni.utils.StringUtils.allLettersFirstUppercase +import net.minecraft.client.Minecraft +import java.util.EnumMap + +enum class SkyblockStat(val icon: String) { + DAMAGE("§c❁"), + HEALTH("§c❤"), + DEFENSE("§a❈"), + STRENGTH("§c❁"), + INTELLIGENCE("§b✎"), + CRIT_DAMAGE("§9☠"), + CRIT_CHANCE("§9☣"), + FEROCITY("§c⫽"), + BONUS_ATTACK_SPEED("§e⚔"), + ABILITY_DAMAGE("§c๑"), + HEALTH_REGEN("§c❣"), + VITALITY("§4♨"), + MENDING("§a☄"), + TRUE_DEFENCE("§7❂"), + SWING_RANGE("§eⓈ"), + SPEED("§f✦"), + SEA_CREATURE_CHANCE("§3α"), + MAGIC_FIND("§b✯"), + PET_LUCK("§d♣"), + FISHING_SPEED("§b☂"), + BONUS_PEST_CHANCE("§2ൠ"), + COMBAT_WISDOM("§3☯"), + MINING_WISDOM("§3☯"), + FARMING_WISDOM("§3☯"), + FORAGING_WISDOM("§3☯"), + FISHING_WISDOM("§3☯"), + ENCHANTING_WISDOM("§3☯"), + ALCHEMY_WISDOM("§3☯"), + CARPENTRY_WISDOM("§3☯"), + RUNECRAFTING_WISDOM("§3☯"), + SOCIAL_WISDOM("§3☯"), + TAMING_WISDOM("§3☯"), + MINING_SPEED("§6⸕"), + BREAKING_POWER("§2Ⓟ"), + PRISTINE("§5✧"), + FORAGING_FORTUNE("§☘"), + FARMING_FORTUNE("§6☘"), + MINING_FORTUNE("§6☘"), + FEAR("§a☠") + ; + + val fname = name.lowercase().allLettersFirstUppercase() + + val iconWithName = "$icon $fname" + + fun asString(value: Int) = (if (value > 0) "+" else "") + value.toString() + " " + this.icon + + companion object { + val fontSizeOfLargestIcon by lazy { + entries.maxOf { Minecraft.getMinecraft().fontRendererObj.getStringWidth(it.icon) } + 1 + } + } + +} + +class SkyblockStatList : EnumMap(SkyblockStat::class.java), Map { + operator fun minus(other: SkyblockStatList): SkyblockStatList { + return SkyblockStatList().apply { + for ((key, value) in this@SkyblockStatList) { + this[key] = value - (other[key] ?: 0.0) + } + for ((key, value) in other) { + if (this[key] == null) { + this[key] = (this@SkyblockStatList[key] ?: 0.0) - value + } + } + } + } + + companion object { + fun mapOf(vararg list: Pair) = SkyblockStatList().apply { + for ((key, value) in list) { + this[key] = value + } + } + } +} + diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt new file mode 100644 index 000000000000..5c87c07ea0cc --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt @@ -0,0 +1,391 @@ +package at.hannibal2.skyhanni.features.inventory + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.api.ReforgeAPI +import at.hannibal2.skyhanni.data.ItemRenderBackground.Companion.background +import at.hannibal2.skyhanni.data.model.SkyblockStat +import at.hannibal2.skyhanni.data.model.SkyblockStatList +import at.hannibal2.skyhanni.events.GuiContainerEvent +import at.hannibal2.skyhanni.events.GuiRenderEvent +import at.hannibal2.skyhanni.events.InventoryCloseEvent +import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent +import at.hannibal2.skyhanni.events.LorenzChatEvent +import at.hannibal2.skyhanni.utils.DelayedRun +import at.hannibal2.skyhanni.utils.ItemUtils.cleanName +import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName +import at.hannibal2.skyhanni.utils.ItemUtils.getItemCategoryOrNull +import at.hannibal2.skyhanni.utils.ItemUtils.getItemRarityOrNull +import at.hannibal2.skyhanni.utils.ItemUtils.name +import at.hannibal2.skyhanni.utils.LorenzColor +import at.hannibal2.skyhanni.utils.LorenzRarity +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.NumberUtil.toStringWithPlus +import at.hannibal2.skyhanni.utils.RenderUtils +import at.hannibal2.skyhanni.utils.RenderUtils.renderRenderables +import at.hannibal2.skyhanni.utils.RenderUtils.renderStrings +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getReforgeName +import at.hannibal2.skyhanni.utils.StringUtils.matches +import at.hannibal2.skyhanni.utils.TimeUtils.ticks +import at.hannibal2.skyhanni.utils.renderables.Renderable +import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern +import net.minecraft.client.Minecraft +import net.minecraft.init.Items +import net.minecraft.inventory.Container +import net.minecraft.item.ItemStack +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import java.util.concurrent.atomic.AtomicBoolean +import at.hannibal2.skyhanni.utils.renderables.Renderable.Companion.string as rString + +class ReforgeHelper { + + private val config get() = SkyHanniMod.feature.inventory.helper.reforge + + private val reforgeMenu by RepoPattern.pattern( + "menu.reforge", + "Reforge Item" + ) + private val reforgeHexMenu by RepoPattern.pattern( + "menu.reforge.hex", + "The Hex ➜ Reforges" + ) + private val reforgeChatMessage by RepoPattern.pattern( + "chat.reforge.message", + "§aYou reforged your .* §r§ainto a .*!|§aYou applied a .* §r§ato your .*!" + ) + private val reforgeChatFail by RepoPattern.pattern( + "chat.reforge.fail", + "§cWait a moment before reforging again!|§cWhoa! Slow down there!" + ) + + private var isInReforgeMenu = false + private var isInHexReforgeMenu = false + + private fun isReforgeMenu(chestName: String) = reforgeMenu.matches(chestName) + private fun isHexReforgeMenu(chestName: String) = reforgeHexMenu.matches(chestName) + + private fun isEnabled() = LorenzUtils.inSkyBlock && config.enable && isInReforgeMenu + + private var itemToReforge: ItemStack? = null + private var inventoryContainer: Container? = null + + private var currentReforge: ReforgeAPI.Reforge? = null + set(value) { + field = value + formattedCurrentReforge = if (value == null) "" else "§7Now: §3${value.name}" + } + private var reforgeToSearch: ReforgeAPI.Reforge? = null + set(value) { + field = value + formattedReforgeToSearch = if (value == null) "" else "§7Goal: §9${value.name}" + } + + private var hoverdReforge: ReforgeAPI.Reforge? = null + + private var formattedCurrentReforge = "" + private var formattedReforgeToSearch = "" + + private val reforgeItem get() = if (isInHexReforgeMenu) 19 else 13 + private val reforgeButton get() = if (isInHexReforgeMenu) 48 else 22 + + private val hexReforgeNextDownButton = 35 + private val hexReforgeNextUpButton = 17 + + private val exitButton = 40 + + private var waitForChat = AtomicBoolean(false) + + /** Gatekeeps instant double switches of the state */ + private var waitDelay = false + + private var sortAfter: SkyblockStat? = null + + private var display: List = generateDisplay() + + private val hoverColor = LorenzColor.GOLD.addOpacity(50).rgb + private val selectedColor = LorenzColor.BLUE.addOpacity(100).rgb + private val finishedColor = LorenzColor.GREEN.addOpacity(75).rgb + + private fun itemUpdate() { + val newItem = inventoryContainer?.getSlot(reforgeItem)?.stack + if (newItem?.getInternalName() != itemToReforge?.getInternalName()) { + reforgeToSearch = null + } + itemToReforge = newItem + val newReforgeName = itemToReforge?.getReforgeName() ?: "" + if (newReforgeName == currentReforge?.lowercaseName) return + currentReforge = ReforgeAPI.reforgeList.firstOrNull { it.lowercaseName == newReforgeName } + updateDisplay() + } + + @SubscribeEvent + fun onClick(event: GuiContainerEvent.SlotClickEvent) { + if (!isEnabled()) return + if (event.slot?.slotNumber == reforgeButton) { + if (event.slot.stack?.name == "§eReforge Item" || event.slot.stack?.name == "§cError!") return + if (currentReforge == reforgeToSearch) { + event.isCanceled = true + waitForChat.set(false) + } else if (waitForChat.get()) { + waitDelay = true + event.isCanceled = true + } else { + if (event.clickedButton == 2) return + if (waitDelay) { + waitDelay = false + } else { + waitForChat.set(true) + } + } + } + + DelayedRun.runNextTick { + itemUpdate() + } + } + + @SubscribeEvent + fun onChat(event: LorenzChatEvent) { + if (!isEnabled()) return + when { + reforgeChatMessage.matches(event.message) -> { + DelayedRun.runDelayed(2.ticks) { + itemUpdate() + waitForChat.set(false) + } + if (config?.hideChat == true) { + event.blockedReason = "reforge_hide" + } + } + + reforgeChatFail.matches(event.message) -> { + DelayedRun.runDelayed(2.ticks) { + waitForChat.set(false) + } + if (config?.hideChat == true) { + event.blockedReason = "reforge_hide" + } + } + } + } + + @SubscribeEvent + fun onOpen(event: InventoryFullyOpenedEvent) { + if (!LorenzUtils.inSkyBlock) return + when { + isHexReforgeMenu(event.inventoryName) -> { + isInHexReforgeMenu = true + DelayedRun.runDelayed(2.ticks) { + itemUpdate() // update since an item must already be in place + } + } + + isReforgeMenu(event.inventoryName) -> { + itemToReforge = null + currentReforge = null + } + + else -> return + } + isInReforgeMenu = true + waitForChat.set(false) + DelayedRun.runNextTick { + inventoryContainer = Minecraft.getMinecraft().thePlayer.openContainer + } + } + + @SubscribeEvent + fun onClose(event: InventoryCloseEvent) { + if (!isEnabled()) return + isInReforgeMenu = false + isInHexReforgeMenu = false + reforgeToSearch = null + currentReforge = null + hoverdReforge = null + sortAfter = null + itemToReforge = null + updateDisplay() + } + + private fun updateDisplay() { + display = generateDisplay() + } + + private fun generateDisplay() = buildList { + this.add(rString("§6Reforge Overlay")) + + val item = itemToReforge ?: run { + reforgeToSearch = null + return@buildList + } + + val internalName = item.getInternalName() + val itemType = item.getItemCategoryOrNull() + val itemRarity = item.getItemRarityOrNull() ?: return@buildList + + val rawReforgeList = + if (!isInHexReforgeMenu && config.reforgeStonesOnlyHex) ReforgeAPI.nonePowerStoneReforge else ReforgeAPI.reforgeList + val reforgeList = rawReforgeList.filter { it.isValid(itemType, internalName) } + + val statTypes = reforgeList.mapNotNull { it.stats[itemRarity]?.keys }.flatten().toSet() + + val statTypeButtons = (listOf(getStatButton(null)) + statTypes.map { getStatButton(it) }).chunked(9) + this.add(Renderable.table(statTypeButtons, xPadding = 3, yPadding = 2)) + + val list = reforgeList.sortedBy(getSortSelector(itemRarity, sortAfter)).map(getReforgeView(itemRarity)) + this.addAll(list) + } + + private fun getReforgeView(itemRarity: LorenzRarity): (ReforgeAPI.Reforge) -> Renderable = { reforge -> + val text = (if (reforge.isReforgeStone) "§9" else "§7") + reforge.name + val tips = run { + val pre: List + val stats: List + val removedEffect: List + val addEffectText: String + if (currentReforge == reforge) { + pre = listOf(rString("§3Reforge is currently applied!")) + stats = (currentReforge?.stats?.get(itemRarity)?.print() ?: emptyList()) + removedEffect = emptyList() + addEffectText = "§aEffect:" + } else { + pre = listOf(rString("§6Reforge Stats")) + stats = (reforge.stats[itemRarity]?.print(currentReforge?.stats?.get(itemRarity)) ?: emptyList()) + removedEffect = getReforgeEffect( + currentReforge, + itemRarity + )?.let { listOf(rString("§cRemoves Effect:")) + it } + ?: emptyList() + addEffectText = "§aAdds Effect:" + } + + val addedEffect = + (getReforgeEffect(reforge, itemRarity)?.let { listOf(rString(addEffectText)) + it } + ?: emptyList()) + + return@run pre + stats + removedEffect + addedEffect + } + val onHover = if (!isInHexReforgeMenu) { + {} + } else { + { hoverdReforge = reforge } + } + + Renderable.clickAndHover( + text, tips, onClick = { reforgeToSearch = reforge }, onHover = onHover + ) + } + + private fun getReforgeEffect(reforge: ReforgeAPI.Reforge?, rarity: LorenzRarity) = + reforge?.extraProperty?.get(rarity)?.let { + Renderable.wrappedString( + it, + 190, + color = LorenzColor.GRAY.toColor() + ) + } + + private fun getSortSelector( + itemRarity: LorenzRarity, + sorting: SkyblockStat? + ): (ReforgeAPI.Reforge) -> Comparable = + if (sorting != null) { + { -(it.stats[itemRarity]?.get(sorting) ?: 0.0) as Comparable } + } else { + { (it.isReforgeStone) as Comparable } + } + + private fun getStatButton(stat: SkyblockStat?): Renderable { + val icon: String + val tip: String + if (stat == null) { + icon = "§7D" + tip = "§7Default" + } else { + icon = stat.icon + tip = stat.iconWithName + } + + val fieldColor = if (sortAfter == stat) LorenzColor.GRAY else LorenzColor.DARK_GRAY + + val sortField = + Renderable.drawInsideRoundedRect( + Renderable.hoverTips( + Renderable.fixedSizeLine( + rString(icon, horizontalAlign = RenderUtils.HorizontalAlignment.CENTER), + SkyblockStat.fontSizeOfLargestIcon + ), listOf("§6Sort after", tip) + ), fieldColor.toColor(), radius = 15, padding = 1 + ) + return if (sortAfter == stat) { + sortField + } else { + Renderable.clickable(sortField, { + sortAfter = stat + updateDisplay() + }) + } + } + + @SubscribeEvent + fun onRender(event: GuiRenderEvent.ChestGuiOverlayRenderEvent) { + if (!isEnabled()) return + config.posCurrent.renderStrings( + listOf(formattedReforgeToSearch, formattedCurrentReforge), + posLabel = "Reforge Notify" + ) + config.posList.renderRenderables(display, posLabel = "Reforge Overlay") + + if (hoverdReforge != null && isInHexReforgeMenu) { + if (hoverdReforge != currentReforge) { + colorReforgeStone(hoverColor, hoverdReforge?.rawReforgeStoneName ?: "Random Basic Reforge") + } else { + inventoryContainer?.inventory?.get(reforgeItem)?.background = hoverColor + } + hoverdReforge = null + } + + if (reforgeToSearch == null) return + if (reforgeToSearch != currentReforge) { + colorSelected() + } else { + inventoryContainer?.inventory?.get(reforgeItem)?.background = finishedColor + } + } + + private fun colorSelected() = if (reforgeToSearch?.isReforgeStone == true) { + if (isInHexReforgeMenu) { + colorReforgeStone(selectedColor, reforgeToSearch?.rawReforgeStoneName) + } else { + inventoryContainer?.inventory?.get(exitButton)?.background = selectedColor + } + } else { + inventoryContainer?.inventory?.get(reforgeButton)?.background = selectedColor + } + + private fun colorReforgeStone(color: Int, reforgeStone: String?) { + val inventory = inventoryContainer?.inventory ?: return + val itemStack = inventory.firstOrNull { it?.cleanName() == reforgeStone } + if (itemStack != null) { + itemStack.background = color + } else { + inventory[hexReforgeNextDownButton]?.takeIf { it.item == Items.skull }?.background = color + inventory[hexReforgeNextUpButton]?.takeIf { it.item == Items.skull }?.background = color + } + } + + private fun SkyblockStatList.print(appliedReforge: SkyblockStatList? = null): List { + val diff = appliedReforge?.let { this - it } + val main = ((diff ?: this).mapNotNull { + val key = it.key + val value = this[key] ?: return@mapNotNull null + buildList { + add(rString("§9${value.toStringWithPlus()}")) + diff?.get(key)?.let { add(rString((if (it < 0) "§c" else "§a") + it.toStringWithPlus())) } + add(rString(key.iconWithName)) + } + }) + val table = Renderable.table(main, 5) + return listOf(table) + } +} + diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt index c79c1f8a4f2f..bc9f26f2adb2 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValue.kt @@ -3,7 +3,6 @@ package at.hannibal2.skyhanni.features.misc.items import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator import at.hannibal2.skyhanni.data.jsonobjects.repo.ItemsJson -import at.hannibal2.skyhanni.data.jsonobjects.repo.neu.NeuReforgeStoneJson import at.hannibal2.skyhanni.events.ConfigLoadEvent import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.InventoryCloseEvent @@ -42,7 +41,6 @@ object EstimatedItemValue { private val cache = mutableMapOf>>() private var lastToolTipTime = 0L var gemstoneUnlockCosts = HashMap>>() - var reforges = mapOf() var bookBundleAmount = mapOf() private var currentlyShowing = false @@ -52,8 +50,6 @@ object EstimatedItemValue { fun onNeuRepoReload(event: NeuRepositoryReloadEvent) { gemstoneUnlockCosts = event.readConstant>>>("gemstonecosts") - reforges = - event.readConstant>("reforgestones") } @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt index 8602eece8227..ff7c80cbe6ea 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt @@ -1,6 +1,7 @@ package at.hannibal2.skyhanni.features.misc.items import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.api.ReforgeAPI import at.hannibal2.skyhanni.test.command.ErrorManager import at.hannibal2.skyhanni.utils.CollectionUtils.sortedDesc import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName @@ -164,15 +165,15 @@ object EstimatedItemValueCalculator { private fun addReforgeStone(stack: ItemStack, list: MutableList): Double { val rawReforgeName = stack.getReforgeName() ?: return 0.0 - val reforge = EstimatedItemValue.reforges.values.firstOrNull { - rawReforgeName == it.reforgeName.lowercase() || rawReforgeName == it.internalName.asString().lowercase() + val reforge = ReforgeAPI.onlyPowerStoneReforge.firstOrNull { + rawReforgeName == it.lowercaseName || rawReforgeName == it.reforgeStone?.asString()?.lowercase() } ?: return 0.0 - val internalName = reforge.internalName.asString().asInternalName() + val internalName = reforge.reforgeStone ?: return 0.0 val reforgeStonePrice = internalName.getPrice() val reforgeStoneName = internalName.itemName - val applyCost = getReforgeStoneApplyCost(stack, reforge.reforgeCosts, internalName) ?: return 0.0 + val applyCost = reforge.costs?.let { getReforgeStoneApplyCost(stack, it, internalName) } ?: return 0.0 - list.add("§7Reforge: §9${reforge.reforgeName}") + list.add("§7Reforge: §9${reforge.name}") list.add(" §7Stone $reforgeStoneName §7(§6" + NumberUtil.format(reforgeStonePrice) + "§7)") list.add(" §7Apply cost: (§6" + NumberUtil.format(applyCost) + "§7)") return reforgeStonePrice + applyCost diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt index 3d6f0e74e439..7dafc635486c 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt @@ -37,6 +37,7 @@ import net.minecraft.client.renderer.GlStateManager import net.minecraft.client.renderer.RenderHelper import net.minecraft.init.Blocks import net.minecraft.init.Items +import net.minecraft.item.Item import net.minecraft.item.ItemStack import net.minecraft.nbt.NBTTagCompound import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -48,6 +49,7 @@ object NEUItems { private val multiplierCache = mutableMapOf>() private val recipesCache = mutableMapOf>() private val ingredientsCache = mutableMapOf>() + private val itemIdCache = mutableMapOf>() private val hypixelApiGson by lazy { ConfigManager.createBaseGsonBuilder() @@ -250,6 +252,17 @@ object NEUItems { fun allNeuRepoItems(): Map = NotEnoughUpdates.INSTANCE.manager.itemInformation + fun getInternalNamesForItemId(item: Item): List { + if (itemIdCache.contains(item)) { + return itemIdCache[item]!! + } + val result = allNeuRepoItems().filter { + Item.getByNameOrId(it.value.get("itemid").asString) == item + }.keys.map { it.asInternalName() } + itemIdCache[item] = result + return result + } + // TODO create extended function fun getMultiplier(internalName: NEUInternalName, tryCount: Int = 0): Pair { if (multiplierCache.contains(internalName)) { diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NumberUtil.kt b/src/main/java/at/hannibal2/skyhanni/utils/NumberUtil.kt index e2df5349fbce..da8ca88a5a2a 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NumberUtil.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NumberUtil.kt @@ -164,6 +164,8 @@ object NumberUtil { } else romanSymbols[l] + (this - l).toRoman() } + fun Number.toStringWithPlus() = (if (this.toDouble() >= 0.0) "+" else "") + this.toString() + private fun processDecimal(decimal: Int, lastNumber: Int, lastDecimal: Int) = if (lastNumber > decimal) { lastDecimal - decimal } else { From f5c2b9a872444e6d289d5803f9df7e6d54ff4bb8 Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Mon, 15 Apr 2024 07:25:52 +0200 Subject: [PATCH 02/36] . fix Co-authored-by: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> --- .../features/inventory/helper/ReforgeHelperConfig.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java index 9be1df419d64..b88302c4cc44 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java @@ -14,18 +14,18 @@ public class ReforgeHelperConfig { public Position posCurrent = new Position(280, 45, true, true); @Expose - @ConfigOption(name = "Enable", desc = "Enables the reforge helper") + @ConfigOption(name = "Enable", desc = "Enables the reforge helper.") @ConfigEditorBoolean @FeatureToggle public boolean enable = true; @Expose - @ConfigOption(name = "Reforge Stones Hex Only", desc = "Displays reforge stones only when in Hex") + @ConfigOption(name = "Reforge Stones Hex Only", desc = "Displays reforge stones only when in Hex.") @ConfigEditorBoolean public boolean reforgeStonesOnlyHex = true; @Expose - @ConfigOption(name = "Hide chat", desc = "Hides the vanilla chat messages from reforging") + @ConfigOption(name = "Hide chat", desc = "Hides the vanilla chat messages from reforging.") @ConfigEditorBoolean public boolean hideChat = false; } From 576aad945abcbb4ff57466aa8e439b24358b04ce Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Tue, 16 Apr 2024 17:51:00 +0200 Subject: [PATCH 03/36] fix ConfigManager --- .../at/hannibal2/skyhanni/api/ReforgeAPI.kt | 39 +++++++++++- .../skyhanni/config/ConfigManager.kt | 59 +------------------ .../events/NeuRepositoryReloadEvent.kt | 7 ++- 3 files changed, 43 insertions(+), 62 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt b/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt index c595788c9d95..cd34dd23b73d 100644 --- a/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt @@ -1,6 +1,9 @@ package at.hannibal2.skyhanni.api +import at.hannibal2.skyhanni.config.ConfigManager +import at.hannibal2.skyhanni.config.ConfigManager.Companion.registerTypeAdapter import at.hannibal2.skyhanni.data.jsonobjects.repo.neu.NeuReforgeJson +import at.hannibal2.skyhanni.data.model.SkyblockStat import at.hannibal2.skyhanni.data.model.SkyblockStatList import at.hannibal2.skyhanni.events.NeuRepositoryReloadEvent import at.hannibal2.skyhanni.utils.ItemCategory @@ -10,6 +13,10 @@ import at.hannibal2.skyhanni.utils.ItemUtils.itemNameWithoutColor import at.hannibal2.skyhanni.utils.LorenzRarity import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.NEUInternalName +import com.google.gson.Gson +import com.google.gson.TypeAdapter +import com.google.gson.stream.JsonReader +import com.google.gson.stream.JsonWriter import net.minecraft.item.ItemStack import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -128,11 +135,39 @@ object ReforgeAPI { @SubscribeEvent fun onNeuRepoReload(event: NeuRepositoryReloadEvent) { - val reforgeStoneData = event.readConstant>("reforgestones").values - val reforgeData = event.readConstant>("reforges").values + val reforgeStoneData = event.readConstant>("reforgestones", reforgeGson).values + val reforgeData = event.readConstant>("reforges", reforgeGson).values reforgeList = (reforgeStoneData + reforgeData).map(::mapReforge) } + private val reforgeGson: Gson = ConfigManager.createBaseGsonBuilder() + .registerTypeAdapter(SkyblockStat::class.java, object : TypeAdapter() { + override fun write(out: JsonWriter, value: SkyblockStat) { + out.value(value.name.lowercase()) // F you guy who made the stats lowercase + } + + override fun read(reader: JsonReader): SkyblockStat { + return SkyblockStat.valueOf(reader.nextString().uppercase()) + } + }.nullSafe()) + .registerTypeAdapter({ out, value -> + out.beginObject() + value.forEach { + out.name(it.key.name.lowercase()).value(it.value) + } + out.endObject() + }, { reader -> + reader.beginObject() + val list = SkyblockStatList() + while (reader.hasNext()) { + val name = reader.nextName() + val value = reader.nextDouble() + list[SkyblockStat.valueOf(name.uppercase())] = value + } + reader.endObject() + list + }).create() + private fun mapReforge(it: NeuReforgeJson): Reforge { val type = it.itemType return Reforge( diff --git a/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt b/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt index 51857d2a48f4..c5f4f3fb4f13 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt @@ -7,9 +7,6 @@ import at.hannibal2.skyhanni.data.jsonobjects.local.FriendsJson import at.hannibal2.skyhanni.data.jsonobjects.local.JacobContestsJson import at.hannibal2.skyhanni.data.jsonobjects.local.KnownFeaturesJson import at.hannibal2.skyhanni.data.jsonobjects.local.VisualWordsJson -import at.hannibal2.skyhanni.data.jsonobjects.other.HypixelApiTrophyFish -import at.hannibal2.skyhanni.data.model.SkyblockStat -import at.hannibal2.skyhanni.data.model.SkyblockStatList import at.hannibal2.skyhanni.events.LorenzEvent import at.hannibal2.skyhanni.features.fishing.trophy.TrophyRarity import at.hannibal2.skyhanni.features.misc.update.UpdateManager @@ -23,7 +20,6 @@ import at.hannibal2.skyhanni.utils.LorenzVec import at.hannibal2.skyhanni.utils.NEUInternalName import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName import at.hannibal2.skyhanni.utils.NEUItems -import at.hannibal2.skyhanni.utils.NumberUtil.isInt import at.hannibal2.skyhanni.utils.SimpleTimeMark import at.hannibal2.skyhanni.utils.SimpleTimeMark.Companion.asTimeMark import at.hannibal2.skyhanni.utils.tracker.SkyHanniTracker @@ -33,7 +29,6 @@ import com.google.gson.JsonObject import com.google.gson.TypeAdapter import com.google.gson.TypeAdapterFactory import com.google.gson.stream.JsonReader -import com.google.gson.stream.JsonToken import com.google.gson.stream.JsonWriter import io.github.notenoughupdates.moulconfig.annotations.ConfigLink import io.github.notenoughupdates.moulconfig.observer.PropertyTypeAdapterFactory @@ -153,58 +148,6 @@ class ConfigManager { return reader.nextString().toLong().asTimeMark() } }.nullSafe()) - .registerTypeAdapter(HypixelApiTrophyFish::class.java, object : TypeAdapter() { - override fun write(out: JsonWriter, value: HypixelApiTrophyFish) {} - - override fun read(reader: JsonReader): HypixelApiTrophyFish { - val trophyFish = mutableMapOf() - var totalCaught = 0 - reader.beginObject() - while (reader.hasNext()) { - val key = reader.nextName() - if (key == "total_caught") { - totalCaught = reader.nextInt() - continue - } - if (reader.peek() == JsonToken.NUMBER) { - val valueAsString = reader.nextString() - if (valueAsString.isInt()) { - trophyFish[key] = valueAsString.toInt() - continue - } - } - reader.skipValue() - } - reader.endObject() - return HypixelApiTrophyFish(totalCaught, trophyFish) - } - }.nullSafe()) - .registerTypeAdapter(SkyblockStat::class.java, object : TypeAdapter() { - override fun write(out: JsonWriter, value: SkyblockStat) { - out.value(value.name.lowercase()) // F you guy who made the stats lowercase - } - - override fun read(reader: JsonReader): SkyblockStat { - return SkyblockStat.valueOf(reader.nextString().uppercase()) - } - }.nullSafe()) - .registerTypeAdapter({ out, value -> - out.beginObject() - value.forEach { - out.name(it.key.name.lowercase()).value(it.value) - } - out.endObject() - }, { reader -> - reader.beginObject() - val list = SkyblockStatList() - while (reader.hasNext()) { - val name = reader.nextName() - val value = reader.nextDouble() - list[SkyblockStat.valueOf(name.uppercase())] = value - } - reader.endObject() - list - }) .enableComplexMapKeySerialization() } @@ -214,7 +157,7 @@ class ConfigManager { var configDirectory = File("config/skyhanni") - private inline fun GsonBuilder.registerTypeAdapter( + inline fun GsonBuilder.registerTypeAdapter( crossinline write: (JsonWriter, T) -> Unit, crossinline read: (JsonReader) -> T ): GsonBuilder { diff --git a/src/main/java/at/hannibal2/skyhanni/events/NeuRepositoryReloadEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/NeuRepositoryReloadEvent.kt index bb741ae808d6..43df0d91c471 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/NeuRepositoryReloadEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/NeuRepositoryReloadEvent.kt @@ -4,6 +4,7 @@ import at.hannibal2.skyhanni.config.ConfigManager import at.hannibal2.skyhanni.test.command.ErrorManager import at.hannibal2.skyhanni.utils.NEUItems.manager import at.hannibal2.skyhanni.utils.fromJson +import com.google.gson.Gson import com.google.gson.JsonObject import com.google.gson.JsonSyntaxException import java.io.File @@ -13,10 +14,10 @@ class NeuRepositoryReloadEvent : LorenzEvent() { return manager.getJsonFromFile(File(manager.repoLocation, "constants/$file.json")) } - inline fun readConstant(file: String): T { + inline fun readConstant(file: String, gson: Gson): T { val data = getConstant(file) ?: ErrorManager.skyHanniError("$file failed to load from neu repo!") return try { - ConfigManager.gson.fromJson(data) + gson.fromJson(data) } catch (e: JsonSyntaxException) { ErrorManager.logErrorWithData( e, "$file failed to read from neu repo!", @@ -25,4 +26,6 @@ class NeuRepositoryReloadEvent : LorenzEvent() { throw e } } + + inline fun readConstant(file: String): T = readConstant(file, ConfigManager.gson) } From 96e5b7f312fb88a1c6a1218553887377d692165b Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Tue, 16 Apr 2024 17:56:14 +0200 Subject: [PATCH 04/36] fix repoPattern --- .../features/inventory/ReforgeHelper.kt | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt index 5c87c07ea0cc..e26d76bf174f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt @@ -40,20 +40,22 @@ class ReforgeHelper { private val config get() = SkyHanniMod.feature.inventory.helper.reforge - private val reforgeMenu by RepoPattern.pattern( - "menu.reforge", + private val repoGroup = RepoPattern.group("reforge") + + private val reforgeMenu by repoGroup.pattern( + "menu.blacksmith", "Reforge Item" ) - private val reforgeHexMenu by RepoPattern.pattern( - "menu.reforge.hex", + private val reforgeHexMenu by repoGroup.pattern( + "menu.hex", "The Hex ➜ Reforges" ) - private val reforgeChatMessage by RepoPattern.pattern( - "chat.reforge.message", + private val reforgeChatMessage by repoGroup.pattern( + "chat.success", "§aYou reforged your .* §r§ainto a .*!|§aYou applied a .* §r§ato your .*!" ) - private val reforgeChatFail by RepoPattern.pattern( - "chat.reforge.fail", + private val reforgeChatFail by repoGroup.pattern( + "chat.fail", "§cWait a moment before reforging again!|§cWhoa! Slow down there!" ) From 7ccc984894765085e4eddb6737a79bfb3ca61389 Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Tue, 16 Apr 2024 17:57:54 +0200 Subject: [PATCH 05/36] added config links --- .../config/features/inventory/helper/ReforgeHelperConfig.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java index b88302c4cc44..92b0a2c8e26e 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java @@ -4,13 +4,16 @@ import at.hannibal2.skyhanni.config.core.config.Position; import com.google.gson.annotations.Expose; import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorBoolean; +import io.github.notenoughupdates.moulconfig.annotations.ConfigLink; import io.github.notenoughupdates.moulconfig.annotations.ConfigOption; public class ReforgeHelperConfig { @Expose + @ConfigLink(owner = ReforgeHelperConfig.class, field = "enable") public Position posList = new Position(-200, 85, true, true); @Expose + @ConfigLink(owner = ReforgeHelperConfig.class, field = "enable") public Position posCurrent = new Position(280, 45, true, true); @Expose From 74a1c489518750ad96175aeecbe83e7b7aa67f34 Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Thu, 9 May 2024 15:17:40 +0200 Subject: [PATCH 06/36] fix highlight --- .../features/inventory/ReforgeHelper.kt | 38 +++++++++++-------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt index e26d76bf174f..cba49109c3a7 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt @@ -2,7 +2,6 @@ package at.hannibal2.skyhanni.features.inventory import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.api.ReforgeAPI -import at.hannibal2.skyhanni.data.ItemRenderBackground.Companion.background import at.hannibal2.skyhanni.data.model.SkyblockStat import at.hannibal2.skyhanni.data.model.SkyblockStatList import at.hannibal2.skyhanni.events.GuiContainerEvent @@ -21,6 +20,7 @@ import at.hannibal2.skyhanni.utils.LorenzRarity import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.NumberUtil.toStringWithPlus import at.hannibal2.skyhanni.utils.RenderUtils +import at.hannibal2.skyhanni.utils.RenderUtils.highlight import at.hannibal2.skyhanni.utils.RenderUtils.renderRenderables import at.hannibal2.skyhanni.utils.RenderUtils.renderStrings import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getReforgeName @@ -33,6 +33,7 @@ import net.minecraft.init.Items import net.minecraft.inventory.Container import net.minecraft.item.ItemStack import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import java.awt.Color import java.util.concurrent.atomic.AtomicBoolean import at.hannibal2.skyhanni.utils.renderables.Renderable.Companion.string as rString @@ -103,9 +104,9 @@ class ReforgeHelper { private var display: List = generateDisplay() - private val hoverColor = LorenzColor.GOLD.addOpacity(50).rgb - private val selectedColor = LorenzColor.BLUE.addOpacity(100).rgb - private val finishedColor = LorenzColor.GREEN.addOpacity(75).rgb + private val hoverColor = LorenzColor.GOLD.addOpacity(50) + private val selectedColor = LorenzColor.BLUE.addOpacity(100) + private val finishedColor = LorenzColor.GREEN.addOpacity(75) private fun itemUpdate() { val newItem = inventoryContainer?.getSlot(reforgeItem)?.stack @@ -288,7 +289,7 @@ class ReforgeHelper { private fun getSortSelector( itemRarity: LorenzRarity, - sorting: SkyblockStat? + sorting: SkyblockStat?, ): (ReforgeAPI.Reforge) -> Comparable = if (sorting != null) { { -(it.stats[itemRarity]?.get(sorting) ?: 0.0) as Comparable } @@ -336,12 +337,17 @@ class ReforgeHelper { posLabel = "Reforge Notify" ) config.posList.renderRenderables(display, posLabel = "Reforge Overlay") + } + @SubscribeEvent + fun onGuiContainerBackgroundDrawn(event: GuiContainerEvent.BackgroundDrawnEvent) { if (hoverdReforge != null && isInHexReforgeMenu) { if (hoverdReforge != currentReforge) { colorReforgeStone(hoverColor, hoverdReforge?.rawReforgeStoneName ?: "Random Basic Reforge") } else { - inventoryContainer?.inventory?.get(reforgeItem)?.background = hoverColor + inventoryContainer?.getSlot(reforgeItem)?.highlight(hoverColor) + + //?.get(reforgeItem)?. = hoverColor } hoverdReforge = null } @@ -350,7 +356,7 @@ class ReforgeHelper { if (reforgeToSearch != currentReforge) { colorSelected() } else { - inventoryContainer?.inventory?.get(reforgeItem)?.background = finishedColor + inventoryContainer?.getSlot(reforgeItem)?.highlight(finishedColor) } } @@ -358,20 +364,20 @@ class ReforgeHelper { if (isInHexReforgeMenu) { colorReforgeStone(selectedColor, reforgeToSearch?.rawReforgeStoneName) } else { - inventoryContainer?.inventory?.get(exitButton)?.background = selectedColor + inventoryContainer?.getSlot(exitButton)?.highlight(selectedColor) } } else { - inventoryContainer?.inventory?.get(reforgeButton)?.background = selectedColor + inventoryContainer?.getSlot(reforgeButton)?.highlight(selectedColor) } - private fun colorReforgeStone(color: Int, reforgeStone: String?) { - val inventory = inventoryContainer?.inventory ?: return - val itemStack = inventory.firstOrNull { it?.cleanName() == reforgeStone } - if (itemStack != null) { - itemStack.background = color + private fun colorReforgeStone(color: Color, reforgeStone: String?) { + val inventory = inventoryContainer?.inventorySlots ?: return + val slot = inventory.firstOrNull { it?.stack?.cleanName() == reforgeStone } + if (slot != null) { + slot highlight color } else { - inventory[hexReforgeNextDownButton]?.takeIf { it.item == Items.skull }?.background = color - inventory[hexReforgeNextUpButton]?.takeIf { it.item == Items.skull }?.background = color + inventory[hexReforgeNextDownButton]?.takeIf { it.stack.item == Items.skull }?.highlight(color) + inventory[hexReforgeNextUpButton]?.takeIf { it.stack.item == Items.skull }?.highlight(color) } } From ee1e99fba74cdbc7d5eb71ca442a7561d598a36b Mon Sep 17 00:00:00 2001 From: Cal Date: Sat, 1 Jun 2024 11:15:52 +1000 Subject: [PATCH 07/36] make it not crash --- .../skyhanni/config/features/inventory/helper/HelperConfig.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/HelperConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/HelperConfig.java index 0a26aaf7d763..ed5d1974d7bf 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/HelperConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/HelperConfig.java @@ -57,6 +57,7 @@ public static class HarpConfig { @Accordion public ReforgeHelperConfig reforge = new ReforgeHelperConfig(); + @Expose @ConfigOption(name = "Enchanting", desc = "") @Accordion public EnchantingConfig enchanting = new EnchantingConfig(); From 5e1c9ba23c121607a48b0b703a9451f5f6c2ec6f Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Sat, 1 Jun 2024 12:36:31 +0200 Subject: [PATCH 08/36] cal suggestions --- .../inventory/helper/ReforgeHelperConfig.java | 7 +++++-- .../data/jsonobjects/repo/neu/NeuReforgeJson.kt | 2 +- .../hannibal2/skyhanni/events/GuiContainerEvent.kt | 8 ++++++++ .../skyhanni/features/inventory/ReforgeHelper.kt | 13 +++++++++++-- .../skyhanni/mixins/hooks/GuiContainerHook.kt | 5 +++++ .../mixins/transformers/gui/MixinGuiContainer.java | 5 +++++ 6 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java index 92b0a2c8e26e..601be7288585 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java @@ -11,10 +11,13 @@ public class ReforgeHelperConfig { @Expose @ConfigLink(owner = ReforgeHelperConfig.class, field = "enable") - public Position posList = new Position(-200, 85, true, true); + public Position posList = new Position(80, 85, true, true); @Expose @ConfigLink(owner = ReforgeHelperConfig.class, field = "enable") - public Position posCurrent = new Position(280, 45, true, true); + public Position posCurrent = new Position(293, 88, true, true); + @Expose + @ConfigLink(owner = ReforgeHelperConfig.class, field = "enable") + public Position posCurrentHex = new Position(293, 81, true, true); @Expose @ConfigOption(name = "Enable", desc = "Enables the reforge helper.") diff --git a/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/neu/NeuReforgeJson.kt b/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/neu/NeuReforgeJson.kt index 01d35846b670..7585575673c1 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/neu/NeuReforgeJson.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/neu/NeuReforgeJson.kt @@ -10,7 +10,7 @@ import com.google.gson.annotations.SerializedName import net.minecraft.item.Item data class NeuReforgeJson( - @Expose @SerializedName("internalName") val internalName: NEUInternalName?, + @Expose val internalName: NEUInternalName?, @Expose val reforgeName: String, @Expose @SerializedName("itemTypes") val rawItemTypes: Any, @Expose val requiredRarities: List, diff --git a/src/main/java/at/hannibal2/skyhanni/events/GuiContainerEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/GuiContainerEvent.kt index 9837e1529e06..817ecd55f0b9 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/GuiContainerEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/GuiContainerEvent.kt @@ -30,6 +30,14 @@ abstract class GuiContainerEvent(open val gui: GuiContainer, open val container: GuiRenderUtils.drawGradientRect(0, 0, gui.width, gui.height, -1072689136, -804253680, 0.0) } + data class AfterDraw( + override val gui: GuiContainer, + override val container: Container, + val mouseX: Int, + val mouseY: Int, + val partialTicks: Float, + ) : GuiContainerEvent(gui, container) + @Cancelable data class CloseWindowEvent(override val gui: GuiContainer, override val container: Container) : GuiContainerEvent(gui, container) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt index cba49109c3a7..c352dd70074c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt @@ -29,6 +29,7 @@ import at.hannibal2.skyhanni.utils.TimeUtils.ticks import at.hannibal2.skyhanni.utils.renderables.Renderable import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern import net.minecraft.client.Minecraft +import net.minecraft.client.renderer.GlStateManager import net.minecraft.init.Items import net.minecraft.inventory.Container import net.minecraft.item.ItemStack @@ -332,11 +333,19 @@ class ReforgeHelper { @SubscribeEvent fun onRender(event: GuiRenderEvent.ChestGuiOverlayRenderEvent) { if (!isEnabled()) return - config.posCurrent.renderStrings( + config.posList.renderRenderables(display, posLabel = "Reforge Overlay") + } + + @SubscribeEvent + fun onGuiContainerForegroundDrawn(event: GuiContainerEvent.AfterDraw) { + if (!isEnabled()) return + GlStateManager.translate(0f, 0f, 10f) + val position = if (isInHexReforgeMenu) config.posCurrentHex else config.posCurrent + position.renderStrings( listOf(formattedReforgeToSearch, formattedCurrentReforge), posLabel = "Reforge Notify" ) - config.posList.renderRenderables(display, posLabel = "Reforge Overlay") + GlStateManager.translate(0f, 0f, -10f) } @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/hooks/GuiContainerHook.kt b/src/main/java/at/hannibal2/skyhanni/mixins/hooks/GuiContainerHook.kt index 72f4a2e90c00..aa73dd6dda0c 100644 --- a/src/main/java/at/hannibal2/skyhanni/mixins/hooks/GuiContainerHook.kt +++ b/src/main/java/at/hannibal2/skyhanni/mixins/hooks/GuiContainerHook.kt @@ -44,6 +44,11 @@ class GuiContainerHook(guiAny: Any) { } } + fun postDraw(mouseX: Int, mouseY: Int, partialTicks: Float) { + if (!SkyHanniDebugsAndTests.globalRender) return + GuiContainerEvent.AfterDraw(gui, gui.inventorySlots, mouseX, mouseY, partialTicks).postAndCatch() + } + fun foregroundDrawn(mouseX: Int, mouseY: Int, partialTicks: Float) { GuiContainerEvent.ForegroundDrawnEvent(gui, gui.inventorySlots, mouseX, mouseY, partialTicks).postAndCatch() } diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/MixinGuiContainer.java b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/MixinGuiContainer.java index c92f2ab7c985..acec9ffac7dd 100644 --- a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/MixinGuiContainer.java +++ b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/MixinGuiContainer.java @@ -36,6 +36,11 @@ private void preDraw(int mouseX, int mouseY, float partialTicks, CallbackInfo ci skyHanni$hook.preDraw(mouseX, mouseY, partialTicks, ci); } + @Inject(method = "drawScreen", at = @At("TAIL")) + private void postDraw(int mouseX, int mouseY, float partialTicks, CallbackInfo ci) { + skyHanni$hook.postDraw(mouseX, mouseY, partialTicks); + } + @Inject(method = "drawScreen", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/inventory/GuiContainer;drawGuiContainerForegroundLayer(II)V", shift = At.Shift.AFTER)) private void onForegroundDraw(int mouseX, int mouseY, float partialTicks, CallbackInfo ci) { skyHanni$hook.foregroundDrawn(mouseX, mouseY, partialTicks); From c7135d619cdafad803488ee912d47fd7da735add Mon Sep 17 00:00:00 2001 From: Cal Date: Sun, 2 Jun 2024 17:12:00 +1000 Subject: [PATCH 09/36] use annotation --- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 6 ------ src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt | 3 ++- .../hannibal2/skyhanni/features/inventory/ReforgeHelper.kt | 4 +++- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index 3a902645f7a2..53a3863b9818 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -3,7 +3,6 @@ package at.hannibal2.skyhanni import at.hannibal2.skyhanni.api.CollectionAPI import at.hannibal2.skyhanni.api.DataWatcherAPI import at.hannibal2.skyhanni.api.GetFromSackAPI -import at.hannibal2.skyhanni.api.ReforgeAPI import at.hannibal2.skyhanni.api.SkillAPI import at.hannibal2.skyhanni.config.ConfigFileType import at.hannibal2.skyhanni.config.ConfigManager @@ -271,7 +270,6 @@ import at.hannibal2.skyhanni.features.inventory.ItemStars import at.hannibal2.skyhanni.features.inventory.MaxPurseItems import at.hannibal2.skyhanni.features.inventory.PowerStoneGuideFeatures import at.hannibal2.skyhanni.features.inventory.QuickCraftFeatures -import at.hannibal2.skyhanni.features.inventory.ReforgeHelper import at.hannibal2.skyhanni.features.inventory.RngMeterInventory import at.hannibal2.skyhanni.features.inventory.SackDisplay import at.hannibal2.skyhanni.features.inventory.ShiftClickBrewing @@ -478,7 +476,6 @@ import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.MinecraftConsoleFilter.Companion.initLogging import at.hannibal2.skyhanni.utils.NEUItems import at.hannibal2.skyhanni.utils.NEUVersionCheck.checkIfNeuIsLoaded -import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils import at.hannibal2.skyhanni.utils.TabListData import at.hannibal2.skyhanni.utils.UtilsPatterns import at.hannibal2.skyhanni.utils.renderables.RenderableTooltips @@ -574,7 +571,6 @@ class SkyHanniMod { loadModule(GardenBestCropTime()) loadModule(ActionBarData) loadModule(TrackerManager) - loadModule(SkyBlockItemModifierUtils) loadModule(ScoreboardPattern) loadModule(UtilsPatterns) loadModule(GuiData) @@ -619,7 +615,6 @@ class SkyHanniMod { loadModule(LorenzUtils) loadModule(NEUItems) loadModule(PestAPI) - loadModule(ReforgeAPI) loadModule(MiningAPI) loadModule(FossilExcavatorAPI) loadModule(ChocolateFactoryAPI) @@ -656,7 +651,6 @@ class SkyHanniMod { loadModule(BazaarBestSellMethod()) loadModule(ShiftClickBrewing()) loadModule(BazaarOpenPriceWebsite()) - loadModule(ReforgeHelper()) loadModule(AuctionHouseCopyUnderbidPrice()) loadModule(AuctionHouseOpenPriceWebsite()) loadModule(AnvilCombineHelper()) diff --git a/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt b/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt index cd34dd23b73d..e04fbf92403f 100644 --- a/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt @@ -6,6 +6,7 @@ import at.hannibal2.skyhanni.data.jsonobjects.repo.neu.NeuReforgeJson import at.hannibal2.skyhanni.data.model.SkyblockStat import at.hannibal2.skyhanni.data.model.SkyblockStatList import at.hannibal2.skyhanni.events.NeuRepositoryReloadEvent +import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.utils.ItemCategory import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import at.hannibal2.skyhanni.utils.ItemUtils.getItemCategoryOrNull @@ -20,6 +21,7 @@ import com.google.gson.stream.JsonWriter import net.minecraft.item.ItemStack import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +@SkyHanniModule object ReforgeAPI { var reforgeList: List = emptyList() private set(value) { @@ -180,5 +182,4 @@ object ReforgeAPI { costs = it.reforgeCosts ) } - } diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt index c352dd70074c..4be7f4a578e1 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt @@ -9,6 +9,7 @@ import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.InventoryCloseEvent import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent import at.hannibal2.skyhanni.events.LorenzChatEvent +import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.utils.DelayedRun import at.hannibal2.skyhanni.utils.ItemUtils.cleanName import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName @@ -38,7 +39,8 @@ import java.awt.Color import java.util.concurrent.atomic.AtomicBoolean import at.hannibal2.skyhanni.utils.renderables.Renderable.Companion.string as rString -class ReforgeHelper { +@SkyHanniModule +object ReforgeHelper { private val config get() = SkyHanniMod.feature.inventory.helper.reforge From 22595da5be19dd84430ccb335450ad63d50c19ce Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Mon, 3 Jun 2024 19:41:28 +0200 Subject: [PATCH 10/36] show active --- .../at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt index 4be7f4a578e1..f4e786220554 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt @@ -242,7 +242,7 @@ object ReforgeHelper { } private fun getReforgeView(itemRarity: LorenzRarity): (ReforgeAPI.Reforge) -> Renderable = { reforge -> - val text = (if (reforge.isReforgeStone) "§9" else "§7") + reforge.name + val text = (if (currentReforge == reforge) "§6" else if (reforge.isReforgeStone) "§9" else "§7") + reforge.name val tips = run { val pre: List val stats: List From 0f19b78a7efacd07cb78a4cb861dd3f67e4437a4 Mon Sep 17 00:00:00 2001 From: Cal Date: Tue, 4 Jun 2024 17:34:11 +1000 Subject: [PATCH 11/36] some changes --- .../at/hannibal2/skyhanni/api/ReforgeAPI.kt | 47 +++++------- .../skyhanni/events/GuiContainerEvent.kt | 8 -- .../features/inventory/ReforgeHelper.kt | 76 +++++++++++-------- .../skyhanni/mixins/hooks/GuiContainerHook.kt | 5 -- .../transformers/gui/MixinGuiContainer.java | 5 -- .../utils/json/SkyHanniTypeAdapters.kt | 6 ++ 6 files changed, 70 insertions(+), 77 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt b/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt index e04fbf92403f..bf7fc01a3140 100644 --- a/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt @@ -1,7 +1,5 @@ package at.hannibal2.skyhanni.api -import at.hannibal2.skyhanni.config.ConfigManager -import at.hannibal2.skyhanni.config.ConfigManager.Companion.registerTypeAdapter import at.hannibal2.skyhanni.data.jsonobjects.repo.neu.NeuReforgeJson import at.hannibal2.skyhanni.data.model.SkyblockStat import at.hannibal2.skyhanni.data.model.SkyblockStatList @@ -14,6 +12,8 @@ import at.hannibal2.skyhanni.utils.ItemUtils.itemNameWithoutColor import at.hannibal2.skyhanni.utils.LorenzRarity import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.NEUInternalName +import at.hannibal2.skyhanni.utils.json.BaseGsonBuilder +import at.hannibal2.skyhanni.utils.json.SkyHanniTypeAdapters import com.google.gson.Gson import com.google.gson.TypeAdapter import com.google.gson.stream.JsonReader @@ -132,7 +132,6 @@ object ReforgeAPI { override fun toString(): String { return "Reforge $name" } - } @SubscribeEvent @@ -142,32 +141,28 @@ object ReforgeAPI { reforgeList = (reforgeStoneData + reforgeData).map(::mapReforge) } - private val reforgeGson: Gson = ConfigManager.createBaseGsonBuilder() - .registerTypeAdapter(SkyblockStat::class.java, object : TypeAdapter() { - override fun write(out: JsonWriter, value: SkyblockStat) { - out.value(value.name.lowercase()) // F you guy who made the stats lowercase + private val reforgeGson: Gson = BaseGsonBuilder.gson() + .registerTypeAdapter(SkyblockStat::class.java, SkyHanniTypeAdapters.SKYBLOCK_STAT.nullSafe()) + .registerTypeAdapter(SkyblockStatList::class.java, object : TypeAdapter() { + override fun write(out: JsonWriter, value: SkyblockStatList) { + out.beginObject() + value.entries.forEach { + out.name(it.key.name.lowercase()).value(it.value) + } + out.endObject() } - override fun read(reader: JsonReader): SkyblockStat { - return SkyblockStat.valueOf(reader.nextString().uppercase()) - } - }.nullSafe()) - .registerTypeAdapter({ out, value -> - out.beginObject() - value.forEach { - out.name(it.key.name.lowercase()).value(it.value) - } - out.endObject() - }, { reader -> - reader.beginObject() - val list = SkyblockStatList() - while (reader.hasNext()) { - val name = reader.nextName() - val value = reader.nextDouble() - list[SkyblockStat.valueOf(name.uppercase())] = value + override fun read(reader: JsonReader): SkyblockStatList { + reader.beginObject() + val list = SkyblockStatList() + while (reader.hasNext()) { + val name = reader.nextName() + val value = reader.nextDouble() + list[SkyblockStat.valueOf(name.uppercase())] = value + } + reader.endObject() + return list } - reader.endObject() - list }).create() private fun mapReforge(it: NeuReforgeJson): Reforge { diff --git a/src/main/java/at/hannibal2/skyhanni/events/GuiContainerEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/GuiContainerEvent.kt index 817ecd55f0b9..9837e1529e06 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/GuiContainerEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/GuiContainerEvent.kt @@ -30,14 +30,6 @@ abstract class GuiContainerEvent(open val gui: GuiContainer, open val container: GuiRenderUtils.drawGradientRect(0, 0, gui.width, gui.height, -1072689136, -804253680, 0.0) } - data class AfterDraw( - override val gui: GuiContainer, - override val container: Container, - val mouseX: Int, - val mouseY: Int, - val partialTicks: Float, - ) : GuiContainerEvent(gui, container) - @Cancelable data class CloseWindowEvent(override val gui: GuiContainer, override val container: Container) : GuiContainerEvent(gui, container) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt index f4e786220554..71b280f2799c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt @@ -11,6 +11,7 @@ import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.utils.DelayedRun +import at.hannibal2.skyhanni.utils.InventoryUtils import at.hannibal2.skyhanni.utils.ItemUtils.cleanName import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import at.hannibal2.skyhanni.utils.ItemUtils.getItemCategoryOrNull @@ -20,17 +21,18 @@ import at.hannibal2.skyhanni.utils.LorenzColor import at.hannibal2.skyhanni.utils.LorenzRarity import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.NumberUtil.toStringWithPlus +import at.hannibal2.skyhanni.utils.RegexUtils.matches import at.hannibal2.skyhanni.utils.RenderUtils +import at.hannibal2.skyhanni.utils.RenderUtils.drawSlotText import at.hannibal2.skyhanni.utils.RenderUtils.highlight import at.hannibal2.skyhanni.utils.RenderUtils.renderRenderables -import at.hannibal2.skyhanni.utils.RenderUtils.renderStrings import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getReforgeName -import at.hannibal2.skyhanni.utils.StringUtils.matches +import at.hannibal2.skyhanni.utils.SoundUtils +import at.hannibal2.skyhanni.utils.SoundUtils.playSound import at.hannibal2.skyhanni.utils.TimeUtils.ticks import at.hannibal2.skyhanni.utils.renderables.Renderable import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern import net.minecraft.client.Minecraft -import net.minecraft.client.renderer.GlStateManager import net.minecraft.init.Items import net.minecraft.inventory.Container import net.minecraft.item.ItemStack @@ -77,26 +79,21 @@ object ReforgeHelper { private var currentReforge: ReforgeAPI.Reforge? = null set(value) { field = value - formattedCurrentReforge = if (value == null) "" else "§7Now: §3${value.name}" } private var reforgeToSearch: ReforgeAPI.Reforge? = null set(value) { field = value - formattedReforgeToSearch = if (value == null) "" else "§7Goal: §9${value.name}" } - private var hoverdReforge: ReforgeAPI.Reforge? = null - - private var formattedCurrentReforge = "" - private var formattedReforgeToSearch = "" + private var hoveredReforge: ReforgeAPI.Reforge? = null private val reforgeItem get() = if (isInHexReforgeMenu) 19 else 13 private val reforgeButton get() = if (isInHexReforgeMenu) 48 else 22 - private val hexReforgeNextDownButton = 35 - private val hexReforgeNextUpButton = 17 + private const val HEX_REFORGE_NEXT_DOWN_BUTTON = 35 + private const val HEX_REFORGE_NEXT_UP_BUTTON = 17 - private val exitButton = 40 + private const val EXIT_BUTTON = 40 private var waitForChat = AtomicBoolean(false) @@ -129,11 +126,12 @@ object ReforgeHelper { if (event.slot?.slotNumber == reforgeButton) { if (event.slot.stack?.name == "§eReforge Item" || event.slot.stack?.name == "§cError!") return if (currentReforge == reforgeToSearch) { - event.isCanceled = true + event.cancel() waitForChat.set(false) + SoundUtils.createSound("random.orb", 0.1f).playSound() } else if (waitForChat.get()) { waitDelay = true - event.isCanceled = true + event.cancel() } else { if (event.clickedButton == 2) return if (waitDelay) { @@ -206,7 +204,7 @@ object ReforgeHelper { isInHexReforgeMenu = false reforgeToSearch = null currentReforge = null - hoverdReforge = null + hoveredReforge = null sortAfter = null itemToReforge = null updateDisplay() @@ -241,8 +239,15 @@ object ReforgeHelper { this.addAll(list) } + private fun getReforgeColour(reforge: ReforgeAPI.Reforge) = when { + currentReforge == reforge -> "§6" + reforgeToSearch == reforge -> "§3" + reforge.isReforgeStone -> "§9" + else -> "§7" + } + private fun getReforgeView(itemRarity: LorenzRarity): (ReforgeAPI.Reforge) -> Renderable = { reforge -> - val text = (if (currentReforge == reforge) "§6" else if (reforge.isReforgeStone) "§9" else "§7") + reforge.name + val text = getReforgeColour(reforge) + reforge.name val tips = run { val pre: List val stats: List @@ -273,11 +278,15 @@ object ReforgeHelper { val onHover = if (!isInHexReforgeMenu) { {} } else { - { hoverdReforge = reforge } + { hoveredReforge = reforge } } Renderable.clickAndHover( - text, tips, onClick = { reforgeToSearch = reforge }, onHover = onHover + text, tips, + onClick = { + reforgeToSearch = reforge + updateDisplay() + }, onHover = onHover ) } @@ -290,6 +299,7 @@ object ReforgeHelper { ) } + @Suppress("UNCHECKED_CAST") private fun getSortSelector( itemRarity: LorenzRarity, sorting: SkyblockStat?, @@ -339,28 +349,28 @@ object ReforgeHelper { } @SubscribeEvent - fun onGuiContainerForegroundDrawn(event: GuiContainerEvent.AfterDraw) { + fun onForegroundDrawn(event: GuiContainerEvent.ForegroundDrawnEvent) { if (!isEnabled()) return - GlStateManager.translate(0f, 0f, 10f) - val position = if (isInHexReforgeMenu) config.posCurrentHex else config.posCurrent - position.renderStrings( - listOf(formattedReforgeToSearch, formattedCurrentReforge), - posLabel = "Reforge Notify" - ) - GlStateManager.translate(0f, 0f, -10f) + if (currentReforge == null) return + + InventoryUtils.getItemsInOpenChest().forEach { + if (it.slotNumber == reforgeItem) { + event.drawSlotText(it.xDisplayPosition - 5, it.yDisplayPosition + 10, "§e${currentReforge?.name}", 1f) + } + } } @SubscribeEvent fun onGuiContainerBackgroundDrawn(event: GuiContainerEvent.BackgroundDrawnEvent) { - if (hoverdReforge != null && isInHexReforgeMenu) { - if (hoverdReforge != currentReforge) { - colorReforgeStone(hoverColor, hoverdReforge?.rawReforgeStoneName ?: "Random Basic Reforge") + if (hoveredReforge != null && isInHexReforgeMenu) { + if (hoveredReforge != currentReforge) { + colorReforgeStone(hoverColor, hoveredReforge?.rawReforgeStoneName ?: "Random Basic Reforge") } else { inventoryContainer?.getSlot(reforgeItem)?.highlight(hoverColor) //?.get(reforgeItem)?. = hoverColor } - hoverdReforge = null + hoveredReforge = null } if (reforgeToSearch == null) return @@ -375,7 +385,7 @@ object ReforgeHelper { if (isInHexReforgeMenu) { colorReforgeStone(selectedColor, reforgeToSearch?.rawReforgeStoneName) } else { - inventoryContainer?.getSlot(exitButton)?.highlight(selectedColor) + inventoryContainer?.getSlot(EXIT_BUTTON)?.highlight(selectedColor) } } else { inventoryContainer?.getSlot(reforgeButton)?.highlight(selectedColor) @@ -387,8 +397,8 @@ object ReforgeHelper { if (slot != null) { slot highlight color } else { - inventory[hexReforgeNextDownButton]?.takeIf { it.stack.item == Items.skull }?.highlight(color) - inventory[hexReforgeNextUpButton]?.takeIf { it.stack.item == Items.skull }?.highlight(color) + inventory[HEX_REFORGE_NEXT_DOWN_BUTTON]?.takeIf { it.stack.item == Items.skull }?.highlight(color) + inventory[HEX_REFORGE_NEXT_UP_BUTTON]?.takeIf { it.stack.item == Items.skull }?.highlight(color) } } diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/hooks/GuiContainerHook.kt b/src/main/java/at/hannibal2/skyhanni/mixins/hooks/GuiContainerHook.kt index aa73dd6dda0c..72f4a2e90c00 100644 --- a/src/main/java/at/hannibal2/skyhanni/mixins/hooks/GuiContainerHook.kt +++ b/src/main/java/at/hannibal2/skyhanni/mixins/hooks/GuiContainerHook.kt @@ -44,11 +44,6 @@ class GuiContainerHook(guiAny: Any) { } } - fun postDraw(mouseX: Int, mouseY: Int, partialTicks: Float) { - if (!SkyHanniDebugsAndTests.globalRender) return - GuiContainerEvent.AfterDraw(gui, gui.inventorySlots, mouseX, mouseY, partialTicks).postAndCatch() - } - fun foregroundDrawn(mouseX: Int, mouseY: Int, partialTicks: Float) { GuiContainerEvent.ForegroundDrawnEvent(gui, gui.inventorySlots, mouseX, mouseY, partialTicks).postAndCatch() } diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/MixinGuiContainer.java b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/MixinGuiContainer.java index acec9ffac7dd..c92f2ab7c985 100644 --- a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/MixinGuiContainer.java +++ b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/MixinGuiContainer.java @@ -36,11 +36,6 @@ private void preDraw(int mouseX, int mouseY, float partialTicks, CallbackInfo ci skyHanni$hook.preDraw(mouseX, mouseY, partialTicks, ci); } - @Inject(method = "drawScreen", at = @At("TAIL")) - private void postDraw(int mouseX, int mouseY, float partialTicks, CallbackInfo ci) { - skyHanni$hook.postDraw(mouseX, mouseY, partialTicks); - } - @Inject(method = "drawScreen", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/inventory/GuiContainer;drawGuiContainerForegroundLayer(II)V", shift = At.Shift.AFTER)) private void onForegroundDraw(int mouseX, int mouseY, float partialTicks, CallbackInfo ci) { skyHanni$hook.foregroundDrawn(mouseX, mouseY, partialTicks); diff --git a/src/main/java/at/hannibal2/skyhanni/utils/json/SkyHanniTypeAdapters.kt b/src/main/java/at/hannibal2/skyhanni/utils/json/SkyHanniTypeAdapters.kt index dc50eef74a2a..d24e757e7523 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/json/SkyHanniTypeAdapters.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/json/SkyHanniTypeAdapters.kt @@ -1,6 +1,7 @@ package at.hannibal2.skyhanni.utils.json import at.hannibal2.skyhanni.data.IslandType +import at.hannibal2.skyhanni.data.model.SkyblockStat import at.hannibal2.skyhanni.features.fishing.trophy.TrophyRarity import at.hannibal2.skyhanni.features.garden.CropType import at.hannibal2.skyhanni.features.garden.pests.PestType @@ -62,6 +63,11 @@ object SkyHanniTypeAdapters { { PestType.getByName(this) } ) + val SKYBLOCK_STAT: TypeAdapter = SimpleStringTypeAdapter( + { name.lowercase() }, + { SkyblockStat.valueOf(this.uppercase()) } + ) + val TRACKER_DISPLAY_MODE = SimpleStringTypeAdapter.forEnum() val ISLAND_TYPE = SimpleStringTypeAdapter.forEnum() val RARITY = SimpleStringTypeAdapter.forEnum() From a9d7554c306474c248b07acaf83c717058856aa1 Mon Sep 17 00:00:00 2001 From: Cal Date: Tue, 4 Jun 2024 17:42:24 +1000 Subject: [PATCH 12/36] remove unused config things --- .../features/inventory/helper/ReforgeHelperConfig.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java index 601be7288585..4ee678f13281 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java @@ -12,12 +12,6 @@ public class ReforgeHelperConfig { @Expose @ConfigLink(owner = ReforgeHelperConfig.class, field = "enable") public Position posList = new Position(80, 85, true, true); - @Expose - @ConfigLink(owner = ReforgeHelperConfig.class, field = "enable") - public Position posCurrent = new Position(293, 88, true, true); - @Expose - @ConfigLink(owner = ReforgeHelperConfig.class, field = "enable") - public Position posCurrentHex = new Position(293, 81, true, true); @Expose @ConfigOption(name = "Enable", desc = "Enables the reforge helper.") From 325a2a74088bdc5e9de86a8c87edbe34437be462 Mon Sep 17 00:00:00 2001 From: Cal Date: Tue, 4 Jun 2024 17:59:16 +1000 Subject: [PATCH 13/36] redundant setter --- .../hannibal2/skyhanni/features/inventory/ReforgeHelper.kt | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt index 71b280f2799c..c2f43d18d3fb 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt @@ -77,13 +77,7 @@ object ReforgeHelper { private var inventoryContainer: Container? = null private var currentReforge: ReforgeAPI.Reforge? = null - set(value) { - field = value - } private var reforgeToSearch: ReforgeAPI.Reforge? = null - set(value) { - field = value - } private var hoveredReforge: ReforgeAPI.Reforge? = null From f318d780b74b8a179d64d83bd8651e57c5f88707 Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Tue, 4 Jun 2024 13:29:48 +0200 Subject: [PATCH 14/36] minor changes --- .../skyhanni/features/inventory/ReforgeHelper.kt | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt index c2f43d18d3fb..6abac38e503c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt @@ -11,7 +11,6 @@ import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.utils.DelayedRun -import at.hannibal2.skyhanni.utils.InventoryUtils import at.hannibal2.skyhanni.utils.ItemUtils.cleanName import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import at.hannibal2.skyhanni.utils.ItemUtils.getItemCategoryOrNull @@ -28,7 +27,6 @@ import at.hannibal2.skyhanni.utils.RenderUtils.highlight import at.hannibal2.skyhanni.utils.RenderUtils.renderRenderables import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getReforgeName import at.hannibal2.skyhanni.utils.SoundUtils -import at.hannibal2.skyhanni.utils.SoundUtils.playSound import at.hannibal2.skyhanni.utils.TimeUtils.ticks import at.hannibal2.skyhanni.utils.renderables.Renderable import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern @@ -122,7 +120,7 @@ object ReforgeHelper { if (currentReforge == reforgeToSearch) { event.cancel() waitForChat.set(false) - SoundUtils.createSound("random.orb", 0.1f).playSound() + SoundUtils.playBeepSound() } else if (waitForChat.get()) { waitDelay = true event.cancel() @@ -278,6 +276,7 @@ object ReforgeHelper { Renderable.clickAndHover( text, tips, onClick = { + SoundUtils.playClickSound() reforgeToSearch = reforge updateDisplay() }, onHover = onHover @@ -347,10 +346,8 @@ object ReforgeHelper { if (!isEnabled()) return if (currentReforge == null) return - InventoryUtils.getItemsInOpenChest().forEach { - if (it.slotNumber == reforgeItem) { - event.drawSlotText(it.xDisplayPosition - 5, it.yDisplayPosition + 10, "§e${currentReforge?.name}", 1f) - } + inventoryContainer?.getSlot(reforgeItem)?.let { + event.drawSlotText(it.xDisplayPosition - 5, it.yDisplayPosition, "§e${currentReforge?.name}", 1f) } } From 9b0b9e75b82773900aa15b2fda97bcada8b7ea24 Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Sun, 9 Jun 2024 19:59:07 +0200 Subject: [PATCH 15/36] formatting --- .../at/hannibal2/skyhanni/api/ReforgeAPI.kt | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt b/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt index bf7fc01a3140..b83ef1e634fb 100644 --- a/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt @@ -5,15 +5,11 @@ import at.hannibal2.skyhanni.data.model.SkyblockStat import at.hannibal2.skyhanni.data.model.SkyblockStatList import at.hannibal2.skyhanni.events.NeuRepositoryReloadEvent import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule -import at.hannibal2.skyhanni.utils.ItemCategory +import at.hannibal2.skyhanni.utils.* import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import at.hannibal2.skyhanni.utils.ItemUtils.getItemCategoryOrNull import at.hannibal2.skyhanni.utils.ItemUtils.itemNameWithoutColor -import at.hannibal2.skyhanni.utils.LorenzRarity -import at.hannibal2.skyhanni.utils.LorenzUtils -import at.hannibal2.skyhanni.utils.NEUInternalName -import at.hannibal2.skyhanni.utils.json.BaseGsonBuilder -import at.hannibal2.skyhanni.utils.json.SkyHanniTypeAdapters +import at.hannibal2.skyhanni.utils.json.* import com.google.gson.Gson import com.google.gson.TypeAdapter import com.google.gson.stream.JsonReader @@ -37,7 +33,21 @@ object ReforgeAPI { private set enum class ReforgeType { - SWORD, BOW, ARMOR, CHESTPLATE, HELMET, CLOAK, AXE, HOE, AXE_AND_HOE, PICKAXE, EQUIPMENT, ROD, SWORD_AND_ROD, SPECIAL_ITEMS, VACUUM + SWORD, + BOW, + ARMOR, + CHESTPLATE, + HELMET, + CLOAK, + AXE, + HOE, + AXE_AND_HOE, + PICKAXE, + EQUIPMENT, + ROD, + SWORD_AND_ROD, + SPECIAL_ITEMS, + VACUUM } class Reforge( @@ -47,7 +57,7 @@ object ReforgeAPI { val reforgeStone: NEUInternalName? = null, val specialItems: List? = null, val extraProperty: Map = emptyMap(), - val costs: Map? = null + val costs: Map? = null, ) { val isReforgeStone = reforgeStone != null From 89e9e37f2579b97ad78c6bc84abbd87680548d55 Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Sun, 9 Jun 2024 20:11:10 +0200 Subject: [PATCH 16/36] formatting --- .../at/hannibal2/skyhanni/api/ReforgeAPI.kt | 85 +++++++++---------- 1 file changed, 39 insertions(+), 46 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt b/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt index b83ef1e634fb..3319019338ca 100644 --- a/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt @@ -5,11 +5,15 @@ import at.hannibal2.skyhanni.data.model.SkyblockStat import at.hannibal2.skyhanni.data.model.SkyblockStatList import at.hannibal2.skyhanni.events.NeuRepositoryReloadEvent import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule -import at.hannibal2.skyhanni.utils.* +import at.hannibal2.skyhanni.utils.ItemCategory import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import at.hannibal2.skyhanni.utils.ItemUtils.getItemCategoryOrNull import at.hannibal2.skyhanni.utils.ItemUtils.itemNameWithoutColor -import at.hannibal2.skyhanni.utils.json.* +import at.hannibal2.skyhanni.utils.LorenzRarity +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.NEUInternalName +import at.hannibal2.skyhanni.utils.json.BaseGsonBuilder +import at.hannibal2.skyhanni.utils.json.SkyHanniTypeAdapters import com.google.gson.Gson import com.google.gson.TypeAdapter import com.google.gson.stream.JsonReader @@ -68,50 +72,39 @@ object ReforgeAPI { fun isValid(itemStack: ItemStack) = isValid(itemStack.getItemCategoryOrNull(), itemStack.getInternalName()) - fun isValid(itemCategory: ItemCategory?, internalName: NEUInternalName) = - when (type) { - ReforgeType.SWORD -> setOf( - ItemCategory.SWORD, - ItemCategory.GAUNTLET, - ItemCategory.LONGSWORD, - ItemCategory.FISHING_WEAPON - ).contains(itemCategory) - - ReforgeType.BOW -> itemCategory == ItemCategory.BOW || itemCategory == ItemCategory.SHORT_BOW - ReforgeType.ARMOR -> setOf( - ItemCategory.HELMET, - ItemCategory.CHESTPLATE, - ItemCategory.LEGGINGS, - ItemCategory.BOOTS - ).contains(itemCategory) - - ReforgeType.CHESTPLATE -> itemCategory == ItemCategory.CHESTPLATE - ReforgeType.HELMET -> itemCategory == ItemCategory.HELMET - ReforgeType.CLOAK -> itemCategory == ItemCategory.CLOAK - ReforgeType.AXE -> itemCategory == ItemCategory.AXE - ReforgeType.HOE -> itemCategory == ItemCategory.HOE - ReforgeType.AXE_AND_HOE -> itemCategory == ItemCategory.HOE || itemCategory == ItemCategory.AXE - ReforgeType.PICKAXE -> itemCategory == ItemCategory.PICKAXE || itemCategory == ItemCategory.DRILL || itemCategory == ItemCategory.GAUNTLET - ReforgeType.EQUIPMENT -> setOf( - ItemCategory.CLOAK, - ItemCategory.BELT, - ItemCategory.NECKLACE, - ItemCategory.BRACELET, - ItemCategory.GLOVES - ).contains(itemCategory) - - ReforgeType.ROD -> itemCategory == ItemCategory.FISHING_ROD || itemCategory == ItemCategory.FISHING_WEAPON - ReforgeType.SWORD_AND_ROD -> setOf( - ItemCategory.SWORD, - ItemCategory.GAUNTLET, - ItemCategory.LONGSWORD, - ItemCategory.FISHING_ROD, - ItemCategory.FISHING_WEAPON - ).contains(itemCategory) - - ReforgeType.VACUUM -> itemCategory == ItemCategory.VACUUM - ReforgeType.SPECIAL_ITEMS -> specialItems?.contains(internalName) ?: false - } + fun isValid(itemCategory: ItemCategory?, internalName: NEUInternalName) = when (type) { + ReforgeType.SWORD -> setOf( + ItemCategory.SWORD, ItemCategory.GAUNTLET, ItemCategory.LONGSWORD, ItemCategory.FISHING_WEAPON + ).contains(itemCategory) + + ReforgeType.BOW -> itemCategory == ItemCategory.BOW || itemCategory == ItemCategory.SHORT_BOW + ReforgeType.ARMOR -> setOf( + ItemCategory.HELMET, ItemCategory.CHESTPLATE, ItemCategory.LEGGINGS, ItemCategory.BOOTS + ).contains(itemCategory) + + ReforgeType.CHESTPLATE -> itemCategory == ItemCategory.CHESTPLATE + ReforgeType.HELMET -> itemCategory == ItemCategory.HELMET + ReforgeType.CLOAK -> itemCategory == ItemCategory.CLOAK + ReforgeType.AXE -> itemCategory == ItemCategory.AXE + ReforgeType.HOE -> itemCategory == ItemCategory.HOE + ReforgeType.AXE_AND_HOE -> itemCategory == ItemCategory.HOE || itemCategory == ItemCategory.AXE + ReforgeType.PICKAXE -> itemCategory == ItemCategory.PICKAXE || itemCategory == ItemCategory.DRILL || itemCategory == ItemCategory.GAUNTLET + ReforgeType.EQUIPMENT -> setOf( + ItemCategory.CLOAK, ItemCategory.BELT, ItemCategory.NECKLACE, ItemCategory.BRACELET, ItemCategory.GLOVES + ).contains(itemCategory) + + ReforgeType.ROD -> itemCategory == ItemCategory.FISHING_ROD || itemCategory == ItemCategory.FISHING_WEAPON + ReforgeType.SWORD_AND_ROD -> setOf( + ItemCategory.SWORD, + ItemCategory.GAUNTLET, + ItemCategory.LONGSWORD, + ItemCategory.FISHING_ROD, + ItemCategory.FISHING_WEAPON + ).contains(itemCategory) + + ReforgeType.VACUUM -> itemCategory == ItemCategory.VACUUM + ReforgeType.SPECIAL_ITEMS -> specialItems?.contains(internalName) ?: false + } override fun equals(other: Any?): Boolean { if (this === other) return true From cffeaf8fbba7887a60314878e4d522f1338c3ec4 Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Sun, 9 Jun 2024 21:19:56 +0200 Subject: [PATCH 17/36] formatting --- .../at/hannibal2/skyhanni/api/ReforgeAPI.kt | 60 +++++++++++-------- 1 file changed, 35 insertions(+), 25 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt b/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt index 3319019338ca..796be142899c 100644 --- a/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt @@ -74,12 +74,12 @@ object ReforgeAPI { fun isValid(itemCategory: ItemCategory?, internalName: NEUInternalName) = when (type) { ReforgeType.SWORD -> setOf( - ItemCategory.SWORD, ItemCategory.GAUNTLET, ItemCategory.LONGSWORD, ItemCategory.FISHING_WEAPON + ItemCategory.SWORD, ItemCategory.GAUNTLET, ItemCategory.LONGSWORD, ItemCategory.FISHING_WEAPON, ).contains(itemCategory) ReforgeType.BOW -> itemCategory == ItemCategory.BOW || itemCategory == ItemCategory.SHORT_BOW ReforgeType.ARMOR -> setOf( - ItemCategory.HELMET, ItemCategory.CHESTPLATE, ItemCategory.LEGGINGS, ItemCategory.BOOTS + ItemCategory.HELMET, ItemCategory.CHESTPLATE, ItemCategory.LEGGINGS, ItemCategory.BOOTS, ).contains(itemCategory) ReforgeType.CHESTPLATE -> itemCategory == ItemCategory.CHESTPLATE @@ -88,9 +88,16 @@ object ReforgeAPI { ReforgeType.AXE -> itemCategory == ItemCategory.AXE ReforgeType.HOE -> itemCategory == ItemCategory.HOE ReforgeType.AXE_AND_HOE -> itemCategory == ItemCategory.HOE || itemCategory == ItemCategory.AXE - ReforgeType.PICKAXE -> itemCategory == ItemCategory.PICKAXE || itemCategory == ItemCategory.DRILL || itemCategory == ItemCategory.GAUNTLET + ReforgeType.PICKAXE -> itemCategory == ItemCategory.PICKAXE + || itemCategory == ItemCategory.DRILL + || itemCategory == ItemCategory.GAUNTLET + ReforgeType.EQUIPMENT -> setOf( - ItemCategory.CLOAK, ItemCategory.BELT, ItemCategory.NECKLACE, ItemCategory.BRACELET, ItemCategory.GLOVES + ItemCategory.CLOAK, + ItemCategory.BELT, + ItemCategory.NECKLACE, + ItemCategory.BRACELET, + ItemCategory.GLOVES, ).contains(itemCategory) ReforgeType.ROD -> itemCategory == ItemCategory.FISHING_ROD || itemCategory == ItemCategory.FISHING_WEAPON @@ -99,7 +106,7 @@ object ReforgeAPI { ItemCategory.GAUNTLET, ItemCategory.LONGSWORD, ItemCategory.FISHING_ROD, - ItemCategory.FISHING_WEAPON + ItemCategory.FISHING_WEAPON, ).contains(itemCategory) ReforgeType.VACUUM -> itemCategory == ItemCategory.VACUUM @@ -146,27 +153,30 @@ object ReforgeAPI { private val reforgeGson: Gson = BaseGsonBuilder.gson() .registerTypeAdapter(SkyblockStat::class.java, SkyHanniTypeAdapters.SKYBLOCK_STAT.nullSafe()) - .registerTypeAdapter(SkyblockStatList::class.java, object : TypeAdapter() { - override fun write(out: JsonWriter, value: SkyblockStatList) { - out.beginObject() - value.entries.forEach { - out.name(it.key.name.lowercase()).value(it.value) + .registerTypeAdapter( + SkyblockStatList::class.java, + object : TypeAdapter() { + override fun write(out: JsonWriter, value: SkyblockStatList) { + out.beginObject() + value.entries.forEach { + out.name(it.key.name.lowercase()).value(it.value) + } + out.endObject() } - out.endObject() - } - - override fun read(reader: JsonReader): SkyblockStatList { - reader.beginObject() - val list = SkyblockStatList() - while (reader.hasNext()) { - val name = reader.nextName() - val value = reader.nextDouble() - list[SkyblockStat.valueOf(name.uppercase())] = value + + override fun read(reader: JsonReader): SkyblockStatList { + reader.beginObject() + val list = SkyblockStatList() + while (reader.hasNext()) { + val name = reader.nextName() + val value = reader.nextDouble() + list[SkyblockStat.valueOf(name.uppercase())] = value + } + reader.endObject() + return list } - reader.endObject() - return list - } - }).create() + }, + ).create() private fun mapReforge(it: NeuReforgeJson): Reforge { val type = it.itemType @@ -177,7 +187,7 @@ object ReforgeAPI { reforgeStone = it.internalName, specialItems = type.second.takeIf { it.isNotEmpty() }, extraProperty = it.reforgeAbility, - costs = it.reforgeCosts + costs = it.reforgeCosts, ) } } From 69161afd2f7bc80d6130aea33ba2a4f2b38c98de Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Sun, 9 Jun 2024 21:33:48 +0200 Subject: [PATCH 18/36] formatting --- .../java/at/hannibal2/skyhanni/api/ReforgeAPI.kt | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt b/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt index 796be142899c..960fae2bc337 100644 --- a/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt @@ -79,8 +79,12 @@ object ReforgeAPI { ReforgeType.BOW -> itemCategory == ItemCategory.BOW || itemCategory == ItemCategory.SHORT_BOW ReforgeType.ARMOR -> setOf( - ItemCategory.HELMET, ItemCategory.CHESTPLATE, ItemCategory.LEGGINGS, ItemCategory.BOOTS, - ).contains(itemCategory) + ItemCategory.HELMET, + ItemCategory.CHESTPLATE, + ItemCategory.LEGGINGS, + ItemCategory.BOOTS, + ) + .contains(itemCategory) ReforgeType.CHESTPLATE -> itemCategory == ItemCategory.CHESTPLATE ReforgeType.HELMET -> itemCategory == ItemCategory.HELMET @@ -88,9 +92,10 @@ object ReforgeAPI { ReforgeType.AXE -> itemCategory == ItemCategory.AXE ReforgeType.HOE -> itemCategory == ItemCategory.HOE ReforgeType.AXE_AND_HOE -> itemCategory == ItemCategory.HOE || itemCategory == ItemCategory.AXE - ReforgeType.PICKAXE -> itemCategory == ItemCategory.PICKAXE - || itemCategory == ItemCategory.DRILL - || itemCategory == ItemCategory.GAUNTLET + ReforgeType.PICKAXE -> + itemCategory == ItemCategory.PICKAXE || + itemCategory == ItemCategory.DRILL || + itemCategory == ItemCategory.GAUNTLET ReforgeType.EQUIPMENT -> setOf( ItemCategory.CLOAK, From a1cf74e91757b67712420cddac8ade1b7adf9a84 Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Sun, 9 Jun 2024 21:37:08 +0200 Subject: [PATCH 19/36] formatting --- src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt b/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt index 960fae2bc337..4f84d4ff620a 100644 --- a/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt @@ -74,7 +74,10 @@ object ReforgeAPI { fun isValid(itemCategory: ItemCategory?, internalName: NEUInternalName) = when (type) { ReforgeType.SWORD -> setOf( - ItemCategory.SWORD, ItemCategory.GAUNTLET, ItemCategory.LONGSWORD, ItemCategory.FISHING_WEAPON, + ItemCategory.SWORD, + ItemCategory.GAUNTLET, + ItemCategory.LONGSWORD, + ItemCategory.FISHING_WEAPON, ).contains(itemCategory) ReforgeType.BOW -> itemCategory == ItemCategory.BOW || itemCategory == ItemCategory.SHORT_BOW @@ -83,8 +86,7 @@ object ReforgeAPI { ItemCategory.CHESTPLATE, ItemCategory.LEGGINGS, ItemCategory.BOOTS, - ) - .contains(itemCategory) + ).contains(itemCategory) ReforgeType.CHESTPLATE -> itemCategory == ItemCategory.CHESTPLATE ReforgeType.HELMET -> itemCategory == ItemCategory.HELMET From c00e39f79a7b641da6988537cc5d47d025654464 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Thu, 13 Jun 2024 22:28:29 +0200 Subject: [PATCH 20/36] formatting --- .../jsonobjects/repo/neu/NeuReforgeJson.kt | 2 +- .../skyhanni/data/model/SkyblockStat.kt | 1 - .../events/NeuRepositoryReloadEvent.kt | 2 +- .../items/EstimatedItemValueCalculator.kt | 2 +- .../at/hannibal2/skyhanni/utils/NEUItems.kt | 63 ++++++++++--------- .../at/hannibal2/skyhanni/utils/NumberUtil.kt | 2 +- .../utils/json/SkyHanniTypeAdapters.kt | 25 ++++---- 7 files changed, 51 insertions(+), 46 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/neu/NeuReforgeJson.kt b/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/neu/NeuReforgeJson.kt index df926edd9bd3..a8c8f3fe4646 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/neu/NeuReforgeJson.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/neu/NeuReforgeJson.kt @@ -32,7 +32,7 @@ data class NeuReforgeJson( is Map<*, *> -> (this.rawReforgeAbility as? Map)?.mapKeys { LorenzRarity.valueOf( - it.key.uppercase().replace(" ", "_") + it.key.uppercase().replace(" ", "_"), ) } ?: emptyMap() diff --git a/src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt b/src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt index 4695ad3b7278..05a566730910 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt @@ -57,7 +57,6 @@ enum class SkyblockStat(val icon: String) { entries.maxOf { Minecraft.getMinecraft().fontRendererObj.getStringWidth(it.icon) } + 1 } } - } class SkyblockStatList : EnumMap(SkyblockStat::class.java), Map { diff --git a/src/main/java/at/hannibal2/skyhanni/events/NeuRepositoryReloadEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/NeuRepositoryReloadEvent.kt index 41e77d0e2e36..c1e04ced7698 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/NeuRepositoryReloadEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/NeuRepositoryReloadEvent.kt @@ -21,7 +21,7 @@ class NeuRepositoryReloadEvent : LorenzEvent() { } catch (e: JsonSyntaxException) { ErrorManager.logErrorWithData( e, "$file failed to read from neu repo!", - "data" to data + "data" to data, ) throw e } diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt index 466a6d898e85..98a89ed751a3 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt @@ -122,7 +122,7 @@ object EstimatedItemValueCalculator { ) if (price != null) { val name = attributes[0].first.fixMending().allLettersFirstUppercase() - list.add("§7Attribute §9$name ${attributes[0].second}§7: (§6${NumberUtil.format(price)}§7)",) + list.add("§7Attribute §9$name ${attributes[0].second}§7: (§6${NumberUtil.format(price)}§7)") return price } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt index 99fe52e44ff3..da49f7c4878a 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt @@ -59,32 +59,35 @@ object NEUItems { private val hypixelApiGson by lazy { BaseGsonBuilder.gson() - .registerTypeAdapter(HypixelApiTrophyFish::class.java, object : TypeAdapter() { - override fun write(out: JsonWriter, value: HypixelApiTrophyFish) {} - - override fun read(reader: JsonReader): HypixelApiTrophyFish { - val trophyFish = mutableMapOf() - var totalCaught = 0 - reader.beginObject() - while (reader.hasNext()) { - val key = reader.nextName() - if (key == "total_caught") { - totalCaught = reader.nextInt() - continue - } - if (reader.peek() == JsonToken.NUMBER) { - val valueAsString = reader.nextString() - if (valueAsString.isInt()) { - trophyFish[key] = valueAsString.toInt() + .registerTypeAdapter( + HypixelApiTrophyFish::class.java, + object : TypeAdapter() { + override fun write(out: JsonWriter, value: HypixelApiTrophyFish) {} + + override fun read(reader: JsonReader): HypixelApiTrophyFish { + val trophyFish = mutableMapOf() + var totalCaught = 0 + reader.beginObject() + while (reader.hasNext()) { + val key = reader.nextName() + if (key == "total_caught") { + totalCaught = reader.nextInt() continue } + if (reader.peek() == JsonToken.NUMBER) { + val valueAsString = reader.nextString() + if (valueAsString.isInt()) { + trophyFish[key] = valueAsString.toInt() + continue + } + } + reader.skipValue() } - reader.skipValue() + reader.endObject() + return HypixelApiTrophyFish(totalCaught, trophyFish) } - reader.endObject() - return HypixelApiTrophyFish(totalCaught, trophyFish) - } - }.nullSafe()) + }.nullSafe(), + ) .create() } @@ -96,7 +99,7 @@ object NEUItems { Utils.createItemStack( ItemStack(Blocks.barrier).item, "§cMissing Repo Item", - "§cYour NEU repo seems to be out of date" + "§cYour NEU repo seems to be out of date", ) } @@ -121,7 +124,7 @@ object NEUItems { } catch (e: Exception) { ErrorManager.logErrorWithData( e, "Error reading hypixel player api data", - "data" to apiData + "data" to apiData, ) } } @@ -212,7 +215,7 @@ object NEUItems { "This may be because your NEU repo is outdated. Please ask in the SkyHanni " + "Discord if this is the case.", "Item name" to this.asString(), - "repo commit" to manager.latestRepoCommit + "repo commit" to manager.latestRepoCommit, ) fallbackItem } @@ -226,7 +229,7 @@ object NEUItems { x: Float, y: Float, scaleMultiplier: Double = itemFontSize, - rescaleSkulls: Boolean = true + rescaleSkulls: Boolean = true, ) { val item = checkBlinkItem() val isSkull = rescaleSkulls && item.item === Items.skull @@ -286,9 +289,9 @@ object NEUItems { if (itemIdCache.contains(item)) { return itemIdCache[item]!! } - val result = allNeuRepoItems().filter { - Item.getByNameOrId(it.value.get("itemid").asString) == item - }.keys.map { it.asInternalName() } + val result = allNeuRepoItems() + .filter { Item.getByNameOrId(it.value.get("itemid").asString) == item } + .keys.map { it.asInternalName() } itemIdCache[item] = result return result } @@ -299,7 +302,7 @@ object NEUItems { ErrorManager.logErrorStateWithData( "Could not load recipe data.", "Failed to find item multiplier", - "internalName" to internalName + "internalName" to internalName, ) return internalName.makePrimitiveStack() } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NumberUtil.kt b/src/main/java/at/hannibal2/skyhanni/utils/NumberUtil.kt index 4fedd41468a9..be894507a2f5 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NumberUtil.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NumberUtil.kt @@ -33,7 +33,7 @@ object NumberUtil { 5 to "V", 4 to "IV", 1 to "I", - ) + ), ) /** diff --git a/src/main/java/at/hannibal2/skyhanni/utils/json/SkyHanniTypeAdapters.kt b/src/main/java/at/hannibal2/skyhanni/utils/json/SkyHanniTypeAdapters.kt index d24e757e7523..7859853ca45f 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/json/SkyHanniTypeAdapters.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/json/SkyHanniTypeAdapters.kt @@ -25,22 +25,22 @@ object SkyHanniTypeAdapters { val UUID: TypeAdapter = SimpleStringTypeAdapter( { this.toString() }, - { java.util.UUID.fromString(this) } + { java.util.UUID.fromString(this) }, ) val INTERNAL_NAME: TypeAdapter = SimpleStringTypeAdapter( { this.asString() }, - { this.asInternalName() } + { this.asInternalName() }, ) val VEC_STRING: TypeAdapter = SimpleStringTypeAdapter( { "$x:$y:$z" }, - { LorenzVec.decodeFromString(this) } + { LorenzVec.decodeFromString(this) }, ) val TROPHY_RARITY: TypeAdapter = SimpleStringTypeAdapter( { name }, - { TrophyRarity.getByName(this) ?: error("Could not parse TrophyRarity from '$this'") } + { TrophyRarity.getByName(this) ?: error("Could not parse TrophyRarity from '$this'") }, ) val TIME_MARK: TypeAdapter = object : TypeAdapter() { @@ -55,17 +55,17 @@ object SkyHanniTypeAdapters { val CROP_TYPE: TypeAdapter = SimpleStringTypeAdapter( { name }, - { CropType.getByName(this) } + { CropType.getByName(this) }, ) val PEST_TYPE: TypeAdapter = SimpleStringTypeAdapter( { name }, - { PestType.getByName(this) } + { PestType.getByName(this) }, ) val SKYBLOCK_STAT: TypeAdapter = SimpleStringTypeAdapter( { name.lowercase() }, - { SkyblockStat.valueOf(this.uppercase()) } + { SkyblockStat.valueOf(this.uppercase()) }, ) val TRACKER_DISPLAY_MODE = SimpleStringTypeAdapter.forEnum() @@ -76,10 +76,13 @@ object SkyHanniTypeAdapters { crossinline write: (JsonWriter, T) -> Unit, crossinline read: (JsonReader) -> T, ): GsonBuilder { - this.registerTypeAdapter(T::class.java, object : TypeAdapter() { - override fun write(out: JsonWriter, value: T) = write(out, value) - override fun read(reader: JsonReader) = read(reader) - }.nullSafe()) + this.registerTypeAdapter( + T::class.java, + object : TypeAdapter() { + override fun write(out: JsonWriter, value: T) = write(out, value) + override fun read(reader: JsonReader) = read(reader) + }.nullSafe(), + ) return this } } From 8ca993b799c794b914e71636eab78c3b0f4a4e0c Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Thu, 13 Jun 2024 22:34:34 +0200 Subject: [PATCH 21/36] code cleanup --- .idea/dictionaries/default_user.xml | 409 +++++++++--------- .../at/hannibal2/skyhanni/api/ReforgeAPI.kt | 4 +- .../events/NeuRepositoryReloadEvent.kt | 4 +- 3 files changed, 207 insertions(+), 210 deletions(-) diff --git a/.idea/dictionaries/default_user.xml b/.idea/dictionaries/default_user.xml index 846fd6b43114..cc6c35df3311 100644 --- a/.idea/dictionaries/default_user.xml +++ b/.idea/dictionaries/default_user.xml @@ -1,205 +1,206 @@ - - - abiphone - agaricus - allinvite - apec - arachne - arachne's - ashfang - autopet - bacte - bandana - berberis - biome - bladesoul - blobbercysts - bloodfiend - bobber - bobber's - bonzo - bonzo's - bonzos - boop - bossbar - broodfather - cadycous - carrolyn - cata - cavespider - chestplate - chocolatefactory - chronomatron - chumcap - coflnet - coords - craftable - cropie - crosshair - deathmite - deathmites - deathripper - demonlord - derpy - despawn - dicer - dragontail - dreadfarm - dungeoneering - dwarven - egglocator - einary - einary's - elitebot - enderman - endermen - endermite - enderstone - endstone - explosivity - fermento - firedust - firesale - firesales - getfromsacks - glacite - goldor - gratitudes - hatcessory - hideparticles - hoppity - hoppity's - horsezooka - hotbar - hotm - hoverable - hypixel - hypixel's - ichor - igrupan - igrupan's - ingame - inquis - inquistiors - internalname - interp - itemstack - jawbus - jerries - jerrypocalypse - jyrre - kaeso - keybind - keybinds - kindlebane - kismets - kloon - kuudra - kuudra's - laggy - lapis - larvas - lclick - lerp - livids - matriach - mawdredge - maxor - mcmod - millenia - miniboss - mirrorverse - mmclick - mobtracker - modid - moldfin - mooshroom - moul - moulberry - moulconfig - mouselocked - mouselowered - nametag - nametags - necron - neu's - npcs - nukekebi - nukekubi - odger - odger's - odonata - odonatas - opengenerowmenu - opti - oruo - packmaster - perkpocalypse - pickblock - pickonimbus - plhlegblast - preinitialization - procs - pyrochaos - quazii - rclick - redstone - reindrake - renderable - renderables - revenant - riftstalker - robotron - sadan - scatha - sethome - shcopytranslation - shcropstartlocation - shlanedetection - shmarkplayer - shmouselock - shoutout - shulker - shwords - shworldedit - skeletor - skyblock - skyhanni - skyhanni's - skymall - skytils - skytils's - soopy - soopy's - soulsand - soulweaver - sprayonator - stillgore - superboom - supercraft - supercrafting - superlite - superpairs - tablist - terracottas - thaumaturgy - treasurite - tubulator - turbomax - twinclaws - typhoeus - ultrasequencer - unobtained - untrackable - vermins - viewrecipe - voidgloom - voidling - voltas - wikithis - wyld - yoggie - - - + + + abiphone + agaricus + allinvite + apec + arachne + arachne's + ashfang + autopet + bacte + bandana + berberis + biome + bladesoul + blobbercysts + bloodfiend + bobber + bobber's + bonzo + bonzo's + bonzos + boop + bossbar + broodfather + cadycous + carrolyn + cata + cavespider + chestplate + chocolatefactory + chronomatron + chumcap + coflnet + coords + craftable + cropie + crosshair + deathmite + deathmites + deathripper + demonlord + derpy + despawn + dicer + dragontail + dreadfarm + dungeoneering + dwarven + egglocator + einary + einary's + elitebot + enderman + endermen + endermite + enderstone + endstone + explosivity + fermento + firedust + firesale + firesales + getfromsacks + glacite + goldor + gratitudes + hatcessory + hideparticles + hoppity + hoppity's + horsezooka + hotbar + hotm + hoverable + hypixel + hypixel's + ichor + igrupan + igrupan's + ingame + inquis + inquistiors + internalname + interp + itemstack + jawbus + jerries + jerrypocalypse + jyrre + kaeso + keybind + keybinds + kindlebane + kismets + kloon + kuudra + kuudra's + laggy + lapis + larvas + lclick + lerp + livids + matriach + mawdredge + maxor + mcmod + millenia + miniboss + mirrorverse + mmclick + mobtracker + modid + moldfin + mooshroom + moul + moulberry + moulconfig + mouselocked + mouselowered + nametag + nametags + necron + neu's + npcs + nukekebi + nukekubi + odger + odger's + odonata + odonatas + opengenerowmenu + opti + oruo + packmaster + perkpocalypse + pickblock + pickonimbus + plhlegblast + preinitialization + procs + pyrochaos + quazii + rclick + redstone + reindrake + renderable + renderables + revenant + riftstalker + robotron + runecrafting + sadan + scatha + sethome + shcopytranslation + shcropstartlocation + shlanedetection + shmarkplayer + shmouselock + shoutout + shulker + shwords + shworldedit + skeletor + skyblock + skyhanni + skyhanni's + skymall + skytils + skytils's + soopy + soopy's + soulsand + soulweaver + sprayonator + stillgore + superboom + supercraft + supercrafting + superlite + superpairs + tablist + terracottas + thaumaturgy + treasurite + tubulator + turbomax + twinclaws + typhoeus + ultrasequencer + unobtained + untrackable + vermins + viewrecipe + voidgloom + voidling + voltas + wikithis + wyld + yoggie + + + \ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt b/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt index 4f84d4ff620a..70f6910c9173 100644 --- a/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/api/ReforgeAPI.kt @@ -146,9 +146,7 @@ object ReforgeAPI { return result } - override fun toString(): String { - return "Reforge $name" - } + override fun toString(): String = "Reforge $name" } @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/events/NeuRepositoryReloadEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/NeuRepositoryReloadEvent.kt index c1e04ced7698..6f7df596422b 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/NeuRepositoryReloadEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/NeuRepositoryReloadEvent.kt @@ -14,7 +14,7 @@ class NeuRepositoryReloadEvent : LorenzEvent() { return manager.getJsonFromFile(File(manager.repoLocation, "constants/$file.json")) } - inline fun readConstant(file: String, gson: Gson): T { + inline fun readConstant(file: String, gson: Gson = ConfigManager.gson): T { val data = getConstant(file) ?: ErrorManager.skyHanniError("$file failed to load from neu repo!") return try { gson.fromJson(data) @@ -26,6 +26,4 @@ class NeuRepositoryReloadEvent : LorenzEvent() { throw e } } - - inline fun readConstant(file: String): T = readConstant(file, ConfigManager.gson) } From 3e41b23cadadba16efd0d3a653a0fc38e0f8716b Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Fri, 14 Jun 2024 16:21:32 +0200 Subject: [PATCH 22/36] fix merge conflicts --- .idea/dictionaries/default_user.xml | 407 ++++++++++++++-------------- 1 file changed, 203 insertions(+), 204 deletions(-) diff --git a/.idea/dictionaries/default_user.xml b/.idea/dictionaries/default_user.xml index c77755de0a1a..5a94cb662c15 100644 --- a/.idea/dictionaries/default_user.xml +++ b/.idea/dictionaries/default_user.xml @@ -1,217 +1,216 @@ - - - abiphone - agaricus - allinvite - apec - arachne - arachne's - ashfang - autopet - bacte - bandana - berberis - biome - bladesoul - blobbercysts - bloodfiend - bobber - bobber's - bonzo - bonzo's - bonzos - boop - bossbar - broodfather - cadycous - carrolyn - cata - cavespider - chestplate - chocolatefactory - chronomatron - chumcap - coflnet - coords - craftable - cropie - crosshair - deathmite - deathmites - deathripper - demonlord - derpy - despawn - dicer - disintegrator + + + abiphone + agaricus + allinvite + apec + arachne + arachne's + ashfang + autopet + bacte + bandana + berberis + biome + bladesoul + blobbercysts + bloodfiend + bobber + bobber's + bonzo + bonzo's + bonzos + boop + bossbar + broodfather + cadycous + carrolyn + cata + cavespider + chestplate + chocolatefactory + chronomatron + chumcap + coflnet + coords + craftable + cropie + crosshair + deathmite + deathmites + deathripper + demonlord + derpy + despawn + dicer + disintegrator disintegrators dragontail - dreadfarm + dreadfarm dreadlord - dungeoneering - dwarven - egglocator - einary - einary's - elitebot - enderman - endermen - endermite - enderstone - endstone - etherwarp + dungeoneering + dwarven + egglocator + einary + einary's + elitebot + enderman + endermen + endermite + enderstone + endstone + etherwarp explosivity - fermento - firedust - firesale - firesales - getfromsacks - glacite - goldor - gratitudes - hatcessory + fermento + firedust + firesale + firesales + getfromsacks + glacite + goldor + gratitudes + hatcessory hecatomb - hideparticles - hoppity - hoppity's - horsezooka - hotbar - hotm - hoverable + hideparticles + hoppity + hoppity's + horsezooka + hotbar + hotm + hoverable hpb's - hypixel - hypixel's - ichor - igrupan - igrupan's - ingame - inquis - inquistiors - internalname - interp - itemstack - jawbus - jerries - jerrypocalypse - jyrre - kaeso - keybind - keybinds - kindlebane - kismets - kloon - kuudra - kuudra's - laggy - lapis - larvas - lclick - lerp - livids - matriach - mawdredge - maxor - mcmod - millenia - miniboss - mirrorverse - mmclick - mobtracker - modid - moldfin - mooshroom - moul - moulberry - moulconfig - mouselocked - mouselowered - nametag - nametags - necron - neu's - npcs - nukekebi - nukekubi - odger - odger's - odonata - odonatas - opengenerowmenu - opti - oruo - packmaster - perkpocalypse - pickblock - pickonimbus - plhlegblast - polarvoid + hypixel + hypixel's + ichor + igrupan + igrupan's + ingame + inquis + inquistiors + internalname + interp + itemstack + jawbus + jerries + jerrypocalypse + jyrre + kaeso + keybind + keybinds + kindlebane + kismets + kloon + kuudra + kuudra's + laggy + lapis + larvas + lclick + lerp + livids + matriach + mawdredge + maxor + mcmod + millenia + miniboss + mirrorverse + mmclick + mobtracker + modid + moldfin + mooshroom + moul + moulberry + moulconfig + mouselocked + mouselowered + nametag + nametags + necron + neu's + npcs + nukekebi + nukekubi + odger + odger's + odonata + odonatas + opengenerowmenu + opti + oruo + packmaster + perkpocalypse + pickblock + pickonimbus + plhlegblast + polarvoid preinitialization - procs - pyrochaos - quazii - rclick - recombobulated + procs + pyrochaos + quazii + rclick + recombobulated recombobulator redstone - reindrake - renderable - renderables - revenant - riftstalker - robotron + reindrake + renderable + renderables + revenant + riftstalker + robotron runecrafting - runecrafting - sadan - scatha - sethome - shcopytranslation - shcropstartlocation - shlanedetection - shmarkplayer - shmouselock - shoutout - shulker - shwords - shworldedit - skeletor - skyblock - skyhanni - skyhanni's - skymall - skytils - skytils's - soopy - soopy's - soulsand - soulweaver - sprayonator - stillgore + sadan + scatha + sethome + shcopytranslation + shcropstartlocation + shlanedetection + shmarkplayer + shmouselock + shoutout + shulker + shwords + shworldedit + skeletor + skyblock + skyhanni + skyhanni's + skymall + skytils + skytils's + soopy + soopy's + soulsand + soulweaver + sprayonator + stillgore stonk - superboom - supercraft - supercrafting - superlite - superpairs - tablist - terracottas - thaumaturgy - treasurite - tubulator - turbomax - twinclaws - typhoeus - ultrasequencer - unobtained - untrackable - vermins - viewrecipe - voidgloom - voidling - voltas - wikithis - wyld - yoggie - - + superboom + supercraft + supercrafting + superlite + superpairs + tablist + terracottas + thaumaturgy + treasurite + tubulator + turbomax + twinclaws + typhoeus + ultrasequencer + unobtained + untrackable + vermins + viewrecipe + voidgloom + voidling + voltas + wikithis + wyld + yoggie + + From 38ac9d8ad2836435cef426b85a8f41f90c3c19b7 Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Sat, 15 Jun 2024 12:13:36 +0200 Subject: [PATCH 23/36] implemented small suggestions --- .../inventory/helper/ReforgeHelperConfig.java | 6 +-- .../skyhanni/data/model/SkyblockStat.kt | 4 +- .../features/inventory/ReforgeHelper.kt | 38 +++++++++++-------- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java index 4ee678f13281..1061acba1ab3 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java @@ -11,16 +11,16 @@ public class ReforgeHelperConfig { @Expose @ConfigLink(owner = ReforgeHelperConfig.class, field = "enable") - public Position posList = new Position(80, 85, true, true); + public Position position = new Position(80, 85, true, true); @Expose @ConfigOption(name = "Enable", desc = "Enables the reforge helper.") @ConfigEditorBoolean @FeatureToggle - public boolean enable = true; + public boolean enabled = true; @Expose - @ConfigOption(name = "Reforge Stones Hex Only", desc = "Displays reforge stones only when in Hex.") + @ConfigOption(name = "Stones Hex Only", desc = "Displays reforge stones only when in Hex.") @ConfigEditorBoolean public boolean reforgeStonesOnlyHex = true; diff --git a/src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt b/src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt index 05a566730910..4ce1acf3931f 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt @@ -46,9 +46,9 @@ enum class SkyblockStat(val icon: String) { FEAR("§a☠") ; - val fname = name.lowercase().allLettersFirstUppercase() + val capitilzedName = name.lowercase().allLettersFirstUppercase() - val iconWithName = "$icon $fname" + val iconWithName = "$icon $capitilzedName" fun asString(value: Int) = (if (value > 0) "+" else "") + value.toString() + " " + this.icon diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt index 6abac38e503c..348c1fcee9b4 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt @@ -48,19 +48,19 @@ object ReforgeHelper { private val reforgeMenu by repoGroup.pattern( "menu.blacksmith", - "Reforge Item" + "Reforge Item", ) private val reforgeHexMenu by repoGroup.pattern( "menu.hex", - "The Hex ➜ Reforges" + "The Hex ➜ Reforges", ) private val reforgeChatMessage by repoGroup.pattern( "chat.success", - "§aYou reforged your .* §r§ainto a .*!|§aYou applied a .* §r§ato your .*!" + "§aYou reforged your .* §r§ainto a .*!|§aYou applied a .* §r§ato your .*!", ) private val reforgeChatFail by repoGroup.pattern( "chat.fail", - "§cWait a moment before reforging again!|§cWhoa! Slow down there!" + "§cWait a moment before reforging again!|§cWhoa! Slow down there!", ) private var isInReforgeMenu = false @@ -69,7 +69,7 @@ object ReforgeHelper { private fun isReforgeMenu(chestName: String) = reforgeMenu.matches(chestName) private fun isHexReforgeMenu(chestName: String) = reforgeHexMenu.matches(chestName) - private fun isEnabled() = LorenzUtils.inSkyBlock && config.enable && isInReforgeMenu + private fun isEnabled() = LorenzUtils.inSkyBlock && config.enabled && isInReforgeMenu private var itemToReforge: ItemStack? = null private var inventoryContainer: Container? = null @@ -255,7 +255,7 @@ object ReforgeHelper { stats = (reforge.stats[itemRarity]?.print(currentReforge?.stats?.get(itemRarity)) ?: emptyList()) removedEffect = getReforgeEffect( currentReforge, - itemRarity + itemRarity, )?.let { listOf(rString("§cRemoves Effect:")) + it } ?: emptyList() addEffectText = "§aAdds Effect:" @@ -279,7 +279,8 @@ object ReforgeHelper { SoundUtils.playClickSound() reforgeToSearch = reforge updateDisplay() - }, onHover = onHover + }, + onHover = onHover, ) } @@ -288,7 +289,7 @@ object ReforgeHelper { Renderable.wrappedString( it, 190, - color = LorenzColor.GRAY.toColor() + color = LorenzColor.GRAY.toColor(), ) } @@ -321,24 +322,29 @@ object ReforgeHelper { Renderable.hoverTips( Renderable.fixedSizeLine( rString(icon, horizontalAlign = RenderUtils.HorizontalAlignment.CENTER), - SkyblockStat.fontSizeOfLargestIcon - ), listOf("§6Sort after", tip) - ), fieldColor.toColor(), radius = 15, padding = 1 + SkyblockStat.fontSizeOfLargestIcon, + ), + listOf("§6Sort after", tip), + ), + fieldColor.toColor(), radius = 15, padding = 1, ) return if (sortAfter == stat) { sortField } else { - Renderable.clickable(sortField, { - sortAfter = stat - updateDisplay() - }) + Renderable.clickable( + sortField, + { + sortAfter = stat + updateDisplay() + }, + ) } } @SubscribeEvent fun onRender(event: GuiRenderEvent.ChestGuiOverlayRenderEvent) { if (!isEnabled()) return - config.posList.renderRenderables(display, posLabel = "Reforge Overlay") + config.position.renderRenderables(display, posLabel = "Reforge Overlay") } @SubscribeEvent From 7d1c92b2d59e3fd3e3c8c77cb5f1bd0553979f00 Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Sat, 15 Jun 2024 12:50:15 +0200 Subject: [PATCH 24/36] big suggestion implemented --- .../inventory/helper/ReforgeHelperConfig.java | 7 ++++++- .../hannibal2/skyhanni/data/model/SkyblockStat.kt | 10 +++------- .../skyhanni/features/inventory/ReforgeHelper.kt | 15 +++++++++------ 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java index 1061acba1ab3..43bba7f8c61b 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/helper/ReforgeHelperConfig.java @@ -10,7 +10,7 @@ public class ReforgeHelperConfig { @Expose - @ConfigLink(owner = ReforgeHelperConfig.class, field = "enable") + @ConfigLink(owner = ReforgeHelperConfig.class, field = "enabled") public Position position = new Position(80, 85, true, true); @Expose @@ -24,6 +24,11 @@ public class ReforgeHelperConfig { @ConfigEditorBoolean public boolean reforgeStonesOnlyHex = true; + @Expose + @ConfigOption(name = "Show Diff", desc = "Shows the difference of the new reforge to the current one in the slecetion list.") + @ConfigEditorBoolean + public boolean showDiff = false; + @Expose @ConfigOption(name = "Hide chat", desc = "Hides the vanilla chat messages from reforging.") @ConfigEditorBoolean diff --git a/src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt b/src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt index 4ce1acf3931f..35c790209ced 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt @@ -62,13 +62,9 @@ enum class SkyblockStat(val icon: String) { class SkyblockStatList : EnumMap(SkyblockStat::class.java), Map { operator fun minus(other: SkyblockStatList): SkyblockStatList { return SkyblockStatList().apply { - for ((key, value) in this@SkyblockStatList) { - this[key] = value - (other[key] ?: 0.0) - } - for ((key, value) in other) { - if (this[key] == null) { - this[key] = (this@SkyblockStatList[key] ?: 0.0) - value - } + val keys = this.keys + other.keys + for (key in keys) { + this[key] = (this@SkyblockStatList[key] ?: 0.0) - (other[key] ?: 0.0) } } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt index 348c1fcee9b4..8f4be3d54739 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt @@ -245,11 +245,13 @@ object ReforgeHelper { val stats: List val removedEffect: List val addEffectText: String + val click: List if (currentReforge == reforge) { pre = listOf(rString("§3Reforge is currently applied!")) stats = (currentReforge?.stats?.get(itemRarity)?.print() ?: emptyList()) removedEffect = emptyList() addEffectText = "§aEffect:" + click = emptyList() } else { pre = listOf(rString("§6Reforge Stats")) stats = (reforge.stats[itemRarity]?.print(currentReforge?.stats?.get(itemRarity)) ?: emptyList()) @@ -259,13 +261,14 @@ object ReforgeHelper { )?.let { listOf(rString("§cRemoves Effect:")) + it } ?: emptyList() addEffectText = "§aAdds Effect:" + click = listOf(rString("§eClick to select")) } val addedEffect = (getReforgeEffect(reforge, itemRarity)?.let { listOf(rString(addEffectText)) + it } ?: emptyList()) - return@run pre + stats + removedEffect + addedEffect + return@run pre + stats + removedEffect + addedEffect + click } val onHover = if (!isInHexReforgeMenu) { {} @@ -324,7 +327,7 @@ object ReforgeHelper { rString(icon, horizontalAlign = RenderUtils.HorizontalAlignment.CENTER), SkyblockStat.fontSizeOfLargestIcon, ), - listOf("§6Sort after", tip), + listOf("§6Sort after", tip, "§eClick to apply sorting"), ), fieldColor.toColor(), radius = 15, padding = 1, ) @@ -400,13 +403,13 @@ object ReforgeHelper { } private fun SkyblockStatList.print(appliedReforge: SkyblockStatList? = null): List { - val diff = appliedReforge?.let { this - it } + val diff = appliedReforge?.takeIf { config.showDiff }?.let { this - it } val main = ((diff ?: this).mapNotNull { val key = it.key - val value = this[key] ?: return@mapNotNull null + val value = this[key] ?: 0.0 buildList { - add(rString("§9${value.toStringWithPlus()}")) - diff?.get(key)?.let { add(rString((if (it < 0) "§c" else "§a") + it.toStringWithPlus())) } + add(rString("§9${value.toStringWithPlus().removeSuffix(".0")}")) + diff?.get(key)?.let { add(rString((if (it < 0) "§c" else "§a") + it.toStringWithPlus().removeSuffix(".0"))) } add(rString(key.iconWithName)) } }) From 225ad027633136d474ebec837a1cf148e76f5585 Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Sun, 16 Jun 2024 12:11:34 +0200 Subject: [PATCH 25/36] Update src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt Co-authored-by: hannibal2 <24389977+hannibal002@users.noreply.github.com> --- src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt index da49f7c4878a..c930c7b58e7e 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt @@ -286,8 +286,8 @@ object NEUItems { fun allNeuRepoItems(): Map = NotEnoughUpdates.INSTANCE.manager.itemInformation fun getInternalNamesForItemId(item: Item): List { - if (itemIdCache.contains(item)) { - return itemIdCache[item]!! + itemIdCache[item]?.let { + return it } val result = allNeuRepoItems() .filter { Item.getByNameOrId(it.value.get("itemid").asString) == item } From a9d0f4a8d99e56ed53d335a3c951f57cecd220bc Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Sun, 16 Jun 2024 12:17:10 +0200 Subject: [PATCH 26/36] typo --- .../java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt b/src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt index 35c790209ced..161ec76f5ad6 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/model/SkyblockStat.kt @@ -46,9 +46,9 @@ enum class SkyblockStat(val icon: String) { FEAR("§a☠") ; - val capitilzedName = name.lowercase().allLettersFirstUppercase() + val capitalizedName = name.lowercase().allLettersFirstUppercase() - val iconWithName = "$icon $capitilzedName" + val iconWithName = "$icon $capitalizedName" fun asString(value: Int) = (if (value > 0) "+" else "") + value.toString() + " " + this.icon From 4853caf8f12528445ec110f7bca45d77af10fb9c Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Sun, 16 Jun 2024 12:36:48 +0200 Subject: [PATCH 27/36] fix ability diff --- .../at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt index 8f4be3d54739..c7a1ce42f981 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt @@ -268,7 +268,9 @@ object ReforgeHelper { (getReforgeEffect(reforge, itemRarity)?.let { listOf(rString(addEffectText)) + it } ?: emptyList()) - return@run pre + stats + removedEffect + addedEffect + click + return@run pre + stats + (if (config.showDiff) { + removedEffect + addedEffect + } else emptyList()) + click } val onHover = if (!isInHexReforgeMenu) { {} From 607f28fbae587b2e152dce9f6f6c4990f415cbbc Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Sun, 16 Jun 2024 13:45:29 +0200 Subject: [PATCH 28/36] correctly now --- .../skyhanni/features/inventory/ReforgeHelper.kt | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt index c7a1ce42f981..e05053a599d8 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt @@ -255,11 +255,11 @@ object ReforgeHelper { } else { pre = listOf(rString("§6Reforge Stats")) stats = (reforge.stats[itemRarity]?.print(currentReforge?.stats?.get(itemRarity)) ?: emptyList()) - removedEffect = getReforgeEffect( + removedEffect = if (config.showDiff) getReforgeEffect( currentReforge, itemRarity, )?.let { listOf(rString("§cRemoves Effect:")) + it } - ?: emptyList() + ?: emptyList() else emptyList() addEffectText = "§aAdds Effect:" click = listOf(rString("§eClick to select")) } @@ -268,9 +268,7 @@ object ReforgeHelper { (getReforgeEffect(reforge, itemRarity)?.let { listOf(rString(addEffectText)) + it } ?: emptyList()) - return@run pre + stats + (if (config.showDiff) { - removedEffect + addedEffect - } else emptyList()) + click + return@run pre + stats + removedEffect + addedEffect + click } val onHover = if (!isInHexReforgeMenu) { {} From 29171da7ecdd6ad70acc1275d8e25f01556c8b9a Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 23 Jun 2024 18:26:55 +0200 Subject: [PATCH 29/36] code cleanup --- .../skyhanni/features/inventory/ReforgeHelper.kt | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt index e05053a599d8..6827d9f8b897 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt @@ -248,25 +248,22 @@ object ReforgeHelper { val click: List if (currentReforge == reforge) { pre = listOf(rString("§3Reforge is currently applied!")) - stats = (currentReforge?.stats?.get(itemRarity)?.print() ?: emptyList()) + stats = currentReforge?.stats?.get(itemRarity)?.print() ?: emptyList() removedEffect = emptyList() addEffectText = "§aEffect:" click = emptyList() } else { pre = listOf(rString("§6Reforge Stats")) - stats = (reforge.stats[itemRarity]?.print(currentReforge?.stats?.get(itemRarity)) ?: emptyList()) - removedEffect = if (config.showDiff) getReforgeEffect( + stats = reforge.stats[itemRarity]?.print(currentReforge?.stats?.get(itemRarity)) ?: emptyList() + removedEffect = getReforgeEffect( currentReforge, itemRarity, - )?.let { listOf(rString("§cRemoves Effect:")) + it } - ?: emptyList() else emptyList() + )?.let { listOf(rString("§cRemoves Effect:")) + it }?.takeIf { config.showDiff } ?: emptyList() addEffectText = "§aAdds Effect:" click = listOf(rString("§eClick to select")) } - val addedEffect = - (getReforgeEffect(reforge, itemRarity)?.let { listOf(rString(addEffectText)) + it } - ?: emptyList()) + val addedEffect = getReforgeEffect(reforge, itemRarity)?.let { listOf(rString(addEffectText)) + it } ?: emptyList() return@run pre + stats + removedEffect + addedEffect + click } From fb372d2a34b12a4da62664a08bdaa32aa913daeb Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Sun, 23 Jun 2024 18:36:06 +0200 Subject: [PATCH 30/36] suggestions --- .../features/inventory/ReforgeHelper.kt | 75 ++++++++++--------- 1 file changed, 40 insertions(+), 35 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt index 6827d9f8b897..6035ec172d59 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt @@ -37,7 +37,7 @@ import net.minecraft.item.ItemStack import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import java.awt.Color import java.util.concurrent.atomic.AtomicBoolean -import at.hannibal2.skyhanni.utils.renderables.Renderable.Companion.string as rString +import at.hannibal2.skyhanni.utils.renderables.Renderable.Companion.string as renderableString @SkyHanniModule object ReforgeHelper { @@ -191,7 +191,7 @@ object ReforgeHelper { @SubscribeEvent fun onClose(event: InventoryCloseEvent) { - if (!isEnabled()) return + if (!isInReforgeMenu) return isInReforgeMenu = false isInHexReforgeMenu = false reforgeToSearch = null @@ -199,7 +199,7 @@ object ReforgeHelper { hoveredReforge = null sortAfter = null itemToReforge = null - updateDisplay() + display = emptyList() } private fun updateDisplay() { @@ -207,7 +207,7 @@ object ReforgeHelper { } private fun generateDisplay() = buildList { - this.add(rString("§6Reforge Overlay")) + this.add(renderableString("§6Reforge Overlay")) val item = itemToReforge ?: run { reforgeToSearch = null @@ -240,33 +240,7 @@ object ReforgeHelper { private fun getReforgeView(itemRarity: LorenzRarity): (ReforgeAPI.Reforge) -> Renderable = { reforge -> val text = getReforgeColour(reforge) + reforge.name - val tips = run { - val pre: List - val stats: List - val removedEffect: List - val addEffectText: String - val click: List - if (currentReforge == reforge) { - pre = listOf(rString("§3Reforge is currently applied!")) - stats = currentReforge?.stats?.get(itemRarity)?.print() ?: emptyList() - removedEffect = emptyList() - addEffectText = "§aEffect:" - click = emptyList() - } else { - pre = listOf(rString("§6Reforge Stats")) - stats = reforge.stats[itemRarity]?.print(currentReforge?.stats?.get(itemRarity)) ?: emptyList() - removedEffect = getReforgeEffect( - currentReforge, - itemRarity, - )?.let { listOf(rString("§cRemoves Effect:")) + it }?.takeIf { config.showDiff } ?: emptyList() - addEffectText = "§aAdds Effect:" - click = listOf(rString("§eClick to select")) - } - - val addedEffect = getReforgeEffect(reforge, itemRarity)?.let { listOf(rString(addEffectText)) + it } ?: emptyList() - - return@run pre + stats + removedEffect + addedEffect + click - } + val tips = getReforgeTips(reforge, itemRarity) val onHover = if (!isInHexReforgeMenu) { {} } else { @@ -284,6 +258,37 @@ object ReforgeHelper { ) } + private fun getReforgeTips( + reforge: ReforgeAPI.Reforge, + itemRarity: LorenzRarity, + ): List { + val pre: List + val stats: List + val removedEffect: List + val addEffectText: String + val click: List + if (currentReforge == reforge) { + pre = listOf(renderableString("§3Reforge is currently applied!")) + stats = currentReforge?.stats?.get(itemRarity)?.print() ?: emptyList() + removedEffect = emptyList() + addEffectText = "§aEffect:" + click = emptyList() + } else { + pre = listOf(renderableString("§6Reforge Stats")) + stats = reforge.stats[itemRarity]?.print(currentReforge?.stats?.get(itemRarity)) ?: emptyList() + removedEffect = getReforgeEffect( + currentReforge, + itemRarity, + )?.let { listOf(renderableString("§cRemoves Effect:")) + it }?.takeIf { config.showDiff } ?: emptyList() + addEffectText = "§aAdds Effect:" + click = listOf(renderableString("§eClick to select")) + } + + val addedEffect = getReforgeEffect(reforge, itemRarity)?.let { listOf(renderableString(addEffectText)) + it } ?: emptyList() + + return pre + stats + removedEffect + addedEffect + click + } + private fun getReforgeEffect(reforge: ReforgeAPI.Reforge?, rarity: LorenzRarity) = reforge?.extraProperty?.get(rarity)?.let { Renderable.wrappedString( @@ -321,7 +326,7 @@ object ReforgeHelper { Renderable.drawInsideRoundedRect( Renderable.hoverTips( Renderable.fixedSizeLine( - rString(icon, horizontalAlign = RenderUtils.HorizontalAlignment.CENTER), + renderableString(icon, horizontalAlign = RenderUtils.HorizontalAlignment.CENTER), SkyblockStat.fontSizeOfLargestIcon, ), listOf("§6Sort after", tip, "§eClick to apply sorting"), @@ -405,9 +410,9 @@ object ReforgeHelper { val key = it.key val value = this[key] ?: 0.0 buildList { - add(rString("§9${value.toStringWithPlus().removeSuffix(".0")}")) - diff?.get(key)?.let { add(rString((if (it < 0) "§c" else "§a") + it.toStringWithPlus().removeSuffix(".0"))) } - add(rString(key.iconWithName)) + add(renderableString("§9${value.toStringWithPlus().removeSuffix(".0")}")) + diff?.get(key)?.let { add(renderableString((if (it < 0) "§c" else "§a") + it.toStringWithPlus().removeSuffix(".0"))) } + add(renderableString(key.iconWithName)) } }) val table = Renderable.table(main, 5) From e1137c875e55440d49b3407af008cdd0e1912f11 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 23 Jun 2024 18:48:27 +0200 Subject: [PATCH 31/36] formatting --- .../at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt index 6035ec172d59..3d4e421077f1 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt @@ -281,7 +281,7 @@ object ReforgeHelper { itemRarity, )?.let { listOf(renderableString("§cRemoves Effect:")) + it }?.takeIf { config.showDiff } ?: emptyList() addEffectText = "§aAdds Effect:" - click = listOf(renderableString("§eClick to select")) + click = listOf(renderableString(""), renderableString("§eClick to select!")) } val addedEffect = getReforgeEffect(reforge, itemRarity)?.let { listOf(renderableString(addEffectText)) + it } ?: emptyList() @@ -329,7 +329,7 @@ object ReforgeHelper { renderableString(icon, horizontalAlign = RenderUtils.HorizontalAlignment.CENTER), SkyblockStat.fontSizeOfLargestIcon, ), - listOf("§6Sort after", tip, "§eClick to apply sorting"), + listOf("§6Sort after", tip, "", "§eClick to apply sorting!"), ), fieldColor.toColor(), radius = 15, padding = 1, ) From 74922ee582e0f1498fb5229b455086cf30dbe246 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 23 Jun 2024 18:52:13 +0200 Subject: [PATCH 32/36] only show "Click to apply sorting" when truly clickable --- .../skyhanni/features/inventory/ReforgeHelper.kt | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt index 3d4e421077f1..9042ef5b1989 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt @@ -320,8 +320,15 @@ object ReforgeHelper { tip = stat.iconWithName } - val fieldColor = if (sortAfter == stat) LorenzColor.GRAY else LorenzColor.DARK_GRAY + val alreadySelected = sortAfter == stat + val fieldColor = if (alreadySelected) LorenzColor.GRAY else LorenzColor.DARK_GRAY + + val tips = if (alreadySelected) { + listOf("§6Sort after", tip) + } else { + listOf("§6Sort after", tip, "", "§eClick to apply sorting!") + } val sortField = Renderable.drawInsideRoundedRect( Renderable.hoverTips( @@ -329,11 +336,11 @@ object ReforgeHelper { renderableString(icon, horizontalAlign = RenderUtils.HorizontalAlignment.CENTER), SkyblockStat.fontSizeOfLargestIcon, ), - listOf("§6Sort after", tip, "", "§eClick to apply sorting!"), + tips, ), fieldColor.toColor(), radius = 15, padding = 1, ) - return if (sortAfter == stat) { + return if (alreadySelected) { sortField } else { Renderable.clickable( From 9541cc8f4786a79587dd2c08247e45abeefc4075 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 23 Jun 2024 18:59:27 +0200 Subject: [PATCH 33/36] only show "Click to select!" when truly clickable --- .../skyhanni/features/inventory/ReforgeHelper.kt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt index 9042ef5b1989..1e3c3cfe29cd 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt @@ -262,31 +262,30 @@ object ReforgeHelper { reforge: ReforgeAPI.Reforge, itemRarity: LorenzRarity, ): List { - val pre: List val stats: List val removedEffect: List val addEffectText: String val click: List if (currentReforge == reforge) { - pre = listOf(renderableString("§3Reforge is currently applied!")) stats = currentReforge?.stats?.get(itemRarity)?.print() ?: emptyList() removedEffect = emptyList() addEffectText = "§aEffect:" - click = emptyList() + click = listOf(renderableString(""), renderableString("§3Reforge is currently applied!")) } else { - pre = listOf(renderableString("§6Reforge Stats")) stats = reforge.stats[itemRarity]?.print(currentReforge?.stats?.get(itemRarity)) ?: emptyList() removedEffect = getReforgeEffect( currentReforge, itemRarity, )?.let { listOf(renderableString("§cRemoves Effect:")) + it }?.takeIf { config.showDiff } ?: emptyList() addEffectText = "§aAdds Effect:" - click = listOf(renderableString(""), renderableString("§eClick to select!")) + click = if (reforgeToSearch != reforge) { + listOf(renderableString(""), renderableString("§eClick to select!")) + } else emptyList() } val addedEffect = getReforgeEffect(reforge, itemRarity)?.let { listOf(renderableString(addEffectText)) + it } ?: emptyList() - return pre + stats + removedEffect + addedEffect + click + return listOf(renderableString("§6Reforge Stats")) + stats + removedEffect + addedEffect + click } private fun getReforgeEffect(reforge: ReforgeAPI.Reforge?, rarity: LorenzRarity) = From e922a9c3775fbe846e4aaf66f0f6dd92c2ef3894 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 23 Jun 2024 19:01:18 +0200 Subject: [PATCH 34/36] extract function --- .../features/inventory/ReforgeHelper.kt | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt index 1e3c3cfe29cd..302d43960986 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt @@ -117,21 +117,7 @@ object ReforgeHelper { if (!isEnabled()) return if (event.slot?.slotNumber == reforgeButton) { if (event.slot.stack?.name == "§eReforge Item" || event.slot.stack?.name == "§cError!") return - if (currentReforge == reforgeToSearch) { - event.cancel() - waitForChat.set(false) - SoundUtils.playBeepSound() - } else if (waitForChat.get()) { - waitDelay = true - event.cancel() - } else { - if (event.clickedButton == 2) return - if (waitDelay) { - waitDelay = false - } else { - waitForChat.set(true) - } - } + if (handleReforgeButtonClick(event)) return } DelayedRun.runNextTick { @@ -139,6 +125,25 @@ object ReforgeHelper { } } + private fun handleReforgeButtonClick(event: GuiContainerEvent.SlotClickEvent): Boolean { + if (currentReforge == reforgeToSearch) { + event.cancel() + waitForChat.set(false) + SoundUtils.playBeepSound() + } else if (waitForChat.get()) { + waitDelay = true + event.cancel() + } else { + if (event.clickedButton == 2) return true + if (waitDelay) { + waitDelay = false + } else { + waitForChat.set(true) + } + } + return false + } + @SubscribeEvent fun onChat(event: LorenzChatEvent) { if (!isEnabled()) return From 4817717a86ab1678328a9e6d6c22225361e079cb Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 23 Jun 2024 19:58:56 +0200 Subject: [PATCH 35/36] code cleanup --- .../skyhanni/features/inventory/ReforgeHelper.kt | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt index 302d43960986..c848634a4aed 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt @@ -232,7 +232,7 @@ object ReforgeHelper { val statTypeButtons = (listOf(getStatButton(null)) + statTypes.map { getStatButton(it) }).chunked(9) this.add(Renderable.table(statTypeButtons, xPadding = 3, yPadding = 2)) - val list = reforgeList.sortedBy(getSortSelector(itemRarity, sortAfter)).map(getReforgeView(itemRarity)) + val list = reforgeList.sortedWith(getSortSelector(itemRarity, sortAfter)).map(getReforgeView(itemRarity)) this.addAll(list) } @@ -302,15 +302,14 @@ object ReforgeHelper { ) } - @Suppress("UNCHECKED_CAST") private fun getSortSelector( itemRarity: LorenzRarity, sorting: SkyblockStat?, - ): (ReforgeAPI.Reforge) -> Comparable = + ): Comparator = if (sorting != null) { - { -(it.stats[itemRarity]?.get(sorting) ?: 0.0) as Comparable } + Comparator.comparing { it.stats[itemRarity]?.get(sorting) ?: 0.0 }.reversed() } else { - { (it.isReforgeStone) as Comparable } + Comparator.comparing { it.isReforgeStone } } private fun getStatButton(stat: SkyblockStat?): Renderable { From a15b957150462643227fa3f1003efdb1abf52761 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 23 Jun 2024 20:05:53 +0200 Subject: [PATCH 36/36] sort by --- .../at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt index c848634a4aed..d1826b481896 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt @@ -328,9 +328,9 @@ object ReforgeHelper { val tips = if (alreadySelected) { - listOf("§6Sort after", tip) + listOf("§6Sort by", tip) } else { - listOf("§6Sort after", tip, "", "§eClick to apply sorting!") + listOf("§6Sort by", tip, "", "§eClick to apply sorting!") } val sortField = Renderable.drawInsideRoundedRect(