From e90fd65559ef551b29de7d28f4fea3a46cc2a4e6 Mon Sep 17 00:00:00 2001 From: Luna Date: Thu, 26 Sep 2024 01:33:53 +0200 Subject: [PATCH 001/155] Fix: Update radius for Sulphur Skitter to 4 blocks (#2590) --- .../at/hannibal2/skyhanni/features/nether/SulphurSkitterBox.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/SulphurSkitterBox.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/SulphurSkitterBox.kt index 388e6bf23c75..1cc54772ec6e 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/SulphurSkitterBox.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/SulphurSkitterBox.kt @@ -29,7 +29,7 @@ object SulphurSkitterBox { private val config get() = SkyHanniMod.feature.fishing.trophyFishing.sulphurSkitterBox private var spongeBlocks = listOf() private var closestBlock: BlockPos? = null - private const val RADIUS = 8 + private const val RADIUS = 4 @SubscribeEvent fun onTick(event: LorenzTickEvent) { From 092a29dd8b13c2b04b0b7c259446ab697201dd5e Mon Sep 17 00:00:00 2001 From: David Cole <40234707+DavidArthurCole@users.noreply.github.com> Date: Thu, 26 Sep 2024 03:56:44 -0400 Subject: [PATCH 002/155] Backend: Dekekt (#2547) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Linnea Gräf Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Co-authored-by: Cal --- .../actions/setup-normal-workspace/action.yml | 13 + .github/scripts/process_detekt_sarif.sh | 37 ++ .github/workflows/build.yml | 42 ++- .github/workflows/check-style.yaml.disabled | 16 - CONTRIBUTING.md | 5 + build.gradle.kts | 56 +-- detekt/baseline.xml | 339 ++++++++++++++++++ detekt/build.gradle.kts | 13 + detekt/detekt.yml | 127 +++++++ .../kotlin/formatting/CustomCommentSpacing.kt | 51 +++ .../formatting/FormattingRuleSetProvider.kt | 17 + detekt/src/main/kotlin/grammar/AvoidColour.kt | 38 ++ .../kotlin/grammar/GrammarRuleSetProvider.kt | 17 + detekt/src/main/kotlin/root.kt | 1 + gradle/libs.versions.toml | 3 + root.gradle.kts | 21 ++ settings.gradle.kts | 1 + sharedVariables/src/MinecraftVersion.kt | 3 + ...ltipEvent.kt => RenderItemTooltipEvent.kt} | 2 +- .../SuperpairExperimentInformationDisplay.kt | 2 +- versions/1.8.9/detekt/baseline.xml | 339 ++++++++++++++++++ 21 files changed, 1085 insertions(+), 58 deletions(-) create mode 100644 .github/actions/setup-normal-workspace/action.yml create mode 100644 .github/scripts/process_detekt_sarif.sh delete mode 100644 .github/workflows/check-style.yaml.disabled create mode 100644 detekt/baseline.xml create mode 100644 detekt/build.gradle.kts create mode 100644 detekt/detekt.yml create mode 100644 detekt/src/main/kotlin/formatting/CustomCommentSpacing.kt create mode 100644 detekt/src/main/kotlin/formatting/FormattingRuleSetProvider.kt create mode 100644 detekt/src/main/kotlin/grammar/AvoidColour.kt create mode 100644 detekt/src/main/kotlin/grammar/GrammarRuleSetProvider.kt create mode 100644 detekt/src/main/kotlin/root.kt rename src/main/java/at/hannibal2/skyhanni/events/{RenderTooltipEvent.kt => RenderItemTooltipEvent.kt} (97%) create mode 100644 versions/1.8.9/detekt/baseline.xml diff --git a/.github/actions/setup-normal-workspace/action.yml b/.github/actions/setup-normal-workspace/action.yml new file mode 100644 index 000000000000..a0781d53c46c --- /dev/null +++ b/.github/actions/setup-normal-workspace/action.yml @@ -0,0 +1,13 @@ +name: 'Setup Java, Gradle and check out the source code' + +runs: + using: composite + steps: + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: 21 + cache: gradle + - name: Setup gradle + uses: gradle/actions/setup-gradle@v4 diff --git a/.github/scripts/process_detekt_sarif.sh b/.github/scripts/process_detekt_sarif.sh new file mode 100644 index 000000000000..7fb4f7e4e11f --- /dev/null +++ b/.github/scripts/process_detekt_sarif.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +# This script processes the Detekt SARIF file and outputs results in a format +# suitable for annotation in CI/CD systems. + +SARIF_FILE="$1" + +# Check if SARIF file exists +if [ ! -f "$SARIF_FILE" ]; then + echo "SARIF file not found: $SARIF_FILE" + exit 1 +fi + +# Define jq command to parse SARIF file +read -r -d '' jq_command <<'EOF' +.runs[].results[] | +{ + "full_path": .locations[].physicalLocation.artifactLocation.uri | sub("file://$(pwd)/"; ""), + "file_name": (.locations[].physicalLocation.artifactLocation.uri | split("/") | last), + "l": .locations[].physicalLocation, + "level": .level, + "message": .message.text, + "ruleId": .ruleId +} | +( + "::" + (.level) + + " file=" + (.full_path) + + ",line=" + (.l.region.startLine|tostring) + + ",title=" + (.ruleId) + + ",col=" + (.l.region.startColumn|tostring) + + ",endColumn=" + (.l.region.endColumn|tostring) + + "::" + (.message.text) +) +EOF + +# Run jq command to format the output +jq -r "$jq_command" < "$SARIF_FILE" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7c75f0eef805..7e42909ee297 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,15 +18,9 @@ jobs: runs-on: ubuntu-latest name: "Build and test" steps: - - uses: actions/checkout@v3 - - name: Set up JDK 21 - uses: actions/setup-java@v3 - with: - java-version: 21 - distribution: temurin - cache: gradle - - name: Setup gradle - uses: gradle/gradle-build-action@v2 + - name: Checkout code + uses: actions/checkout@v4 + - uses: ./.github/actions/setup-normal-workspace - name: Build with Gradle run: ./gradlew assemble -x test --stacktrace - uses: actions/upload-artifact@v3 @@ -42,19 +36,31 @@ jobs: with: name: "Test Results" path: versions/1.8.9/build/reports/tests/test/ + #detekt: + # name: Run detekt + # runs-on: ubuntu-latest + + # steps: + # - name: Checkout code + # uses: actions/checkout@v4 + # - uses: ./.github/actions/setup-normal-workspace + # - name: Run detekt + # run: | + # ./gradlew detekt --stacktrace + # - name: Annotate detekt failures + # if: ${{ !cancelled() }} + # run: | + # chmod +x .github/scripts/process_detekt_sarif.sh + # ./.github/scripts/process_detekt_sarif.sh versions/1.8.9/build/reports/detekt/detekt.sarif + + preprocess: runs-on: ubuntu-latest name: "Build multi version" steps: - - uses: actions/checkout@v3 - - name: Set up JDK 21 - uses: actions/setup-java@v3 - with: - java-version: 21 - distribution: temurin - cache: gradle - - name: Setup gradle - uses: gradle/gradle-build-action@v2 + - name: Checkout code + uses: actions/checkout@v4 + - uses: ./.github/actions/setup-normal-workspace - name: Enable preprocessor run: | mkdir -p .gradle diff --git a/.github/workflows/check-style.yaml.disabled b/.github/workflows/check-style.yaml.disabled deleted file mode 100644 index ff172208f8bc..000000000000 --- a/.github/workflows/check-style.yaml.disabled +++ /dev/null @@ -1,16 +0,0 @@ -name: check-style -on: - - pull_request -jobs: - ktlint: - name: Check Style - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - name: Checkout code - - name: ktlint - uses: ScaCap/action-ktlint@master - with: - github_token: ${{ secrets.github_token }} - reporter: github-pr-check diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fc0f2d5c4f90..d68b88f9fe66 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -97,6 +97,11 @@ format like "- #821" to illustrate the dependency. - Follow the [Hypixel Rules](https://hypixel.net/rules). - Use the coding conventions for [Kotlin](https://kotlinlang.org/docs/coding-conventions.html) and [Java](https://www.oracle.com/java/technologies/javase/codeconventions-contents.html). +- **My build is failing due to `detekt`, what do I do?** + - `detekt` is our code quality tool. It checks for code smells and style issues. + - If you have a build failure stating `Analysis failed with ... weighted issues.`, you can check `versions/[target version]/build/reports/detekt/` for a comprehensive list of issues. + - **There are valid reasons to deviate from the norm** + - If you have such a case, either use `@Supress("rule_name")`, or re-build the `baseline.xml` file, using `./gradlew detektBaseline`. - Do not copy features from other mods. Exceptions: - Mods that are paid to use. - Mods that have reached their end of life. (Rip SBA, Dulkir and Soopy). diff --git a/build.gradle.kts b/build.gradle.kts index add2df4e77e2..b0e2af2544ed 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,6 +3,8 @@ import at.skyhanni.sharedvariables.MultiVersionStage import at.skyhanni.sharedvariables.ProjectTarget import at.skyhanni.sharedvariables.SHVersionInfo import at.skyhanni.sharedvariables.versionString +import io.gitlab.arturbosch.detekt.Detekt +import io.gitlab.arturbosch.detekt.DetektCreateBaselineTask import net.fabricmc.loom.task.RunGameTask import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.tasks.KotlinCompile @@ -18,32 +20,12 @@ plugins { kotlin("plugin.power-assert") `maven-publish` id("moe.nea.shot") version "1.0.0" + id("io.gitlab.arturbosch.detekt") id("net.kyori.blossom") } val target = ProjectTarget.values().find { it.projectPath == project.path }!! -repositories { - mavenCentral() - mavenLocal() - maven("https://maven.minecraftforge.net") { - metadataSources { - artifact() // We love missing POMs - } - } - maven("https://repo.spongepowered.org/maven/") // mixin - maven("https://pkgs.dev.azure.com/djtheredstoner/DevAuth/_packaging/public/maven/v1") // DevAuth - maven("https://jitpack.io") { // NotEnoughUpdates (compiled against) - content { - includeGroupByRegex("(com|io)\\.github\\..*") - } - } - maven("https://repo.nea.moe/releases") // libautoupdate - maven("https://maven.notenoughupdates.org/releases") // NotEnoughUpdates (dev env) - maven("https://repo.hypixel.net/repository/Hypixel/") // mod-api - maven("https://maven.teamresourceful.com/repository/thatgravyboat/") // DiscordIPC -} - // Toolchains: java { toolchain.languageVersion.set(target.minecraftVersion.javaLanguageVersion) @@ -178,10 +160,14 @@ dependencies { exclude(module = "unspecified") isTransitive = false } - testImplementation("org.junit.jupiter:junit-jupiter:5.10.0") + testImplementation("org.junit.jupiter:junit-jupiter:5.11.0") testImplementation("io.mockk:mockk:1.12.5") implementation("net.hypixel:mod-api:0.3.1") + + detektPlugins("org.notenoughupdates:detektrules:1.0.0") + detektPlugins(project(":detekt")) + detektPlugins("io.gitlab.arturbosch.detekt:detekt-formatting:1.23.7") } afterEvaluate { @@ -350,3 +336,29 @@ publishing.publications { } } } + +// Detekt: TODO: Uncomment this when we're ready to enforce +/*detekt { + buildUponDefaultConfig = true // preconfigure defaults + config.setFrom(rootProject.layout.projectDirectory.file("detekt/detekt.yml")) // point to your custom config defining rules to run, overwriting default behavior + baseline = file(layout.projectDirectory.file("detekt/baseline.xml")) // a way of suppressing issues before introducing detekt + source.setFrom(project.sourceSets.named("main").map { it.allSource }) +} + +tasks.withType().configureEach { + reports { + html.required.set(true) // observe findings in your browser with structure and code snippets + xml.required.set(true) // checkstyle like format mainly for integrations like Jenkins + sarif.required.set(true) // standardized SARIF format (https://sarifweb.azurewebsites.net/) to support integrations with GitHub Code Scanning + md.required.set(true) // simple Markdown format + } +} + +tasks.withType().configureEach { + jvmTarget = target.minecraftVersion.formattedJavaLanguageVersion + outputs.cacheIf { false } // Custom rules won't work if cached +} +tasks.withType().configureEach { + jvmTarget = target.minecraftVersion.formattedJavaLanguageVersion + outputs.cacheIf { false } // Custom rules won't work if cached +}*/ diff --git a/detekt/baseline.xml b/detekt/baseline.xml new file mode 100644 index 000000000000..ac35c2f6d1a8 --- /dev/null +++ b/detekt/baseline.xml @@ -0,0 +1,339 @@ + + + + + AnnotationOnSeparateLine:GraphEditor.kt$GraphEditor$@Suppress("MapGetWithNotNullAssertionOperator") node.neighbours.map { GraphingEdge( translation[node]!!, translation[it.key]!!, ) } + AnnotationOnSeparateLine:GraphEditor.kt$GraphEditor$@Suppress("MapGetWithNotNullAssertionOperator") nodes[indexedTable[otherNode.id]!!] + ArrayPrimitive:CropMoneyDisplay.kt$CropMoneyDisplay$Array<Double> + ArrayPrimitive:CropMoneyDisplay.kt$CropMoneyDisplay$arrayOf(npcPrice) + ArrayPrimitive:CropMoneyDisplay.kt$CropMoneyDisplay$arrayOf(sellOffer) + ArrayPrimitive:LorenzVec.kt$Array<Double> + ArrayPrimitive:LorenzVec.kt$LorenzVec$Array<Double> + ArrayPrimitive:LorenzVec.kt$LorenzVec$Array<Float> + ArrayPrimitive:LorenzVec.kt$LorenzVec$arrayOf(x, y, z) + ArrayPrimitive:LorenzVec.kt$LorenzVec$arrayOf(x.toFloat(), y.toFloat(), z.toFloat()) + CyclomaticComplexMethod:AdvancedPlayerList.kt$AdvancedPlayerList$fun newSorting(original: List<String>): List<String> + CyclomaticComplexMethod:CropMoneyDisplay.kt$CropMoneyDisplay$private fun calculateMoneyPerHour(debugList: MutableList<List<Any>>): Map<NEUInternalName, Array<Double>> + CyclomaticComplexMethod:CropMoneyDisplay.kt$CropMoneyDisplay$private fun drawDisplay(): List<List<Any>> + CyclomaticComplexMethod:DamageIndicatorManager.kt$DamageIndicatorManager$private fun checkThorn(realHealth: Long, realMaxHealth: Long): String? + CyclomaticComplexMethod:EstimatedItemValueCalculator.kt$EstimatedItemValueCalculator$private fun addEnchantments(stack: ItemStack, list: MutableList<String>): Double + CyclomaticComplexMethod:GardenBestCropTime.kt$GardenBestCropTime$fun drawBestDisplay(currentCrop: CropType?): List<List<Any>> + CyclomaticComplexMethod:GardenCropMilestoneDisplay.kt$GardenCropMilestoneDisplay$private fun drawProgressDisplay(crop: CropType): List<Renderable> + CyclomaticComplexMethod:GardenVisitorFeatures.kt$GardenVisitorFeatures$private fun readToolTip(visitor: VisitorAPI.Visitor, itemStack: ItemStack?, toolTip: MutableList<String>) + CyclomaticComplexMethod:GhostCounter.kt$GhostCounter$private fun drawDisplay() + CyclomaticComplexMethod:GraphEditor.kt$GraphEditor$private fun input() + CyclomaticComplexMethod:GraphEditorBugFinder.kt$GraphEditorBugFinder$private fun asyncTest() + CyclomaticComplexMethod:IslandAreas.kt$IslandAreas$private fun buildDisplay() + CyclomaticComplexMethod:ItemDisplayOverlayFeatures.kt$ItemDisplayOverlayFeatures$private fun getStackTip(item: ItemStack): String? + CyclomaticComplexMethod:ItemNameResolver.kt$ItemNameResolver$internal fun getInternalNameOrNull(itemName: String): NEUInternalName? + CyclomaticComplexMethod:MinecraftConsoleFilter.kt$MinecraftConsoleFilter$override fun filter(event: LogEvent?): Filter.Result + CyclomaticComplexMethod:OverviewPage.kt$OverviewPage$private fun getPage(): Pair<List<List<Renderable>>, List<Renderable>> + CyclomaticComplexMethod:PacketTest.kt$PacketTest$private fun Packet<*>.print() + CyclomaticComplexMethod:ParkourHelper.kt$ParkourHelper$fun render(event: LorenzRenderWorldEvent) + CyclomaticComplexMethod:Renderable.kt$Renderable.Companion$internal fun shouldAllowLink(debug: Boolean = false, bypassChecks: Boolean): Boolean + CyclomaticComplexMethod:SkillProgress.kt$SkillProgress$private fun drawDisplay() + CyclomaticComplexMethod:VampireSlayerFeatures.kt$VampireSlayerFeatures$private fun EntityOtherPlayerMP.process() + CyclomaticComplexMethod:VisualWordGui.kt$VisualWordGui$override fun drawScreen(unusedX: Int, unusedY: Int, partialTicks: Float) + DestructuringDeclarationWithTooManyEntries:SackDisplay.kt$SackDisplay$val (internalName, rough, flawed, fine, roughPrice, flawedPrice, finePrice) = gem + Filename:AreaChangeEvents.kt$at.hannibal2.skyhanni.events.skyblock.AreaChangeEvents.kt + InjectDispatcher:ClipboardUtils.kt$ClipboardUtils$IO + InjectDispatcher:GardenNextJacobContest.kt$GardenNextJacobContest$IO + InjectDispatcher:HypixelBazaarFetcher.kt$HypixelBazaarFetcher$IO + InjectDispatcher:MayorAPI.kt$MayorAPI$IO + LongMethod:CopyNearbyEntitiesCommand.kt$CopyNearbyEntitiesCommand$fun command(args: Array<String>) + LongMethod:CropMoneyDisplay.kt$CropMoneyDisplay$private fun drawDisplay(): List<List<Any>> + LongMethod:DefaultConfigOptionGui.kt$DefaultConfigOptionGui$override fun drawScreen(mouseX: Int, mouseY: Int, partialTicks: Float) + LongMethod:GhostCounter.kt$GhostCounter$private fun drawDisplay() + LongMethod:GraphEditor.kt$GraphEditor$private fun input() + LongMethod:ItemDisplayOverlayFeatures.kt$ItemDisplayOverlayFeatures$private fun getStackTip(item: ItemStack): String? + LongMethod:MinecraftConsoleFilter.kt$MinecraftConsoleFilter$override fun filter(event: LogEvent?): Filter.Result + LongMethod:OverviewPage.kt$OverviewPage$private fun getPage(): Pair<List<List<Renderable>>, List<Renderable>> + LongMethod:RenderableTooltips.kt$RenderableTooltips$private fun drawHoveringText() + LongMethod:TabListRenderer.kt$TabListRenderer$private fun drawTabList() + LongMethod:VisualWordGui.kt$VisualWordGui$override fun drawScreen(unusedX: Int, unusedY: Int, partialTicks: Float) + LoopWithTooManyJumpStatements:AdvancedPlayerList.kt$AdvancedPlayerList$for + LoopWithTooManyJumpStatements:CropMoneyDisplay.kt$CropMoneyDisplay$for + LoopWithTooManyJumpStatements:CustomScoreboard.kt$CustomScoreboard$for + LoopWithTooManyJumpStatements:EstimatedItemValueCalculator.kt$EstimatedItemValueCalculator$for + LoopWithTooManyJumpStatements:GardenComposterInventoryFeatures.kt$GardenComposterInventoryFeatures$for + LoopWithTooManyJumpStatements:GardenVisitorFeatures.kt$GardenVisitorFeatures$for + LoopWithTooManyJumpStatements:IslandAreas.kt$IslandAreas$for + LoopWithTooManyJumpStatements:RiftBloodEffigies.kt$RiftBloodEffigies$for + LoopWithTooManyJumpStatements:SkyBlockItemModifierUtils.kt$SkyBlockItemModifierUtils$for + LoopWithTooManyJumpStatements:SkyHanniConfigSearchResetCommand.kt$SkyHanniConfigSearchResetCommand$for + LoopWithTooManyJumpStatements:SuperpairsClicksAlert.kt$SuperpairsClicksAlert$for + MapGetWithNotNullAssertionOperator:NavigationHelper.kt$NavigationHelper$distances[node]!! + MatchingDeclarationName:AreaChangeEvents.kt$ScoreboardAreaChangeEvent : SkyHanniEvent + MaxLineLength:GraphEditor.kt$GraphEditor$@Suppress("MapGetWithNotNullAssertionOperator") nodes[indexedTable[otherNode.id]!!] to node.position.distance(otherNode.position) + MemberNameEqualsClassName:CaptureFarmingGear.kt$CaptureFarmingGear$fun captureFarmingGear() + MemberNameEqualsClassName:Commands.kt$Commands$// command -> description private val commands = mutableListOf<CommandInfo>() + MemberNameEqualsClassName:FameRanks.kt$FameRanks$var fameRanks = emptyMap<String, FameRank>() private set + MemberNameEqualsClassName:FirstMinionTier.kt$FirstMinionTier$fun firstMinionTier( otherItems: Map<NEUInternalName, Int>, minions: MutableMap<String, NEUInternalName>, tierOneMinions: MutableList<NEUInternalName>, tierOneMinionsDone: MutableSet<NEUInternalName>, ) + MemberNameEqualsClassName:LastServers.kt$LastServers$private val lastServers = mutableMapOf<String, SimpleTimeMark>() + MemberNameEqualsClassName:PestSpawn.kt$PestSpawn$private fun pestSpawn(amount: Int, plotNames: List<String>, unknownAmount: Boolean) + MemberNameEqualsClassName:Shimmy.kt$Shimmy.Companion$private fun shimmy(source: Any?, fieldName: String): Any? + MemberNameEqualsClassName:TestBingo.kt$TestBingo$var testBingo = false + MemberNameEqualsClassName:Text.kt$Text$fun text(text: String, init: IChatComponent.() -> Unit = {}) + NoNameShadowing:BucketedItemTrackerData.kt$BucketedItemTrackerData${ it.hidden = !it.hidden } + NoNameShadowing:BurrowWarpHelper.kt$BurrowWarpHelper${ it.startsWith("§bWarp to ") } + NoNameShadowing:ChunkedStat.kt$ChunkedStat.Companion${ it.showWhen() } + NoNameShadowing:ContributorManager.kt$ContributorManager${ it.isAllowed() } + NoNameShadowing:Graph.kt$Graph.Companion${ out.name("Name").value(it) } + NoNameShadowing:Graph.kt$Graph.Companion${ out.name("Tags") out.beginArray() for (tagName in it) { out.value(tagName) } out.endArray() } + NoNameShadowing:GraphEditorBugFinder.kt$GraphEditorBugFinder${ it.position.distanceSqToPlayer() } + NoNameShadowing:GuiOptionEditorUpdateCheck.kt$GuiOptionEditorUpdateCheck$width + NoNameShadowing:HoppityCollectionStats.kt$HoppityCollectionStats${ val displayAmount = it.amount.shortFormat() val operationFormat = when (milestoneType) { HoppityEggType.CHOCOLATE_SHOP_MILESTONE -> "spending" HoppityEggType.CHOCOLATE_FACTORY_MILESTONE -> "reaching" else -> "" // Never happens } // List indexing is weird existingLore[replaceIndex - 1] = "§7Obtained by $operationFormat §6$displayAmount" existingLore[replaceIndex] = "§7all-time §6Chocolate." return existingLore } + NoNameShadowing:HotmData.kt$HotmData.Companion${ it.setCurrent(it.getTotal()) } + NoNameShadowing:LorenzVec.kt$LorenzVec.Companion$pitch + NoNameShadowing:LorenzVec.kt$LorenzVec.Companion$yaw + NoNameShadowing:Renderable.kt$Renderable.Companion.<no name provided>$posX + NoNameShadowing:Renderable.kt$Renderable.Companion.<no name provided>$posY + NoNameShadowing:Renderable.kt$Renderable.Companion.<no name provided>${ it.value?.contains(textInput.textBox, ignoreCase = true) ?: true } + NoNameShadowing:RenderableUtils.kt$RenderableUtils${ it != null } + NoNameShadowing:ReplaceRomanNumerals.kt$ReplaceRomanNumerals${ it.isValidRomanNumeral() && it.removeFormatting().romanToDecimal() != 2000 } + NoNameShadowing:RepoManager.kt$RepoManager${ unsuccessfulConstants.add(it) } + NoNameShadowing:RepoPatternManager.kt$RepoPatternManager${ it == '.' } + NoNameShadowing:Shimmy.kt$Shimmy.Companion$source + NoNameShadowing:SkyHanniBucketedItemTracker.kt$SkyHanniBucketedItemTracker${ ItemPriceSource.entries[it.ordinal] } + ReturnCount:AnitaMedalProfit.kt$AnitaMedalProfit$private fun readItem(slot: Int, item: ItemStack, table: MutableList<DisplayTableEntry>) + ReturnCount:BingoNextStepHelper.kt$BingoNextStepHelper$private fun readDescription(description: String): NextStep? + ReturnCount:BroodmotherFeatures.kt$BroodmotherFeatures$private fun onStageUpdate() + ReturnCount:ChatPeek.kt$ChatPeek$@JvmStatic fun peek(): Boolean + ReturnCount:ChestValue.kt$ChestValue$private fun isValidStorage(): Boolean + ReturnCount:CollectionTracker.kt$CollectionTracker$fun command(args: Array<String>) + ReturnCount:CompactBingoChat.kt$CompactBingoChat$private fun onSkyBlockLevelUp(message: String): Boolean + ReturnCount:CrimsonMinibossRespawnTimer.kt$CrimsonMinibossRespawnTimer$private fun updateArea() + ReturnCount:CropMoneyDisplay.kt$CropMoneyDisplay$private fun drawDisplay(): List<List<Any>> + ReturnCount:DamageIndicatorManager.kt$DamageIndicatorManager$private fun checkThorn(realHealth: Long, realMaxHealth: Long): String? + ReturnCount:DamageIndicatorManager.kt$DamageIndicatorManager$private fun getCustomHealth( entityData: EntityData, health: Long, entity: EntityLivingBase, maxHealth: Long, ): String? + ReturnCount:EnchantParser.kt$EnchantParser$private fun parseEnchants( loreList: MutableList<String>, enchants: Map<String, Int>, chatComponent: IChatComponent?, ) + ReturnCount:EstimatedItemValue.kt$EstimatedItemValue$private fun draw(stack: ItemStack): List<List<Any>> + ReturnCount:EstimatedItemValueCalculator.kt$EstimatedItemValueCalculator$private fun calculateStarPrice( internalName: NEUInternalName, inputStars: Int, ): Pair<EssenceItemUtils.EssenceUpgradePrice, Pair<Int, Int>>? + ReturnCount:FishingAPI.kt$FishingAPI$fun seaCreatureCount(entity: EntityArmorStand): Int + ReturnCount:GardenVisitorFeatures.kt$GardenVisitorFeatures$private fun showGui(): Boolean + ReturnCount:GraphEditor.kt$GraphEditor$private fun input() + ReturnCount:HideNotClickableItems.kt$HideNotClickableItems$private fun hideSalvage(chestName: String, stack: ItemStack): Boolean + ReturnCount:IslandGraphs.kt$IslandGraphs$private fun handleTick() + ReturnCount:ItemDisplayOverlayFeatures.kt$ItemDisplayOverlayFeatures$private fun getStackTip(item: ItemStack): String? + ReturnCount:ItemNameResolver.kt$ItemNameResolver$internal fun getInternalNameOrNull(itemName: String): NEUInternalName? + ReturnCount:ItemPriceUtils.kt$ItemPriceUtils$fun NEUInternalName.getPriceOrNull( priceSource: ItemPriceSource = ItemPriceSource.BAZAAR_INSTANT_BUY, pastRecipes: List<PrimitiveRecipe> = emptyList(), ): Double? + ReturnCount:ItemUtils.kt$ItemUtils$private fun NEUInternalName.grabItemName(): String + ReturnCount:MinecraftConsoleFilter.kt$MinecraftConsoleFilter$override fun filter(event: LogEvent?): Filter.Result + ReturnCount:MiningEventTracker.kt$MiningEventTracker$private fun sendData(eventName: String, time: String?) + ReturnCount:MobDetection.kt$MobDetection$private fun entitySpawn(entity: EntityLivingBase, roughType: Mob.Type): Boolean + ReturnCount:MobFilter.kt$MobFilter$internal fun createSkyblockEntity(baseEntity: EntityLivingBase): MobResult + ReturnCount:MobFilter.kt$MobFilter$private fun armorStandOnlyMobs(baseEntity: EntityLivingBase, armorStand: EntityArmorStand): MobResult? + ReturnCount:MobFilter.kt$MobFilter$private fun exceptions(baseEntity: EntityLivingBase, nextEntity: EntityLivingBase?): MobResult? + ReturnCount:MobFinder.kt$MobFinder$private fun tryAddEntitySpider(entity: EntityLivingBase): EntityResult? + ReturnCount:MobFinder.kt$MobFinder$private fun tryAddRift(entity: EntityLivingBase): EntityResult? + ReturnCount:MultiFilter.kt$MultiFilter$fun matchResult(string: String): String? + ReturnCount:PacketTest.kt$PacketTest$private fun Packet<*>.print() + ReturnCount:PowderMiningChatFilter.kt$PowderMiningChatFilter$@Suppress("CyclomaticComplexMethod") fun block(message: String): String? + ReturnCount:PurseAPI.kt$PurseAPI$private fun getCause(diff: Double): PurseChangeCause + ReturnCount:QuestLoader.kt$QuestLoader$private fun addQuest(name: String, state: QuestState, needAmount: Int): Quest + ReturnCount:ShowFishingItemName.kt$ShowFishingItemName$fun inCorrectArea(): Boolean + ReturnCount:SkillAPI.kt$SkillAPI$fun onCommand(it: Array<String>) + ReturnCount:SkyHanniConfigSearchResetCommand.kt$SkyHanniConfigSearchResetCommand$private suspend fun setCommand(args: Array<String>): String + ReturnCount:TabComplete.kt$TabComplete$private fun customTabComplete(command: String): List<String>? + SpreadOperator:ItemUtils.kt$ItemUtils$(tag, displayName, *lore.toTypedArray()) + SpreadOperator:LimboPlaytime.kt$LimboPlaytime$( itemID.getItemStack().item, ITEM_NAME, *createItemLore() ) + SpreadOperator:Text.kt$Text$(*component.toTypedArray(), separator = separator) + TooManyFunctions:CollectionUtils.kt$CollectionUtils + TooManyFunctions:DailyQuestHelper.kt$DailyQuestHelper + TooManyFunctions:EstimatedItemValueCalculator.kt$EstimatedItemValueCalculator + TooManyFunctions:GuiRenderUtils.kt$GuiRenderUtils + TooManyFunctions:HypixelCommands.kt$HypixelCommands + TooManyFunctions:InventoryUtils.kt$InventoryUtils + TooManyFunctions:LocationUtils.kt$LocationUtils + TooManyFunctions:LorenzUtils.kt$LorenzUtils + TooManyFunctions:LorenzVec.kt$LorenzVec + TooManyFunctions:MobFinder.kt$MobFinder + TooManyFunctions:NumberUtil.kt$NumberUtil + TooManyFunctions:RegexUtils.kt$RegexUtils + TooManyFunctions:RenderUtils.kt$RenderUtils + TooManyFunctions:Renderable.kt$Renderable$Companion + TooManyFunctions:ScoreboardElements.kt$at.hannibal2.skyhanni.features.gui.customscoreboard.ScoreboardElements.kt + TooManyFunctions:ScoreboardEvent.kt$at.hannibal2.skyhanni.features.gui.customscoreboard.ScoreboardEvent.kt + TooManyFunctions:SkyBlockItemModifierUtils.kt$SkyBlockItemModifierUtils + TooManyFunctions:StringUtils.kt$StringUtils + UnsafeCallOnNullableType:BasketWaypoints.kt$BasketWaypoints$Basket.entries.minByOrNull { it.waypoint.distanceSqToPlayer() }!! + UnsafeCallOnNullableType:BasketWaypoints.kt$BasketWaypoints$notFoundBaskets.minByOrNull { it.waypoint.distanceSqToPlayer() }!! + UnsafeCallOnNullableType:BucketedItemTrackerData.kt$BucketedItemTrackerData$it.value[internalName]?.hidden!! + UnsafeCallOnNullableType:ChocolateFactoryDataLoader.kt$ChocolateFactoryDataLoader$upgradeCost!! + UnsafeCallOnNullableType:CollectionUtils.kt$CollectionUtils$this.merge(key, number, Double::plus)!! + UnsafeCallOnNullableType:CollectionUtils.kt$CollectionUtils$this.merge(key, number, Float::plus)!! + UnsafeCallOnNullableType:CollectionUtils.kt$CollectionUtils$this.merge(key, number, Int::plus)!! + UnsafeCallOnNullableType:CollectionUtils.kt$CollectionUtils$this.merge(key, number, Long::plus)!! + UnsafeCallOnNullableType:CombatUtils.kt$CombatUtils$a!! + UnsafeCallOnNullableType:CompactBestiaryChatMessage.kt$CompactBestiaryChatMessage$it.groups[1]!! + UnsafeCallOnNullableType:ConfigManager.kt$ConfigManager$file!! + UnsafeCallOnNullableType:CorpseTracker.kt$CorpseTracker$applicableKeys.first().key!! + UnsafeCallOnNullableType:CosmeticFollowingLine.kt$CosmeticFollowingLine$latestLocations[b]!! + UnsafeCallOnNullableType:CosmeticFollowingLine.kt$CosmeticFollowingLine$locations[b]!! + UnsafeCallOnNullableType:CropMoneyDisplay.kt$CropMoneyDisplay$cropNames[internalName]!! + UnsafeCallOnNullableType:DailyMiniBossHelper.kt$DailyMiniBossHelper$getByDisplayName(name)!! + UnsafeCallOnNullableType:DamageIndicatorManager.kt$DamageIndicatorManager$data.deathLocation!! + UnsafeCallOnNullableType:DefaultConfigFeatures.kt$DefaultConfigFeatures$resetSuggestionState[cat]!! + UnsafeCallOnNullableType:DefaultConfigOptionGui.kt$DefaultConfigOptionGui$resetSuggestionState[cat]!! + UnsafeCallOnNullableType:DicerRngDropTracker.kt$DicerRngDropTracker$event.toolItem!! + UnsafeCallOnNullableType:DiscordStatus.kt$ownerRegex.find(colorlessLine)!! + UnsafeCallOnNullableType:DungeonAPI.kt$DungeonAPI$dungeonFloor!! + UnsafeCallOnNullableType:EasterEggWaypoints.kt$EasterEggWaypoints$EasterEgg.entries.minByOrNull { it.waypoint.distanceSqToPlayer() }!! + UnsafeCallOnNullableType:EasterEggWaypoints.kt$EasterEggWaypoints$notFoundEggs.minByOrNull { it.waypoint.distanceSqToPlayer() }!! + UnsafeCallOnNullableType:EntityMovementData.kt$EntityMovementData$entityLocation[entity]!! + UnsafeCallOnNullableType:EntityOutlineRenderer.kt$EntityOutlineRenderer$entityRenderCache.noXrayCache!! + UnsafeCallOnNullableType:EntityOutlineRenderer.kt$EntityOutlineRenderer$entityRenderCache.xrayCache!! + UnsafeCallOnNullableType:EntityOutlineRenderer.kt$EntityOutlineRenderer$frameToCopy!! + UnsafeCallOnNullableType:EntityOutlineRenderer.kt$EntityOutlineRenderer$frameToPaste!! + UnsafeCallOnNullableType:EntityOutlineRenderer.kt$EntityOutlineRenderer$isAntialiasing!! + UnsafeCallOnNullableType:EntityOutlineRenderer.kt$EntityOutlineRenderer$isFastRender!! + UnsafeCallOnNullableType:EntityOutlineRenderer.kt$EntityOutlineRenderer$isShaders!! + UnsafeCallOnNullableType:FFGuideGUI.kt$FFGuideGUI$currentCrop!! + UnsafeCallOnNullableType:FarmingContestAPI.kt$FarmingContestAPI$contestCrop!! + UnsafeCallOnNullableType:FarmingContestAPI.kt$FarmingContestAPI$contests[bracket]!! + UnsafeCallOnNullableType:FarmingContestAPI.kt$FarmingContestAPI$currentCrop!! + UnsafeCallOnNullableType:FarmingWeightDisplay.kt$FarmingWeightDisplay$weightPerCrop[CropType.CACTUS]!! + UnsafeCallOnNullableType:FarmingWeightDisplay.kt$FarmingWeightDisplay$weightPerCrop[CropType.SUGAR_CANE]!! + UnsafeCallOnNullableType:FeatureToggleProcessor.kt$FeatureToggleProcessor$latestCategory!! + UnsafeCallOnNullableType:FeatureTogglesByDefaultAdapter.kt$FeatureTogglesByDefaultAdapter$gson!! + UnsafeCallOnNullableType:FishingProfitTracker.kt$FishingProfitTracker$itemCategories[currentCategory]!! + UnsafeCallOnNullableType:FishingProfitTracker.kt$FishingProfitTracker.Data$itemCategories["Trophy Fish"]!! + UnsafeCallOnNullableType:FortuneUpgrades.kt$FortuneUpgrades$nextTalisman.upgradeCost?.first!! + UnsafeCallOnNullableType:GardenComposterUpgradesData.kt$GardenComposterUpgradesData$ComposterUpgrade.getByName(name)!! + UnsafeCallOnNullableType:GardenCropMilestoneDisplay.kt$GardenCropMilestoneDisplay$cultivatingData[crop]!! + UnsafeCallOnNullableType:GardenCropMilestonesCommunityFix.kt$GardenCropMilestonesCommunityFix$map[crop]!! + UnsafeCallOnNullableType:GardenPlotIcon.kt$GardenPlotIcon$originalStack[index]!! + UnsafeCallOnNullableType:GhostCounter.kt$GhostCounter$storage?.totalMF!! + UnsafeCallOnNullableType:Graph.kt$Graph.Companion$position!! + UnsafeCallOnNullableType:Graph.kt$distances.distances[end]!! + UnsafeCallOnNullableType:GriffinBurrowHelper.kt$GriffinBurrowHelper$particleBurrows[targetLocation]!! + UnsafeCallOnNullableType:HoppityCallWarning.kt$HoppityCallWarning$acceptUUID!! + UnsafeCallOnNullableType:IslandGraphs.kt$IslandGraphs$currentTarget!! + UnsafeCallOnNullableType:ItemBlink.kt$ItemBlink$offsets[item]!! + UnsafeCallOnNullableType:ItemPickupLog.kt$ItemPickupLog$listToCheckAgainst[key]!! + UnsafeCallOnNullableType:ItemPickupLog.kt$ItemPickupLog$listToCheckAgainst[key]?.second!! + UnsafeCallOnNullableType:ItemStackTypeAdapterFactory.kt$ItemStackTypeAdapterFactory$gson!! + UnsafeCallOnNullableType:ItemUtils.kt$ItemUtils$itemAmountCache[input]!! + UnsafeCallOnNullableType:JacobContestTimeNeeded.kt$JacobContestTimeNeeded$map[crop]!! + UnsafeCallOnNullableType:KSerializable.kt$KotlinTypeAdapterFactory$kotlinClass.memberProperties.find { it.name == param.name }!! + UnsafeCallOnNullableType:KSerializable.kt$KotlinTypeAdapterFactory$param.name!! + UnsafeCallOnNullableType:LorenzEvent.kt$LorenzEvent$this::class.simpleName!! + UnsafeCallOnNullableType:MinionFeatures.kt$MinionFeatures$newMinion!! + UnsafeCallOnNullableType:MobFinder.kt$MobFinder$floor6GiantsSeparateDelay[uuid]!! + UnsafeCallOnNullableType:NavigationHelper.kt$NavigationHelper$distances[node]!! + UnsafeCallOnNullableType:NumberUtil.kt$NumberUtil$romanSymbols[this]!! + UnsafeCallOnNullableType:PositionList.kt$PositionList$configLink!! + UnsafeCallOnNullableType:ReminderManager.kt$ReminderManager$storage[args.drop(1).first()]!! + UnsafeCallOnNullableType:ReminderManager.kt$ReminderManager$storage[args.first()]!! + UnsafeCallOnNullableType:RenderEntityOutlineEvent.kt$RenderEntityOutlineEvent$entitiesToChooseFrom!! + UnsafeCallOnNullableType:RenderEntityOutlineEvent.kt$RenderEntityOutlineEvent$entitiesToOutline!! + UnsafeCallOnNullableType:RenderGlobalHook.kt$RenderGlobalHook$camera!! + UnsafeCallOnNullableType:RenderLivingEntityHelper.kt$RenderLivingEntityHelper$entityColorCondition[entity]!! + UnsafeCallOnNullableType:RenderLivingEntityHelper.kt$RenderLivingEntityHelper$entityColorMap[entity]!! + UnsafeCallOnNullableType:RenderUtils.kt$RenderUtils$it.name!! + UnsafeCallOnNullableType:RepoManager.kt$RepoManager$latestRepoCommit!! + UnsafeCallOnNullableType:RepoUtils.kt$RepoUtils$file!! + UnsafeCallOnNullableType:SackAPI.kt$SackAPI$match.groups[1]!! + UnsafeCallOnNullableType:SackAPI.kt$SackAPI$match.groups[2]!! + UnsafeCallOnNullableType:SackAPI.kt$SackAPI$match.groups[3]!! + UnsafeCallOnNullableType:SackAPI.kt$SackAPI$oldData!! + UnsafeCallOnNullableType:SimpleCommand.kt$SimpleCommand$tabRunnable!! + UnsafeCallOnNullableType:SkyHanniBucketedItemTracker.kt$SkyHanniBucketedItemTracker$it.get(DisplayMode.SESSION).getItemsProp()[internalName]!! + UnsafeCallOnNullableType:SkyHanniBucketedItemTracker.kt$SkyHanniBucketedItemTracker$it.get(DisplayMode.TOTAL).getItemsProp()[internalName]!! + UnsafeCallOnNullableType:SkyHanniMod.kt$SkyHanniMod.Companion$Loader.instance().indexedModList[MODID]!! + UnsafeCallOnNullableType:SoopyGuessBurrow.kt$SoopyGuessBurrow$distance!! + UnsafeCallOnNullableType:SoopyGuessBurrow.kt$SoopyGuessBurrow$distance2!! + UnsafeCallOnNullableType:SoopyGuessBurrow.kt$SoopyGuessBurrow$firstParticlePoint?.distance(pos)!! + UnsafeCallOnNullableType:SoopyGuessBurrow.kt$SoopyGuessBurrow$lastParticlePoint2!! + UnsafeCallOnNullableType:SoopyGuessBurrow.kt$SoopyGuessBurrow$lastParticlePoint2?.distance(particlePoint!!)!! + UnsafeCallOnNullableType:SoopyGuessBurrow.kt$SoopyGuessBurrow$particlePoint!! + UnsafeCallOnNullableType:SoopyGuessBurrow.kt$SoopyGuessBurrow$particlePoint?.subtract(lastParticlePoint2!!)!! + UnsafeCallOnNullableType:SummoningSoulsName.kt$SummoningSoulsName$mobsName.getOrNull(nearestMob)!! + UnsafeCallOnNullableType:SuperpairsClicksAlert.kt$SuperpairsClicksAlert$match.groups[1]!! + UnsafeCallOnNullableType:TiaRelayWaypoints.kt$TiaRelayWaypoints$waypointName!! + UnsafeCallOnNullableType:Translator.kt$Translator$messageContentRegex.find(message)!! + UnsafeCallOnNullableType:TrevorFeatures.kt$TrevorFeatures$TrevorSolver.currentMob!! + UnsafeCallOnNullableType:TrevorSolver.kt$TrevorSolver$currentMob!! + UnsafeCallOnNullableType:TunnelsMaps.kt$TunnelsMaps$campfire.name!! + UnsafeCallOnNullableType:UpdateManager.kt$UpdateManager$potentialUpdate!! + UnsafeCallOnNullableType:VisitorRewardWarning.kt$VisitorRewardWarning$visitor.totalPrice!! + UnsafeCallOnNullableType:VisitorRewardWarning.kt$VisitorRewardWarning$visitor.totalReward!! + UnusedParameter:SkyHanniDebugsAndTests.kt$SkyHanniDebugsAndTests$args: Array<String> + UseIsNullOrEmpty:ItemUtils.kt$ItemUtils$name == null || name.isEmpty() + UseOrEmpty:SkyHanniDebugsAndTests.kt$SkyHanniDebugsAndTests$event.originalOre?.let { "$it " } ?: "" + VarCouldBeVal:AdvancedPlayerList.kt$AdvancedPlayerList$private var randomOrderCache = TimeLimitedCache<String, Int>(20.minutes) + VarCouldBeVal:BestiaryData.kt$BestiaryData$private var indexes = listOf( 10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43 ) + VarCouldBeVal:BucketedItemTrackerData.kt$BucketedItemTrackerData$@Expose private var bucketedItems: MutableMap<E, MutableMap<NEUInternalName, TrackedItem>> = HashMap() + VarCouldBeVal:CarnivalZombieShootout.kt$CarnivalZombieShootout$private var lastUpdate = Updates(SimpleTimeMark.farPast(), SimpleTimeMark.farPast()) + VarCouldBeVal:ChocolateFactoryStrayTracker.kt$ChocolateFactoryStrayTracker$private var claimedStraysSlots = mutableListOf<Int>() + VarCouldBeVal:CompactBestiaryChatMessage.kt$CompactBestiaryChatMessage$private var bestiaryDescription = mutableListOf<String>() + VarCouldBeVal:CompactExperimentRewards.kt$CompactExperimentRewards$private var gainedRewards = mutableListOf<String>() + VarCouldBeVal:CraftRoomHolographicMob.kt$CraftRoomHolographicMob$private var entityToHolographicEntity = mapOf( EntityZombie::class.java to HolographicEntities.zombie, EntitySlime::class.java to HolographicEntities.slime, EntityCaveSpider::class.java to HolographicEntities.caveSpider, ) + VarCouldBeVal:CustomWardrobe.kt$CustomWardrobe$private var guiName = "Custom Wardrobe" + VarCouldBeVal:Enchant.kt$Enchant$@Expose private var goodLevel = 0 + VarCouldBeVal:Enchant.kt$Enchant$@Expose private var maxLevel = 0 + VarCouldBeVal:Enchant.kt$Enchant.Stacking$@Expose @Suppress("unused") private var statLabel: String? = null + VarCouldBeVal:Enchant.kt$Enchant.Stacking$@Expose private var nbtNum: String? = null + VarCouldBeVal:Enchant.kt$Enchant.Stacking$@Expose private var stackLevel: TreeSet<Int>? = null + VarCouldBeVal:ErrorManager.kt$ErrorManager$private var cache = TimeLimitedSet<Pair<String, Int>>(10.minutes) + VarCouldBeVal:EstimatedItemValueCalculator.kt$EstimatedItemValueCalculator$var comboPrice = combo.asInternalName().getPriceOrNull() + VarCouldBeVal:EstimatedItemValueCalculator.kt$EstimatedItemValueCalculator$var internalName = removeKuudraArmorPrefix(stack.getInternalName().asString().removePrefix("VANQUISHED_")) + VarCouldBeVal:EstimatedItemValueCalculator.kt$EstimatedItemValueCalculator$var nameColor = if (!useless) "§9" else "§7" + VarCouldBeVal:ExperimentsProfitTracker.kt$ExperimentsProfitTracker$private var currentBottlesInInventory = mutableMapOf<NEUInternalName, Int>() + VarCouldBeVal:ExperimentsProfitTracker.kt$ExperimentsProfitTracker$private var lastBottlesInInventory = mutableMapOf<NEUInternalName, Int>() + VarCouldBeVal:ExperimentsProfitTracker.kt$ExperimentsProfitTracker$private var lastSplashes = mutableListOf<ItemStack>() + VarCouldBeVal:FarmingWeightDisplay.kt$FarmingWeightDisplay$private var nextPlayers = mutableListOf<UpcomingLeaderboardPlayer>() + VarCouldBeVal:FlareDisplay.kt$FlareDisplay$private var flares = mutableListOf<Flare>() + VarCouldBeVal:FontRendererHook.kt$FontRendererHook$private var CHROMA_COLOR: Int = -0x1 + VarCouldBeVal:FontRendererHook.kt$FontRendererHook$private var CHROMA_COLOR_SHADOW: Int = -0xAAAAAB + VarCouldBeVal:GardenPlotIcon.kt$GardenPlotIcon$private var cachedStack = mutableMapOf<Int, ItemStack>() + VarCouldBeVal:GardenPlotIcon.kt$GardenPlotIcon$private var originalStack = mutableMapOf<Int, ItemStack>() + VarCouldBeVal:GardenPlotMenuHighlighting.kt$GardenPlotMenuHighlighting$private var highlightedPlots = mutableMapOf<GardenPlotAPI.Plot, PlotStatusType>() + VarCouldBeVal:GardenVisitorColorNames.kt$GardenVisitorColorNames$private var visitorColors = mutableMapOf<String, String>() // name -> color code + VarCouldBeVal:GhostData.kt$GhostData$private var session = mutableMapOf( Option.KILLS to 0.0, Option.SORROWCOUNT to 0.0, Option.VOLTACOUNT to 0.0, Option.PLASMACOUNT to 0.0, Option.GHOSTLYBOOTS to 0.0, Option.BAGOFCASH to 0.0, Option.TOTALDROPS to 0.0, Option.SCAVENGERCOINS to 0.0, Option.MAXKILLCOMBO to 0.0, Option.SKILLXPGAINED to 0.0 ) + VarCouldBeVal:GraphEditor.kt$GraphEditor$var vector = LocationUtils.calculatePlayerFacingDirection() + VarCouldBeVal:HoppityCollectionStats.kt$HoppityCollectionStats$private var highlightMap = mutableMapOf<String, LorenzColor>() + VarCouldBeVal:HoppityEggLocations.kt$HoppityEggLocations$// TODO add gui/command to show total data/missing islands private var collectedEggStorage: MutableMap<IslandType, MutableSet<LorenzVec>> get() = ChocolateFactoryAPI.profileStorage?.collectedEggLocations ?: mutableMapOf() set(value) { ChocolateFactoryAPI.profileStorage?.collectedEggLocations = value } + VarCouldBeVal:HoppityNpc.kt$HoppityNpc$private var slotsToHighlight = mutableSetOf<Int>() + VarCouldBeVal:IslandAreas.kt$IslandAreas$var suffix = "" + VarCouldBeVal:ItemPickupLog.kt$ItemPickupLog$private var itemList = mutableMapOf<Int, Pair<ItemStack, Int>>() + VarCouldBeVal:ItemPickupLog.kt$ItemPickupLog$private var itemsAddedToInventory = mutableMapOf<Int, PickupEntry>() + VarCouldBeVal:ItemPickupLog.kt$ItemPickupLog$private var itemsRemovedFromInventory = mutableMapOf<Int, PickupEntry>() + VarCouldBeVal:LocationUtils.kt$LocationUtils$var yaw = LocationUtils.calculatePlayerYaw() + 180 + VarCouldBeVal:LorenzLogger.kt$LorenzLogger.Companion$private var LOG_DIRECTORY = File("config/skyhanni/logs") + VarCouldBeVal:MobDetection.kt$MobDetection$private var shouldClear: AtomicBoolean = AtomicBoolean(false) + VarCouldBeVal:MobFinder.kt$MobFinder$private var floor2summonsDiedOnce = mutableListOf<EntityOtherPlayerMP>() + VarCouldBeVal:MobFinder.kt$MobFinder$private var floor6GiantsSeparateDelay = mutableMapOf<UUID, Pair<Long, BossType>>() + VarCouldBeVal:MobFinder.kt$MobFinder$private var guardians = mutableListOf<EntityGuardian>() + VarCouldBeVal:NeuReforgeJson.kt$NeuReforgeJson$private lateinit var itemTypeField: Pair<String, List<NEUInternalName>> + VarCouldBeVal:PowerStoneGuideFeatures.kt$PowerStoneGuideFeatures$private var missing = mutableMapOf<Int, NEUInternalName>() + VarCouldBeVal:PunchcardHighlight.kt$PunchcardHighlight$private var playerQueue = mutableListOf<String>() + VarCouldBeVal:QuiverWarning.kt$QuiverWarning$private var arrowsInInstance = mutableSetOf<ArrowType>() + VarCouldBeVal:ReforgeHelper.kt$ReforgeHelper$private var waitForChat = AtomicBoolean(false) + VarCouldBeVal:ReminderManager.kt$ReminderManager$private var listPage = 1 + VarCouldBeVal:RepoPatternGui.kt$RepoPatternGui$private var searchCache = ObservableList(mutableListOf<RepoPatternInfo>()) + VarCouldBeVal:RepoPatternManager.kt$RepoPatternManager$/** * Map containing all keys and their repo patterns. Used for filling in new regexes after an update, and for * checking duplicate registrations. */ private var usedKeys: NavigableMap<String, CommonPatternInfo<*, *>> = TreeMap() + VarCouldBeVal:RepoPatternManager.kt$RepoPatternManager$/** * Map containing the exclusive owner of a regex key */ private var exclusivity: MutableMap<String, RepoPatternKeyOwner> = mutableMapOf() + VarCouldBeVal:SeaCreatureFeatures.kt$SeaCreatureFeatures$private var entityIds = TimeLimitedSet<Int>(6.minutes) + VarCouldBeVal:SeaCreatureFeatures.kt$SeaCreatureFeatures$private var rareSeaCreatures = TimeLimitedSet<Mob>(6.minutes) + VarCouldBeVal:ShowFishingItemName.kt$ShowFishingItemName$private var itemsOnGround = TimeLimitedCache<EntityItem, String>(750.milliseconds) + VarCouldBeVal:SkyblockGuideHighlightFeature.kt$SkyblockGuideHighlightFeature.Companion$private var missing = mutableSetOf<Int>() + VarCouldBeVal:SlayerItemsOnGround.kt$SlayerItemsOnGround$private var itemsOnGround = TimeLimitedCache<EntityItem, String>(2.seconds) + VarCouldBeVal:SoopyGuessBurrow.kt$SoopyGuessBurrow$private var dingSlope = mutableListOf<Float>() + VarCouldBeVal:SoopyGuessBurrow.kt$SoopyGuessBurrow$private var locations = mutableListOf<LorenzVec>() + VarCouldBeVal:SuperpairExperimentInformationDisplay.kt$SuperpairExperimentInformationDisplay$// TODO remove string. use enum instead! maybe even create new data type instead of map of pairs private var found = mutableMapOf<Pair<Item?, ItemPair?>, String>() + VarCouldBeVal:SuperpairExperimentInformationDisplay.kt$SuperpairExperimentInformationDisplay$private var lastClicked = mutableListOf<Pair<Int, Int>>() + VarCouldBeVal:SuperpairExperimentInformationDisplay.kt$SuperpairExperimentInformationDisplay$private var toCheck = mutableListOf<Pair<Int, Int>>() + VarCouldBeVal:SuperpairExperimentInformationDisplay.kt$SuperpairExperimentInformationDisplay$private var uncoveredItems = mutableListOf<Pair<Int, String>>() + VarCouldBeVal:TiaRelayHelper.kt$TiaRelayHelper$private var resultDisplay = mutableMapOf<Int, Int>() + VarCouldBeVal:TiaRelayHelper.kt$TiaRelayHelper$private var sounds = mutableMapOf<Int, Sound>() + VarCouldBeVal:Translator.kt$Translator$var lang = config.languageCode.get() + VarCouldBeVal:TrevorFeatures.kt$TrevorFeatures$private var backupTrapperID: Int = 17 + VarCouldBeVal:TrevorFeatures.kt$TrevorFeatures$private var trapperID: Int = 56 + VarCouldBeVal:TrophyFishDisplay.kt$TrophyFishDisplay$private var recentlyDroppedTrophies = TimeLimitedCache<NEUInternalName, TrophyRarity>(5.seconds) + VarCouldBeVal:UserLuckBreakdown.kt$UserLuckBreakdown$private var fillerID = "STAINED_GLASS_PANE".asInternalName() + VarCouldBeVal:UserLuckBreakdown.kt$UserLuckBreakdown$private var limboID = "ENDER_PEARL".asInternalName() + VarCouldBeVal:UserLuckBreakdown.kt$UserLuckBreakdown$private var skillOverflowLuck = mutableMapOf<SkillType, Int>() + VarCouldBeVal:UserLuckBreakdown.kt$UserLuckBreakdown$private var skillsID = "DIAMOND_SWORD".asInternalName() + + diff --git a/detekt/build.gradle.kts b/detekt/build.gradle.kts new file mode 100644 index 000000000000..ce0de9ace8ce --- /dev/null +++ b/detekt/build.gradle.kts @@ -0,0 +1,13 @@ +plugins { + kotlin("jvm") + id("com.google.devtools.ksp") +} + +dependencies { + implementation("io.gitlab.arturbosch.detekt:detekt-api:1.23.7") + ksp(libs.autoservice.ksp) + implementation(libs.autoservice.annotations) + implementation("io.gitlab.arturbosch.detekt:detekt-formatting:1.23.7") + testImplementation("io.kotest:kotest-assertions-core:5.9.1") + testImplementation("io.gitlab.arturbosch.detekt:detekt-test:1.23.7") +} diff --git a/detekt/detekt.yml b/detekt/detekt.yml new file mode 100644 index 000000000000..1b7d3ab05ff8 --- /dev/null +++ b/detekt/detekt.yml @@ -0,0 +1,127 @@ + +config: + validation: true + +GrammarRules: + active: true + AvoidColour: # custom rule to prefer color to colour + active: true + +FormattingRules: + active: true + CustomCommentSpacing: + active: true + + +style: + MagicNumber: # I, Linnea Gräf, of sound mind and body, disagree with disabling this rule + active: false + UnusedParameter: + active: true + ignoreAnnotated: + - 'SubscribeEvent' + - 'HandleEvent' + - 'Mod.EventHandler' + ReturnCount: + active: true + max: 5 + excludeGuardClauses: true + ignoreAnnotated: + - 'SubscribeEvent' + - 'HandleEvent' + - 'Mod.EventHandler' + MaxLineLength: + active: true + maxLineLength: 140 + excludeCommentStatements: true + LoopWithTooManyJumpStatements: + active: true + maxJumpCount: 3 + UnnecessaryAbstractClass: # gets horrendously messed up with Event classes + active: false + UnusedPrivateMember: # gets tripped up by API methods + active: false + UnusedPrivateProperty: # loops that don't use their iterator + active: true + allowedNames: "^(unused|_)$" + UseCheckOrError: + active: false + ForbiddenComment: # every TODO gets flagged + active: false + DestructuringDeclarationWithTooManyEntries: # too aggressive + active: true + maxDestructuringEntries: 5 + +formatting: + MaximumLineLength: # ktlint - handled by detekt + active: false + MultiLineIfElse: + active: false + ArgumentListWrapping: # ktlint - way too aggressive + active: false + NoBlankLineBeforeRbrace: # pedantic + active: false + NoConsecutiveBlankLines: # pedantic + active: false + NoEmptyFirstLineInMethodBlock: # pedantic + active: false + ParameterListWrapping: # pedantic, can be useful in compact code + active: false + CommentSpacing: # handled by custom rule + active: false + SpacingBetweenDeclarationsWithAnnotations: # nah + active: false + SpacingBetweenDeclarationsWithComments: # also nah + active: false + +complexity: + CyclomaticComplexMethod: # default threshold of 15, caught almost every complex method + active: true + threshold: 25 + ignoreAnnotated: + - 'SubscribeEvent' + - 'HandleEvent' + - 'Mod.EventHandler' + LongParameterList: # too aggressive, classes can need a lot of params + active: false + NestedBlockDepth: # too aggressive + active: false + TooManyFunctions: # ktlint - also way too aggressive by default (11 on all file types) + active: true + thresholdInFiles: 15 + thresholdInClasses: 20 + thresholdInInterfaces: 20 + thresholdInObjects: 20 + thresholdInEnums: 11 + ignoreAnnotated: + - 'SkyHanniModule' + ComplexCondition: # aggressive by default, at a complexity of 4 + active: true + threshold: 6 + LongMethod: # default max length of 60, caught way too much + active: true + threshold: 100 + ignoreAnnotated: + - 'SubscribeEvent' + - 'HandleEvent' + - 'Mod.EventHandler' + +exceptions: + SwallowedException: # there are valid reasons to do this + active: false + ThrowingExceptionsWithoutMessageOrCause: # again, valid reasons + active: false + TooGenericExceptionCaught: # sometimes you just need to catch Exception + active: false + TooGenericExceptionThrown: # we don't have our own custom exceptions + active: false + +naming: + ConstructorParameterNaming: # pedantic + active: false + +potential-bugs: + DoubleMutabilityForCollection: # went crazy about all the mutable collections + active: false + HasPlatformType: # false positives on config get() methods + active: false diff --git a/detekt/src/main/kotlin/formatting/CustomCommentSpacing.kt b/detekt/src/main/kotlin/formatting/CustomCommentSpacing.kt new file mode 100644 index 000000000000..aaf7896cfd17 --- /dev/null +++ b/detekt/src/main/kotlin/formatting/CustomCommentSpacing.kt @@ -0,0 +1,51 @@ +package at.hannibal2.skyhanni.detektrules.formatting + +import io.gitlab.arturbosch.detekt.api.CodeSmell +import io.gitlab.arturbosch.detekt.api.Config +import io.gitlab.arturbosch.detekt.api.Debt +import io.gitlab.arturbosch.detekt.api.Entity +import io.gitlab.arturbosch.detekt.api.Issue +import io.gitlab.arturbosch.detekt.api.Rule +import io.gitlab.arturbosch.detekt.api.Severity +import org.jetbrains.kotlin.com.intellij.psi.PsiComment + +class CustomCommentSpacing(config: Config) : Rule(config) { + override val issue = Issue( + "CustomCommentSpacing", + Severity.Style, + "Enforces custom spacing rules for comments.", + Debt.FIVE_MINS + ) + + private val allowedPatterns = listOf( + "#if", + "#else", + "#elseif", + "#endif", + "$$" + ) + + override fun visitComment(comment: PsiComment) { + if (allowedPatterns.any { comment.text.contains(it) }) { + return + } + + /** + * REGEX-TEST: // Test comment + * REGEX-TEST: /* Test comment */ + */ + val commentRegex = Regex("""^(?:\/{2}|\/\*)(?:\s.*|$)""", RegexOption.DOT_MATCHES_ALL) + if (!commentRegex.matches(comment.text)) { + report( + CodeSmell( + issue, + Entity.from(comment), + "Expected space after opening comment." + ) + ) + } + + // Fallback to super (ostensibly a no-check) + super.visitComment(comment) + } +} diff --git a/detekt/src/main/kotlin/formatting/FormattingRuleSetProvider.kt b/detekt/src/main/kotlin/formatting/FormattingRuleSetProvider.kt new file mode 100644 index 000000000000..a0a969bcf503 --- /dev/null +++ b/detekt/src/main/kotlin/formatting/FormattingRuleSetProvider.kt @@ -0,0 +1,17 @@ +package at.hannibal2.skyhanni.detektrules.formatting + +import com.google.auto.service.AutoService +import io.gitlab.arturbosch.detekt.api.Config +import io.gitlab.arturbosch.detekt.api.RuleSet +import io.gitlab.arturbosch.detekt.api.RuleSetProvider + +@AutoService(RuleSetProvider::class) +class FormattingRuleSetProvider : RuleSetProvider { + override val ruleSetId: String = "FormattingRules" + + override fun instance(config: Config): RuleSet { + return RuleSet(ruleSetId, listOf( + CustomCommentSpacing(config) + )) + } +} diff --git a/detekt/src/main/kotlin/grammar/AvoidColour.kt b/detekt/src/main/kotlin/grammar/AvoidColour.kt new file mode 100644 index 000000000000..754148d36f31 --- /dev/null +++ b/detekt/src/main/kotlin/grammar/AvoidColour.kt @@ -0,0 +1,38 @@ +package at.hannibal2.skyhanni.detektrules.grammar + +import io.gitlab.arturbosch.detekt.api.CodeSmell +import io.gitlab.arturbosch.detekt.api.Config +import io.gitlab.arturbosch.detekt.api.Debt +import io.gitlab.arturbosch.detekt.api.Entity +import io.gitlab.arturbosch.detekt.api.Issue +import io.gitlab.arturbosch.detekt.api.Rule +import io.gitlab.arturbosch.detekt.api.Severity +import org.jetbrains.kotlin.psi.KtStringTemplateExpression + +/** + * This rule reports all usages of the word "colour" in the codebase, + * preferring the 'American' spelling "color" - this will ignore any + * type annotations, i.e., `@ConfigEditorColour` will not be reported. + */ +class AvoidColour(config: Config) : Rule(config) { + override val issue = Issue( + "AvoidColour", + Severity.Style, + "Avoid using the word 'colour' in code, prefer 'color' instead.", + Debt.FIVE_MINS + ) + + override fun visitStringTemplateExpression(expression: KtStringTemplateExpression) { + val text = expression.text // Be aware .getText() returns the entire span of this template, including variable names contained within. This should be rare enough of a problem for us to not care about it. + if (text.contains("colour", ignoreCase = true)) { + report( + CodeSmell( + issue, + Entity.from(expression), + "Avoid using the word 'colour' in code, prefer 'color' instead." + ) + ) + } + super.visitStringTemplateExpression(expression) + } +} diff --git a/detekt/src/main/kotlin/grammar/GrammarRuleSetProvider.kt b/detekt/src/main/kotlin/grammar/GrammarRuleSetProvider.kt new file mode 100644 index 000000000000..957b20147cee --- /dev/null +++ b/detekt/src/main/kotlin/grammar/GrammarRuleSetProvider.kt @@ -0,0 +1,17 @@ +package at.hannibal2.skyhanni.detektrules.grammar + +import com.google.auto.service.AutoService +import io.gitlab.arturbosch.detekt.api.Config +import io.gitlab.arturbosch.detekt.api.RuleSet +import io.gitlab.arturbosch.detekt.api.RuleSetProvider + +@AutoService(RuleSetProvider::class) +class GrammarRuleSetProvider : RuleSetProvider { + override val ruleSetId: String = "GrammarRules" + + override fun instance(config: Config): RuleSet { + return RuleSet(ruleSetId, listOf( + AvoidColour(config) + )) + } +} diff --git a/detekt/src/main/kotlin/root.kt b/detekt/src/main/kotlin/root.kt new file mode 100644 index 000000000000..9b95a398f30a --- /dev/null +++ b/detekt/src/main/kotlin/root.kt @@ -0,0 +1 @@ +package at.hannibal2.skyhanni.detektrules diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 634e49064ec5..926ed02850e8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,3 +10,6 @@ libautoupdate = { module = "moe.nea:libautoupdate", version.ref = "libautoupdate headlessLwjgl = { module = "com.github.3arthqu4ke.HeadlessMc:headlessmc-lwjgl", version.ref = "headlessLwjgl" } jbAnnotations = { module = "org.jetbrains:annotations", version.ref = "jbAnnotations" } hotswapagentforge = { module = "moe.nea:hotswapagent-forge", version = "1.0.1" } +autoservice_ksp = {module="dev.zacsweers.autoservice:auto-service-ksp",version="1.1.0"} +autoservice_annotations = {module="com.google.auto.service:auto-service-annotations",version="1.1.1"} + diff --git a/root.gradle.kts b/root.gradle.kts index 5baae39e2ba7..01039394234d 100644 --- a/root.gradle.kts +++ b/root.gradle.kts @@ -9,11 +9,32 @@ plugins { kotlin("plugin.power-assert") version "2.0.0" apply false id("com.google.devtools.ksp") version "2.0.0-1.0.24" apply false id("dev.architectury.architectury-pack200") version "0.1.3" + id("io.gitlab.arturbosch.detekt") version "1.23.7" apply false } allprojects { group = "at.hannibal2.skyhanni" version = "0.27.Beta.12" + repositories { + mavenCentral() + mavenLocal() + maven("https://maven.minecraftforge.net") { + metadataSources { + artifact() // We love missing POMs + } + } + maven("https://repo.spongepowered.org/maven/") // mixin + maven("https://pkgs.dev.azure.com/djtheredstoner/DevAuth/_packaging/public/maven/v1") // DevAuth + maven("https://jitpack.io") { // NotEnoughUpdates (compiled against) + content { + includeGroupByRegex("(com|io)\\.github\\..*") + } + } + maven("https://repo.nea.moe/releases") // libautoupdate + maven("https://maven.notenoughupdates.org/releases") // NotEnoughUpdates (dev env) + maven("https://repo.hypixel.net/repository/Hypixel/") // mod-api + maven("https://maven.teamresourceful.com/repository/thatgravyboat/") // DiscordIPC + } } preprocess { diff --git a/settings.gradle.kts b/settings.gradle.kts index adee2acba161..987b70013456 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -38,6 +38,7 @@ plugins { MultiVersionStage.initFrom(file(".gradle/private.properties")) include("annotation-processors") +include("detekt") rootProject.name = "SkyHanni" rootProject.buildFileName = "root.gradle.kts" diff --git a/sharedVariables/src/MinecraftVersion.kt b/sharedVariables/src/MinecraftVersion.kt index 7384c8fbd49b..796cc0d709a6 100644 --- a/sharedVariables/src/MinecraftVersion.kt +++ b/sharedVariables/src/MinecraftVersion.kt @@ -16,6 +16,9 @@ enum class MinecraftVersion( val javaLanguageVersion = JavaLanguageVersion.of(javaVersion) + val formattedJavaLanguageVersion: String + get() = if (javaVersion <= 8) "1.$javaVersion" else javaVersion.toString() + val versionNumber = run { val parts = versionName.split('.').mapTo(mutableListOf()) { it.toInt() } if (parts.size == 2) parts.add(0) diff --git a/src/main/java/at/hannibal2/skyhanni/events/RenderTooltipEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/RenderItemTooltipEvent.kt similarity index 97% rename from src/main/java/at/hannibal2/skyhanni/events/RenderTooltipEvent.kt rename to src/main/java/at/hannibal2/skyhanni/events/RenderItemTooltipEvent.kt index ff9e6b448973..f8cb98802b1c 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/RenderTooltipEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/RenderItemTooltipEvent.kt @@ -2,4 +2,4 @@ package at.hannibal2.skyhanni.events import net.minecraft.item.ItemStack -class RenderItemTooltipEvent(val stack: ItemStack) : LorenzEvent() \ No newline at end of file +class RenderItemTooltipEvent(val stack: ItemStack) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/SuperpairExperimentInformationDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/SuperpairExperimentInformationDisplay.kt index 86d7fca50ad9..b1ee566598b3 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/SuperpairExperimentInformationDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/SuperpairExperimentInformationDisplay.kt @@ -31,7 +31,7 @@ object SuperpairExperimentInformationDisplay { data class Item(val index: Int, val name: String) data class ItemPair(val first: Item, val second: Item) - // TODO remove string. use enum instead! maybe even create new data type instaed of map of pairs + // TODO remove string. use enum instead! maybe even create new data type instead of map of pairs private var found = mutableMapOf, String>() private var toCheck = mutableListOf>() diff --git a/versions/1.8.9/detekt/baseline.xml b/versions/1.8.9/detekt/baseline.xml new file mode 100644 index 000000000000..ac35c2f6d1a8 --- /dev/null +++ b/versions/1.8.9/detekt/baseline.xml @@ -0,0 +1,339 @@ + + + + + AnnotationOnSeparateLine:GraphEditor.kt$GraphEditor$@Suppress("MapGetWithNotNullAssertionOperator") node.neighbours.map { GraphingEdge( translation[node]!!, translation[it.key]!!, ) } + AnnotationOnSeparateLine:GraphEditor.kt$GraphEditor$@Suppress("MapGetWithNotNullAssertionOperator") nodes[indexedTable[otherNode.id]!!] + ArrayPrimitive:CropMoneyDisplay.kt$CropMoneyDisplay$Array<Double> + ArrayPrimitive:CropMoneyDisplay.kt$CropMoneyDisplay$arrayOf(npcPrice) + ArrayPrimitive:CropMoneyDisplay.kt$CropMoneyDisplay$arrayOf(sellOffer) + ArrayPrimitive:LorenzVec.kt$Array<Double> + ArrayPrimitive:LorenzVec.kt$LorenzVec$Array<Double> + ArrayPrimitive:LorenzVec.kt$LorenzVec$Array<Float> + ArrayPrimitive:LorenzVec.kt$LorenzVec$arrayOf(x, y, z) + ArrayPrimitive:LorenzVec.kt$LorenzVec$arrayOf(x.toFloat(), y.toFloat(), z.toFloat()) + CyclomaticComplexMethod:AdvancedPlayerList.kt$AdvancedPlayerList$fun newSorting(original: List<String>): List<String> + CyclomaticComplexMethod:CropMoneyDisplay.kt$CropMoneyDisplay$private fun calculateMoneyPerHour(debugList: MutableList<List<Any>>): Map<NEUInternalName, Array<Double>> + CyclomaticComplexMethod:CropMoneyDisplay.kt$CropMoneyDisplay$private fun drawDisplay(): List<List<Any>> + CyclomaticComplexMethod:DamageIndicatorManager.kt$DamageIndicatorManager$private fun checkThorn(realHealth: Long, realMaxHealth: Long): String? + CyclomaticComplexMethod:EstimatedItemValueCalculator.kt$EstimatedItemValueCalculator$private fun addEnchantments(stack: ItemStack, list: MutableList<String>): Double + CyclomaticComplexMethod:GardenBestCropTime.kt$GardenBestCropTime$fun drawBestDisplay(currentCrop: CropType?): List<List<Any>> + CyclomaticComplexMethod:GardenCropMilestoneDisplay.kt$GardenCropMilestoneDisplay$private fun drawProgressDisplay(crop: CropType): List<Renderable> + CyclomaticComplexMethod:GardenVisitorFeatures.kt$GardenVisitorFeatures$private fun readToolTip(visitor: VisitorAPI.Visitor, itemStack: ItemStack?, toolTip: MutableList<String>) + CyclomaticComplexMethod:GhostCounter.kt$GhostCounter$private fun drawDisplay() + CyclomaticComplexMethod:GraphEditor.kt$GraphEditor$private fun input() + CyclomaticComplexMethod:GraphEditorBugFinder.kt$GraphEditorBugFinder$private fun asyncTest() + CyclomaticComplexMethod:IslandAreas.kt$IslandAreas$private fun buildDisplay() + CyclomaticComplexMethod:ItemDisplayOverlayFeatures.kt$ItemDisplayOverlayFeatures$private fun getStackTip(item: ItemStack): String? + CyclomaticComplexMethod:ItemNameResolver.kt$ItemNameResolver$internal fun getInternalNameOrNull(itemName: String): NEUInternalName? + CyclomaticComplexMethod:MinecraftConsoleFilter.kt$MinecraftConsoleFilter$override fun filter(event: LogEvent?): Filter.Result + CyclomaticComplexMethod:OverviewPage.kt$OverviewPage$private fun getPage(): Pair<List<List<Renderable>>, List<Renderable>> + CyclomaticComplexMethod:PacketTest.kt$PacketTest$private fun Packet<*>.print() + CyclomaticComplexMethod:ParkourHelper.kt$ParkourHelper$fun render(event: LorenzRenderWorldEvent) + CyclomaticComplexMethod:Renderable.kt$Renderable.Companion$internal fun shouldAllowLink(debug: Boolean = false, bypassChecks: Boolean): Boolean + CyclomaticComplexMethod:SkillProgress.kt$SkillProgress$private fun drawDisplay() + CyclomaticComplexMethod:VampireSlayerFeatures.kt$VampireSlayerFeatures$private fun EntityOtherPlayerMP.process() + CyclomaticComplexMethod:VisualWordGui.kt$VisualWordGui$override fun drawScreen(unusedX: Int, unusedY: Int, partialTicks: Float) + DestructuringDeclarationWithTooManyEntries:SackDisplay.kt$SackDisplay$val (internalName, rough, flawed, fine, roughPrice, flawedPrice, finePrice) = gem + Filename:AreaChangeEvents.kt$at.hannibal2.skyhanni.events.skyblock.AreaChangeEvents.kt + InjectDispatcher:ClipboardUtils.kt$ClipboardUtils$IO + InjectDispatcher:GardenNextJacobContest.kt$GardenNextJacobContest$IO + InjectDispatcher:HypixelBazaarFetcher.kt$HypixelBazaarFetcher$IO + InjectDispatcher:MayorAPI.kt$MayorAPI$IO + LongMethod:CopyNearbyEntitiesCommand.kt$CopyNearbyEntitiesCommand$fun command(args: Array<String>) + LongMethod:CropMoneyDisplay.kt$CropMoneyDisplay$private fun drawDisplay(): List<List<Any>> + LongMethod:DefaultConfigOptionGui.kt$DefaultConfigOptionGui$override fun drawScreen(mouseX: Int, mouseY: Int, partialTicks: Float) + LongMethod:GhostCounter.kt$GhostCounter$private fun drawDisplay() + LongMethod:GraphEditor.kt$GraphEditor$private fun input() + LongMethod:ItemDisplayOverlayFeatures.kt$ItemDisplayOverlayFeatures$private fun getStackTip(item: ItemStack): String? + LongMethod:MinecraftConsoleFilter.kt$MinecraftConsoleFilter$override fun filter(event: LogEvent?): Filter.Result + LongMethod:OverviewPage.kt$OverviewPage$private fun getPage(): Pair<List<List<Renderable>>, List<Renderable>> + LongMethod:RenderableTooltips.kt$RenderableTooltips$private fun drawHoveringText() + LongMethod:TabListRenderer.kt$TabListRenderer$private fun drawTabList() + LongMethod:VisualWordGui.kt$VisualWordGui$override fun drawScreen(unusedX: Int, unusedY: Int, partialTicks: Float) + LoopWithTooManyJumpStatements:AdvancedPlayerList.kt$AdvancedPlayerList$for + LoopWithTooManyJumpStatements:CropMoneyDisplay.kt$CropMoneyDisplay$for + LoopWithTooManyJumpStatements:CustomScoreboard.kt$CustomScoreboard$for + LoopWithTooManyJumpStatements:EstimatedItemValueCalculator.kt$EstimatedItemValueCalculator$for + LoopWithTooManyJumpStatements:GardenComposterInventoryFeatures.kt$GardenComposterInventoryFeatures$for + LoopWithTooManyJumpStatements:GardenVisitorFeatures.kt$GardenVisitorFeatures$for + LoopWithTooManyJumpStatements:IslandAreas.kt$IslandAreas$for + LoopWithTooManyJumpStatements:RiftBloodEffigies.kt$RiftBloodEffigies$for + LoopWithTooManyJumpStatements:SkyBlockItemModifierUtils.kt$SkyBlockItemModifierUtils$for + LoopWithTooManyJumpStatements:SkyHanniConfigSearchResetCommand.kt$SkyHanniConfigSearchResetCommand$for + LoopWithTooManyJumpStatements:SuperpairsClicksAlert.kt$SuperpairsClicksAlert$for + MapGetWithNotNullAssertionOperator:NavigationHelper.kt$NavigationHelper$distances[node]!! + MatchingDeclarationName:AreaChangeEvents.kt$ScoreboardAreaChangeEvent : SkyHanniEvent + MaxLineLength:GraphEditor.kt$GraphEditor$@Suppress("MapGetWithNotNullAssertionOperator") nodes[indexedTable[otherNode.id]!!] to node.position.distance(otherNode.position) + MemberNameEqualsClassName:CaptureFarmingGear.kt$CaptureFarmingGear$fun captureFarmingGear() + MemberNameEqualsClassName:Commands.kt$Commands$// command -> description private val commands = mutableListOf<CommandInfo>() + MemberNameEqualsClassName:FameRanks.kt$FameRanks$var fameRanks = emptyMap<String, FameRank>() private set + MemberNameEqualsClassName:FirstMinionTier.kt$FirstMinionTier$fun firstMinionTier( otherItems: Map<NEUInternalName, Int>, minions: MutableMap<String, NEUInternalName>, tierOneMinions: MutableList<NEUInternalName>, tierOneMinionsDone: MutableSet<NEUInternalName>, ) + MemberNameEqualsClassName:LastServers.kt$LastServers$private val lastServers = mutableMapOf<String, SimpleTimeMark>() + MemberNameEqualsClassName:PestSpawn.kt$PestSpawn$private fun pestSpawn(amount: Int, plotNames: List<String>, unknownAmount: Boolean) + MemberNameEqualsClassName:Shimmy.kt$Shimmy.Companion$private fun shimmy(source: Any?, fieldName: String): Any? + MemberNameEqualsClassName:TestBingo.kt$TestBingo$var testBingo = false + MemberNameEqualsClassName:Text.kt$Text$fun text(text: String, init: IChatComponent.() -> Unit = {}) + NoNameShadowing:BucketedItemTrackerData.kt$BucketedItemTrackerData${ it.hidden = !it.hidden } + NoNameShadowing:BurrowWarpHelper.kt$BurrowWarpHelper${ it.startsWith("§bWarp to ") } + NoNameShadowing:ChunkedStat.kt$ChunkedStat.Companion${ it.showWhen() } + NoNameShadowing:ContributorManager.kt$ContributorManager${ it.isAllowed() } + NoNameShadowing:Graph.kt$Graph.Companion${ out.name("Name").value(it) } + NoNameShadowing:Graph.kt$Graph.Companion${ out.name("Tags") out.beginArray() for (tagName in it) { out.value(tagName) } out.endArray() } + NoNameShadowing:GraphEditorBugFinder.kt$GraphEditorBugFinder${ it.position.distanceSqToPlayer() } + NoNameShadowing:GuiOptionEditorUpdateCheck.kt$GuiOptionEditorUpdateCheck$width + NoNameShadowing:HoppityCollectionStats.kt$HoppityCollectionStats${ val displayAmount = it.amount.shortFormat() val operationFormat = when (milestoneType) { HoppityEggType.CHOCOLATE_SHOP_MILESTONE -> "spending" HoppityEggType.CHOCOLATE_FACTORY_MILESTONE -> "reaching" else -> "" // Never happens } // List indexing is weird existingLore[replaceIndex - 1] = "§7Obtained by $operationFormat §6$displayAmount" existingLore[replaceIndex] = "§7all-time §6Chocolate." return existingLore } + NoNameShadowing:HotmData.kt$HotmData.Companion${ it.setCurrent(it.getTotal()) } + NoNameShadowing:LorenzVec.kt$LorenzVec.Companion$pitch + NoNameShadowing:LorenzVec.kt$LorenzVec.Companion$yaw + NoNameShadowing:Renderable.kt$Renderable.Companion.<no name provided>$posX + NoNameShadowing:Renderable.kt$Renderable.Companion.<no name provided>$posY + NoNameShadowing:Renderable.kt$Renderable.Companion.<no name provided>${ it.value?.contains(textInput.textBox, ignoreCase = true) ?: true } + NoNameShadowing:RenderableUtils.kt$RenderableUtils${ it != null } + NoNameShadowing:ReplaceRomanNumerals.kt$ReplaceRomanNumerals${ it.isValidRomanNumeral() && it.removeFormatting().romanToDecimal() != 2000 } + NoNameShadowing:RepoManager.kt$RepoManager${ unsuccessfulConstants.add(it) } + NoNameShadowing:RepoPatternManager.kt$RepoPatternManager${ it == '.' } + NoNameShadowing:Shimmy.kt$Shimmy.Companion$source + NoNameShadowing:SkyHanniBucketedItemTracker.kt$SkyHanniBucketedItemTracker${ ItemPriceSource.entries[it.ordinal] } + ReturnCount:AnitaMedalProfit.kt$AnitaMedalProfit$private fun readItem(slot: Int, item: ItemStack, table: MutableList<DisplayTableEntry>) + ReturnCount:BingoNextStepHelper.kt$BingoNextStepHelper$private fun readDescription(description: String): NextStep? + ReturnCount:BroodmotherFeatures.kt$BroodmotherFeatures$private fun onStageUpdate() + ReturnCount:ChatPeek.kt$ChatPeek$@JvmStatic fun peek(): Boolean + ReturnCount:ChestValue.kt$ChestValue$private fun isValidStorage(): Boolean + ReturnCount:CollectionTracker.kt$CollectionTracker$fun command(args: Array<String>) + ReturnCount:CompactBingoChat.kt$CompactBingoChat$private fun onSkyBlockLevelUp(message: String): Boolean + ReturnCount:CrimsonMinibossRespawnTimer.kt$CrimsonMinibossRespawnTimer$private fun updateArea() + ReturnCount:CropMoneyDisplay.kt$CropMoneyDisplay$private fun drawDisplay(): List<List<Any>> + ReturnCount:DamageIndicatorManager.kt$DamageIndicatorManager$private fun checkThorn(realHealth: Long, realMaxHealth: Long): String? + ReturnCount:DamageIndicatorManager.kt$DamageIndicatorManager$private fun getCustomHealth( entityData: EntityData, health: Long, entity: EntityLivingBase, maxHealth: Long, ): String? + ReturnCount:EnchantParser.kt$EnchantParser$private fun parseEnchants( loreList: MutableList<String>, enchants: Map<String, Int>, chatComponent: IChatComponent?, ) + ReturnCount:EstimatedItemValue.kt$EstimatedItemValue$private fun draw(stack: ItemStack): List<List<Any>> + ReturnCount:EstimatedItemValueCalculator.kt$EstimatedItemValueCalculator$private fun calculateStarPrice( internalName: NEUInternalName, inputStars: Int, ): Pair<EssenceItemUtils.EssenceUpgradePrice, Pair<Int, Int>>? + ReturnCount:FishingAPI.kt$FishingAPI$fun seaCreatureCount(entity: EntityArmorStand): Int + ReturnCount:GardenVisitorFeatures.kt$GardenVisitorFeatures$private fun showGui(): Boolean + ReturnCount:GraphEditor.kt$GraphEditor$private fun input() + ReturnCount:HideNotClickableItems.kt$HideNotClickableItems$private fun hideSalvage(chestName: String, stack: ItemStack): Boolean + ReturnCount:IslandGraphs.kt$IslandGraphs$private fun handleTick() + ReturnCount:ItemDisplayOverlayFeatures.kt$ItemDisplayOverlayFeatures$private fun getStackTip(item: ItemStack): String? + ReturnCount:ItemNameResolver.kt$ItemNameResolver$internal fun getInternalNameOrNull(itemName: String): NEUInternalName? + ReturnCount:ItemPriceUtils.kt$ItemPriceUtils$fun NEUInternalName.getPriceOrNull( priceSource: ItemPriceSource = ItemPriceSource.BAZAAR_INSTANT_BUY, pastRecipes: List<PrimitiveRecipe> = emptyList(), ): Double? + ReturnCount:ItemUtils.kt$ItemUtils$private fun NEUInternalName.grabItemName(): String + ReturnCount:MinecraftConsoleFilter.kt$MinecraftConsoleFilter$override fun filter(event: LogEvent?): Filter.Result + ReturnCount:MiningEventTracker.kt$MiningEventTracker$private fun sendData(eventName: String, time: String?) + ReturnCount:MobDetection.kt$MobDetection$private fun entitySpawn(entity: EntityLivingBase, roughType: Mob.Type): Boolean + ReturnCount:MobFilter.kt$MobFilter$internal fun createSkyblockEntity(baseEntity: EntityLivingBase): MobResult + ReturnCount:MobFilter.kt$MobFilter$private fun armorStandOnlyMobs(baseEntity: EntityLivingBase, armorStand: EntityArmorStand): MobResult? + ReturnCount:MobFilter.kt$MobFilter$private fun exceptions(baseEntity: EntityLivingBase, nextEntity: EntityLivingBase?): MobResult? + ReturnCount:MobFinder.kt$MobFinder$private fun tryAddEntitySpider(entity: EntityLivingBase): EntityResult? + ReturnCount:MobFinder.kt$MobFinder$private fun tryAddRift(entity: EntityLivingBase): EntityResult? + ReturnCount:MultiFilter.kt$MultiFilter$fun matchResult(string: String): String? + ReturnCount:PacketTest.kt$PacketTest$private fun Packet<*>.print() + ReturnCount:PowderMiningChatFilter.kt$PowderMiningChatFilter$@Suppress("CyclomaticComplexMethod") fun block(message: String): String? + ReturnCount:PurseAPI.kt$PurseAPI$private fun getCause(diff: Double): PurseChangeCause + ReturnCount:QuestLoader.kt$QuestLoader$private fun addQuest(name: String, state: QuestState, needAmount: Int): Quest + ReturnCount:ShowFishingItemName.kt$ShowFishingItemName$fun inCorrectArea(): Boolean + ReturnCount:SkillAPI.kt$SkillAPI$fun onCommand(it: Array<String>) + ReturnCount:SkyHanniConfigSearchResetCommand.kt$SkyHanniConfigSearchResetCommand$private suspend fun setCommand(args: Array<String>): String + ReturnCount:TabComplete.kt$TabComplete$private fun customTabComplete(command: String): List<String>? + SpreadOperator:ItemUtils.kt$ItemUtils$(tag, displayName, *lore.toTypedArray()) + SpreadOperator:LimboPlaytime.kt$LimboPlaytime$( itemID.getItemStack().item, ITEM_NAME, *createItemLore() ) + SpreadOperator:Text.kt$Text$(*component.toTypedArray(), separator = separator) + TooManyFunctions:CollectionUtils.kt$CollectionUtils + TooManyFunctions:DailyQuestHelper.kt$DailyQuestHelper + TooManyFunctions:EstimatedItemValueCalculator.kt$EstimatedItemValueCalculator + TooManyFunctions:GuiRenderUtils.kt$GuiRenderUtils + TooManyFunctions:HypixelCommands.kt$HypixelCommands + TooManyFunctions:InventoryUtils.kt$InventoryUtils + TooManyFunctions:LocationUtils.kt$LocationUtils + TooManyFunctions:LorenzUtils.kt$LorenzUtils + TooManyFunctions:LorenzVec.kt$LorenzVec + TooManyFunctions:MobFinder.kt$MobFinder + TooManyFunctions:NumberUtil.kt$NumberUtil + TooManyFunctions:RegexUtils.kt$RegexUtils + TooManyFunctions:RenderUtils.kt$RenderUtils + TooManyFunctions:Renderable.kt$Renderable$Companion + TooManyFunctions:ScoreboardElements.kt$at.hannibal2.skyhanni.features.gui.customscoreboard.ScoreboardElements.kt + TooManyFunctions:ScoreboardEvent.kt$at.hannibal2.skyhanni.features.gui.customscoreboard.ScoreboardEvent.kt + TooManyFunctions:SkyBlockItemModifierUtils.kt$SkyBlockItemModifierUtils + TooManyFunctions:StringUtils.kt$StringUtils + UnsafeCallOnNullableType:BasketWaypoints.kt$BasketWaypoints$Basket.entries.minByOrNull { it.waypoint.distanceSqToPlayer() }!! + UnsafeCallOnNullableType:BasketWaypoints.kt$BasketWaypoints$notFoundBaskets.minByOrNull { it.waypoint.distanceSqToPlayer() }!! + UnsafeCallOnNullableType:BucketedItemTrackerData.kt$BucketedItemTrackerData$it.value[internalName]?.hidden!! + UnsafeCallOnNullableType:ChocolateFactoryDataLoader.kt$ChocolateFactoryDataLoader$upgradeCost!! + UnsafeCallOnNullableType:CollectionUtils.kt$CollectionUtils$this.merge(key, number, Double::plus)!! + UnsafeCallOnNullableType:CollectionUtils.kt$CollectionUtils$this.merge(key, number, Float::plus)!! + UnsafeCallOnNullableType:CollectionUtils.kt$CollectionUtils$this.merge(key, number, Int::plus)!! + UnsafeCallOnNullableType:CollectionUtils.kt$CollectionUtils$this.merge(key, number, Long::plus)!! + UnsafeCallOnNullableType:CombatUtils.kt$CombatUtils$a!! + UnsafeCallOnNullableType:CompactBestiaryChatMessage.kt$CompactBestiaryChatMessage$it.groups[1]!! + UnsafeCallOnNullableType:ConfigManager.kt$ConfigManager$file!! + UnsafeCallOnNullableType:CorpseTracker.kt$CorpseTracker$applicableKeys.first().key!! + UnsafeCallOnNullableType:CosmeticFollowingLine.kt$CosmeticFollowingLine$latestLocations[b]!! + UnsafeCallOnNullableType:CosmeticFollowingLine.kt$CosmeticFollowingLine$locations[b]!! + UnsafeCallOnNullableType:CropMoneyDisplay.kt$CropMoneyDisplay$cropNames[internalName]!! + UnsafeCallOnNullableType:DailyMiniBossHelper.kt$DailyMiniBossHelper$getByDisplayName(name)!! + UnsafeCallOnNullableType:DamageIndicatorManager.kt$DamageIndicatorManager$data.deathLocation!! + UnsafeCallOnNullableType:DefaultConfigFeatures.kt$DefaultConfigFeatures$resetSuggestionState[cat]!! + UnsafeCallOnNullableType:DefaultConfigOptionGui.kt$DefaultConfigOptionGui$resetSuggestionState[cat]!! + UnsafeCallOnNullableType:DicerRngDropTracker.kt$DicerRngDropTracker$event.toolItem!! + UnsafeCallOnNullableType:DiscordStatus.kt$ownerRegex.find(colorlessLine)!! + UnsafeCallOnNullableType:DungeonAPI.kt$DungeonAPI$dungeonFloor!! + UnsafeCallOnNullableType:EasterEggWaypoints.kt$EasterEggWaypoints$EasterEgg.entries.minByOrNull { it.waypoint.distanceSqToPlayer() }!! + UnsafeCallOnNullableType:EasterEggWaypoints.kt$EasterEggWaypoints$notFoundEggs.minByOrNull { it.waypoint.distanceSqToPlayer() }!! + UnsafeCallOnNullableType:EntityMovementData.kt$EntityMovementData$entityLocation[entity]!! + UnsafeCallOnNullableType:EntityOutlineRenderer.kt$EntityOutlineRenderer$entityRenderCache.noXrayCache!! + UnsafeCallOnNullableType:EntityOutlineRenderer.kt$EntityOutlineRenderer$entityRenderCache.xrayCache!! + UnsafeCallOnNullableType:EntityOutlineRenderer.kt$EntityOutlineRenderer$frameToCopy!! + UnsafeCallOnNullableType:EntityOutlineRenderer.kt$EntityOutlineRenderer$frameToPaste!! + UnsafeCallOnNullableType:EntityOutlineRenderer.kt$EntityOutlineRenderer$isAntialiasing!! + UnsafeCallOnNullableType:EntityOutlineRenderer.kt$EntityOutlineRenderer$isFastRender!! + UnsafeCallOnNullableType:EntityOutlineRenderer.kt$EntityOutlineRenderer$isShaders!! + UnsafeCallOnNullableType:FFGuideGUI.kt$FFGuideGUI$currentCrop!! + UnsafeCallOnNullableType:FarmingContestAPI.kt$FarmingContestAPI$contestCrop!! + UnsafeCallOnNullableType:FarmingContestAPI.kt$FarmingContestAPI$contests[bracket]!! + UnsafeCallOnNullableType:FarmingContestAPI.kt$FarmingContestAPI$currentCrop!! + UnsafeCallOnNullableType:FarmingWeightDisplay.kt$FarmingWeightDisplay$weightPerCrop[CropType.CACTUS]!! + UnsafeCallOnNullableType:FarmingWeightDisplay.kt$FarmingWeightDisplay$weightPerCrop[CropType.SUGAR_CANE]!! + UnsafeCallOnNullableType:FeatureToggleProcessor.kt$FeatureToggleProcessor$latestCategory!! + UnsafeCallOnNullableType:FeatureTogglesByDefaultAdapter.kt$FeatureTogglesByDefaultAdapter$gson!! + UnsafeCallOnNullableType:FishingProfitTracker.kt$FishingProfitTracker$itemCategories[currentCategory]!! + UnsafeCallOnNullableType:FishingProfitTracker.kt$FishingProfitTracker.Data$itemCategories["Trophy Fish"]!! + UnsafeCallOnNullableType:FortuneUpgrades.kt$FortuneUpgrades$nextTalisman.upgradeCost?.first!! + UnsafeCallOnNullableType:GardenComposterUpgradesData.kt$GardenComposterUpgradesData$ComposterUpgrade.getByName(name)!! + UnsafeCallOnNullableType:GardenCropMilestoneDisplay.kt$GardenCropMilestoneDisplay$cultivatingData[crop]!! + UnsafeCallOnNullableType:GardenCropMilestonesCommunityFix.kt$GardenCropMilestonesCommunityFix$map[crop]!! + UnsafeCallOnNullableType:GardenPlotIcon.kt$GardenPlotIcon$originalStack[index]!! + UnsafeCallOnNullableType:GhostCounter.kt$GhostCounter$storage?.totalMF!! + UnsafeCallOnNullableType:Graph.kt$Graph.Companion$position!! + UnsafeCallOnNullableType:Graph.kt$distances.distances[end]!! + UnsafeCallOnNullableType:GriffinBurrowHelper.kt$GriffinBurrowHelper$particleBurrows[targetLocation]!! + UnsafeCallOnNullableType:HoppityCallWarning.kt$HoppityCallWarning$acceptUUID!! + UnsafeCallOnNullableType:IslandGraphs.kt$IslandGraphs$currentTarget!! + UnsafeCallOnNullableType:ItemBlink.kt$ItemBlink$offsets[item]!! + UnsafeCallOnNullableType:ItemPickupLog.kt$ItemPickupLog$listToCheckAgainst[key]!! + UnsafeCallOnNullableType:ItemPickupLog.kt$ItemPickupLog$listToCheckAgainst[key]?.second!! + UnsafeCallOnNullableType:ItemStackTypeAdapterFactory.kt$ItemStackTypeAdapterFactory$gson!! + UnsafeCallOnNullableType:ItemUtils.kt$ItemUtils$itemAmountCache[input]!! + UnsafeCallOnNullableType:JacobContestTimeNeeded.kt$JacobContestTimeNeeded$map[crop]!! + UnsafeCallOnNullableType:KSerializable.kt$KotlinTypeAdapterFactory$kotlinClass.memberProperties.find { it.name == param.name }!! + UnsafeCallOnNullableType:KSerializable.kt$KotlinTypeAdapterFactory$param.name!! + UnsafeCallOnNullableType:LorenzEvent.kt$LorenzEvent$this::class.simpleName!! + UnsafeCallOnNullableType:MinionFeatures.kt$MinionFeatures$newMinion!! + UnsafeCallOnNullableType:MobFinder.kt$MobFinder$floor6GiantsSeparateDelay[uuid]!! + UnsafeCallOnNullableType:NavigationHelper.kt$NavigationHelper$distances[node]!! + UnsafeCallOnNullableType:NumberUtil.kt$NumberUtil$romanSymbols[this]!! + UnsafeCallOnNullableType:PositionList.kt$PositionList$configLink!! + UnsafeCallOnNullableType:ReminderManager.kt$ReminderManager$storage[args.drop(1).first()]!! + UnsafeCallOnNullableType:ReminderManager.kt$ReminderManager$storage[args.first()]!! + UnsafeCallOnNullableType:RenderEntityOutlineEvent.kt$RenderEntityOutlineEvent$entitiesToChooseFrom!! + UnsafeCallOnNullableType:RenderEntityOutlineEvent.kt$RenderEntityOutlineEvent$entitiesToOutline!! + UnsafeCallOnNullableType:RenderGlobalHook.kt$RenderGlobalHook$camera!! + UnsafeCallOnNullableType:RenderLivingEntityHelper.kt$RenderLivingEntityHelper$entityColorCondition[entity]!! + UnsafeCallOnNullableType:RenderLivingEntityHelper.kt$RenderLivingEntityHelper$entityColorMap[entity]!! + UnsafeCallOnNullableType:RenderUtils.kt$RenderUtils$it.name!! + UnsafeCallOnNullableType:RepoManager.kt$RepoManager$latestRepoCommit!! + UnsafeCallOnNullableType:RepoUtils.kt$RepoUtils$file!! + UnsafeCallOnNullableType:SackAPI.kt$SackAPI$match.groups[1]!! + UnsafeCallOnNullableType:SackAPI.kt$SackAPI$match.groups[2]!! + UnsafeCallOnNullableType:SackAPI.kt$SackAPI$match.groups[3]!! + UnsafeCallOnNullableType:SackAPI.kt$SackAPI$oldData!! + UnsafeCallOnNullableType:SimpleCommand.kt$SimpleCommand$tabRunnable!! + UnsafeCallOnNullableType:SkyHanniBucketedItemTracker.kt$SkyHanniBucketedItemTracker$it.get(DisplayMode.SESSION).getItemsProp()[internalName]!! + UnsafeCallOnNullableType:SkyHanniBucketedItemTracker.kt$SkyHanniBucketedItemTracker$it.get(DisplayMode.TOTAL).getItemsProp()[internalName]!! + UnsafeCallOnNullableType:SkyHanniMod.kt$SkyHanniMod.Companion$Loader.instance().indexedModList[MODID]!! + UnsafeCallOnNullableType:SoopyGuessBurrow.kt$SoopyGuessBurrow$distance!! + UnsafeCallOnNullableType:SoopyGuessBurrow.kt$SoopyGuessBurrow$distance2!! + UnsafeCallOnNullableType:SoopyGuessBurrow.kt$SoopyGuessBurrow$firstParticlePoint?.distance(pos)!! + UnsafeCallOnNullableType:SoopyGuessBurrow.kt$SoopyGuessBurrow$lastParticlePoint2!! + UnsafeCallOnNullableType:SoopyGuessBurrow.kt$SoopyGuessBurrow$lastParticlePoint2?.distance(particlePoint!!)!! + UnsafeCallOnNullableType:SoopyGuessBurrow.kt$SoopyGuessBurrow$particlePoint!! + UnsafeCallOnNullableType:SoopyGuessBurrow.kt$SoopyGuessBurrow$particlePoint?.subtract(lastParticlePoint2!!)!! + UnsafeCallOnNullableType:SummoningSoulsName.kt$SummoningSoulsName$mobsName.getOrNull(nearestMob)!! + UnsafeCallOnNullableType:SuperpairsClicksAlert.kt$SuperpairsClicksAlert$match.groups[1]!! + UnsafeCallOnNullableType:TiaRelayWaypoints.kt$TiaRelayWaypoints$waypointName!! + UnsafeCallOnNullableType:Translator.kt$Translator$messageContentRegex.find(message)!! + UnsafeCallOnNullableType:TrevorFeatures.kt$TrevorFeatures$TrevorSolver.currentMob!! + UnsafeCallOnNullableType:TrevorSolver.kt$TrevorSolver$currentMob!! + UnsafeCallOnNullableType:TunnelsMaps.kt$TunnelsMaps$campfire.name!! + UnsafeCallOnNullableType:UpdateManager.kt$UpdateManager$potentialUpdate!! + UnsafeCallOnNullableType:VisitorRewardWarning.kt$VisitorRewardWarning$visitor.totalPrice!! + UnsafeCallOnNullableType:VisitorRewardWarning.kt$VisitorRewardWarning$visitor.totalReward!! + UnusedParameter:SkyHanniDebugsAndTests.kt$SkyHanniDebugsAndTests$args: Array<String> + UseIsNullOrEmpty:ItemUtils.kt$ItemUtils$name == null || name.isEmpty() + UseOrEmpty:SkyHanniDebugsAndTests.kt$SkyHanniDebugsAndTests$event.originalOre?.let { "$it " } ?: "" + VarCouldBeVal:AdvancedPlayerList.kt$AdvancedPlayerList$private var randomOrderCache = TimeLimitedCache<String, Int>(20.minutes) + VarCouldBeVal:BestiaryData.kt$BestiaryData$private var indexes = listOf( 10, 11, 12, 13, 14, 15, 16, 19, 20, 21, 22, 23, 24, 25, 28, 29, 30, 31, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43 ) + VarCouldBeVal:BucketedItemTrackerData.kt$BucketedItemTrackerData$@Expose private var bucketedItems: MutableMap<E, MutableMap<NEUInternalName, TrackedItem>> = HashMap() + VarCouldBeVal:CarnivalZombieShootout.kt$CarnivalZombieShootout$private var lastUpdate = Updates(SimpleTimeMark.farPast(), SimpleTimeMark.farPast()) + VarCouldBeVal:ChocolateFactoryStrayTracker.kt$ChocolateFactoryStrayTracker$private var claimedStraysSlots = mutableListOf<Int>() + VarCouldBeVal:CompactBestiaryChatMessage.kt$CompactBestiaryChatMessage$private var bestiaryDescription = mutableListOf<String>() + VarCouldBeVal:CompactExperimentRewards.kt$CompactExperimentRewards$private var gainedRewards = mutableListOf<String>() + VarCouldBeVal:CraftRoomHolographicMob.kt$CraftRoomHolographicMob$private var entityToHolographicEntity = mapOf( EntityZombie::class.java to HolographicEntities.zombie, EntitySlime::class.java to HolographicEntities.slime, EntityCaveSpider::class.java to HolographicEntities.caveSpider, ) + VarCouldBeVal:CustomWardrobe.kt$CustomWardrobe$private var guiName = "Custom Wardrobe" + VarCouldBeVal:Enchant.kt$Enchant$@Expose private var goodLevel = 0 + VarCouldBeVal:Enchant.kt$Enchant$@Expose private var maxLevel = 0 + VarCouldBeVal:Enchant.kt$Enchant.Stacking$@Expose @Suppress("unused") private var statLabel: String? = null + VarCouldBeVal:Enchant.kt$Enchant.Stacking$@Expose private var nbtNum: String? = null + VarCouldBeVal:Enchant.kt$Enchant.Stacking$@Expose private var stackLevel: TreeSet<Int>? = null + VarCouldBeVal:ErrorManager.kt$ErrorManager$private var cache = TimeLimitedSet<Pair<String, Int>>(10.minutes) + VarCouldBeVal:EstimatedItemValueCalculator.kt$EstimatedItemValueCalculator$var comboPrice = combo.asInternalName().getPriceOrNull() + VarCouldBeVal:EstimatedItemValueCalculator.kt$EstimatedItemValueCalculator$var internalName = removeKuudraArmorPrefix(stack.getInternalName().asString().removePrefix("VANQUISHED_")) + VarCouldBeVal:EstimatedItemValueCalculator.kt$EstimatedItemValueCalculator$var nameColor = if (!useless) "§9" else "§7" + VarCouldBeVal:ExperimentsProfitTracker.kt$ExperimentsProfitTracker$private var currentBottlesInInventory = mutableMapOf<NEUInternalName, Int>() + VarCouldBeVal:ExperimentsProfitTracker.kt$ExperimentsProfitTracker$private var lastBottlesInInventory = mutableMapOf<NEUInternalName, Int>() + VarCouldBeVal:ExperimentsProfitTracker.kt$ExperimentsProfitTracker$private var lastSplashes = mutableListOf<ItemStack>() + VarCouldBeVal:FarmingWeightDisplay.kt$FarmingWeightDisplay$private var nextPlayers = mutableListOf<UpcomingLeaderboardPlayer>() + VarCouldBeVal:FlareDisplay.kt$FlareDisplay$private var flares = mutableListOf<Flare>() + VarCouldBeVal:FontRendererHook.kt$FontRendererHook$private var CHROMA_COLOR: Int = -0x1 + VarCouldBeVal:FontRendererHook.kt$FontRendererHook$private var CHROMA_COLOR_SHADOW: Int = -0xAAAAAB + VarCouldBeVal:GardenPlotIcon.kt$GardenPlotIcon$private var cachedStack = mutableMapOf<Int, ItemStack>() + VarCouldBeVal:GardenPlotIcon.kt$GardenPlotIcon$private var originalStack = mutableMapOf<Int, ItemStack>() + VarCouldBeVal:GardenPlotMenuHighlighting.kt$GardenPlotMenuHighlighting$private var highlightedPlots = mutableMapOf<GardenPlotAPI.Plot, PlotStatusType>() + VarCouldBeVal:GardenVisitorColorNames.kt$GardenVisitorColorNames$private var visitorColors = mutableMapOf<String, String>() // name -> color code + VarCouldBeVal:GhostData.kt$GhostData$private var session = mutableMapOf( Option.KILLS to 0.0, Option.SORROWCOUNT to 0.0, Option.VOLTACOUNT to 0.0, Option.PLASMACOUNT to 0.0, Option.GHOSTLYBOOTS to 0.0, Option.BAGOFCASH to 0.0, Option.TOTALDROPS to 0.0, Option.SCAVENGERCOINS to 0.0, Option.MAXKILLCOMBO to 0.0, Option.SKILLXPGAINED to 0.0 ) + VarCouldBeVal:GraphEditor.kt$GraphEditor$var vector = LocationUtils.calculatePlayerFacingDirection() + VarCouldBeVal:HoppityCollectionStats.kt$HoppityCollectionStats$private var highlightMap = mutableMapOf<String, LorenzColor>() + VarCouldBeVal:HoppityEggLocations.kt$HoppityEggLocations$// TODO add gui/command to show total data/missing islands private var collectedEggStorage: MutableMap<IslandType, MutableSet<LorenzVec>> get() = ChocolateFactoryAPI.profileStorage?.collectedEggLocations ?: mutableMapOf() set(value) { ChocolateFactoryAPI.profileStorage?.collectedEggLocations = value } + VarCouldBeVal:HoppityNpc.kt$HoppityNpc$private var slotsToHighlight = mutableSetOf<Int>() + VarCouldBeVal:IslandAreas.kt$IslandAreas$var suffix = "" + VarCouldBeVal:ItemPickupLog.kt$ItemPickupLog$private var itemList = mutableMapOf<Int, Pair<ItemStack, Int>>() + VarCouldBeVal:ItemPickupLog.kt$ItemPickupLog$private var itemsAddedToInventory = mutableMapOf<Int, PickupEntry>() + VarCouldBeVal:ItemPickupLog.kt$ItemPickupLog$private var itemsRemovedFromInventory = mutableMapOf<Int, PickupEntry>() + VarCouldBeVal:LocationUtils.kt$LocationUtils$var yaw = LocationUtils.calculatePlayerYaw() + 180 + VarCouldBeVal:LorenzLogger.kt$LorenzLogger.Companion$private var LOG_DIRECTORY = File("config/skyhanni/logs") + VarCouldBeVal:MobDetection.kt$MobDetection$private var shouldClear: AtomicBoolean = AtomicBoolean(false) + VarCouldBeVal:MobFinder.kt$MobFinder$private var floor2summonsDiedOnce = mutableListOf<EntityOtherPlayerMP>() + VarCouldBeVal:MobFinder.kt$MobFinder$private var floor6GiantsSeparateDelay = mutableMapOf<UUID, Pair<Long, BossType>>() + VarCouldBeVal:MobFinder.kt$MobFinder$private var guardians = mutableListOf<EntityGuardian>() + VarCouldBeVal:NeuReforgeJson.kt$NeuReforgeJson$private lateinit var itemTypeField: Pair<String, List<NEUInternalName>> + VarCouldBeVal:PowerStoneGuideFeatures.kt$PowerStoneGuideFeatures$private var missing = mutableMapOf<Int, NEUInternalName>() + VarCouldBeVal:PunchcardHighlight.kt$PunchcardHighlight$private var playerQueue = mutableListOf<String>() + VarCouldBeVal:QuiverWarning.kt$QuiverWarning$private var arrowsInInstance = mutableSetOf<ArrowType>() + VarCouldBeVal:ReforgeHelper.kt$ReforgeHelper$private var waitForChat = AtomicBoolean(false) + VarCouldBeVal:ReminderManager.kt$ReminderManager$private var listPage = 1 + VarCouldBeVal:RepoPatternGui.kt$RepoPatternGui$private var searchCache = ObservableList(mutableListOf<RepoPatternInfo>()) + VarCouldBeVal:RepoPatternManager.kt$RepoPatternManager$/** * Map containing all keys and their repo patterns. Used for filling in new regexes after an update, and for * checking duplicate registrations. */ private var usedKeys: NavigableMap<String, CommonPatternInfo<*, *>> = TreeMap() + VarCouldBeVal:RepoPatternManager.kt$RepoPatternManager$/** * Map containing the exclusive owner of a regex key */ private var exclusivity: MutableMap<String, RepoPatternKeyOwner> = mutableMapOf() + VarCouldBeVal:SeaCreatureFeatures.kt$SeaCreatureFeatures$private var entityIds = TimeLimitedSet<Int>(6.minutes) + VarCouldBeVal:SeaCreatureFeatures.kt$SeaCreatureFeatures$private var rareSeaCreatures = TimeLimitedSet<Mob>(6.minutes) + VarCouldBeVal:ShowFishingItemName.kt$ShowFishingItemName$private var itemsOnGround = TimeLimitedCache<EntityItem, String>(750.milliseconds) + VarCouldBeVal:SkyblockGuideHighlightFeature.kt$SkyblockGuideHighlightFeature.Companion$private var missing = mutableSetOf<Int>() + VarCouldBeVal:SlayerItemsOnGround.kt$SlayerItemsOnGround$private var itemsOnGround = TimeLimitedCache<EntityItem, String>(2.seconds) + VarCouldBeVal:SoopyGuessBurrow.kt$SoopyGuessBurrow$private var dingSlope = mutableListOf<Float>() + VarCouldBeVal:SoopyGuessBurrow.kt$SoopyGuessBurrow$private var locations = mutableListOf<LorenzVec>() + VarCouldBeVal:SuperpairExperimentInformationDisplay.kt$SuperpairExperimentInformationDisplay$// TODO remove string. use enum instead! maybe even create new data type instead of map of pairs private var found = mutableMapOf<Pair<Item?, ItemPair?>, String>() + VarCouldBeVal:SuperpairExperimentInformationDisplay.kt$SuperpairExperimentInformationDisplay$private var lastClicked = mutableListOf<Pair<Int, Int>>() + VarCouldBeVal:SuperpairExperimentInformationDisplay.kt$SuperpairExperimentInformationDisplay$private var toCheck = mutableListOf<Pair<Int, Int>>() + VarCouldBeVal:SuperpairExperimentInformationDisplay.kt$SuperpairExperimentInformationDisplay$private var uncoveredItems = mutableListOf<Pair<Int, String>>() + VarCouldBeVal:TiaRelayHelper.kt$TiaRelayHelper$private var resultDisplay = mutableMapOf<Int, Int>() + VarCouldBeVal:TiaRelayHelper.kt$TiaRelayHelper$private var sounds = mutableMapOf<Int, Sound>() + VarCouldBeVal:Translator.kt$Translator$var lang = config.languageCode.get() + VarCouldBeVal:TrevorFeatures.kt$TrevorFeatures$private var backupTrapperID: Int = 17 + VarCouldBeVal:TrevorFeatures.kt$TrevorFeatures$private var trapperID: Int = 56 + VarCouldBeVal:TrophyFishDisplay.kt$TrophyFishDisplay$private var recentlyDroppedTrophies = TimeLimitedCache<NEUInternalName, TrophyRarity>(5.seconds) + VarCouldBeVal:UserLuckBreakdown.kt$UserLuckBreakdown$private var fillerID = "STAINED_GLASS_PANE".asInternalName() + VarCouldBeVal:UserLuckBreakdown.kt$UserLuckBreakdown$private var limboID = "ENDER_PEARL".asInternalName() + VarCouldBeVal:UserLuckBreakdown.kt$UserLuckBreakdown$private var skillOverflowLuck = mutableMapOf<SkillType, Int>() + VarCouldBeVal:UserLuckBreakdown.kt$UserLuckBreakdown$private var skillsID = "DIAMOND_SWORD".asInternalName() + + From 65dde77f6d604faf4a87ddbff2477ee7629bc07f Mon Sep 17 00:00:00 2001 From: David Cole <40234707+DavidArthurCole@users.noreply.github.com> Date: Thu, 26 Sep 2024 19:40:07 -0400 Subject: [PATCH 003/155] Backend: Detekt Fixes Part 1 (#2603) --- .../skyhanni/config/ConfigGuiForgeInterop.kt | 1 + .../at/hannibal2/skyhanni/config/ConfigManager.kt | 8 ++++---- .../config/core/config/gui/GuiPositionEditor.kt | 2 +- .../java/at/hannibal2/skyhanni/data/HypixelData.kt | 2 +- .../java/at/hannibal2/skyhanni/data/MiningAPI.kt | 1 - .../hannibal2/skyhanni/features/chat/ChatFilter.kt | 14 +++++++++----- .../features/chat/PowderMiningChatFilter.kt | 12 ++++++------ .../tabcomplete/GetFromSacksTabComplete.kt | 2 +- .../skyhanni/features/dungeon/DungeonChatFilter.kt | 11 +++++++---- .../features/dungeon/DungeonRankTabListColor.kt | 2 +- .../event/carnival/CarnivalZombieShootout.kt | 8 ++++---- .../event/hoppity/HoppityCollectionStats.kt | 2 +- .../garden/farming/FarmingWeightDisplay.kt | 4 ++-- .../garden/fortuneguide/CaptureFarmingGear.kt | 4 ++-- .../garden/fortuneguide/pages/OverviewPage.kt | 2 +- .../garden/visitor/GardenVisitorCompactChat.kt | 12 ++++++------ .../garden/visitor/GardenVisitorDropStatistics.kt | 2 +- .../skyhanni/features/inventory/ItemPickupLog.kt | 2 +- .../skyhanni/features/inventory/ReforgeHelper.kt | 2 -- .../skyhanni/features/inventory/SackDisplay.kt | 2 +- .../ChocolateFactoryCustomReminder.kt | 6 ++---- .../ChocolateFactoryStrayTracker.kt | 4 ++-- .../features/mining/MineshaftPityDisplay.kt | 5 ----- .../hannibal2/skyhanni/features/mining/OreBlock.kt | 2 +- .../skyhanni/features/minion/MinionFeatures.kt | 2 +- .../misc/items/EstimatedItemValueCalculator.kt | 2 +- .../features/misc/items/enchants/Enchant.kt | 3 +-- .../massconfiguration/FeatureToggleProcessor.kt | 8 ++++---- .../skyhanni/features/rift/everywhere/RiftTimer.kt | 2 +- .../skyhanni/test/SkyHanniDebugsAndTests.kt | 9 ++++----- .../hannibal2/skyhanni/test/graph/GraphEditor.kt | 2 +- .../at/hannibal2/skyhanni/utils/LorenzLogger.kt | 1 + .../java/at/hannibal2/skyhanni/utils/NEUItems.kt | 1 + .../at/hannibal2/skyhanni/utils/NEUVersionCheck.kt | 1 + .../at/hannibal2/skyhanni/utils/StringUtils.kt | 2 +- .../skyhanni/utils/compat/GuiScreenUtils.kt | 2 +- .../skyhanni/utils/compat/SkyhanniBaseScreen.kt | 3 +-- 37 files changed, 74 insertions(+), 76 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/config/ConfigGuiForgeInterop.kt b/src/main/java/at/hannibal2/skyhanni/config/ConfigGuiForgeInterop.kt index 0c112d73a307..3f2d398368d6 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/ConfigGuiForgeInterop.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/ConfigGuiForgeInterop.kt @@ -12,6 +12,7 @@ import java.io.IOException @Suppress("unused") class ConfigGuiForgeInterop : IModGuiFactory { + @Suppress("EmptyFunctionBlock") override fun initialize(minecraft: Minecraft) {} override fun mainConfigGuiClass() = WrappedSkyHanniConfig::class.java diff --git a/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt b/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt index bf0f2ba0a4a4..da4b54942dfd 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt @@ -182,7 +182,7 @@ class ConfigManager { try { run() } catch (e: Throwable) { - e.printStackTrace() + logger.log(e.stackTraceToString()) LorenzUtils.shutdownMinecraft("Config is corrupt inside development environment.") } } else { @@ -194,7 +194,7 @@ class ConfigManager { logger.log("Loaded $fileName from file") } catch (e: Exception) { - e.printStackTrace() + logger.log(e.stackTraceToString()) val backupFile = file.resolveSibling("$fileName-${SimpleTimeMark.now().toMillis()}-backup.json") logger.log("Exception while reading $file. Will load blank $fileName and save backup to $backupFile") logger.log("Exception was $e") @@ -202,7 +202,7 @@ class ConfigManager { file.copyTo(backupFile) } catch (e: Exception) { logger.log("Could not create backup for $fileName file") - e.printStackTrace() + logger.log(e.stackTraceToString()) } } } @@ -239,7 +239,7 @@ class ConfigManager { move(unit, file, reason) } catch (e: IOException) { logger.log("Could not save $fileName file to $file") - e.printStackTrace() + logger.log(e.stackTraceToString()) } } diff --git a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiPositionEditor.kt b/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiPositionEditor.kt index ba3a576754dc..0adf1bed5e56 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiPositionEditor.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/core/config/gui/GuiPositionEditor.kt @@ -57,7 +57,7 @@ class GuiPositionEditor( } override fun drawScreen(mouseX: Int, mouseY: Int, partialTicks: Float) { - //Items aren't drawn due to a bug in neu rendering + // Items aren't drawn due to a bug in neu rendering drawDefaultBackground() if (oldScreen != null) { val accessor = oldScreen as AccessorGuiContainer diff --git a/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt b/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt index b48805ef5bf5..039bd7d28afd 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt @@ -218,7 +218,7 @@ object HypixelData { // This code is modified from NEU, and depends on NEU (or another mod) sending /locraw. private val jsonBracketPattern = "^\\{.+}".toPattern() - //todo convert to proper json object + // todo convert to proper json object fun checkForLocraw(message: String) { jsonBracketPattern.matchMatcher(message.removeColor()) { try { diff --git a/src/main/java/at/hannibal2/skyhanni/data/MiningAPI.kt b/src/main/java/at/hannibal2/skyhanni/data/MiningAPI.kt index 9d635b1b9a22..45aec43d3c72 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/MiningAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/MiningAPI.kt @@ -165,7 +165,6 @@ object MiningAPI { fun onBlockClick(event: BlockClickEvent) { if (!inCustomMiningIsland()) return if (event.clickType != ClickType.LEFT_CLICK) return - //println(event.getBlockState.properties) if (OreBlock.getByStateOrNull(event.getBlockState) == null) return recentClickedBlocks += event.position to SimpleTimeMark.now() } diff --git a/src/main/java/at/hannibal2/skyhanni/features/chat/ChatFilter.kt b/src/main/java/at/hannibal2/skyhanni/features/chat/ChatFilter.kt index 964b255735af..d058ddc50ce1 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/chat/ChatFilter.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/chat/ChatFilter.kt @@ -27,7 +27,7 @@ object ChatFilter { private val config get() = SkyHanniMod.feature.chat.filterType private val dungeonConfig get() = SkyHanniMod.feature.dungeon.messageFilter - /// + // // Lobby Messages private val lobbyPatterns = listOf( // player join @@ -89,15 +89,19 @@ object ChatFilter { ) // Guild EXP + /** + * REGEX-TEST: §aYou earned §r§22 GEXP §r§afrom playing SkyBlock! + * REGEX-TEST: §aYou earned §r§22 GEXP §r§a+ §r§c210 Event EXP §r§afrom playing SkyBlock! + */ private val guildExpPatterns = listOf( - // §aYou earned §r§22 GEXP §r§afrom playing SkyBlock! - // §aYou earned §r§22 GEXP §r§a+ §r§c210 Event EXP §r§afrom playing SkyBlock! "§aYou earned §r§2.* GEXP (§r§a\\+ §r§.* Event EXP )?§r§afrom playing SkyBlock!".toPattern(), ) // Kill Combo + /** + * REGEX-TEST: §a§l+5 Kill Combo §r§8+§r§b3% §r§b? Magic Find + */ private val killComboPatterns = listOf( - //§a§l+5 Kill Combo §r§8+§r§b3% §r§b? Magic Find "§.§l\\+(.*) Kill Combo (.*)".toPattern(), "§cYour Kill Combo has expired! You reached a (.*) Kill Combo!".toPattern(), ) @@ -500,7 +504,7 @@ object ChatFilter { "slayer" to slayerMessageStartWith, "profile_join" to profileJoinMessageStartsWith, ) - /// + // @SubscribeEvent fun onChat(event: LorenzChatEvent) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/chat/PowderMiningChatFilter.kt b/src/main/java/at/hannibal2/skyhanni/features/chat/PowderMiningChatFilter.kt index 9c100ef47ead..698a671141da 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/chat/PowderMiningChatFilter.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/chat/PowderMiningChatFilter.kt @@ -275,7 +275,7 @@ object PowderMiningChatFilter { // To simplify regex statements, this check is done outside val ssMessage = message.takeIf { it.startsWith(" ") }?.substring(4) ?: return null - //Powder + // Powder powderRewardPattern.matchMatcher(ssMessage) { if (config.powderFilterThreshold == 60000) return "powder_mining_powder" val amountStr = groupOrNull("amount") ?: "1" @@ -286,7 +286,7 @@ object PowderMiningChatFilter { } } - //Essence + // Essence essenceRewardPattern.matchMatcher(ssMessage) { if (config.essenceFilterThreshold == 20) return "powder_mining_essence" val amountStr = groupOrNull("amount") ?: "1" @@ -301,11 +301,11 @@ object PowderMiningChatFilter { blockGoblinEggs(ssMessage)?.let { return it } blockGemstones(ssMessage)?.let { return it } - //Fallback default + // Fallback default return null } - var rewardPatterns: Map, String> = emptyMap() + private var rewardPatterns: Map, String> = emptyMap() @SubscribeEvent(priority = EventPriority.HIGHEST) fun onRepoReload(event: RepositoryReloadEvent) { @@ -339,7 +339,7 @@ object PowderMiningChatFilter { if (config.goblinEggs == PowderMiningFilterConfig.GoblinEggFilterEntry.HIDE_ALL) return "powder_mining_goblin_eggs" return when (val colorStr = groupOrNull("color")?.lowercase()) { - //'Colorless', base goblin eggs will never be shown in this code path + // 'Colorless', base goblin eggs will never be shown in this code path null -> "powder_mining_goblin_eggs" "green" -> if (config.goblinEggs > PowderMiningFilterConfig.GoblinEggFilterEntry.GREEN_UP) { "powder_mining_goblin_eggs" @@ -380,7 +380,7 @@ object PowderMiningChatFilter { "amethyst" -> gemstoneConfig.amethystGemstones "jade" -> gemstoneConfig.jadeGemstones "topaz" -> gemstoneConfig.topazGemstones - //Failure case that should never be reached + // Failure case that should never be reached else -> return "no_filter" } diff --git a/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/GetFromSacksTabComplete.kt b/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/GetFromSacksTabComplete.kt index d6c2e85c23eb..39a1f096acff 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/GetFromSacksTabComplete.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/GetFromSacksTabComplete.kt @@ -19,7 +19,7 @@ object GetFromSacksTabComplete { return GetFromSackAPI.sackListNames.map { it.replace(" ", "_") } } - //No subscribe since it needs to be called from the GetFromSackAPI + // No subscribe since it needs to be called from the GetFromSackAPI fun handleUnderlineReplace(event: MessageSendToServerEvent): MessageSendToServerEvent { if (!isEnabled()) return event diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonChatFilter.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonChatFilter.kt index a49369d83f74..1a566c22579d 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonChatFilter.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonChatFilter.kt @@ -16,7 +16,7 @@ object DungeonChatFilter { private val config get() = SkyHanniMod.feature.chat - /// + // // TODO USE SH-REPO private val endPatterns = listOf( "(.*) §r§eunlocked §r§d(.*) Essence §r§8x(.*)§r§e!".toPattern(), @@ -140,9 +140,12 @@ object DungeonChatFilter { private val pickupMessages = listOf( "§fYou found a §r§dWither Essence§r§f! Everyone gains an extra essence!" ) + + /** + * REGEX-TEST: §a[Berserk] §r§fMelee Damage §r§c48%§r§f -> §r§a88% + * REGEX-TEST: §a[Berserk] §r§fWalk Speed §r§c38§r§f -> §r§a68 + */ private val startPatterns = listOf( - //§a[Berserk] §r§fMelee Damage §r§c48%§r§f -> §r§a88% - //§a[Berserk] §r§fWalk Speed §r§c38§r§f -> §r§a68 "§a(.*) §r§f(.*) §r§c(.*)§r§f -> §r§a(.*)".toPattern() ) private val startMessages = listOf( @@ -188,7 +191,7 @@ object DungeonChatFilter { private val messagesEndsWithMap: Map> = mapOf( MessageTypes.END to endMessagesEndWith, ) - /// + // @SubscribeEvent fun onChat(event: LorenzChatEvent) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonRankTabListColor.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonRankTabListColor.kt index 80a60ba4b8f1..3968a3d18a87 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonRankTabListColor.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonRankTabListColor.kt @@ -34,7 +34,7 @@ object DungeonRankTabListColor { val sbLevel = group("sbLevel") val rank = groupOrNull("rank") ?: "" val playerName = group("playerName") - //val symbols = group("symbols") + // val symbols = group("symbols") val className = group("className") val classLevel = group("classLevel") diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/carnival/CarnivalZombieShootout.kt b/src/main/java/at/hannibal2/skyhanni/features/event/carnival/CarnivalZombieShootout.kt index ec18d016b561..b49eb0642604 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/carnival/CarnivalZombieShootout.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/carnival/CarnivalZombieShootout.kt @@ -61,10 +61,10 @@ object CarnivalZombieShootout { ) enum class ZombieType(val points: Int, val helmet: String, val color: Color) { - LEATHER(30, "Leather Cap", Color(165, 42, 42)), //Brown - IRON(50, "Iron Helmet", Color(192, 192, 192)), //Silver - GOLD(80, "Golden Helmet", Color(255, 215, 0)), //Gold - DIAMOND(120, "Diamond Helmet", Color(44, 214, 250)) //Diamond + LEATHER(30, "Leather Cap", Color(165, 42, 42)), // Brown + IRON(50, "Iron Helmet", Color(192, 192, 192)), // Silver + GOLD(80, "Golden Helmet", Color(255, 215, 0)), // Gold + DIAMOND(120, "Diamond Helmet", Color(44, 214, 250)) // Diamond } @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityCollectionStats.kt b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityCollectionStats.kt index e84d93dfa6a3..9fbb3e527dc0 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityCollectionStats.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityCollectionStats.kt @@ -262,7 +262,7 @@ object HoppityCollectionStats { else -> "" // Never happens } - //List indexing is weird + // List indexing is weird existingLore[replaceIndex - 1] = "§7Obtained by $operationFormat §6$displayAmount" existingLore[replaceIndex] = "§7all-time §6Chocolate." return existingLore diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt index da461d749604..24edf8d4352b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingWeightDisplay.kt @@ -372,8 +372,8 @@ object FarmingWeightDisplay { private fun isEtaEnabled() = config.overtakeETA fun addCrop(crop: CropType, addedCounter: Int) { - //Prevent div-by-0 errors - if (addedCounter == 0) return; + // Prevent div-by-0 errors + if (addedCounter == 0) return val before = getExactWeight() localCounter[crop] = crop.getLocalCounter() + addedCounter diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt index 959ab43e4b13..e8b2d55e4310 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/CaptureFarmingGear.kt @@ -112,8 +112,8 @@ object CaptureFarmingGear { val currentCrop = itemStack.getCropType() if (currentCrop == null) { - //todo better fall back items - //todo Daedalus axe + // todo better fall back items + // todo Daedalus axe } else { currentCrop.farmingItem.setItem(itemStack) } diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/OverviewPage.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/OverviewPage.kt index c002284ab072..b05acf95999b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/OverviewPage.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/OverviewPage.kt @@ -21,7 +21,7 @@ class OverviewPage(sizeX: Int, sizeY: Int, paddingX: Int = 15, paddingY: Int = 7 update(content, footer) } - //TODO split up this 240 lines function + // TODO split up this 240 lines function fun getPage(): Pair>, List> { val content = mutableListOf>() val footer = mutableListOf() diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorCompactChat.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorCompactChat.kt index c1b6a3d8fe6a..52e49d26fe18 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorCompactChat.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorCompactChat.kt @@ -82,10 +82,10 @@ object GardenVisitorCompactChat { visitorNameFormatted = "$visitorColor$visitorName" } - //If visitor name has not yet been matched, we aren't looking at a visitor accept message, and can ignore this. - if (visitorNameFormatted.isBlank()) return; + // If visitor name has not yet been matched, we aren't looking at a visitor accept message, and can ignore this. + if (visitorNameFormatted.isBlank()) return - //Match rewards and transform + // Match rewards and transform visitorRewardPattern.matchMatcher(transformedMessage) { val rewardColor = groupOrNull("rewardcolor") val amountColor = groupOrNull("amountcolor") @@ -105,7 +105,7 @@ object GardenVisitorCompactChat { if (altAmount == null) "" else "$altAmount " } - //Don't add name for copper, farming XP, garden XP, or bits + // Don't add name for copper, farming XP, garden XP, or bits val rewardString = if (discardRewardNamePattern.matcher(reward).matches()) "" else reward rewardsList.add( @@ -127,8 +127,8 @@ object GardenVisitorCompactChat { } private fun sendCompact() { - //This prevents commission rewards, crop milestone data, etc. from triggering incorrectly - if (visitorNameFormatted.isBlank()) return; + // This prevents commission rewards, crop milestone data, etc. from triggering incorrectly + if (visitorNameFormatted.isBlank()) return if (visitorAcceptedChat.isNotEmpty()) { ChatUtils.hoverableChat(createCompactVisitorMessage(), hover = visitorAcceptedChat, prefix = false) diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt index 6b3620c184c4..152fc1b7c23a 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt @@ -228,7 +228,7 @@ object GardenVisitorDropStatistics { return "$amount" } - //todo this should just save when changed not once a second + // todo this should just save when changed not once a second @SubscribeEvent fun onSecondPassed(event: SecondPassedEvent) { saveAndUpdate() diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemPickupLog.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemPickupLog.kt index 05aaeba80703..0247a4547705 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemPickupLog.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemPickupLog.kt @@ -148,7 +148,7 @@ object ItemPickupLog { if (cursorItem != null) { val hash = cursorItem.hash() - //this prevents items inside hypixel guis counting when picked up + // this prevents items inside hypixel guis counting when picked up if (oldItemList.contains(hash)) { inventoryItems.add(cursorItem) } 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 fcd940d02767..2854b47dfbef 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ReforgeHelper.kt @@ -379,8 +379,6 @@ object ReforgeHelper { colorReforgeStone(hoverColor, hoveredReforge?.rawReforgeStoneName ?: "Random Basic Reforge") } else { inventoryContainer?.getSlot(reforgeItem)?.highlight(hoverColor) - - //?.get(reforgeItem)?. = hoverColor } hoveredReforge = null } diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/SackDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/SackDisplay.kt index eb15f6165645..26de0fa1c8ec 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/SackDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/SackDisplay.kt @@ -153,7 +153,7 @@ object SackDisplay { ), ) ) - //TOOD add cache + // TODO add cache addItemStack("MAGMA_FISH".asInternalName()) } if (config.showPrice && price != 0L) addAlignedNumber("§6${format(price)}") diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryCustomReminder.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryCustomReminder.kt index b96dc02992fc..8023de822cd1 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryCustomReminder.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryCustomReminder.kt @@ -61,6 +61,8 @@ object ChocolateFactoryCustomReminder { /** * REGEX-TEST: §cYou don't have enough Chocolate! + * REGEX-TEST: §cYou don't have the required items! + * REGEX-TEST: §cYou must collect 300B all-time Chocolate! */ private val chatMessagePattern by patternGroup.list( "chat.hide", @@ -74,11 +76,7 @@ object ChocolateFactoryCustomReminder { if (!isEnabled()) return if (!ChocolateFactoryAPI.inChocolateFactory) return if (configReminder.hideChat) { - if (chatMessagePattern.matches(event.message)) { - //§cYou don't have the required items! - //§cYou must collect 300B all-time Chocolate! -// if (event.message == "§cYou don't have enough Chocolate!") { event.blockedReason = "custom_reminder" } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryStrayTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryStrayTracker.kt index 805d2c8617b2..ed7e35691b25 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryStrayTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryStrayTracker.kt @@ -204,14 +204,14 @@ object ChocolateFactoryStrayTracker { // "Base" strays - Common -> Epic, raw choc only reward. strayLorePattern.matchMatcher(loreLine) { - //Pretty sure base strays max at Epic, but... + // Pretty sure base strays max at Legendary, but... val rarity = HoppityAPI.rarityByRabbit(group("rabbit")) ?: return@matchMatcher incrementRarity(rarity, group("amount").formatLong()) } // Fish the Rabbit fishTheRabbitPattern.matchMatcher(loreLine) { - //Also fairly sure that Fish maxes out at Rare, but... + // Also fairly sure that Fish maxes out at Rare, but... val rarity = HoppityAPI.rarityByRabbit(group("color")) ?: return@matchMatcher incrementRarity(rarity, group("amount").formatLong()) } diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/MineshaftPityDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/MineshaftPityDisplay.kt index 4415b59f5872..72f3d13d4138 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/MineshaftPityDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/MineshaftPityDisplay.kt @@ -301,11 +301,6 @@ object MineshaftPityDisplay { GEMSTONE( "Gemstone", - /*listOf( - OreType.RUBY, OreType.AMBER, OreType.AMETHYST, OreType.JADE, - OreType.SAPPHIRE, OreType.TOPAZ, OreType.JASPER, OreType.OPAL, - OreType.AQUAMARINE, OreType.CITRINE, OreType.ONYX, OreType.PERIDOT, - ),*/ OreType.entries.filter { it.isGemstone() }, 4, ItemStack(Blocks.stained_glass, 1, EnumDyeColor.BLUE.metadata), diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/OreBlock.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/OreBlock.kt index 4275a809ca92..a9e1c18920ac 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/OreBlock.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/OreBlock.kt @@ -117,7 +117,7 @@ enum class OreBlock( checkArea = { inSpidersDen }, ), - //END + // END END_STONE( checkBlock = { it.block == Blocks.end_stone }, checkArea = { inEnd }, diff --git a/src/main/java/at/hannibal2/skyhanni/features/minion/MinionFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/minion/MinionFeatures.kt index c0a9c1212d31..3908155724be 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/minion/MinionFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/minion/MinionFeatures.kt @@ -298,7 +298,7 @@ object MinionFeatures { System.currentTimeMillis() - lastClicked } ?: return "§cCan't calculate coins/day: No time data available!" - //§7Held Coins: §b151,389 + // §7Held Coins: §b151,389 // TODO use regex val coins = line.split(": §b")[1].formatDouble() 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 b0fbc2f31f83..fddb5bbda722 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 @@ -738,7 +738,7 @@ object EstimatedItemValueCalculator { var totalPrice = 0.0 val map = mutableMapOf() - //todo use repo + // todo use repo val tieredEnchants = listOf("compact", "cultivating", "champion", "expertise", "hecatomb", "toxophilite") val onlyTierOnePrices = listOf("ultimate_chimera", "ultimate_fatal_tempo", "smoldering", "ultimate_flash", "divine_gift") val onlyTierFivePrices = listOf("ferocious_mana", "hardened_mana", "mana_vampire", "strong_mana") diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/items/enchants/Enchant.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/items/enchants/Enchant.kt index 286560c73fea..244cc54bedf8 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/items/enchants/Enchant.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/items/enchants/Enchant.kt @@ -94,8 +94,7 @@ open class Enchant : Comparable { return if (this.isUltimate()) -1 else 1 } - class Normal : Enchant() { - } + class Normal : Enchant() class Ultimate : Enchant() { override fun getFormat(level: Int, itemStack: ItemStack?) = "§d§l" diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/massconfiguration/FeatureToggleProcessor.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/massconfiguration/FeatureToggleProcessor.kt index 2b33885c1e2a..020004648531 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/massconfiguration/FeatureToggleProcessor.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/massconfiguration/FeatureToggleProcessor.kt @@ -24,8 +24,8 @@ class FeatureToggleProcessor : ConfigStructureReader { latestCategory = Category(name, description) } - override fun endCategory() { - } + @Suppress("EmptyFunctionBlock") + override fun endCategory() {} override fun beginAccordion(baseObject: Any?, field: Field?, o: ConfigOption?, id: Int) { val option = o ?: return @@ -86,6 +86,6 @@ class FeatureToggleProcessor : ConfigStructureReader { ) } - override fun emitGuiOverlay(baseObject: Any?, field: Field?, option: ConfigOption?) { - } + @Suppress("EmptyFunctionBlock") + override fun emitGuiOverlay(baseObject: Any?, field: Field?, option: ConfigOption?) {} } diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/RiftTimer.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/RiftTimer.kt index 21f13c1560ee..403a786869cc 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/RiftTimer.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/RiftTimer.kt @@ -53,7 +53,7 @@ object RiftTimer { currentTime = 0.seconds } - //todo use ActionBarValueUpdateEvent + // todo use ActionBarValueUpdateEvent @SubscribeEvent fun onActionBarUpdate(event: ActionBarUpdateEvent) { if (!isEnabled()) return diff --git a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt index 4b75b3feaeeb..12791115c98c 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt @@ -137,9 +137,8 @@ object SkyHanniDebugsAndTests { } } - private fun asyncTest(args: Array) { - - } + @Suppress("EmptyFunctionBlock") + private fun asyncTest(args: Array) {} fun findNullConfig(args: Array) { println("start null finder") @@ -487,8 +486,8 @@ object SkyHanniDebugsAndTests { } @SubscribeEvent - fun onChat(event: LorenzChatEvent) { - } + @Suppress("EmptyFunctionBlock") + fun onChat(event: LorenzChatEvent) {} @SubscribeEvent fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { diff --git a/src/main/java/at/hannibal2/skyhanni/test/graph/GraphEditor.kt b/src/main/java/at/hannibal2/skyhanni/test/graph/GraphEditor.kt index 1aefeda52925..162386d4315d 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/graph/GraphEditor.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/graph/GraphEditor.kt @@ -600,7 +600,7 @@ object GraphEditor { ghostPosition = null } - private fun prune() { //TODO fix + private fun prune() { // TODO fix val hasNeighbours = nodes.associateWith { false }.toMutableMap() edges.forEach { hasNeighbours[it.node1] = true diff --git a/src/main/java/at/hannibal2/skyhanni/utils/LorenzLogger.kt b/src/main/java/at/hannibal2/skyhanni/utils/LorenzLogger.kt index 26f56fcca18f..721b7e79bf4f 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/LorenzLogger.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/LorenzLogger.kt @@ -43,6 +43,7 @@ class LorenzLogger(filePath: String) { return initLogger } + @Suppress("PrintStackTrace") private fun initLogger(): Logger { val logger = Logger.getLogger("Lorenz-Logger-" + System.nanoTime()) try { diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt index 2f17ea4d1d31..a7abe6527bdc 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt @@ -64,6 +64,7 @@ object NEUItems { .registerTypeAdapter( HypixelApiTrophyFish::class.java, object : TypeAdapter() { + @Suppress("EmptyFunctionBlock") override fun write(out: JsonWriter, value: HypixelApiTrophyFish) {} override fun read(reader: JsonReader): HypixelApiTrophyFish { diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUVersionCheck.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUVersionCheck.kt index ef2bf5591fbf..68abf84f7744 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NEUVersionCheck.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUVersionCheck.kt @@ -52,6 +52,7 @@ object NEUVersionCheck { /** * Taken and modified from Skytils */ + @Suppress("PrintStackTrace") private fun openPopupWindow(errorMessage: String, vararg options: Pair) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()) diff --git a/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt index f3076284d3e1..f118d5d665c0 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt @@ -270,7 +270,7 @@ object StringUtils { } fun progressBar(percentage: Double, steps: Int = 24): Any { - //'§5§o§2§l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §f§l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §r §e348,144.3§6/§e936k' + // '§5§o§2§l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §f§l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §l§m §r §e348,144.3§6/§e936k' val prefix = "§5§o§2" val step = "§l§m " val missing = "§f" diff --git a/src/main/java/at/hannibal2/skyhanni/utils/compat/GuiScreenUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/compat/GuiScreenUtils.kt index 0cec5aeb22ae..376ecec74b8f 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/compat/GuiScreenUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/compat/GuiScreenUtils.kt @@ -47,7 +47,7 @@ object GuiScreenUtils { val mouseY: Int get() { val height = this.scaledWindowHeight - //TODO: in later versions the height - factor is removed, i think + // TODO: in later versions the height - factor is removed, i think val y = globalMouseY * height / displayHeight //#if MC < 1.16 return height - y - 1 diff --git a/src/main/java/at/hannibal2/skyhanni/utils/compat/SkyhanniBaseScreen.kt b/src/main/java/at/hannibal2/skyhanni/utils/compat/SkyhanniBaseScreen.kt index e9b8233eafb5..11327f15d6ef 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/compat/SkyhanniBaseScreen.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/compat/SkyhanniBaseScreen.kt @@ -6,5 +6,4 @@ abstract class SkyhanniBaseScreen : GuiScreen( //#if MC > 1.12 //$$ net.minecraft.network.chat.TextComponent.EMPTY //#endif -) { -} +) From c4b7ec8846432946fdc8e648a98c0aebaf613c53 Mon Sep 17 00:00:00 2001 From: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> Date: Fri, 27 Sep 2024 13:23:45 +1000 Subject: [PATCH 004/155] Backend: Explain double baseline.xml file (#2609) --- CONTRIBUTING.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d68b88f9fe66..90fcd025049d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,9 @@ format like "- #821" to illustrate the dependency. - `detekt` is our code quality tool. It checks for code smells and style issues. - If you have a build failure stating `Analysis failed with ... weighted issues.`, you can check `versions/[target version]/build/reports/detekt/` for a comprehensive list of issues. - **There are valid reasons to deviate from the norm** - - If you have such a case, either use `@Supress("rule_name")`, or re-build the `baseline.xml` file, using `./gradlew detektBaseline`. + - If you have such a case, either use `@Supress("rule_name")`, or re-build the `baseline.xml` file, using `./gradlew detektBaselineMain`. + After running detektBaselineMain, you should find a file called `baseline-main.xml` in the `version/1.8.9` folder, rename the file to + `baseline.xml` replacing the old one. You also should copy the new contents of this file to the [main baseline file](detekt/baseline.xml) - Do not copy features from other mods. Exceptions: - Mods that are paid to use. - Mods that have reached their end of life. (Rip SBA, Dulkir and Soopy). From 122d6c830ba94fcd7c512960d5c5ab11d75fd1d5 Mon Sep 17 00:00:00 2001 From: minhperry <46137516+minhperry@users.noreply.github.com> Date: Fri, 27 Sep 2024 09:44:15 +0200 Subject: [PATCH 005/155] Fix: Item category detection (#2608) --- .../hannibal2/skyhanni/utils/UtilsPatterns.kt | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/utils/UtilsPatterns.kt b/src/main/java/at/hannibal2/skyhanni/utils/UtilsPatterns.kt index 9ce7a32c5feb..efe1ddf95e68 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/UtilsPatterns.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/UtilsPatterns.kt @@ -10,9 +10,9 @@ object UtilsPatterns { private val patternGroup = RepoPattern.group("utils") /** Examples: - §d§l§ka§r §d§l§d§lMYTHIC ACCESSORY §d§l§ka - §d§l§ka§r §d§l§d§lSHINY MYTHIC DUNGEON CHESTPLATE §d§l§ka - §c§l§ka§r §c§l§c§lVERY SPECIAL HATCESSORY §c§l§ka + §d§l§ka§r §d§lMYTHIC ACCESSORY §d§l§ka + §d§l§ka§r §d§lSHINY MYTHIC DUNGEON CHESTPLATE §d§l§ka + §c§l§ka§r §c§lVERY SPECIAL HATCESSORY §c§l§ka §6§lSHINY LEGENDARY DUNGEON BOOTS §6§lLEGENDARY DUNGEON BOOTS §5§lEPIC BOOTS @@ -20,14 +20,14 @@ object UtilsPatterns { **/ val rarityLoreLinePattern by patternGroup.pattern( "item.lore.rarity.line", - "^(?:§.){2,3}(?:.§. (?:§.){4})?(?:SHINY )?(?" + + "^(?:§.){2,3}(?:.§. (?:§.){2})?(?:SHINY )?(?" + enumJoinToPattern { it.name.replace("_", " ") } + - ") ?(?:DUNGEON )?(?[^§]*)(?: (?:§.){3}.)?$" + ") ?(?:DUNGEON )?(?[^§]*)(?: (?:§.){3}.)?$", ) val abiPhonePattern by patternGroup.pattern( "item.name.abiphone", - ".{2}Abiphone .*" + ".{2}Abiphone .*", ) /** @@ -36,17 +36,17 @@ object UtilsPatterns { */ val enchantedBookPattern by patternGroup.pattern( "item.name.enchanted.book", - "(?:§.)+Enchanted Book" + "(?:§.)+Enchanted Book", ) val baitPattern by patternGroup.pattern( "item.name.bait", - "^(Obfuscated.*|.* Bait)$" + "^(Obfuscated.*|.* Bait)$", ) val enchantmentNamePattern by patternGroup.pattern( "item.neuitems.enchantmentname", - "^(?(?:§.)*)(?[^§]+) (?[IVXL]+)(?: Book)?$" + "^(?(?:§.)*)(?[^§]+) (?[IVXL]+)(?: Book)?$", ) /** @@ -56,61 +56,61 @@ object UtilsPatterns { */ val cleanEnchantedNamePattern by patternGroup.pattern( "item.enchantment.clean.name", - "(?i)(?.*) (?[IVXL]+|[0-9]+)" + "(?i)(?.*) (?[IVXL]+|[0-9]+)", ) val potionPattern by patternGroup.pattern( "item.name.potion", - ".*Potion" + ".*Potion", ) val readAmountBeforePattern by patternGroup.pattern( "item.amount.front", - "(?: +§8(?:\\+§.)?(?[\\d.,]+[km]?)x? )?(?.*)" + "(?: +§8(?:\\+§.)?(?[\\d.,]+[km]?)x? )?(?.*)", ) val readAmountAfterPattern by patternGroup.pattern( "item.amount.behind", - "(?(?:§.)*(?:[^§] ?)+)(?:§8x(?[\\d,]+))?" + "(?(?:§.)*(?:[^§] ?)+)(?:§8x(?[\\d,]+))?", ) val costLinePattern by patternGroup.pattern( "item.cost.line", - "(?:§5§o)?§7Cost.*" + "(?:§5§o)?§7Cost.*", ) val timeAmountPattern by patternGroup.pattern( "time.amount", - "(?:(?\\d+) ?y(?:\\w* ?)?)?(?:(?\\d+) ?d(?:\\w* ?)?)?(?:(?\\d+) ?h(?:\\w* ?)?)?(?:(?\\d+) ?m(?:\\w* ?)?)?(?:(?\\d+) ?s(?:\\w* ?)?)?" + "(?:(?\\d+) ?y(?:\\w* ?)?)?(?:(?\\d+) ?d(?:\\w* ?)?)?(?:(?\\d+) ?h(?:\\w* ?)?)?(?:(?\\d+) ?m(?:\\w* ?)?)?(?:(?\\d+) ?s(?:\\w* ?)?)?", ) val playerChatPattern by patternGroup.pattern( "string.playerchat", - "(?.*?)(?:§[f7r])*: .*" + "(?.*?)(?:§[f7r])*: .*", ) val chatUsernamePattern by patternGroup.pattern( "string.chatusername", - "^(?:§\\w\\[§\\w\\d+§\\w] )?(?:(?:§\\w)+\\S )?(?(?:§\\w\\[\\w.+] )?(?:§\\w)?(?\\w+))(?: (?:§\\w)?\\[.+?])?" + "^(?:§\\w\\[§\\w\\d+§\\w] )?(?:(?:§\\w)+\\S )?(?(?:§\\w\\[\\w.+] )?(?:§\\w)?(?\\w+))(?: (?:§\\w)?\\[.+?])?", ) val isRomanPattern by RepoPattern.pattern( "string.isroman", - "^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})" + "^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})", ) val sackPattern by patternGroup.pattern( "item.sack", - ".*Sack" + ".*Sack", ) val seasonPattern by patternGroup.pattern( "skyblocktime.season", - "(?:Early |Late )?(?Spring|Summer|Autumn|Winter)" + "(?:Early |Late )?(?Spring|Summer|Autumn|Winter)", ) val tabListProfilePattern by patternGroup.pattern( "tablist.profile", - "(?:§.)+Profile: §r§a(?[\\w\\s]+[^ §]).*" + "(?:§.)+Profile: §r§a(?[\\w\\s]+[^ §]).*", ) val shopOptionsPattern by patternGroup.pattern( "inventory.shopoptions", - "Shop Trading Options" + "Shop Trading Options", ) } From 633b8f0bdd9b05f553b1bc521a83b4b7de238125 Mon Sep 17 00:00:00 2001 From: Fazfoxy <78978526+Fazfoxy@users.noreply.github.com> Date: Sat, 28 Sep 2024 12:52:56 +0100 Subject: [PATCH 006/155] Fix: Diamond/Golden heads + Master Skulls using Name not ID causing an incompatibility with NEURenamed items (#2611) Co-authored-by: Cal --- .../inventory/ItemDisplayOverlayFeatures.kt | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemDisplayOverlayFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemDisplayOverlayFeatures.kt index 1af2c8c88e67..43a598839256 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemDisplayOverlayFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemDisplayOverlayFeatures.kt @@ -66,11 +66,11 @@ object ItemDisplayOverlayFeatures { private val config get() = SkyHanniMod.feature.inventory private val patternGroup = RepoPattern.group("inventory.item.overlay") - private val masterSkullPattern by patternGroup.pattern( - "masterskull", - "(.*)Master Skull - Tier .", + private val masterSkullIDPattern by patternGroup.pattern( + "masterskull.id", + "MASTER_SKULL_TIER_(?\\d)", ) - private val gardenVacuumPatterm by patternGroup.pattern( + private val gardenVacuumPattern by patternGroup.pattern( "vacuum", "§7Vacuum Bag: §6(?\\d*) Pests?", ) @@ -131,20 +131,20 @@ object ItemDisplayOverlayFeatures { } if (MASTER_SKULL_TIER.isSelected()) { - masterSkullPattern.matchMatcher(itemName) { - return itemName.substring(itemName.length - 1) + masterSkullIDPattern.matchMatcher(internalName.asString()) { + return group("tier") } } - if (DUNGEON_HEAD_FLOOR_NUMBER.isSelected() && (itemName.contains("Golden ") || itemName.contains("Diamond "))) { + if (DUNGEON_HEAD_FLOOR_NUMBER.isSelected() && (internalName.contains("GOLD_") || internalName.contains("DIAMOND_"))) { when { - itemName.contains("Bonzo") -> return "1" - itemName.contains("Scarf") -> return "2" - itemName.contains("Professor") -> return "3" - itemName.contains("Thorn") -> return "4" - itemName.contains("Livid") -> return "5" - itemName.contains("Sadan") -> return "6" - itemName.contains("Necron") -> return "7" + internalName.contains("BONZO") -> return "1" + internalName.contains("SCARF") -> return "2" + internalName.contains("PROFESSOR") -> return "3" + internalName.contains("THORN") -> return "4" + internalName.contains("LIVID") -> return "5" + internalName.contains("SADAN") -> return "6" + internalName.contains("NECRON") -> return "7" } } @@ -252,7 +252,7 @@ object ItemDisplayOverlayFeatures { } if (VACUUM_GARDEN.isSelected() && internalName in PestAPI.vacuumVariants && isOwnItem(lore)) { - lore.matchFirst(gardenVacuumPatterm) { + lore.matchFirst(gardenVacuumPattern) { val pests = group("amount").formatLong() return if (config.vacuumBagCap) { if (pests > 39) "§640+" else "$pests" From 2178deb82a1cc3305113db1fbeee939cd7272d2e Mon Sep 17 00:00:00 2001 From: David Cole <40234707+DavidArthurCole@users.noreply.github.com> Date: Sat, 28 Sep 2024 15:23:23 -0400 Subject: [PATCH 007/155] Backend: Detekt Fixes Part 3 (#2606) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../skyhanni/config/ConfigManager.kt | 3 +- .../skyhanni/config/commands/Commands.kt | 2 + .../skyhanni/data/mob/MobDetection.kt | 14 +- ...lockEvent.kt => DungeonBlockClickEvent.kt} | 0 .../skyhanni/features/chat/ChatFilter.kt | 1 + .../features/chat/PowderMiningChatFilter.kt | 1 + .../skyhanni/features/combat/BestiaryData.kt | 4 +- .../damageindicator/DamageIndicatorManager.kt | 5 +- .../combat/damageindicator/MobFinder.kt | 14 +- .../features/dungeon/DungeonCleanEnd.kt | 10 +- .../waypoints/easter/EasterEggWaypoints.kt | 2 +- .../fishing/trophy/TrophyFishMessages.kt | 4 +- .../garden/composter/ComposterOverlay.kt | 24 +- .../garden/fortuneguide/pages/OverviewPage.kt | 5 +- .../HighlightVisitorsOutsideOfGarden.kt | 4 +- .../skyhanni/features/gui/MovableHotBar.kt | 4 +- .../customscoreboard/ScoreboardElements.kt | 4 +- .../gui/customscoreboard/ScoreboardEvent.kt | 66 ++--- .../customscoreboard/UnknownLinesHandler.kt | 234 +++++++++--------- .../SuperpairExperimentInformationDisplay.kt | 2 +- .../SuperpairsClicksAlert.kt | 11 +- .../abilitycooldown/ItemAbilityCooldown.kt | 4 +- .../features/mining/KingTalismanHelper.kt | 4 +- .../features/misc/MarkedPlayerManager.kt | 4 +- .../items/EstimatedItemValueCalculator.kt | 15 +- .../DefaultConfigOptionGui.kt | 4 +- .../misc/visualwords/ModifyVisualWords.kt | 2 +- .../rift/area/dreadfarm/VoltHighlighter.kt | 4 +- .../test/SkyHanniConfigSearchResetCommand.kt | 1 + .../skyhanni/test/SkyHanniDebugsAndTests.kt | 6 +- .../skyhanni/utils/InventoryUtils.kt | 4 +- .../skyhanni/utils/ItemNameResolver.kt | 6 +- .../skyhanni/utils/MinecraftConsoleFilter.kt | 1 + .../hannibal2/skyhanni/utils/RenderUtils.kt | 1 + ...pter.kt => ItemStackTypeAdapterFactory.kt} | 0 35 files changed, 246 insertions(+), 224 deletions(-) rename src/main/java/at/hannibal2/skyhanni/events/{DungeonClickedBlockEvent.kt => DungeonBlockClickEvent.kt} (100%) rename src/main/java/at/hannibal2/skyhanni/utils/json/{ItemStackTypeAdapter.kt => ItemStackTypeAdapterFactory.kt} (100%) diff --git a/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt b/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt index da4b54942dfd..b00fc7a8f749 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/ConfigManager.kt @@ -66,7 +66,8 @@ class ConfigManager { private fun setConfigHolder(type: ConfigFileType, value: Any) { require(value.javaClass == type.clazz) - @Suppress("UNCHECKED_CAST") (type.property as KMutableProperty0).set(value) + @Suppress("UNCHECKED_CAST") + (type.property as KMutableProperty0).set(value) (jsonHolder as MutableMap)[type] = value } diff --git a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt index 9f2e3cc3fd71..4974c80f2d51 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/commands/Commands.kt @@ -186,6 +186,7 @@ object Commands { registerCommand("shnavigate", "Using path finder to go to locatons") { NavigationHelper.onCommand(it) } } + @Suppress("LongMethod") private fun usersNormal() { registerCommand( "shmarkplayer", @@ -502,6 +503,7 @@ object Commands { ) { ScoreboardData.toggleMonitor() } } + @Suppress("LongMethod") private fun developersCodingHelp() { registerCommand("shrepopatterns", "See where regexes are loaded from") { RepoPatternGui.open() } registerCommand("shtest", "Unused test command.") { SkyHanniDebugsAndTests.testCommand(it) } diff --git a/src/main/java/at/hannibal2/skyhanni/data/mob/MobDetection.kt b/src/main/java/at/hannibal2/skyhanni/data/mob/MobDetection.kt index 9b7ba2cfd5e1..a763961f8b54 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/mob/MobDetection.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/mob/MobDetection.kt @@ -302,13 +302,13 @@ object MobDetection { val entity = retry.entity if (retry.times == MAX_RETRIES) { MobData.logger.log( - "`${retry.entity.name}`${retry.entity.entityId} missed {\n " - + "is already Found: ${MobData.entityToMob[retry.entity] != null})." - + "\n Position: ${retry.entity.getLorenzVec()}\n " - + "DistanceC: ${ - entity.getLorenzVec().distanceChebyshevIgnoreY(LocationUtils.playerLocation()) - }\n" - + "Relative Position: ${entity.getLorenzVec() - LocationUtils.playerLocation()}\n " + + "`${retry.entity.name}`${retry.entity.entityId} missed {\n " + + "is already Found: ${MobData.entityToMob[retry.entity] != null})." + + "\n Position: ${retry.entity.getLorenzVec()}\n " + + "DistanceC: ${ + entity.getLorenzVec().distanceChebyshevIgnoreY(LocationUtils.playerLocation()) + }\n" + + "Relative Position: ${entity.getLorenzVec() - LocationUtils.playerLocation()}\n " + "}", ) // Uncomment this to make it closed a loop diff --git a/src/main/java/at/hannibal2/skyhanni/events/DungeonClickedBlockEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/DungeonBlockClickEvent.kt similarity index 100% rename from src/main/java/at/hannibal2/skyhanni/events/DungeonClickedBlockEvent.kt rename to src/main/java/at/hannibal2/skyhanni/events/DungeonBlockClickEvent.kt diff --git a/src/main/java/at/hannibal2/skyhanni/features/chat/ChatFilter.kt b/src/main/java/at/hannibal2/skyhanni/features/chat/ChatFilter.kt index d058ddc50ce1..4d9af4c9d042 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/chat/ChatFilter.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/chat/ChatFilter.kt @@ -519,6 +519,7 @@ object ChatFilter { * @param message The message to check * @return The reason why the message was blocked, empty if not blocked */ + @Suppress("CyclomaticComplexMethod") private fun block(message: String): String? = when { config.hypixelHub && message.isPresent("lobby") -> "lobby" config.empty && StringUtils.isEmpty(message) -> "empty" diff --git a/src/main/java/at/hannibal2/skyhanni/features/chat/PowderMiningChatFilter.kt b/src/main/java/at/hannibal2/skyhanni/features/chat/PowderMiningChatFilter.kt index 698a671141da..25c1c04cb0db 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/chat/PowderMiningChatFilter.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/chat/PowderMiningChatFilter.kt @@ -252,6 +252,7 @@ object PowderMiningChatFilter { "§r§[fa9][❤❈☘⸕✎✧] (?Rough|Flawed|Fine|Flawless) (?Ruby|Amethyst|Jade|Amber|Sapphire|Topaz) Gemstone( §r§8x(?[\\d,]+))?", ) + @Suppress("CyclomaticComplexMethod") fun block(message: String): String? { // Generic "you uncovered a chest" message if (uncoverChestPattern.matches(message)) return "powder_mining_chest" diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/BestiaryData.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/BestiaryData.kt index 957f1ecd0b29..3b2b936802c0 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/BestiaryData.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/BestiaryData.kt @@ -441,8 +441,8 @@ object BestiaryData { return true } else if (name == "Search Results") { val loreList = stack.getLore() - if (loreList.size >= 2 && loreList[0].startsWith("§7Query: §a") - && loreList[1].startsWith("§7Results: §a") + if (loreList.size >= 2 && loreList[0].startsWith("§7Query: §a") && + loreList[1].startsWith("§7Results: §a") ) { return true } diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/DamageIndicatorManager.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/DamageIndicatorManager.kt index 0391e40a3697..4f0dad4b84be 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/DamageIndicatorManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/DamageIndicatorManager.kt @@ -67,6 +67,8 @@ import kotlin.time.Duration import kotlin.time.Duration.Companion.seconds @SkyHanniModule +// TODO cut class into smaller pieces +@Suppress("LargeClass") object DamageIndicatorManager { private var mobFinder: MobFinder? = null @@ -75,7 +77,6 @@ object DamageIndicatorManager { private val enderSlayerHitsNumberPattern = ".* §[5fd]§l(?\\d+) Hits?".toPattern() - private var data = mapOf() private val damagePattern = "[✧✯]?(\\d+[⚔+✧❤♞☄✷ﬗ✯]*)".toPattern() @@ -288,7 +289,7 @@ object DamageIndicatorManager { BossType.SLAYER_BLAZE_QUAZII_3, BossType.SLAYER_BLAZE_QUAZII_4, - // TODO f3/m3 4 guardians, f2/m2 4 boss room fighters + // TODO f3/m3 4 guardians, f2/m2 4 boss room fighters -> true else -> false diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/MobFinder.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/MobFinder.kt index 975e3b4f8457..399040179934 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/MobFinder.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/MobFinder.kt @@ -88,11 +88,11 @@ class MobFinder { else -> { when (entity) { /* - * Note that the order does matter here. - * For example, if you put EntityZombie before EntityPigZombie, - * EntityPigZombie will never be reached because EntityPigZombie extends EntityZombie. - * Please take this into consideration if you are to modify this. - */ + * Note that the order does matter here. + * For example, if you put EntityZombie before EntityPigZombie, + * EntityPigZombie will never be reached because EntityPigZombie extends EntityZombie. + * Please take this into consideration if you are to modify this. + */ is EntityOtherPlayerMP -> tryAddEntityOtherPlayerMP(entity) is EntityIronGolem -> tryAddEntityIronGolem(entity) is EntityPigZombie -> tryAddEntityPigZombie(entity) @@ -392,8 +392,8 @@ class MobFinder { } private fun tryAddEntityMagmaCube(entity: EntityLivingBase) = when { - entity.hasNameTagWith(15, "§e﴾ §8[§7Lv500§8] §l§4§lMagma Boss§r ") - && entity.hasMaxHealth(200_000_000, true) -> { + entity.hasNameTagWith(15, "§e﴾ §8[§7Lv500§8] §l§4§lMagma Boss§r ") && + entity.hasMaxHealth(200_000_000, true) -> { EntityResult(bossType = BossType.NETHER_MAGMA_BOSS, ignoreBlocks = true) } diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonCleanEnd.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonCleanEnd.kt index eca75bc7014b..308a5b14438f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonCleanEnd.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonCleanEnd.kt @@ -99,11 +99,11 @@ object DungeonCleanEnd { if (entity == Minecraft.getMinecraft().thePlayer) return - if (config.F3IgnoreGuardians - && DungeonAPI.isOneOf("F3", "M3") - && entity is EntityGuardian - && entity.entityId != lastBossId - && Minecraft.getMinecraft().thePlayer.isSneaking + if (config.F3IgnoreGuardians && + DungeonAPI.isOneOf("F3", "M3") && + entity is EntityGuardian && + entity.entityId != lastBossId && + Minecraft.getMinecraft().thePlayer.isSneaking ) { return } diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/lobby/waypoints/easter/EasterEggWaypoints.kt b/src/main/java/at/hannibal2/skyhanni/features/event/lobby/waypoints/easter/EasterEggWaypoints.kt index 2df035702f8c..6831f1440115 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/lobby/waypoints/easter/EasterEggWaypoints.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/lobby/waypoints/easter/EasterEggWaypoints.kt @@ -106,7 +106,7 @@ object EasterEggWaypoints { 'Easter Eggs: §a0/§a30' ' ' '§ewww.hypixel.net' - */ + */ private fun checkScoreboardEasterSpecific(): Boolean { val a = ScoreboardData.sidebarLinesFormatted.any { it.contains("Hypixel Level") } val b = ScoreboardData.sidebarLinesFormatted.any { it.contains("Easter") } diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishMessages.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishMessages.kt index 7068ef8aa7b4..f97bd56c9466 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishMessages.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishMessages.kt @@ -91,8 +91,8 @@ object TrophyFishMessages { } private fun shouldBlockTrophyFish(rarity: TrophyRarity, amount: Int) = - config.bronzeHider && rarity == TrophyRarity.BRONZE && amount != 1 - || config.silverHider && rarity == TrophyRarity.SILVER && amount != 1 + config.bronzeHider && rarity == TrophyRarity.BRONZE && amount != 1 || + config.silverHider && rarity == TrophyRarity.SILVER && amount != 1 @SubscribeEvent fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterOverlay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterOverlay.kt index fa45e579dfa3..6faa7746a797 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterOverlay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterOverlay.kt @@ -564,18 +564,24 @@ object ComposterOverlay { } } + private val blockedItems = listOf( + "POTION_AFFINITY_TALISMAN", + "CROPIE_TALISMAN", + "SPEED_TALISMAN", + "SIMPLE_CARROT_CANDY", + ) + + private fun isBlockedArmor(internalName: String): Boolean { + return internalName.endsWith("_BOOTS") || + internalName.endsWith("_HELMET") || + internalName.endsWith("_CHESTPLATE") || + internalName.endsWith("_LEGGINGS") + } + private fun updateOrganicMatterFactors(baseValues: Map): Map { val map = mutableMapOf() for ((internalName, _) in NEUItems.allNeuRepoItems()) { - if (internalName == "POTION_AFFINITY_TALISMAN" - || internalName == "CROPIE_TALISMAN" - || internalName.endsWith("_BOOTS") - || internalName.endsWith("_HELMET") - || internalName.endsWith("_CHESTPLATE") - || internalName.endsWith("_LEGGINGS") - || internalName == "SPEED_TALISMAN" - || internalName == "SIMPLE_CARROT_CANDY" - ) continue + if (blockedItems.contains(internalName) || isBlockedArmor(internalName)) continue var (newId, amount) = NEUItems.getPrimitiveMultiplier(internalName.asInternalName()) if (amount <= 9) continue diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/OverviewPage.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/OverviewPage.kt index b05acf95999b..00e994f7d4f5 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/OverviewPage.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/fortuneguide/pages/OverviewPage.kt @@ -21,8 +21,9 @@ class OverviewPage(sizeX: Int, sizeY: Int, paddingX: Int = 15, paddingY: Int = 7 update(content, footer) } - // TODO split up this 240 lines function - fun getPage(): Pair>, List> { + // TODO split up this 240 lines function - remove suppression when done + @Suppress("CyclomaticComplexMethod", "LongMethod") + private fun getPage(): Pair>, List> { val content = mutableListOf>() val footer = mutableListOf() val timeUntilCakes = FFStats.cakeExpireTime.timeUntil().format(TimeUnit.HOUR, maxUnits = 1) diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/HighlightVisitorsOutsideOfGarden.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/HighlightVisitorsOutsideOfGarden.kt index 8a8c11165564..a413f295ab27 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/HighlightVisitorsOutsideOfGarden.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/HighlightVisitorsOutsideOfGarden.kt @@ -62,8 +62,8 @@ object HighlightVisitorsOutsideOfGarden { val possibleJsons = visitorJson[mode] ?: return false val skinOrType = getSkinOrTypeFor(entity) return possibleJsons.any { - (it.position == null || it.position.distance(entity.position.toLorenzVec()) < 1) - && it.skinOrType == skinOrType + (it.position == null || it.position.distance(entity.position.toLorenzVec()) < 1) && + it.skinOrType == skinOrType } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/gui/MovableHotBar.kt b/src/main/java/at/hannibal2/skyhanni/features/gui/MovableHotBar.kt index cf49749b27e9..bee90a69694b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/gui/MovableHotBar.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/gui/MovableHotBar.kt @@ -39,6 +39,6 @@ object MovableHotBar { } fun isEnabled(): Boolean = - (LorenzUtils.inSkyBlock || (Minecraft.getMinecraft().thePlayer != null && config.showOutsideSkyblock)) - && config.editable + (LorenzUtils.inSkyBlock || (Minecraft.getMinecraft().thePlayer != null && config.showOutsideSkyblock)) && + config.editable } diff --git a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardElements.kt b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardElements.kt index 7636d43ebabf..0289a3c81862 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardElements.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardElements.kt @@ -491,8 +491,8 @@ private fun getHeatDisplayPair(): List { ) } -private fun getHeatShowWhen() = inAnyIsland(IslandType.CRYSTAL_HOLLOWS) - && CustomScoreboard.activeLines.any { ScoreboardPattern.heatPattern.matches(it) } +private fun getHeatShowWhen() = inAnyIsland(IslandType.CRYSTAL_HOLLOWS) && + CustomScoreboard.activeLines.any { ScoreboardPattern.heatPattern.matches(it) } private fun getColdDisplayPair(): List { val cold = -MiningAPI.cold diff --git a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardEvent.kt b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardEvent.kt index 9f3c009e57f6..3b3b6448b368 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardEvent.kt @@ -372,9 +372,9 @@ private fun getWinterLines() = buildList { } private fun getWinterShowWhen(): Boolean = getSbLines().any { - ScoreboardPattern.winterEventStartPattern.matches(it) - || (ScoreboardPattern.winterNextWavePattern.matches(it) && !it.endsWith("Soon!")) - || ScoreboardPattern.winterWavePattern.matches(it) + ScoreboardPattern.winterEventStartPattern.matches(it) || + (ScoreboardPattern.winterNextWavePattern.matches(it) && !it.endsWith("Soon!")) || + ScoreboardPattern.winterWavePattern.matches(it) } private fun getNewYearLines() = listOf(getSbLines().first { SbPattern.newYearPattern.matches(it) }) @@ -444,8 +444,8 @@ private fun getBroodmotherLines(): List = private fun getMiningEventsLines() = buildList { // Wind - if (getSbLines().any { SbPattern.windCompassPattern.matches(it) } - && getSbLines().any { SbPattern.windCompassArrowPattern.matches(it) }) { + if (getSbLines().any { SbPattern.windCompassPattern.matches(it) } && + getSbLines().any { SbPattern.windCompassArrowPattern.matches(it) }) { add(getSbLines().first { SbPattern.windCompassPattern.matches(it) }) add("| ${getSbLines().first { SbPattern.windCompassArrowPattern.matches(it) }} §f|") } @@ -457,15 +457,15 @@ private fun getMiningEventsLines() = buildList { } // Zone Events - if (getSbLines().any { SbPattern.miningEventPattern.matches(it) } - && getSbLines().any { SbPattern.miningEventZonePattern.matches(it) }) { + if (getSbLines().any { SbPattern.miningEventPattern.matches(it) } && + getSbLines().any { SbPattern.miningEventZonePattern.matches(it) }) { add(getSbLines().first { SbPattern.miningEventPattern.matches(it) }.removePrefix("Event: ")) add("in ${getSbLines().first { SbPattern.miningEventZonePattern.matches(it) }.removePrefix("Zone: ")}") } // Zone Events but no Zone Line - if (getSbLines().any { SbPattern.miningEventPattern.matches(it) } - && getSbLines().none { SbPattern.miningEventZonePattern.matches(it) }) { + if (getSbLines().any { SbPattern.miningEventPattern.matches(it) } && + getSbLines().none { SbPattern.miningEventZonePattern.matches(it) }) { add( getSbLines().first { SbPattern.miningEventPattern.matches(it) } .removePrefix("Event: "), @@ -473,22 +473,22 @@ private fun getMiningEventsLines() = buildList { } // Mithril Gourmand - if (getSbLines().any { SbPattern.mithrilRemainingPattern.matches(it) } - && getSbLines().any { SbPattern.mithrilYourMithrilPattern.matches(it) }) { + if (getSbLines().any { SbPattern.mithrilRemainingPattern.matches(it) } && + getSbLines().any { SbPattern.mithrilYourMithrilPattern.matches(it) }) { add(getSbLines().first { SbPattern.mithrilRemainingPattern.matches(it) }) add(getSbLines().first { SbPattern.mithrilYourMithrilPattern.matches(it) }) } // Raffle - if (getSbLines().any { SbPattern.raffleTicketsPattern.matches(it) } - && getSbLines().any { SbPattern.rafflePoolPattern.matches(it) }) { + if (getSbLines().any { SbPattern.raffleTicketsPattern.matches(it) } && + getSbLines().any { SbPattern.rafflePoolPattern.matches(it) }) { add(getSbLines().first { SbPattern.raffleTicketsPattern.matches(it) }) add(getSbLines().first { SbPattern.rafflePoolPattern.matches(it) }) } // Raid - if (getSbLines().any { SbPattern.yourGoblinKillsPattern.matches(it) } - && getSbLines().any { SbPattern.remainingGoblinPattern.matches(it) }) { + if (getSbLines().any { SbPattern.yourGoblinKillsPattern.matches(it) } && + getSbLines().any { SbPattern.remainingGoblinPattern.matches(it) }) { add(getSbLines().first { SbPattern.yourGoblinKillsPattern.matches(it) }) add(getSbLines().first { SbPattern.remainingGoblinPattern.matches(it) }) } @@ -509,17 +509,17 @@ private fun getDamageLines(): List = (getSbLines().first { SbPattern.bossDamagePattern.matches(it) }) private fun getDamageShowWhen(): Boolean = - getSbLines().any { SbPattern.bossHPPattern.matches(it) } - && getSbLines().any { SbPattern.bossDamagePattern.matches(it) } + getSbLines().any { SbPattern.bossHPPattern.matches(it) } && + getSbLines().any { SbPattern.bossDamagePattern.matches(it) } private fun getMagmaBossLines() = getSbLines().filter { line -> - SbPattern.magmaBossPattern.matches(line) - || SbPattern.damageSoakedPattern.matches(line) - || SbPattern.killMagmasPattern.matches(line) - || SbPattern.killMagmasDamagedSoakedBarPattern.matches(line) - || SbPattern.reformingPattern.matches(line) - || SbPattern.bossHealthPattern.matches(line) - || SbPattern.bossHealthBarPattern.matches(line) + SbPattern.magmaBossPattern.matches(line) || + SbPattern.damageSoakedPattern.matches(line) || + SbPattern.killMagmasPattern.matches(line) || + SbPattern.killMagmasDamagedSoakedBarPattern.matches(line) || + SbPattern.reformingPattern.matches(line) || + SbPattern.bossHealthPattern.matches(line) || + SbPattern.bossHealthBarPattern.matches(line) } private fun getMagmaBossShowWhen(): Boolean = SbPattern.magmaChamberPattern.matches(HypixelData.skyBlockArea) @@ -542,15 +542,15 @@ private fun getCarnivalLines() = listOf( private fun getCarnivalShowWhen(): Boolean = SbPattern.carnivalPattern.anyMatches(getSbLines()) private fun getRiftLines() = getSbLines().filter { line -> - RiftBloodEffigies.heartsPattern.matches(line) - || SbPattern.riftHotdogTitlePattern.matches(line) - || SbPattern.timeLeftPattern.matches(line) - || SbPattern.riftHotdogEatenPattern.matches(line) - || SbPattern.riftAveikxPattern.matches(line) - || SbPattern.riftHayEatenPattern.matches(line) - || SbPattern.cluesPattern.matches(line) - || SbPattern.barryProtestorsQuestlinePattern.matches(line) - || SbPattern.barryProtestorsHandledPattern.matches(line) + RiftBloodEffigies.heartsPattern.matches(line) || + SbPattern.riftHotdogTitlePattern.matches(line) || + SbPattern.timeLeftPattern.matches(line) || + SbPattern.riftHotdogEatenPattern.matches(line) || + SbPattern.riftAveikxPattern.matches(line) || + SbPattern.riftHayEatenPattern.matches(line) || + SbPattern.cluesPattern.matches(line) || + SbPattern.barryProtestorsQuestlinePattern.matches(line) || + SbPattern.barryProtestorsHandledPattern.matches(line) } private fun getEssenceLines(): List = listOf(getSbLines().first { SbPattern.essencePattern.matches(it) }) diff --git a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/UnknownLinesHandler.kt b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/UnknownLinesHandler.kt index fa693f648dbc..38612f29703b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/UnknownLinesHandler.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/UnknownLinesHandler.kt @@ -16,128 +16,130 @@ object UnknownLinesHandler { internal lateinit var remoteOnlyPatterns: Array + /** + * Remove known lines with patterns + **/ + private val patternsToExclude = mutableListOf( + PurseAPI.coinsPattern, + SbPattern.motesPattern, + BitsAPI.bitsScoreboardPattern, + SbPattern.heatPattern, + SbPattern.copperPattern, + SbPattern.locationPattern, + SbPattern.lobbyCodePattern, + SbPattern.datePattern, + SbPattern.timePattern, + SbPattern.footerPattern, + SbPattern.yearVotesPattern, + SbPattern.votesPattern, + SbPattern.waitingForVotePattern, + SbPattern.northstarsPattern, + SbPattern.profileTypePattern, + SbPattern.autoClosingPattern, + SbPattern.startingInPattern, + SbPattern.timeElapsedPattern, + SbPattern.instanceShutdownPattern, + SbPattern.keysPattern, + SbPattern.clearedPattern, + SbPattern.soloPattern, + SbPattern.teammatesPattern, + SbPattern.floor3GuardiansPattern, + SbPattern.m7dragonsPattern, + SbPattern.wavePattern, + SbPattern.tokensPattern, + SbPattern.submergesPattern, + SbPattern.medalsPattern, + SbPattern.lockedPattern, + SbPattern.cleanUpPattern, + SbPattern.pastingPattern, + SbPattern.peltsPattern, + SbPattern.mobLocationPattern, + SbPattern.jacobsContestPattern, + SbPattern.plotPattern, + SbPattern.powderGreedyPattern, + SbPattern.windCompassPattern, + SbPattern.windCompassArrowPattern, + SbPattern.miningEventPattern, + SbPattern.miningEventZonePattern, + SbPattern.raffleUselessPattern, + SbPattern.raffleTicketsPattern, + SbPattern.rafflePoolPattern, + SbPattern.mithrilUselessPattern, + SbPattern.mithrilRemainingPattern, + SbPattern.mithrilYourMithrilPattern, + SbPattern.nearbyPlayersPattern, + SbPattern.uselessGoblinPattern, + SbPattern.remainingGoblinPattern, + SbPattern.yourGoblinKillsPattern, + SbPattern.magmaBossPattern, + SbPattern.damageSoakedPattern, + SbPattern.killMagmasPattern, + SbPattern.killMagmasDamagedSoakedBarPattern, + SbPattern.reformingPattern, + SbPattern.bossHealthPattern, + SbPattern.bossHealthBarPattern, + SbPattern.broodmotherPattern, + SbPattern.bossHPPattern, + SbPattern.bossDamagePattern, + SbPattern.slayerQuestPattern, + SbPattern.essencePattern, + SbPattern.redstonePattern, + SbPattern.anniversaryPattern, + SbPattern.visitingPattern, + SbPattern.flightDurationPattern, + SbPattern.dojoChallengePattern, + SbPattern.dojoDifficultyPattern, + SbPattern.dojoPointsPattern, + SbPattern.dojoTimePattern, + SbPattern.objectivePattern, + ServerRestartTitle.restartingGreedyPattern, + SbPattern.travelingZooPattern, + SbPattern.newYearPattern, + SbPattern.spookyPattern, + SbPattern.winterEventStartPattern, + SbPattern.winterNextWavePattern, + SbPattern.winterWavePattern, + SbPattern.winterMagmaLeftPattern, + SbPattern.winterTotalDmgPattern, + SbPattern.winterCubeDmgPattern, + SbPattern.riftDimensionPattern, + RiftBloodEffigies.heartsPattern, + SbPattern.wtfAreThoseLinesPattern, + SbPattern.timeLeftPattern, + SbPattern.darkAuctionCurrentItemPattern, + SbPattern.coldPattern, + SbPattern.riftHotdogTitlePattern, + SbPattern.riftHotdogEatenPattern, + SbPattern.mineshaftNotStartedPattern, + SbPattern.queuePattern, + SbPattern.queueTierPattern, + SbPattern.queuePositionPattern, + SbPattern.fortunateFreezingBonusPattern, + SbPattern.riftAveikxPattern, + SbPattern.riftHayEatenPattern, + SbPattern.fossilDustPattern, + SbPattern.cluesPattern, + SbPattern.barryProtestorsQuestlinePattern, + SbPattern.barryProtestorsHandledPattern, + SbPattern.carnivalPattern, + SbPattern.carnivalTasksPattern, + SbPattern.carnivalTokensPattern, + SbPattern.carnivalFruitsPattern, + SbPattern.carnivalScorePattern, + SbPattern.carnivalCatchStreakPattern, + SbPattern.carnivalAccuracyPattern, + SbPattern.carnivalKillsPattern, + ) + private var remoteOnlyPatternsAdded = false + fun handleUnknownLines() { val sidebarLines = CustomScoreboard.activeLines var unknownLines = sidebarLines.map { it.removeResets() }.filter { it.isNotBlank() }.filter { it.trim().length > 3 } - /** - * Remove known lines with patterns - **/ - val patternsToExclude = mutableListOf( - PurseAPI.coinsPattern, - SbPattern.motesPattern, - BitsAPI.bitsScoreboardPattern, - SbPattern.heatPattern, - SbPattern.copperPattern, - SbPattern.locationPattern, - SbPattern.lobbyCodePattern, - SbPattern.datePattern, - SbPattern.timePattern, - SbPattern.footerPattern, - SbPattern.yearVotesPattern, - SbPattern.votesPattern, - SbPattern.waitingForVotePattern, - SbPattern.northstarsPattern, - SbPattern.profileTypePattern, - SbPattern.autoClosingPattern, - SbPattern.startingInPattern, - SbPattern.timeElapsedPattern, - SbPattern.instanceShutdownPattern, - SbPattern.keysPattern, - SbPattern.clearedPattern, - SbPattern.soloPattern, - SbPattern.teammatesPattern, - SbPattern.floor3GuardiansPattern, - SbPattern.m7dragonsPattern, - SbPattern.wavePattern, - SbPattern.tokensPattern, - SbPattern.submergesPattern, - SbPattern.medalsPattern, - SbPattern.lockedPattern, - SbPattern.cleanUpPattern, - SbPattern.pastingPattern, - SbPattern.peltsPattern, - SbPattern.mobLocationPattern, - SbPattern.jacobsContestPattern, - SbPattern.plotPattern, - SbPattern.powderGreedyPattern, - SbPattern.windCompassPattern, - SbPattern.windCompassArrowPattern, - SbPattern.miningEventPattern, - SbPattern.miningEventZonePattern, - SbPattern.raffleUselessPattern, - SbPattern.raffleTicketsPattern, - SbPattern.rafflePoolPattern, - SbPattern.mithrilUselessPattern, - SbPattern.mithrilRemainingPattern, - SbPattern.mithrilYourMithrilPattern, - SbPattern.nearbyPlayersPattern, - SbPattern.uselessGoblinPattern, - SbPattern.remainingGoblinPattern, - SbPattern.yourGoblinKillsPattern, - SbPattern.magmaBossPattern, - SbPattern.damageSoakedPattern, - SbPattern.killMagmasPattern, - SbPattern.killMagmasDamagedSoakedBarPattern, - SbPattern.reformingPattern, - SbPattern.bossHealthPattern, - SbPattern.bossHealthBarPattern, - SbPattern.broodmotherPattern, - SbPattern.bossHPPattern, - SbPattern.bossDamagePattern, - SbPattern.slayerQuestPattern, - SbPattern.essencePattern, - SbPattern.redstonePattern, - SbPattern.anniversaryPattern, - SbPattern.visitingPattern, - SbPattern.flightDurationPattern, - SbPattern.dojoChallengePattern, - SbPattern.dojoDifficultyPattern, - SbPattern.dojoPointsPattern, - SbPattern.dojoTimePattern, - SbPattern.objectivePattern, - ServerRestartTitle.restartingGreedyPattern, - SbPattern.travelingZooPattern, - SbPattern.newYearPattern, - SbPattern.spookyPattern, - SbPattern.winterEventStartPattern, - SbPattern.winterNextWavePattern, - SbPattern.winterWavePattern, - SbPattern.winterMagmaLeftPattern, - SbPattern.winterTotalDmgPattern, - SbPattern.winterCubeDmgPattern, - SbPattern.riftDimensionPattern, - RiftBloodEffigies.heartsPattern, - SbPattern.wtfAreThoseLinesPattern, - SbPattern.timeLeftPattern, - SbPattern.darkAuctionCurrentItemPattern, - SbPattern.coldPattern, - SbPattern.riftHotdogTitlePattern, - SbPattern.riftHotdogEatenPattern, - SbPattern.mineshaftNotStartedPattern, - SbPattern.queuePattern, - SbPattern.queueTierPattern, - SbPattern.queuePositionPattern, - SbPattern.fortunateFreezingBonusPattern, - SbPattern.riftAveikxPattern, - SbPattern.riftHayEatenPattern, - SbPattern.fossilDustPattern, - SbPattern.cluesPattern, - SbPattern.barryProtestorsQuestlinePattern, - SbPattern.barryProtestorsHandledPattern, - SbPattern.carnivalPattern, - SbPattern.carnivalTasksPattern, - SbPattern.carnivalTokensPattern, - SbPattern.carnivalFruitsPattern, - SbPattern.carnivalScorePattern, - SbPattern.carnivalCatchStreakPattern, - SbPattern.carnivalAccuracyPattern, - SbPattern.carnivalKillsPattern, - ) - - if (::remoteOnlyPatterns.isInitialized) { + if (::remoteOnlyPatterns.isInitialized && !remoteOnlyPatternsAdded) { patternsToExclude.addAll(remoteOnlyPatterns) + remoteOnlyPatternsAdded = true } unknownLines = unknownLines.filterNot { line -> diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/SuperpairExperimentInformationDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/SuperpairExperimentInformationDisplay.kt index b1ee566598b3..cb3102ca8eed 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/SuperpairExperimentInformationDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/SuperpairExperimentInformationDisplay.kt @@ -16,8 +16,8 @@ import net.minecraft.item.ItemStack import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.time.Duration.Companion.milliseconds -@SkyHanniModule // TODO important: all use cases of listOf in combination with string needs to be gone. no caching, constant new list creation, and bad design. +@SkyHanniModule object SuperpairExperimentInformationDisplay { private val config get() = SkyHanniMod.feature.inventory.experimentationTable diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/SuperpairsClicksAlert.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/SuperpairsClicksAlert.kt index ef99c40bab97..6c35eb5b1e8c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/SuperpairsClicksAlert.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/SuperpairsClicksAlert.kt @@ -47,13 +47,12 @@ object SuperpairsClicksAlert { if (!targetInventoryNames.any { event.inventoryName.contains(it) }) return if ( // checks if we have succeeded in either minigame - (event.inventoryName.contains("Chronomatron") - && ((event.inventoryItems[4]?.displayName?.removeColor() + (event.inventoryName.contains("Chronomatron") && + ((event.inventoryItems[4]?.displayName?.removeColor() ?.let { currentRoundRegex.find(it) } - ?.groups?.get(1)?.value?.toInt() ?: -1) > roundsNeeded)) - - || (event.inventoryName.contains("Ultrasequencer") - && event.inventoryItems.entries + ?.groups?.get(1)?.value?.toInt() ?: -1) > roundsNeeded)) || + (event.inventoryName.contains("Ultrasequencer") && + event.inventoryItems.entries .filter { it.key < 45 } .any { it.value.stackSize > roundsNeeded }) ) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbilityCooldown.kt b/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbilityCooldown.kt index 5748220c5e38..5abf8679a9fe 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbilityCooldown.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbilityCooldown.kt @@ -364,8 +364,8 @@ object ItemAbilityCooldown { if (message == "§dCreeper Veil §r§aActivated!") { ItemAbility.WITHER_CLOAK.activate(LorenzColor.LIGHT_PURPLE) } - if (message == "§dCreeper Veil §r§cDe-activated! §r§8(Expired)" - || message == "§cNot enough mana! §r§dCreeper Veil §r§cDe-activated!" + if (message == "§dCreeper Veil §r§cDe-activated! §r§8(Expired)" || + message == "§cNot enough mana! §r§dCreeper Veil §r§cDe-activated!" ) { ItemAbility.WITHER_CLOAK.activate() } diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/KingTalismanHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/KingTalismanHelper.kt index 94b292fdf511..057d2f476948 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/KingTalismanHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/KingTalismanHelper.kt @@ -103,8 +103,8 @@ object KingTalismanHelper { skyblockYear = SkyBlockTime.now().year } - fun isEnabled() = config.enabled && LorenzUtils.inSkyBlock - && (IslandType.DWARVEN_MINES.isInIsland() || config.outsideMines) + fun isEnabled() = config.enabled && LorenzUtils.inSkyBlock && + (IslandType.DWARVEN_MINES.isInIsland() || config.outsideMines) @SubscribeEvent fun onInventoryOpen(event: InventoryFullyOpenedEvent) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/MarkedPlayerManager.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/MarkedPlayerManager.kt index 05b1eaf35853..d5129a5fb420 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/MarkedPlayerManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/MarkedPlayerManager.kt @@ -78,8 +78,8 @@ object MarkedPlayerManager { fun isMarkedPlayer(player: String): Boolean = player.lowercase() in playerNamesToMark - private fun isEnabled() = (LorenzUtils.inSkyBlock || OutsideSbFeature.MARKED_PLAYERS.isSelected()) - && config.highlightInWorld + private fun isEnabled() = (LorenzUtils.inSkyBlock || OutsideSbFeature.MARKED_PLAYERS.isSelected()) && + config.highlightInWorld fun replaceInChat(string: String): String { if (!config.highlightInChat) return string 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 fddb5bbda722..3f56230c476e 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 @@ -62,6 +62,8 @@ import io.github.notenoughupdates.moulconfig.observer.Property import net.minecraft.item.ItemStack import java.util.Locale +// TODO split into smaler sub classes +@Suppress("LargeClass") object EstimatedItemValueCalculator { private val config get() = SkyHanniMod.feature.inventory.estimatedItemValues @@ -129,12 +131,13 @@ object EstimatedItemValueCalculator { return Pair(totalPrice, basePrice) } - private fun isKuudraSet(internalName: String) = (kuudraSets.any { internalName.contains(it) } && listOf( - "CHESTPLATE", - "LEGGINGS", - "HELMET", - "BOOTS", - ).any { internalName.endsWith(it) }) + private fun isKuudraSet(internalName: String) = (kuudraSets.any { internalName.contains(it) } && + listOf( + "CHESTPLATE", + "LEGGINGS", + "HELMET", + "BOOTS", + ).any { internalName.endsWith(it) }) private fun addAttributeCost(stack: ItemStack, list: MutableList): Double { val attributes = stack.getAttributes() ?: return 0.0 diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/massconfiguration/DefaultConfigOptionGui.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/massconfiguration/DefaultConfigOptionGui.kt index bbe40db5cd4a..1ebbaed684cb 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/massconfiguration/DefaultConfigOptionGui.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/massconfiguration/DefaultConfigOptionGui.kt @@ -81,8 +81,8 @@ class DefaultConfigOptionGui( fun button(title: String, tooltip: List, func: () -> Unit) { val width = mc.fontRendererObj.getStringWidth(title) var overMouse = false - if (mouseX - ((this.width - xSize) / 2 + padding) in i..(i + width) - && mouseY - (height + ySize) / 2 in -barSize..0 + if (mouseX - ((this.width - xSize) / 2 + padding) in i..(i + width) && + mouseY - (height + ySize) / 2 in -barSize..0 ) { overMouse = true hoveringTextToDraw = tooltip diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/ModifyVisualWords.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/ModifyVisualWords.kt index 8999ba074941..8f7551573665 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/ModifyVisualWords.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/visualwords/ModifyVisualWords.kt @@ -54,7 +54,7 @@ object ModifyVisualWords { it.groupValues[1] + it.groupValues[2].reversed() } } - */ + */ modifiedText } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/area/dreadfarm/VoltHighlighter.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/area/dreadfarm/VoltHighlighter.kt index 4ff57d73d263..77807e5bf176 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/area/dreadfarm/VoltHighlighter.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/area/dreadfarm/VoltHighlighter.kt @@ -38,8 +38,8 @@ object VoltHighlighter { fun onArmorChange(event: EntityEquipmentChangeEvent) { if (!RiftAPI.inRift() || !config.voltWarning) return val player = Minecraft.getMinecraft().thePlayer ?: return - if (event.isHead && getVoltState(event.entity) == VoltState.DOING_LIGHTNING - && event.entity.positionVector.squareDistanceTo(player.positionVector) <= LIGHTNING_DISTANCE * LIGHTNING_DISTANCE + if (event.isHead && getVoltState(event.entity) == VoltState.DOING_LIGHTNING && + event.entity.positionVector.squareDistanceTo(player.positionVector) <= LIGHTNING_DISTANCE * LIGHTNING_DISTANCE ) { chargingSince = chargingSince.editCopy { this[event.entity] = SimpleTimeMark.now() diff --git a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniConfigSearchResetCommand.kt b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniConfigSearchResetCommand.kt index 34bf36b5fbbf..32cacc6292e0 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniConfigSearchResetCommand.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniConfigSearchResetCommand.kt @@ -274,6 +274,7 @@ object SkyHanniConfigSearchResetCommand { val fieldName = "$parentName.$name" val newObj = field.makeAccessible().get(obj) map[fieldName] = newObj + @Suppress("ComplexCondition") if (newObj != null && newObj !is Boolean && newObj !is String && newObj !is Long && newObj !is Int && newObj !is Double && newObj !is Position && !newObj.javaClass.isEnum) { map.putAll(loadAllFields(fieldName, newObj, depth + 1)) } diff --git a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt index 12791115c98c..540dc7fa2b62 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt @@ -493,7 +493,8 @@ object SkyHanniDebugsAndTests { fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { if (!LorenzUtils.inSkyBlock) return - @Suppress("ConstantConditionIf") if (false) { + @Suppress("ConstantConditionIf") + if (false) { itemRenderDebug() } @@ -528,7 +529,8 @@ object SkyHanniDebugsAndTests { @SubscribeEvent fun onGuiRenderChestGuiOverlayRender(event: GuiRenderEvent.ChestGuiOverlayRenderEvent) { - @Suppress("ConstantConditionIf") if (false) { + @Suppress("ConstantConditionIf") + if (false) { dragAbleTest() } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/InventoryUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/InventoryUtils.kt index fd240b1457b9..7ff17f96506b 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/InventoryUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/InventoryUtils.kt @@ -61,8 +61,8 @@ object InventoryUtils { getItemsInOwnInventory().filter { predicate(it) }.sumOf { it.stackSize } fun inStorage() = openInventoryName().let { - (it.contains("Storage") && !it.contains("Rift Storage")) - || it.contains("Ender Chest") || it.contains("Backpack") + (it.contains("Storage") && !it.contains("Rift Storage")) || + it.contains("Ender Chest") || it.contains("Backpack") } fun getItemInHand(): ItemStack? = Minecraft.getMinecraft().thePlayer.heldItem diff --git a/src/main/java/at/hannibal2/skyhanni/utils/ItemNameResolver.kt b/src/main/java/at/hannibal2/skyhanni/utils/ItemNameResolver.kt index 996d19a938ed..e3776308f246 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/ItemNameResolver.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/ItemNameResolver.kt @@ -100,9 +100,9 @@ object ItemNameResolver { UtilsPatterns.enchantmentNamePattern.matchMatcher(enchantmentName) { val name = group("name").trim { it <= ' ' } val ultimate = group("format").lowercase().contains("§l") - ((if (ultimate && name != "Ultimate Wise" && name != "Ultimate Jerry") "ULTIMATE_" else "") - + turboCheck(name).replace(" ", "_").replace("-", "_").uppercase() - + ";" + group("level").romanToDecimal()) + ((if (ultimate && name != "Ultimate Wise" && name != "Ultimate Jerry") "ULTIMATE_" else "") + + turboCheck(name).replace(" ", "_").replace("-", "_").uppercase() + + ";" + group("level").romanToDecimal()) } private fun turboCheck(text: String): String { diff --git a/src/main/java/at/hannibal2/skyhanni/utils/MinecraftConsoleFilter.kt b/src/main/java/at/hannibal2/skyhanni/utils/MinecraftConsoleFilter.kt index dde61c7c1917..19e912215df2 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/MinecraftConsoleFilter.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/MinecraftConsoleFilter.kt @@ -14,6 +14,7 @@ import org.apache.logging.log4j.core.LoggerContext import org.apache.logging.log4j.core.filter.AbstractFilter import org.apache.logging.log4j.message.Message +@Suppress("CommentWrapping") class MinecraftConsoleFilter(private val loggerConfigName: String) : AbstractFilter( /* onMatch = */ Filter.Result.ACCEPT, /* onMismatch = */ Filter.Result.DENY, diff --git a/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt index 609ccebae24b..805db90f5313 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt @@ -52,6 +52,7 @@ import kotlin.math.sqrt import kotlin.time.Duration import kotlin.time.DurationUnit +@Suppress("LargeClass") object RenderUtils { enum class HorizontalAlignment(private val value: String) { diff --git a/src/main/java/at/hannibal2/skyhanni/utils/json/ItemStackTypeAdapter.kt b/src/main/java/at/hannibal2/skyhanni/utils/json/ItemStackTypeAdapterFactory.kt similarity index 100% rename from src/main/java/at/hannibal2/skyhanni/utils/json/ItemStackTypeAdapter.kt rename to src/main/java/at/hannibal2/skyhanni/utils/json/ItemStackTypeAdapterFactory.kt From a610f68b510837789e6e375749e3a1afa324efcb Mon Sep 17 00:00:00 2001 From: minhperry <46137516+minhperry@users.noreply.github.com> Date: Sat, 28 Sep 2024 21:36:00 +0200 Subject: [PATCH 008/155] Improvement: Blaze Slayer Flares cooldown (#2601) --- .../abilitycooldown/ItemAbility.kt | 4 ++- .../abilitycooldown/ItemAbilityCooldown.kt | 25 +++++++++++++++---- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbility.kt b/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbility.kt index 020feba76976..68f9798c309b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbility.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbility.kt @@ -29,6 +29,8 @@ enum class ItemAbility( ATOMSPLIT_KATANA(4, "VORPAL_KATANA", "VOIDEDGE_KATANA", ignoreMageCooldownReduction = true), RAGNAROCK_AXE(20), WAND_OF_ATONEMENT(7, "WAND_OF_HEALING", "WAND_OF_MENDING", "WAND_OF_RESTORATION"), + SOS_FLARE(10), + ALERT_FLARE(20, "WARNING_FLARE"), GOLEM_SWORD(3), END_STONE_SWORD(5), @@ -75,7 +77,7 @@ enum class ItemAbility( cooldownInSeconds, actionBarDetection = false, alternativePosition = alternativePosition, - ignoreMageCooldownReduction = ignoreMageCooldownReduction + ignoreMageCooldownReduction = ignoreMageCooldownReduction, ) { newVariant = true alternateInternalNames.forEach { diff --git a/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbilityCooldown.kt b/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbilityCooldown.kt index 5abf8679a9fe..7715f7456055 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbilityCooldown.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/itemabilities/abilitycooldown/ItemAbilityCooldown.kt @@ -44,11 +44,11 @@ object ItemAbilityCooldown { private val patternGroup = RepoPattern.group("item.abilities.cooldown") private val youAlignedOthersPattern by patternGroup.pattern( "alignedother", - "§eYou aligned §r§a.* §r§eother player(s)?!" + "§eYou aligned §r§a.* §r§eother player(s)?!", ) private val youBuffedYourselfPattern by patternGroup.pattern( "buffedyourself", - "§aYou buffed yourself for §r§c\\+\\d+❁ Strength" + "§aYou buffed yourself for §r§c\\+\\d+❁ Strength", ) private var lastAbility = "" @@ -57,6 +57,10 @@ object ItemAbilityCooldown { private val WEIRD_TUBA = "WEIRD_TUBA".asInternalName() private val WEIRDER_TUBA = "WEIRDER_TUBA".asInternalName() private val VOODOO_DOLL_WILTED = "VOODOO_DOLL_WILTED".asInternalName() + private val WARNING_FLARE = "WARNING_FLARE".asInternalName() + private val ALERT_FLARE = "ALERT_FLARE".asInternalName() + private val SOS_FLARE = "SOS_FLARE".asInternalName() + @SubscribeEvent fun onPlaySound(event: PlaySoundEvent) { @@ -87,7 +91,7 @@ object ItemAbilityCooldown { val internalName = InventoryUtils.getItemInHand()?.getInternalName() ?: return if (!internalName.equalsOneOf( "SHADOW_FURY".asInternalName(), - "STARRED_SHADOW_FURY".asInternalName() + "STARRED_SHADOW_FURY".asInternalName(), ) ) return @@ -175,7 +179,7 @@ object ItemAbilityCooldown { event.soundName == "mob.bat.idle" && event.pitch == 0.4920635f && event.volume == 1.0f -> { ItemAbility.ROYAL_PIGEON.sound() } - + // Wand of Strength event.soundName == "random.eat" && event.pitch == 0.4920635f && event.volume == 1.0f -> { ItemAbility.WAND_OF_STRENGTH.sound() } @@ -183,9 +187,20 @@ object ItemAbilityCooldown { event.soundName == "fire.ignite" && event.pitch == 0.74603176f && event.volume == 1.0f -> { ItemAbility.TACTICAL_INSERTION.activate(LorenzColor.DARK_PURPLE, 3_000) } + event.soundName == "mob.zombie.remedy" && event.pitch == 1.8888888f && event.volume == 0.7f -> { ItemAbility.TACTICAL_INSERTION.activate(null, 17_000) } + // Blaze Slayer Flares + event.soundName == "fireworks.launch" && event.pitch == 1.0f && event.volume == 3.0f -> { + val recent = InventoryUtils.recentItemsInHand.values + if (WARNING_FLARE in recent || ALERT_FLARE in recent) { + ItemAbility.ALERT_FLARE.sound() + } + if (SOS_FLARE in recent) { + ItemAbility.SOS_FLARE.sound() + } + } } } @@ -276,7 +291,7 @@ object ItemAbilityCooldown { items = abilityItems.entries.associateByTo( mutableMapOf(), { it.key.getIdentifier() }, - { kp -> kp.value.map { createItemText(it) } } + { kp -> kp.value.map { createItemText(it) } }, ).mapKeysNotNull { it.key } } From f4419b8c77926fd160a04e5b888864e91ee17b0d Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Sat, 28 Sep 2024 21:38:11 +0200 Subject: [PATCH 009/155] abstracted navigation rerouting (#2597) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../hannibal2/skyhanni/data/IslandGraphs.kt | 228 +++++++++++++++--- .../at/hannibal2/skyhanni/data/model/Graph.kt | 76 +----- .../event/hoppity/HoppityEggLocator.kt | 4 +- .../features/event/hoppity/HoppityNpc.kt | 5 +- .../skyhanni/features/mining/TunnelsMaps.kt | 11 +- .../skyhanni/features/misc/IslandAreas.kt | 18 +- .../misc/pathfind/NavigationHelper.kt | 8 +- .../rift/everywhere/EnigmaSoulWaypoints.kt | 3 +- .../skyhanni/test/SkyHanniDebugsAndTests.kt | 2 +- .../skyhanni/test/graph/GraphEditor.kt | 5 +- .../test/graph/GraphEditorBugFinder.kt | 27 ++- .../at/hannibal2/skyhanni/utils/GraphUtils.kt | 71 +++++- .../hannibal2/skyhanni/utils/RenderUtils.kt | 16 +- 13 files changed, 332 insertions(+), 142 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/data/IslandGraphs.kt b/src/main/java/at/hannibal2/skyhanni/data/IslandGraphs.kt index 1f8e45afb749..bd417e5f75ea 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/IslandGraphs.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/IslandGraphs.kt @@ -4,8 +4,8 @@ import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.api.event.HandleEvent import at.hannibal2.skyhanni.data.model.Graph import at.hannibal2.skyhanni.data.model.GraphNode -import at.hannibal2.skyhanni.data.model.findShortestPathAsGraphWithDistance import at.hannibal2.skyhanni.data.repo.RepoUtils +import at.hannibal2.skyhanni.events.EntityMoveEvent import at.hannibal2.skyhanni.events.IslandChangeEvent import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent import at.hannibal2.skyhanni.events.LorenzTickEvent @@ -14,8 +14,10 @@ import at.hannibal2.skyhanni.events.RepositoryReloadEvent import at.hannibal2.skyhanni.events.skyblock.ScoreboardAreaChangeEvent import at.hannibal2.skyhanni.features.misc.IslandAreas import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule -import at.hannibal2.skyhanni.test.SkyHanniDebugsAndTests +import at.hannibal2.skyhanni.utils.ChatUtils +import at.hannibal2.skyhanni.utils.CollectionUtils.sorted import at.hannibal2.skyhanni.utils.DelayedRun +import at.hannibal2.skyhanni.utils.GraphUtils import at.hannibal2.skyhanni.utils.LocationUtils import at.hannibal2.skyhanni.utils.LocationUtils.canBeSeen import at.hannibal2.skyhanni.utils.LocationUtils.distanceSqToPlayer @@ -24,11 +26,16 @@ import at.hannibal2.skyhanni.utils.LorenzColor import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland import at.hannibal2.skyhanni.utils.LorenzVec +import at.hannibal2.skyhanni.utils.NumberUtil.roundTo import at.hannibal2.skyhanni.utils.RegexUtils.matches import at.hannibal2.skyhanni.utils.RenderUtils.draw3DLine import at.hannibal2.skyhanni.utils.RenderUtils.draw3DPathWithWaypoint -import at.hannibal2.skyhanni.utils.RenderUtils.drawWaypointFilled +import at.hannibal2.skyhanni.utils.chat.Text.asComponent +import at.hannibal2.skyhanni.utils.chat.Text.hover +import at.hannibal2.skyhanni.utils.chat.Text.onClick +import at.hannibal2.skyhanni.utils.chat.Text.send import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern +import net.minecraft.client.Minecraft import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import java.awt.Color import java.io.File @@ -98,9 +105,16 @@ object IslandGraphs { val existsForThisIsland get() = currentIslandGraph != null var closedNote: GraphNode? = null + var secondClosedNote: GraphNode? = null private var currentTarget: LorenzVec? = null + private var currentTargetNode: GraphNode? = null + private var label = "" + private var distanceViaNodes = 0.0 + private var distanceToNextNode = 0.0 + private var totalDistance = 0.0 private var color = Color.WHITE + private var shouldAllowRerouting = false private var showGoalExact = false private var onFound: () -> Unit = {} private var goal: GraphNode? = null @@ -143,6 +157,9 @@ object IslandGraphs { @SubscribeEvent fun onWorldChange(event: LorenzWorldChangeEvent) { currentIslandGraph = null + if (currentTarget != null) { + "§e[SkyHanni] Navigation stopped because of world switch!".asComponent().send(PATHFIND_ID) + } reset() } @@ -188,11 +205,11 @@ object IslandGraphs { } val graph = RepoUtils.getConstant(SkyHanniMod.repo.repoLocation, constant, Graph.gson, Graph::class.java) + IslandAreas.display = null setNewGraph(graph) } fun setNewGraph(graph: Graph) { - IslandAreas.display = null reset() currentIslandGraph = graph @@ -205,26 +222,26 @@ object IslandGraphs { } private fun reset() { + stop() closedNote = null - currentTarget = null - goal = null - fastestPath = null } @SubscribeEvent fun onTick(event: LorenzTickEvent) { if (!LorenzUtils.inSkyBlock) return handleTick() + if (event.isMod(2)) { + checkMoved() + } } private fun handleTick() { val prevClosed = closedNote - val graph = currentIslandGraph ?: return - currentTarget?.let { if (it.distanceToPlayer() < 3) { onFound() + "§e[SkyHanni] Navigation reached §r$label§e!".asComponent().send(PATHFIND_ID) reset() } if (!condition()) { @@ -232,17 +249,44 @@ object IslandGraphs { } } - val newClosest = if (SkyHanniDebugsAndTests.c == 0.0) { - graph.minBy { it.position.distanceSqToPlayer() } - } else null + val graph = currentIslandGraph ?: return + val sortedNodes = graph.sortedBy { it.position.distanceSqToPlayer() } + val newClosest = sortedNodes.first() if (closedNote == newClosest) return + if (onCurrentPath()) return + closedNote = newClosest + secondClosedNote = sortedNodes.getOrNull(1) onNewNote() + hasMoved = false + if (newClosest == prevClosed) return + findNewPath() + } + + private fun onCurrentPath(): Boolean { + val path = fastestPath ?: return false + val closest = path.nodes.minBy { it.position.distanceSqToPlayer() } + val distance = closest.position.distanceToPlayer() + if (distance > 5) return false + + if (distance < 3) { + val index = path.nodes.indexOf(closest) + val newNodes = path.drop(index) + val newGraph = Graph(newNodes) + fastestPath = newGraph + newNodes.getOrNull(1)?.let { + secondClosedNote = it + } + setFastestPath(newGraph to newGraph.totalLenght(), setPath = false) + } + return true + } + + private fun findNewPath() { + val goal = IslandGraphs.goal ?: return val closest = closedNote ?: return - val goal = goal ?: return - if (closest == prevClosed) return - val (path, distance) = graph.findShortestPathAsGraphWithDistance(closest, goal) + val (path, distance) = GraphUtils.findShortestPathAsGraphWithDistance(closest, goal) val first = path.firstOrNull() val second = path.getOrNull(1) @@ -260,64 +304,194 @@ object IslandGraphs { setFastestPath(path to (distance + nodeDistance)) } - private fun setFastestPath(path: Pair) { - fastestPath = path.takeIf { it.first.isNotEmpty() }?.first + private fun Graph.totalLenght(): Double = nodes.zipWithNext().sumOf { (a, b) -> a.position.distance(b.position) } + + private fun handlePositionChange() { + val secondClosestNode = secondClosedNote ?: return + distanceToNextNode = secondClosestNode.position.distanceToPlayer() + updateChat() + } + + private var hasMoved = false - fastestPath?.let { - fastestPath = Graph(cutByMaxDistance(it.nodes, 3.0)) + private fun checkMoved() { + if (hasMoved) { + hasMoved = false + if (goal != null) { + handlePositionChange() + } } } + @SubscribeEvent + fun onPlayerMove(event: EntityMoveEvent) { + if (LorenzUtils.inSkyBlock && event.entity == Minecraft.getMinecraft().thePlayer) { + hasMoved = true + } + } + + private fun setFastestPath(path: Pair, setPath: Boolean = true) { + val (fastestPath, distance) = path.takeIf { it.first.isNotEmpty() } ?: return + val nodes = fastestPath.nodes.toMutableList() + if (Minecraft.getMinecraft().thePlayer.onGround) { + nodes.add(0, GraphNode(0, LocationUtils.playerLocation())) + } + if (setPath) { + this.fastestPath = Graph(cutByMaxDistance(nodes, 3.0)) + } + + val diff = fastestPath.getOrNull(1)?.let { + fastestPath.first().position.distance(it.position) + } ?: 0.0 + this.distanceViaNodes = distance - diff + updateChat() + } + private fun onNewNote() { // TODO create an event IslandAreas.noteMoved() + if (shouldAllowRerouting) { + tryRerouting() + } + } + + private fun tryRerouting() { + val target = currentTargetNode ?: return + val closest = closedNote ?: return + val map = GraphUtils.findAllShortestDistances(closest).distances.filter { it.key.sameNameAndTags(target) } + val newTarget = map.sorted().keys.firstOrNull() ?: return + if (newTarget != target) { + ChatUtils.debug("Rerouting navigation..") + newTarget.pathFind(label, color, onFound, allowRerouting = true, condition) + } } fun stop() { currentTarget = null goal = null fastestPath = null + currentTargetNode = null + label = "" + distanceToNextNode = 0.0 + distanceViaNodes = 0.0 + totalDistance = 0.0 + } + + /** + * Activates pathfinding, with this graph node as goal. + * + * @param label The name of the naviation goal in chat. + * @param color The color of the lines in world. + * @param onFound The callback that gets fired when the goal is reached. + * @param allowRerouting When a different node with same name and tags as the origianl goal is closer to the player, starts routing to this instead. + * @param condition The pathfinding stops when the condition is no longer valid. + */ + fun GraphNode.pathFind( + label: String, + color: Color = LorenzColor.WHITE.toColor(), + onFound: () -> Unit = {}, + allowRerouting: Boolean = false, + condition: () -> Boolean = { true }, + ) { + reset() + currentTargetNode = this + shouldAllowRerouting = allowRerouting + pathFind0(location = position, label, color, onFound, showGoalExact = false, condition) } + /** + * Activates pathfinding to a location in the island. + * + * @param location The goal of the pathfinder. + * @param label The name of the naviation goal in chat. + * @param color The color of the lines in world. + * @param onFound The callback that gets fired when the goal is reached. + * @param showGoalExact Wether the exact location should be shown as a waypoint, as well as shwoing a line from last node to the goal location. + * @param condition The pathfinding stops when the condition is no longer valid. + */ fun pathFind( location: LorenzVec, + label: String, color: Color = LorenzColor.WHITE.toColor(), onFound: () -> Unit = {}, showGoalExact: Boolean = false, condition: () -> Boolean = { true }, ) { reset() + shouldAllowRerouting = false + pathFind0(location, label, color, onFound, showGoalExact, condition) + } + + private fun pathFind0( + location: LorenzVec, + label: String, + color: Color = LorenzColor.WHITE.toColor(), + onFound: () -> Unit = {}, + showGoalExact: Boolean = false, + condition: () -> Boolean = { true }, + ) { currentTarget = location + this.label = label this.color = color this.onFound = onFound this.showGoalExact = showGoalExact this.condition = condition val graph = currentIslandGraph ?: return goal = graph.minBy { it.position.distance(currentTarget!!) } + updateChat() + } + + private const val PATHFIND_ID = -6457563 + + private fun updateChat() { + if (label == "") return + val finalDistance = distanceViaNodes + distanceToNextNode + if (finalDistance == 0.0) return + val distance = finalDistance.roundTo(1) + if (totalDistance == 0.0 || distance > totalDistance) { + totalDistance = distance + } + sendChatDistance(distance) + } + + private fun sendChatDistance(distance: Double) { + val percentage = (1 - (distance / totalDistance)) * 100 + val componentText = "§e[SkyHanni] Navigating to §r$label §f[§e$distance§f] §f(§c${percentage.roundTo(1)}%§f)".asComponent() + componentText.onClick( + onClick = { + stop() + "§e[SkyHanni] Navigation manually stopped!".asComponent().send(PATHFIND_ID) + }, + ) + componentText.hover = "§eClick to stop navigating!".asComponent() + componentText.send(PATHFIND_ID) } @SubscribeEvent fun onRenderWorld(event: LorenzRenderWorldEvent) { if (!LorenzUtils.inSkyBlock) return - val path = fastestPath ?: return + var path = fastestPath ?: return - var graph = path - graph = skipNodes(graph) ?: graph + if (path.nodes.size > 1) { + val hideNearby = if (Minecraft.getMinecraft().thePlayer.onGround) 5 else 7 + path = Graph(path.nodes.takeLastWhile { it.position.distanceToPlayer() > hideNearby }) + } +// graph = skipNodes(graph) ?: graph event.draw3DPathWithWaypoint( - graph, + path, color, 6, true, bezierPoint = 2.0, textSize = 1.0, + markLastBlock = showGoalExact, ) - val lastNode = graph.nodes.last().position - val targetLocation = currentTarget ?: return - event.draw3DLine(lastNode.add(0.5, 0.5, 0.5), targetLocation.add(0.5, 0.5, 0.5), color, 4, true) if (showGoalExact) { - event.drawWaypointFilled(targetLocation, color) + val targetLocation = currentTarget ?: return + val lastNode = path.nodes.last().position + event.draw3DLine(lastNode.add(0.5, 0.5, 0.5), targetLocation.add(0.5, 0.5, 0.5), color, 4, true) } } diff --git a/src/main/java/at/hannibal2/skyhanni/data/model/Graph.kt b/src/main/java/at/hannibal2/skyhanni/data/model/Graph.kt index bc4be57a16d4..6e1f1d07f0a2 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/model/Graph.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/model/Graph.kt @@ -1,5 +1,6 @@ package at.hannibal2.skyhanni.data.model +import at.hannibal2.skyhanni.features.misc.pathfind.NavigationHelper import at.hannibal2.skyhanni.utils.LorenzVec import at.hannibal2.skyhanni.utils.NumberUtil.roundTo import at.hannibal2.skyhanni.utils.json.SkyHanniTypeAdapters.registerTypeAdapter @@ -8,7 +9,6 @@ import com.google.gson.GsonBuilder import com.google.gson.JsonElement import com.google.gson.annotations.Expose import com.google.gson.stream.JsonToken -import java.util.PriorityQueue // TODO: This class should be disambiguated into a NodePath and a Graph class @JvmInline @@ -138,6 +138,10 @@ value class Graph( fun fromJson(json: String): Graph = gson.fromJson(json) fun fromJson(json: JsonElement): Graph = gson.fromJson(json) } + + fun toPositionsList() = this.map { it.position } + + fun toJson(): String = gson.toJson(this) } // The node object that gets parsed from/to json @@ -164,9 +168,11 @@ class GraphNode(val id: Int, val position: LorenzVec, val name: String? = null, return true } -} -fun Graph.findShortestPathAsGraph(start: GraphNode, end: GraphNode): Graph = this.findShortestPathAsGraphWithDistance(start, end).first + fun sameNameAndTags(other: GraphNode): Boolean = name == other.name && allowedTags == other.allowedTags + + private val allowedTags get() = tags.filter { it in NavigationHelper.allowedTags } +} data class DijkstraTree( val origin: GraphNode, @@ -188,57 +194,6 @@ data class DijkstraTree( val lastVisitedNode: GraphNode, ) -/** - * Find a tree of distances to the [start] node using dijkstra's algorithm. - */ -fun Graph.findDijkstraDistances( - start: GraphNode, - /** - * Bail out early before collecting all the distances to all nodes in the graph. This will not collect valid distance data for *all* - * nodes for which bailout matches, but only the closest one. - */ - bailout: (GraphNode) -> Boolean, -): DijkstraTree { - val distances = mutableMapOf() - val previous = mutableMapOf() - val visited = mutableSetOf() - val queue = PriorityQueue(compareBy { distances.getOrDefault(it, Double.MAX_VALUE) }) - var lastVisitedNode: GraphNode = start - - distances[start] = 0.0 - queue.add(start) - - while (queue.isNotEmpty()) { - val current = queue.poll() - lastVisitedNode = current - if (bailout(current)) break - - visited.add(current) - - current.neighbours.forEach { (neighbour, weight) -> - if (neighbour !in visited) { - val newDistance = distances.getValue(current) + weight - if (newDistance < distances.getOrDefault(neighbour, Double.MAX_VALUE)) { - distances[neighbour] = newDistance - previous[neighbour] = current - queue.add(neighbour) - } - } - } - } - - return DijkstraTree( - start, - distances, - previous, - lastVisitedNode, - ) -} - -fun Graph.findAllShortestDistances(start: GraphNode): DijkstraTree { - return findDijkstraDistances(start) { false } -} - fun DijkstraTree.findPathToDestination(end: GraphNode): Pair { val distances = this val reversePath = buildList { @@ -251,16 +206,3 @@ fun DijkstraTree.findPathToDestination(end: GraphNode): Pair { } return Graph(reversePath.reversed()) to distances.distances[end]!! } - -fun Graph.findShortestPathAsGraphWithDistance(start: GraphNode, end: GraphNode): Pair { - val distances = findDijkstraDistances(start) { it == end } - return distances.findPathToDestination(end) -} - -fun Graph.findShortestPath(start: GraphNode, end: GraphNode): List = this.findShortestPathAsGraph(start, end).toPositionsList() - -fun Graph.findShortestDistance(start: GraphNode, end: GraphNode): Double = this.findShortestPathAsGraphWithDistance(start, end).second - -fun Graph.toPositionsList() = this.map { it.position } - -fun Graph.toJson(): String = Graph.gson.toJson(this) diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggLocator.kt b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggLocator.kt index 468fecbcb480..dbe06fbf991f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggLocator.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggLocator.kt @@ -280,7 +280,7 @@ object HoppityEggLocator { val color = config.waypointColor.toChromaColor() - IslandGraphs.pathFind(location, color, condition = { config.showPathFinder }) + IslandGraphs.pathFind(location, "Hoppity Egg", color, condition = { config.showPathFinder }) } fun isValidEggLocation(location: LorenzVec): Boolean = HoppityEggLocations.islandLocations.any { it.distance(location) < 5.0 } @@ -333,7 +333,7 @@ object HoppityEggLocator { HoppityEggLocations.apiEggLocations[LorenzUtils.skyBlockIsland]?.let { for ((i, location) in it.values.withIndex()) { if (i == target) { - IslandGraphs.pathFind(location) + IslandGraphs.pathFind(location, "Hoppity Test") return } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityNpc.kt b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityNpc.kt index 70e148aa9732..c120c3d649fd 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityNpc.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityNpc.kt @@ -58,7 +58,10 @@ object HoppityNpc { "New rabbits are available at §aHoppity's Shop§e!", config::hoppityShopReminder, actionName = "warp to hub", - action = { HypixelCommands.warp("hub") }, + action = { + HypixelCommands.warp("hub") + //afterNextIslandwarpTtp hub: IslandGraphs.pathFind(hoppity) + }, ) lastReminderSent = SimpleTimeMark.now() diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/TunnelsMaps.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/TunnelsMaps.kt index 5214ff162eb5..eb89da6963e3 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/TunnelsMaps.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/TunnelsMaps.kt @@ -5,8 +5,6 @@ import at.hannibal2.skyhanni.data.ClickType import at.hannibal2.skyhanni.data.IslandType import at.hannibal2.skyhanni.data.model.Graph import at.hannibal2.skyhanni.data.model.GraphNode -import at.hannibal2.skyhanni.data.model.findShortestDistance -import at.hannibal2.skyhanni.data.model.findShortestPathAsGraphWithDistance import at.hannibal2.skyhanni.events.ConfigLoadEvent import at.hannibal2.skyhanni.events.GuiContainerEvent import at.hannibal2.skyhanni.events.GuiRenderEvent @@ -28,6 +26,7 @@ import at.hannibal2.skyhanni.utils.ColorUtils.getFirstColorCode import at.hannibal2.skyhanni.utils.ColorUtils.toChromaColor import at.hannibal2.skyhanni.utils.ConditionalUtils.onToggle import at.hannibal2.skyhanni.utils.DelayedRun +import at.hannibal2.skyhanni.utils.GraphUtils import at.hannibal2.skyhanni.utils.HypixelCommands import at.hannibal2.skyhanni.utils.ItemUtils.getInternalNameOrNull import at.hannibal2.skyhanni.utils.ItemUtils.getLore @@ -81,6 +80,7 @@ object TunnelsMaps { private var active: String = "" private lateinit var fairySouls: Map + // TODO what is this? why is there a difference? can this be replaced with GraphNodeTag.GRIND_ORES? private lateinit var newGemstones: Map> private lateinit var oldGemstones: Map> @@ -98,7 +98,7 @@ object TunnelsMaps { val list = possibleLocations[name] ?: return null val offCooldown = list.filter { cooldowns[it]?.isInPast() != false } - val best = offCooldown.minByOrNull { graph.findShortestDistance(closed, it) } ?: list.minBy { + val best = offCooldown.minByOrNull { GraphUtils.findShortestDistance(closed, it) } ?: list.minBy { cooldowns[it] ?: SimpleTimeMark.farPast() } if (cooldowns[best]?.isInPast() != false) { @@ -249,7 +249,8 @@ object TunnelsMaps { this.oldGemstones = oldGemstone normalLocations = other translateTable.clear() - DelayedRun.runNextTick { // Needs to be delayed since the config may not be loaded + DelayedRun.runNextTick { + // Needs to be delayed since the config may not be loaded locationDisplay = generateLocationsDisplay() } } @@ -398,7 +399,7 @@ object TunnelsMaps { val closest = closedNote ?: return val goal = goal ?: return if (closest == prevClosed && goal == prevGoal) return - val (path, distance) = graph.findShortestPathAsGraphWithDistance(closest, goal) + val (path, distance) = GraphUtils.findShortestPathAsGraphWithDistance(closest, goal) val first = path.firstOrNull() val second = path.getOrNull(1) diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/IslandAreas.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/IslandAreas.kt index 5ece5897c5df..cddbd201db57 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/IslandAreas.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/IslandAreas.kt @@ -2,6 +2,7 @@ package at.hannibal2.skyhanni.features.misc import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.data.IslandGraphs +import at.hannibal2.skyhanni.data.IslandGraphs.pathFind import at.hannibal2.skyhanni.data.model.Graph import at.hannibal2.skyhanni.data.model.GraphNode import at.hannibal2.skyhanni.data.model.GraphNodeTag @@ -13,7 +14,6 @@ import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule -import at.hannibal2.skyhanni.utils.ChatUtils import at.hannibal2.skyhanni.utils.CollectionUtils.addSearchString import at.hannibal2.skyhanni.utils.CollectionUtils.sorted import at.hannibal2.skyhanni.utils.ColorUtils.toChromaColor @@ -81,7 +81,7 @@ object IslandAreas { nodes = finalNodes } - var hasMoved = false + private var hasMoved = false @SubscribeEvent fun onTick(event: LorenzTickEvent) { @@ -144,11 +144,6 @@ object IslandAreas { val isTarget = node.name == targetNode?.name val color = if (isTarget) LorenzColor.GOLD else tag.color - // trying to find a faster path to the existing target - if (isTarget && node != targetNode) { - ChatUtils.debug("Found a faster node, rerouting...") - setTarget(node) - } val coloredName = "${color.getChatColor()}${name}" var suffix = "" @@ -159,6 +154,7 @@ object IslandAreas { passedAreas.remove("null") passedAreas.remove(currentAreaName) // so show areas needed to pass thorough + // TODO show this pass through in the /shnavigate command if (passedAreas.isNotEmpty()) { // suffix = " §7${passedAreas.joinToString(", ")}" } @@ -268,9 +264,13 @@ object IslandAreas { private fun setTarget(node: GraphNode) { targetNode = node + val tag = node.getAreaTag() ?: return + val displayName = tag.color.getChatColor() + node.name val color = config.pathfinder.color.get().toChromaColor() - IslandGraphs.pathFind( - node.position, color, + node.pathFind( + displayName, + color, + allowRerouting = true, onFound = { targetNode = null updatePosition() diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/pathfind/NavigationHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/pathfind/NavigationHelper.kt index e753948bca5e..48719e63e2a6 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/pathfind/NavigationHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/pathfind/NavigationHelper.kt @@ -2,11 +2,12 @@ package at.hannibal2.skyhanni.features.misc.pathfind import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.data.IslandGraphs +import at.hannibal2.skyhanni.data.IslandGraphs.pathFind import at.hannibal2.skyhanni.data.model.GraphNode import at.hannibal2.skyhanni.data.model.GraphNodeTag -import at.hannibal2.skyhanni.data.model.findShortestDistance import at.hannibal2.skyhanni.features.misc.IslandAreas import at.hannibal2.skyhanni.utils.CollectionUtils.sorted +import at.hannibal2.skyhanni.utils.GraphUtils import at.hannibal2.skyhanni.utils.NumberUtil.roundTo import at.hannibal2.skyhanni.utils.chat.Text import at.hannibal2.skyhanni.utils.chat.Text.asComponent @@ -57,7 +58,8 @@ object NavigationHelper { val distance = distances[node]!!.roundTo(1) val component = "$name §e$distance".asComponent() component.onClick { - IslandGraphs.pathFind(node.position) +// node.pathFind(label = node.name!!, allowRerouting = true) + node.pathFind(label = name, allowRerouting = true) sendNavigateMessage(name, goBack) } val tag = node.tags.first { it in allowedTags } @@ -102,7 +104,7 @@ object NavigationHelper { val remainingTags = node.tags.filter { it in allowedTags } if (remainingTags.isEmpty()) continue if (name.lowercase().contains(searchTerm)) { - distances[node] = graph.findShortestDistance(closedNote, node) + distances[node] = GraphUtils.findShortestDistance(closedNote, node) } if (remainingTags.size != 1) { println("found node with invalid amount of tags: ${node.name} (${remainingTags.map { it.cleanName }}") diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/EnigmaSoulWaypoints.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/EnigmaSoulWaypoints.kt index 2a4613f7a7bc..41ad12763496 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/EnigmaSoulWaypoints.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/EnigmaSoulWaypoints.kt @@ -111,7 +111,8 @@ object EnigmaSoulWaypoints { ChatUtils.chat("§5Tracking the $name Enigma Soul!", prefixColor = "§5") if (config.showPathFinder) { soulLocations[name]?.let { - IslandGraphs.pathFind(it, config.color.toChromaColor(), condition = { config.showPathFinder }) + + IslandGraphs.pathFind(it, "$name Enigma Soul", config.color.toChromaColor(), condition = { config.showPathFinder }) } } trackedSouls.add(name) diff --git a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt index 540dc7fa2b62..55f88d2bf864 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt @@ -126,7 +126,7 @@ object SkyHanniDebugsAndTests { val location = LorenzVec(x, y, z) testLocation = location if (args.getOrNull(3) == "pathfind") { - IslandGraphs.pathFind(location) + IslandGraphs.pathFind(location, "/shtestwaypoint", showGoalExact = true) } ChatUtils.chat("set test waypoint") } diff --git a/src/main/java/at/hannibal2/skyhanni/test/graph/GraphEditor.kt b/src/main/java/at/hannibal2/skyhanni/test/graph/GraphEditor.kt index 162386d4315d..9c9b5bb0693c 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/graph/GraphEditor.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/graph/GraphEditor.kt @@ -6,8 +6,6 @@ import at.hannibal2.skyhanni.data.model.Graph import at.hannibal2.skyhanni.data.model.GraphNode import at.hannibal2.skyhanni.data.model.GraphNodeTag import at.hannibal2.skyhanni.data.model.TextInput -import at.hannibal2.skyhanni.data.model.findShortestPathAsGraph -import at.hannibal2.skyhanni.data.model.toJson import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent import at.hannibal2.skyhanni.events.LorenzTickEvent @@ -15,6 +13,7 @@ import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.test.command.ErrorManager import at.hannibal2.skyhanni.utils.ChatUtils import at.hannibal2.skyhanni.utils.ColorUtils +import at.hannibal2.skyhanni.utils.GraphUtils import at.hannibal2.skyhanni.utils.KeyboardManager import at.hannibal2.skyhanni.utils.KeyboardManager.isKeyClicked import at.hannibal2.skyhanni.utils.KeyboardManager.isKeyHeld @@ -581,7 +580,7 @@ object GraphEditor { val current = compiled.firstOrNull { it.position == savedCurrent.position } ?: return val goal = compiled.firstOrNull { it.position == savedActive.position } ?: return - val path = compiled.findShortestPathAsGraph(current, goal) + val path = GraphUtils.findShortestPathAsGraph(current, goal) val inGraph = path.map { nodes[it.id] } highlightedNodes.addAll(inGraph) diff --git a/src/main/java/at/hannibal2/skyhanni/test/graph/GraphEditorBugFinder.kt b/src/main/java/at/hannibal2/skyhanni/test/graph/GraphEditorBugFinder.kt index 2c5656580417..75d8c3ea2914 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/graph/GraphEditorBugFinder.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/graph/GraphEditorBugFinder.kt @@ -2,6 +2,7 @@ package at.hannibal2.skyhanni.test.graph import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.data.IslandGraphs +import at.hannibal2.skyhanni.data.IslandGraphs.pathFind import at.hannibal2.skyhanni.data.model.GraphNode import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent import at.hannibal2.skyhanni.features.misc.IslandAreas.getAreaTag @@ -9,7 +10,6 @@ import at.hannibal2.skyhanni.features.misc.pathfind.NavigationHelper import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.test.graph.GraphEditor.distanceSqToPlayer import at.hannibal2.skyhanni.utils.GraphUtils -import at.hannibal2.skyhanni.utils.LorenzVec import at.hannibal2.skyhanni.utils.RenderUtils.drawDynamicText import kotlinx.coroutines.launch import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -18,7 +18,7 @@ import java.awt.Color // Trying to find errors in Area Graph for the current graph editor instance @SkyHanniModule object GraphEditorBugFinder { - private var errorsInWorld = emptyMap() + private var errorsInWorld = emptyMap() fun runTests() { SkyHanniMod.coroutineScope.launch { @@ -28,21 +28,22 @@ object GraphEditorBugFinder { private fun asyncTest() { val graph = IslandGraphs.currentIslandGraph ?: return - val errorsInWorld: MutableMap = mutableMapOf() + val errorsInWorld: MutableMap = mutableMapOf() val nodes = graph.nodes for (node in nodes) { if (node.tags.any { it in NavigationHelper.allowedTags }) { val remainingTags = node.tags.filter { it in NavigationHelper.allowedTags } if (remainingTags.size != 1) { - errorsInWorld[node.position] = "§cConflicting tags: $remainingTags" + errorsInWorld[node] = "§cConflicting tags: $remainingTags" } } } + val nearestArea = mutableMapOf() for (node in nodes) { - val pathToNearestArea = GraphUtils.findFastestPath(graph, node) { it.getAreaTag(ignoreConfig = true) != null }?.first + val pathToNearestArea = GraphUtils.findFastestPath(node) { it.getAreaTag(ignoreConfig = true) != null }?.first if (pathToNearestArea == null) { continue } @@ -57,7 +58,7 @@ object GraphEditorBugFinder { if (neighbouringAreaNode == areaNode) continue if ((null == node.getAreaTag(ignoreConfig = true))) { bugs++ - errorsInWorld[node.position] = "§cConflicting areas $areaNode and $neighbouringAreaNode" + errorsInWorld[node] = "§cConflicting areas $areaNode and $neighbouringAreaNode" } } } @@ -65,11 +66,11 @@ object GraphEditorBugFinder { val nameNull = node.name.isNullOrBlank() val tagsEmpty = node.tags.isEmpty() if (nameNull > tagsEmpty) { - errorsInWorld[node.position] = "§cMissing name despite having tags" + errorsInWorld[node] = "§cMissing name despite having tags" bugs++ } if (tagsEmpty > nameNull) { - errorsInWorld[node.position] = "§cMissing tags despite having name" + errorsInWorld[node] = "§cMissing tags despite having name" bugs++ } } @@ -80,18 +81,18 @@ object GraphEditorBugFinder { val foreignClusters = clusters.filter { it !== closestCluster } val closestForeignNodes = foreignClusters.map { network -> network.minBy { it.position.distanceSqToPlayer() } } closestForeignNodes.forEach { - errorsInWorld[it.position] = "§cDisjoint node network" + errorsInWorld[it] = "§cDisjoint node network" bugs++ } val closestForeignNode = closestForeignNodes.minBy { it.position.distanceSqToPlayer() } val closestNodeToForeignNode = closestCluster.minBy { it.position.distanceSq(closestForeignNode.position) } - IslandGraphs.pathFind(closestNodeToForeignNode.position, Color.RED) + closestNodeToForeignNode.pathFind("Graph Editor Bug", Color.RED) } println("found $bugs bugs!") this.errorsInWorld = errorsInWorld if (clusters.size <= 1) { - IslandGraphs.pathFind(errorsInWorld.keys.minByOrNull { it.distanceSqToPlayer() } ?: return, Color.RED) + errorsInWorld.keys.minByOrNull { it.position.distanceSqToPlayer() }?.pathFind("Graph Editor Bug", Color.RED) } } @@ -99,8 +100,8 @@ object GraphEditorBugFinder { fun onRenderWorld(event: LorenzRenderWorldEvent) { if (!isEnabled()) return - for ((location, text) in errorsInWorld) { - event.drawDynamicText(location, text, 1.5) + for ((node, text) in errorsInWorld) { + event.drawDynamicText(node.position, text, 1.5) } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/GraphUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/GraphUtils.kt index 4a245a894252..0d15b99ed641 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/GraphUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/GraphUtils.kt @@ -1,10 +1,10 @@ package at.hannibal2.skyhanni.utils +import at.hannibal2.skyhanni.data.model.DijkstraTree import at.hannibal2.skyhanni.data.model.Graph import at.hannibal2.skyhanni.data.model.GraphNode -import at.hannibal2.skyhanni.data.model.findAllShortestDistances -import at.hannibal2.skyhanni.data.model.findDijkstraDistances import at.hannibal2.skyhanni.data.model.findPathToDestination +import java.util.PriorityQueue import java.util.Stack object GraphUtils { @@ -12,11 +12,10 @@ object GraphUtils { * Find the fastest path from [closestNode] to *any* node that matches [condition]. */ fun findFastestPath( - graph: Graph, closestNode: GraphNode, condition: (GraphNode) -> Boolean, ): Pair? { - val distances = graph.findDijkstraDistances(closestNode, condition) + val distances = findDijkstraDistances(closestNode, condition) val entry = distances.lastVisitedNode.takeIf(condition) return entry?.let { distances.findPathToDestination(it) @@ -34,7 +33,7 @@ object GraphUtils { val paths = mutableMapOf() val map = mutableMapOf() - val distances = graph.findAllShortestDistances(closestNode) + val distances = findAllShortestDistances(closestNode) for (graphNode in graph.nodes) { if (!condition(graphNode)) continue val (path, distance) = distances.findPathToDestination(graphNode) @@ -65,4 +64,66 @@ object GraphUtils { } return allClusters } + + fun findShortestPathAsGraph(start: GraphNode, end: GraphNode): Graph = findShortestPathAsGraphWithDistance(start, end).first + + /** + * Find a tree of distances to the [start] node using dijkstra's algorithm. + */ + fun findDijkstraDistances( + start: GraphNode, + /** + * Bail out early before collecting all the distances to all nodes in the graph. This will not collect valid distance data for *all* + * nodes for which bailout matches, but only the closest one. + */ + bailout: (GraphNode) -> Boolean, + ): DijkstraTree { + val distances = mutableMapOf() + val previous = mutableMapOf() + val visited = mutableSetOf() + val queue = PriorityQueue(compareBy { distances.getOrDefault(it, Double.MAX_VALUE) }) + var lastVisitedNode: GraphNode = start + + distances[start] = 0.0 + queue.add(start) + + while (queue.isNotEmpty()) { + val current = queue.poll() + lastVisitedNode = current + if (bailout(current)) break + + visited.add(current) + + current.neighbours.forEach { (neighbour, weight) -> + if (neighbour !in visited) { + val newDistance = distances.getValue(current) + weight + if (newDistance < distances.getOrDefault(neighbour, Double.MAX_VALUE)) { + distances[neighbour] = newDistance + previous[neighbour] = current + queue.add(neighbour) + } + } + } + } + + return DijkstraTree( + start, + distances, + previous, + lastVisitedNode, + ) + } + + fun findAllShortestDistances(start: GraphNode): DijkstraTree { + return findDijkstraDistances(start) { false } + } + + fun findShortestPathAsGraphWithDistance(start: GraphNode, end: GraphNode): Pair { + val distances = findDijkstraDistances(start) { it == end } + return distances.findPathToDestination(end) + } + + fun findShortestPath(start: GraphNode, end: GraphNode): List = findShortestPathAsGraph(start, end).toPositionsList() + + fun findShortestDistance(start: GraphNode, end: GraphNode): Double = findShortestPathAsGraphWithDistance(start, end).second } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt index 805db90f5313..d22ecc85e12c 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt @@ -5,7 +5,6 @@ import at.hannibal2.skyhanni.data.GuiEditManager import at.hannibal2.skyhanni.data.GuiEditManager.getAbsX import at.hannibal2.skyhanni.data.GuiEditManager.getAbsY import at.hannibal2.skyhanni.data.model.Graph -import at.hannibal2.skyhanni.data.model.toPositionsList import at.hannibal2.skyhanni.events.GuiContainerEvent import at.hannibal2.skyhanni.events.GuiRenderItemEvent import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent @@ -1280,7 +1279,8 @@ object RenderUtils { waypointColor: Color = (path.lastOrNull()?.name?.getFirstColorCode()?.toLorenzColor() ?: LorenzColor.WHITE).toColor(), bezierPoint: Double = 1.0, - showNoteNames: Boolean = false + showNoteNames: Boolean = false, + markLastBlock: Boolean = true, ) { if (path.isEmpty()) return val points = if (startAtEye) { @@ -1307,8 +1307,10 @@ object RenderUtils { this.drawDynamicText(it.position, it.name!!, textSize) } } - val last = path.last() - drawWaypointFilled(last.position, waypointColor, seeThroughBlocks = true) + if (markLastBlock) { + val last = path.last() + drawWaypointFilled(last.position, waypointColor, seeThroughBlocks = true) + } } class LineDrawer @PublishedApi internal constructor(val tessellator: Tessellator) { @@ -1586,7 +1588,11 @@ object RenderUtils { // TODO nea please merge with 'draw3DLine' fun LorenzRenderWorldEvent.draw3DLine_nea( - p1: LorenzVec, p2: LorenzVec, color: Color, lineWidth: Int, depth: Boolean, + p1: LorenzVec, + p2: LorenzVec, + color: Color, + lineWidth: Int, + depth: Boolean, ) { GlStateManager.disableCull() From a5354da4083b554009b900f73d502149db91cbfe Mon Sep 17 00:00:00 2001 From: MTOnline69 <97001154+MTOnline69@users.noreply.github.com> Date: Sat, 28 Sep 2024 20:43:30 +0100 Subject: [PATCH 010/155] Fix: Broodmother countdown when imminent (#2602) --- .../features/combat/BroodmotherFeatures.kt | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/BroodmotherFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/BroodmotherFeatures.kt index dd7c088b0b7e..e98c75a0bc8f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/BroodmotherFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/BroodmotherFeatures.kt @@ -50,7 +50,7 @@ object BroodmotherFeatures { fun onTabListUpdate(event: WidgetUpdateEvent) { if (!event.isWidget(TabWidget.BROODMOTHER)) return val newStage = event.widget.matchMatcherFirstLine { group("stage") } ?: "" - if (newStage.isNotEmpty()) { + if (newStage.isNotEmpty() && newStage != lastStage.toString()) { lastStage = currentStage currentStage = StageEntry.valueOf(newStage.replace("!", "").uppercase()) onStageUpdate() @@ -60,7 +60,7 @@ object BroodmotherFeatures { private fun onStageUpdate() { ChatUtils.debug("New Broodmother stage: $currentStage") - if (lastStage == null && onServerJoin()) return + if (onServerJoin()) return // ignore Hypixel bug where the stage may temporarily revert to Imminent after the Broodmother's death if (currentStage == StageEntry.IMMINENT && lastStage == StageEntry.ALIVE) return @@ -70,15 +70,15 @@ object BroodmotherFeatures { return } + val lastStage = lastStage ?: return + val timeUntilSpawn = currentStage?.minutes?.minutes ?: return + broodmotherSpawnTime = SimpleTimeMark.now() + timeUntilSpawn + if (currentStage == StageEntry.IMMINENT && config.imminentWarning) { playImminentWarning() return } - val lastStage = lastStage ?: return - val timeUntilSpawn = currentStage?.minutes?.minutes ?: return - broodmotherSpawnTime = SimpleTimeMark.now() + timeUntilSpawn - if (currentStage !in config.stages) return if (currentStage == StageEntry.SLAIN) { onBroodmotherSlain() @@ -91,9 +91,10 @@ object BroodmotherFeatures { } private fun onServerJoin(): Boolean { + if (lastStage != null || !config.stageOnJoin) return false // don't send if user has config enabled for either of the alive messages // this is so that two messages aren't immediately sent upon joining a server - if (config.stageOnJoin && !(currentStage == StageEntry.ALIVE && isAliveMessageEnabled())) { + if (!(currentStage == StageEntry.ALIVE && isAliveMessageEnabled())) { val pluralize = StringUtils.pluralize(currentStage?.minutes ?: 0, "minute") var message = "The Broodmother's current stage in this server is ${currentStage.toString().replace("!", "")}§e." if (currentStage?.minutes != 0) { @@ -101,9 +102,8 @@ object BroodmotherFeatures { } ChatUtils.chat(message) return true - } else { - return false } + return false } private fun onBroodmotherSpawn() { @@ -150,6 +150,9 @@ object BroodmotherFeatures { fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { if (!isCountdownEnabled()) return if (display.isEmpty()) return + if (broodmotherSpawnTime.isInPast() && !broodmotherSpawnTime.isFarPast()) { + display = "§4Broodmother spawning now!" + } config.countdownPosition.renderString(display, posLabel = "Broodmother Countdown") } @@ -159,7 +162,7 @@ object BroodmotherFeatures { if (!isCountdownEnabled()) return if (broodmotherSpawnTime.isFarPast()) { - if (lastStage != null && currentStage == StageEntry.ALIVE) { + if (currentStage == StageEntry.ALIVE) { display = "§4Broodmother spawned!" } } else { From bfee3e4897e4bb08a0e158e188d1d89cd706955e Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 28 Sep 2024 21:43:53 +0200 Subject: [PATCH 011/155] save minutes as duration --- .../features/combat/BroodmotherFeatures.kt | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/BroodmotherFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/BroodmotherFeatures.kt index e98c75a0bc8f..4020e26d36d4 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/BroodmotherFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/BroodmotherFeatures.kt @@ -20,6 +20,7 @@ import at.hannibal2.skyhanni.utils.StringUtils import at.hannibal2.skyhanni.utils.TimeUtils.format import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.reflect.KMutableProperty0 +import kotlin.time.Duration import kotlin.time.Duration.Companion.minutes import kotlin.time.Duration.Companion.seconds import kotlin.time.DurationUnit @@ -27,13 +28,13 @@ import kotlin.time.DurationUnit @SkyHanniModule object BroodmotherFeatures { - enum class StageEntry(private val str: String, val minutes: Int) { - SLAIN("§eSlain", 10), - DORMANT("§eDormant", 9), - SOON("§6Soon", 6), - AWAKENING("§6Awakening", 3), - IMMINENT("§4Imminent", 1), - ALIVE("§4Alive!", 0); + enum class StageEntry(private val str: String, val duration: Duration) { + SLAIN("§eSlain", 10.minutes), + DORMANT("§eDormant", 9.minutes), + SOON("§6Soon", 6.minutes), + AWAKENING("§6Awakening", 3.minutes), + IMMINENT("§4Imminent", 1.minutes), + ALIVE("§4Alive!", 0.minutes); override fun toString() = str } @@ -71,7 +72,7 @@ object BroodmotherFeatures { } val lastStage = lastStage ?: return - val timeUntilSpawn = currentStage?.minutes?.minutes ?: return + val timeUntilSpawn = currentStage?.duration ?: return broodmotherSpawnTime = SimpleTimeMark.now() + timeUntilSpawn if (currentStage == StageEntry.IMMINENT && config.imminentWarning) { @@ -95,10 +96,12 @@ object BroodmotherFeatures { // don't send if user has config enabled for either of the alive messages // this is so that two messages aren't immediately sent upon joining a server if (!(currentStage == StageEntry.ALIVE && isAliveMessageEnabled())) { - val pluralize = StringUtils.pluralize(currentStage?.minutes ?: 0, "minute") + val duration = currentStage?.duration + val minutes = duration?.inWholeMinutes?.toInt() ?: 0 + val pluralize = StringUtils.pluralize(minutes, "minute") var message = "The Broodmother's current stage in this server is ${currentStage.toString().replace("!", "")}§e." - if (currentStage?.minutes != 0) { - message += " It will spawn §bwithin ${currentStage?.minutes} $pluralize§e." + if (duration != 0.minutes) { + message += " It will spawn §bwithin $duration $pluralize§e." } ChatUtils.chat(message) return true From 533e0448f08d32bc2f6b67775631b47f048bf9ef Mon Sep 17 00:00:00 2001 From: Fazfoxy <78978526+Fazfoxy@users.noreply.github.com> Date: Sat, 28 Sep 2024 20:44:58 +0100 Subject: [PATCH 012/155] Fix: add Kuudra + Dungeon items that replace the SB Menu to banned items (#2599) --- .../at/hannibal2/skyhanni/features/inventory/ItemPickupLog.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemPickupLog.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemPickupLog.kt index 0247a4547705..9ed2621bb7bc 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemPickupLog.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemPickupLog.kt @@ -97,6 +97,9 @@ object ItemPickupLog { "SKYBLOCK_MENU", "CANCEL_PARKOUR_ITEM", "CANCEL_RACE_ITEM", + "MAXOR_ENERGY_CRYSTAL", + "ELLE_SUPPLIES", + "ELLE_FUEL_CELL", ) private val bannedItemsConverted = bannedItemsPattern.map { it.toString().asInternalName() } From 4ce974d559a080ac8ac95c8cae9147938fc97123 Mon Sep 17 00:00:00 2001 From: David Cole <40234707+DavidArthurCole@users.noreply.github.com> Date: Sat, 28 Sep 2024 15:48:48 -0400 Subject: [PATCH 013/155] Fix: Race Condition in Hoppity Duplicate Number & Stray no-fire (#2595) --- .../skyhanni/features/event/hoppity/HoppityAPI.kt | 15 +++++++++++++-- .../event/hoppity/HoppityEggsCompactChat.kt | 2 +- .../features/event/hoppity/HoppityEggsManager.kt | 7 +++++-- .../ChocolateFactoryBarnManager.kt | 2 +- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityAPI.kt index 93c9efc04021..881b8b5e7432 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityAPI.kt @@ -9,6 +9,7 @@ import at.hannibal2.skyhanni.events.hoppity.RabbitFoundEvent import at.hannibal2.skyhanni.features.event.hoppity.HoppityEggType.CHOCOLATE_FACTORY_MILESTONE import at.hannibal2.skyhanni.features.event.hoppity.HoppityEggType.CHOCOLATE_SHOP_MILESTONE import at.hannibal2.skyhanni.features.event.hoppity.HoppityEggType.SIDE_DISH +import at.hannibal2.skyhanni.features.event.hoppity.HoppityEggType.STRAY import at.hannibal2.skyhanni.features.event.hoppity.HoppityEggsManager.eggFoundPattern import at.hannibal2.skyhanni.features.event.hoppity.HoppityEggsManager.getEggType import at.hannibal2.skyhanni.features.inventory.chocolatefactory.ChocolateFactoryAPI @@ -103,8 +104,18 @@ object HoppityAPI { ChocolateFactoryStrayTracker.strayCaughtPattern.matchMatcher(it.stack.displayName) { ChocolateFactoryStrayTracker.handleStrayClicked(it) when (groupOrNull("name") ?: return@matchMatcher) { - "Fish the Rabbit" -> EggFoundEvent(HoppityEggType.STRAY, it.slotNumber, null).post() - "El Dorado" -> EggFoundEvent(HoppityEggType.STRAY, it.slotNumber, null).post() + "Fish the Rabbit" -> { + EggFoundEvent(STRAY, it.slotNumber, null).post() + lastName = "§9Fish the Rabbit" + lastMeal = STRAY + attemptFireRabbitFound() + } + "El Dorado" -> { + EggFoundEvent(STRAY, it.slotNumber, null).post() + lastName = "§6El Dorado" + lastMeal = STRAY + attemptFireRabbitFound() + } else -> return@matchMatcher } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsCompactChat.kt b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsCompactChat.kt index 4a33820d8d55..0803cd0eae9c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsCompactChat.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsCompactChat.kt @@ -95,7 +95,7 @@ object HoppityEggsCompactChat { } ?: "?" val dupeNumberFormat = if (eventConfig.showDuplicateNumber) { - (HoppityCollectionStats.getRabbitCount(this.lastName) - 1).takeIf { it > 1}?.let { + (HoppityCollectionStats.getRabbitCount(this.lastName)).takeIf { it > 0 }?.let { " §7(§b#$it§7)" } ?: "" } else "" diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsManager.kt b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsManager.kt index b8143d311cf2..bdbe4cd7e10b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsManager.kt @@ -25,6 +25,7 @@ import at.hannibal2.skyhanni.utils.SimpleTimeMark.Companion.now import at.hannibal2.skyhanni.utils.SkyBlockTime import at.hannibal2.skyhanni.utils.SoundUtils import at.hannibal2.skyhanni.utils.TimeUtils.format +import net.minecraftforge.fml.common.eventhandler.EventPriority import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import java.util.regex.Matcher import kotlin.time.Duration.Companion.minutes @@ -120,9 +121,11 @@ object HoppityEggsManager { lastNote = event.note } - @HandleEvent + @HandleEvent(priority = HandleEvent.LOWEST) fun onRabbitFound(event: RabbitFoundEvent) { - HoppityCollectionStats.incrementRabbitCount(event.rabbitName) + DelayedRun.runDelayed(1.seconds) { + HoppityCollectionStats.incrementRabbitCount(event.rabbitName) + } } @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryBarnManager.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryBarnManager.kt index a2b264b358f5..8ce0047d0aec 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryBarnManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryBarnManager.kt @@ -62,7 +62,7 @@ object ChocolateFactoryBarnManager { HoppityAPI.attemptFireRabbitFound(lastDuplicateAmount = amount) if (hoppityConfig.showDuplicateNumber && !hoppityConfig.compactChat) { - (HoppityCollectionStats.getRabbitCount(HoppityAPI.getLastRabbit()) - 1).takeIf { it > 1 }?.let { + (HoppityCollectionStats.getRabbitCount(HoppityAPI.getLastRabbit())).takeIf { it > 0 }?.let { event.chatComponent = ChatComponentText( event.message.replace("§7§lDUPLICATE RABBIT!", "§7§lDUPLICATE RABBIT! §7(Duplicate §b#$it§7)§r"), ) From 8a67b06c948ea35fee18853b7b19e2b0d064f60f Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 28 Sep 2024 21:49:06 +0200 Subject: [PATCH 014/155] using default parameters --- .../skyhanni/events/hoppity/EggFoundEvent.kt | 4 ++-- .../skyhanni/features/event/hoppity/HoppityAPI.kt | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/events/hoppity/EggFoundEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/hoppity/EggFoundEvent.kt index 2cd81811f272..30cd282ac8b4 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/hoppity/EggFoundEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/hoppity/EggFoundEvent.kt @@ -5,6 +5,6 @@ import at.hannibal2.skyhanni.features.event.hoppity.HoppityEggType class EggFoundEvent( val type: HoppityEggType, - val slotIndex: Int?, - val note: String?, + val slotIndex: Int? = null, + val note: String? = null, ) : SkyHanniEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityAPI.kt index 881b8b5e7432..09c0dedf9b29 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityAPI.kt @@ -105,13 +105,13 @@ object HoppityAPI { ChocolateFactoryStrayTracker.handleStrayClicked(it) when (groupOrNull("name") ?: return@matchMatcher) { "Fish the Rabbit" -> { - EggFoundEvent(STRAY, it.slotNumber, null).post() + EggFoundEvent(STRAY, it.slotNumber).post() lastName = "§9Fish the Rabbit" lastMeal = STRAY attemptFireRabbitFound() } "El Dorado" -> { - EggFoundEvent(STRAY, it.slotNumber, null).post() + EggFoundEvent(STRAY, it.slotNumber).post() lastName = "§6El Dorado" lastMeal = STRAY attemptFireRabbitFound() @@ -132,7 +132,7 @@ object HoppityAPI { val nameText = (if (clickedStack.hasDisplayName()) clickedStack.displayName else clickedStack.itemName) sideDishNamePattern.matchMatcher(nameText) { - EggFoundEvent(SIDE_DISH, index, null).post() + EggFoundEvent(SIDE_DISH, index).post() lastMeal = SIDE_DISH attemptFireRabbitFound() } @@ -140,12 +140,12 @@ object HoppityAPI { clickedStack.getLore().let { if (!it.any { line -> line == "§eClick to claim!" }) return allTimeLorePattern.firstMatcher(it) { - EggFoundEvent(CHOCOLATE_FACTORY_MILESTONE, index, null).post() + EggFoundEvent(CHOCOLATE_FACTORY_MILESTONE, index).post() lastMeal = CHOCOLATE_FACTORY_MILESTONE attemptFireRabbitFound() } shopLorePattern.firstMatcher(it) { - EggFoundEvent(CHOCOLATE_SHOP_MILESTONE, index, null).post() + EggFoundEvent(CHOCOLATE_SHOP_MILESTONE, index).post() lastMeal = CHOCOLATE_SHOP_MILESTONE attemptFireRabbitFound() } @@ -160,14 +160,14 @@ object HoppityAPI { eggFoundPattern.matchMatcher(event.message) { resetRabbitData() lastMeal = getEggType(event) - lastMeal?.let { EggFoundEvent(it, null, groupOrNull("note")).post() } + lastMeal?.let { EggFoundEvent(it, note = groupOrNull("note")).post() } attemptFireRabbitFound() } HoppityEggsManager.eggBoughtPattern.matchMatcher(event.message) { if (group("rabbitname").equals(lastName)) { lastMeal = HoppityEggType.BOUGHT - EggFoundEvent(HoppityEggType.BOUGHT, null, null).post() + EggFoundEvent(HoppityEggType.BOUGHT).post() attemptFireRabbitFound() } } From c9938504234a1291ee53515bd296e75daeecbd3d Mon Sep 17 00:00:00 2001 From: J10a1n15 <45315647+j10a1n15@users.noreply.github.com> Date: Sat, 28 Sep 2024 21:54:47 +0200 Subject: [PATCH 015/155] Fix: Custom Scoreboard Active Tablist Event (#2592) --- .../gui/customscoreboard/ScoreboardEvent.kt | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardEvent.kt b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardEvent.kt index 3b3b6448b368..68dba3eee2bb 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardEvent.kt @@ -2,6 +2,7 @@ package at.hannibal2.skyhanni.features.gui.customscoreboard import at.hannibal2.skyhanni.data.HypixelData import at.hannibal2.skyhanni.data.IslandType +import at.hannibal2.skyhanni.data.model.TabWidget import at.hannibal2.skyhanni.features.combat.SpidersDenAPI.isAtTopOfNest import at.hannibal2.skyhanni.features.dungeon.DungeonAPI import at.hannibal2.skyhanni.features.gui.customscoreboard.CustomScoreboard.eventsConfig @@ -13,6 +14,7 @@ import at.hannibal2.skyhanni.utils.CollectionUtils.nextAfter import at.hannibal2.skyhanni.utils.LorenzUtils.inAdvancedMiningIsland import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland import at.hannibal2.skyhanni.utils.RegexUtils.anyMatches +import at.hannibal2.skyhanni.utils.RegexUtils.firstMatcher import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher import at.hannibal2.skyhanni.utils.RegexUtils.matches import at.hannibal2.skyhanni.utils.StringUtils.removeColor @@ -411,12 +413,9 @@ private fun getActiveEventLine(): List { val blockedEvents = listOf("Spooky Festival", "Carnival", "5th SkyBlock Anniversary", "New Year Celebration") if (blockedEvents.contains(currentActiveEvent.removeColor())) return emptyList() - val currentActiveEventTime = TabListData.getTabList().firstOrNull { SbPattern.eventTimeEndsPattern.matches(it) } - ?.let { - SbPattern.eventTimeEndsPattern.matchMatcher(it) { - group("time") - } - } + val currentActiveEventTime = ScoreboardPattern.eventTimeEndsPattern.firstMatcher(TabWidget.EVENT.lines) { + group("time") + } ?: return emptyList() return listOf(currentActiveEvent, " Ends in: §e$currentActiveEventTime") } @@ -426,12 +425,9 @@ private fun getActiveEventShowWhen(): Boolean = private fun getSoonEventLine(): List { val soonActiveEvent = getTablistEvent() ?: return emptyList() - val soonActiveEventTime = TabListData.getTabList().firstOrNull { SbPattern.eventTimeStartsPattern.matches(it) } - ?.let { - SbPattern.eventTimeStartsPattern.matchMatcher(it) { - group("time") - } - } + val soonActiveEventTime = ScoreboardPattern.eventTimeStartsPattern.firstMatcher(TabWidget.EVENT.lines) { + group("time") + } ?: return emptyList() return listOf(soonActiveEvent, " Starts in: §e$soonActiveEventTime") } From b86997bbd7223226609728fbe7b069650527aa44 Mon Sep 17 00:00:00 2001 From: Empa <42304516+ItsEmpa@users.noreply.github.com> Date: Sat, 28 Sep 2024 22:09:52 +0200 Subject: [PATCH 016/155] Fix: Powder Tracker (#2591) Co-authored-by: ItsEmpa --- .../mining/powdertracker/PowderTracker.kt | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt index a90b980d9a60..fcf876c2169e 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt @@ -1,6 +1,8 @@ package at.hannibal2.skyhanni.features.mining.powdertracker import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.api.HotmAPI +import at.hannibal2.skyhanni.api.event.HandleEvent import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator import at.hannibal2.skyhanni.config.features.mining.PowderTrackerConfig.PowderDisplayEntry import at.hannibal2.skyhanni.data.BossbarData @@ -12,7 +14,9 @@ import at.hannibal2.skyhanni.events.IslandChangeEvent import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent import at.hannibal2.skyhanni.events.SecondPassedEvent +import at.hannibal2.skyhanni.events.mining.PowderGainEvent import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule +import at.hannibal2.skyhanni.utils.CollectionUtils.addOrPut import at.hannibal2.skyhanni.utils.CollectionUtils.addSearchString import at.hannibal2.skyhanni.utils.ConditionalUtils.afterChange import at.hannibal2.skyhanni.utils.ConfigUtils @@ -33,6 +37,7 @@ import com.google.gson.annotations.Expose import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.time.Duration import kotlin.time.Duration.Companion.minutes +import kotlin.time.Duration.Companion.seconds @SkyHanniModule object PowderTracker { @@ -193,13 +198,11 @@ object PowderTracker { } for (reward in PowderChestReward.entries) { + if (reward == PowderChestReward.MITHRIL_POWDER || reward == PowderChestReward.GEMSTONE_POWDER) return reward.chatPattern.matchMatcher(msg) { tracker.modify { val count = it.rewards[reward] ?: 0 - var amount = groupOrNull("amount")?.formatLong() ?: 1 - if ((reward == PowderChestReward.MITHRIL_POWDER || reward == PowderChestReward.GEMSTONE_POWDER) && doublePowder) { - amount *= 2 - } + val amount = groupOrNull("amount")?.formatLong() ?: 1 it.rewards[reward] = count + amount } } @@ -207,6 +210,19 @@ object PowderTracker { tracker.update() } + @HandleEvent(onlyOnIsland = IslandType.CRYSTAL_HOLLOWS) + fun onPowderGain(event: PowderGainEvent) { + if (lastChestPicked.passedSince() > 5.seconds) return + tracker.modify { + val reward = when (event.powder) { + HotmAPI.PowderType.GEMSTONE -> PowderChestReward.GEMSTONE_POWDER + HotmAPI.PowderType.MITHRIL -> PowderChestReward.MITHRIL_POWDER + else -> return@modify + } + it.rewards.addOrPut(reward, event.amount) + } + } + @SubscribeEvent fun onConfigLoad(event: ConfigLoadEvent) { config.textFormat.afterChange { From f332c375c5865e4266b0e831c7b6b54ae5f701c4 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 28 Sep 2024 22:17:02 +0200 Subject: [PATCH 017/155] downgrading was the solution for me, maybe it is for others as well --- CONTRIBUTING.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 90fcd025049d..fe6410c9d11e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -13,6 +13,7 @@ We use [IntelliJ](https://www.jetbrains.com/idea/) as an example. - Download IntelliJ from the [JetBrains Website](https://www.jetbrains.com/idea/download/). - Use the Community Edition. (Scroll down a bit.) +- When you encounter any bug with IntelliJ, please make sure to use the version `2024.1.6`, not `2024.2.x` or above. ### Cloning the project @@ -30,6 +31,7 @@ We use [IntelliJ](https://www.jetbrains.com/idea/) as an example. ### Setting up IntelliJ + Once your project is imported into IntelliJ from the previous step, all dependencies like Minecraft, NEU, and so on should be automatically downloaded. If not, you might need to link the Gradle project in the Gradle tab (little elephant) on the right. From aa5b07a6a2686d7fc100ca8f1de9afcff2c67add Mon Sep 17 00:00:00 2001 From: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> Date: Sun, 29 Sep 2024 06:36:18 +1000 Subject: [PATCH 018/155] Backend: Change the detekt rule to be more generalised (#2600) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- detekt/detekt.yml | 2 +- .../kotlin/grammar/AvoidBritishSpelling.kt | 46 +++++++++++++++++++ detekt/src/main/kotlin/grammar/AvoidColour.kt | 38 --------------- .../kotlin/grammar/GrammarRuleSetProvider.kt | 9 ++-- 4 files changed, 53 insertions(+), 42 deletions(-) create mode 100644 detekt/src/main/kotlin/grammar/AvoidBritishSpelling.kt delete mode 100644 detekt/src/main/kotlin/grammar/AvoidColour.kt diff --git a/detekt/detekt.yml b/detekt/detekt.yml index 1b7d3ab05ff8..ac5c9de53bcc 100644 --- a/detekt/detekt.yml +++ b/detekt/detekt.yml @@ -4,7 +4,7 @@ config: GrammarRules: active: true - AvoidColour: # custom rule to prefer color to colour + AvoidBritishSpelling: # custom rule to prefer american spellings over british ones active: true FormattingRules: diff --git a/detekt/src/main/kotlin/grammar/AvoidBritishSpelling.kt b/detekt/src/main/kotlin/grammar/AvoidBritishSpelling.kt new file mode 100644 index 000000000000..6a4ea3d61eb4 --- /dev/null +++ b/detekt/src/main/kotlin/grammar/AvoidBritishSpelling.kt @@ -0,0 +1,46 @@ +package at.hannibal2.skyhanni.detektrules.grammar + +import io.gitlab.arturbosch.detekt.api.CodeSmell +import io.gitlab.arturbosch.detekt.api.Config +import io.gitlab.arturbosch.detekt.api.Debt +import io.gitlab.arturbosch.detekt.api.Entity +import io.gitlab.arturbosch.detekt.api.Issue +import io.gitlab.arturbosch.detekt.api.Rule +import io.gitlab.arturbosch.detekt.api.Severity +import org.jetbrains.kotlin.psi.KtStringTemplateExpression + +/** + * This rule reports all usages of the british spelling over the american spelling in the codebase, + * this will ignore any type annotations, i.e., `@ConfigEditorColour` will not be reported. + */ +class AvoidBritishSpelling(config: Config) : Rule(config) { + override val issue = Issue( + "AvoidBritishSpelling", + Severity.Style, + "Avoid using the word british spelling over american spelling.", + Debt.FIVE_MINS, + ) + + private val scannedWords = mapOf( + "colour" to "color", + "armour" to "armor", + ) + + override fun visitStringTemplateExpression(expression: KtStringTemplateExpression) { + val text = + expression.text // Be aware .getText() returns the entire span of this template, including variable names contained within. This should be rare enough of a problem for us to not care about it. + + for (word in scannedWords) { + if (text.contains(word.key, ignoreCase = true)) { + report( + CodeSmell( + issue, + Entity.from(expression), + "Avoid using the word '${word.key}' in code, '${word.value}' is preferred instead.", + ), + ) + } + } + super.visitStringTemplateExpression(expression) + } +} diff --git a/detekt/src/main/kotlin/grammar/AvoidColour.kt b/detekt/src/main/kotlin/grammar/AvoidColour.kt deleted file mode 100644 index 754148d36f31..000000000000 --- a/detekt/src/main/kotlin/grammar/AvoidColour.kt +++ /dev/null @@ -1,38 +0,0 @@ -package at.hannibal2.skyhanni.detektrules.grammar - -import io.gitlab.arturbosch.detekt.api.CodeSmell -import io.gitlab.arturbosch.detekt.api.Config -import io.gitlab.arturbosch.detekt.api.Debt -import io.gitlab.arturbosch.detekt.api.Entity -import io.gitlab.arturbosch.detekt.api.Issue -import io.gitlab.arturbosch.detekt.api.Rule -import io.gitlab.arturbosch.detekt.api.Severity -import org.jetbrains.kotlin.psi.KtStringTemplateExpression - -/** - * This rule reports all usages of the word "colour" in the codebase, - * preferring the 'American' spelling "color" - this will ignore any - * type annotations, i.e., `@ConfigEditorColour` will not be reported. - */ -class AvoidColour(config: Config) : Rule(config) { - override val issue = Issue( - "AvoidColour", - Severity.Style, - "Avoid using the word 'colour' in code, prefer 'color' instead.", - Debt.FIVE_MINS - ) - - override fun visitStringTemplateExpression(expression: KtStringTemplateExpression) { - val text = expression.text // Be aware .getText() returns the entire span of this template, including variable names contained within. This should be rare enough of a problem for us to not care about it. - if (text.contains("colour", ignoreCase = true)) { - report( - CodeSmell( - issue, - Entity.from(expression), - "Avoid using the word 'colour' in code, prefer 'color' instead." - ) - ) - } - super.visitStringTemplateExpression(expression) - } -} diff --git a/detekt/src/main/kotlin/grammar/GrammarRuleSetProvider.kt b/detekt/src/main/kotlin/grammar/GrammarRuleSetProvider.kt index 957b20147cee..8001fe42b5b2 100644 --- a/detekt/src/main/kotlin/grammar/GrammarRuleSetProvider.kt +++ b/detekt/src/main/kotlin/grammar/GrammarRuleSetProvider.kt @@ -10,8 +10,11 @@ class GrammarRuleSetProvider : RuleSetProvider { override val ruleSetId: String = "GrammarRules" override fun instance(config: Config): RuleSet { - return RuleSet(ruleSetId, listOf( - AvoidColour(config) - )) + return RuleSet( + ruleSetId, + listOf( + AvoidBritishSpelling(config), + ), + ) } } From 165da3678414e937d6ac570a71deae377037e4a4 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 28 Sep 2024 22:39:51 +0200 Subject: [PATCH 019/155] code cleanup in build.gradle.kts --- build.gradle.kts | 75 ++++++++++++++++++++++++++---------------------- 1 file changed, 41 insertions(+), 34 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index b0e2af2544ed..71a882ac96bf 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,8 +3,6 @@ import at.skyhanni.sharedvariables.MultiVersionStage import at.skyhanni.sharedvariables.ProjectTarget import at.skyhanni.sharedvariables.SHVersionInfo import at.skyhanni.sharedvariables.versionString -import io.gitlab.arturbosch.detekt.Detekt -import io.gitlab.arturbosch.detekt.DetektCreateBaselineTask import net.fabricmc.loom.task.RunGameTask import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.tasks.KotlinCompile @@ -39,11 +37,15 @@ val runDirectory = rootProject.file("run") runDirectory.mkdirs() // Minecraft configuration: loom { - if (this.isForgeLike) + if (this.isForgeLike) { forge { - pack200Provider.set(dev.architectury.pack200.java.Pack200Adapter()) + pack200Provider.set( + dev.architectury.pack200.java + .Pack200Adapter(), + ) mixinConfig("mixins.skyhanni.json") } + } mixin { useLegacyMixinAp.set(true) defaultRefmapName.set("mixins.skyhanni.refmap.json") @@ -67,11 +69,12 @@ loom { } } -if (target == ProjectTarget.MAIN) +if (target == ProjectTarget.MAIN) { sourceSets.main { resources.destinationDirectory.set(kotlin.destinationDirectory) output.setResourcesDir(kotlin.destinationDirectory) } +} val shadowImpl: Configuration by configurations.creating { configurations.implementation.get().extendsFrom(this) @@ -91,9 +94,11 @@ val headlessLwjgl by configurations.creating { isVisible = false } tasks.runClient { - this.javaLauncher.set(javaToolchains.launcherFor { - languageVersion.set(target.minecraftVersion.javaLanguageVersion) - }) + this.javaLauncher.set( + javaToolchains.launcherFor { + languageVersion.set(target.minecraftVersion.javaLanguageVersion) + }, + ) } val shot = shots.shot("minecraft", rootProject.file("shots.txt")) @@ -104,8 +109,9 @@ dependencies { } else { mappings(target.mappingDependency) } - if (target.forgeDep != null) + if (target.forgeDep != null) { "forge"(target.forgeDep!!) + } // Discord RPC client shadowImpl("com.jagrosh:DiscordIPC:0.5.3") { @@ -218,10 +224,11 @@ if (target == ProjectTarget.MAIN) { } } -if (target == ProjectTarget.MAIN) +if (target == ProjectTarget.MAIN) { tasks.compileJava { dependsOn(tasks.processResources) } +} if (target.parent == ProjectTarget.MAIN) { val mainRes = project(ProjectTarget.MAIN.projectPath).tasks.getAt("processResources") @@ -338,27 +345,27 @@ publishing.publications { } // Detekt: TODO: Uncomment this when we're ready to enforce -/*detekt { - buildUponDefaultConfig = true // preconfigure defaults - config.setFrom(rootProject.layout.projectDirectory.file("detekt/detekt.yml")) // point to your custom config defining rules to run, overwriting default behavior - baseline = file(layout.projectDirectory.file("detekt/baseline.xml")) // a way of suppressing issues before introducing detekt - source.setFrom(project.sourceSets.named("main").map { it.allSource }) -} - -tasks.withType().configureEach { - reports { - html.required.set(true) // observe findings in your browser with structure and code snippets - xml.required.set(true) // checkstyle like format mainly for integrations like Jenkins - sarif.required.set(true) // standardized SARIF format (https://sarifweb.azurewebsites.net/) to support integrations with GitHub Code Scanning - md.required.set(true) // simple Markdown format - } -} - -tasks.withType().configureEach { - jvmTarget = target.minecraftVersion.formattedJavaLanguageVersion - outputs.cacheIf { false } // Custom rules won't work if cached -} -tasks.withType().configureEach { - jvmTarget = target.minecraftVersion.formattedJavaLanguageVersion - outputs.cacheIf { false } // Custom rules won't work if cached -}*/ +// detekt { +// buildUponDefaultConfig = true // preconfigure defaults +// config.setFrom(rootProject.layout.projectDirectory.file("detekt/detekt.yml")) // point to your custom config defining rules to run, overwriting default behavior +// baseline = file(layout.projectDirectory.file("detekt/baseline.xml")) // a way of suppressing issues before introducing detekt +// source.setFrom(project.sourceSets.named("main").map { it.allSource }) +// } +// +// tasks.withType().configureEach { +// reports { +// html.required.set(true) // observe findings in your browser with structure and code snippets +// xml.required.set(true) // checkstyle like format mainly for integrations like Jenkins +// sarif.required.set(true) // standardized SARIF format (https://sarifweb.azurewebsites.net/) to support integrations with GitHub Code Scanning +// md.required.set(true) // simple Markdown format +// } +// } +// +// tasks.withType().configureEach { +// jvmTarget = target.minecraftVersion.formattedJavaLanguageVersion +// outputs.cacheIf { false } // Custom rules won't work if cached +// } +// tasks.withType().configureEach { +// jvmTarget = target.minecraftVersion.formattedJavaLanguageVersion +// outputs.cacheIf { false } // Custom rules won't work if cached +// } From 3fb3b0598ee05b90b610b7691985ca073eae9eb3 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 28 Sep 2024 22:49:05 +0200 Subject: [PATCH 020/155] code cleanup in build.gradle.kts v2 --- root.gradle.kts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/root.gradle.kts b/root.gradle.kts index 01039394234d..79dbe9ffba6f 100644 --- a/root.gradle.kts +++ b/root.gradle.kts @@ -25,7 +25,8 @@ allprojects { } maven("https://repo.spongepowered.org/maven/") // mixin maven("https://pkgs.dev.azure.com/djtheredstoner/DevAuth/_packaging/public/maven/v1") // DevAuth - maven("https://jitpack.io") { // NotEnoughUpdates (compiled against) + maven("https://jitpack.io") { + // NotEnoughUpdates (compiled against) content { includeGroupByRegex("(com|io)\\.github\\..*") } @@ -42,8 +43,9 @@ preprocess { ProjectTarget.activeVersions().forEach { target -> nodes[target] = createNode(target.projectName, target.minecraftVersion.versionNumber, target.mappingStyle.identifier) val p = project(target.projectPath) - if (target.isForge) + if (target.isForge) { p.extra.set("loom.platform", "forge") + } } ProjectTarget.activeVersions().forEach { child -> val parent = child.linkTo ?: return@forEach From c63224fc1185ba15be71289e92ff32ce2e6d7513 Mon Sep 17 00:00:00 2001 From: David Cole <40234707+DavidArthurCole@users.noreply.github.com> Date: Sun, 29 Sep 2024 03:40:09 -0400 Subject: [PATCH 021/155] Backend: `detekt` -> `detektMain` (#2613) Co-authored-by: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> --- .github/workflows/build.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 7e42909ee297..143c59466cd1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -44,14 +44,15 @@ jobs: # - name: Checkout code # uses: actions/checkout@v4 # - uses: ./.github/actions/setup-normal-workspace - # - name: Run detekt + # # detektMain is a LOT slower than detekt, but it does type analysis + # - name: Run detekt main (w/typing analysis) # run: | - # ./gradlew detekt --stacktrace + # ./gradlew detektMain --stacktrace # - name: Annotate detekt failures # if: ${{ !cancelled() }} # run: | # chmod +x .github/scripts/process_detekt_sarif.sh - # ./.github/scripts/process_detekt_sarif.sh versions/1.8.9/build/reports/detekt/detekt.sarif + # ./.github/scripts/process_detekt_sarif.sh versions/1.8.9/build/reports/detekt/main.sarif preprocess: From b2adc637fc55355fb107b286c4fda2d9ef351851 Mon Sep 17 00:00:00 2001 From: ReyMaratov <77993433+ReyMaratov@users.noreply.github.com> Date: Sun, 29 Sep 2024 09:45:23 +0200 Subject: [PATCH 022/155] Feature: Popup for Gold/Diamond Trophy Fishe Catches (#2615) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../trophyfishing/ChatMessagesConfig.java | 15 +++++++++++ .../fishing/trophy/TrophyFishMessages.kt | 27 ++++++++++++++++--- 2 files changed, 38 insertions(+), 4 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/fishing/trophyfishing/ChatMessagesConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/fishing/trophyfishing/ChatMessagesConfig.java index 0fab8615645c..c5a4dc341307 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/fishing/trophyfishing/ChatMessagesConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/fishing/trophyfishing/ChatMessagesConfig.java @@ -82,4 +82,19 @@ public String toString() { @ConfigOption(name = "Silver Duplicates", desc = "Hide duplicate messages for silver Trophy Fishes from chat.") @ConfigEditorBoolean public boolean silverHider = false; + + @Expose + @ConfigOption(name = "Gold Alert", desc = "Send an alert upon catching a gold Trophy Fish.") + @ConfigEditorBoolean + public boolean goldAlert = false; + + @Expose + @ConfigOption(name = "Diamond Alert", desc = "Send an alert upon catching a diamond Trophy Fish.") + @ConfigEditorBoolean + public boolean diamondAlert = false; + + @Expose + @ConfigOption(name = "Play Sound Alert", desc = "Play a sound effect when rare trophy fishes are caught.") + @ConfigEditorBoolean + public boolean playSound = true; } diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishMessages.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishMessages.kt index f97bd56c9466..66ddde50b939 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishMessages.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishMessages.kt @@ -14,10 +14,12 @@ import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.NumberUtil.ordinal import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher +import at.hannibal2.skyhanni.utils.SoundUtils import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern import net.minecraft.util.ChatComponentText import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import kotlin.time.Duration.Companion.seconds @SkyHanniModule object TrophyFishMessages { @@ -38,8 +40,7 @@ object TrophyFishMessages { } ?: return val internalName = getInternalName(displayName) - val rawRarity = displayRarity.lowercase().removeColor() - val rarity = TrophyRarity.getByName(rawRarity) ?: return + val rarity = TrophyRarity.getByName(displayRarity.lowercase().removeColor()) ?: return val trophyFishes = TrophyFishManager.fish ?: return val trophyFishCounts = trophyFishes.getOrPut(internalName) { mutableMapOf() } @@ -50,6 +51,15 @@ object TrophyFishMessages { event.blockedReason = "low_trophy_fish" return } + if (config.goldAlert && rarity == TrophyRarity.GOLD) { + sendTitle(displayName, displayRarity, amount) + if (config.playSound) SoundUtils.playBeepSound() + } + + if (config.diamondAlert && rarity == TrophyRarity.DIAMOND) { + sendTitle(displayName, displayRarity, amount) + if (config.playSound) SoundUtils.playBeepSound() + } val original = event.chatComponent var edited = original @@ -85,14 +95,23 @@ object TrophyFishMessages { } } + private fun sendTitle(displayName: String, displayRarity: String?, amount: Int) { + val text = "$displayName\n$displayRarity $amount!" + LorenzUtils.sendTitle(text, 3.seconds, 2.8, 7f) + } + fun getInternalName(displayName: String): String { return displayName.replace("Obfuscated", "Obfuscated Fish") .replace("[- ]".toRegex(), "").lowercase().removeColor() } private fun shouldBlockTrophyFish(rarity: TrophyRarity, amount: Int) = - config.bronzeHider && rarity == TrophyRarity.BRONZE && amount != 1 || - config.silverHider && rarity == TrophyRarity.SILVER && amount != 1 + config.bronzeHider && + rarity == TrophyRarity.BRONZE && + amount != 1 || + config.silverHider && + rarity == TrophyRarity.SILVER && + amount != 1 @SubscribeEvent fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { From 270e885ea9a7fc2efe40b9d91fa8de488c7bff53 Mon Sep 17 00:00:00 2001 From: ILike2WatchMemes Date: Sun, 29 Sep 2024 10:03:15 +0200 Subject: [PATCH 023/155] Fix: Experiments Profit Tracker bottle counting + edit tracker (#2594) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../ExperimentationTableAPI.kt | 10 +++- .../ExperimentsProfitTracker.kt | 59 ++++++++++++++----- 2 files changed, 53 insertions(+), 16 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/ExperimentationTableAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/ExperimentationTableAPI.kt index 80433b68e665..0c7fc1a73d4e 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/ExperimentationTableAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/ExperimentationTableAPI.kt @@ -117,9 +117,17 @@ object ExperimentationTableAPI { /** * REGEX-TEST: Titanic Experience Bottle */ + val experienceBottleChatPattern by patternGroup.pattern( + "chat.xpbottle", + "(?:Colossal |Titanic |Grand |\\b)Experience Bottle", + ) + + /** + * REGEX-TEST: TITANIC_EXP_BOTTLE + */ val experienceBottlePattern by patternGroup.pattern( "xpbottle", - "(?:Titanic |Grand |\\b)Experience Bottle", + "(?:COLOSSAL_|TITANIC_|GRAND_|\\b)EXP_BOTTLE", ) /** diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/ExperimentsProfitTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/ExperimentsProfitTracker.kt index 6e755d874018..ac1e8105ef25 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/ExperimentsProfitTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/ExperimentsProfitTracker.kt @@ -3,14 +3,18 @@ package at.hannibal2.skyhanni.features.inventory.experimentationtable import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.data.ClickType import at.hannibal2.skyhanni.data.IslandType +import at.hannibal2.skyhanni.data.ItemAddManager +import at.hannibal2.skyhanni.events.GuiContainerEvent import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.InventoryCloseEvent import at.hannibal2.skyhanni.events.InventoryUpdatedEvent import at.hannibal2.skyhanni.events.IslandChangeEvent +import at.hannibal2.skyhanni.events.ItemAddEvent import at.hannibal2.skyhanni.events.ItemClickEvent import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.features.inventory.experimentationtable.ExperimentationTableAPI.claimMessagePattern import at.hannibal2.skyhanni.features.inventory.experimentationtable.ExperimentationTableAPI.enchantingExpPattern +import at.hannibal2.skyhanni.features.inventory.experimentationtable.ExperimentationTableAPI.experienceBottleChatPattern import at.hannibal2.skyhanni.features.inventory.experimentationtable.ExperimentationTableAPI.experienceBottlePattern import at.hannibal2.skyhanni.features.inventory.experimentationtable.ExperimentationTableAPI.experimentRenewPattern import at.hannibal2.skyhanni.features.inventory.experimentationtable.ExperimentationTableAPI.experimentsDropPattern @@ -28,7 +32,6 @@ import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzVec import at.hannibal2.skyhanni.utils.NEUInternalName import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators -import at.hannibal2.skyhanni.utils.NumberUtil.roundTo import at.hannibal2.skyhanni.utils.NumberUtil.shortFormat import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher import at.hannibal2.skyhanni.utils.RegexUtils.matches @@ -56,7 +59,7 @@ object ExperimentsProfitTracker { { it.experimentation.experimentsProfitTracker }, ) { drawDisplay(it) } - private var lastSplashes = mutableListOf() + private val lastSplashes = mutableListOf() private var lastSplashTime = SimpleTimeMark.farPast() private var lastBottlesInInventory = mutableMapOf() private var currentBottlesInInventory = mutableMapOf() @@ -95,6 +98,13 @@ object ExperimentsProfitTracker { var startCost = 0L } + @SubscribeEvent + fun onItemAdd(event: ItemAddEvent) { + if (!isEnabled() || event.source != ItemAddManager.Source.COMMAND) return + + tracker.addItem(event.internalName, event.amount, command = true) + } + @SubscribeEvent fun onChat(event: LorenzChatEvent) { if (!isEnabled()) return @@ -120,7 +130,7 @@ object ExperimentsProfitTracker { private fun LorenzChatEvent.handleDrop(reward: String) { blockedReason = when { enchantingExpPattern.matches(reward) && ExperimentMessages.EXPERIENCE.isSelected() -> "EXPERIENCE_DROP" - experienceBottlePattern.matches(reward) && ExperimentMessages.BOTTLES.isSelected() -> "BOTTLE_DROP" + experienceBottleChatPattern.matches(reward) && ExperimentMessages.BOTTLES.isSelected() -> "BOTTLE_DROP" listOf("Metaphysical Serum", "Experiment The Fish").contains(reward) && ExperimentMessages.MISC.isSelected() -> "MISC_DROP" ExperimentMessages.ENCHANTMENTS.isSelected() -> "ENCHANT_DROP" else -> "" @@ -134,37 +144,49 @@ object ExperimentsProfitTracker { } val internalName = NEUInternalName.fromItemNameOrNull(reward) ?: return - if (!experienceBottlePattern.matches(reward)) tracker.addItem(internalName, 1, false) + if (!experienceBottleChatPattern.matches(reward)) tracker.addItem(internalName, 1, false) else DelayedRun.runDelayed(100.milliseconds) { handleExpBottles(true) } } + @SubscribeEvent + fun onSlotClick(event: GuiContainerEvent.SlotClickEvent) { + if (!isEnabled() || + InventoryUtils.openInventoryName() != "Bottles of Enchanting" || + !listOf(11, 12, 14, 15).contains(event.slotId) + ) return + val stack = event.slot?.stack ?: return + + val internalName = stack.getInternalName() + if (internalName.isExpBottle()) { + tracker.modify { + it.startCost -= calculateBottlePrice(internalName) + } + } + } + @SubscribeEvent fun onItemClick(event: ItemClickEvent) { - if (event.clickType == ClickType.RIGHT_CLICK) { + if (isEnabled() && event.clickType == ClickType.RIGHT_CLICK) { val item = event.itemInHand ?: return - if (experienceBottlePattern.matches(item.displayName.removeColor())) { + if (item.getInternalName().isExpBottle()) { lastSplashTime = SimpleTimeMark.now() lastSplashes.add(item) } } } + private fun NEUInternalName.isExpBottle() = experienceBottlePattern.matches(asString()) + @SubscribeEvent fun onInventoryUpdated(event: InventoryUpdatedEvent) { if (!isEnabled()) return if (inventoriesPattern.matches(event.inventoryName)) { var startCostTemp = 0 - val iterator = lastSplashes.iterator() - while (iterator.hasNext()) { - val item = iterator.next() - val internalName = item.getInternalName() - val price = internalName.getPrice() - val npcPrice = internalName.getNpcPriceOrNull() ?: 0.0 - val maxPrice = npcPrice.coerceAtLeast(price) - startCostTemp += maxPrice.roundTo(0).toInt() - iterator.remove() + for (item in lastSplashes) { + startCostTemp += calculateBottlePrice(item.getInternalName()) } + lastSplashes.clear() tracker.modify { it.startCost -= startCostTemp } @@ -174,6 +196,13 @@ object ExperimentsProfitTracker { handleExpBottles(false) } + private fun calculateBottlePrice(internalName: NEUInternalName): Int { + val price = internalName.getPrice() + val npcPrice = internalName.getNpcPriceOrNull() ?: 0.0 + val maxPrice = npcPrice.coerceAtLeast(price) + return maxPrice.toInt() + } + @SubscribeEvent fun onInventoryClose(event: InventoryCloseEvent) { if (!isEnabled()) return From 1f4ce6c4207fe6ef6eaff48a35f61b18a524a429 Mon Sep 17 00:00:00 2001 From: Stella Date: Sun, 29 Sep 2024 01:06:40 -0700 Subject: [PATCH 024/155] Fix: Flare Display negative values in chat with lag (#2567) Co-authored-by: Cal Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../at/hannibal2/skyhanni/features/combat/FlareDisplay.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/FlareDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/FlareDisplay.kt index fd2b513cf561..5a67e1d3405f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/FlareDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/FlareDisplay.kt @@ -48,7 +48,7 @@ object FlareDisplay { "ewogICJ0aW1lc3RhbXAiIDogMTY0NjY4NzMyNjQzMiwKICAicHJvZmlsZUlkIiA6ICI0MWQzYWJjMmQ3NDk0MDBjOTA5MGQ1NDM0ZDAzODMxYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNZWdha2xvb24iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOWQyYmY5ODY0NzIwZDg3ZmQwNmI4NGVmYTgwYjc5NWM0OGVkNTM5YjE2NTIzYzNiMWYxOTkwYjQwYzAwM2Y2YiIKICAgIH0KICB9Cn0=" to FlareType.ALERT, "ewogICJ0aW1lc3RhbXAiIDogMTY0NjY4NzM0NzQ4OSwKICAicHJvZmlsZUlkIiA6ICI0MWQzYWJjMmQ3NDk0MDBjOTA5MGQ1NDM0ZDAzODMxYiIsCiAgInByb2ZpbGVOYW1lIiA6ICJNZWdha2xvb24iLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzAwNjJjYzk4ZWJkYTcyYTZhNGI4OTc4M2FkY2VmMjgxNWI0ODNhMDFkNzNlYTg3YjNkZjc2MDcyYTg5ZDEzYiIKICAgIH0KICB9Cn0=" - to FlareType.SOS + to FlareType.SOS, ) @SubscribeEvent @@ -92,7 +92,8 @@ object FlareDisplay { val name = type.displayName if (newDisplay == null) { newDisplay = buildList { - add(Renderable.string("$name: §b${remainingTime.format()}")) + val displayTime = if (remainingTime.isNegative()) "§eSoon" else "§b${remainingTime.format()}" + add(Renderable.string("$name: $displayTime")) if (config.showManaBuff) { type.manaBuff?.let { add(Renderable.string(" §b$it §7mana regen")) @@ -100,7 +101,7 @@ object FlareDisplay { } } } - if (remainingTime > 5.seconds) continue + if (remainingTime !in 5.seconds..0.seconds) continue val message = "$name §eexpires in: §b${remainingTime.inWholeSeconds}s" when (config.alertType) { FlareConfig.AlertType.CHAT -> { @@ -194,7 +195,6 @@ object FlareDisplay { SOS("§5SOS Flare", "+125%"), ALERT("§9Alert Flare", "+50%"), WARNING("§aWarning Flare", null), - ; } private fun isEnabled() = LorenzUtils.inSkyBlock && config.enabled From 37a186a932fcd81cfed66642e6a7833937f43b3a Mon Sep 17 00:00:00 2001 From: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> Date: Sun, 29 Sep 2024 18:10:12 +1000 Subject: [PATCH 025/155] Backend: Detekt Fixes Part 2 (#2607) --- .../at/hannibal2/skyhanni/api/GetFromSackAPI.kt | 2 +- .../java/at/hannibal2/skyhanni/api/HotmAPI.kt | 2 +- .../data/hypixel/chat/PlayerNameFormatter.kt | 2 +- .../data/hypixel/chat/event/PartyChatEvent.kt | 2 +- .../skyhanni/events/BossHealthChangeEvent.kt | 3 +-- .../skyhanni/events/BurrowDetectEvent.kt | 2 +- .../hannibal2/skyhanni/events/BurrowDugEvent.kt | 2 +- .../skyhanni/events/CollectionUpdateEvent.kt | 2 +- .../hannibal2/skyhanni/events/ConfigLoadEvent.kt | 2 +- .../skyhanni/events/CropMilestoneUpdateEvent.kt | 2 +- .../skyhanni/events/DamageIndicatorDeathEvent.kt | 1 + .../events/DamageIndicatorDetectedEvent.kt | 2 +- .../events/DamageIndicatorFinalBossEvent.kt | 2 +- .../skyhanni/events/DrawScreenAfterEvent.kt | 2 +- .../skyhanni/events/DungeonBlockClickEvent.kt | 1 + .../skyhanni/events/DungeonBossRoomEnterEvent.kt | 2 +- .../skyhanni/events/DungeonEnterEvent.kt | 2 +- .../skyhanni/events/DungeonStartEvent.kt | 2 +- .../skyhanni/events/EntityHealthUpdateEvent.kt | 2 +- .../skyhanni/events/EntityMaxHealthUpdateEvent.kt | 2 +- .../skyhanni/events/FarmingContestEvent.kt | 2 +- .../skyhanni/events/GardenToolChangeEvent.kt | 2 +- .../hannibal2/skyhanni/events/GuiRenderEvent.kt | 2 +- .../hannibal2/skyhanni/events/HypixelJoinEvent.kt | 2 +- .../skyhanni/events/IslandChangeEvent.kt | 2 +- .../skyhanni/events/LorenzKeyPressEvent.kt | 2 +- .../skyhanni/events/LorenzRenderWorldEvent.kt | 2 +- .../skyhanni/events/LorenzWorldChangeEvent.kt | 2 +- .../skyhanni/events/RenderBlockInWorldEvent.kt | 3 +-- .../events/RenderInventoryItemTipEvent.kt | 2 +- .../skyhanni/events/SlayerChangeEvent.kt | 2 +- .../skyhanni/events/SlayerProgressChangeEvent.kt | 2 +- .../skyhanni/events/SlayerQuestCompleteEvent.kt | 2 +- .../skyhanni/events/TabListLineRenderEvent.kt | 2 +- .../skyhanni/events/TabListUpdateEvent.kt | 2 +- .../skyhanni/events/TitleReceivedEvent.kt | 2 +- .../events/garden/visitor/VisitorAcceptEvent.kt | 2 +- .../events/garden/visitor/VisitorAcceptedEvent.kt | 2 +- .../events/garden/visitor/VisitorArrivalEvent.kt | 2 +- .../events/garden/visitor/VisitorLeftEvent.kt | 2 +- .../events/garden/visitor/VisitorOpenEvent.kt | 2 +- .../events/garden/visitor/VisitorRefusedEvent.kt | 2 +- .../events/garden/visitor/VisitorRenderEvent.kt | 3 +-- .../features/chat/PowderMiningChatFilter.kt | 2 +- .../features/combat/damageindicator/OldDamage.kt | 2 +- .../skyhanni/features/commands/WikiManager.kt | 2 +- .../features/dungeon/DungeonFinderFeatures.kt | 2 +- .../features/dungeon/DungeonLividFinder.kt | 2 +- .../event/carnival/CarnivalZombieShootout.kt | 2 +- .../event/hoppity/HoppityEggsCompactChat.kt | 2 +- .../features/fishing/trophy/GoldenFishTimer.kt | 2 -- .../skyhanni/features/garden/AnitaMedalProfit.kt | 2 +- .../features/garden/GardenNextJacobContest.kt | 2 +- .../features/garden/composter/ComposterOverlay.kt | 4 ++-- .../features/garden/contest/FarmingContest.kt | 2 +- .../garden/contest/FarmingContestPhase.kt | 2 +- .../features/garden/farming/GardenCropSpeed.kt | 1 - .../garden/inventory/SkyMartCopperPrice.kt | 4 ++-- .../garden/visitor/GardenVisitorFeatures.kt | 2 +- .../gui/customscoreboard/ScoreboardEvent.kt | 15 +++++++-------- .../skyhanni/features/inventory/ItemPickupLog.kt | 2 +- .../skyhanni/features/inventory/SackDisplay.kt | 2 +- .../ChocolateFactoryStrayTracker.kt | 4 ++-- .../chocolatefactory/ChocolateShopPrice.kt | 2 +- .../skyhanni/features/mining/TunnelsMaps.kt | 2 +- .../mining/powdertracker/PowderTracker.kt | 2 +- .../skyhanni/features/misc/CarryTracker.kt | 6 +++--- .../skyhanni/features/misc/IslandAreas.kt | 4 ++-- .../skyhanni/features/misc/MagicalPowerDisplay.kt | 2 +- .../skyhanni/features/misc/MiscFeatures.kt | 1 - .../misc/RoundedRectangleOutlineShader.kt | 2 +- .../features/misc/compacttablist/TabLine.kt | 2 +- .../misc/items/EstimatedItemValueCalculator.kt | 4 ++-- .../features/misc/items/enchants/Enchant.kt | 4 ++-- .../features/misc/items/enchants/EnchantParser.kt | 1 - .../features/misc/massconfiguration/Category.kt | 2 +- .../massconfiguration/ResetSuggestionState.kt | 2 +- .../misc/update/GuiOptionEditorUpdateCheck.kt | 2 +- .../nether/reputationhelper/FactionType.kt | 2 +- .../dailyquest/quest/MiniBossQuest.kt | 2 +- .../dailyquest/quest/QuestCategory.kt | 2 +- .../dailyquest/quest/QuestState.kt | 2 +- .../features/skillprogress/SkillProgress.kt | 2 +- .../features/slayer/SlayerRngMeterDisplay.kt | 2 +- .../skyhanni/test/SkyHanniDebugsAndTests.kt | 4 ++-- .../skyhanni/test/command/CopyItemCommand.kt | 4 ++-- .../at/hannibal2/skyhanni/utils/EntityUtils.kt | 1 - .../utils/tracker/SkyHanniBucketedItemTracker.kt | 2 +- .../skyhanni/utils/tracker/SkyHanniItemTracker.kt | 2 +- 89 files changed, 100 insertions(+), 108 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/api/GetFromSackAPI.kt b/src/main/java/at/hannibal2/skyhanni/api/GetFromSackAPI.kt index 89ccfd656f07..9da50e13eaba 100644 --- a/src/main/java/at/hannibal2/skyhanni/api/GetFromSackAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/api/GetFromSackAPI.kt @@ -163,7 +163,7 @@ object GetFromSackAPI { } private fun bazaarMessage(item: String, amount: Int, isRemaining: Boolean = false) = ChatUtils.clickableChat( - "§lCLICK §r§eto get the ${if (isRemaining) "remaining " else ""}§ax${amount} §9$item §efrom bazaar", + "§lCLICK §r§eto get the ${if (isRemaining) "remaining " else ""}§ax$amount §9$item §efrom bazaar", onClick = { HypixelCommands.bazaar(item.removeColor()) }, "§eClick to find on the bazaar!", ) diff --git a/src/main/java/at/hannibal2/skyhanni/api/HotmAPI.kt b/src/main/java/at/hannibal2/skyhanni/api/HotmAPI.kt index 6217c56c21d0..f2b2756554a3 100644 --- a/src/main/java/at/hannibal2/skyhanni/api/HotmAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/api/HotmAPI.kt @@ -74,7 +74,7 @@ object HotmAPI { /** Use when new powder gets collected*/ fun gain(difference: Long) { - ChatUtils.debug("Gained §a${difference.addSeparators()} §e${displayName} Powder") + ChatUtils.debug("Gained §a${difference.addSeparators()} §e$displayName Powder") addTotal(difference) addCurrent(difference) PowderGainEvent(this, difference).post() diff --git a/src/main/java/at/hannibal2/skyhanni/data/hypixel/chat/PlayerNameFormatter.kt b/src/main/java/at/hannibal2/skyhanni/data/hypixel/chat/PlayerNameFormatter.kt index 94bc665b6202..edc4f65b0388 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/hypixel/chat/PlayerNameFormatter.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/hypixel/chat/PlayerNameFormatter.kt @@ -214,7 +214,7 @@ object PlayerNameFormatter { val color = rawColor ?: return null val level = rawLevel?.getText() ?: error("level is null, color is not null") val levelData = "$color$level" - val result = if (config.hideLevelBrackets) levelData else "§8[${levelData}§8]" + val result = if (config.hideLevelBrackets) levelData else "§8[$levelData§8]" return result.applyFormattingFrom(rawLevel) } diff --git a/src/main/java/at/hannibal2/skyhanni/data/hypixel/chat/event/PartyChatEvent.kt b/src/main/java/at/hannibal2/skyhanni/data/hypixel/chat/event/PartyChatEvent.kt index a26af584b8a6..e2b9e04ef3ff 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/hypixel/chat/event/PartyChatEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/hypixel/chat/event/PartyChatEvent.kt @@ -1,7 +1,7 @@ package at.hannibal2.skyhanni.data.hypixel.chat.event -import at.hannibal2.skyhanni.utils.StringUtils.cleanPlayerName import at.hannibal2.skyhanni.utils.ComponentSpan +import at.hannibal2.skyhanni.utils.StringUtils.cleanPlayerName import net.minecraft.util.IChatComponent class PartyChatEvent( diff --git a/src/main/java/at/hannibal2/skyhanni/events/BossHealthChangeEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/BossHealthChangeEvent.kt index 10efc2823f20..42a827123411 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/BossHealthChangeEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/BossHealthChangeEvent.kt @@ -2,5 +2,4 @@ package at.hannibal2.skyhanni.events import at.hannibal2.skyhanni.features.combat.damageindicator.EntityData -class BossHealthChangeEvent(val entityData: EntityData, val lastHealth: Long, val health: Long, val maxHealth: Long) : - LorenzEvent() \ No newline at end of file +class BossHealthChangeEvent(val entityData: EntityData, val lastHealth: Long, val health: Long, val maxHealth: Long) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/BurrowDetectEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/BurrowDetectEvent.kt index cca221932138..26e13c42daa6 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/BurrowDetectEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/BurrowDetectEvent.kt @@ -3,4 +3,4 @@ package at.hannibal2.skyhanni.events import at.hannibal2.skyhanni.features.event.diana.BurrowType import at.hannibal2.skyhanni.utils.LorenzVec -class BurrowDetectEvent(val burrowLocation: LorenzVec, val type: BurrowType) : LorenzEvent() \ No newline at end of file +class BurrowDetectEvent(val burrowLocation: LorenzVec, val type: BurrowType) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/BurrowDugEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/BurrowDugEvent.kt index d362cca0901b..3f601fd2bb31 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/BurrowDugEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/BurrowDugEvent.kt @@ -2,4 +2,4 @@ package at.hannibal2.skyhanni.events import at.hannibal2.skyhanni.utils.LorenzVec -class BurrowDugEvent(val burrowLocation: LorenzVec) : LorenzEvent() \ No newline at end of file +class BurrowDugEvent(val burrowLocation: LorenzVec) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/CollectionUpdateEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/CollectionUpdateEvent.kt index b62dcb14925c..f4c46d0b75d5 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/CollectionUpdateEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/CollectionUpdateEvent.kt @@ -1,3 +1,3 @@ package at.hannibal2.skyhanni.events -class CollectionUpdateEvent : LorenzEvent() \ No newline at end of file +class CollectionUpdateEvent : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/ConfigLoadEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/ConfigLoadEvent.kt index b5afff5477b9..4f1efeb9c246 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/ConfigLoadEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/ConfigLoadEvent.kt @@ -1,3 +1,3 @@ package at.hannibal2.skyhanni.events -class ConfigLoadEvent : LorenzEvent() \ No newline at end of file +class ConfigLoadEvent : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/CropMilestoneUpdateEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/CropMilestoneUpdateEvent.kt index 9ca3bd56b843..8da8b20f75ce 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/CropMilestoneUpdateEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/CropMilestoneUpdateEvent.kt @@ -1,3 +1,3 @@ package at.hannibal2.skyhanni.events -class CropMilestoneUpdateEvent : LorenzEvent() \ No newline at end of file +class CropMilestoneUpdateEvent : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/DamageIndicatorDeathEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/DamageIndicatorDeathEvent.kt index 141f293a388d..95b08ec51926 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/DamageIndicatorDeathEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/DamageIndicatorDeathEvent.kt @@ -4,3 +4,4 @@ import at.hannibal2.skyhanni.features.combat.damageindicator.EntityData import net.minecraft.entity.EntityLivingBase class DamageIndicatorDeathEvent(val entity: EntityLivingBase, val data: EntityData) : LorenzEvent() + diff --git a/src/main/java/at/hannibal2/skyhanni/events/DamageIndicatorDetectedEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/DamageIndicatorDetectedEvent.kt index dbf2fd130e9a..2ca276e4c884 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/DamageIndicatorDetectedEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/DamageIndicatorDetectedEvent.kt @@ -2,4 +2,4 @@ package at.hannibal2.skyhanni.events import at.hannibal2.skyhanni.features.combat.damageindicator.EntityData -class DamageIndicatorDetectedEvent(val entityData: EntityData) : LorenzEvent() \ No newline at end of file +class DamageIndicatorDetectedEvent(val entityData: EntityData) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/DamageIndicatorFinalBossEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/DamageIndicatorFinalBossEvent.kt index 88e41538afb3..0d2564005091 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/DamageIndicatorFinalBossEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/DamageIndicatorFinalBossEvent.kt @@ -1,3 +1,3 @@ package at.hannibal2.skyhanni.events -class DamageIndicatorFinalBossEvent(val id: Int) : LorenzEvent() \ No newline at end of file +class DamageIndicatorFinalBossEvent(val id: Int) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/DrawScreenAfterEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/DrawScreenAfterEvent.kt index ba278df24643..822b80419983 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/DrawScreenAfterEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/DrawScreenAfterEvent.kt @@ -2,4 +2,4 @@ package at.hannibal2.skyhanni.events import org.spongepowered.asm.mixin.injection.callback.CallbackInfo -class DrawScreenAfterEvent(val mouseX: Int, val mouseY: Int, val ci: CallbackInfo) : LorenzEvent() \ No newline at end of file +class DrawScreenAfterEvent(val mouseX: Int, val mouseY: Int, val ci: CallbackInfo) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/DungeonBlockClickEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/DungeonBlockClickEvent.kt index 9a7f5119aa64..84d1b822f6b4 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/DungeonBlockClickEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/DungeonBlockClickEvent.kt @@ -5,3 +5,4 @@ import at.hannibal2.skyhanni.data.ClickedBlockType import at.hannibal2.skyhanni.utils.LorenzVec class DungeonBlockClickEvent(val position: LorenzVec, val blockType: ClickedBlockType) : SkyHanniEvent() + diff --git a/src/main/java/at/hannibal2/skyhanni/events/DungeonBossRoomEnterEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/DungeonBossRoomEnterEvent.kt index 243268181e41..9f372d5c31c2 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/DungeonBossRoomEnterEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/DungeonBossRoomEnterEvent.kt @@ -1,3 +1,3 @@ package at.hannibal2.skyhanni.events -class DungeonBossRoomEnterEvent : LorenzEvent() \ No newline at end of file +class DungeonBossRoomEnterEvent : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/DungeonEnterEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/DungeonEnterEvent.kt index b980c75953f1..3b0f09c4a096 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/DungeonEnterEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/DungeonEnterEvent.kt @@ -1,3 +1,3 @@ package at.hannibal2.skyhanni.events -class DungeonEnterEvent(dungeonFloor: String) : LorenzEvent() \ No newline at end of file +class DungeonEnterEvent(dungeonFloor: String) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/DungeonStartEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/DungeonStartEvent.kt index b4de1e6c90ba..a2b127371089 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/DungeonStartEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/DungeonStartEvent.kt @@ -1,3 +1,3 @@ package at.hannibal2.skyhanni.events -class DungeonStartEvent(dungeonFloor: String) : LorenzEvent() \ No newline at end of file +class DungeonStartEvent(dungeonFloor: String) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/EntityHealthUpdateEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/EntityHealthUpdateEvent.kt index 5fbcfb9d7c8a..162efd9caa59 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/EntityHealthUpdateEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/EntityHealthUpdateEvent.kt @@ -2,4 +2,4 @@ package at.hannibal2.skyhanni.events import net.minecraft.entity.EntityLivingBase -class EntityHealthUpdateEvent(val entity: EntityLivingBase, val health: Int) : LorenzEvent() \ No newline at end of file +class EntityHealthUpdateEvent(val entity: EntityLivingBase, val health: Int) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/EntityMaxHealthUpdateEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/EntityMaxHealthUpdateEvent.kt index 116e81797590..943a11cc3720 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/EntityMaxHealthUpdateEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/EntityMaxHealthUpdateEvent.kt @@ -2,4 +2,4 @@ package at.hannibal2.skyhanni.events import net.minecraft.entity.EntityLivingBase -class EntityMaxHealthUpdateEvent(val entity: EntityLivingBase, val maxHealth: Int) : LorenzEvent() \ No newline at end of file +class EntityMaxHealthUpdateEvent(val entity: EntityLivingBase, val maxHealth: Int) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/FarmingContestEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/FarmingContestEvent.kt index 75521bacd506..5a4a83c1f829 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/FarmingContestEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/FarmingContestEvent.kt @@ -3,4 +3,4 @@ package at.hannibal2.skyhanni.events import at.hannibal2.skyhanni.features.garden.CropType import at.hannibal2.skyhanni.features.garden.contest.FarmingContestPhase -class FarmingContestEvent(val crop: CropType, val phase: FarmingContestPhase) : LorenzEvent() \ No newline at end of file +class FarmingContestEvent(val crop: CropType, val phase: FarmingContestPhase) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/GardenToolChangeEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/GardenToolChangeEvent.kt index 742dac58df46..2ad07aad8975 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/GardenToolChangeEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/GardenToolChangeEvent.kt @@ -3,4 +3,4 @@ package at.hannibal2.skyhanni.events import at.hannibal2.skyhanni.features.garden.CropType import net.minecraft.item.ItemStack -class GardenToolChangeEvent(val crop: CropType?, val toolItem: ItemStack?) : LorenzEvent() \ No newline at end of file +class GardenToolChangeEvent(val crop: CropType?, val toolItem: ItemStack?) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/GuiRenderEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/GuiRenderEvent.kt index a9d190f89eba..954bd0733391 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/GuiRenderEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/GuiRenderEvent.kt @@ -3,4 +3,4 @@ package at.hannibal2.skyhanni.events open class GuiRenderEvent : LorenzEvent() { class ChestGuiOverlayRenderEvent : GuiRenderEvent() class GuiOverlayRenderEvent : GuiRenderEvent() -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/events/HypixelJoinEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/HypixelJoinEvent.kt index 044d63daae37..6f7711118be6 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/HypixelJoinEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/HypixelJoinEvent.kt @@ -1,3 +1,3 @@ package at.hannibal2.skyhanni.events -class HypixelJoinEvent : LorenzEvent() \ No newline at end of file +class HypixelJoinEvent : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/IslandChangeEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/IslandChangeEvent.kt index 291ccd995db9..ae22a4c751ad 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/IslandChangeEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/IslandChangeEvent.kt @@ -2,4 +2,4 @@ package at.hannibal2.skyhanni.events import at.hannibal2.skyhanni.data.IslandType -class IslandChangeEvent(val newIsland: IslandType, val oldIsland: IslandType) : LorenzEvent() \ No newline at end of file +class IslandChangeEvent(val newIsland: IslandType, val oldIsland: IslandType) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/LorenzKeyPressEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/LorenzKeyPressEvent.kt index 70997f0c1abb..e5af23d22ab6 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/LorenzKeyPressEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/LorenzKeyPressEvent.kt @@ -1,3 +1,3 @@ package at.hannibal2.skyhanni.events -class LorenzKeyPressEvent(val keyCode: Int) : LorenzEvent() \ No newline at end of file +class LorenzKeyPressEvent(val keyCode: Int) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/LorenzRenderWorldEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/LorenzRenderWorldEvent.kt index 5ce44df0db15..f61f0e16d35d 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/LorenzRenderWorldEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/LorenzRenderWorldEvent.kt @@ -1,3 +1,3 @@ package at.hannibal2.skyhanni.events -class LorenzRenderWorldEvent(val partialTicks: Float) : LorenzEvent() \ No newline at end of file +class LorenzRenderWorldEvent(val partialTicks: Float) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/LorenzWorldChangeEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/LorenzWorldChangeEvent.kt index c815e96302fd..de67180273b0 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/LorenzWorldChangeEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/LorenzWorldChangeEvent.kt @@ -1,3 +1,3 @@ package at.hannibal2.skyhanni.events -class LorenzWorldChangeEvent : LorenzEvent() \ No newline at end of file +class LorenzWorldChangeEvent : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/RenderBlockInWorldEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/RenderBlockInWorldEvent.kt index 4aa3ef9dc4e7..395d1be2db0c 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/RenderBlockInWorldEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/RenderBlockInWorldEvent.kt @@ -6,5 +6,4 @@ import net.minecraft.world.IBlockAccess import net.minecraftforge.fml.common.eventhandler.Cancelable @Cancelable -data class RenderBlockInWorldEvent(@JvmField var state: IBlockState?, var world: IBlockAccess, var pos: BlockPos?) : - LorenzEvent() \ No newline at end of file +data class RenderBlockInWorldEvent(@JvmField var state: IBlockState?, var world: IBlockAccess, var pos: BlockPos?) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/RenderInventoryItemTipEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/RenderInventoryItemTipEvent.kt index 7bb4692ece5a..0f16dad2a4a1 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/RenderInventoryItemTipEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/RenderInventoryItemTipEvent.kt @@ -11,4 +11,4 @@ class RenderInventoryItemTipEvent( var offsetX: Int = 0, var offsetY: Int = 0, var alignLeft: Boolean = true, -) : LorenzEvent() \ No newline at end of file +) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/SlayerChangeEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/SlayerChangeEvent.kt index 7c70dde5d53e..c7da7f7bd7d3 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/SlayerChangeEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/SlayerChangeEvent.kt @@ -1,3 +1,3 @@ package at.hannibal2.skyhanni.events -class SlayerChangeEvent(val oldSlayer: String, val newSlayer: String) : LorenzEvent() \ No newline at end of file +class SlayerChangeEvent(val oldSlayer: String, val newSlayer: String) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/SlayerProgressChangeEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/SlayerProgressChangeEvent.kt index 95ecf447f706..b87a854e1922 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/SlayerProgressChangeEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/SlayerProgressChangeEvent.kt @@ -1,3 +1,3 @@ package at.hannibal2.skyhanni.events -class SlayerProgressChangeEvent(val oldProgress: String, val newProgress: String) : LorenzEvent() \ No newline at end of file +class SlayerProgressChangeEvent(val oldProgress: String, val newProgress: String) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/SlayerQuestCompleteEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/SlayerQuestCompleteEvent.kt index 8c7aa753ee8b..b7e0edfedd59 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/SlayerQuestCompleteEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/SlayerQuestCompleteEvent.kt @@ -1,3 +1,3 @@ package at.hannibal2.skyhanni.events -class SlayerQuestCompleteEvent : LorenzEvent() \ No newline at end of file +class SlayerQuestCompleteEvent : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/TabListLineRenderEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/TabListLineRenderEvent.kt index 8916c55faa4c..47478959291d 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/TabListLineRenderEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/TabListLineRenderEvent.kt @@ -1,3 +1,3 @@ package at.hannibal2.skyhanni.events -class TabListLineRenderEvent(var text: String) : LorenzEvent() \ No newline at end of file +class TabListLineRenderEvent(var text: String) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/TabListUpdateEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/TabListUpdateEvent.kt index b3ab18bab956..a1b36a667fb3 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/TabListUpdateEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/TabListUpdateEvent.kt @@ -1,3 +1,3 @@ package at.hannibal2.skyhanni.events -class TabListUpdateEvent(val tabList: List) : LorenzEvent() \ No newline at end of file +class TabListUpdateEvent(val tabList: List) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/TitleReceivedEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/TitleReceivedEvent.kt index 2576809cc93e..912a4d8d6564 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/TitleReceivedEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/TitleReceivedEvent.kt @@ -3,4 +3,4 @@ package at.hannibal2.skyhanni.events import net.minecraftforge.fml.common.eventhandler.Cancelable @Cancelable -class TitleReceivedEvent(val title: String) : LorenzEvent() \ No newline at end of file +class TitleReceivedEvent(val title: String) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorAcceptEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorAcceptEvent.kt index 4a494f35314f..41a429cfd372 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorAcceptEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorAcceptEvent.kt @@ -3,4 +3,4 @@ package at.hannibal2.skyhanni.events.garden.visitor import at.hannibal2.skyhanni.events.LorenzEvent import at.hannibal2.skyhanni.features.garden.visitor.VisitorAPI -class VisitorAcceptEvent(val visitor: VisitorAPI.Visitor) : LorenzEvent() \ No newline at end of file +class VisitorAcceptEvent(val visitor: VisitorAPI.Visitor) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorAcceptedEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorAcceptedEvent.kt index e3bffed8b923..5b894768fb39 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorAcceptedEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorAcceptedEvent.kt @@ -3,4 +3,4 @@ package at.hannibal2.skyhanni.events.garden.visitor import at.hannibal2.skyhanni.events.LorenzEvent import at.hannibal2.skyhanni.features.garden.visitor.VisitorAPI -class VisitorAcceptedEvent(val visitor: VisitorAPI.Visitor) : LorenzEvent() \ No newline at end of file +class VisitorAcceptedEvent(val visitor: VisitorAPI.Visitor) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorArrivalEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorArrivalEvent.kt index 673f45e201b6..f26dbb971275 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorArrivalEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorArrivalEvent.kt @@ -3,4 +3,4 @@ package at.hannibal2.skyhanni.events.garden.visitor import at.hannibal2.skyhanni.events.LorenzEvent import at.hannibal2.skyhanni.features.garden.visitor.VisitorAPI.Visitor -class VisitorArrivalEvent(val visitor: Visitor) : LorenzEvent() \ No newline at end of file +class VisitorArrivalEvent(val visitor: Visitor) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorLeftEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorLeftEvent.kt index f906364ced2b..f5673decd0e4 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorLeftEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorLeftEvent.kt @@ -3,4 +3,4 @@ package at.hannibal2.skyhanni.events.garden.visitor import at.hannibal2.skyhanni.events.LorenzEvent import at.hannibal2.skyhanni.features.garden.visitor.VisitorAPI -class VisitorLeftEvent(val visitor: VisitorAPI.Visitor) : LorenzEvent() \ No newline at end of file +class VisitorLeftEvent(val visitor: VisitorAPI.Visitor) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorOpenEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorOpenEvent.kt index 6abec9865725..c2e7a40b0c3d 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorOpenEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorOpenEvent.kt @@ -3,4 +3,4 @@ package at.hannibal2.skyhanni.events.garden.visitor import at.hannibal2.skyhanni.events.LorenzEvent import at.hannibal2.skyhanni.features.garden.visitor.VisitorAPI -class VisitorOpenEvent(val visitor: VisitorAPI.Visitor) : LorenzEvent() \ No newline at end of file +class VisitorOpenEvent(val visitor: VisitorAPI.Visitor) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorRefusedEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorRefusedEvent.kt index fea24fba9bb8..94de16081b04 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorRefusedEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorRefusedEvent.kt @@ -3,4 +3,4 @@ package at.hannibal2.skyhanni.events.garden.visitor import at.hannibal2.skyhanni.events.LorenzEvent import at.hannibal2.skyhanni.features.garden.visitor.VisitorAPI -class VisitorRefusedEvent(val visitor: VisitorAPI.Visitor) : LorenzEvent() \ No newline at end of file +class VisitorRefusedEvent(val visitor: VisitorAPI.Visitor) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorRenderEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorRenderEvent.kt index 7cbdc8224fb0..9282d3e04fe6 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorRenderEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/garden/visitor/VisitorRenderEvent.kt @@ -5,5 +5,4 @@ import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent import at.hannibal2.skyhanni.features.garden.visitor.VisitorAPI import at.hannibal2.skyhanni.utils.LorenzVec -class VisitorRenderEvent(val visitor: VisitorAPI.Visitor, val location: LorenzVec, val parent: LorenzRenderWorldEvent) : - LorenzEvent() \ No newline at end of file +class VisitorRenderEvent(val visitor: VisitorAPI.Visitor, val location: LorenzVec, val parent: LorenzRenderWorldEvent) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/features/chat/PowderMiningChatFilter.kt b/src/main/java/at/hannibal2/skyhanni/features/chat/PowderMiningChatFilter.kt index 25c1c04cb0db..d6e992738c67 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/chat/PowderMiningChatFilter.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/chat/PowderMiningChatFilter.kt @@ -359,7 +359,7 @@ object PowderMiningChatFilter { else -> { ErrorManager.logErrorWithData( NoSuchElementException(), - "Unknown Goblin Egg color detected in Powder Mining Filter: '${colorStr}' - please report this in the Discord!", + "Unknown Goblin Egg color detected in Powder Mining Filter: '$colorStr' - please report this in the Discord!", noStackTrace = true, ) "no_filter" diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/OldDamage.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/OldDamage.kt index 77ca2c6c9ee4..5067bac01396 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/OldDamage.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/OldDamage.kt @@ -1,3 +1,3 @@ package at.hannibal2.skyhanni.features.combat.damageindicator -class OldDamage(val time: Long, val damage: Long, val healing: Long) \ No newline at end of file +class OldDamage(val time: Long, val damage: Long, val healing: Long) diff --git a/src/main/java/at/hannibal2/skyhanni/features/commands/WikiManager.kt b/src/main/java/at/hannibal2/skyhanni/features/commands/WikiManager.kt index b8e14d280588..af56be8e7ba4 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/commands/WikiManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/commands/WikiManager.kt @@ -84,7 +84,7 @@ object WikiManager { } var search = "" - for (arg in args) search = "$search${arg}" + for (arg in args) search = "$search$arg" if (wikithis) { val itemInHand = InventoryUtils.getItemInHand() ?: run { diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonFinderFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonFinderFeatures.kt index a710e4fd0e94..9151c1d9eee2 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonFinderFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonFinderFeatures.kt @@ -291,7 +291,7 @@ object DungeonFinderFeatures { val name = stack.getLore().firstOrNull()?.removeColor() if (config.showMissingClasses && dungeonFloorPattern.matches(name)) { if (classNames.contains(selectedClass)) { - classNames[classNames.indexOf(selectedClass)] = "§a${selectedClass}§7" + classNames[classNames.indexOf(selectedClass)] = "§a$selectedClass§7" } toolTip.add("") toolTip.add("§cMissing: §7" + classNames.createCommaSeparatedList()) diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonLividFinder.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonLividFinder.kt index e1e8fbaf98eb..474e8367f6dd 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonLividFinder.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonLividFinder.kt @@ -59,7 +59,7 @@ object DungeonLividFinder { val chatColor = color.getChatColor() lividArmorStand = EntityUtils.getEntities() - .firstOrNull { it.name.startsWith("${chatColor}﴾ ${chatColor}§lLivid") } + .firstOrNull { it.name.startsWith("$chatColor﴾ $chatColor§lLivid") } if (event.isMod(20)) { if (lividArmorStand == null) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/carnival/CarnivalZombieShootout.kt b/src/main/java/at/hannibal2/skyhanni/features/event/carnival/CarnivalZombieShootout.kt index b49eb0642604..9edf05b7bdfe 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/carnival/CarnivalZombieShootout.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/carnival/CarnivalZombieShootout.kt @@ -127,7 +127,7 @@ object CarnivalZombieShootout { content = Renderable.horizontalContainer( listOf( Renderable.itemStack(lamp), - Renderable.string("§6Disappears in $prefix${timer}"), + Renderable.string("§6Disappears in $prefix$timer"), ), spacing = 1, verticalAlign = RenderUtils.VerticalAlignment.CENTER, diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsCompactChat.kt b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsCompactChat.kt index 0803cd0eae9c..9b9276420efe 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsCompactChat.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsCompactChat.kt @@ -105,7 +105,7 @@ object HoppityEggsCompactChat { "$mealNameFormat! §7Duplicate ${if (showDupeRarity) "$lastRarity " else ""}$lastName$dupeNumberFormat §7(§6+$format Chocolate§7$timeStr)" } else if (newRabbit) { val showNewRarity = rarityConfig.let { it == RarityType.BOTH || it == RarityType.NEW } - "$mealNameFormat! §d§lNEW ${if (showNewRarity) "$lastRarity " else ""}$lastName §7(${lastProfit}§7)" + "$mealNameFormat! §d§lNEW ${if (showNewRarity) "$lastRarity " else ""}$lastName §7($lastProfit§7)" } else "?" } diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/GoldenFishTimer.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/GoldenFishTimer.kt index 7a0e2d65f822..b7c67034feab 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/GoldenFishTimer.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/GoldenFishTimer.kt @@ -35,9 +35,7 @@ import at.hannibal2.skyhanni.utils.RenderUtils.exactLocation import at.hannibal2.skyhanni.utils.RenderUtils.renderRenderables import at.hannibal2.skyhanni.utils.SimpleTimeMark import at.hannibal2.skyhanni.utils.SoundUtils -import at.hannibal2.skyhanni.utils.TimeLimitedSet import at.hannibal2.skyhanni.utils.TimeUtils.format -import at.hannibal2.skyhanni.utils.getLorenzVec import at.hannibal2.skyhanni.utils.renderables.Renderable import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern import net.minecraft.entity.EntityLivingBase diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt index 3c34c262c1e1..26e41f7eea89 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt @@ -106,7 +106,7 @@ object AnitaMedalProfit { "§7Item price: §6${itemPrice.shortFormat()} ", // TODO add more exact material cost breakdown "§7Material cost: §6${fullCost.shortFormat()} ", - "§7Final profit: §6${profitFormat} ", + "§7Final profit: §6$profitFormat ", ) table.add( DisplayTableEntry( diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt index 4285a24af969..c79bbb46147b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt @@ -441,7 +441,7 @@ object GardenNextJacobContest { SkyHanniMod.coroutineScope.launch { openPopupWindow( "Farming Contest soon!
" + - "Crops: ${cropTextNoColor}" + "Crops: $cropTextNoColor" ) } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterOverlay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterOverlay.kt index 6faa7746a797..22e9c12f7990 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterOverlay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterOverlay.kt @@ -39,8 +39,8 @@ import at.hannibal2.skyhanni.utils.NEUItems.getItemStack import at.hannibal2.skyhanni.utils.NEUItems.getPrice import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.NumberUtil.romanToDecimalIfNecessary -import at.hannibal2.skyhanni.utils.NumberUtil.shortFormat import at.hannibal2.skyhanni.utils.NumberUtil.roundTo +import at.hannibal2.skyhanni.utils.NumberUtil.shortFormat import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems import at.hannibal2.skyhanni.utils.SimpleTimeMark @@ -488,7 +488,7 @@ object ComposterOverlay { } val havingInInventory = internalName.getAmountInInventory() if (havingInInventory >= itemsNeeded) { - ChatUtils.chat("$itemName §8x${itemsNeeded} §ealready found in inventory!") + ChatUtils.chat("$itemName §8x$itemsNeeded §ealready found in inventory!") return } diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContest.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContest.kt index 5bf2da85c7c7..d3bdcf071913 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContest.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContest.kt @@ -2,4 +2,4 @@ package at.hannibal2.skyhanni.features.garden.contest import at.hannibal2.skyhanni.features.garden.CropType -data class FarmingContest(val time: Long, val crop: CropType, val brackets: Map) \ No newline at end of file +data class FarmingContest(val time: Long, val crop: CropType, val brackets: Map) diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestPhase.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestPhase.kt index 5d280a960eb3..e1667a20b4c0 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestPhase.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/contest/FarmingContestPhase.kt @@ -4,4 +4,4 @@ enum class FarmingContestPhase { START, STOP, CHANGE -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropSpeed.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropSpeed.kt index 141c93ff102c..0ef02361f855 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropSpeed.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropSpeed.kt @@ -4,7 +4,6 @@ import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator import at.hannibal2.skyhanni.data.ClickType import at.hannibal2.skyhanni.data.GardenCropMilestones.getCounter import at.hannibal2.skyhanni.data.GardenCropMilestones.setCounter -import at.hannibal2.skyhanni.data.Perk import at.hannibal2.skyhanni.data.jsonobjects.repo.DicerDropsJson import at.hannibal2.skyhanni.data.jsonobjects.repo.DicerType import at.hannibal2.skyhanni.events.CropClickEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/SkyMartCopperPrice.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/SkyMartCopperPrice.kt index 078ef16724d2..ea893ecd1b5b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/SkyMartCopperPrice.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/SkyMartCopperPrice.kt @@ -16,8 +16,8 @@ import at.hannibal2.skyhanni.utils.NEUItems.getPrice import at.hannibal2.skyhanni.utils.NEUItems.getPriceOrNull import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.NumberUtil.formatInt -import at.hannibal2.skyhanni.utils.NumberUtil.shortFormat import at.hannibal2.skyhanni.utils.NumberUtil.roundTo +import at.hannibal2.skyhanni.utils.NumberUtil.shortFormat import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher import at.hannibal2.skyhanni.utils.RenderUtils.renderRenderables import at.hannibal2.skyhanni.utils.renderables.Renderable @@ -72,7 +72,7 @@ object SkyMartCopperPrice { add("§7Profit per purchase: §6${profit.shortFormat()} ") add("") add("§7Copper amount: §c${copper.addSeparators()} ") - add("§7Profit per copper: §6${perFormat} ") + add("§7Profit per copper: §6$perFormat ") } table.add( DisplayTableEntry( diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorFeatures.kt index 70392bb46d78..9fc0e7664aa1 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorFeatures.kt @@ -682,7 +682,7 @@ object GardenVisitorFeatures { add("shoppingList: '${visitor.shoppingList}'") } visitor.offer?.offerItem?.getInternalName()?.let { - add("offer: '${it}'") + add("offer: '$it'") } } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardEvent.kt b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardEvent.kt index 68dba3eee2bb..ce4b5a4fafa9 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardEvent.kt @@ -7,7 +7,6 @@ import at.hannibal2.skyhanni.features.combat.SpidersDenAPI.isAtTopOfNest import at.hannibal2.skyhanni.features.dungeon.DungeonAPI import at.hannibal2.skyhanni.features.gui.customscoreboard.CustomScoreboard.eventsConfig import at.hannibal2.skyhanni.features.gui.customscoreboard.ScoreboardEvent.VOTING -import at.hannibal2.skyhanni.features.gui.customscoreboard.ScoreboardPattern import at.hannibal2.skyhanni.features.misc.ServerRestartTitle import at.hannibal2.skyhanni.features.rift.area.stillgorechateau.RiftBloodEffigies import at.hannibal2.skyhanni.utils.CollectionUtils.nextAfter @@ -347,7 +346,7 @@ private fun getTrapperLines() = buildList { } private fun getTrapperShowWhen(): Boolean = - getSbLines().any { ScoreboardPattern.peltsPattern.matches(it) || ScoreboardPattern.mobLocationPattern.matches(it) } + getSbLines().any { SbPattern.peltsPattern.matches(it) || SbPattern.mobLocationPattern.matches(it) } private fun getGardenCleanUpLines(): List = listOf(getSbLines().first { SbPattern.cleanUpPattern.matches(it) }.trim()) @@ -374,9 +373,9 @@ private fun getWinterLines() = buildList { } private fun getWinterShowWhen(): Boolean = getSbLines().any { - ScoreboardPattern.winterEventStartPattern.matches(it) || - (ScoreboardPattern.winterNextWavePattern.matches(it) && !it.endsWith("Soon!")) || - ScoreboardPattern.winterWavePattern.matches(it) + SbPattern.winterEventStartPattern.matches(it) + || (SbPattern.winterNextWavePattern.matches(it) && !it.endsWith("Soon!")) + || SbPattern.winterWavePattern.matches(it) } private fun getNewYearLines() = listOf(getSbLines().first { SbPattern.newYearPattern.matches(it) }) @@ -395,7 +394,7 @@ private fun getSpookyLines() = buildList { ) // Candy } -private fun getSpookyShowWhen(): Boolean = getSbLines().any { ScoreboardPattern.spookyPattern.matches(it) } +private fun getSpookyShowWhen(): Boolean = getSbLines().any { SbPattern.spookyPattern.matches(it) } private fun getTablistEvent(): String? = TabListData.getTabList().firstOrNull { SbPattern.eventNamePattern.matches(it) } @@ -413,7 +412,7 @@ private fun getActiveEventLine(): List { val blockedEvents = listOf("Spooky Festival", "Carnival", "5th SkyBlock Anniversary", "New Year Celebration") if (blockedEvents.contains(currentActiveEvent.removeColor())) return emptyList() - val currentActiveEventTime = ScoreboardPattern.eventTimeEndsPattern.firstMatcher(TabWidget.EVENT.lines) { + val currentActiveEventTime = SbPattern.eventTimeEndsPattern.firstMatcher(TabWidget.EVENT.lines) { group("time") } ?: return emptyList() @@ -425,7 +424,7 @@ private fun getActiveEventShowWhen(): Boolean = private fun getSoonEventLine(): List { val soonActiveEvent = getTablistEvent() ?: return emptyList() - val soonActiveEventTime = ScoreboardPattern.eventTimeStartsPattern.firstMatcher(TabWidget.EVENT.lines) { + val soonActiveEventTime = SbPattern.eventTimeStartsPattern.firstMatcher(TabWidget.EVENT.lines) { group("time") } ?: return emptyList() diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemPickupLog.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemPickupLog.kt index 9ed2621bb7bc..78e6063ee542 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemPickupLog.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemPickupLog.kt @@ -42,7 +42,7 @@ object ItemPickupLog { "§a+256", { entry, prefix -> val formattedAmount = if (config.shorten) entry.amount.shortFormat() else entry.amount.addSeparators() - Renderable.string("${prefix}${formattedAmount}") + Renderable.string("$prefix$formattedAmount") }, ), ICON( diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/SackDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/SackDisplay.kt index 26de0fa1c8ec..4856c65c10b7 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/SackDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/SackDisplay.kt @@ -143,7 +143,7 @@ object SackDisplay { add( Renderable.hoverTips( Renderable.string( - "§d${magmaFish}", + "§d$magmaFish", horizontalAlign = config.alignment ), listOf( diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryStrayTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryStrayTracker.kt index ed7e35691b25..52a3c5f1bb3c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryStrayTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryStrayTracker.kt @@ -152,7 +152,7 @@ object ChocolateFactoryStrayTracker { add( Renderable.hoverTips( "§6§lStray Tracker", - tips = listOf("§a+§b${formattedExtraTime} §afrom strays§7"), + tips = listOf("§a+§b$formattedExtraTime §afrom strays§7"), ).toSearchable(), ) HoppityAPI.hoppityRarities.forEach { rarity -> @@ -169,7 +169,7 @@ object ChocolateFactoryStrayTracker { val colorCode = rarity.chatColorCode val lineHeader = "$colorCode${rarity.toString().lowercase().replaceFirstChar { it.uppercase() }}§7: §r$colorCode" - val lineFormat = "${lineHeader}${caughtString}" + val lineFormat = "$lineHeader$caughtString" val renderable = rarityExtraChocMs?.let { var tip = "§a+§b$extraChocFormat §afrom $colorCode${rarity.toString().lowercase()} strays§7" diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateShopPrice.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateShopPrice.kt index 277532aaa667..13757d1b39ff 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateShopPrice.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateShopPrice.kt @@ -132,7 +132,7 @@ object ChocolateShopPrice { add("§7Profit per purchase: §6${profit.shortFormat()} ") add("") add("§7Chocolate amount: §c${product.chocolate.shortFormat()} ") - add("§7Profit per million chocolate: §6${perFormat} ") + add("§7Profit per million chocolate: §6$perFormat ") add("") val formattedTimeUntilGoal = ChocolateAmount.CURRENT.formattedTimeUntilGoal(product.chocolate) add("§7Time until affordable: §6$formattedTimeUntilGoal ") diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/TunnelsMaps.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/TunnelsMaps.kt index eb89da6963e3..19383d4fad14 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/TunnelsMaps.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/TunnelsMaps.kt @@ -330,7 +330,7 @@ object TunnelsMaps { Renderable.horizontalContainer( listOf(Renderable.string("§dFairy Souls")) + fairySouls.map { val name = it.key.removePrefix("§dFairy Soul ") - Renderable.clickable(Renderable.string("§d[${name}]"), onClick = guiSetActive(it.key)) + Renderable.clickable(Renderable.string("§d[$name]"), onClick = guiSetActive(it.key)) }, ), Renderable.string("§dFairy Souls"), diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt index fcf876c2169e..2749404bef59 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt @@ -333,7 +333,7 @@ object PowderTracker { } val (flawless, fine, flawed, rough) = convert(totalGemstone) - addSearchString("§5${flawless}§7-§9${fine}§7-§a${flawed}§f-${rough} $color$gem Gemstone", "Gemstone") + addSearchString("§5$flawless§7-§9$fine§7-§a$flawed§f-$rough $color$gem Gemstone", "Gemstone") } var totalParts = 0L diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/CarryTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/CarryTracker.kt index bfecbc48f57f..a5062ee1d388 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/CarryTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/CarryTracker.kt @@ -14,10 +14,10 @@ import at.hannibal2.skyhanni.utils.CollectionUtils.addString import at.hannibal2.skyhanni.utils.HypixelCommands import at.hannibal2.skyhanni.utils.KeyboardManager import at.hannibal2.skyhanni.utils.LorenzUtils -import at.hannibal2.skyhanni.utils.NumberUtil.shortFormat import at.hannibal2.skyhanni.utils.NumberUtil.formatDouble import at.hannibal2.skyhanni.utils.NumberUtil.formatDoubleOrUserError import at.hannibal2.skyhanni.utils.NumberUtil.formatIntOrUserError +import at.hannibal2.skyhanni.utils.NumberUtil.shortFormat import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher import at.hannibal2.skyhanni.utils.RenderUtils.renderRenderables import at.hannibal2.skyhanni.utils.StringUtils.cleanPlayerName @@ -228,7 +228,7 @@ object CarryTracker { add("§7Missing: §e$missing") add("") if (cost != "") { - add("§7Total cost: §e${cost}") + add("§7Total cost: §e$cost") add("§7Cost per carry: §e${formatCost(carry.type.pricePer)}") } else { add("§cNo price set for this carry!") @@ -264,7 +264,7 @@ object CarryTracker { val missingFormat = formatCost(totalCost - customer.alreadyPaid) list.add( Renderable.clickAndHover( - Renderable.string("§b$customerName $paidFormat§8/${totalCostFormat}"), + Renderable.string("§b$customerName $paidFormat§8/$totalCostFormat"), tips = listOf( "§7Carries for §b$customerName", "", diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/IslandAreas.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/IslandAreas.kt index cddbd201db57..faf3130b5ad8 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/IslandAreas.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/IslandAreas.kt @@ -144,7 +144,7 @@ object IslandAreas { val isTarget = node.name == targetNode?.name val color = if (isTarget) LorenzColor.GOLD else tag.color - val coloredName = "${color.getChatColor()}${name}" + val coloredName = "${color.getChatColor()}$name" var suffix = "" paths[node]?.let { path -> @@ -161,7 +161,7 @@ object IslandAreas { } val distance = difference.roundTo(1) - val text = "${coloredName}§7: §e$distance$suffix" + val text = "$coloredName§7: §e$distance$suffix" if (!foundCurrentArea) { foundCurrentArea = true diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/MagicalPowerDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/MagicalPowerDisplay.kt index e7b8ea26c3c8..dedfe3473e90 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/MagicalPowerDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/MagicalPowerDisplay.kt @@ -93,7 +93,7 @@ object MagicalPowerDisplay { else -> if (internalName.isAbicase()) endMP += (contactAmount ?: 0) / 2 } - event.stackTip = "${if (config.colored) rarity.chatColorCode else "§7"}${endMP}" + event.stackTip = "${if (config.colored) rarity.chatColorCode else "§7"}$endMP" } @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/MiscFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/MiscFeatures.kt index c34a49a7d83a..98d4205256e0 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/MiscFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/MiscFeatures.kt @@ -4,7 +4,6 @@ import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator import at.hannibal2.skyhanni.events.ReceiveParticleEvent import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule -import at.hannibal2.skyhanni.utils.ChatUtils import at.hannibal2.skyhanni.utils.LorenzUtils import net.minecraft.util.EnumParticleTypes import net.minecraftforge.client.event.RenderBlockOverlayEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/RoundedRectangleOutlineShader.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/RoundedRectangleOutlineShader.kt index ea8770081c78..2a5e131fa0da 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/RoundedRectangleOutlineShader.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/RoundedRectangleOutlineShader.kt @@ -27,4 +27,4 @@ object RoundedRectangleOutlineShader : Shader("rounded_rect_outline", "rounded_r registerUniform(Uniform.UniformType.FLOAT, "borderThickness") { borderThickness } registerUniform(Uniform.UniformType.FLOAT, "borderBlur") { borderBlur } } -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/TabLine.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/TabLine.kt index 96b89ce17a6d..a2c227bd776c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/TabLine.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/TabLine.kt @@ -35,4 +35,4 @@ class TabLine(val text: String, val type: TabStringType, val customName: String this.entity = entity return entity } -} \ No newline at end of file +} 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 3f56230c476e..2f58a4fd191f 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 @@ -920,11 +920,11 @@ object EstimatedItemValueCalculator { fun Pair.getAttributeName(): String { val name = first.fixMending().allLettersFirstUppercase() - return "§b$name ${second} Shard" + return "§b$name $second Shard" } fun Pair.getAttributePrice(): Double? = EstimatedItemValueCalculator.getPriceOrCompositePriceForAttribute( - "ATTRIBUTE_SHARD+ATTRIBUTE_" + first, + "ATTRIBUTE_SHARD+ATTRIBUTE_$first", second, ) } diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/items/enchants/Enchant.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/items/enchants/Enchant.kt index 244cc54bedf8..6432be2f6572 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/items/enchants/Enchant.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/items/enchants/Enchant.kt @@ -10,8 +10,8 @@ import at.hannibal2.skyhanni.utils.LorenzColor import at.hannibal2.skyhanni.utils.StringUtils.removeColor import com.google.gson.annotations.Expose import io.github.notenoughupdates.moulconfig.observer.Property -import java.util.TreeSet import net.minecraft.item.ItemStack +import java.util.TreeSet open class Enchant : Comparable { @Expose @@ -110,7 +110,7 @@ open class Enchant : Comparable { @Expose private var stackLevel: TreeSet? = null - override fun toString() = "$nbtNum ${stackLevel.toString()} ${super.toString()}" + override fun toString() = "$nbtNum $stackLevel ${super.toString()}" } class Dummy(name: String) : Enchant() { diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/items/enchants/EnchantParser.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/items/enchants/EnchantParser.kt index 66c4c040716a..162d2adee0e1 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/items/enchants/EnchantParser.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/items/enchants/EnchantParser.kt @@ -22,7 +22,6 @@ import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getEnchantments import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getExtraAttributes import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern -import java.lang.ArithmeticException import net.minecraft.event.HoverEvent import net.minecraft.item.ItemStack import net.minecraft.util.ChatComponentText diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/massconfiguration/Category.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/massconfiguration/Category.kt index 3172df6e05db..b69e5913db45 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/massconfiguration/Category.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/massconfiguration/Category.kt @@ -1,3 +1,3 @@ package at.hannibal2.skyhanni.features.misc.massconfiguration -data class Category(val name: String, val description: String) \ No newline at end of file +data class Category(val name: String, val description: String) diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/massconfiguration/ResetSuggestionState.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/massconfiguration/ResetSuggestionState.kt index 30a78a7b2928..60d809633fa6 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/massconfiguration/ResetSuggestionState.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/massconfiguration/ResetSuggestionState.kt @@ -7,4 +7,4 @@ enum class ResetSuggestionState(val label: String) { ; val next get() = entries[(ordinal + 1) % entries.size] -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/update/GuiOptionEditorUpdateCheck.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/update/GuiOptionEditorUpdateCheck.kt index f56185aba310..84d86615da3d 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/update/GuiOptionEditorUpdateCheck.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/update/GuiOptionEditorUpdateCheck.kt @@ -49,7 +49,7 @@ class GuiOptionEditorUpdateCheck(option: ProcessedOption) : GuiOptionEditor(opti val sameVersion = currentVersion.equals(nextVersion, true) TextRenderUtils.drawStringCenteredScaledMaxWidth( "${if (UpdateManager.updateState == UpdateManager.UpdateState.NONE) GREEN else RED}$currentVersion" + - if (nextVersion != null && !sameVersion) "➜ ${GREEN}${nextVersion}" else "", + if (nextVersion != null && !sameVersion) "➜ $GREEN$nextVersion" else "", fr, widthRemaining / 4F, 10F, diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/FactionType.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/FactionType.kt index 389f1ccc084b..d531aa8f4996 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/FactionType.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/FactionType.kt @@ -5,4 +5,4 @@ enum class FactionType { MAGE, NONE -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/quest/MiniBossQuest.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/quest/MiniBossQuest.kt index 914f1e92180f..609a22a0ff55 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/quest/MiniBossQuest.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/quest/MiniBossQuest.kt @@ -10,4 +10,4 @@ class MiniBossQuest(val miniBoss: CrimsonMiniBoss, state: QuestState, needAmount miniBoss.displayName, state, needAmount - ) \ No newline at end of file + ) diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/quest/QuestCategory.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/quest/QuestCategory.kt index f9987fe1c70b..379f0c26b02d 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/quest/QuestCategory.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/quest/QuestCategory.kt @@ -9,4 +9,4 @@ enum class QuestCategory(val displayName: String) { KUUDRA("Kuudra Kill"), UNKNOWN("§4Unknown"), -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/quest/QuestState.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/quest/QuestState.kt index acde3785d5b4..f98514a6644e 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/quest/QuestState.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/quest/QuestState.kt @@ -5,4 +5,4 @@ enum class QuestState(val displayName: String, val color: String) { ACCEPTED("Accepted", "§b"), READY_TO_COLLECT("Ready to collect", "§a"), COLLECTED("Collected", "§7"), -} \ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/skillprogress/SkillProgress.kt b/src/main/java/at/hannibal2/skyhanni/features/skillprogress/SkillProgress.kt index a16f78b52e45..9a01a97298f1 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/skillprogress/SkillProgress.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/skillprogress/SkillProgress.kt @@ -291,7 +291,7 @@ object SkillProgress { ) } else { val tips = buildList { - add("§6Level: §b${level}") + add("§6Level: §b$level") add("§6Current XP: §b${currentXp.addSeparators()}") add("§6Needed XP: §b${currentXpMax.addSeparators()}") add("§6Total XP: §b${totalXp.addSeparators()}") diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerRngMeterDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerRngMeterDisplay.kt index 6396b287610e..d2c161eba813 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerRngMeterDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerRngMeterDisplay.kt @@ -123,7 +123,7 @@ object SlayerRngMeterDisplay { var rawPercentage = old.toDouble() / storage.goalNeeded if (rawPercentage > 1) rawPercentage = 1.0 val percentage = LorenzUtils.formatPercentage(rawPercentage) - ChatUtils.chat("§dRNG Meter §7dropped at §e$percentage §7XP ($from/${to}§7)") + ChatUtils.chat("§dRNG Meter §7dropped at §e$percentage §7XP ($from/$to§7)") lastItemDroppedTime = SimpleTimeMark.now() } if (blockChat) { diff --git a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt index 55f88d2bf864..3fc4e265d847 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt @@ -378,7 +378,7 @@ object SkyHanniDebugsAndTests { add("§eitem name -> internalName: '§7${internalName.asString()}§e'") add(" §eitemName: '${internalName.itemName}§e'") val price = internalName.getPriceOrNull()?.let { "§6" + it.addSeparators() } ?: "§7null" - add(" §eprice: '§6${price}§e'") + add(" §eprice: '§6$price§e'") return@buildList } @@ -388,7 +388,7 @@ object SkyHanniDebugsAndTests { add("§einternal name: §7${internalName.asString()}") add("§einternal name -> item name: '$itemName§e'") val price = internalName.getPriceOrNull()?.let { "§6" + it.addSeparators() } ?: "§7null" - add(" §eprice: '§6${price}§e'") + add(" §eprice: '§6$price§e'") return@buildList } diff --git a/src/main/java/at/hannibal2/skyhanni/test/command/CopyItemCommand.kt b/src/main/java/at/hannibal2/skyhanni/test/command/CopyItemCommand.kt index d038d7759a4f..9b23b47a93e7 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/command/CopyItemCommand.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/command/CopyItemCommand.kt @@ -26,10 +26,10 @@ object CopyItemCommand { val tag = compound.getTag(s) if (tag !is NBTTagCompound) { - list.add("${text}${s}: $tag") + list.add("$text$s: $tag") } else { val element = compound.getCompoundTag(s) - list.add("${text}${s}:") + list.add("$text$s:") recurseTag(element, "$text ", list) } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/EntityUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/EntityUtils.kt index 5f52508f2141..198f7c0a00d0 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/EntityUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/EntityUtils.kt @@ -27,7 +27,6 @@ import net.minecraft.entity.monster.EntityEnderman import net.minecraft.entity.player.EntityPlayer import net.minecraft.item.ItemStack import net.minecraft.potion.Potion -import net.minecraft.scoreboard.ScorePlayerTeam import net.minecraft.tileentity.TileEntity import net.minecraft.util.AxisAlignedBB import net.minecraftforge.client.event.RenderLivingEvent diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniBucketedItemTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniBucketedItemTracker.kt index 2975d57e2461..cd85646341fc 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniBucketedItemTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniBucketedItemTracker.kt @@ -193,7 +193,7 @@ class SkyHanniBucketedItemTracker, BucketedData : BucketedItemTracke add("§eControl + Click to remove this item!") if (SkyHanniMod.feature.dev.debug.enabled) { add("") - add("§7${internalName}") + add("§7$internalName") } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniItemTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniItemTracker.kt index 3cadd767b5a9..3295880b9c85 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniItemTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniItemTracker.kt @@ -189,7 +189,7 @@ class SkyHanniItemTracker( if (SkyHanniMod.feature.dev.debug.enabled) { add("") - add("§7${internalName}") + add("§7$internalName") } } From e70a67bd5f4e0f0ca17bb1dd836a857b03c30cca Mon Sep 17 00:00:00 2001 From: Empa <42304516+ItsEmpa@users.noreply.github.com> Date: Sun, 29 Sep 2024 10:20:56 +0200 Subject: [PATCH 026/155] Feature: Ultimate Enchant Star (#2612) Co-authored-by: ItsEmpa --- .../features/inventory/InventoryConfig.java | 6 ++++ .../features/inventory/UltimateEnchantStar.kt | 28 +++++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 src/main/java/at/hannibal2/skyhanni/features/inventory/UltimateEnchantStar.kt diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/InventoryConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/InventoryConfig.java index 510f953ca2f9..6e064ced6420 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/InventoryConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/InventoryConfig.java @@ -231,6 +231,12 @@ public String toString() { @FeatureToggle public boolean itemStars = false; + @Expose + @ConfigOption(name = "Ultimate Enchant Star", desc = "Show a star on Enchanted Books with an Ultimate Enchant.") + @ConfigEditorBoolean + @FeatureToggle + public boolean ultimateEnchantStar = false; + @Expose @ConfigOption(name = "Missing Tasks", desc = "Highlight missing tasks in the SkyBlock Level Guide inventory.") // TODO move( , "inventory.highlightMissingSkyBlockLevelGuide", "inventory.skyblockGuideConfig.highlightMissingSkyBlockLevelGuide") diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/UltimateEnchantStar.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/UltimateEnchantStar.kt new file mode 100644 index 000000000000..315d9822b7ba --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/UltimateEnchantStar.kt @@ -0,0 +1,28 @@ +package at.hannibal2.skyhanni.features.inventory + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.events.RenderItemTipEvent +import at.hannibal2.skyhanni.events.RenderObject +import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getEnchantments +import net.minecraft.init.Items +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +@SkyHanniModule +object UltimateEnchantStar { + + private val config get() = SkyHanniMod.feature.inventory + + @SubscribeEvent + fun onRenderItemTip(event: RenderItemTipEvent) { + if (!isEnabled()) return + if (event.stack.item != Items.enchanted_book) return + val enchants = event.stack.getEnchantments() ?: return + if (enchants.size != 1 || !enchants.keys.first().startsWith("ultimate_")) return + event.renderObjects += RenderObject("§d✦", -10, -10) + } + + private fun isEnabled() = LorenzUtils.inSkyBlock && config.ultimateEnchantStar + +} From 3569dec0ab32c357eb34cff79c200f379f3d19ce Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 29 Sep 2024 11:14:10 +0200 Subject: [PATCH 027/155] made path find condition not optional --- src/main/java/at/hannibal2/skyhanni/data/IslandGraphs.kt | 6 +++--- .../skyhanni/features/event/hoppity/HoppityEggLocator.kt | 2 +- .../skyhanni/features/misc/pathfind/NavigationHelper.kt | 7 +++---- .../at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt | 2 +- .../hannibal2/skyhanni/test/graph/GraphEditorBugFinder.kt | 6 ++++-- 5 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/data/IslandGraphs.kt b/src/main/java/at/hannibal2/skyhanni/data/IslandGraphs.kt index bd417e5f75ea..73915c22d183 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/IslandGraphs.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/IslandGraphs.kt @@ -391,7 +391,7 @@ object IslandGraphs { color: Color = LorenzColor.WHITE.toColor(), onFound: () -> Unit = {}, allowRerouting: Boolean = false, - condition: () -> Boolean = { true }, + condition: () -> Boolean, ) { reset() currentTargetNode = this @@ -415,7 +415,7 @@ object IslandGraphs { color: Color = LorenzColor.WHITE.toColor(), onFound: () -> Unit = {}, showGoalExact: Boolean = false, - condition: () -> Boolean = { true }, + condition: () -> Boolean, ) { reset() shouldAllowRerouting = false @@ -428,7 +428,7 @@ object IslandGraphs { color: Color = LorenzColor.WHITE.toColor(), onFound: () -> Unit = {}, showGoalExact: Boolean = false, - condition: () -> Boolean = { true }, + condition: () -> Boolean, ) { currentTarget = location this.label = label diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggLocator.kt b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggLocator.kt index dbe06fbf991f..7a5e726d2f06 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggLocator.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggLocator.kt @@ -333,7 +333,7 @@ object HoppityEggLocator { HoppityEggLocations.apiEggLocations[LorenzUtils.skyBlockIsland]?.let { for ((i, location) in it.values.withIndex()) { if (i == target) { - IslandGraphs.pathFind(location, "Hoppity Test") + IslandGraphs.pathFind(location, "Hoppity Test", condition = { true }) return } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/pathfind/NavigationHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/pathfind/NavigationHelper.kt index 48719e63e2a6..f3dc20df66e8 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/pathfind/NavigationHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/pathfind/NavigationHelper.kt @@ -58,13 +58,12 @@ object NavigationHelper { val distance = distances[node]!!.roundTo(1) val component = "$name §e$distance".asComponent() component.onClick { -// node.pathFind(label = node.name!!, allowRerouting = true) - node.pathFind(label = name, allowRerouting = true) + node.pathFind(label = name, allowRerouting = true, condition = { true }) sendNavigateMessage(name, goBack) } val tag = node.tags.first { it in allowedTags } - val d = "Name: $name\n§7Type: §r${tag.displayName}\n§7Distance: §e$distance blocks\n§eClick to start navigating!" - component.hover = d.asComponent() + val hoverText = "Name: $name\n§7Type: §r${tag.displayName}\n§7Distance: §e$distance blocks\n§eClick to start navigating!" + component.hover = hoverText.asComponent() component } } diff --git a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt index 3fc4e265d847..6c34feddaf1f 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/SkyHanniDebugsAndTests.kt @@ -126,7 +126,7 @@ object SkyHanniDebugsAndTests { val location = LorenzVec(x, y, z) testLocation = location if (args.getOrNull(3) == "pathfind") { - IslandGraphs.pathFind(location, "/shtestwaypoint", showGoalExact = true) + IslandGraphs.pathFind(location, "/shtestwaypoint", showGoalExact = true, condition = { true }) } ChatUtils.chat("set test waypoint") } diff --git a/src/main/java/at/hannibal2/skyhanni/test/graph/GraphEditorBugFinder.kt b/src/main/java/at/hannibal2/skyhanni/test/graph/GraphEditorBugFinder.kt index 75d8c3ea2914..ca65ae87f113 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/graph/GraphEditorBugFinder.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/graph/GraphEditorBugFinder.kt @@ -86,13 +86,15 @@ object GraphEditorBugFinder { } val closestForeignNode = closestForeignNodes.minBy { it.position.distanceSqToPlayer() } val closestNodeToForeignNode = closestCluster.minBy { it.position.distanceSq(closestForeignNode.position) } - closestNodeToForeignNode.pathFind("Graph Editor Bug", Color.RED) + closestNodeToForeignNode.pathFind("Graph Editor Bug", Color.RED, condition = { isEnabled() }) } println("found $bugs bugs!") this.errorsInWorld = errorsInWorld if (clusters.size <= 1) { - errorsInWorld.keys.minByOrNull { it.position.distanceSqToPlayer() }?.pathFind("Graph Editor Bug", Color.RED) + errorsInWorld.keys.minByOrNull { + it.position.distanceSqToPlayer() + }?.pathFind("Graph Editor Bug", Color.RED, condition = { isEnabled() }) } } From 8988f7d34d706b909012dceea8bad65b4863ea44 Mon Sep 17 00:00:00 2001 From: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> Date: Sun, 29 Sep 2024 19:41:58 +1000 Subject: [PATCH 028/155] Backend: Detekt Fixes Part 4 (#2610) --- .../hannibal2/skyhanni/api/DataWatcherAPI.kt | 2 +- .../nextstephelper/BingoNextStepHelper.kt | 10 ++++----- .../UniqueGiftingOpportunitiesFeatures.kt | 6 ++--- .../event/hoppity/MythicRabbitPetWarning.kt | 6 ++--- .../fishing/tracker/FishingProfitTracker.kt | 10 ++++----- .../fishing/tracker/SeaCreatureTracker.kt | 10 ++++----- .../skyhanni/features/gui/BeaconPower.kt | 4 ++-- .../gui/customscoreboard/CustomScoreboard.kt | 6 ++--- .../SkyblockGuideHighlightFeature.kt | 18 +++++++-------- .../ExperimentationTableAPI.kt | 5 +++-- .../features/misc/UserLuckBreakdown.kt | 22 +++++++++---------- .../features/misc/limbo/LimboPlaytime.kt | 4 ++-- .../rift/everywhere/CruxTalismanDisplay.kt | 4 ++-- .../features/slayer/VampireSlayerFeatures.kt | 16 ++++++++------ .../skyhanni/utils/guide/GuideGUI.kt | 18 +++++++-------- .../skyhanni/utils/guide/GuideTab.kt | 12 +++++----- .../skyhanni/utils/renderables/Searchable.kt | 8 +++---- 17 files changed, 82 insertions(+), 79 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/api/DataWatcherAPI.kt b/src/main/java/at/hannibal2/skyhanni/api/DataWatcherAPI.kt index 94931dd8caf8..e7e7fd2b5ac3 100644 --- a/src/main/java/at/hannibal2/skyhanni/api/DataWatcherAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/api/DataWatcherAPI.kt @@ -8,7 +8,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @SkyHanniModule object DataWatcherAPI { - private val DATA_VALUE_CUSTOM_NAME = 2 + private const val DATA_VALUE_CUSTOM_NAME = 2 @SubscribeEvent fun onDataWatcherUpdate(event: DataWatcherUpdatedEvent) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/bingo/card/nextstephelper/BingoNextStepHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/bingo/card/nextstephelper/BingoNextStepHelper.kt index 427fbb902b71..2e56a536bc68 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/bingo/card/nextstephelper/BingoNextStepHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/bingo/card/nextstephelper/BingoNextStepHelper.kt @@ -61,7 +61,7 @@ object BingoNextStepHelper { private val itemIslandRequired = mutableMapOf() private val itemPreconditions = mutableMapOf() private val islands = mutableMapOf() - private val rhysTaskName = "30x Enchanted Minerals (Redstone, Lapis Lazuli, Coal) (for Rhys)" + private const val RHYS_TASK_NAME = "30x Enchanted Minerals (Redstone, Lapis Lazuli, Coal) (for Rhys)" private val finalSteps = mutableListOf() private var currentSteps = emptyList() @@ -167,7 +167,7 @@ object BingoNextStepHelper { } } } - if (currentStep is PartialProgressItemsStep && currentStep.displayName == rhysTaskName && event.message == "§e[NPC] §dRhys§f: §rThank you for the items!§r") { + if (currentStep is PartialProgressItemsStep && currentStep.displayName == RHYS_TASK_NAME && event.message == "§e[NPC] §dRhys§f: §rThank you for the items!§r") { currentStep.amountHavingHidden -= 10 } } @@ -365,7 +365,7 @@ object BingoNextStepHelper { private fun rhys() { val redstoneForRhys = PartialProgressItemsStep( - rhysTaskName, + RHYS_TASK_NAME, "Redstone", 160 * 10, mapOf("Redstone" to 1, "Enchanted Redstone" to 160) @@ -373,7 +373,7 @@ object BingoNextStepHelper { redstoneForRhys requires IslandType.DEEP_CAVERNS.getStep() val lapisForRhys = PartialProgressItemsStep( - rhysTaskName, + RHYS_TASK_NAME, "Lapis Lazuli", 160 * 10, mapOf("Lapis Lazuli" to 1, "Enchanted Lapis Lazuli" to 160) @@ -381,7 +381,7 @@ object BingoNextStepHelper { lapisForRhys requires IslandType.DEEP_CAVERNS.getStep() val coalForRhys = PartialProgressItemsStep( - rhysTaskName, + RHYS_TASK_NAME, "Coal", 160 * 10, mapOf("Coal" to 1, "Enchanted Coal" to 160) diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/UniqueGiftingOpportunitiesFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/event/UniqueGiftingOpportunitiesFeatures.kt index e24a66594edb..b1939a793bf3 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/UniqueGiftingOpportunitiesFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/UniqueGiftingOpportunitiesFeatures.kt @@ -57,12 +57,12 @@ object UniqueGiftingOpportunitiesFeatures { private fun isEnabled() = holdingGift - private val hasNotGiftedNametag = "§a§lꤥ" - private val hasGiftedNametag = "§c§lꤥ" + private const val HAS_NOT_GIFTED_NAMETAG = "§a§lꤥ" + private const val HAS_GIFTED_NAMETAG = "§c§lꤥ" private fun analyzeArmorStand(entity: EntityArmorStand) { if (!config.useArmorStandDetection) return - if (entity.name != hasGiftedNametag) return + if (entity.name != HAS_GIFTED_NAMETAG) return val matchedPlayer = EntityUtils.getEntitiesNearby(entity.getLorenzVec(), 2.0) .singleOrNull { !it.isNPC() } ?: return diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/MythicRabbitPetWarning.kt b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/MythicRabbitPetWarning.kt index 8162f3a05e86..833583ad05bb 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/MythicRabbitPetWarning.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/MythicRabbitPetWarning.kt @@ -7,8 +7,8 @@ import at.hannibal2.skyhanni.utils.SimpleTimeMark import kotlin.time.Duration.Companion.seconds object MythicRabbitPetWarning { - val mythicRabbit = "§dRabbit" - var lastCheck = SimpleTimeMark.farPast() + private const val MYTHIC_RABBIT_DISPLAY_NAME = "§dRabbit" + private var lastCheck = SimpleTimeMark.farPast() fun check() { if (!HoppityEggsManager.config.petWarning) return @@ -21,7 +21,7 @@ object MythicRabbitPetWarning { } } - fun correctPet() = PetAPI.isCurrentPet(mythicRabbit) + fun correctPet() = PetAPI.isCurrentPet(MYTHIC_RABBIT_DISPLAY_NAME) private fun warn() { ChatUtils.chat("Use a §dMythic Rabbit Pet §efor more chocolate!") diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/FishingProfitTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/FishingProfitTracker.kt index 12f3accd1de1..a3e86908762f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/FishingProfitTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/FishingProfitTracker.kt @@ -98,8 +98,8 @@ object FishingProfitTracker { private val MAGMA_FISH by lazy { "MAGMA_FISH".asInternalName() } - private val nameAll: CategoryName = "All" - private var currentCategory: CategoryName = nameAll + private const val NAME_ALL: CategoryName = "All" + private var currentCategory: CategoryName = NAME_ALL private var itemCategories = mapOf>() @@ -110,7 +110,7 @@ object FishingProfitTracker { private fun getCurrentCategories(data: Data): Map { val map = mutableMapOf() - map[nameAll] = data.items.size + map[NAME_ALL] = data.items.size for ((name, items) in itemCategories) { val amount = items.count { it in data.items } if (amount > 0) { @@ -145,7 +145,7 @@ object FishingProfitTracker { checkMissingItems(data) val list = amounts.keys.toList() if (currentCategory !in list) { - currentCategory = nameAll + currentCategory = NAME_ALL } if (tracker.isInventoryOpen()) { @@ -160,7 +160,7 @@ object FishingProfitTracker { ) } - val filter: (NEUInternalName) -> Boolean = if (currentCategory == nameAll) { + val filter: (NEUInternalName) -> Boolean = if (currentCategory == NAME_ALL) { { true } } else { val items = itemCategories[currentCategory]!! diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/SeaCreatureTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/SeaCreatureTracker.kt index b293c2736fbf..f050e56cdf95 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/SeaCreatureTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/SeaCreatureTracker.kt @@ -55,12 +55,12 @@ object SeaCreatureTracker { } } - private val nameAll: CategoryName = "All" - private var currentCategory: CategoryName = nameAll + private const val NAME_ALL: CategoryName = "All" + private var currentCategory: CategoryName = NAME_ALL private fun getCurrentCategories(data: Data): Map { val map = mutableMapOf() - map[nameAll] = data.amount.size + map[NAME_ALL] = data.amount.size for ((category, names) in SeaCreatureManager.allVariants) { val amount = names.count { it in data.amount } if (amount > 0) { @@ -103,7 +103,7 @@ object SeaCreatureTracker { val amounts = getCurrentCategories(data) val list = amounts.keys.toList() if (currentCategory !in list) { - currentCategory = nameAll + currentCategory = NAME_ALL } if (tracker.isInventoryOpen()) { @@ -118,7 +118,7 @@ object SeaCreatureTracker { ) } - return if (currentCategory == nameAll) { + return if (currentCategory == NAME_ALL) { { true } } else filterCurrentCategory() } diff --git a/src/main/java/at/hannibal2/skyhanni/features/gui/BeaconPower.kt b/src/main/java/at/hannibal2/skyhanni/features/gui/BeaconPower.kt index 76990b37ad98..8c68dc2c100b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/gui/BeaconPower.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/gui/BeaconPower.kt @@ -58,8 +58,8 @@ object BeaconPower { private var display = "" - private val BEACON_POWER_SLOT = 22 - private val STATS_SLOT = 23 + private const val BEACON_POWER_SLOT = 22 + private const val STATS_SLOT = 23 @SubscribeEvent fun onInventoryUpdate(event: InventoryUpdatedEvent) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/CustomScoreboard.kt b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/CustomScoreboard.kt index a3da970c660f..c9fb4b15f821 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/CustomScoreboard.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/CustomScoreboard.kt @@ -48,7 +48,7 @@ object CustomScoreboard { private var display = emptyList() private var cache = emptyList() - private val guiName = "Custom Scoreboard" + private const val GUI_NAME = "Custom Scoreboard" // Cached scoreboard data, only update after no change for 300ms var activeLines = emptyList() @@ -80,12 +80,12 @@ object CustomScoreboard { RenderBackground.updatePosition(finalRenderable) - config.position.renderRenderable(finalRenderable, posLabel = guiName) + config.position.renderRenderable(finalRenderable, posLabel = GUI_NAME) } @SubscribeEvent fun onGuiPositionMoved(event: GuiPositionMovedEvent) { - if (event.guiName == guiName) { + if (event.guiName == GUI_NAME) { with(alignmentConfig) { if (horizontalAlignment != HorizontalAlignment.DONT_ALIGN || verticalAlignment != VerticalAlignment.DONT_ALIGN diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/SkyblockGuideHighlightFeature.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/SkyblockGuideHighlightFeature.kt index c34b0812538a..e0d7e207cc11 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/SkyblockGuideHighlightFeature.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/SkyblockGuideHighlightFeature.kt @@ -21,8 +21,8 @@ import org.intellij.lang.annotations.Language val patternGroup = RepoPattern.group("skyblockguide.highlight") -private const val keyPrefixInventory = "inventory" -private const val keyPrefixCondition = "condition" +private const val KEY_PREFIX_INVENTORY = "inventory" +private const val KEY_PREFIX_CONDITION = "condition" class SkyblockGuideHighlightFeature private constructor( private val config: () -> Boolean, @@ -44,8 +44,8 @@ class SkyblockGuideHighlightFeature private constructor( onTooltip: (LorenzToolTipEvent) -> Unit = {}, ) : this( config, - patternGroup.pattern("$key.$keyPrefixInventory", inventory), - patternGroup.pattern("$key.$keyPrefixCondition", loreCondition), + patternGroup.pattern("$key.$KEY_PREFIX_INVENTORY", inventory), + patternGroup.pattern("$key.$KEY_PREFIX_CONDITION", loreCondition), onSlotClicked, onTooltip ) @@ -59,7 +59,7 @@ class SkyblockGuideHighlightFeature private constructor( onTooltip: (LorenzToolTipEvent) -> Unit = {}, ) : this( config, - patternGroup.pattern("$key.$keyPrefixInventory", inventory), + patternGroup.pattern("$key.$KEY_PREFIX_INVENTORY", inventory), loreCondition, onSlotClicked, onTooltip @@ -132,13 +132,13 @@ class SkyblockGuideHighlightFeature private constructor( } private val taskOnlyCompleteOncePattern = - patternGroup.pattern("$keyPrefixCondition.once", "§7§eThis task can only be completed once!") - private val xPattern = patternGroup.pattern("$keyPrefixCondition.x", "§c ?✖.*") + patternGroup.pattern("$KEY_PREFIX_CONDITION.once", "§7§eThis task can only be completed once!") + private val xPattern = patternGroup.pattern("$KEY_PREFIX_CONDITION.x", "§c ?✖.*") private val totalProgressPattern = - patternGroup.pattern("$keyPrefixCondition.total", "§7Total Progress: §3\\d{1,2}(?:\\.\\d)?%") + patternGroup.pattern("$KEY_PREFIX_CONDITION.total", "§7Total Progress: §3\\d{1,2}(?:\\.\\d)?%") private val categoryProgressPattern = patternGroup.pattern( - "$keyPrefixCondition.category", + "$KEY_PREFIX_CONDITION.category", "§7Progress to Complete Category: §6\\d{1,2}(?:\\.\\d)?%" ) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/ExperimentationTableAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/ExperimentationTableAPI.kt index 0c7fc1a73d4e..25abb16ed82f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/ExperimentationTableAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/ExperimentationTableAPI.kt @@ -35,12 +35,13 @@ object ExperimentationTableAPI { fun onInventoryUpdated(event: InventoryUpdatedEvent) { if (LorenzUtils.skyBlockIsland != IslandType.PRIVATE_ISLAND || !inTable) return - val entity = EntityUtils.getEntities().find { it.hasSkullTexture(experimentationTableSkull) } ?: return + val entity = EntityUtils.getEntities().find { it.hasSkullTexture(EXPERIMENTATION_TABLE_SKULL) } ?: return val vec = entity.getLorenzVec() if (storage?.tablePos != vec) storage?.tablePos = vec } - private val experimentationTableSkull = + // TODO: Add to repo + private const val EXPERIMENTATION_TABLE_SKULL = "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTUyOWF" + "iYzg4MzA5NTNmNGQ5MWVkZmZmMjQ2OTVhOWY2Mjc1OGZhNGM1MWIyOWFjMjQ2YzM3NDllYWFlODliMyJ9fX0=" diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/UserLuckBreakdown.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/UserLuckBreakdown.kt index f1fad4e63aca..63d64bbb01b7 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/UserLuckBreakdown.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/UserLuckBreakdown.kt @@ -38,19 +38,19 @@ object UserLuckBreakdown { private lateinit var mainLuckItem: ItemStack private val mainLuckID = "ENDER_PEARL".asInternalName() - private val mainLuckName = "§a✴ SkyHanni User Luck" + private const val MAIN_LUCK_NAME = "§a✴ SkyHanni User Luck" private lateinit var fillerItem: ItemStack private var fillerID = "STAINED_GLASS_PANE".asInternalName() - private val fillerName = " " + private const val FILLER_NAME = " " private lateinit var limboItem: ItemStack private var limboID = "ENDER_PEARL".asInternalName() - private val limboName = "§a✴ Limbo Personal Best" + private const val LIMBO_NAME = "§a✴ Limbo Personal Best" private lateinit var skillsItem: ItemStack private var skillsID = "DIAMOND_SWORD".asInternalName() - private val skillsName = "§a✴ Category: Skills" + private const val SKILLS_NAME = "§a✴ Category: Skills" private var showAllStats = true @@ -63,7 +63,7 @@ object UserLuckBreakdown { "§7Show all stats: §.(?.*)", ) - private val luckTooltipString = "§5§o §a✴ SkyHanni User Luck §f" + private const val LUCK_TOOLTIP = "§5§o §a✴ SkyHanni User Luck §f" private var inCustomBreakdown = false private val validItemSlots = (10..53).filter { it !in listOf(17, 18, 26, 27, 35, 36) && it !in 44..53 } @@ -178,7 +178,7 @@ object UserLuckBreakdown { if (lastIndex == -1) return val luckString = tryTruncateFloat(totalLuck) - event.toolTip.add(lastIndex, "$luckTooltipString$luckString") + event.toolTip.add(lastIndex, "$LUCK_TOOLTIP$luckString") } private fun statsBreakdownLoreTooltip(event: LorenzToolTipEvent, limboLuck: Float) { @@ -205,7 +205,7 @@ object UserLuckBreakdown { if (totalLuck == 0f) return val luckString = tryTruncateFloat(totalLuck) - event.toolTip.add(lastIndex, "$luckTooltipString$luckString") + event.toolTip.add(lastIndex, "$LUCK_TOOLTIP$luckString") } private fun tryTruncateFloat(input: Float): String { @@ -239,7 +239,7 @@ object UserLuckBreakdown { private fun createItems() { fillerItem = ItemUtils.createItemStack( fillerID.getItemStack().item, - fillerName, + FILLER_NAME, listOf(), 1, 15, @@ -251,17 +251,17 @@ object UserLuckBreakdown { mainLuckItem = ItemUtils.createItemStack( mainLuckID.getItemStack().item, - "$mainLuckName §f${tryTruncateFloat(totalLuck)}", + "$MAIN_LUCK_NAME §f${tryTruncateFloat(totalLuck)}", *createItemLore("mainMenu", totalLuck), ) limboItem = ItemUtils.createItemStack( limboID.getItemStack().item, - limboName, + LIMBO_NAME, *createItemLore("limbo", limboLuck), ) skillsItem = ItemUtils.createItemStack( skillsID.getItemStack().item, - skillsName, + SKILLS_NAME, *createItemLore("skills"), ) } diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/limbo/LimboPlaytime.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/limbo/LimboPlaytime.kt index 1c46b40d6529..443f5c80b2ff 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/limbo/LimboPlaytime.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/limbo/LimboPlaytime.kt @@ -43,7 +43,7 @@ object LimboPlaytime { private val enabled get() = SkyHanniMod.feature.misc.showLimboTimeInPlaytimeDetailed private val itemID = "ENDER_PEARL".asInternalName() - private val itemName = "§aLimbo" + private const val ITEM_NAME = "§aLimbo" private lateinit var limboItem: ItemStack private var lastCreateCooldown = SimpleTimeMark.farPast() @@ -60,7 +60,7 @@ object LimboPlaytime { lastCreateCooldown = SimpleTimeMark.now() limboItem = ItemUtils.createItemStack( itemID.getItemStack().item, - itemName, + ITEM_NAME, *createItemLore() ) } diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/CruxTalismanDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/CruxTalismanDisplay.kt index c333550f6349..9e92b0807129 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/CruxTalismanDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/CruxTalismanDisplay.kt @@ -28,7 +28,7 @@ object CruxTalismanDisplay { ".*(?§[0-9a-z][IV1-4-]+)\\s+(?§[0-9a-z]\\w+)§[0-9a-z]:\\s*(?§[0-9a-z](?:§[0-9a-z])?MAXED|§[0-9a-z]\\d+§[0-9a-z]/§[0-9a-z]\\d+).*" ) - private val partialName = "CRUX_TALISMAN" + private const val PARTIAL_NAME = "CRUX_TALISMAN" private var display = emptyList>() private val displayLine = mutableListOf() private val bonusesLine = mutableListOf() @@ -91,7 +91,7 @@ object CruxTalismanDisplay { fun onSecondPassed(event: SecondPassedEvent) { if (!isEnabled()) return if (!event.repeatSeconds(2)) return - if (!InventoryUtils.getItemsInOwnInventory().any { it.getInternalName().startsWith(partialName) }) return + if (!InventoryUtils.getItemsInOwnInventory().any { it.getInternalName().startsWith(PARTIAL_NAME) }) return displayLine.clear() bonusesLine.clear() diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/VampireSlayerFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/VampireSlayerFeatures.kt index f60517e4c959..57aa65e53527 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/VampireSlayerFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/VampireSlayerFeatures.kt @@ -60,9 +60,11 @@ object VampireSlayerFeatures { // Nicked support private val username get() = EntityUtils.getEntities().firstOrNull()?.name ?: error("own player is null") - private val bloodIchorTexture = + + // TODO: Add to repo + private const val BLOOD_ICHOR_TEXTURE = "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYzAzNDA5MjNhNmRlNDgyNWExNzY4MTNkMTMzNTAzZWZmMTg2ZGIwODk2ZTMyYjY3MDQ5MjhjMmEyYmY2ODQyMiJ9fX0=" - private val killerSpringTexture = + private const val KILLER_SPRING_TEXTURE = "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNzdmN2E3YmM4YWM4NmYyM2NhN2JmOThhZmViNzY5NjAyMjdlMTgzMmZlMjA5YTMwMjZmNmNlYjhiZGU3NGY1NCJ9fX0=" private var nextClawSend = 0L @@ -82,8 +84,8 @@ object VampireSlayerFeatures { for (stand in EntityUtils.getEntities()) { val vec = stand.position.toLorenzVec() val distance = start.distance(vec) - val isIchor = stand.hasSkullTexture(bloodIchorTexture) - if (isIchor || stand.hasSkullTexture(killerSpringTexture)) { + val isIchor = stand.hasSkullTexture(BLOOD_ICHOR_TEXTURE) + if (isIchor || stand.hasSkullTexture(KILLER_SPRING_TEXTURE)) { val color = (if (isIchor) configBloodIchor.color else configKillerSpring.color) .toChromaColor().withAlpha(config.withAlpha) if (distance <= 15) { @@ -275,8 +277,8 @@ object VampireSlayerFeatures { for (stand in Minecraft.getMinecraft().theWorld.loadedEntityList.filterIsInstance()) { val vec = stand.position.toLorenzVec() val distance = start.distance(vec) - val isIchor = stand.hasSkullTexture(bloodIchorTexture) - val isSpring = stand.hasSkullTexture(killerSpringTexture) + val isIchor = stand.hasSkullTexture(BLOOD_ICHOR_TEXTURE) + val isSpring = stand.hasSkullTexture(KILLER_SPRING_TEXTURE) if (!(isIchor && config.bloodIchor.highlight) && !(isSpring && config.killerSpring.highlight)) continue val color = (if (isIchor) configBloodIchor.color else configKillerSpring.color) .toChromaColor().withAlpha(config.withAlpha) @@ -336,7 +338,7 @@ object VampireSlayerFeatures { for (player in EntityUtils.getEntitiesNearby(loc, 3.0)) { if (!player.isHighlighted() || event.type != EnumParticleTypes.ENCHANTMENT_TABLE) continue for (stand in EntityUtils.getEntitiesNearby(event.location, 3.0)) { - if (stand.hasSkullTexture(killerSpringTexture) || stand.hasSkullTexture(bloodIchorTexture)) { + if (stand.hasSkullTexture(KILLER_SPRING_TEXTURE) || stand.hasSkullTexture(BLOOD_ICHOR_TEXTURE)) { standList = standList.editCopy { this[stand] = player } } } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/guide/GuideGUI.kt b/src/main/java/at/hannibal2/skyhanni/utils/guide/GuideGUI.kt index 944a3201a797..4e06b22ea695 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/guide/GuideGUI.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/guide/GuideGUI.kt @@ -8,11 +8,11 @@ import net.minecraft.client.gui.GuiScreen import net.minecraft.client.renderer.GlStateManager import net.minecraft.item.ItemStack -const val selectedColor = 0x50000000 -const val notSelectedColor = 0x50303030 -const val tabSpacing = 5 -const val tabShortSide = 25 -const val tabLongSide = 28 +const val SELECTED_COLOR = 0x50000000 +const val NOT_SELECTED_COLOR = 0x50303030 +const val TAB_SPACING = 5 +const val TAB_SHORT_SIDE = 25 +const val TAB_LONG_SIDE = 28 abstract class GuideGUI>(defaultScreen: pageEnum) : GuiScreen() { @@ -50,11 +50,11 @@ abstract class GuideGUI>(defaultScreen: pageEnum) : GuiScreen } private fun renderHorizontalTabs() { - var offset = Pair(tabSpacing.toFloat() * 3f, -tabLongSide.toFloat()) + var offset = Pair(TAB_SPACING.toFloat() * 3f, -TAB_LONG_SIDE.toFloat()) GlStateManager.translate(offset.first, offset.second, 0f) for (tab in horizontalTabs) { tab.render(offset.first.toInt(), offset.second.toInt()) - val xShift = (tabShortSide + tabSpacing).toFloat() + val xShift = (TAB_SHORT_SIDE + TAB_SPACING).toFloat() offset = offset.first + xShift to offset.second GlStateManager.translate(xShift, 0f, 0f) } @@ -62,11 +62,11 @@ abstract class GuideGUI>(defaultScreen: pageEnum) : GuiScreen } private fun renderVerticalTabs() { - var offset = Pair(-tabLongSide.toFloat(), tabSpacing.toFloat() * 3f) + var offset = Pair(-TAB_LONG_SIDE.toFloat(), TAB_SPACING.toFloat() * 3f) GlStateManager.translate(offset.first, offset.second, 0f) for (tab in verticalTabs) { tab.render(offset.first.toInt(), offset.second.toInt()) - val yShift = (tabShortSide + tabSpacing).toFloat() + val yShift = (TAB_SHORT_SIDE + TAB_SPACING).toFloat() offset = offset.first to offset.second + yShift GlStateManager.translate(0f, yShift, 0f) } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/guide/GuideTab.kt b/src/main/java/at/hannibal2/skyhanni/utils/guide/GuideTab.kt index acc69c8cccab..231402d330f7 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/guide/GuideTab.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/guide/GuideTab.kt @@ -28,19 +28,19 @@ class GuideTab( } fun select() { - selectColor = selectedColor + selectColor = SELECTED_COLOR } fun unSelect() { - selectColor = notSelectedColor + selectColor = NOT_SELECTED_COLOR } - fun isSelected() = selectColor == selectedColor + fun isSelected() = selectColor == SELECTED_COLOR - val width = if (isVertical) tabLongSide else tabShortSide - val height = if (isVertical) tabShortSide else tabLongSide + val width = if (isVertical) TAB_LONG_SIDE else TAB_SHORT_SIDE + val height = if (isVertical) TAB_SHORT_SIDE else TAB_LONG_SIDE - private var selectColor = notSelectedColor + private var selectColor = NOT_SELECTED_COLOR private val renderable = Renderable.clickAndHover(object : Renderable { override val width = this@GuideTab.width diff --git a/src/main/java/at/hannibal2/skyhanni/utils/renderables/Searchable.kt b/src/main/java/at/hannibal2/skyhanni/utils/renderables/Searchable.kt index 4a81830a8728..d2191462f40a 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/renderables/Searchable.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/renderables/Searchable.kt @@ -9,14 +9,14 @@ fun Renderable.toSearchable(searchText: String? = null) = Searchable(this, searc fun Searchable.toRenderable() = renderable fun List.toRenderable() = map { it.toRenderable() } fun List.toMap() = associate { it.renderable to it.string } -val searchPrefix = "§eSearch: §7" +const val SEARCH_PREFIX = "§eSearch: §7" fun List.buildSearchBox( textInput: TextInput, ): Renderable { val key = 0 return Renderable.searchBox( Renderable.verticalSearchableContainer(toMap(), textInput = textInput, key = key + 1), - searchPrefix, + SEARCH_PREFIX, onUpdateSize = { println("onUpdateSize") }, textInput = textInput, key = key, @@ -39,7 +39,7 @@ fun List.buildSearchableScrollable( scrollValue = scrollValue, velocity = velocity, ), - searchPrefix, + SEARCH_PREFIX, onUpdateSize = { println("onUpdateSize") }, textInput = textInput, key = key, @@ -51,7 +51,7 @@ fun Map, String?>.buildSearchableTable(): Renderable { val key = 0 return Renderable.searchBox( Renderable.searchableTable(toMap(), textInput = textInput, key = key + 1), - searchPrefix, + SEARCH_PREFIX, onUpdateSize = { println("onUpdateSize") }, textInput = textInput, key = key, From 81bf379423633cbfa4f549f099a3fe8ef7e898c5 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Mon, 30 Sep 2024 01:05:57 +0200 Subject: [PATCH 029/155] Version 0.27 Beta 13 --- docs/CHANGELOG.md | 23 +++++++++++++++++++++++ docs/FEATURES.md | 5 +++++ root.gradle.kts | 2 +- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 33d0b77c7433..64e1288718f0 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -93,6 +93,8 @@ + Shows attempts and XP since the last ULTRA-RARE. + Added Experiments Profit Tracker. - ILike2WatchMemes (https://github.com/hannibal002/SkyHanni/pull/2171) + Tracks profits in Coins and Enchanting XP. ++ Added Ultimate Enchant Star. - Empa (https://github.com/hannibal002/SkyHanni/pull/2612) + + Shows a star on Enchanted Books with an Ultimate Enchant. #### Chat Features @@ -134,6 +136,11 @@ + Includes an option to warn you when to throw your rod. + Shows how weak the golden fish is, as a nametag. + Also works on Stranded. ++ Added an alert for Gold or Diamond Trophy Fish catches. - ReyMaratov (https://github.com/hannibal002/SkyHanni/pull/2615) + + Displays a popup with the trophy name, rarity, and amount of the catch. + + Optionally, also plays a sound.+ Added an alert for Gold or Diamond Trophy Fish catches. - ReyMaratov (https://github.com/hannibal002/SkyHanni/pull/2615) + + Displays a popup with the trophy name, rarity, and amount of the catch. + + Optionally, also plays a sound. #### Misc Features @@ -200,6 +207,7 @@ + Added exceptions to the enchant parser. - Vixid (https://github.com/hannibal002/SkyHanni/pull/2254) + Stonk and non-mining tools with Efficiency 5 use the maximum enchant color. + Added a short cooldown between Experimentation Table Guardian Pet chat warnings. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2459) ++ Prevented the SB Menu from replacing items from Dungeons and Kuudra that are placed in the item pickup log. - Fazfoxy (https://github.com/hannibal002/SkyHanni/pull/2599) #### Chat Improvements @@ -226,6 +234,7 @@ + Made the "Line to Arachne" width configurable. - azurejelly (https://github.com/hannibal002/SkyHanni/pull/2406) + Made the "Line to Miniboss" width configurable. - azurejelly (https://github.com/hannibal002/SkyHanni/pull/2406) ++ Added item cooldown support for Blaze Flares. - minhperry (https://github.com/hannibal002/SkyHanni/pull/2601)+ Added item cooldown support for Blaze Flares. - minhperry (https://github.com/hannibal002/SkyHanni/pull/2601) #### Config Improvements @@ -264,6 +273,9 @@ + Improved the performance of pathfinding logic in Area Navigation. - nea (https://github.com/hannibal002/SkyHanni/pull/2537) + Added a toggle to force the `en_US` locale for number formatting. - martimavocado (https://github.com/hannibal002/SkyHanni/pull/2563) + Queued GfS will now always fall back to a default amount if one is not specified. - Luna (https://github.com/hannibal002/SkyHanni/pull/2584) ++ Improved pathfinding. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2597) + + The line to the target no longer jumps around as much. + + Progress to the target now shows up in chat, displaying blocks remaining and percentage completed. Clicking on the chat message cancels the pathfinding. ### Fixes @@ -296,6 +308,11 @@ + Fixed Estimated Item Value incorrectly showing all Kuudra armor as starred. - Luna (https://github.com/hannibal002/SkyHanni/pull/2550) + Fixed Experiments Profit Tracker & Superpair Data. - ILike2WatchMemes (https://github.com/hannibal002/SkyHanni/pull/2560) + Fixed price per unit for Stonk of Stonks auction not working for the bracket you are in. - Thunderblade73 (https://github.com/hannibal002/SkyHanni/pull/2572) ++ Fixed bugs in the Experiments Profit Tracker. - ILike2WatchMemes (https://github.com/hannibal002/SkyHanni/pull/2594) + + Corrected the count for bottles applied while being inside the experimentation table. + + Fixed `/shedittracker` support not functioning properly. ++ Fixed an issue where the item stack size on Diamond/Golden Heads and Master Skulls could be incorrect. - Fazfoxy (https://github.com/hannibal002/SkyHanni/pull/2611) ++ Fixed item category detection for recombobulated items. - minhperry (https://github.com/hannibal002/SkyHanni/pull/2608) #### Mining Fixes @@ -320,6 +337,7 @@ + Fixed some blocks in the Crystal Hollows being detected as Mithril instead of Hard Stone. - Luna (https://github.com/hannibal002/SkyHanni/pull/2580) + Fixed "Mining Commissions Block Color" causing OptiFine connected textures not to connect properly. - nopo (https://github.com/hannibal002/SkyHanni/pull/2577) + Fixed the Mineshaft Pity Counter not working in the Great Glacite Lake. - martimavocado (https://github.com/hannibal002/SkyHanni/pull/2565) ++ Fixed Powder Tracker inaccuracies. - Empa (https://github.com/hannibal002/SkyHanni/pull/2591) #### Scoreboard Fixes @@ -342,6 +360,7 @@ + Fixed a Custom Scoreboard error while in the Dojo. - j10a1n15 (https://github.com/hannibal002/SkyHanni/pull/2519) + Fixed a Custom Scoreboard error during M7 Dragons. - j10a1n15 (https://github.com/hannibal002/SkyHanni/pull/2510) + Fixed Custom Scoreboard error during the Raffle Event. - j10a1n15 (https://github.com/hannibal002/SkyHanni/pull/2545) ++ Fixed both the Custom Scoreboard Active and Starting Soon Tab List events being active simultaneously in the Garden. - Empa, j10a1n15 (https://github.com/hannibal002/SkyHanni/pull/2592) #### Hoppity Fixes @@ -351,6 +370,7 @@ + Fixed minor formatting issues with Hoppity Event Summary. - Daveed (https://github.com/hannibal002/SkyHanni/pull/2416) + Fixed Hoppity Event stats resetting. - Daveed (https://github.com/hannibal002/SkyHanni/pull/2489) + Fixed an issue where Fish the Rabbit and El Dorado did not have compacted chat messages. - Daveed (https://github.com/hannibal002/SkyHanni/pull/2488) ++ Fixed inconsistencies in Hoppity Duplicate Number counts. - Daveed (https://github.com/hannibal002/SkyHanni/pull/2595) #### Chat Fixes @@ -382,6 +402,8 @@ + Updated Ghost Counter bestiary tiers to reflect Hypixel reducing the max kills needed from 250K to 100K. - Luna (https://github.com/hannibal002/SkyHanni/pull/2533) + Fixed a case where the Broodmother countdown could be wildly inaccurate. - MTOnline (https://github.com/hannibal002/SkyHanni/pull/2513) ++ Fixed Flare Display spamming chat with negative values when the server is lagging. - Stella (https://github.com/hannibal002/SkyHanni/pull/2567) ++ Fixed a case where the Imminent stage did not update the Broodmother countdown. - MTOnline (https://github.com/hannibal002/SkyHanni/pull/2602)v #### The Carnival Fixes @@ -480,6 +502,7 @@ + These are added as a layer between SkyHanni and NEU so that we are not reliant on NEU functions. + Added Blossom Gradle plugin for token replacement in code. - ThatGravyBoat (https://github.com/hannibal002/SkyHanni/pull/2558) + `@MOD_VERSION@` is now a token that will be replaced. ++ Added `detekt` runner to the build process. - Daveed & nea (https://github.com/hannibal002/SkyHanni/pull/2547) ### Removed Features diff --git a/docs/FEATURES.md b/docs/FEATURES.md index 0783d9e09f82..d78a2114dfbf 100644 --- a/docs/FEATURES.md +++ b/docs/FEATURES.md @@ -224,6 +224,8 @@ Use `/sh` or `/skyhanni` to open the SkyHanni config in game. + Can be enabled/disabled on the Item Number list. + Item Pickup Log. - catgirlseraid (https://github.com/hannibal002/SkyHanni/pull/1937) + Display the price per Stonk when taking the minimum bid in the Stonks Auction (Richard Menu). - Thunderblade73 (https://github.com/hannibal002/SkyHanni/pull/2195) ++ Added Ultimate Enchant Star. - Empa (https://github.com/hannibal002/SkyHanni/pull/2612) + + Shows a star on Enchanted Books with an Ultimate Enchant.
@@ -369,6 +371,9 @@ Use `/sh` or `/skyhanni` to open the SkyHanni config in game. + Includes an option to warn you when to throw your rod. + Shows how weak the golden fish is, as a nametag. + Also works on Stranded. ++ Added an alert for Gold or Diamond Trophy Fish catches. - ReyMaratov (https://github.com/hannibal002/SkyHanni/pull/2615) + + Displays a popup with the trophy name, rarity, and amount of the catch. + + Optionally, also plays a sound.
diff --git a/root.gradle.kts b/root.gradle.kts index 79dbe9ffba6f..9eb7a0854868 100644 --- a/root.gradle.kts +++ b/root.gradle.kts @@ -14,7 +14,7 @@ plugins { allprojects { group = "at.hannibal2.skyhanni" - version = "0.27.Beta.12" + version = "0.27.Beta.13" repositories { mavenCentral() mavenLocal() From e4e8a313b66d67107a64db9873996ec58d76566d Mon Sep 17 00:00:00 2001 From: MTOnline69 <97001154+MTOnline69@users.noreply.github.com> Date: Mon, 30 Sep 2024 00:44:22 +0100 Subject: [PATCH 030/155] Feature: West Village/Dreadfarm/Living Cave features (#2616) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../skyhanni/config/ConfigUpdaterMigrator.kt | 2 +- .../features/rift/EnigmaSoulConfig.java | 5 + .../area/dreadfarm/WiltedBerberisConfig.java | 7 +- .../LivingCaveLivingMetalConfig.java | 7 + .../area/westvillage/GunthersRaceConfig.java | 33 ++++ .../area/westvillage/WestVillageConfig.java | 15 +- .../jsonobjects/repo/RiftWoodenButtonsJson.kt | 13 ++ .../skyhanni/data/model/GraphNodeTag.kt | 1 + .../skyhanni/features/rift/RiftAPI.kt | 11 +- .../dreadfarm/RiftWiltedBerberisHelper.kt | 31 ++- .../area/dreadfarm/WoodenButtonsHelper.kt | 184 ++++++++++++++++++ .../livingcave/LivingCaveLivingMetalHelper.kt | 8 +- .../rift/area/westvillage/RiftGunthersRace.kt | 117 +++++++++++ .../area/westvillage/VerminHighlighter.kt | 5 +- .../rift/area/westvillage/VerminTracker.kt | 5 +- .../rift/everywhere/EnigmaSoulWaypoints.kt | 18 +- .../features/rift/everywhere/RiftTimer.kt | 44 +++-- .../hannibal2/skyhanni/utils/ParkourHelper.kt | 7 +- 18 files changed, 461 insertions(+), 52 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/config/features/rift/area/westvillage/GunthersRaceConfig.java create mode 100644 src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/RiftWoodenButtonsJson.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/features/rift/area/dreadfarm/WoodenButtonsHelper.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/RiftGunthersRace.kt diff --git a/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt b/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt index b9f21ca2255c..aa15461f5af2 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt @@ -12,7 +12,7 @@ import com.google.gson.JsonPrimitive object ConfigUpdaterMigrator { val logger = LorenzLogger("ConfigMigration") - const val CONFIG_VERSION = 59 + const val CONFIG_VERSION = 60 fun JsonElement.at(chain: List, init: Boolean): JsonElement? { if (chain.isEmpty()) return this if (this !is JsonObject) return null diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/rift/EnigmaSoulConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/rift/EnigmaSoulConfig.java index f64a42506043..69a87bd31660 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/rift/EnigmaSoulConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/rift/EnigmaSoulConfig.java @@ -32,4 +32,9 @@ public class EnigmaSoulConfig { @ConfigOption(name = "Color", desc = "Color of the Enigma Souls.") @ConfigEditorColour public String color = "0:245:219:27:198"; + + @Expose + @ConfigOption(name = "Buttons Helper", desc = "Help find all 56 wooden buttons required for the Buttons soul when tracking it.") + @ConfigEditorBoolean + public boolean showButtonsHelper = true; } diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/rift/area/dreadfarm/WiltedBerberisConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/rift/area/dreadfarm/WiltedBerberisConfig.java index eddcb740d96d..2aa89f66ea6d 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/rift/area/dreadfarm/WiltedBerberisConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/rift/area/dreadfarm/WiltedBerberisConfig.java @@ -21,7 +21,10 @@ public class WiltedBerberisConfig { @Expose @ConfigOption(name = "Hide Particles", desc = "Hide the Wilted Berberis particles.") @ConfigEditorBoolean - // TODO fix typo - public boolean hideparticles = false; + public boolean hideParticles = false; + @Expose + @ConfigOption(name = "Mute Others Sounds", desc = "Mute nearby Wilted Berberis sounds while not holding a Wand of Farming or not standing on Farmland blocks.") + @ConfigEditorBoolean + public boolean muteOthersSounds = true; } diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/rift/area/livingcave/LivingCaveLivingMetalConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/rift/area/livingcave/LivingCaveLivingMetalConfig.java index 38f60870f5ac..4053070e3375 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/rift/area/livingcave/LivingCaveLivingMetalConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/rift/area/livingcave/LivingCaveLivingMetalConfig.java @@ -3,7 +3,9 @@ import at.hannibal2.skyhanni.config.FeatureToggle; import com.google.gson.annotations.Expose; import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorBoolean; +import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorColour; import io.github.notenoughupdates.moulconfig.annotations.ConfigOption; +import io.github.notenoughupdates.moulconfig.observer.Property; public class LivingCaveLivingMetalConfig { @@ -19,4 +21,9 @@ public class LivingCaveLivingMetalConfig { @FeatureToggle public boolean hideParticles = false; + @Expose + @ConfigOption(name = "Color", desc = "Set the color to highlight the blocks in.") + @ConfigEditorColour + public Property color = Property.of("0:255:85:255:255"); + } diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/rift/area/westvillage/GunthersRaceConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/rift/area/westvillage/GunthersRaceConfig.java new file mode 100644 index 000000000000..beb4acc9e3a0 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/config/features/rift/area/westvillage/GunthersRaceConfig.java @@ -0,0 +1,33 @@ +package at.hannibal2.skyhanni.config.features.rift.area.westvillage; + +import at.hannibal2.skyhanni.config.FeatureToggle; +import com.google.gson.annotations.Expose; +import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorBoolean; +import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorColour; +import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorSlider; +import io.github.notenoughupdates.moulconfig.annotations.ConfigOption; +import io.github.notenoughupdates.moulconfig.observer.Property; + +public class GunthersRaceConfig { + + @Expose + @ConfigOption(name = "Enabled", desc = "Show the route for Gunther's rift race.") + @ConfigEditorBoolean + @FeatureToggle + public boolean enabled = true; + + @Expose + @ConfigOption(name = "Look Ahead", desc = "Change how many waypoints should be shown in front of you.") + @ConfigEditorSlider(minStep = 1, maxValue = 30, minValue = 1) + public Property lookAhead = Property.of(3); + + @Expose + @ConfigOption(name = "Rainbow Color", desc = "Show the rainbow color effect instead of a boring monochrome.") + @ConfigEditorBoolean + public Property rainbowColor = Property.of(true); + + @Expose + @ConfigOption(name = "Monochrome Color", desc = "Set a boring monochrome color for the guide waypoints.") + @ConfigEditorColour + public Property monochromeColor = Property.of("0:60:0:0:255"); +} diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/rift/area/westvillage/WestVillageConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/rift/area/westvillage/WestVillageConfig.java index 5dbf1a231eff..fa6db52144b4 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/rift/area/westvillage/WestVillageConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/rift/area/westvillage/WestVillageConfig.java @@ -6,11 +6,6 @@ public class WestVillageConfig { - @ConfigOption(name = "Kloon Hacking", desc = "") - @Accordion - @Expose - public KloonHackingConfig hacking = new KloonHackingConfig(); - @ConfigOption(name = "Vermin Tracker", desc = "Track all vermins collected.") @Accordion @Expose @@ -20,4 +15,14 @@ public class WestVillageConfig { @Accordion @Expose public VerminHighlightConfig verminHighlight = new VerminHighlightConfig(); + + @ConfigOption(name = "Gunther's Race", desc = "") + @Accordion + @Expose + public GunthersRaceConfig gunthersRace = new GunthersRaceConfig(); + + @ConfigOption(name = "Kloon Hacking", desc = "") + @Accordion + @Expose + public KloonHackingConfig hacking = new KloonHackingConfig(); } diff --git a/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/RiftWoodenButtonsJson.kt b/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/RiftWoodenButtonsJson.kt new file mode 100644 index 000000000000..fdc4befe785f --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/RiftWoodenButtonsJson.kt @@ -0,0 +1,13 @@ +package at.hannibal2.skyhanni.data.jsonobjects.repo + +import at.hannibal2.skyhanni.utils.LorenzVec +import com.google.gson.annotations.Expose + +data class RiftWoodenButtonsJson( + @Expose val houses: Map> +) + +data class ButtonSpots( + @Expose val position: LorenzVec, + @Expose val buttons: List +) diff --git a/src/main/java/at/hannibal2/skyhanni/data/model/GraphNodeTag.kt b/src/main/java/at/hannibal2/skyhanni/data/model/GraphNodeTag.kt index 6bf00edafcf6..8efcf4621e37 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/model/GraphNodeTag.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/model/GraphNodeTag.kt @@ -42,6 +42,7 @@ enum class GraphNodeTag( // Rift RIFT_ENIGMA("rift_enigma", LorenzColor.DARK_PURPLE, "Enigma Soul", "Enigma Souls in the Rift.", onlyIsland = IslandType.THE_RIFT), + RIFT_BUTTONS_QUEST("rift_buttons_quest", LorenzColor.LIGHT_PURPLE, "Wooden Buttons", "A spot to hit wooden buttons for the Dreadfarm Enigma Soul.", onlyIsland = IslandType.THE_RIFT), RIFT_EYE("rift_eye", LorenzColor.DARK_RED, "Rift Eye", "An Eye in the Rift to teleport to.", onlyIsland = IslandType.THE_RIFT), RIFT_MONTEZUMA( "rift_montezuma", diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/RiftAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/RiftAPI.kt index 844ac0227da4..48fa8d03fce6 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/RiftAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/RiftAPI.kt @@ -21,6 +21,11 @@ object RiftAPI { val farmingTool by lazy { "FARMING_WAND".asInternalName() } + private val blowgun by lazy { "BERBERIS_BLOWGUN".asInternalName() } + + val ItemStack?.isBlowgun: Boolean + get() = this?.getInternalName() == blowgun + fun ItemStack.motesNpcPrice(): Double? { val baseMotes = motesPrice[getInternalName()] ?: return null val burgerStacks = config.motes.burgerStacks @@ -28,9 +33,13 @@ object RiftAPI { return pricePer * stackSize } + var inRiftRace = false + var trackingButtons = false + var allButtonsHit = false + fun inLivingCave() = LorenzUtils.skyBlockArea == "Living Cave" fun inLivingStillness() = LorenzUtils.skyBlockArea == "Living Stillness" fun inStillgoreChateau() = LorenzUtils.skyBlockArea.let { it == "Stillgore Château" || it == "Oubliette" } - fun inDreadfarm() = LorenzUtils.skyBlockArea == "Dreadfarm" + fun inWestVillage() = LorenzUtils.skyBlockArea.let { it == "West Village" || it == "Infested House" } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/area/dreadfarm/RiftWiltedBerberisHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/area/dreadfarm/RiftWiltedBerberisHelper.kt index e1664e6c8087..9ff96213b3fe 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/area/dreadfarm/RiftWiltedBerberisHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/area/dreadfarm/RiftWiltedBerberisHelper.kt @@ -1,7 +1,9 @@ package at.hannibal2.skyhanni.features.rift.area.dreadfarm +import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent import at.hannibal2.skyhanni.events.LorenzTickEvent +import at.hannibal2.skyhanni.events.PlaySoundEvent import at.hannibal2.skyhanni.events.ReceiveParticleEvent import at.hannibal2.skyhanni.features.rift.RiftAPI import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule @@ -56,10 +58,9 @@ object RiftWiltedBerberisHelper { } } - private fun nearestBerberis(location: LorenzVec): WiltedBerberis? { - return list.filter { it.currentParticles.distanceSq(location) < 8 } + private fun nearestBerberis(location: LorenzVec): WiltedBerberis? = + list.filter { it.currentParticles.distanceSq(location) < 8 } .minByOrNull { it.currentParticles.distanceSq(location) } - } @SubscribeEvent fun onReceiveParticle(event: ReceiveParticleEvent) { @@ -70,13 +71,13 @@ object RiftWiltedBerberisHelper { val berberis = nearestBerberis(location) if (event.type != EnumParticleTypes.FIREWORKS_SPARK) { - if (config.hideparticles && berberis != null) { + if (config.hideParticles && berberis != null) { event.cancel() } return } - if (config.hideparticles) { + if (config.hideParticles) { event.cancel() } @@ -106,6 +107,16 @@ object RiftWiltedBerberisHelper { } } + @SubscribeEvent + fun onPlaySound(event: PlaySoundEvent) { + if (!isMuteOthersSoundsEnabled()) return + val soundName = event.soundName + + if (soundName == "mob.horse.donkey.death" || soundName == "mob.horse.donkey.hit") { + event.cancel() + } + } + @SubscribeEvent fun onRenderWorld(event: LorenzRenderWorldEvent) { if (!isEnabled()) return @@ -133,6 +144,11 @@ object RiftWiltedBerberisHelper { } } + @SubscribeEvent + fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { + event.move(60, "rift.area.dreadfarm.wiltedBerberis.hideparticles", "rift.area.dreadfarm.wiltedBerberis.hideParticles") + } + private fun axisAlignedBB(loc: LorenzVec) = loc.add(0.1, -0.1, 0.1).boundingToOffset(0.8, 1.0, 0.8).expandBlock() private fun LorenzVec.fixLocation(wiltedBerberis: WiltedBerberis): LorenzVec { @@ -143,4 +159,9 @@ object RiftWiltedBerberisHelper { } private fun isEnabled() = RiftAPI.inRift() && RiftAPI.inDreadfarm() && config.enabled + + private fun isMuteOthersSoundsEnabled() = RiftAPI.inRift() && + config.muteOthersSounds && + (RiftAPI.inDreadfarm() || RiftAPI.inWestVillage()) && + !(hasFarmingToolInHand && isOnFarmland) } diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/area/dreadfarm/WoodenButtonsHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/area/dreadfarm/WoodenButtonsHelper.kt new file mode 100644 index 000000000000..d2413cc3ae63 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/area/dreadfarm/WoodenButtonsHelper.kt @@ -0,0 +1,184 @@ +package at.hannibal2.skyhanni.features.rift.area.dreadfarm + +import at.hannibal2.skyhanni.data.ClickType +import at.hannibal2.skyhanni.data.IslandGraphs +import at.hannibal2.skyhanni.data.jsonobjects.repo.RiftWoodenButtonsJson +import at.hannibal2.skyhanni.data.model.GraphNode +import at.hannibal2.skyhanni.data.model.GraphNodeTag +import at.hannibal2.skyhanni.events.BlockClickEvent +import at.hannibal2.skyhanni.events.ItemClickEvent +import at.hannibal2.skyhanni.events.LorenzChatEvent +import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent +import at.hannibal2.skyhanni.events.LorenzTickEvent +import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent +import at.hannibal2.skyhanni.events.RepositoryReloadEvent +import at.hannibal2.skyhanni.features.rift.RiftAPI +import at.hannibal2.skyhanni.features.rift.RiftAPI.isBlowgun +import at.hannibal2.skyhanni.features.rift.everywhere.EnigmaSoulWaypoints.soulLocations +import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule +import at.hannibal2.skyhanni.utils.BlockUtils.getBlockAt +import at.hannibal2.skyhanni.utils.BlockUtils.getBlockStateAt +import at.hannibal2.skyhanni.utils.ColorUtils.toChromaColor +import at.hannibal2.skyhanni.utils.LocationUtils.canBeSeen +import at.hannibal2.skyhanni.utils.LocationUtils.distanceToPlayer +import at.hannibal2.skyhanni.utils.LorenzVec +import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher +import at.hannibal2.skyhanni.utils.RenderUtils.drawDynamicText +import at.hannibal2.skyhanni.utils.RenderUtils.drawWaypointFilled +import at.hannibal2.skyhanni.utils.SimpleTimeMark +import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern +import net.minecraft.block.BlockButtonWood +import net.minecraft.init.Blocks +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import kotlin.time.Duration.Companion.seconds + +@SkyHanniModule +object WoodenButtonsHelper { + + private val config get() = RiftAPI.config.enigmaSoulWaypoints + + private val patternGroup = RepoPattern.group("rift.area.dreadfarm.buttons") + + /** + * REGEX-TEST: §eYou have hit §r§b1/56 §r§eof the wooden buttons! + * REGEX-TEST: §eYou have hit §r§b10/56 §r§eof the wooden buttons! + */ + private val buttonHitPattern by patternGroup.pattern( + "hit", + "§eYou have hit §r§b\\d+/56 §r§eof the wooden buttons!", + ) + + private var buttonLocations = mapOf>() + private var hitButtons = mutableSetOf() + private var lastHitButton: LorenzVec? = null + private var currentSpot: GraphNode? = null + private var lastBlowgunFire = SimpleTimeMark.farPast() + + @SubscribeEvent + fun onRepoReload(event: RepositoryReloadEvent) { + val data = event.getConstant("rift/RiftWoodenButtons") + buttonLocations = mutableMapOf>().apply { + data.houses.forEach { (houseName, spots) -> + spots.forEach { spot -> + this["$houseName House:${spot.position}"] = spot.buttons + } + } + } + } + + @SubscribeEvent + fun onWorldChange(event: LorenzWorldChangeEvent) { + hitButtons.clear() + RiftAPI.allButtonsHit = false + currentSpot = null + } + + @SubscribeEvent + fun onTick(event: LorenzTickEvent) { + findClosestSpot() + checkBlowgunActivatedButtons() + } + + private fun findClosestSpot() { + if (!showButtons()) return + val graph = IslandGraphs.currentIslandGraph ?: return + + val closestNode = graph.nodes + .filter { it.tags.contains(GraphNodeTag.RIFT_BUTTONS_QUEST) } + .filter { node -> + val spotName = "${node.name}:${node.position}" + val buttonsAtSpot = buttonLocations[spotName] ?: return@filter false + buttonsAtSpot.any { !hitButtons.contains(it) } + } + .minByOrNull { it.position.distanceToPlayer() } + + if (closestNode != currentSpot) { + currentSpot = closestNode + currentSpot?.let { + IslandGraphs.pathFind(it.position, "Button Spot", config.color.toChromaColor(), condition = { config.showPathFinder && config.showButtonsHelper }) + } + } + } + + @SubscribeEvent + fun onBlockClick(event: BlockClickEvent) { + if (!checkButtons()) return + + val location = event.position + if (location.getBlockAt() == Blocks.wooden_button && !hitButtons.contains(location)) { + lastHitButton = event.position + } + } + + @SubscribeEvent + fun onItemClick(event: ItemClickEvent) { + if (!checkButtons()) return + if (event.clickType != ClickType.RIGHT_CLICK) return + if (!event.itemInHand.isBlowgun) return + lastBlowgunFire = SimpleTimeMark.now() + } + + private fun checkBlowgunActivatedButtons() { + if (lastBlowgunFire.passedSince() > 2.5.seconds) return + buttonLocations.values.flatten().forEach { buttonLocation -> + val blockState = buttonLocation.getBlockStateAt() + if (blockState.block is BlockButtonWood && + blockState.getValue(BlockButtonWood.POWERED) == true && + buttonLocation.canBeSeen(1..3) && + lastHitButton != buttonLocation && + !hitButtons.contains(buttonLocation)) { + lastHitButton = buttonLocation + addLastHitButton() + } + } + } + + private fun addLastHitButton() { + if (lastHitButton !in hitButtons) { + lastHitButton?.let { hitButtons.add(it) } + } + } + + @SubscribeEvent + fun onChat(event: LorenzChatEvent) { + if (!checkButtons()) return + + buttonHitPattern.matchMatcher(event.message) { + addLastHitButton() + } + + if (event.message != "§eYou've hit all §r§b56 §r§ewooden buttons!") return + RiftAPI.allButtonsHit = true + hitButtons = buttonLocations.values.flatten().toMutableSet() + soulLocations["Buttons"]?.let { + IslandGraphs.pathFind( + it, + "Buttons Enigma Soul", + config.color.toChromaColor(), + condition = { config.showPathFinder }, + ) + } + } + + @SubscribeEvent + fun onRenderWorld(event: LorenzRenderWorldEvent) { + if (!showButtons()) return + + val spot = currentSpot ?: return + val distance = spot.position.distanceToPlayer() + if (distance > 2.5) { + event.drawDynamicText(spot.position.add(y = 1), "Hit Buttons Here!", 1.25) + } + + if (distance > 15.0) return + val spotName = "${spot.name}:${spot.position}" + buttonLocations[spotName]?.forEach { button -> + if (!hitButtons.contains(button)) { + event.drawWaypointFilled(button, config.color.toChromaColor(), inverseAlphaScale = true) + } + } + } + + private fun checkButtons() = RiftAPI.inRift() && !RiftAPI.allButtonsHit + fun showButtons() = checkButtons() && RiftAPI.trackingButtons && config.showButtonsHelper +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/area/livingcave/LivingCaveLivingMetalHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/area/livingcave/LivingCaveLivingMetalHelper.kt index 3b64f0fb1c95..63a4e35cb750 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/area/livingcave/LivingCaveLivingMetalHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/area/livingcave/LivingCaveLivingMetalHelper.kt @@ -8,8 +8,8 @@ import at.hannibal2.skyhanni.events.ServerBlockChangeEvent import at.hannibal2.skyhanni.events.TitleReceivedEvent import at.hannibal2.skyhanni.features.rift.RiftAPI import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule +import at.hannibal2.skyhanni.utils.ColorUtils.toChromaColor import at.hannibal2.skyhanni.utils.LocationUtils.distanceToPlayer -import at.hannibal2.skyhanni.utils.LorenzColor import at.hannibal2.skyhanni.utils.LorenzVec import at.hannibal2.skyhanni.utils.RenderUtils.drawWaypointFilled import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -72,8 +72,8 @@ object LivingCaveLivingMetalHelper { } else b event.drawWaypointFilled( location, - LorenzColor.AQUA.toColor(), - seeThroughBlocks = location.distanceToPlayer() < 10 + color, + seeThroughBlocks = location.distanceToPlayer() < 10, ) } @@ -97,5 +97,7 @@ object LivingCaveLivingMetalHelper { } } + val color get() = config.color.get().toChromaColor() + fun isEnabled() = RiftAPI.inRift() && (RiftAPI.inLivingCave() || RiftAPI.inLivingStillness()) && config.enabled } diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/RiftGunthersRace.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/RiftGunthersRace.kt new file mode 100644 index 000000000000..cf729453fcb6 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/RiftGunthersRace.kt @@ -0,0 +1,117 @@ +package at.hannibal2.skyhanni.features.rift.area.westvillage + +import at.hannibal2.skyhanni.data.jsonobjects.repo.ParkourJson +import at.hannibal2.skyhanni.events.ConfigLoadEvent +import at.hannibal2.skyhanni.events.IslandChangeEvent +import at.hannibal2.skyhanni.events.LorenzChatEvent +import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent +import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent +import at.hannibal2.skyhanni.events.RepositoryReloadEvent +import at.hannibal2.skyhanni.features.rift.RiftAPI +import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule +import at.hannibal2.skyhanni.utils.ColorUtils.toChromaColor +import at.hannibal2.skyhanni.utils.ConditionalUtils +import at.hannibal2.skyhanni.utils.ParkourHelper +import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher +import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +@SkyHanniModule +object RiftGunthersRace { + + private val config get() = RiftAPI.config.area.westVillage.gunthersRace + private var parkourHelper: ParkourHelper? = null + + private val patternGroup = RepoPattern.group("rift.area.westvillage.riftrace") + + /** + * REGEX-TEST: §3§lRIFT RACING §r§eRace started! Good luck! + */ + private val raceStartedPattern by patternGroup.pattern( + "start", + "§3§lRIFT RACING §r§eRace started! Good luck!" + ) + + /** + * REGEX-TEST: §3§lRIFT RACING §r§eRace finished in 00:36.539! + * REGEX-TEST: §3§lRIFT RACING §r§eRace finished in §r§300:32.794§r§e! §r§3§lPERSONAL BEST! + */ + private val raceFinishedPattern by patternGroup.pattern( + "finish", + "§3§lRIFT RACING §r§eRace finished in \\d+:\\d+.\\d+!.*" + ) + + /** + * REGEX-TEST: §3§lRIFT RACING §r§cRace cancelled! + * REGEX-TEST: §3§lRIFT RACING §r§cRace cancelled! Time limit reached! + * REGEX-TEST: §3§lRIFT RACING §r§cRace cancelled! You left the racing area! + */ + private val raceCancelledPattern by patternGroup.pattern( + "cancel", + "§3§lRIFT RACING §r§cRace cancelled!.*" + ) + + @SubscribeEvent + fun onIslandChange(event: IslandChangeEvent) { + parkourHelper?.reset() + } + + @SubscribeEvent + fun onWorldChange(event: LorenzWorldChangeEvent) { + RiftAPI.inRiftRace = false + } + + @SubscribeEvent + fun onRepoReload(event: RepositoryReloadEvent) { + val data = event.getConstant("rift/RiftRace") + parkourHelper = ParkourHelper( + data.locations, + data.shortCuts, + detectionRange = 5.0, + goInOrder = true, + ) + updateConfig() + } + + @SubscribeEvent + fun onConfigLoad(event: ConfigLoadEvent) { + ConditionalUtils.onToggle(config.rainbowColor, config.monochromeColor, config.lookAhead) { + updateConfig() + } + } + + private fun updateConfig() { + parkourHelper?.run { + rainbowColor = config.rainbowColor.get() + monochromeColor = config.monochromeColor.get().toChromaColor() + lookAhead = config.lookAhead.get() + 1 + } + } + + @SubscribeEvent + fun onChat(event: LorenzChatEvent) { + if (!isEnabled()) return + + raceStartedPattern.matchMatcher(event.message) { + RiftAPI.inRiftRace = true + } + raceCancelledPattern.matchMatcher(event.message) { + parkourHelper?.reset() + RiftAPI.inRiftRace = false + } + raceFinishedPattern.matchMatcher(event.message) { + parkourHelper?.reset() + RiftAPI.inRiftRace = false + } + } + + @SubscribeEvent + fun onRenderWorld(event: LorenzRenderWorldEvent) { + if (!isEnabled() || !RiftAPI.inRiftRace) return + + parkourHelper?.render(event) + } + + fun isEnabled() = + RiftAPI.inRift() && RiftAPI.inWestVillage() && config.enabled +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/VerminHighlighter.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/VerminHighlighter.kt index 3fa6af42fc0e..c08594c26ea9 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/VerminHighlighter.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/VerminHighlighter.kt @@ -11,7 +11,6 @@ import at.hannibal2.skyhanni.utils.ConditionalUtils import at.hannibal2.skyhanni.utils.EntityUtils import at.hannibal2.skyhanni.utils.EntityUtils.hasSkullTexture import at.hannibal2.skyhanni.utils.InventoryUtils -import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.baseMaxHealth import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName import at.hannibal2.skyhanni.utils.TimeLimitedSet @@ -63,10 +62,8 @@ object VerminHighlighter { else -> false } - private fun inArea() = LorenzUtils.skyBlockArea.let { it == "West Village" || it == "Infested House" } - private fun hasItemInHand() = InventoryUtils.itemInHandId == "TURBOMAX_VACUUM".asInternalName() - fun isEnabled() = RiftAPI.inRift() && inArea() && config.enabled && hasItemInHand() + fun isEnabled() = RiftAPI.inRift() && RiftAPI.inWestVillage() && config.enabled && hasItemInHand() } diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/VerminTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/VerminTracker.kt index e47fe8002b6d..cedaa569bfbf 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/VerminTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/VerminTracker.kt @@ -13,7 +13,6 @@ import at.hannibal2.skyhanni.utils.CollectionUtils.addSearchString import at.hannibal2.skyhanni.utils.InventoryUtils import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import at.hannibal2.skyhanni.utils.ItemUtils.getLore -import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher @@ -162,9 +161,7 @@ object VerminTracker { @SubscribeEvent fun onRenderOverlay(event: GuiRenderEvent) { if (!isEnabled()) return - if (!config.showOutsideWestVillage && - !LorenzUtils.skyBlockArea.let { it == "Infested House" || it == "West Village" } - ) return + if (!config.showOutsideWestVillage && !RiftAPI.inWestVillage()) return if (!config.showWithoutVacuum && !hasVacuum) return tracker.renderDisplay(config.position) diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/EnigmaSoulWaypoints.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/EnigmaSoulWaypoints.kt index 41ad12763496..fc0856be64d1 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/EnigmaSoulWaypoints.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/EnigmaSoulWaypoints.kt @@ -10,6 +10,7 @@ import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent import at.hannibal2.skyhanni.events.RepositoryReloadEvent import at.hannibal2.skyhanni.events.render.gui.ReplaceItemEvent import at.hannibal2.skyhanni.features.rift.RiftAPI +import at.hannibal2.skyhanni.features.rift.area.dreadfarm.WoodenButtonsHelper import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.utils.ChatUtils import at.hannibal2.skyhanni.utils.ColorUtils.toChromaColor @@ -36,7 +37,7 @@ object EnigmaSoulWaypoints { private val config get() = RiftAPI.config.enigmaSoulWaypoints private var inInventory = false - private var soulLocations = mapOf() + var soulLocations = mapOf() private val trackedSouls = mutableListOf() private val inventoryUnfound = mutableListOf() private var adding = true @@ -89,6 +90,9 @@ object EnigmaSoulWaypoints { if (event.slotId == 31 && inventoryUnfound.isNotEmpty()) { event.makePickblock() + if (inventoryUnfound.contains("Buttons")) { + RiftAPI.trackingButtons = !RiftAPI.trackingButtons + } if (adding) { trackedSouls.addAll(inventoryUnfound) adding = false @@ -107,12 +111,17 @@ object EnigmaSoulWaypoints { val name = split.last() if (!soulLocations.contains(name)) return + if (name == "Buttons") { + RiftAPI.trackingButtons = !RiftAPI.trackingButtons + } + if (!trackedSouls.contains(name)) { ChatUtils.chat("§5Tracking the $name Enigma Soul!", prefixColor = "§5") if (config.showPathFinder) { soulLocations[name]?.let { - - IslandGraphs.pathFind(it, "$name Enigma Soul", config.color.toChromaColor(), condition = { config.showPathFinder }) + if (!(name == "Buttons" && WoodenButtonsHelper.showButtons())) { + IslandGraphs.pathFind(it, "$name Enigma Soul", config.color.toChromaColor(), condition = { config.showPathFinder }) + } } } trackedSouls.add(name) @@ -189,6 +198,9 @@ object EnigmaSoulWaypoints { if (closestSoul in trackedSouls) { trackedSouls.remove(closestSoul) ChatUtils.chat("§5Found the $closestSoul Enigma Soul!", prefixColor = "§5") + if (closestSoul == "Buttons") { + RiftAPI.trackingButtons = false + } } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/RiftTimer.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/RiftTimer.kt index 403a786869cc..94fbe5c3e3e8 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/RiftTimer.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/everywhere/RiftTimer.kt @@ -1,20 +1,22 @@ package at.hannibal2.skyhanni.features.rift.everywhere -import at.hannibal2.skyhanni.events.ActionBarUpdateEvent +import at.hannibal2.skyhanni.data.ActionBarStatsData +import at.hannibal2.skyhanni.events.ActionBarValueUpdateEvent import at.hannibal2.skyhanni.events.ConfigLoadEvent import at.hannibal2.skyhanni.events.GuiRenderEvent +import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent import at.hannibal2.skyhanni.events.entity.EntityHealthDisplayEvent import at.hannibal2.skyhanni.features.rift.RiftAPI import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.utils.ConditionalUtils import at.hannibal2.skyhanni.utils.LorenzUtils -import at.hannibal2.skyhanni.utils.RegexUtils.matchFirst import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher import at.hannibal2.skyhanni.utils.RenderUtils.renderStrings import at.hannibal2.skyhanni.utils.TimeUtils import at.hannibal2.skyhanni.utils.TimeUtils.format import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern +import net.minecraft.client.Minecraft import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.time.Duration import kotlin.time.Duration.Companion.minutes @@ -26,11 +28,6 @@ object RiftTimer { private val config get() = RiftAPI.config.timer private val repoGroup = RepoPattern.group("rift.everywhere") - private val timePattern by repoGroup.pattern( - "timer", - "§(?[a7])(?
diff --git a/root.gradle.kts b/root.gradle.kts index 9eb7a0854868..9346a78f9f92 100644 --- a/root.gradle.kts +++ b/root.gradle.kts @@ -14,7 +14,7 @@ plugins { allprojects { group = "at.hannibal2.skyhanni" - version = "0.27.Beta.13" + version = "0.27.Beta.14" repositories { mavenCentral() mavenLocal() From b45002ecafb9fd212d3c956dcd7b2249d6607a8b Mon Sep 17 00:00:00 2001 From: David Cole <40234707+DavidArthurCole@users.noreply.github.com> Date: Wed, 2 Oct 2024 13:10:49 -0400 Subject: [PATCH 055/155] Improvement: Slight Touch up for Hoppity Event Summary (#2638) --- .../features/event/hoppity/HoppityEventSummary.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEventSummary.kt b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEventSummary.kt index 0d4e09b9c518..b2f806c8000a 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEventSummary.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEventSummary.kt @@ -231,12 +231,18 @@ object HoppityEventSummary { config.eventSummary.statDisplayList.forEach { summaryOperationList[it]?.invoke(statsBuilder, stats, eventYear) } + + // If no stats are found, display a message if (statsBuilder.toString().replace("\n", "").isEmpty()) { - statsBuilder.appendHeadedLine("§c§lNothing to show!\n§c§oGo find some eggs!") + statsBuilder.appendHeadedLine("§c§lNothing to show!") + statsBuilder.appendHeadedLine("§c§oGo find some eggs!") } + // Remove any consecutive empty lines in the stats + val statsBuilderString = statsBuilder.toString().replace(Regex("\n{4,}"), "\n".repeat(3)) + // Append stats - summaryBuilder.append(statsBuilder) + summaryBuilder.append(statsBuilderString) // Footer summaryBuilder.append("§d§l${"▬".repeat(64)}") From fdd5bb7acd10c2ab51b76a3ec47a9ac8405021e2 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Wed, 2 Oct 2024 20:00:31 +0200 Subject: [PATCH 056/155] code cleanup --- .../skyhanni/features/inventory/bazaar/BazaarApi.kt | 9 +++++---- .../inventory/bazaar/BazaarCancelledBuyOrderClipboard.kt | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/bazaar/BazaarApi.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/bazaar/BazaarApi.kt index afd5900f7c34..25ddb8dace8b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/bazaar/BazaarApi.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/bazaar/BazaarApi.kt @@ -66,13 +66,13 @@ object BazaarApi { searchForBazaarItem(internalName.itemNameWithoutColor, amount) } - fun searchForBazaarItem(displayName: String, amount: Int = -1) { + fun searchForBazaarItem(displayName: String, amount: Int? = null) { if (!LorenzUtils.inSkyBlock) return if (NEUItems.neuHasFocus()) return if (LorenzUtils.noTradeMode) return if (DungeonAPI.inDungeon() || LorenzUtils.inKuudraFight) return HypixelCommands.bazaar(displayName.removeColor()) - if (amount != -1) OSUtils.copyToClipboard(amount.toString()) + amount?.let { OSUtils.copyToClipboard(it.toString()) } currentSearchedItem = displayName.removeColor() } @@ -96,12 +96,12 @@ object BazaarApi { orderOptionProduct = internalName } else if (itemName.contains("BUY")) { // pickup items from bazaar order - OwnInventoryData.ignoreItem(1.seconds, { it == internalName }) + OwnInventoryData.ignoreItem(1.seconds) { it == internalName } } } if (InventoryUtils.openInventoryName() == "Order options" && itemName == "§cCancel Order") { // pickup items from own bazaar order - OwnInventoryData.ignoreItem(1.seconds, { it == orderOptionProduct }) + OwnInventoryData.ignoreItem(1.seconds) { it == orderOptionProduct } } } @@ -123,6 +123,7 @@ object BazaarApi { } } + // TODO cache @SubscribeEvent fun onBackgroundDrawn(event: GuiContainerEvent.BackgroundDrawnEvent) { if (!LorenzUtils.inSkyBlock) return diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/bazaar/BazaarCancelledBuyOrderClipboard.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/bazaar/BazaarCancelledBuyOrderClipboard.kt index a177d3fe6287..dfd7e38f9b85 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/bazaar/BazaarCancelledBuyOrderClipboard.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/bazaar/BazaarCancelledBuyOrderClipboard.kt @@ -103,7 +103,7 @@ object BazaarCancelledBuyOrderClipboard { event.blockedReason = "bazaar cancelled buy order clipboard" val lastClicked = lastClickedItem ?: error("last clicked bz item is null") - val message = "Bazaar buy order cancelled. Click to reorder. " + + val message = "Bazaar buy order cancelled. Click to re-order. " + "(§8${latestAmount.addSeparators()}x §r${lastClicked.itemName}§e)" ChatUtils.clickableChat( message, From b449c2bbfd8c7661693bde36c25ab3ae379c2304 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Wed, 2 Oct 2024 23:40:55 +0200 Subject: [PATCH 057/155] Fix: Highlight in Bazaar (#2640) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../hannibal2/skyhanni/features/inventory/bazaar/BazaarApi.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/bazaar/BazaarApi.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/bazaar/BazaarApi.kt index 25ddb8dace8b..8e8bbb595bb7 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/bazaar/BazaarApi.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/bazaar/BazaarApi.kt @@ -15,7 +15,7 @@ import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.test.command.ErrorManager import at.hannibal2.skyhanni.utils.HypixelCommands import at.hannibal2.skyhanni.utils.InventoryUtils -import at.hannibal2.skyhanni.utils.InventoryUtils.getAllItems +import at.hannibal2.skyhanni.utils.InventoryUtils.getUpperItems import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import at.hannibal2.skyhanni.utils.ItemUtils.getInternalNameOrNull import at.hannibal2.skyhanni.utils.ItemUtils.getLore @@ -135,7 +135,7 @@ object BazaarApi { val guiChest = event.gui val chest = guiChest.inventorySlots as ContainerChest - for ((slot, stack) in chest.getAllItems()) { + for ((slot, stack) in chest.getUpperItems()) { if (chest.inventorySlots.indexOf(slot) !in 9..44) { continue } From 8798f722c32736bcbe686728fafdde87f561e1a8 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Wed, 2 Oct 2024 23:49:44 +0200 Subject: [PATCH 058/155] Fix: Flare expire warning (#2643) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../java/at/hannibal2/skyhanni/features/combat/FlareDisplay.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/FlareDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/FlareDisplay.kt index 5a67e1d3405f..c5804ea37c40 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/FlareDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/FlareDisplay.kt @@ -101,7 +101,7 @@ object FlareDisplay { } } } - if (remainingTime !in 5.seconds..0.seconds) continue + if (remainingTime !in 0.seconds..5.seconds) continue val message = "$name §eexpires in: §b${remainingTime.inWholeSeconds}s" when (config.alertType) { FlareConfig.AlertType.CHAT -> { From d3930a1f04371a76804ed2512da93b87e3c197db Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Thu, 3 Oct 2024 00:19:57 +0200 Subject: [PATCH 059/155] Fix: Ender node tracker (#2644) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../endernodetracker/EnderNodeTracker.kt | 82 ++++++++++++------- 1 file changed, 52 insertions(+), 30 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt index 51deea2b865d..0363543bffd0 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/endernodetracker/EnderNodeTracker.kt @@ -26,7 +26,9 @@ import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland import at.hannibal2.skyhanni.utils.NEUItems.getPriceOrNull import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.NumberUtil.shortFormat +import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher import at.hannibal2.skyhanni.utils.renderables.Searchable +import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern import at.hannibal2.skyhanni.utils.tracker.SkyHanniTracker import at.hannibal2.skyhanni.utils.tracker.TrackerData import com.google.gson.annotations.Expose @@ -40,12 +42,30 @@ object EnderNodeTracker { private var miteGelInInventory = 0 - private val enderNodeRegex = Regex("""ENDER NODE!.+You found (\d+x )?§r(.+)§r§f!""") + private val patternGroup = RepoPattern.group("combat.endernodetracker.chat") + + /** + * REGEX-TEST: §5§lENDER NODE! §r§fYou found §r§8§r§aEnchanted Obsidian§r§f! + */ + private val patternOne by patternGroup.pattern( + "one", + "§5§lENDER NODE! §r§fYou found §r(?:§8§r)?(?.*)§r§f!", + ) + + /** + * REGEX-TEST: §5§lENDER NODE! §r§fYou found §r§85x §r§aEnchanted Ender Pearl§r§f! + */ + private val patternMulti by patternGroup.pattern( + "multi", + "§5§lENDER NODE! §r§fYou found §r§8(?\\d+)x §r(?.*)§r§f!", + ) + + // TODO add abstract logic with ohter pet drop chat messages private val endermanRegex = Regex("""(RARE|PET) DROP! §r(.+) §r§b\(""") private val tracker = SkyHanniTracker("Ender Node Tracker", { Data() }, { it.enderNodeTracker }) { formatDisplay( - drawDisplay(it) + drawDisplay(it), ) } @@ -77,14 +97,17 @@ object EnderNodeTracker { var item: String? = null var amount = 1 - // check whether the loot is from an ender node or an enderman - enderNodeRegex.find(message)?.let { - tracker.modify { storage -> - storage.totalNodesMined++ - } - amount = it.groups[1]?.value?.substringBefore("x")?.toIntOrNull() ?: 1 - item = it.groups[2]?.value - } ?: endermanRegex.find(message)?.let { + patternMulti.matchMatcher(message) { + item = group("name") + amount = group("amount").toInt() + addOneNodeMined() + } ?: patternOne.matchMatcher(message) { + item = group("name") + amount = 1 + addOneNodeMined() + } + + endermanRegex.find(message)?.let { amount = 1 item = it.groups[2]?.value } @@ -106,12 +129,18 @@ object EnderNodeTracker { } } + private fun addOneNodeMined() { + tracker.modify { storage -> + storage.totalNodesMined++ + } + } + @SubscribeEvent fun onIslandChange(event: IslandChangeEvent) { if (!isEnabled()) return - miteGelInInventory = Minecraft.getMinecraft().thePlayer.inventory.mainInventory - .filter { it?.getInternalNameOrNull() == EnderNode.MITE_GEL.internalName } - .sumOf { it.stackSize } + miteGelInInventory = Minecraft.getMinecraft().thePlayer.inventory.mainInventory.filter { + it?.getInternalNameOrNull() == EnderNode.MITE_GEL.internalName + }.sumOf { it.stackSize } } @SubscribeEvent @@ -119,9 +148,7 @@ object EnderNodeTracker { if (!isEnabled()) return if (!ProfileStorageData.loaded) return - val change = event.sackChanges - .firstOrNull { it.internalName == EnderNode.MITE_GEL.internalName && it.delta > 0 } - ?: return + val change = event.sackChanges.firstOrNull { it.internalName == EnderNode.MITE_GEL.internalName && it.delta > 0 } ?: return tracker.modify { storage -> storage.lootCount.addOrPut(EnderNode.MITE_GEL, change.delta) @@ -133,9 +160,9 @@ object EnderNodeTracker { if (!isEnabled()) return if (!ProfileStorageData.loaded) return - val newMiteGelInInventory = Minecraft.getMinecraft().thePlayer.inventory.mainInventory - .filter { it?.getInternalNameOrNull() == EnderNode.MITE_GEL.internalName } - .sumOf { it.stackSize } + val newMiteGelInInventory = Minecraft.getMinecraft().thePlayer.inventory.mainInventory.filter { + it?.getInternalNameOrNull() == EnderNode.MITE_GEL.internalName + }.sumOf { it.stackSize } val change = newMiteGelInInventory - miteGelInInventory if (change > 0) { tracker.modify { storage -> @@ -176,18 +203,16 @@ object EnderNodeTracker { val price = if (isEnderArmor(item)) { 10_000.0 } else { - (if (!LorenzUtils.noTradeMode) item.internalName.getPriceOrNull() else 0.0) - ?.coerceAtLeast(item.internalName.getNpcPriceOrNull() ?: 0.0) - ?.coerceAtLeast(georgePrice(item) ?: 0.0) - ?: 0.0 + (if (!LorenzUtils.noTradeMode) item.internalName.getPriceOrNull() else 0.0)?.coerceAtLeast( + item.internalName.getNpcPriceOrNull() ?: 0.0, + )?.coerceAtLeast(georgePrice(item) ?: 0.0) ?: 0.0 } newProfit[item] = price * amount } return newProfit } - private fun isEnabled() = IslandType.THE_END.isInIsland() && config.enabled && - (!config.onlyPickaxe || hasItemInHand()) + private fun isEnabled() = IslandType.THE_END.isInIsland() && config.enabled && (!config.onlyPickaxe || hasItemInHand()) private fun hasItemInHand() = ItemCategory.miningTools.containsItem(InventoryUtils.getItemInHand()) @@ -230,7 +255,7 @@ object EnderNodeTracker { val totalEnderArmor = calculateEnderArmor(data) addSearchString( - "§b${totalEnderArmor.addSeparators()} §5Ender Armor " + "§7(§6${(totalEnderArmor * 10_000).shortFormat()}§7)" + "§b${totalEnderArmor.addSeparators()} §5Ender Armor " + "§7(§6${(totalEnderArmor * 10_000).shortFormat()}§7)", ) for (item in EnderNode.entries.subList(11, 16)) { val count = (data.lootCount[item] ?: 0).addSeparators() @@ -243,10 +268,7 @@ object EnderNodeTracker { addSearchString("§f$c§7-§a$u§7-§9$r§7-§5$e§7-§6$l §fEnderman Pet §7(§6$profit§7)") } - private fun calculateEnderArmor(storage: Data) = - storage.lootCount.filter { isEnderArmor(it.key) } - .map { it.value } - .sum() + private fun calculateEnderArmor(storage: Data) = storage.lootCount.filter { isEnderArmor(it.key) }.map { it.value }.sum() private fun formatDisplay(map: List): List { if (!ProfileStorageData.loaded) return emptyList() From c33c011a3314ee533b998da78851e7777338c727 Mon Sep 17 00:00:00 2001 From: HiZe Date: Thu, 3 Oct 2024 00:27:23 +0200 Subject: [PATCH 060/155] Fix: Powder Tracker not tracking items (#2645) --- .../skyhanni/features/mining/powdertracker/PowderTracker.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt index 2749404bef59..c3d307a16f69 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt @@ -198,7 +198,7 @@ object PowderTracker { } for (reward in PowderChestReward.entries) { - if (reward == PowderChestReward.MITHRIL_POWDER || reward == PowderChestReward.GEMSTONE_POWDER) return + if (reward == PowderChestReward.MITHRIL_POWDER || reward == PowderChestReward.GEMSTONE_POWDER) continue reward.chatPattern.matchMatcher(msg) { tracker.modify { val count = it.rewards[reward] ?: 0 From e468384b34a5e1af56921149d1a05976e4eadd6a Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Thu, 3 Oct 2024 00:28:26 +0200 Subject: [PATCH 061/155] Fix: Preconditions to debug commands (#2641) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Co-authored-by: CalMWolfs --- .../skyhanni/test/command/TrackParticlesCommand.kt | 7 +++++++ .../hannibal2/skyhanni/test/command/TrackSoundsCommand.kt | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/src/main/java/at/hannibal2/skyhanni/test/command/TrackParticlesCommand.kt b/src/main/java/at/hannibal2/skyhanni/test/command/TrackParticlesCommand.kt index 69c16daeb414..a48294bd8e64 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/command/TrackParticlesCommand.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/command/TrackParticlesCommand.kt @@ -7,6 +7,7 @@ import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.events.ReceiveParticleEvent import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.utils.ChatUtils +import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzVec import at.hannibal2.skyhanni.utils.NumberUtil.roundTo import at.hannibal2.skyhanni.utils.OSUtils @@ -35,7 +36,13 @@ object TrackParticlesCommand { private var display: List = emptyList() private var worldParticles: Map> = emptyMap() + // TODO write abstract code for this and TrackSoundsCommand fun command(args: Array) { + if (!LorenzUtils.inSkyBlock) { + ChatUtils.userError("This command only works in SkyBlock!") + return + } + if (args.firstOrNull() == "end") { if (!isRecording) { ChatUtils.userError("Nothing to end") diff --git a/src/main/java/at/hannibal2/skyhanni/test/command/TrackSoundsCommand.kt b/src/main/java/at/hannibal2/skyhanni/test/command/TrackSoundsCommand.kt index 1fadab62da24..18cfcf786bf8 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/command/TrackSoundsCommand.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/command/TrackSoundsCommand.kt @@ -7,6 +7,7 @@ import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.events.PlaySoundEvent import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.utils.ChatUtils +import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzVec import at.hannibal2.skyhanni.utils.NumberUtil.roundTo import at.hannibal2.skyhanni.utils.OSUtils @@ -36,7 +37,13 @@ object TrackSoundsCommand { private var display: List = emptyList() private var worldSounds: Map> = emptyMap() + // TODO write abstract code for this and TrackParticlesCommand fun command(args: Array) { + if (!LorenzUtils.inSkyBlock) { + ChatUtils.userError("This command only works in SkyBlock!") + return + } + if (args.firstOrNull() == "end") { if (!isRecording) { ChatUtils.userError("Nothing to end") From c212cc7a3ee573b2eda614c29ced575936f4d4bb Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Thu, 3 Oct 2024 08:48:11 +0200 Subject: [PATCH 062/155] Fix: Dummies and Damage Indicator (#2646) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../combat/damageindicator/MobFinder.kt | 138 +++++++++--------- 1 file changed, 65 insertions(+), 73 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/MobFinder.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/MobFinder.kt index 399040179934..44c7608c2b6b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/MobFinder.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/MobFinder.kt @@ -71,8 +71,7 @@ class MobFinder { // F5 private var floor5lividEntity: EntityOtherPlayerMP? = null private var floor5lividEntitySpawnTime = 0L - private val correctLividPattern = - "§c\\[BOSS] (.*) Livid§r§f: Impossible! How did you figure out which one I was\\?!".toPattern() + private val correctLividPattern = "§c\\[BOSS] (.*) Livid§r§f: Impossible! How did you figure out which one I was\\?!".toPattern() // F6 private var floor6Giants = false @@ -86,29 +85,32 @@ class MobFinder { RiftAPI.inRift() -> tryAddRift(entity) GardenAPI.inGarden() -> tryAddGarden(entity) else -> { - when (entity) { - /* - * Note that the order does matter here. - * For example, if you put EntityZombie before EntityPigZombie, - * EntityPigZombie will never be reached because EntityPigZombie extends EntityZombie. - * Please take this into consideration if you are to modify this. - */ - is EntityOtherPlayerMP -> tryAddEntityOtherPlayerMP(entity) - is EntityIronGolem -> tryAddEntityIronGolem(entity) - is EntityPigZombie -> tryAddEntityPigZombie(entity) - is EntityMagmaCube -> tryAddEntityMagmaCube(entity) - is EntityEnderman -> tryAddEntityEnderman(entity) - is EntitySkeleton -> tryAddEntitySkeleton(entity) - is EntityGuardian -> tryAddEntityGuardian(entity) - is EntityZombie -> tryAddEntityZombie(entity) - is EntityWither -> tryAddEntityWither(entity) - is EntityDragon -> tryAddEntityDragon(entity) - is EntitySpider -> tryAddEntitySpider(entity) - is EntityHorse -> tryAddEntityHorse(entity) - is EntityBlaze -> tryAddEntityBlaze(entity) - is EntityWolf -> tryAddEntityWolf(entity) - is EntityLiving -> tryAddEntityLiving(entity) - else -> null + if (entity is EntityLiving && entity.hasNameTagWith(2, "Dummy §a10M§c❤")) { + EntityResult(bossType = BossType.DUMMY) + } else { + when (entity) { + /* + * Note that the order does matter here. + * For example, if you put EntityZombie before EntityPigZombie, + * EntityPigZombie will never be reached because EntityPigZombie extends EntityZombie. + * Please take this into consideration if you are to modify this. + */ + is EntityOtherPlayerMP -> tryAddEntityOtherPlayerMP(entity) + is EntityIronGolem -> tryAddEntityIronGolem(entity) + is EntityPigZombie -> tryAddEntityPigZombie(entity) + is EntityMagmaCube -> tryAddEntityMagmaCube(entity) + is EntityEnderman -> tryAddEntityEnderman(entity) + is EntitySkeleton -> tryAddEntitySkeleton(entity) + is EntityGuardian -> tryAddEntityGuardian(entity) + is EntityZombie -> tryAddEntityZombie(entity) + is EntityWither -> tryAddEntityWither(entity) + is EntityDragon -> tryAddEntityDragon(entity) + is EntitySpider -> tryAddEntitySpider(entity) + is EntityHorse -> tryAddEntityHorse(entity) + is EntityBlaze -> tryAddEntityBlaze(entity) + is EntityWolf -> tryAddEntityWolf(entity) + else -> null + } } } } @@ -124,8 +126,7 @@ class MobFinder { private fun tryAddGardenPest(entity: EntityLivingBase): EntityResult? { if (!GardenAPI.inGarden()) return null - return PestType.entries - .firstOrNull { entity.hasNameTagWith(3, it.displayName) } + return PestType.entries.firstOrNull { entity.hasNameTagWith(3, it.displayName) } ?.let { EntityResult(bossType = it.damageIndicatorBoss) } } @@ -170,7 +171,7 @@ class MobFinder { return EntityResult( floor2secondPhaseSpawnTime, finalDungeonBoss = true, - bossType = BossType.DUNGEON_F2_SCARF + bossType = BossType.DUNGEON_F2_SCARF, ) } } @@ -193,14 +194,14 @@ class MobFinder { return EntityResult( floor3ProfessorSpawnTime, floor3ProfessorSpawnTime + 1_000 > System.currentTimeMillis(), - bossType = BossType.DUNGEON_F3_PROFESSOR_1 + bossType = BossType.DUNGEON_F3_PROFESSOR_1, ) } if (floor3ProfessorGuardianPrepare && entity is EntityOtherPlayerMP && entity.name == "The Professor") { return EntityResult( floor3ProfessorGuardianPrepareSpawnTime, true, - bossType = BossType.DUNGEON_F3_PROFESSOR_2 + bossType = BossType.DUNGEON_F3_PROFESSOR_2, ) } @@ -215,7 +216,7 @@ class MobFinder { return EntityResult( bossType = BossType.DUNGEON_F4_THORN, ignoreBlocks = true, - finalDungeonBoss = true + finalDungeonBoss = true, ) } return null @@ -226,7 +227,7 @@ class MobFinder { return EntityResult( bossType = BossType.DUNGEON_F5, ignoreBlocks = true, - finalDungeonBoss = true + finalDungeonBoss = true, ) } return null @@ -239,7 +240,7 @@ class MobFinder { return EntityResult( floor6GiantsSpawnTime + extraDelay, floor6GiantsSpawnTime + extraDelay + 1_000 > System.currentTimeMillis(), - bossType = bossType + bossType = bossType, ) } @@ -274,8 +275,12 @@ class MobFinder { } private fun tryAddEntityBlaze(entity: EntityLivingBase) = when { - entity.name != "Dinnerbone" && entity.hasNameTagWith(2, "§e﴾ §8[§7Lv200§8] §l§8§lAshfang§r ") && - entity.hasMaxHealth(50_000_000, true) -> { + entity.name != "Dinnerbone" && + entity.hasNameTagWith(2, "§e﴾ §8[§7Lv200§8] §l§8§lAshfang§r ") && + entity.hasMaxHealth( + 50_000_000, + true, + ) -> { EntityResult(bossType = BossType.NETHER_ASHFANG) } @@ -312,8 +317,9 @@ class MobFinder { private fun tryAddEntityOtherPlayerMP(entity: EntityLivingBase) = when { entity.name == "Mage Outlaw" -> EntityResult(bossType = BossType.NETHER_MAGE_OUTLAW) - entity.name == "DukeBarb " && entity.getLorenzVec() - .distanceToPlayer() < 30 -> EntityResult(bossType = BossType.NETHER_BARBARIAN_DUKE) + entity.name == "DukeBarb " && + entity.getLorenzVec() + .distanceToPlayer() < 30 -> EntityResult(bossType = BossType.NETHER_BARBARIAN_DUKE) entity.name == "Minos Inquisitor" -> EntityResult(bossType = BossType.MINOS_INQUISITOR) entity.name == "Minos Champion" -> EntityResult(bossType = BossType.MINOS_CHAMPION) @@ -385,15 +391,8 @@ class MobFinder { else -> null } - private fun tryAddEntityLiving(entity: EntityLivingBase) = when { - entity.hasNameTagWith(2, "Dummy §a10M§c❤") -> EntityResult(bossType = BossType.DUMMY) - - else -> null - } - private fun tryAddEntityMagmaCube(entity: EntityLivingBase) = when { - entity.hasNameTagWith(15, "§e﴾ §8[§7Lv500§8] §l§4§lMagma Boss§r ") && - entity.hasMaxHealth(200_000_000, true) -> { + entity.hasNameTagWith(15, "§e﴾ §8[§7Lv500§8] §l§4§lMagma Boss§r ") && entity.hasMaxHealth(200_000_000, true) -> { EntityResult(bossType = BossType.NETHER_MAGMA_BOSS, ignoreBlocks = true) } @@ -401,24 +400,22 @@ class MobFinder { } private fun tryAddEntityHorse(entity: EntityLivingBase) = when { - entity.hasNameTagWith(15, "§8[§7Lv100§8] §c§6Headless Horseman§r ") && - entity.hasMaxHealth(3_000_000, true) -> { + entity.hasNameTagWith(15, "§8[§7Lv100§8] §c§6Headless Horseman§r ") && entity.hasMaxHealth(3_000_000, true) -> { EntityResult(bossType = BossType.HUB_HEADLESS_HORSEMAN) } else -> null } - private fun tryAddEntityPigZombie(entity: EntityLivingBase) = - if (entity.hasNameTagWith(2, "§c☠ §6ⓉⓎⓅⒽⓄⒺⓊⓈ ")) { - when { - entity.hasBossHealth(10_000_000) -> EntityResult(bossType = BossType.SLAYER_BLAZE_TYPHOEUS_4) - entity.hasBossHealth(5_000_000) -> EntityResult(bossType = BossType.SLAYER_BLAZE_TYPHOEUS_3) - entity.hasBossHealth(1_750_000) -> EntityResult(bossType = BossType.SLAYER_BLAZE_TYPHOEUS_2) - entity.hasBossHealth(500_000) -> EntityResult(bossType = BossType.SLAYER_BLAZE_TYPHOEUS_1) - else -> null - } - } else null + private fun tryAddEntityPigZombie(entity: EntityLivingBase) = if (entity.hasNameTagWith(2, "§c☠ §6ⓉⓎⓅⒽⓄⒺⓊⓈ ")) { + when { + entity.hasBossHealth(10_000_000) -> EntityResult(bossType = BossType.SLAYER_BLAZE_TYPHOEUS_4) + entity.hasBossHealth(5_000_000) -> EntityResult(bossType = BossType.SLAYER_BLAZE_TYPHOEUS_3) + entity.hasBossHealth(1_750_000) -> EntityResult(bossType = BossType.SLAYER_BLAZE_TYPHOEUS_2) + entity.hasBossHealth(500_000) -> EntityResult(bossType = BossType.SLAYER_BLAZE_TYPHOEUS_1) + else -> null + } + } else null private fun tryAddEntitySpider(entity: EntityLivingBase): EntityResult? { if (entity.hasNameTagWith(1, "§5☠ §4Tarantula Broodfather ")) { @@ -439,17 +436,13 @@ class MobFinder { } private fun checkArachne(entity: EntitySpider): EntityResult? { - if (entity.hasNameTagWith(1, "[§7Lv300§8] §cArachne") || - entity.hasNameTagWith(1, "[§7Lv300§8] §lArachne") - ) { + if (entity.hasNameTagWith(1, "[§7Lv300§8] §cArachne") || entity.hasNameTagWith(1, "[§7Lv300§8] §lArachne")) { val maxHealth = entity.baseMaxHealth // Ignore the minis if (maxHealth == 12 || maxHealth.derpy() == 4000) return null return EntityResult(bossType = BossType.ARACHNE_SMALL) } - if (entity.hasNameTagWith(1, "[§7Lv500§8] §cArachne") || - entity.hasNameTagWith(1, "[§7Lv500§8] §lArachne") - ) { + if (entity.hasNameTagWith(1, "[§7Lv500§8] §cArachne") || entity.hasNameTagWith(1, "[§7Lv500§8] §lArachne")) { val maxHealth = entity.baseMaxHealth if (maxHealth == 12 || maxHealth.derpy() == 20_000) return null return EntityResult(bossType = BossType.ARACHNE_BIG) @@ -458,16 +451,15 @@ class MobFinder { return null } - private fun tryAddEntityWolf(entity: EntityLivingBase) = - if (entity.hasNameTagWith(1, "§c☠ §fSven Packmaster ")) { - when { - entity.hasMaxHealth(2_000, true) -> EntityResult(bossType = BossType.SLAYER_WOLF_1) - entity.hasMaxHealth(40_000, true) -> EntityResult(bossType = BossType.SLAYER_WOLF_2) - entity.hasMaxHealth(750_000, true) -> EntityResult(bossType = BossType.SLAYER_WOLF_3) - entity.hasMaxHealth(2_000_000, true) -> EntityResult(bossType = BossType.SLAYER_WOLF_4) - else -> null - } - } else null + private fun tryAddEntityWolf(entity: EntityLivingBase) = if (entity.hasNameTagWith(1, "§c☠ §fSven Packmaster ")) { + when { + entity.hasMaxHealth(2_000, true) -> EntityResult(bossType = BossType.SLAYER_WOLF_1) + entity.hasMaxHealth(40_000, true) -> EntityResult(bossType = BossType.SLAYER_WOLF_2) + entity.hasMaxHealth(750_000, true) -> EntityResult(bossType = BossType.SLAYER_WOLF_3) + entity.hasMaxHealth(2_000_000, true) -> EntityResult(bossType = BossType.SLAYER_WOLF_4) + else -> null + } + } else null private fun tryAddEntityGuardian(entity: EntityLivingBase) = if (entity.hasMaxHealth(35_000_000)) { EntityResult(bossType = BossType.THUNDER) From 3264d76f1d5a765da57b03a7ffcba506737cb5b0 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Thu, 3 Oct 2024 12:09:17 +0200 Subject: [PATCH 063/155] fixed wrong feature toggle --- .../skyhanni/config/features/commands/CommandsConfig.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/commands/CommandsConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/commands/CommandsConfig.java index 854ed39cc38f..d8626e243b93 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/commands/CommandsConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/commands/CommandsConfig.java @@ -55,8 +55,7 @@ public class CommandsConfig { public boolean transferCooldown = false; @Expose - @ConfigOption(name = "Transfer Cooldown Ended Message", desc = "Sends a message in chat when the transfer cooldown ends.") + @ConfigOption(name = "Transfer Cooldown Message", desc = "Sends a message in chat when the transfer cooldown ends.") @ConfigEditorBoolean - @FeatureToggle public boolean transferCooldownMessage = false; } From 4d4fbd019a58a694c0d36ae08d25a97c9db268d8 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Thu, 3 Oct 2024 14:28:22 +0200 Subject: [PATCH 064/155] Improvement: Superpair Experimentation data always visible (#2647) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Co-authored-by: CalMWolfs --- .idea/dictionaries/default_user.xml | 5 ++++- .../ExperimentationTableConfig.java | 2 +- .../experimentationtable/SuperpairDataDisplay.kt | 14 +++++++++++--- .../fossilexcavator/solver/FossilSolverDisplay.kt | 2 +- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/.idea/dictionaries/default_user.xml b/.idea/dictionaries/default_user.xml index a0017ca5e3e0..4c56b1303ca0 100644 --- a/.idea/dictionaries/default_user.xml +++ b/.idea/dictionaries/default_user.xml @@ -193,6 +193,8 @@ pling pocalypse polarvoid + powerup + powerups preinitialization procs prospection @@ -251,6 +253,7 @@ supercraft supercrafting superlite + superpair superpairs tablist terracottas @@ -278,4 +281,4 @@ yolkar - \ No newline at end of file + diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/experimentationtable/ExperimentationTableConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/experimentationtable/ExperimentationTableConfig.java index dfdad248256e..0313498e6829 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/inventory/experimentationtable/ExperimentationTableConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/inventory/experimentationtable/ExperimentationTableConfig.java @@ -21,7 +21,7 @@ public class ExperimentationTableConfig { public ExperimentsDryStreakConfig dryStreak = new ExperimentsDryStreakConfig(); @Expose - @ConfigOption(name = "Superpair Data", desc = "Shows a display with useful information while doing the Superpair experiment.") + @ConfigOption(name = "Superpair Data", desc = "Displays useful data while doing the Superpair experiment.") @ConfigEditorBoolean @FeatureToggle public boolean superpairDisplay = false; diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/SuperpairDataDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/SuperpairDataDisplay.kt index 627974e6baac..37e12aa51f80 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/SuperpairDataDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/experimentationtable/SuperpairDataDisplay.kt @@ -15,6 +15,7 @@ import at.hannibal2.skyhanni.utils.LorenzUtils.isAnyOf import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher import at.hannibal2.skyhanni.utils.RegexUtils.matches +import at.hannibal2.skyhanni.utils.RenderUtils.renderString import at.hannibal2.skyhanni.utils.RenderUtils.renderStrings import at.hannibal2.skyhanni.utils.StringUtils.removeColor import net.minecraft.item.ItemStack @@ -56,14 +57,22 @@ object SuperpairDataDisplay { @SubscribeEvent fun onChestGuiOverlayRendered(event: GuiRenderEvent.ChestGuiOverlayRenderEvent) { if (!isEnabled()) return + if (InventoryUtils.openInventoryName() == "Experimentation Table") { + // Render here so they can move it around. + config.superpairDisplayPosition.renderString("§6Superpair Experimentation Data", posLabel = "Superpair Experimentation Data") + } + if (ExperimentationTableAPI.getCurrentExperiment() == null) return + if (display.isEmpty()) display = drawDisplay() - config.superpairDisplayPosition.renderStrings(display, posLabel = "Superpair Experiment Information") + config.superpairDisplayPosition.renderStrings(display, posLabel = "Superpair Experimentation Data") } @SubscribeEvent fun onSlotClick(event: SlotClickEvent) { if (!isEnabled()) return + if (ExperimentationTableAPI.getCurrentExperiment() == null) return + val currentExperiment = ExperimentationTableAPI.getCurrentExperiment() ?: return val item = event.item ?: return @@ -286,6 +295,5 @@ object SuperpairDataDisplay { private fun SuperpairItem?.sameAs(other: SuperpairItem) = this?.reward == other.reward && this?.damage == other.damage - private fun isEnabled() = - IslandType.PRIVATE_ISLAND.isInIsland() && config.superpairDisplay && ExperimentationTableAPI.getCurrentExperiment() != null + private fun isEnabled() = IslandType.PRIVATE_ISLAND.isInIsland() && config.superpairDisplay } diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/fossilexcavator/solver/FossilSolverDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/fossilexcavator/solver/FossilSolverDisplay.kt index cb50e3c85459..f9dd9b8db316 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/fossilexcavator/solver/FossilSolverDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/fossilexcavator/solver/FossilSolverDisplay.kt @@ -188,7 +188,7 @@ object FossilSolverDisplay { if (inExcavatorMenu) { // Render here so they can move it around. As if you press key while doing the excavator you lose the scrap - config.position.renderString("§eExcavator solver gui", posLabel = "Fossil Excavator Solver") + config.position.renderString("§eExcavator solver GUI", posLabel = "Fossil Excavator Solver") return } From 7efb11313d70c65b8df6692ed237f137d4d346d1 Mon Sep 17 00:00:00 2001 From: David Cole <40234707+DavidArthurCole@users.noreply.github.com> Date: Thu, 3 Oct 2024 08:34:40 -0400 Subject: [PATCH 065/155] Backend: Detekt Fixes Part 5 (#2617) --- build.gradle.kts | 55 ++++++++++--------- .../hannibal2/skyhanni/api/GetFromSackAPI.kt | 2 +- .../at/hannibal2/skyhanni/data/HotmData.kt | 3 +- .../at/hannibal2/skyhanni/data/SackAPI.kt | 2 +- .../skyhanni/data/mob/MobDetection.kt | 2 +- .../features/bingo/card/goals/GoalType.kt | 1 - .../features/chat/ColorFormattingHelper.kt | 2 +- .../features/chat/PowderMiningChatFilter.kt | 3 +- .../combat/damageindicator/BossType.kt | 4 +- .../combat/ghostcounter/GhostCounter.kt | 3 +- .../features/combat/mobs/MobHighlight.kt | 30 +++++----- .../features/dungeon/DungeonHideItems.kt | 8 +-- .../dungeon/HighlightDungeonDeathmite.kt | 6 +- .../event/hoppity/HoppityCollectionStats.kt | 2 +- .../event/hoppity/HoppityEggsManager.kt | 1 - .../frozentreasure/FrozenTreasureTracker.kt | 5 +- .../waypoints/easter/EasterEggWaypoints.kt | 2 +- .../fishing/tracker/SeaCreatureTracker.kt | 5 +- .../features/garden/AnitaMedalProfit.kt | 1 - .../garden/farming/ArmorDropTracker.kt | 5 +- .../garden/farming/DicerRngDropTracker.kt | 5 +- .../garden/farming/lane/FarmingDirection.kt | 1 - .../farming/lane/FarmingLaneFeatures.kt | 1 - .../visitor/GardenVisitorCompactChat.kt | 2 +- .../visitor/GardenVisitorDropStatistics.kt | 2 +- .../features/garden/visitor/VisitorAPI.kt | 2 +- .../gui/customscoreboard/ScoreboardEvent.kt | 6 +- .../skyhanni/features/inventory/ChestValue.kt | 2 - .../features/inventory/HarpFeatures.kt | 2 +- .../inventory/HideNotClickableItems.kt | 2 +- .../features/inventory/QuickCraftFeatures.kt | 1 - .../features/inventory/SackDisplay.kt | 7 +-- .../ChocolateFactoryStrayTracker.kt | 5 +- .../itemabilities/CrownOfAvariceCounter.kt | 2 +- .../mining/HighlightMiningCommissionMobs.kt | 7 +-- .../mining/powdertracker/PowderTracker.kt | 3 +- .../features/misc/NonGodPotEffectDisplay.kt | 1 - .../features/misc/discordrpc/DiscordStatus.kt | 1 - .../items/EstimatedItemValueCalculator.kt | 9 ++- .../rift/area/dreadfarm/VoltHighlighter.kt | 2 +- .../area/mirrorverse/RiftUpsideDownParkour.kt | 2 +- .../rift/area/westvillage/VerminTracker.kt | 5 +- .../features/slayer/SlayerMiniBossFeatures.kt | 7 ++- .../skyhanni/features/slayer/SlayerType.kt | 2 +- .../features/slayer/blaze/HellionShield.kt | 1 - .../hannibal2/skyhanni/utils/EntityUtils.kt | 1 + .../skyhanni/utils/PrimitiveRecipe.kt | 1 - .../utils/json/SkyHanniTypeAdapters.kt | 4 +- .../skyhanni/utils/renderables/Renderable.kt | 1 + .../skyhanni/utils/tracker/SkyHanniTracker.kt | 1 - 50 files changed, 115 insertions(+), 115 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 3e3b002ff9aa..cb384b26946b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -6,6 +6,8 @@ import at.skyhanni.sharedvariables.versionString import net.fabricmc.loom.task.RunGameTask import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import io.gitlab.arturbosch.detekt.Detekt +import io.gitlab.arturbosch.detekt.DetektCreateBaselineTask plugins { idea @@ -348,28 +350,31 @@ publishing.publications { } } -// Detekt: TODO: Uncomment this when we're ready to enforce -// detekt { -// buildUponDefaultConfig = true // preconfigure defaults -// config.setFrom(rootProject.layout.projectDirectory.file("detekt/detekt.yml")) // point to your custom config defining rules to run, overwriting default behavior -// baseline = file(layout.projectDirectory.file("detekt/baseline.xml")) // a way of suppressing issues before introducing detekt -// source.setFrom(project.sourceSets.named("main").map { it.allSource }) -// } -// -// tasks.withType().configureEach { -// reports { -// html.required.set(true) // observe findings in your browser with structure and code snippets -// xml.required.set(true) // checkstyle like format mainly for integrations like Jenkins -// sarif.required.set(true) // standardized SARIF format (https://sarifweb.azurewebsites.net/) to support integrations with GitHub Code Scanning -// md.required.set(true) // simple Markdown format -// } -// } -// -// tasks.withType().configureEach { -// jvmTarget = target.minecraftVersion.formattedJavaLanguageVersion -// outputs.cacheIf { false } // Custom rules won't work if cached -// } -// tasks.withType().configureEach { -// jvmTarget = target.minecraftVersion.formattedJavaLanguageVersion -// outputs.cacheIf { false } // Custom rules won't work if cached -// } +detekt { + buildUponDefaultConfig = true // preconfigure defaults + config.setFrom(rootProject.layout.projectDirectory.file("detekt/detekt.yml")) // point to your custom config defining rules to run, overwriting default behavior + baseline = file(layout.projectDirectory.file("detekt/baseline.xml")) // a way of suppressing issues before introducing detekt + source.setFrom(project.sourceSets.named("main").map { it.allSource }) +} + +tasks.withType().configureEach { + onlyIf { + false // TODO: Remove onlyIf when we're ready to enforce + } + + reports { + html.required.set(true) // observe findings in your browser with structure and code snippets + xml.required.set(true) // checkstyle like format mainly for integrations like Jenkins + sarif.required.set(true) // standardized SARIF format (https://sarifweb.azurewebsites.net/) to support integrations with GitHub Code Scanning + md.required.set(true) // simple Markdown format + } +} + +tasks.withType().configureEach { + jvmTarget = target.minecraftVersion.formattedJavaLanguageVersion + outputs.cacheIf { false } // Custom rules won't work if cached +} +tasks.withType().configureEach { + jvmTarget = target.minecraftVersion.formattedJavaLanguageVersion + outputs.cacheIf { false } // Custom rules won't work if cached +} diff --git a/src/main/java/at/hannibal2/skyhanni/api/GetFromSackAPI.kt b/src/main/java/at/hannibal2/skyhanni/api/GetFromSackAPI.kt index 9da50e13eaba..4d7662b4f452 100644 --- a/src/main/java/at/hannibal2/skyhanni/api/GetFromSackAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/api/GetFromSackAPI.kt @@ -182,7 +182,7 @@ object GetFromSackAPI { if (!amountString.isDouble()) return CommandResult.WRONG_AMOUNT to null val itemString = arguments.dropLast(1).joinToString(" ").uppercase().replace(':', '-') - val replacedString = itemString.replace("_"," ") + val replacedString = itemString.replace("_", " ") val item = when { SackAPI.sackListInternalNames.contains(itemString) -> itemString.asInternalName() diff --git a/src/main/java/at/hannibal2/skyhanni/data/HotmData.kt b/src/main/java/at/hannibal2/skyhanni/data/HotmData.kt index 1d8182328b6e..3137458c3bec 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/HotmData.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/HotmData.kt @@ -421,7 +421,8 @@ enum class HotmData( val storage get() = ProfileStorageData.profileSpecific?.mining?.hotmTree - val abilities = listOf(PICKOBULUS, MINING_SPEED_BOOST, MANIAC_MINER, GEMSTONE_INFUSION, ANOMALOUS_DESIRE, SHEER_FORCE) + val abilities = + listOf(PICKOBULUS, MINING_SPEED_BOOST, MANIAC_MINER, GEMSTONE_INFUSION, ANOMALOUS_DESIRE, SHEER_FORCE) private val inventoryPattern by patternGroup.pattern( "inventory", diff --git a/src/main/java/at/hannibal2/skyhanni/data/SackAPI.kt b/src/main/java/at/hannibal2/skyhanni/data/SackAPI.kt index e392699cdbfe..7581b3b1ec94 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/SackAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/SackAPI.kt @@ -412,5 +412,5 @@ enum class SackStatus { MISSING, CORRECT, ALRIGHT, - OUTDATED; + OUTDATED, } diff --git a/src/main/java/at/hannibal2/skyhanni/data/mob/MobDetection.kt b/src/main/java/at/hannibal2/skyhanni/data/mob/MobDetection.kt index a763961f8b54..34f776308fda 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/mob/MobDetection.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/mob/MobDetection.kt @@ -126,7 +126,7 @@ object MobDetection { MobData.currentEntityLiving.clear() // Naturally removing the mobs using the despawn } - (MobData.currentEntityLiving - MobData.previousEntityLiving).forEach { addRetry(it) } // Spawn + (MobData.currentEntityLiving - MobData.previousEntityLiving).forEach { addRetry(it) } // Spawn (MobData.previousEntityLiving - MobData.currentEntityLiving).forEach { entityDeSpawn(it) } // Despawn MobData.notSeenMobs.removeIf(::canBeSeen) diff --git a/src/main/java/at/hannibal2/skyhanni/features/bingo/card/goals/GoalType.kt b/src/main/java/at/hannibal2/skyhanni/features/bingo/card/goals/GoalType.kt index b2e4f6d8dfbc..6dd666d4e84d 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/bingo/card/goals/GoalType.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/bingo/card/goals/GoalType.kt @@ -3,5 +3,4 @@ package at.hannibal2.skyhanni.features.bingo.card.goals enum class GoalType { COMMUNITY, PERSONAL, - ; } diff --git a/src/main/java/at/hannibal2/skyhanni/features/chat/ColorFormattingHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/chat/ColorFormattingHelper.kt index 9c7c0380614b..2987d95a680e 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/chat/ColorFormattingHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/chat/ColorFormattingHelper.kt @@ -21,7 +21,7 @@ object ColorFormattingHelper { "§f&k = Obfuscated (like this: §khellspawn§r)\n" + "§f&l = §lBold §r&m = §mStrikethrough \n" + "§f&o = §oItalic §r&n = §nUnderline\n" + - "§f&r = Reset\n"+ + "§f&r = Reset\n" + "§c===================================================" ) ) diff --git a/src/main/java/at/hannibal2/skyhanni/features/chat/PowderMiningChatFilter.kt b/src/main/java/at/hannibal2/skyhanni/features/chat/PowderMiningChatFilter.kt index 1e0397959270..624a2d0c2b95 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/chat/PowderMiningChatFilter.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/chat/PowderMiningChatFilter.kt @@ -310,7 +310,8 @@ object PowderMiningChatFilter { return null } - private var rewardPatterns: Map, String> = emptyMap() + private var rewardPatterns: Map, String> = + emptyMap() @SubscribeEvent(priority = EventPriority.HIGHEST) fun onRepoReload(event: RepositoryReloadEvent) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/BossType.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/BossType.kt index 3d46d3edc5d4..0d542df383b8 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/BossType.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/damageindicator/BossType.kt @@ -21,7 +21,7 @@ enum class BossType( NETHER_VANQUISHER("§5Vanquisher", Type.VANQUISHER), END_ENDSTONE_PROTECTOR("§cEndstone Protector", Type.ENDERSTONE_PROTECTOR), - END_ENDER_DRAGON("Ender Dragon", Type.ENDER_DRAGON),// TODO fix totally + END_ENDER_DRAGON("Ender Dragon", Type.ENDER_DRAGON), // TODO fix totally SLAYER_ZOMBIE_1("§aRevenant Horror 1", Type.REVENANT_HORROR, "§aRev 1", showDeathTime = true), SLAYER_ZOMBIE_2("§eRevenant Horror 2", Type.REVENANT_HORROR, "§eRev 2", showDeathTime = true), @@ -107,7 +107,7 @@ enum class BossType( LEECH_SUPREME("§cLeech Supreme", Type.THE_RIFT_BOSSES), BACTE("§aBacte", Type.THE_RIFT_BOSSES), - WINTER_REINDRAKE("Reindrake", Type.REINDRAKE),// TODO fix totally + WINTER_REINDRAKE("Reindrake", Type.REINDRAKE), // TODO fix totally GARDEN_PEST_BEETLE("§cBeetle", Type.GARDEN_PESTS), GARDEN_PEST_CRICKET("§cCricket", Type.GARDEN_PESTS), diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/ghostcounter/GhostCounter.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/ghostcounter/GhostCounter.kt index b337d58b1487..40e329f20cdf 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/ghostcounter/GhostCounter.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/ghostcounter/GhostCounter.kt @@ -71,7 +71,8 @@ object GhostCounter { val config get() = SkyHanniMod.feature.combat.ghostCounter val storage get() = ProfileStorageData.profileSpecific?.ghostCounter private var display = emptyList>() - var ghostCounterV3File = File(FilenameUtils.separatorsToSystem("./config/ChatTriggers/modules/GhostCounterV3/.persistantData.json")) + var ghostCounterV3File = + File(FilenameUtils.separatorsToSystem("./config/ChatTriggers/modules/GhostCounterV3/.persistantData.json")) private val patternGroup = RepoPattern.group("combat.ghostcounter") private val skillXPPattern by patternGroup.pattern( diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/mobs/MobHighlight.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/mobs/MobHighlight.kt index 7c33afcdb653..7d51994c029f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/mobs/MobHighlight.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/mobs/MobHighlight.kt @@ -42,8 +42,7 @@ object MobHighlight { RenderLivingEntityHelper.setEntityColorWithNoHurtTime( entity, LorenzColor.DARK_PURPLE.toColor().withAlpha(127) - ) - { config.corruptedMobHighlight } + ) { config.corruptedMobHighlight } } } @@ -57,16 +56,14 @@ object MobHighlight { RenderLivingEntityHelper.setEntityColorWithNoHurtTime( entity, LorenzColor.DARK_BLUE.toColor().withAlpha(127) - ) - { config.arachneKeeperHighlight } + ) { config.arachneKeeperHighlight } } if (config.corleoneHighlighter && maxHealth == 1_000_000 && entity is EntityOtherPlayerMP && entity.name == "Team Treasurite") { RenderLivingEntityHelper.setEntityColorWithNoHurtTime( entity, LorenzColor.DARK_PURPLE.toColor().withAlpha(127) - ) - { config.corleoneHighlighter } + ) { config.corleoneHighlighter } } if (entity is EntityEnderman) { @@ -78,8 +75,7 @@ object MobHighlight { RenderLivingEntityHelper.setEntityColorWithNoHurtTime( entity, LorenzColor.DARK_AQUA.toColor().withAlpha(127) - ) - { config.zealotBruiserHighlighter } + ) { config.zealotBruiserHighlighter } } } @@ -89,8 +85,7 @@ object MobHighlight { RenderLivingEntityHelper.setEntityColorWithNoHurtTime( entity, LorenzColor.GREEN.toColor().withAlpha(127) - ) - { config.chestZealotHighlighter } + ) { config.chestZealotHighlighter } } } @@ -99,8 +94,7 @@ object MobHighlight { RenderLivingEntityHelper.setEntityColorWithNoHurtTime( entity, LorenzColor.DARK_RED.toColor().withAlpha(50) - ) - { config.specialZealotHighlighter } + ) { config.specialZealotHighlighter } } } @@ -153,12 +147,16 @@ object MobHighlight { } private fun markArachneMinis(entity: EntityLivingBase) { - RenderLivingEntityHelper.setEntityColorWithNoHurtTime(entity, LorenzColor.GOLD.toColor().withAlpha(50)) - { config.arachneBossHighlighter } + RenderLivingEntityHelper.setEntityColorWithNoHurtTime( + entity, + LorenzColor.GOLD.toColor().withAlpha(50) + ) { config.arachneBossHighlighter } } private fun markArachne(entity: EntityLivingBase) { - RenderLivingEntityHelper.setEntityColorWithNoHurtTime(entity, LorenzColor.RED.toColor().withAlpha(50)) - { config.arachneBossHighlighter } + RenderLivingEntityHelper.setEntityColorWithNoHurtTime( + entity, + LorenzColor.RED.toColor().withAlpha(50) + ) { config.arachneBossHighlighter } } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonHideItems.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonHideItems.kt index f0ce80b1b18e..a5237aeb666a 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonHideItems.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/DungeonHideItems.kt @@ -194,10 +194,10 @@ object DungeonHideItems { if (isSkeletonSkull(entity)) { movingSkeletonSkulls[entity] = System.currentTimeMillis() - RenderLivingEntityHelper.setEntityColorWithNoHurtTime(entity, LorenzColor.GOLD.toColor().withAlpha(60)) - { - shouldColorMovingSkull(entity) - } + RenderLivingEntityHelper.setEntityColorWithNoHurtTime( + entity, + LorenzColor.GOLD.toColor().withAlpha(60) + ) { shouldColorMovingSkull(entity) } } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/dungeon/HighlightDungeonDeathmite.kt b/src/main/java/at/hannibal2/skyhanni/features/dungeon/HighlightDungeonDeathmite.kt index 26b129dd9574..15848a9bc859 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/dungeon/HighlightDungeonDeathmite.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/dungeon/HighlightDungeonDeathmite.kt @@ -21,8 +21,10 @@ object HighlightDungeonDeathmite { val maxHealth = event.maxHealth if (entity is EntitySilverfish && maxHealth == 1_000_000_000) { - RenderLivingEntityHelper.setEntityColorWithNoHurtTime(entity, LorenzColor.DARK_RED.toColor().withAlpha(20)) - { SkyHanniMod.feature.dungeon.highlightDeathmites } + RenderLivingEntityHelper.setEntityColorWithNoHurtTime( + entity, + LorenzColor.DARK_RED.toColor().withAlpha(20) + ) { SkyHanniMod.feature.dungeon.highlightDeathmites } } } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityCollectionStats.kt b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityCollectionStats.kt index 9fbb3e527dc0..7d2a6a457c28 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityCollectionStats.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityCollectionStats.kt @@ -213,7 +213,7 @@ object HoppityCollectionStats { val newItemStack = if (config.rarityDyeRecolor) ItemStack( Items.dye, 1, when (rarity) { - LorenzRarity.COMMON -> 7 // Light gray dye + LorenzRarity.COMMON -> 7 // Light gray dye LorenzRarity.UNCOMMON -> 10 // Lime dye LorenzRarity.RARE -> 4 // Lapis lazuli LorenzRarity.EPIC -> 5 // Purple dye diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsManager.kt b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsManager.kt index bdbe4cd7e10b..a69366931886 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsManager.kt @@ -25,7 +25,6 @@ import at.hannibal2.skyhanni.utils.SimpleTimeMark.Companion.now import at.hannibal2.skyhanni.utils.SkyBlockTime import at.hannibal2.skyhanni.utils.SoundUtils import at.hannibal2.skyhanni.utils.TimeUtils.format -import net.minecraftforge.fml.common.eventhandler.EventPriority import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import java.util.regex.Matcher import kotlin.time.Duration.Companion.minutes diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/jerry/frozentreasure/FrozenTreasureTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/event/jerry/frozentreasure/FrozenTreasureTracker.kt index 80812c4c563b..e41a61013210 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/jerry/frozentreasure/FrozenTreasureTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/jerry/frozentreasure/FrozenTreasureTracker.kt @@ -42,8 +42,9 @@ object FrozenTreasureTracker { private var icePerSecond = mutableListOf() private var icePerHour = 0 private var stoppedChecks = 0 - private val tracker = SkyHanniTracker("Frozen Treasure Tracker", { Data() }, { it.frozenTreasureTracker }) - { formatDisplay(drawDisplay(it)) } + private val tracker = SkyHanniTracker("Frozen Treasure Tracker", { Data() }, { it.frozenTreasureTracker }) { + formatDisplay(drawDisplay(it)) + } init { FrozenTreasure.entries.forEach { it.chatPattern } diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/lobby/waypoints/easter/EasterEggWaypoints.kt b/src/main/java/at/hannibal2/skyhanni/features/event/lobby/waypoints/easter/EasterEggWaypoints.kt index 6831f1440115..8250b023db10 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/lobby/waypoints/easter/EasterEggWaypoints.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/lobby/waypoints/easter/EasterEggWaypoints.kt @@ -91,7 +91,7 @@ object EasterEggWaypoints { /* Title: §e§lHYPIXEL - + '§703/14/24 §8L30A' ' ' 'Rank: §bMVP§d+§b' diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/SeaCreatureTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/SeaCreatureTracker.kt index f050e56cdf95..ca8a73ce9d5f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/SeaCreatureTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/SeaCreatureTracker.kt @@ -28,8 +28,9 @@ object SeaCreatureTracker { private val config get() = SkyHanniMod.feature.fishing.seaCreatureTracker - private val tracker = SkyHanniTracker("Sea Creature Tracker", { Data() }, { it.fishing.seaCreatureTracker }) - { drawDisplay(it) } + private val tracker = SkyHanniTracker("Sea Creature Tracker", { Data() }, { it.fishing.seaCreatureTracker }) { + drawDisplay(it) + } class Data : TrackerData() { diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt index 26e41f7eea89..6cbda5b04ca7 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt @@ -38,7 +38,6 @@ object AnitaMedalProfit { GOLD("§6Gold medal", 8), SILVER("§fSilver medal", 2), BRONZE("§cBronze medal", 1), - ; } private fun getMedal(name: String) = MedalType.entries.firstOrNull { it.displayName == name } diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt index 90c68a046980..8a21525c1646 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/ArmorDropTracker.kt @@ -41,8 +41,9 @@ object ArmorDropTracker { private var hasArmor = false - private val tracker = SkyHanniTracker("Armor Drop Tracker", { Data() }, { it.garden.armorDropTracker }) - { drawDisplay(it) } + private val tracker = SkyHanniTracker("Armor Drop Tracker", { Data() }, { it.garden.armorDropTracker }) { + drawDisplay(it) + } class Data : TrackerData() { diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerRngDropTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerRngDropTracker.kt index 9e9e3620b618..af74da0d7fb5 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerRngDropTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/DicerRngDropTracker.kt @@ -31,8 +31,9 @@ object DicerRngDropTracker { private val itemDrops = mutableListOf() private val config get() = GardenAPI.config.dicerCounters - private val tracker = SkyHanniTracker("Dicer RNG Drop Tracker", { Data() }, { it.garden.dicerDropTracker }) - { drawDisplay(it) } + private val tracker = SkyHanniTracker("Dicer RNG Drop Tracker", { Data() }, { it.garden.dicerDropTracker }) { + drawDisplay(it) + } class Data : TrackerData() { diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/lane/FarmingDirection.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/lane/FarmingDirection.kt index 6ce5ebe06c11..06ff155b6cb0 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/lane/FarmingDirection.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/lane/FarmingDirection.kt @@ -3,5 +3,4 @@ package at.hannibal2.skyhanni.features.garden.farming.lane enum class FarmingDirection { NORTH_SOUTH, EAST_WEST, - ; } diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/lane/FarmingLaneFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/lane/FarmingLaneFeatures.kt index e407d0ad4deb..ce4ce6a9f8c9 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/lane/FarmingLaneFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/lane/FarmingLaneFeatures.kt @@ -49,7 +49,6 @@ object FarmingLaneFeatures { TOO_SLOW("§cToo slow!"), CALCULATING("§aCalculating.."), NORMAL(""), - ; } @HandleEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorCompactChat.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorCompactChat.kt index 52e49d26fe18..8cafd5260a1a 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorCompactChat.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorCompactChat.kt @@ -56,7 +56,7 @@ object GardenVisitorCompactChat { ) private var visitorAcceptedChat = mutableListOf() - private var visitorNameFormatted = ""; + private var visitorNameFormatted = "" private var rewardsList = mutableListOf() @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt index 152fc1b7c23a..2ad6f56b1c05 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorDropStatistics.kt @@ -196,7 +196,7 @@ object GardenVisitorDropStatistics { for (reward in VisitorReward.entries) { val count = rewardsCount[reward] ?: 0 - if (config.displayIcons) {// Icons + if (config.displayIcons) { // Icons val stack = reward.itemStack if (config.displayNumbersFirst) add(listOf("§b${count.addSeparators()} ", stack)) diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorAPI.kt index d621aa081b37..1565d87d3eba 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/VisitorAPI.kt @@ -201,7 +201,7 @@ object VisitorAPI { val pricePerCopper = pricePerCopper ?: error("pricePerCopper is null") val totalPrice = totalPrice ?: error("totalPrice is null") val totalReward = totalReward ?: error("totalReward is null") - val loss = totalPrice - totalReward; + val loss = totalPrice - totalReward return when { preventRefusing && hasReward() != null -> VisitorBlockReason.RARE_REWARD preventRefusingNew && offersAccepted == 0 -> VisitorBlockReason.NEVER_ACCEPTED diff --git a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardEvent.kt b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardEvent.kt index 802cc073bd71..6531d5158d75 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardEvent.kt @@ -373,9 +373,9 @@ private fun getWinterLines() = buildList { } private fun getWinterShowWhen(): Boolean = getSbLines().any { - SbPattern.winterEventStartPattern.matches(it) - || (SbPattern.winterNextWavePattern.matches(it) && !it.endsWith("Soon!")) - || SbPattern.winterWavePattern.matches(it) + SbPattern.winterEventStartPattern.matches(it) || + (SbPattern.winterNextWavePattern.matches(it) && !it.endsWith("Soon!")) || + SbPattern.winterWavePattern.matches(it) } private fun getNewYearLines() = listOf(getSbLines().first { SbPattern.newYearPattern.matches(it) }) diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ChestValue.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ChestValue.kt index bd032fe66cda..50c5e446fd20 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ChestValue.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ChestValue.kt @@ -230,13 +230,11 @@ object ChestValue { enum class SortType(val shortName: String, val longName: String) { PRICE_DESC("Price D", "Price Descending"), PRICE_ASC("Price A", "Price Ascending"), - ; } enum class FormatType(val type: String) { SHORT("Formatted"), LONG("Unformatted"), - ; } enum class DisplayType(val type: String) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/HarpFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/HarpFeatures.kt index d6d79b31a710..dd9e3d91e9ad 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/HarpFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/HarpFeatures.kt @@ -111,7 +111,7 @@ object HarpFeatures { private fun updateScale() { if (Minecraft.getMinecraft().currentScreen == null) { - DelayedRun.runNextTick() { + DelayedRun.runNextTick { updateScale() } return diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/HideNotClickableItems.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/HideNotClickableItems.kt index 2e549313ce3a..f8a16bf50b0b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/HideNotClickableItems.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/HideNotClickableItems.kt @@ -311,7 +311,7 @@ object HideNotClickableItems { "BRACELET", ) for (type in list) { - if (stack.getLore().any { it.contains("§l") && it.contains(type) }) {// todo use item api + if (stack.getLore().any { it.contains("§l") && it.contains(type) }) { // todo use item api showGreenLine = true return false } diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/QuickCraftFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/QuickCraftFeatures.kt index 70069a84ea2a..f1235a968af8 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/QuickCraftFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/QuickCraftFeatures.kt @@ -29,7 +29,6 @@ object QuickCraftFeatures { enum class InventoryType(val inventoryName: String) { CRAFT_ITEM("Craft Item"), MORE_QUICK_CRAFT_OPTIONS("Quick Crafting"), - ; } private fun InventoryType.ignoreSlot(slotNumber: Int?): Boolean = when (this) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/SackDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/SackDisplay.kt index 4856c65c10b7..1489ba83ff93 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/SackDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/SackDisplay.kt @@ -299,20 +299,17 @@ object SackDisplay { STORED_ASC("Stored A", "Stored Ascending"), PRICE_DESC("Price D", "Price Descending"), PRICE_ASC("Price A", "Price Ascending"), - ; } enum class PriceFormat(val displayName: String) { - FORMATED("Formatted"), - UNFORMATED("Unformatted"), - ; + FORMATTED("Formatted"), + UNFORMATTED("Unformatted"), } enum class NumberFormat(val displayName: String) { DEFAULT("Default"), FORMATTED("Formatted"), UNFORMATTED("Unformatted"), - ; } @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryStrayTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryStrayTracker.kt index 1aa9d068b124..bb4eeaedb20c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryStrayTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryStrayTracker.kt @@ -125,8 +125,9 @@ object ChocolateFactoryStrayTracker { "(?:§.)*already have captured him before.*", ) - private val tracker = SkyHanniTracker("Stray Tracker", { Data() }, { it.chocolateFactory.strayTracker }) - { drawDisplay(it) } + private val tracker = SkyHanniTracker("Stray Tracker", { Data() }, { it.chocolateFactory.strayTracker }) { + drawDisplay(it) + } class Data : TrackerData() { override fun reset() { diff --git a/src/main/java/at/hannibal2/skyhanni/features/itemabilities/CrownOfAvariceCounter.kt b/src/main/java/at/hannibal2/skyhanni/features/itemabilities/CrownOfAvariceCounter.kt index 207e1b92b6a1..df408133a136 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/itemabilities/CrownOfAvariceCounter.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/itemabilities/CrownOfAvariceCounter.kt @@ -40,7 +40,7 @@ object CrownOfAvariceCounter { if (!config.enable) return null val item = InventoryUtils.getHelmet() if (item?.getInternalNameOrNull() != internalName) return null - val count = item.extraAttributes.getLong("collected_coins"); + val count = item.extraAttributes.getLong("collected_coins") return Renderable.horizontalContainer( listOf( Renderable.itemStack(internalName.getItemStack()), diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/HighlightMiningCommissionMobs.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/HighlightMiningCommissionMobs.kt index cc9f6b7534ba..071c905d53f5 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/HighlightMiningCommissionMobs.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/HighlightMiningCommissionMobs.kt @@ -53,7 +53,6 @@ object HighlightMiningCommissionMobs { CH_GOBLIN_SLAYER("Goblin Slayer", { it.name == "Weakling " }), // new commissions - ; } @SubscribeEvent @@ -67,8 +66,7 @@ object HighlightMiningCommissionMobs { RenderLivingEntityHelper.setEntityColorWithNoHurtTime( entity, LorenzColor.YELLOW.toColor().withAlpha(127) - ) - { isEnabled() && type in active } + ) { isEnabled() && type in active } } } } @@ -99,8 +97,7 @@ object HighlightMiningCommissionMobs { RenderLivingEntityHelper.setEntityColorWithNoHurtTime( entity, LorenzColor.YELLOW.toColor().withAlpha(127) - ) - { isEnabled() && type in active } + ) { isEnabled() && type in active } } } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt index c3d307a16f69..da9dbb2fbdab 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt @@ -140,7 +140,8 @@ object PowderTracker { } } - private val tracker = SkyHanniTracker("Powder Tracker", { Data() }, { it.powderTracker }) { formatDisplay(drawDisplay(it)) } + private val tracker = + SkyHanniTracker("Powder Tracker", { Data() }, { it.powderTracker }) { formatDisplay(drawDisplay(it)) } class Data : TrackerData() { diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/NonGodPotEffectDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/NonGodPotEffectDisplay.kt index 89db21304472..61f9a344923f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/NonGodPotEffectDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/NonGodPotEffectDisplay.kt @@ -76,7 +76,6 @@ object NonGodPotEffectDisplay { CURSE_OF_GREED("§4Curse of Greed I"), COLD_RESISTANCE_4("§bCold Resistance IV"), - ; } private val effectsCountPattern by RepoPattern.pattern( diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/discordrpc/DiscordStatus.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/discordrpc/DiscordStatus.kt index 47472d2fec20..82be48f80fa0 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/discordrpc/DiscordStatus.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/discordrpc/DiscordStatus.kt @@ -344,5 +344,4 @@ enum class AutoStatus(val placeholderText: String, val correspondingDiscordStatu STACKING("Stacking placeholder (should never be visible)", DiscordStatus.STACKING), DUNGEONS("Dungeons placeholder (should never be visible)", DiscordStatus.DUNGEONS), AFK("This person is not afk (should never be visible)", DiscordStatus.AFK), - ; } 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 2f58a4fd191f..62abb1c8c52a 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 @@ -742,9 +742,12 @@ object EstimatedItemValueCalculator { val map = mutableMapOf() // todo use repo - val tieredEnchants = listOf("compact", "cultivating", "champion", "expertise", "hecatomb", "toxophilite") - val onlyTierOnePrices = listOf("ultimate_chimera", "ultimate_fatal_tempo", "smoldering", "ultimate_flash", "divine_gift") - val onlyTierFivePrices = listOf("ferocious_mana", "hardened_mana", "mana_vampire", "strong_mana") + val tieredEnchants = + listOf("compact", "cultivating", "champion", "expertise", "hecatomb", "toxophilite") + val onlyTierOnePrices = + listOf("ultimate_chimera", "ultimate_fatal_tempo", "smoldering", "ultimate_flash", "divine_gift") + val onlyTierFivePrices = + listOf("ferocious_mana", "hardened_mana", "mana_vampire", "strong_mana") val internalName = stack.getInternalName() for ((rawName, rawLevel) in enchantments) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/area/dreadfarm/VoltHighlighter.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/area/dreadfarm/VoltHighlighter.kt index 77807e5bf176..50887554dac0 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/area/dreadfarm/VoltHighlighter.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/area/dreadfarm/VoltHighlighter.kt @@ -91,11 +91,11 @@ object VoltHighlighter { FRIENDLY, HOSTILE, DOING_LIGHTNING, - ; } private fun getVoltState(itemStack: ItemStack): VoltState { return when (itemStack.getSkullTexture()) { + // TODO: Move these textures to the repo "ewogICJ0aW1lc3RhbXAiIDogMTY3Mzg4MzU3MjAzNSwKICAicHJvZmlsZUlkIiA6ICI0MDU4NDhjMmJjNTE0ZDhkOThkOTJkMGIwYzhiZDQ0YiIsCiAgInByb2ZpbGVOYW1lIiA6ICJMb3ZlT3dPIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlL2UxYjFiZmI1MzZiNjQxNmIyNmEyODNkMmQ4YWQ0YjE3NzFiYmU1Yjc2ODk2ZTI3MjdkNWU4MzNiYzg5NDk4MmQiLAogICAgICAibWV0YWRhdGEiIDogewogICAgICAgICJtb2RlbCIgOiAic2xpbSIKICAgICAgfQogICAgfQogIH0KfQ==" -> { VoltState.DOING_LIGHTNING } diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/area/mirrorverse/RiftUpsideDownParkour.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/area/mirrorverse/RiftUpsideDownParkour.kt index ac12b43c00cd..c93932344d63 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/area/mirrorverse/RiftUpsideDownParkour.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/area/mirrorverse/RiftUpsideDownParkour.kt @@ -24,7 +24,7 @@ object RiftUpsideDownParkour { fun onRepoReload(event: RepositoryReloadEvent) { val data = event.getConstant("RiftUpsideDownParkour") parkourHelper = ParkourHelper( - data.locations.map { it.add(-1.0, -1.0, -1.0) },// TODO remove offset. change repo instead + data.locations.map { it.add(-1.0, -1.0, -1.0) }, // TODO remove offset. change repo instead data.shortCuts, platformSize = 2.0, detectionRange = 2.0 diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/VerminTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/VerminTracker.kt index cedaa569bfbf..0f397e6e348f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/VerminTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/VerminTracker.kt @@ -55,8 +55,9 @@ object VerminTracker { private val config get() = RiftAPI.config.area.westVillage.verminTracker - private val tracker = SkyHanniTracker("Vermin Tracker", { Data() }, { it.rift.verminTracker }) - { drawDisplay(it) } + private val tracker = SkyHanniTracker("Vermin Tracker", { Data() }, { it.rift.verminTracker }) { + drawDisplay(it) + } class Data : TrackerData() { diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerMiniBossFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerMiniBossFeatures.kt index 0fd24e25c6d8..4798a943257d 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerMiniBossFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerMiniBossFeatures.kt @@ -43,8 +43,10 @@ object SlayerMiniBossFeatures { if (bossType.clazz != entity.javaClass) continue miniBosses = miniBosses.editCopy { add(entity) } - RenderLivingEntityHelper.setEntityColorWithNoHurtTime(entity, LorenzColor.AQUA.toColor().withAlpha(127)) - { config.slayerMinibossHighlight } + RenderLivingEntityHelper.setEntityColorWithNoHurtTime( + entity, + LorenzColor.AQUA.toColor().withAlpha(127) + ) { config.slayerMinibossHighlight } } } @@ -79,6 +81,5 @@ object SlayerMiniBossFeatures { SVEN(EntityWolf::class.java, 45_000, 120_000, 480_000), VOIDLING(EntityEnderman::class.java, 8_400_000, 17_500_000, 52_500_000), INFERNAL(EntityBlaze::class.java, 12_000_000, 25_000_000, 75_000_000), - ; } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerType.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerType.kt index 75b1efd34cf7..0a07e62fece0 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerType.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerType.kt @@ -16,6 +16,6 @@ enum class SlayerType(val displayName: String, val rngName: String, val clazz: C ; companion object { - fun getByName(name: String): SlayerType? = entries.firstOrNull {name.contains(it.displayName)} + fun getByName(name: String): SlayerType? = entries.firstOrNull { name.contains(it.displayName) } } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/HellionShield.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/HellionShield.kt index db3826d4469e..290f006789c2 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/HellionShield.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/blaze/HellionShield.kt @@ -14,5 +14,4 @@ enum class HellionShield( ASHEN("§8§lASHEN", "Ashen", LorenzColor.DARK_GRAY), SPIRIT("§f§lSPIRIT", "Spirit", LorenzColor.WHITE), CRYSTAL("§b§lCRYSTAL", "Crystal", LorenzColor.AQUA), - ; } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/EntityUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/EntityUtils.kt index 198f7c0a00d0..281b744d657b 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/EntityUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/EntityUtils.kt @@ -38,6 +38,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent //#endif @SkyHanniModule +@Suppress("ImportOrdering") object EntityUtils { @Deprecated("Old. Instead use entity detection feature instead.") diff --git a/src/main/java/at/hannibal2/skyhanni/utils/PrimitiveRecipe.kt b/src/main/java/at/hannibal2/skyhanni/utils/PrimitiveRecipe.kt index f064183ba372..24deb38a207d 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/PrimitiveRecipe.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/PrimitiveRecipe.kt @@ -49,5 +49,4 @@ enum class RecipeType { KAT_UPGRADE, ESSENCE, CRAFTING, - ; } 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 13aec1d92b6a..968ad7fded97 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/json/SkyHanniTypeAdapters.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/json/SkyHanniTypeAdapters.kt @@ -84,9 +84,7 @@ object SkyHanniTypeAdapters { } } - 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/utils/renderables/Renderable.kt b/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt index f3f704f374a2..5362cc17794c 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/renderables/Renderable.kt @@ -1139,6 +1139,7 @@ interface Renderable { GlStateManager.translate(0f, yShift.toFloat(), 0f) renderY += yShift } + @Suppress("SpacingAroundCurly") val range = yOffsets.indexOfFirst { it >= scroll.asInt() }..<(yOffsets.indexOfFirst { it >= end }.takeIf { it > 0 } ?: yOffsets.size) - 1 diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt index a6d42839cdb5..eea93de044e5 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniTracker.kt @@ -198,7 +198,6 @@ open class SkyHanniTracker( TOTAL("Total"), SESSION("This Session"), MAYOR("This Mayor"), - ; } enum class DefaultDisplayMode(val display: String, val mode: DisplayMode?) { From 7000057486bf31972f6a91477db6b864575e9988 Mon Sep 17 00:00:00 2001 From: NopoTheGamer <40329022+NopoTheGamer@users.noreply.github.com> Date: Fri, 4 Oct 2024 06:56:30 +1000 Subject: [PATCH 066/155] change neu to 2.4 (#2652) --- build.gradle.kts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index cb384b26946b..190385c1e4ee 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -150,9 +150,9 @@ dependencies { exclude(module = "unspecified") isTransitive = false } - // August 27, 2024, 4:30 PM AEST - // https://github.com/NotEnoughUpdates/NotEnoughUpdates/tree/2.3.3 - devenvMod("com.github.NotEnoughUpdates:NotEnoughUpdates:2.3.3:all") { + // October 3, 2024, 11:43 PM AEST + // https://github.com/NotEnoughUpdates/NotEnoughUpdates/tree/2.4.0 + devenvMod("com.github.NotEnoughUpdates:NotEnoughUpdates:2.4.0:all") { exclude(module = "unspecified") isTransitive = false } From a8bd03caf2ec478fe926c160fd67d4dd2df7ef1e Mon Sep 17 00:00:00 2001 From: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> Date: Fri, 4 Oct 2024 09:49:06 +1000 Subject: [PATCH 067/155] Fix: Template (#2661) --- pull_request_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pull_request_template.md b/pull_request_template.md index 2dd04bcec865..b004c1c13866 100644 --- a/pull_request_template.md +++ b/pull_request_template.md @@ -21,7 +21,7 @@ Describe what this pull request does, including technical details, screenshots, ## Changelog New Features + Cool new feature. - your_name_here - * extra info + * Extra info. ## Changelog Improvements + Improved cool feature. - your_name_here From a95bf3a5712951eff5d4d52f418468e901e1eda6 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Fri, 4 Oct 2024 03:54:19 +0200 Subject: [PATCH 068/155] Removed the password in download source check (#2649) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../tweaker/DownloadSourceChecker.java | 20 ------------------- 1 file changed, 20 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/tweaker/DownloadSourceChecker.java b/src/main/java/at/hannibal2/skyhanni/tweaker/DownloadSourceChecker.java index 63a92849bc62..2c417909e6a2 100644 --- a/src/main/java/at/hannibal2/skyhanni/tweaker/DownloadSourceChecker.java +++ b/src/main/java/at/hannibal2/skyhanni/tweaker/DownloadSourceChecker.java @@ -18,15 +18,6 @@ public class DownloadSourceChecker { private static final String GITHUB_REPO = "511310721"; private static final String GITHUB_REPO_TEXT = "repo_id=" + GITHUB_REPO; private static final String MODRINTH_URL = "/data/byNkmv5G/"; - private static final String THE_PASSWORD = "danger"; - - private static final String[] PASSWORD_POPUP = { - "If someone asks you to type in here,", - "", - "the likelihood of them ratting you is high!", - "", - "Enter the password:" - }; private static final String[] SECURITY_POPUP = { "The file you are trying to run is hosted on a non-trusted domain.", @@ -77,17 +68,6 @@ private static void openMenu(URI host) { JPanel buttons = new JPanel(); - buttons.add(TweakerUtils.createButton( - "Skip (Trusted Users Only)", - () -> { - String password = JOptionPane.showInputDialog(frame, String.join("\n", PASSWORD_POPUP)); - if (password != null && password.equals(THE_PASSWORD)) { - close.set(false); - frame.dispatchEvent(new WindowEvent(frame, WindowEvent.WINDOW_CLOSING)); - } - } - )); - buttons.add(TweakerUtils.createButton( "Close", () -> { From fda50f2ecd79498b8cb155025807d018cf86279e Mon Sep 17 00:00:00 2001 From: Luna Date: Sat, 5 Oct 2024 00:08:45 +0200 Subject: [PATCH 069/155] Fix: Delay Pablo GfS message (#2662) --- .../hannibal2/skyhanni/features/nether/PabloHelper.kt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/PabloHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/PabloHelper.kt index 04f5e6113576..eb4962549f70 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/PabloHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/PabloHelper.kt @@ -4,6 +4,7 @@ import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.api.GetFromSackAPI 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.name import at.hannibal2.skyhanni.utils.LorenzUtils @@ -51,10 +52,12 @@ object PabloHelper { if (InventoryUtils.countItemsInLowerInventory { it.name.contains(itemName) } > 0) return - GetFromSackAPI.getFromChatMessageSackItems( - itemName.asInternalName().makePrimitiveStack(), - "Click here to grab an $itemName from sacks!", - ) + DelayedRun.runNextTick { + GetFromSackAPI.getFromChatMessageSackItems( + itemName.asInternalName().makePrimitiveStack(), + "Click here to grab an $itemName from sacks!", + ) + } lastSentMessage = SimpleTimeMark.now() } From c636d88309279ec458f96c6e6eadd93a39a6c912 Mon Sep 17 00:00:00 2001 From: NopoTheGamer <40329022+NopoTheGamer@users.noreply.github.com> Date: Sat, 5 Oct 2024 16:16:18 +1000 Subject: [PATCH 070/155] Fix: repo getting redownloaded on the same commit (#2669) --- src/main/java/at/hannibal2/skyhanni/data/repo/RepoManager.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/at/hannibal2/skyhanni/data/repo/RepoManager.kt b/src/main/java/at/hannibal2/skyhanni/data/repo/RepoManager.kt index ec6f0cbd9ebe..b3109c9ee4d6 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/repo/RepoManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/repo/RepoManager.kt @@ -36,7 +36,7 @@ class RepoManager(private val configLocation: File) { private var latestRepoCommit: String? = null val repoLocation: File = File(configLocation, "repo") private var error = false - private var lastRepoUpdate = SimpleTimeMark.farPast() + private var lastRepoUpdate = SimpleTimeMark.now() companion object { From 5a77e28bf9bd7f9d10eb561212ea5f68512892b7 Mon Sep 17 00:00:00 2001 From: NopoTheGamer <40329022+NopoTheGamer@users.noreply.github.com> Date: Sat, 5 Oct 2024 17:55:52 +1000 Subject: [PATCH 071/155] Fix: error punctuation (#2651) --- .../java/at/hannibal2/skyhanni/api/event/EventHandler.kt | 4 +++- src/main/java/at/hannibal2/skyhanni/events/LorenzEvent.kt | 4 +++- .../java/at/hannibal2/skyhanni/test/command/ErrorManager.kt | 6 +++++- src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt | 5 +++++ 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/api/event/EventHandler.kt b/src/main/java/at/hannibal2/skyhanni/api/event/EventHandler.kt index 4b4c008523e2..d164e0e774d7 100644 --- a/src/main/java/at/hannibal2/skyhanni/api/event/EventHandler.kt +++ b/src/main/java/at/hannibal2/skyhanni/api/event/EventHandler.kt @@ -6,6 +6,7 @@ import at.hannibal2.skyhanni.test.command.ErrorManager import at.hannibal2.skyhanni.utils.ChatUtils import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.inAnyIsland +import at.hannibal2.skyhanni.utils.StringUtils import at.hannibal2.skyhanni.utils.chat.Text import java.lang.invoke.LambdaMetafactory import java.lang.invoke.MethodHandles @@ -91,7 +92,8 @@ class EventHandler private constructor(val name: String, priv errors++ if (errors <= 3) { val errorName = throwable::class.simpleName ?: "error" - val message = "Caught an $errorName in ${listener.name} at $name: ${throwable.message}" + val aOrAn = StringUtils.optionalAn(errorName) + val message = "Caught $aOrAn $errorName in ${listener.name} at $name: ${throwable.message}" ErrorManager.logErrorWithData(throwable, message, ignoreErrorCache = onError != null) } onError?.invoke(throwable) diff --git a/src/main/java/at/hannibal2/skyhanni/events/LorenzEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/LorenzEvent.kt index 4a294a6779ca..b567d9ae6d06 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/LorenzEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/LorenzEvent.kt @@ -7,6 +7,7 @@ import at.hannibal2.skyhanni.mixins.hooks.setValue import at.hannibal2.skyhanni.mixins.transformers.AccessorEventBus import at.hannibal2.skyhanni.test.command.ErrorManager import at.hannibal2.skyhanni.utils.ChatUtils +import at.hannibal2.skyhanni.utils.StringUtils import at.hannibal2.skyhanni.utils.chat.Text import at.hannibal2.skyhanni.utils.system.PlatformUtils import net.minecraftforge.common.MinecraftForge @@ -57,7 +58,8 @@ abstract class LorenzEvent : Event() { if (printError && errors <= visibleErrors) { val callerName = listener.toString().split(" ")[1].split("@")[0].split(".").last() val errorName = throwable::class.simpleName ?: "error" - val message = "Caught an $errorName in $callerName at $eventName: ${throwable.message}" + val aOrAn = StringUtils.optionalAn(errorName) + val message = "Caught $aOrAn $errorName in $callerName at $eventName: ${throwable.message}" ErrorManager.logErrorWithData(throwable, message, ignoreErrorCache = ignoreErrorCache) } onError(throwable) diff --git a/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt b/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt index df3d85267677..56a50ecebd06 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt @@ -154,8 +154,12 @@ object ErrorManager { fullErrorMessages[randomId] = "```\nSkyHanni ${SkyHanniMod.version}: $rawMessage\n(full stack trace)\n \n$fullStackTrace\n$extraDataString```" + var finalMessage = message + if (finalMessage.last() !in ".?!") { + finalMessage += "§c." + } ChatUtils.clickableChat( - "§c[SkyHanni-${SkyHanniMod.version}]: $message§c. Click here to copy the error into the clipboard.", + "§c[SkyHanni-${SkyHanniMod.version}]: $finalMessage Click here to copy the error into the clipboard.", onClick = { copyError(randomId) }, "§eClick to copy!", prefix = false, diff --git a/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt index f118d5d665c0..c6de8c13fced 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/StringUtils.kt @@ -569,4 +569,9 @@ object StringUtils { false } } + + fun optionalAn(string: String): String { + if (string.isEmpty()) return "" + return if (string[0] in "aeiou") "an" else "a" + } } From 168372b0be062dff2bf17d661ab4adfa4492e91d Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 5 Oct 2024 10:01:05 +0200 Subject: [PATCH 072/155] renamed Bug Fix --- .github/workflows/label-bug-fix.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/label-bug-fix.yml b/.github/workflows/label-bug-fix.yml index dae2980de630..4730d6194468 100644 --- a/.github/workflows/label-bug-fix.yml +++ b/.github/workflows/label-bug-fix.yml @@ -14,7 +14,7 @@ jobs: - name: label env: TITLE: ${{ github.event.pull_request.title }} - LABEL: Bug Fix - Sooner than Very Soon + LABEL: Bug Fix uses: actions/github-script@v7 with: github-token: ${{ secrets.GITHUB_TOKEN}} From 9f9e11b88620047e98d12b609d6aca7d57760e31 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 5 Oct 2024 10:09:14 +0200 Subject: [PATCH 073/155] code cleanup --- src/main/java/at/hannibal2/skyhanni/utils/ChatUtils.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/at/hannibal2/skyhanni/utils/ChatUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/ChatUtils.kt index 18519a364b1e..3a3ffead303c 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/ChatUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/ChatUtils.kt @@ -260,7 +260,7 @@ object ChatUtils { fun clickToActionOrDisable(message: String, option: KMutableProperty0<*>, actionName: String, action: () -> Unit) { - ChatUtils.clickableChat( + clickableChat( "$message\n§e[CLICK to $actionName or disable this feature]", onClick = { if (KeyboardManager.isShiftKeyDown() || KeyboardManager.isModifierKeyDown()) { From 524df8b718cad70c7a7fc02e323721c85385d41b Mon Sep 17 00:00:00 2001 From: martimavocado <39881008+martimavocado@users.noreply.github.com> Date: Sat, 5 Oct 2024 08:31:56 +0000 Subject: [PATCH 074/155] Fix: Stop king talisman tracker on finish (#2663) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../features/mining/KingTalismanHelper.kt | 47 ++++++++++++++++--- 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/KingTalismanHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/KingTalismanHelper.kt index 057d2f476948..b9f205984f38 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/KingTalismanHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/KingTalismanHelper.kt @@ -2,9 +2,11 @@ package at.hannibal2.skyhanni.features.mining import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.data.IslandType +import at.hannibal2.skyhanni.data.MiningAPI import at.hannibal2.skyhanni.data.ProfileStorageData import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent +import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.events.SecondPassedEvent import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.utils.ChatUtils @@ -16,6 +18,7 @@ import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland import at.hannibal2.skyhanni.utils.LorenzVec import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher +import at.hannibal2.skyhanni.utils.RegexUtils.matches import at.hannibal2.skyhanni.utils.RenderUtils.renderStrings import at.hannibal2.skyhanni.utils.SkyBlockTime import at.hannibal2.skyhanni.utils.TimeUtils.format @@ -31,11 +34,27 @@ object KingTalismanHelper { private val config get() = SkyHanniMod.feature.mining.kingTalisman private val storage get() = ProfileStorageData.profileSpecific?.mining - private val kingPattern by RepoPattern.pattern( - "mining.kingtalisman.king", + private val patternGroup = RepoPattern.group("mining.kingtalisman") + + /** + * REGEX-TEST: §6§lKing Brammor + * REGEX-TEST: §6§lKing Emkam + * REGEX-TEST: §6§lKing Kevin + * REGEX-TEST: §6§lKing Redros + */ + private val kingPattern by patternGroup.pattern( + "king", "§6§lKing (?.*)" ) + /** + * REGEX-TEST: §7You have received a §r§fKing Talisman§r§7! + */ + private val talismanPattern by patternGroup.pattern( + "talisman", + "§7You have received a §r§fKing Talisman§r§7!" + ) + private var currentOffset: Int? = null private var skyblockYear = 0 @@ -66,7 +85,8 @@ object KingTalismanHelper { private var farDisplay = "" private var display = emptyList() - private fun isNearby() = IslandType.DWARVEN_MINES.isInIsland() && LorenzUtils.skyBlockArea == "Royal Palace" && + private fun isNearby() = IslandType.DWARVEN_MINES.isInIsland() && + LorenzUtils.skyBlockArea == "Royal Palace" && kingLocation.distanceToPlayer() < 10 @SubscribeEvent @@ -86,7 +106,7 @@ object KingTalismanHelper { return } - update(kingsTalkedTo) + update() display = if (nearby) allKingsDisplay else Collections.singletonList(farDisplay) } @@ -103,7 +123,8 @@ object KingTalismanHelper { skyblockYear = SkyBlockTime.now().year } - fun isEnabled() = config.enabled && LorenzUtils.inSkyBlock && + fun isEnabled() = config.enabled && + LorenzUtils.inSkyBlock && (IslandType.DWARVEN_MINES.isInIsland() || config.outsideMines) @SubscribeEvent @@ -118,12 +139,13 @@ object KingTalismanHelper { val kingsTalkedTo = storage.kingsTalkedTo if (currentKing !in kingsTalkedTo) { kingsTalkedTo.add(currentKing) - update(kingsTalkedTo) + update() display = allKingsDisplay } } - private fun update(kingsTalkedTo: MutableList) { + private fun update() { + val kingsTalkedTo = storage?.kingsTalkedTo ?: return if (kingsTalkedTo.size == kingCircles.size) { allKingsDisplay = Collections.singletonList("§eAll Kings found.") farDisplay = "" @@ -198,4 +220,15 @@ object KingTalismanHelper { config.position.renderStrings(display, posLabel = "King Talisman Helper") } + + @SubscribeEvent + fun onChat(event: LorenzChatEvent) { + if (!isEnabled()) return + if (!MiningAPI.inDwarvenMines) return + + if (talismanPattern.matches(event.message)) { + storage?.kingsTalkedTo = kingCircles.toMutableList() + update() + } + } } From e83d5b432a54d53253bcf6f2828fb41767ad17e1 Mon Sep 17 00:00:00 2001 From: NopoTheGamer <40329022+NopoTheGamer@users.noreply.github.com> Date: Sat, 5 Oct 2024 18:39:05 +1000 Subject: [PATCH 075/155] Fix: Made it so you can shift click to disable features like it says (#2650) --- .../skyhanni/mixins/transformers/gui/MixinGuiScreen.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/MixinGuiScreen.java b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/MixinGuiScreen.java index b3338acf5032..3f0371f07f7f 100644 --- a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/MixinGuiScreen.java +++ b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/MixinGuiScreen.java @@ -8,6 +8,7 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.Redirect; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @@ -33,4 +34,9 @@ public void getTooltip(ItemStack stack, int x, int y, CallbackInfo ci, List Date: Sat, 5 Oct 2024 18:50:42 +1000 Subject: [PATCH 076/155] Fix: chroma disabling patchers font renderer for no reason (#2666) --- .../config/features/chroma/ChromaConfig.java | 4 ++-- .../skyhanni/mixins/hooks/FontRendererHook.kt | 2 +- .../hooks/MixinPatcherFontRendererHookHook.kt | 20 +++++++++++++++++-- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/chroma/ChromaConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/chroma/ChromaConfig.java index 6a02e2ed3061..b3f8577f0c0f 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/chroma/ChromaConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/chroma/ChromaConfig.java @@ -20,7 +20,7 @@ public class ChromaConfig { public boolean chromaPreview = false; @Expose - @ConfigOption(name = "Enabled", desc = "Toggle SkyHanni's chroma. §e(Disables Patcher's Optimized Font Renderer while enabled)") + @ConfigOption(name = "Enabled", desc = "Toggle SkyHanni's chroma.") @ConfigEditorBoolean @FeatureToggle public Property enabled = Property.of(false); @@ -80,7 +80,7 @@ public String toString() { public Runnable resetSettings = ChromaManager::resetChromaSettings; @Expose - @ConfigOption(name = "Everything Chroma", desc = "Render §4§l§oALL §r§7text in chroma. §e(Some enchants may appear white with SBA enchant parsing)") + @ConfigOption(name = "Everything Chroma", desc = "Render §4§l§oALL §r§7text in chroma. §e(Disables Patcher's Optimized Font Renderer while enabled)") @ConfigEditorBoolean public boolean allChroma = false; diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/hooks/FontRendererHook.kt b/src/main/java/at/hannibal2/skyhanni/mixins/hooks/FontRendererHook.kt index db9c1c07e1c2..b52407b65233 100644 --- a/src/main/java/at/hannibal2/skyhanni/mixins/hooks/FontRendererHook.kt +++ b/src/main/java/at/hannibal2/skyhanni/mixins/hooks/FontRendererHook.kt @@ -28,7 +28,7 @@ object FontRendererHook { private var currentDrawState: ChromaFontRenderer? = null private var previewChroma = false - private var chromaPreviewText: String + var chromaPreviewText: String var cameFromChat = false diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/hooks/MixinPatcherFontRendererHookHook.kt b/src/main/java/at/hannibal2/skyhanni/mixins/hooks/MixinPatcherFontRendererHookHook.kt index 25d415889b0d..25697e0ee633 100644 --- a/src/main/java/at/hannibal2/skyhanni/mixins/hooks/MixinPatcherFontRendererHookHook.kt +++ b/src/main/java/at/hannibal2/skyhanni/mixins/hooks/MixinPatcherFontRendererHookHook.kt @@ -11,9 +11,25 @@ class MixinPatcherFontRendererHookHook { fun overridePatcherFontRenderer(string: String, shadow: Boolean, cir: CallbackInfoReturnable) { if (!LorenzUtils.onHypixel) return - if (ChromaManager.config.enabled.get()) { - cir.cancel() + if (ChromaManager.config.allChroma) { cir.returnValue = false + return + } + + if (string == FontRendererHook.chromaPreviewText) { + cir.returnValue = false + return + } + + if (string.contains("§#§")) { + cir.returnValue = false + return + } + if (ChromaManager.config.enabled.get()) { + if (string.contains("§z") || string.contains("§Z")) { + cir.returnValue = false + return + } } } } From 96599f69ea7f22289a74c5c5e931d1001d73e42f Mon Sep 17 00:00:00 2001 From: MTOnline69 <97001154+MTOnline69@users.noreply.github.com> Date: Sat, 5 Oct 2024 09:59:13 +0100 Subject: [PATCH 077/155] Improvement: Option to hide other players while in Gunther's Race (#2655) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../rift/area/westvillage/GunthersRaceConfig.java | 6 ++++++ .../rift/area/westvillage/RiftGunthersRace.kt | 15 +++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/rift/area/westvillage/GunthersRaceConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/rift/area/westvillage/GunthersRaceConfig.java index beb4acc9e3a0..10d18fa85c05 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/rift/area/westvillage/GunthersRaceConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/rift/area/westvillage/GunthersRaceConfig.java @@ -30,4 +30,10 @@ public class GunthersRaceConfig { @ConfigOption(name = "Monochrome Color", desc = "Set a boring monochrome color for the guide waypoints.") @ConfigEditorColour public Property monochromeColor = Property.of("0:60:0:0:255"); + + @Expose + @ConfigOption(name = "Hide Other Players", desc = "Hide other players while in the race.") + @ConfigEditorBoolean + @FeatureToggle + public boolean hidePlayers = false; } diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/RiftGunthersRace.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/RiftGunthersRace.kt index cf729453fcb6..5a3638101a71 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/RiftGunthersRace.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/area/westvillage/RiftGunthersRace.kt @@ -1,6 +1,7 @@ package at.hannibal2.skyhanni.features.rift.area.westvillage import at.hannibal2.skyhanni.data.jsonobjects.repo.ParkourJson +import at.hannibal2.skyhanni.events.CheckRenderEntityEvent import at.hannibal2.skyhanni.events.ConfigLoadEvent import at.hannibal2.skyhanni.events.IslandChangeEvent import at.hannibal2.skyhanni.events.LorenzChatEvent @@ -11,9 +12,11 @@ import at.hannibal2.skyhanni.features.rift.RiftAPI import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.utils.ColorUtils.toChromaColor import at.hannibal2.skyhanni.utils.ConditionalUtils +import at.hannibal2.skyhanni.utils.EntityUtils.isNPC import at.hannibal2.skyhanni.utils.ParkourHelper import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern +import net.minecraft.client.entity.EntityOtherPlayerMP import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @SkyHanniModule @@ -105,6 +108,18 @@ object RiftGunthersRace { } } + @SubscribeEvent + fun onCheckRender(event: CheckRenderEntityEvent<*>) { + if (!isEnabled()) return + if (!config.hidePlayers) return + if (!RiftAPI.inRiftRace) return + + val entity = event.entity + if (entity is EntityOtherPlayerMP && !entity.isNPC()) { + event.cancel() + } + } + @SubscribeEvent fun onRenderWorld(event: LorenzRenderWorldEvent) { if (!isEnabled() || !RiftAPI.inRiftRace) return From 2db5f13d4f5e7f004006c438dbf5a7f20b34e084 Mon Sep 17 00:00:00 2001 From: J10a1n15 <45315647+j10a1n15@users.noreply.github.com> Date: Sat, 5 Oct 2024 11:01:30 +0200 Subject: [PATCH 078/155] Remove: Mithril Powder from Powder Tracker (#2656) --- .../skyhanni/config/ConfigUpdaterMigrator.kt | 2 +- .../features/mining/PowderTrackerConfig.java | 3 --- .../mining/powdertracker/PowderChestReward.kt | 4 ---- .../mining/powdertracker/PowderTracker.kt | 15 ++++++++++++--- 4 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt b/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt index aa15461f5af2..7c41245fc7f8 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt +++ b/src/main/java/at/hannibal2/skyhanni/config/ConfigUpdaterMigrator.kt @@ -12,7 +12,7 @@ import com.google.gson.JsonPrimitive object ConfigUpdaterMigrator { val logger = LorenzLogger("ConfigMigration") - const val CONFIG_VERSION = 60 + const val CONFIG_VERSION = 61 fun JsonElement.at(chain: List, init: Boolean): JsonElement? { if (chain.isEmpty()) return this if (this !is JsonObject) return null diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/mining/PowderTrackerConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/mining/PowderTrackerConfig.java index 1c32cabc2e95..247da9b546d3 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/mining/PowderTrackerConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/mining/PowderTrackerConfig.java @@ -24,7 +24,6 @@ import static at.hannibal2.skyhanni.config.features.mining.PowderTrackerConfig.PowderDisplayEntry.GOLD_ESSENCE; import static at.hannibal2.skyhanni.config.features.mining.PowderTrackerConfig.PowderDisplayEntry.HARD_STONE; import static at.hannibal2.skyhanni.config.features.mining.PowderTrackerConfig.PowderDisplayEntry.JADE; -import static at.hannibal2.skyhanni.config.features.mining.PowderTrackerConfig.PowderDisplayEntry.MITHRIL_POWDER; import static at.hannibal2.skyhanni.config.features.mining.PowderTrackerConfig.PowderDisplayEntry.ROBOTRON; import static at.hannibal2.skyhanni.config.features.mining.PowderTrackerConfig.PowderDisplayEntry.RUBY; import static at.hannibal2.skyhanni.config.features.mining.PowderTrackerConfig.PowderDisplayEntry.SAPPHIRE; @@ -56,7 +55,6 @@ public class PowderTrackerConfig { public Property> textFormat = Property.of(new ArrayList<>(Arrays.asList( TOTAL_CHESTS, DOUBLE_POWDER, - MITHRIL_POWDER, GEMSTONE_POWDER, SPACER_1, DIAMOND_ESSENCE, @@ -78,7 +76,6 @@ public class PowderTrackerConfig { public enum PowderDisplayEntry implements HasLegacyId { TOTAL_CHESTS("§d852 Total chests Picked §7(950/h)", 2), DOUBLE_POWDER("§bx2 Powder: §aActive!", 3), - MITHRIL_POWDER("§b250,420 §aMithril Powder §7(350,000/h)", 4), GEMSTONE_POWDER("§b250,420 §dGemstone Powder §7(350,000/h)", 5), SPACER_1("", 6), DIAMOND_ESSENCE("§b129 §bDiamond Essence §7(600/h)", 7), diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderChestReward.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderChestReward.kt index b2b449563a5f..1a48a661a926 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderChestReward.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderChestReward.kt @@ -4,10 +4,6 @@ import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern enum class PowderChestReward(val displayName: String, pattern: String) { - MITHRIL_POWDER( - "§aMithril Powder", - " {4}§r§2Mithril Powder(?: §r§8x(?.*))?", - ), GEMSTONE_POWDER( "§dGemstone Powder", " {4}§r§dGemstone Powder(?: §r§8x(?.*))?", diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt index da9dbb2fbdab..38779224cf90 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt @@ -199,7 +199,7 @@ object PowderTracker { } for (reward in PowderChestReward.entries) { - if (reward == PowderChestReward.MITHRIL_POWDER || reward == PowderChestReward.GEMSTONE_POWDER) continue + if (reward == PowderChestReward.GEMSTONE_POWDER) continue reward.chatPattern.matchMatcher(msg) { tracker.modify { val count = it.rewards[reward] ?: 0 @@ -217,7 +217,6 @@ object PowderTracker { tracker.modify { val reward = when (event.powder) { HotmAPI.PowderType.GEMSTONE -> PowderChestReward.GEMSTONE_POWDER - HotmAPI.PowderType.MITHRIL -> PowderChestReward.MITHRIL_POWDER else -> return@modify } it.rewards.addOrPut(reward, event.amount) @@ -275,6 +274,17 @@ object PowderTracker { } newList } + + event.transform(61, "mining.powderTracker.textFormat") { element -> + val newList = JsonArray() + for (entry in element.asJsonArray) { + if (entry is JsonNull) continue + if (entry.asString.let { it != "MITHRIL_POWDER" }) { + newList.add(entry) + } + } + newList + } } @SubscribeEvent @@ -297,7 +307,6 @@ object PowderTracker { private fun drawDisplay(data: Data): List = buildList { calculate(data, gemstoneInfo, PowderChestReward.GEMSTONE_POWDER) - calculate(data, mithrilInfo, PowderChestReward.MITHRIL_POWDER) calculate(data, diamondEssenceInfo, PowderChestReward.DIAMOND_ESSENCE) calculate(data, goldEssenceInfo, PowderChestReward.GOLD_ESSENCE) calculateChest(data) From b3cb37f5459afce7c6234b5ab3a8891447eb587a Mon Sep 17 00:00:00 2001 From: martimavocado <39881008+martimavocado@users.noreply.github.com> Date: Sat, 5 Oct 2024 09:07:15 +0000 Subject: [PATCH 079/155] Improvement: Make visitor GUI clickable to tp to barn (#2658) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../features/garden/visitor/TimerConfig.java | 1 + .../garden/visitor/GardenVisitorTimer.kt | 26 ++++++++++++------- .../hannibal2/skyhanni/utils/RenderUtils.kt | 3 ++- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/garden/visitor/TimerConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/garden/visitor/TimerConfig.java index 32bff02debbe..a6b7e509e610 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/garden/visitor/TimerConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/garden/visitor/TimerConfig.java @@ -34,5 +34,6 @@ public class TimerConfig { @Expose @ConfigLink(owner = TimerConfig.class, field = "enabled") + // TODO rename to position public Position pos = new Position(-200, 40, false, true); } diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt index 3a69f2ece3b8..af31448d66e4 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorTimer.kt @@ -11,15 +11,17 @@ import at.hannibal2.skyhanni.features.garden.GardenAPI import at.hannibal2.skyhanni.features.garden.farming.GardenCropSpeed import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.test.command.ErrorManager +import at.hannibal2.skyhanni.utils.HypixelCommands import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.RegexUtils.matchFirst -import at.hannibal2.skyhanni.utils.RenderUtils.renderString +import at.hannibal2.skyhanni.utils.RenderUtils.renderRenderable import at.hannibal2.skyhanni.utils.SimpleTimeMark import at.hannibal2.skyhanni.utils.SoundUtils import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.TabListData import at.hannibal2.skyhanni.utils.TimeUtils import at.hannibal2.skyhanni.utils.TimeUtils.format +import at.hannibal2.skyhanni.utils.renderables.Renderable import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.time.Duration @@ -36,10 +38,10 @@ object GardenVisitorTimer { private val timePattern by RepoPattern.pattern( "garden.visitor.timer.time.new", - " Next Visitor: §r(?.*)" + " Next Visitor: §r(?.*)", ) - private var display = "" + private var display: Renderable? = null private var lastMillis = 0.seconds private var sixthVisitorArrivalTime = SimpleTimeMark.farPast() private var visitorJustArrived = false @@ -65,7 +67,7 @@ object GardenVisitorTimer { @SubscribeEvent fun onProfileJoin(event: ProfileJoinEvent) { - display = "" + display = null lastMillis = 0.seconds sixthVisitorArrivalTime = SimpleTimeMark.farPast() visitorJustArrived = false @@ -84,7 +86,7 @@ object GardenVisitorTimer { TabListData.getTabList().matchFirst(timePattern) { val timeInfo = group("info").removeColor() if (timeInfo == "Not Unlocked!") { - display = "§cVisitors not unlocked!" + display = Renderable.string("§cVisitors not unlocked!") return } if (timeInfo == "Queue Full!") { @@ -97,7 +99,7 @@ object GardenVisitorTimer { millis = TimeUtils.getDuration(timeInfo) } } ?: run { - display = "§cVisitor time info not in tab list" + display = createDisplayText("§cVisitor time info not in tab list") return } @@ -140,7 +142,7 @@ object GardenVisitorTimer { if (lastMillis == Duration.INFINITE) { ErrorManager.logErrorStateWithData( "Found Visitor Timer bug, reset value", "lastMillis was infinite", - "lastMillis" to lastMillis + "lastMillis" to lastMillis, ) lastMillis = 0.seconds } @@ -168,14 +170,20 @@ object GardenVisitorTimer { "Next in §$formatColor$formatDuration$extraSpeed" } val visitorLabel = if (visitorsAmount == 1) "visitor" else "visitors" - display = "§b$visitorsAmount $visitorLabel §7($next§7)" + display = createDisplayText("§b$visitorsAmount $visitorLabel §7($next§7)") } + private fun createDisplayText(text: String) = Renderable.clickAndHover( + text, + listOf("§eClick to teleport to the barn!"), + onClick = { HypixelCommands.teleportToPlot("barn") }, + ) + @SubscribeEvent fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { if (!isEnabled()) return - config.pos.renderString(display, posLabel = "Garden Visitor Timer") + config.pos.renderRenderable(display, posLabel = "Garden Visitor Timer") } @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt index cf2339bf3c42..309f17f686e2 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/RenderUtils.kt @@ -591,10 +591,11 @@ object RenderUtils { } fun Position.renderRenderable( - renderable: Renderable, + renderable: Renderable?, posLabel: String, addToGuiManager: Boolean = true, ) { + if (renderable == null) return GlStateManager.pushMatrix() val (x, y) = transform() Renderable.withMousePosition(x, y) { From 153f5e3895783397e01281218ab2218525c5da62 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 5 Oct 2024 11:20:37 +0200 Subject: [PATCH 080/155] code cleanup --- src/main/java/at/hannibal2/skyhanni/api/SkillAPI.kt | 2 +- .../skyhanni/features/commands/WikiManager.kt | 12 +++++++----- .../hannibal2/skyhanni/features/misc/TpsCounter.kt | 5 +++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/api/SkillAPI.kt b/src/main/java/at/hannibal2/skyhanni/api/SkillAPI.kt index b40255449226..0e35e602fc61 100644 --- a/src/main/java/at/hannibal2/skyhanni/api/SkillAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/api/SkillAPI.kt @@ -392,7 +392,7 @@ object SkillAPI { ChatUtils.chat("§bSkill Custom Goal Level") val map = storage?.filter { it.value.customGoalLevel != 0 } ?: return if (map.isEmpty()) { - ChatUtils.chat("§cYou haven't set any custom goals yet!") + ChatUtils.userError("You haven't set any custom goals yet!") } map.forEach { (skill, data) -> ChatUtils.chat("§e${skill.displayName}: §b${data.customGoalLevel}") diff --git a/src/main/java/at/hannibal2/skyhanni/features/commands/WikiManager.kt b/src/main/java/at/hannibal2/skyhanni/features/commands/WikiManager.kt index af56be8e7ba4..e72ad09c5481 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/commands/WikiManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/commands/WikiManager.kt @@ -50,7 +50,7 @@ object WikiManager { } if (message == ("/wikithis")) { val itemInHand = InventoryUtils.getItemInHand() ?: run { - ChatUtils.chat("§cYou must be holding an item to use this command!") + ChatUtils.userError("You must be holding an item to use this command!") return } wikiTheItem(itemInHand, config.autoOpenWiki) @@ -79,7 +79,7 @@ object WikiManager { fun otherWikiCommands(args: Array, useFandom: Boolean, wikithis: Boolean = false) { if (wikithis && !LorenzUtils.inSkyBlock) { - ChatUtils.chat("§cYou must be in SkyBlock to do this!") + ChatUtils.userError("You must be in SkyBlock to do this!") return } @@ -88,7 +88,7 @@ object WikiManager { if (wikithis) { val itemInHand = InventoryUtils.getItemInHand() ?: run { - ChatUtils.chat("§cYou must be holding an item to use this command!") + ChatUtils.userError("You must be holding an item to use this command!") return } wikiTheItem(itemInHand, false, useFandom = useFandom) @@ -102,8 +102,10 @@ object WikiManager { } fun sendWikiMessage( - search: String = "", displaySearch: String = search, - autoOpen: Boolean = config.autoOpenWiki, useFandom: Boolean = config.useFandom + search: String = "", + displaySearch: String = search, + autoOpen: Boolean = config.autoOpenWiki, + useFandom: Boolean = config.useFandom, ) { val wiki = if (useFandom) "SkyBlock Fandom Wiki" else "Official SkyBlock Wiki" val urlPrefix = if (useFandom) FANDOM_URL_PREFIX else OFFICIAL_URL_PREFIX diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/TpsCounter.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/TpsCounter.kt index 01d84daa3fdc..1515ee3dcbd1 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/TpsCounter.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/TpsCounter.kt @@ -74,7 +74,7 @@ object TpsCounter { fun tpsCommand() { if (display.isEmpty()) { - ChatUtils.chat("§cNo tps data available, make sure you have the setting on.") + ChatUtils.userError("No tps data available, make sure you have the setting on.") return } ChatUtils.chat(display) @@ -101,7 +101,8 @@ object TpsCounter { config.tpsDisplayPosition.renderString(display, posLabel = "Tps Display") } - private fun isEnabled() = LorenzUtils.onHypixel && config.tpsDisplay && + private fun isEnabled() = LorenzUtils.onHypixel && + config.tpsDisplay && (LorenzUtils.inSkyBlock || OutsideSbFeature.TPS_DISPLAY.isSelected()) @SubscribeEvent From b755ffe1a288282f9b29bf7b6c048d5e94c48e37 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Sat, 5 Oct 2024 11:24:08 +0200 Subject: [PATCH 081/155] Fixed trophy fish title (#2670) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../skyhanni/features/fishing/trophy/TrophyFishMessages.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishMessages.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishMessages.kt index 66ddde50b939..4a23e84e5d52 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishMessages.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishMessages.kt @@ -96,7 +96,7 @@ object TrophyFishMessages { } private fun sendTitle(displayName: String, displayRarity: String?, amount: Int) { - val text = "$displayName\n$displayRarity $amount!" + val text = "$displayName $displayRarity §8$amount§c!" LorenzUtils.sendTitle(text, 3.seconds, 2.8, 7f) } From 1c9fd3f55529461e32a341a71318b9b4664ef816 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Sat, 5 Oct 2024 11:27:30 +0200 Subject: [PATCH 082/155] Improvement: Mining Event Error Format (#2671) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../mining/eventtracker/MiningEventTracker.kt | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/eventtracker/MiningEventTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/eventtracker/MiningEventTracker.kt index a076ba68f0c3..d5ee14ec92e3 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/eventtracker/MiningEventTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/eventtracker/MiningEventTracker.kt @@ -200,7 +200,8 @@ object MiningEventTracker { canRequestAt = SimpleTimeMark.now() + 20.minutes if (LorenzUtils.debug) { ErrorManager.logErrorWithData( - e, "Receiving mining event data was unsuccessful", + e, + "Failed to load Mining Event data!", ) } return@launch @@ -208,11 +209,17 @@ object MiningEventTracker { val miningEventData = ConfigManager.gson.fromJson(data, MiningEventDataReceive::class.java) if (!miningEventData.success) { - ErrorManager.logErrorWithData( - Exception("PostFailure"), "Receiving mining event data was unsuccessful", - "cause" to miningEventData.cause, - "recievedData" to data - ) + if (data.toString() == "{}") { + ChatUtils.chat("§cFailed loading Mining Event data!\n" + + "Please wait until the server problem fixes itself! There is nothing else to do at the moment.") + } else { + ErrorManager.logErrorWithData( + Exception("miningEventData.success = false"), + "Failed to load Mining Event data!", + "cause" to miningEventData.cause, + "recievedData" to data + ) + } return@launch } apiErrorCount = 0 From 4b6789f6eb4bb40720bc0e445d701935d0cafdcb Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Sat, 5 Oct 2024 17:18:59 +0200 Subject: [PATCH 083/155] Backend: /shdebug + bz fetch (#2675) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../data/bazaar/HypixelBazaarFetcher.kt | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/main/java/at/hannibal2/skyhanni/data/bazaar/HypixelBazaarFetcher.kt b/src/main/java/at/hannibal2/skyhanni/data/bazaar/HypixelBazaarFetcher.kt index 13044b7c3151..c1a7af2890b4 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/bazaar/HypixelBazaarFetcher.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/bazaar/HypixelBazaarFetcher.kt @@ -2,6 +2,7 @@ package at.hannibal2.skyhanni.data.bazaar import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.ConfigManager +import at.hannibal2.skyhanni.events.DebugDataCollectEvent import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.features.inventory.bazaar.BazaarData import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule @@ -29,10 +30,29 @@ object HypixelBazaarFetcher { private const val HIDDEN_FAILED_ATTEMPTS = 3 var latestProductInformation = mapOf() + private var lastSuccessfulFetch = SimpleTimeMark.farPast() private var nextFetchTime = SimpleTimeMark.farPast() private var failedAttempts = 0 private var nextFetchIsManual = false + @SubscribeEvent + fun onDebugDataCollect(event: DebugDataCollectEvent) { + event.title("Bazaar Fetching") + + val data = listOf( + "failedAttempts: $failedAttempts", + "nextFetchIsManual: $nextFetchIsManual", + "nextFetchTime: ${nextFetchTime.timeUntil()}", + "lastSuccessfulFetch: ${lastSuccessfulFetch.passedSince()}", + ) + + if (failedAttempts == 0) { + event.addIrrelevant(data) + } else { + event.addData(data) + } + } + @SubscribeEvent fun onTick(event: LorenzTickEvent) { if (!canFetch()) return @@ -51,6 +71,7 @@ object HypixelBazaarFetcher { if (response.success) { latestProductInformation = process(response.products) failedAttempts = 0 + lastSuccessfulFetch = SimpleTimeMark.now() } else { val rawResponse = jsonResponse.toString() onError(fetchType, Exception("success=false, cause=${response.cause}"), rawResponse) From 79f8298760e1d9fb982106296f39352bdddc03ad Mon Sep 17 00:00:00 2001 From: jani270 <69345714+jani270@users.noreply.github.com> Date: Sat, 5 Oct 2024 17:30:42 +0200 Subject: [PATCH 084/155] Improvement: Add Search Tag to the Account Upgrade Reminder (#2676) --- .../at/hannibal2/skyhanni/config/features/misc/MiscConfig.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/misc/MiscConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/misc/MiscConfig.java index df1ae1da5c04..0869262959c0 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/misc/MiscConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/misc/MiscConfig.java @@ -15,6 +15,7 @@ import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorDraggableList; import io.github.notenoughupdates.moulconfig.annotations.ConfigLink; import io.github.notenoughupdates.moulconfig.annotations.ConfigOption; +import io.github.notenoughupdates.moulconfig.annotations.SearchTag; import io.github.notenoughupdates.moulconfig.observer.Property; import java.util.ArrayList; @@ -226,6 +227,7 @@ public class MiscConfig { @Expose @ConfigOption(name = "Account Upgrade Reminder", desc = "Remind you to claim community shop account and profile upgrades when complete.") @ConfigEditorBoolean + @SearchTag("Elizabeth Community Center") @FeatureToggle public boolean accountUpgradeReminder = true; From 86c3700cfd11ba53da18bff1987c69d19de17b81 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sat, 5 Oct 2024 17:45:37 +0200 Subject: [PATCH 085/155] Version 0.27 Beta 15 --- docs/CHANGELOG.md | 19 +++++++++++++++++++ root.gradle.kts | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index ce469091517f..050f6c9bd7af 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -183,6 +183,7 @@ + Added support for using the Pickobulus ability for the Mineshaft Pity Display. - Empa (https://github.com/hannibal002/SkyHanni/pull/2540) + Added Area Navigation support to Glacite Tunnels. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2544) + Updated wording in mineshaft pity breakdown ("efficient miner" -> "spread"). - luna (https://github.com/hannibal002/SkyHanni/pull/2633) ++ Improved the wording of the Mining Event data error chat message. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2671) #### Diana Improvements @@ -234,6 +235,7 @@ + Added the required chocolate amount to the tooltip of milestone rabbits in Hoppity's Collection. - Daveed (https://github.com/hannibal002/SkyHanni/pull/2523) + Improved the responsiveness of Hoppity Chat Compacting. - Daveed (https://github.com/hannibal002/SkyHanni/pull/2488) + Added the ability to see how many duplicates you have previously found in Hoppity messages. - Daveed (https://github.com/hannibal002/SkyHanni/pull/2556) ++ Improved the formatting of the Hoppity Event Stats card. - Daveed (https://github.com/hannibal002/SkyHanni/pull/2638) #### Combat Improvements @@ -256,12 +258,14 @@ + Made the waypoint to the middle of the plot for Pest Waypoint optional (off by default). - Luna (https://github.com/hannibal002/SkyHanni/pull/2469) + Reduced one click for supercrafting visitor materials by using `/viewrecipe` instead of `/recipe` when using the Shopping List button. - Miestiek (https://github.com/hannibal002/SkyHanni/pull/2505) + Added ignored crops for the Farming Lane feature. - martimavocado (https://github.com/hannibal002/SkyHanni/pull/2622) ++ Made the Visitor Timer GUI clickable to teleport to the Barn. - martimavocado (https://github.com/hannibal002/SkyHanni/pull/2658) #### Rift Improvements + Updated the description of the config for Enigma Soul Waypoints to help find the Rift Guide in the game. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2433) + Added Path Finder to Enigma Soul waypoints in the Rift. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2515) + Added the option to choose the color of the Living Metal Helper highlight. - MTOnline (https://github.com/hannibal002/SkyHanni/pull/2616) ++ Added an option to hide players while in Gunther's Rift Race. - MTOnline (https://github.com/hannibal002/SkyHanni/pull/2655) #### Dungeon Improvements @@ -287,6 +291,7 @@ + Added a warning in chat when the computer's time is inaccurate, along with a tutorial on how to fix it. - j10a1n15 (https://github.com/hannibal002/SkyHanni/pull/2623) + Improved the way pathfinding lines are rendered. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2634) + Automatically starts pathfinding after clicking on SkyHanni reminder chat messages about Carnival Reminder, Hoppity NPC, City Project, and account/profile upgrades. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2635) ++ Greatly improved performance by optimizing SkyHanni Chroma support for Patcher Font Renderer. - nopo (https://github.com/hannibal002/SkyHanni/pull/2666) ### Fixes @@ -329,6 +334,7 @@ + Fixed pair detection. + Fixed enchanting XP detection. + Fixed Minister in Calendar Perk description sometimes not using the gray color. - j10a1n15 (https://github.com/hannibal002/SkyHanni/pull/2632) ++ Fixed highlighting items in one's own inventory for some Bazaar features, e.g., in the "click to re-order" feature. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2640) #### Mining Fixes @@ -355,6 +361,8 @@ + Fixed the Mineshaft Pity Counter not working in the Great Glacite Lake. - martimavocado (https://github.com/hannibal002/SkyHanni/pull/2565) + Fixed Powder Tracker inaccuracies. - Empa (https://github.com/hannibal002/SkyHanni/pull/2591) + Fixed Jasper gemstones not being addressed in the Powder Mining filter. - Daveed (https://github.com/hannibal002/SkyHanni/pull/2618) ++ Fixed the King Talisman Tracker sometimes not displaying the correct data. - martimavocado (https://github.com/hannibal002/SkyHanni/pull/2663) ++ Fixed the Powder Tracker not tracking items correctly. - HiZe (https://github.com/hannibal002/SkyHanni/pull/2645) #### Scoreboard Fixes @@ -394,6 +402,7 @@ + Fixed an error with Patcher Coordinate Detection from chat. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2410) + Fixed ultimate enchants not showing in `/show`. - Vixid (https://github.com/hannibal002/SkyHanni/pull/2465) ++ Fixed being unable to shift-click on chat messages. - nopo (https://github.com/hannibal002/SkyHanni/pull/2650) #### Commands Fixes @@ -409,6 +418,7 @@ + Fixed the reputation helper not updating after a sack update. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2439) + Fixed Heavy Pearls sometimes not being highlighted. - Luna (https://github.com/hannibal002/SkyHanni/pull/2479) ++ Added a delay to the Pablo helper message so it appears after he finishes his dialogue. - Luna (https://github.com/hannibal002/SkyHanni/pull/2662) #### Garden Fixes @@ -422,6 +432,9 @@ + Fixed a case where the Broodmother countdown could be wildly inaccurate. - MTOnline (https://github.com/hannibal002/SkyHanni/pull/2513) + Fixed Flare Display spamming chat with negative values when the server is lagging. - Stella (https://github.com/hannibal002/SkyHanni/pull/2567) + Fixed a case where the Imminent stage did not update the Broodmother countdown. - MTOnline (https://github.com/hannibal002/SkyHanni/pull/2602)v ++ Fixed some Islands Dummy mob types not being detected by the Damage Indicator. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2646) ++ Fixed the Ender Node Tracker not detecting some items. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2644) ++ Fixed Flare Expiration warnings not appearing in chat or as a title. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2643) #### The Carnival Fixes @@ -431,6 +444,7 @@ #### Fishing Fixes + Fixed error messages while using the Chum Bucket Hider feature. - nea89 (https://github.com/hannibal002/SkyHanni/pull/2587) ++ Fixed the Trophy Fish Title displaying an undefined character in the format. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2670) #### Rift Fixes @@ -459,6 +473,7 @@ + Fixed Area Navigation distances to player being incorrect. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2634) + Fixed item trackers displaying removed item names incorrectly. - CalMWolfs (https://github.com/hannibal002/SkyHanni/pull/2620) + Fixed some messages from Pablo NPC not being detected. - Luna (https://github.com/hannibal002/SkyHanni/pull/2636) ++ Fixed SkyHanni re-downloading the repository on every launch. - nopo (https://github.com/hannibal002/SkyHanni/pull/2669) ### Technical Details @@ -530,6 +545,9 @@ + Added `detekt` runner to the build process. - Daveed & nea (https://github.com/hannibal002/SkyHanni/pull/2547) + Added Clock Offset Millis using an NTP server. - j10a1n15 (https://github.com/hannibal002/SkyHanni/pull/2623) + Added `EntityMovementData.onNextTeleport()` logic, which triggers a runnable after the world has changed or the player has teleported. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2635) ++ Added Bazaar Fetch information to `/shdebug`. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2675) ++ Removed the password from the download source check. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2649) ++ Added a missing SkyBlock check for debug commands `/shtrackparticles` and `/shtracksounds`. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2641) ### Removed Features @@ -539,6 +557,7 @@ + Replaced then with a draggable list of different Hoppity collection highlight options. + Removed "Forge GfS". - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2564) + Hypixel now pulls directly from sacks when using the forge. ++ Removed Mithril Powder from the Powder Tracker. - j10a1n15 (https://github.com/hannibal002/SkyHanni/pull/2656) ## Version 0.26 diff --git a/root.gradle.kts b/root.gradle.kts index 9346a78f9f92..58285a7012c2 100644 --- a/root.gradle.kts +++ b/root.gradle.kts @@ -14,7 +14,7 @@ plugins { allprojects { group = "at.hannibal2.skyhanni" - version = "0.27.Beta.14" + version = "0.27.Beta.15" repositories { mavenCentral() mavenLocal() From df1bff9338410828ec566f28483dee0938463165 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Sun, 6 Oct 2024 10:54:42 +0200 Subject: [PATCH 086/155] Improvement: Working on scoreboard errors again (#2672) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../skyhanni/features/combat/SpidersDenAPI.kt | 5 +- .../gui/customscoreboard/CustomScoreboard.kt | 18 ++--- .../customscoreboard/CustomScoreboardUtils.kt | 11 +-- .../customscoreboard/ScoreboardElements.kt | 69 +++++++------------ .../gui/customscoreboard/ScoreboardEvent.kt | 3 +- .../customscoreboard/UnknownLinesHandler.kt | 60 +++++++++++++--- 6 files changed, 88 insertions(+), 78 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/combat/SpidersDenAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/combat/SpidersDenAPI.kt index 7986c55e9d3a..af1dd8430186 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/combat/SpidersDenAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/combat/SpidersDenAPI.kt @@ -1,12 +1,11 @@ package at.hannibal2.skyhanni.features.combat -import at.hannibal2.skyhanni.features.gui.customscoreboard.CustomScoreboard +import at.hannibal2.skyhanni.data.ScoreboardData import at.hannibal2.skyhanni.features.gui.customscoreboard.ScoreboardPattern import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.utils.RegexUtils.matches @SkyHanniModule object SpidersDenAPI { - private fun getSbLines(): List = CustomScoreboard.activeLines - fun isAtTopOfNest(): Boolean = getSbLines().any { ScoreboardPattern.broodmotherPattern.matches(it) } + fun isAtTopOfNest(): Boolean = ScoreboardData.sidebarLinesFormatted.any { ScoreboardPattern.broodmotherPattern.matches(it) } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/CustomScoreboard.kt b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/CustomScoreboard.kt index c9fb4b15f821..8a1d7b50de45 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/CustomScoreboard.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/CustomScoreboard.kt @@ -50,11 +50,6 @@ object CustomScoreboard { private var cache = emptyList() private const val GUI_NAME = "Custom Scoreboard" - // Cached scoreboard data, only update after no change for 300ms - var activeLines = emptyList() - - // Most recent scoreboard state, not in use until cached - private var mostRecentLines = emptyList() private var lastScoreboardUpdate = SimpleTimeMark.farFuture() @SubscribeEvent @@ -115,14 +110,13 @@ object CustomScoreboard { // We want to update the scoreboard as soon as we have new data, not 5 ticks delayed var dirty = false - if (lastScoreboardUpdate.passedSince() > 300.milliseconds) { - activeLines = mostRecentLines + if (lastScoreboardUpdate.passedSince() > 250.milliseconds) { lastScoreboardUpdate = SimpleTimeMark.farFuture() dirty = true } // Creating the lines - if (event.isMod(5) || dirty) { + if (dirty) { display = createLines().removeEmptyLinesFromEdges() if (TabListData.fullyLoaded) { cache = display.toList() @@ -135,7 +129,6 @@ object CustomScoreboard { @SubscribeEvent fun onScoreboardChange(event: ScoreboardUpdateEvent) { - mostRecentLines = event.scoreboard lastScoreboardUpdate = SimpleTimeMark.now() } @@ -160,12 +153,12 @@ object CustomScoreboard { private fun addAllNonSkyBlockLines() = buildList { addAll(ScoreboardElement.TITLE.getVisiblePair()) - addAll(activeLines.map { it to HorizontalAlignment.LEFT }) + addAll(ScoreboardData.sidebarLinesFormatted.map { it to HorizontalAlignment.LEFT }) } private fun addDefaultSkyBlockLines() = buildList { add(ScoreboardData.objectiveTitle to displayConfig.titleAndFooter.alignTitleAndFooter) - addAll(activeLines.map { it to HorizontalAlignment.LEFT }) + addAll(ScoreboardData.sidebarLinesFormatted.map { it to HorizontalAlignment.LEFT }) } private fun addCustomSkyBlockLines() = buildList { @@ -175,7 +168,8 @@ object CustomScoreboard { if ( informationFilteringConfig.hideConsecutiveEmptyLines && - lines.first().first == "" && lastOrNull()?.first?.isEmpty() == true + lines.first().first == "" && + lastOrNull()?.first?.isEmpty() == true ) { continue } diff --git a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/CustomScoreboardUtils.kt b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/CustomScoreboardUtils.kt index 4cfc403c421f..99fdc4f3fcf6 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/CustomScoreboardUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/CustomScoreboardUtils.kt @@ -3,6 +3,7 @@ package at.hannibal2.skyhanni.features.gui.customscoreboard import at.hannibal2.skyhanni.config.features.gui.customscoreboard.DisplayConfig import at.hannibal2.skyhanni.data.BitsAPI import at.hannibal2.skyhanni.data.HypixelData +import at.hannibal2.skyhanni.data.ScoreboardData import at.hannibal2.skyhanni.features.bingo.BingoAPI import at.hannibal2.skyhanni.features.gui.customscoreboard.CustomScoreboard.displayConfig import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators @@ -27,7 +28,7 @@ object CustomScoreboardUtils { fun getProfileTypeSymbol() = when { HypixelData.ironman -> "§7♲ " HypixelData.stranded -> "§a☀ " - HypixelData.bingo -> CustomScoreboard.activeLines.firstNotNullOfOrNull { + HypixelData.bingo -> ScoreboardData.sidebarLinesFormatted.firstNotNullOfOrNull { BingoAPI.getIconFromScoreboard(it)?.plus(" ") } ?: "§e❤ " @@ -43,7 +44,7 @@ object CustomScoreboardUtils { internal fun String.formatNum() = this.formatDouble().formatNum() - internal fun getMotes() = getGroupFromPattern(CustomScoreboard.activeLines, ScoreboardPattern.motesPattern, "motes") + internal fun getMotes() = getGroupFromPattern(ScoreboardData.sidebarLinesFormatted, ScoreboardPattern.motesPattern, "motes") internal fun getBank() = getGroupFromPattern(TabListData.getTabList(), ScoreboardPattern.bankPattern, "bank") internal fun getBits() = BitsAPI.bits.coerceAtLeast(0).formatNum() @@ -57,15 +58,15 @@ object CustomScoreboardUtils { } internal fun getCopper() = - getGroupFromPattern(CustomScoreboard.activeLines, ScoreboardPattern.copperPattern, "copper") + getGroupFromPattern(ScoreboardData.sidebarLinesFormatted, ScoreboardPattern.copperPattern, "copper") internal fun getGems() = getGroupFromPattern(TabListData.getTabList(), ScoreboardPattern.gemsPattern, "gems") internal fun getHeat() = - getGroupFromPattern(CustomScoreboard.activeLines, ScoreboardPattern.heatPattern, "heat") + getGroupFromPattern(ScoreboardData.sidebarLinesFormatted, ScoreboardPattern.heatPattern, "heat") internal fun getNorthStars() = - getGroupFromPattern(CustomScoreboard.activeLines, ScoreboardPattern.northstarsPattern, "northstars") + getGroupFromPattern(ScoreboardData.sidebarLinesFormatted, ScoreboardPattern.northstarsPattern, "northstars") class UndetectedScoreboardLines(message: String) : Exception(message) diff --git a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardElements.kt b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardElements.kt index 0289a3c81862..769184077b09 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardElements.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardElements.kt @@ -39,8 +39,6 @@ import at.hannibal2.skyhanni.features.gui.customscoreboard.CustomScoreboardUtils import at.hannibal2.skyhanni.features.gui.customscoreboard.CustomScoreboardUtils.getHeat import at.hannibal2.skyhanni.features.gui.customscoreboard.CustomScoreboardUtils.getMotes import at.hannibal2.skyhanni.features.gui.customscoreboard.CustomScoreboardUtils.getNorthStars -import at.hannibal2.skyhanni.test.command.ErrorManager -import at.hannibal2.skyhanni.utils.CollectionUtils.editCopy import at.hannibal2.skyhanni.utils.CollectionUtils.nextAfter import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.inAdvancedMiningIsland @@ -50,41 +48,25 @@ import at.hannibal2.skyhanni.utils.NumberUtil.percentageColor import at.hannibal2.skyhanni.utils.RegexUtils.anyMatches import at.hannibal2.skyhanni.utils.RegexUtils.matches import at.hannibal2.skyhanni.utils.RenderUtils.HorizontalAlignment +import at.hannibal2.skyhanni.utils.SimpleTimeMark import at.hannibal2.skyhanni.utils.SkyBlockTime import at.hannibal2.skyhanni.utils.StringUtils.firstLetterUppercase import at.hannibal2.skyhanni.utils.StringUtils.pluralize import at.hannibal2.skyhanni.utils.TabListData -import at.hannibal2.skyhanni.utils.TimeLimitedSet import at.hannibal2.skyhanni.utils.TimeUtils.format import at.hannibal2.skyhanni.utils.TimeUtils.formatted import kotlin.time.Duration.Companion.seconds -internal var confirmedUnknownLines = listOf() -internal var unconfirmedUnknownLines = listOf() -internal var unknownLinesSet = TimeLimitedSet(1.seconds) { onRemoval(it) } - -private fun onRemoval(line: String) { - if (!LorenzUtils.inSkyBlock) return - if (!unconfirmedUnknownLines.contains(line)) return - if (line !in unconfirmedUnknownLines) return - unconfirmedUnknownLines = unconfirmedUnknownLines.filterNot { it == line } - confirmedUnknownLines = confirmedUnknownLines.editCopy { add(line) } - if (!config.unknownLinesWarning) return - val pluralize = pluralize(confirmedUnknownLines.size, "unknown line", withNumber = true) - val message = "CustomScoreboard detected $pluralize" - ErrorManager.logErrorWithData( - CustomScoreboardUtils.UndetectedScoreboardLines(message), - message, - "Unknown Lines" to confirmedUnknownLines, - "Island" to LorenzUtils.skyBlockIsland, - "Area" to HypixelData.skyBlockArea, - "Full Scoreboard" to CustomScoreboard.activeLines, - noStackTrace = true, - betaOnly = true, - ) -} +internal var allUnknownLines = listOf() +internal var lastRecentAlarmWarning = SimpleTimeMark.farPast() + +internal fun recentUnknownLines() = allUnknownLines.filter { it.lastFound.passedSince() < 3.seconds } -internal var amountOfUnknownLines = 0 +internal class UnknownLine(val line: String) { + val firstFound = SimpleTimeMark.now() + var lastFound = SimpleTimeMark.now() + var lastWarned = SimpleTimeMark.farPast() +} enum class ScoreboardElement( private val displayPair: () -> List, @@ -389,7 +371,7 @@ private fun getPurseDisplayPair(): List { var purse = PurseAPI.currentPurse.formatNum() if (!displayConfig.hideCoinsDifference) { - val earned = getGroupFromPattern(CustomScoreboard.activeLines, PurseAPI.coinsPattern, "earned") + val earned = getGroupFromPattern(ScoreboardData.sidebarLinesFormatted, PurseAPI.coinsPattern, "earned") if (earned != null) purse += " §7(§e+$earned§7)§6" } @@ -492,7 +474,7 @@ private fun getHeatDisplayPair(): List { } private fun getHeatShowWhen() = inAnyIsland(IslandType.CRYSTAL_HOLLOWS) && - CustomScoreboard.activeLines.any { ScoreboardPattern.heatPattern.matches(it) } + ScoreboardData.sidebarLinesFormatted.any { ScoreboardPattern.heatPattern.matches(it) } private fun getColdDisplayPair(): List { val cold = -MiningAPI.cold @@ -507,7 +489,7 @@ private fun getColdDisplayPair(): List { } private fun getColdShowWhen() = inAnyIsland(IslandType.DWARVEN_MINES, IslandType.MINESHAFT) && - CustomScoreboard.activeLines.any { ScoreboardPattern.coldPattern.matches(it) } + ScoreboardData.sidebarLinesFormatted.any { ScoreboardPattern.coldPattern.matches(it) } private fun getNorthStarsDisplayPair(): List { val northStars = getNorthStars()?.formatNum() ?: "0" @@ -550,7 +532,7 @@ private fun getIslandDisplayPair() = private fun getLocationDisplayPair() = buildList { HypixelData.skyBlockAreaWithSymbol?.let { add(it to HorizontalAlignment.LEFT) } - CustomScoreboard.activeLines.firstOrNull { ScoreboardPattern.plotPattern.matches(it) } + ScoreboardData.sidebarLinesFormatted.firstOrNull { ScoreboardPattern.plotPattern.matches(it) } ?.let { add(it to HorizontalAlignment.LEFT) } } @@ -568,12 +550,12 @@ fun getPlayerAmountDisplayPair() = buildList { private fun getVisitDisplayPair() = listOf( - CustomScoreboard.activeLines.first { ScoreboardPattern.visitingPattern.matches(it) } to + ScoreboardData.sidebarLinesFormatted.first { ScoreboardPattern.visitingPattern.matches(it) } to HorizontalAlignment.LEFT, ) private fun getVisitShowWhen() = - CustomScoreboard.activeLines.any { ScoreboardPattern.visitingPattern.matches(it) } + ScoreboardData.sidebarLinesFormatted.any { ScoreboardPattern.visitingPattern.matches(it) } private fun getDateDisplayPair() = listOf( @@ -582,7 +564,7 @@ private fun getDateDisplayPair() = private fun getTimeDisplayPair(): List { val symbol = - getGroupFromPattern(CustomScoreboard.activeLines, ScoreboardPattern.timePattern, "symbol") ?: "" + getGroupFromPattern(ScoreboardData.sidebarLinesFormatted, ScoreboardPattern.timePattern, "symbol") ?: "" return listOf( "§7" + SkyBlockTime.now() .formatted( @@ -671,7 +653,7 @@ private fun getCookieShowWhen(): Boolean { } private fun getObjectiveDisplayPair() = buildList { - val formattedLines = CustomScoreboard.activeLines + val formattedLines = ScoreboardData.sidebarLinesFormatted val objective = formattedLines.firstOrNull { ScoreboardPattern.objectivePattern.matches(it) } if (objective != null) { add(objective to HorizontalAlignment.LEFT) @@ -690,7 +672,7 @@ private fun getObjectiveDisplayPair() = buildList { } private fun getObjectiveShowWhen(): Boolean = - ScoreboardPattern.objectivePattern.anyMatches(CustomScoreboard.activeLines) + ScoreboardPattern.objectivePattern.anyMatches(ScoreboardData.sidebarLinesFormatted) private fun getSlayerDisplayPair(): List = buildList { add((if (SlayerAPI.hasActiveSlayerQuest()) "Slayer Quest" else "") to HorizontalAlignment.LEFT) @@ -860,15 +842,10 @@ private fun getFooterDisplayPair(): List = listOf( ).flatten() private fun getExtraDisplayPair(): List { - if (unconfirmedUnknownLines.isEmpty()) return listOf("" to HorizontalAlignment.LEFT) - amountOfUnknownLines = unconfirmedUnknownLines.size + val lines = recentUnknownLines() + if (lines.isEmpty()) return listOf("" to HorizontalAlignment.LEFT) - return listOf("§cUndetected Lines:" to HorizontalAlignment.LEFT) + unconfirmedUnknownLines.map { it to HorizontalAlignment.LEFT } + return listOf("§cUndetected Lines:" to HorizontalAlignment.LEFT) + lines.map { it.line to HorizontalAlignment.LEFT } } -private fun getExtraShowWhen(): Boolean { - if (unconfirmedUnknownLines.isEmpty()) { - amountOfUnknownLines = 0 - } - return unconfirmedUnknownLines.isNotEmpty() -} +private fun getExtraShowWhen(): Boolean = recentUnknownLines().isNotEmpty() diff --git a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardEvent.kt b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardEvent.kt index 6531d5158d75..3d8251dfbb63 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardEvent.kt @@ -2,6 +2,7 @@ package at.hannibal2.skyhanni.features.gui.customscoreboard import at.hannibal2.skyhanni.data.HypixelData import at.hannibal2.skyhanni.data.IslandType +import at.hannibal2.skyhanni.data.ScoreboardData import at.hannibal2.skyhanni.data.model.TabWidget import at.hannibal2.skyhanni.features.combat.SpidersDenAPI.isAtTopOfNest import at.hannibal2.skyhanni.features.dungeon.DungeonAPI @@ -29,7 +30,7 @@ import at.hannibal2.skyhanni.features.gui.customscoreboard.ScoreboardPattern as * because they are visible for a maximum of like 1 minute every 5 days and ~12 hours. */ -private fun getSbLines(): List = CustomScoreboard.activeLines +private fun getSbLines(): List = ScoreboardData.sidebarLinesFormatted enum class ScoreboardEvent( private val displayLine: () -> List, diff --git a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/UnknownLinesHandler.kt b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/UnknownLinesHandler.kt index 38612f29703b..0dff1f4933dd 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/UnknownLinesHandler.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/UnknownLinesHandler.kt @@ -1,15 +1,22 @@ package at.hannibal2.skyhanni.features.gui.customscoreboard import at.hannibal2.skyhanni.data.BitsAPI +import at.hannibal2.skyhanni.data.HypixelData import at.hannibal2.skyhanni.data.PurseAPI +import at.hannibal2.skyhanni.data.ScoreboardData import at.hannibal2.skyhanni.features.misc.ServerRestartTitle import at.hannibal2.skyhanni.features.rift.area.stillgorechateau.RiftBloodEffigies +import at.hannibal2.skyhanni.test.command.ErrorManager import at.hannibal2.skyhanni.utils.ChatUtils +import at.hannibal2.skyhanni.utils.CollectionUtils.editCopy import at.hannibal2.skyhanni.utils.CollectionUtils.nextAfter import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.RegexUtils.matches +import at.hannibal2.skyhanni.utils.SimpleTimeMark import at.hannibal2.skyhanni.utils.StringUtils.removeResets import java.util.regex.Pattern +import kotlin.time.Duration.Companion.minutes +import kotlin.time.Duration.Companion.seconds import at.hannibal2.skyhanni.features.gui.customscoreboard.ScoreboardPattern as SbPattern object UnknownLinesHandler { @@ -133,7 +140,7 @@ object UnknownLinesHandler { private var remoteOnlyPatternsAdded = false fun handleUnknownLines() { - val sidebarLines = CustomScoreboard.activeLines + val sidebarLines = ScoreboardData.sidebarLinesFormatted var unknownLines = sidebarLines.map { it.removeResets() }.filter { it.isNotBlank() }.filter { it.trim().length > 3 } @@ -205,19 +212,50 @@ object UnknownLinesHandler { /* * Handle broken scoreboard lines */ - confirmedUnknownLines = confirmedUnknownLines.filter { it in unknownLines } + if (unknownLines.isEmpty()) return - unknownLines = unknownLines.filter { it !in confirmedUnknownLines } - - unconfirmedUnknownLines = unknownLines - - unknownLines = unknownLines.filter { it !in unknownLinesSet } + for (line in unknownLines) { + val unknownLine = allUnknownLines.firstOrNull { it.line == line } + if (unknownLine == null) { + if (LorenzUtils.inSkyBlock) { + ChatUtils.debug("Unknown Scoreboard line: '$line'") + } + allUnknownLines = allUnknownLines.editCopy { + add(UnknownLine(line)) + } + } else { + unknownLine.lastFound = SimpleTimeMark.now() + val firstFoundSince = unknownLine.firstFound.passedSince() + val lastWarnedSince = unknownLine.lastWarned.passedSince() + if (firstFoundSince > 3.seconds && lastWarnedSince > 30.minutes) { + unknownLine.lastWarned = SimpleTimeMark.now() + warn(line, "same line active for 3 seconds") + continue + } + } + } - unknownLines.forEach { - if (LorenzUtils.inSkyBlock) { - ChatUtils.debug("Unknown Scoreboard line: '$it'") + if (lastRecentAlarmWarning.passedSince() > 30.minutes) { + val recentAlarms = allUnknownLines.filter { it.firstFound.passedSince() < 6.seconds } + if (recentAlarms.size >= 5) { + warn(recentAlarms.first().line, "5 different lines in 5 seconds") } - unknownLinesSet.add(it) } } + + private fun warn(line: String, reason: String) { + ErrorManager.logErrorWithData( + // line inclucded in chat message to not cache a previous message + CustomScoreboardUtils.UndetectedScoreboardLines(line), + "CustomScoreboard detected a unknown line: '$line'", + "Unknown Line" to line, + "reason" to reason, + "Island" to LorenzUtils.skyBlockIsland, + "Area" to HypixelData.skyBlockArea, + "Full Scoreboard" to ScoreboardData.sidebarLinesFormatted, + noStackTrace = true, + betaOnly = true, + ) + + } } From a07ad3ee5b80d214fa62583817309f1ddc1c2c64 Mon Sep 17 00:00:00 2001 From: J10a1n15 <45315647+j10a1n15@users.noreply.github.com> Date: Sun, 6 Oct 2024 10:58:03 +0200 Subject: [PATCH 087/155] Fix: Powder Tracker IndexOutOfBoundsException (#2678) --- .../mining/powdertracker/PowderChestReward.kt | 2 ++ .../mining/powdertracker/PowderTracker.kt | 32 +++++++++++++------ 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderChestReward.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderChestReward.kt index 1a48a661a926..ac824abd38f8 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderChestReward.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderChestReward.kt @@ -115,6 +115,8 @@ enum class PowderChestReward(val displayName: String, pattern: String) { "§9FTX 3070", " {4}§r§9FTX 3070(?: §r§8x(?.*))?", ), + + // TODO: Fix typo ELECTRON_TRANSIMTTER( "§9Electron Transmitter", " {4}§r§9Electron Transmitter(?: §r§8x(?.*))?", diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt index 38779224cf90..4c27f195a895 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt @@ -140,8 +140,7 @@ object PowderTracker { } } - private val tracker = - SkyHanniTracker("Powder Tracker", { Data() }, { it.powderTracker }) { formatDisplay(drawDisplay(it)) } + private val tracker = SkyHanniTracker("Powder Tracker", { Data() }, { it.powderTracker }) { formatDisplay(drawDisplay(it)) } class Data : TrackerData() { @@ -316,13 +315,11 @@ object PowderTracker { addSearchString("§d${data.totalChestPicked.addSeparators()} Total Chests Picked §7($chestPerHour/h)") addSearchString("§bDouble Powder: ${if (doublePowder) "§aActive! §7($powderTimer)" else "§cInactive!"}") - val entries = PowderChestReward.entries val rewards = data.rewards - addPerHour(rewards, entries[0], mithrilInfo) - addPerHour(rewards, entries[1], gemstoneInfo) + addPerHour(rewards, PowderChestReward.GEMSTONE_POWDER, gemstoneInfo) addSearchString("") - addPerHour(rewards, entries[46], diamondEssenceInfo) - addPerHour(rewards, entries[47], goldEssenceInfo) + addPerHour(rewards, PowderChestReward.DIAMOND_ESSENCE, diamondEssenceInfo) + addPerHour(rewards, PowderChestReward.GOLD_ESSENCE, goldEssenceInfo) addSearchString("") val hardStonePerHour = format(hardStoneInfo.perHour) addSearchString("§b${data.totalHardStoneCompacted.addSeparators()} §fHard Stone §bCompacted §7($hardStonePerHour/h)", "Hard Stone") @@ -347,7 +344,14 @@ object PowderTracker { } var totalParts = 0L - for (reward in entries.subList(26, 32)) { // robots part + for (reward in listOf( + PowderChestReward.FTX_3070, + PowderChestReward.ELECTRON_TRANSIMTTER, + PowderChestReward.ROBOTRON_REFLECTOR, + PowderChestReward.SUPERLITE_MOTOR, + PowderChestReward.CONTROL_SWITCH, + PowderChestReward.SYNTHETIC_HEART, + )) { val count = rewards.getOrDefault(reward, 0) totalParts += count val name = reward.displayName @@ -362,7 +366,17 @@ object PowderTracker { val blueEgg = rewards.getOrDefault(PowderChestReward.BLUE_GOBLIN_EGG, 0) addSearchString("§3$blueEgg§7-§c$redEgg§7-§e$yellowEgg§f-§a$greenEgg§f-§9$goblinEgg §fGoblin Egg") - for (reward in entries.subList(37, 46)) { + for (reward in listOf( + PowderChestReward.WISHING_COMPASS, + PowderChestReward.SLUDGE_JUICE, + PowderChestReward.ASCENSION_ROPE, + PowderChestReward.TREASURITE, + PowderChestReward.JUNGLE_HEART, + PowderChestReward.PICKONIMBUS_2000, + PowderChestReward.YOGGIE, + PowderChestReward.PREHISTORIC_EGG, + PowderChestReward.OIL_BARREL, + )) { val count = rewards.getOrDefault(reward, 0).addSeparators() val name = reward.displayName addSearchString("§b$count $name", name) From 9dd04711a4e3ca577ad3b41891aaa5eb7c403197 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Sun, 6 Oct 2024 13:28:54 +0200 Subject: [PATCH 088/155] Fix: Account upgrade warning (#2674) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../skyhanni/features/fame/UpgradeReminder.kt | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/main/java/at/hannibal2/skyhanni/features/fame/UpgradeReminder.kt b/src/main/java/at/hannibal2/skyhanni/features/fame/UpgradeReminder.kt index d22151c1b014..b55aa8f11e7f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fame/UpgradeReminder.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fame/UpgradeReminder.kt @@ -96,6 +96,36 @@ object UpgradeReminder { fun onInventoryOpen(event: InventoryFullyOpenedEvent) { if (!LorenzUtils.inSkyBlock) return inInventory = event.inventoryName == "Community Shop" + if (!inInventory) return + + if (currentProfileUpgrade == null && currentAccountUpgrade == null) return + detectWrongAccountUpgradeData(event.inventoryItems) + } + + private fun detectWrongAccountUpgradeData(items: Map) { + val hasProfileUpgrade = foundActiveUpgrade(items, 27..35) + if (!hasProfileUpgrade && currentProfileUpgrade != null) { + ChatUtils.chat("§eRemoved invalid Profile Upgrade information.") + currentProfileUpgrade = null + } + + val hasAccountUpgrade = foundActiveUpgrade(items, 36..44) + if (!hasAccountUpgrade && currentAccountUpgrade != null) { + ChatUtils.chat("§eRemoved invalid Account Upgrade information.") + currentAccountUpgrade = null + } + } + + private fun foundActiveUpgrade(items: Map, slots: IntRange): Boolean { + for (slot in slots) { + val item = items[slot] ?: continue + val isUpgrading = item.getLore().any { it == "§aCurrently upgrading!" } + val isDone = item.getLore().any { it == "§cClick to claim!" } + val isReadyForUpgrade = item.getLore().any { it == "§eClick to start upgrade!" } + if (isUpgrading || isDone) return true + if (isReadyForUpgrade) return false + } + return false } @SubscribeEvent From 1e786d98c20a022e2c11c11a2cd55cc4efd6a499 Mon Sep 17 00:00:00 2001 From: jani270 <69345714+jani270@users.noreply.github.com> Date: Sun, 6 Oct 2024 13:33:27 +0200 Subject: [PATCH 089/155] Improvement: Add Mining Effects to Non God Pot Effect Display (#2677) --- .../skyhanni/features/misc/NonGodPotEffectDisplay.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/NonGodPotEffectDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/NonGodPotEffectDisplay.kt index 61f9a344923f..83f45e535d5c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/NonGodPotEffectDisplay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/NonGodPotEffectDisplay.kt @@ -76,6 +76,10 @@ object NonGodPotEffectDisplay { CURSE_OF_GREED("§4Curse of Greed I"), COLD_RESISTANCE_4("§bCold Resistance IV"), + + POWDER_PUMPKIN("§fPowder Pumpkin I"), + FILET_O_FORTUNE("§fFilet O' Fortune I"), + CHILLED_PRISTINE_POTATO("§fChilled Pristine Potato I"), } private val effectsCountPattern by RepoPattern.pattern( From cbaae605593df9ce1edf1675f0ef6d4e560fc6ff Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Sun, 6 Oct 2024 16:30:33 +0200 Subject: [PATCH 090/155] Improvement: Better bz errors (#2681) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../data/bazaar/HypixelBazaarFetcher.kt | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/data/bazaar/HypixelBazaarFetcher.kt b/src/main/java/at/hannibal2/skyhanni/data/bazaar/HypixelBazaarFetcher.kt index c1a7af2890b4..7a97fca1d19d 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/bazaar/HypixelBazaarFetcher.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/bazaar/HypixelBazaarFetcher.kt @@ -37,7 +37,7 @@ object HypixelBazaarFetcher { @SubscribeEvent fun onDebugDataCollect(event: DebugDataCollectEvent) { - event.title("Bazaar Fetching") + event.title("Bazaar Data Fetcher from API") val data = listOf( "failedAttempts: $failedAttempts", @@ -119,13 +119,20 @@ object HypixelBazaarFetcher { e.printStackTrace() } else { nextFetchTime = SimpleTimeMark.now() + 15.minutes - ErrorManager.logErrorWithData( - e, - userMessage, - "fetchType" to fetchType, - "failedAttempts" to failedAttempts, - "rawResponse" to rawResponse, - ) + if (rawResponse == null || rawResponse.toString() == "{}") { + ChatUtils.chat( + "§cFailed loading Bazaar Price data!\n" + + "Please wait until the Hypixel API is sending correct data again! There is nothing else to do at the moment.", + ) + } else { + ErrorManager.logErrorWithData( + e, + userMessage, + "fetchType" to fetchType, + "failedAttempts" to failedAttempts, + "rawResponse" to rawResponse, + ) + } } } From 41d59a6888a8e1132e57dfab279efa8426853970 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Sun, 6 Oct 2024 21:58:51 +0200 Subject: [PATCH 091/155] Improvement: Fewer Server id errors (#2680) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../at/hannibal2/skyhanni/data/HypixelData.kt | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt b/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt index 039bd7d28afd..f34dafb3b95c 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/HypixelData.kt @@ -4,6 +4,7 @@ import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.api.event.HandleEvent import at.hannibal2.skyhanni.config.ConfigManager.Companion.gson import at.hannibal2.skyhanni.data.model.TabWidget +import at.hannibal2.skyhanni.events.DebugDataCollectEvent import at.hannibal2.skyhanni.events.HypixelJoinEvent import at.hannibal2.skyhanni.events.IslandChangeEvent import at.hannibal2.skyhanni.events.LorenzChatEvent @@ -119,6 +120,9 @@ object HypixelData { var skyBlock = false var skyBlockIsland = IslandType.UNKNOWN var serverId: String? = null + private var lastSuccessfulServerIdFetchTime = SimpleTimeMark.farPast() + private var lastSuccessfulServerIdFetchType: String? = null + private var failedServerIdFetchCounter = 0 // Ironman, Stranded and Bingo var noTrade = false @@ -159,24 +163,56 @@ object HypixelData { TabWidget.SERVER.matchMatcherFirstLine { serverId = group("serverid") + lastSuccessfulServerIdFetchTime = SimpleTimeMark.now() + lastSuccessfulServerIdFetchType = "tab list" + failedServerIdFetchCounter = 0 return } ScoreboardData.sidebarLinesFormatted.matchFirst(serverIdScoreboardPattern) { val serverType = if (group("servertype") == "M") "mega" else "mini" serverId = "$serverType${group("serverid")}" + lastSuccessfulServerIdFetchTime = SimpleTimeMark.now() + lastSuccessfulServerIdFetchType = "scoreboard" + failedServerIdFetchCounter = 0 return } + failedServerIdFetchCounter++ + if (failedServerIdFetchCounter < 3) return ErrorManager.logErrorWithData( Exception("NoServerId"), "Could not find server id", + "failedServerIdFetchCounter" to failedServerIdFetchCounter, + "lastSuccessfulServerIdFetchTime" to lastSuccessfulServerIdFetchTime, + "lastSuccessfulServerIdFetchType" to lastSuccessfulServerIdFetchType, "islandType" to LorenzUtils.skyBlockIsland, "tablist" to TabListData.getTabList(), "scoreboard" to ScoreboardData.sidebarLinesFormatted, ) } + @SubscribeEvent + fun onDebugDataCollect(event: DebugDataCollectEvent) { + event.title("Server ID") + val id = serverId + if (id == null) { + event.addData { + add("server id is null!") + add("failedServerIdFetchCounter: $failedServerIdFetchCounter") + add("") + add("last successful fetch time: $lastSuccessfulServerIdFetchTime") + add("last successful fetch type: $lastSuccessfulServerIdFetchType") + } + } else { + event.addIrrelevant { + add("Server id: '$id'") + add("fetch time: $lastSuccessfulServerIdFetchTime") + add("fetch type: $lastSuccessfulServerIdFetchType") + } + } + } + fun getPlayersOnCurrentServer(): Int { var amount = 0 val playerPatternList = mutableListOf( From 3326753f29824791df28a941e2f4fc239992c9f1 Mon Sep 17 00:00:00 2001 From: MTOnline69 <97001154+MTOnline69@users.noreply.github.com> Date: Sun, 6 Oct 2024 21:01:37 +0100 Subject: [PATCH 092/155] Fix: Wiki keybind searching for (#2682) --- .../config/features/commands/BetterWikiCommandConfig.java | 2 +- .../at/hannibal2/skyhanni/features/commands/WikiManager.kt | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/commands/BetterWikiCommandConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/commands/BetterWikiCommandConfig.java index fc6d0be06fc2..df0468226e77 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/commands/BetterWikiCommandConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/commands/BetterWikiCommandConfig.java @@ -53,7 +53,7 @@ public class BetterWikiCommandConfig { public boolean menuOpenWiki = false; @Expose - @ConfigOption(name = "Fandom Wiki Key", desc = "Search for an item on Wiki with this keybind.\n" + + @ConfigOption(name = "Wiki Key", desc = "Search for an item's wiki page with this keybind.\n" + "§cFor an optimal experience, do §lNOT §cbind this to a mouse button.") @ConfigEditorKeybind(defaultKey = Keyboard.KEY_NONE) public int wikiKeybind = Keyboard.KEY_NONE; diff --git a/src/main/java/at/hannibal2/skyhanni/features/commands/WikiManager.kt b/src/main/java/at/hannibal2/skyhanni/features/commands/WikiManager.kt index e72ad09c5481..e6a1ef4e955e 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/commands/WikiManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/commands/WikiManager.kt @@ -8,7 +8,6 @@ import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.utils.ChatUtils import at.hannibal2.skyhanni.utils.InventoryUtils import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName -import at.hannibal2.skyhanni.utils.ItemUtils.itemName import at.hannibal2.skyhanni.utils.KeyboardManager.isKeyHeld import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.NEUItems @@ -70,7 +69,7 @@ object WikiManager { private fun wikiTheItem(item: ItemStack, autoOpen: Boolean, useFandom: Boolean = config.useFandom) { val itemDisplayName = - item.itemName.replace("§a✔ ", "").replace("§c✖ ", "") + item.displayName.replace("§a✔ ", "").replace("§c✖ ", "") val internalName = item.getInternalName().asString() val wikiUrlSearch = if (internalName != "NONE") internalName else itemDisplayName.removeColor() From 4df35d062a41f0e8fed82caf2249c2e71f5b4058 Mon Sep 17 00:00:00 2001 From: J10a1n15 <45315647+j10a1n15@users.noreply.github.com> Date: Sun, 6 Oct 2024 22:02:48 +0200 Subject: [PATCH 093/155] Fix: Unknown Perkpocalypse Mayor Chat Spam (#2683) --- src/main/java/at/hannibal2/skyhanni/data/MayorAPI.kt | 2 +- .../features/gui/customscoreboard/ScoreboardElements.kt | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/at/hannibal2/skyhanni/data/MayorAPI.kt b/src/main/java/at/hannibal2/skyhanni/data/MayorAPI.kt index 469c48489245..a07960231bdf 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/MayorAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/MayorAPI.kt @@ -170,7 +170,7 @@ object MayorAPI { } ?: false } ?: return - val perk = stack.getLore().nextAfter({ perkpocalypsePerksPattern.matches(it) }) ?: return + val perk = stack.getLore().nextAfter({ perkpocalypsePerksPattern.matches(it) }, 2) ?: return // This is the first Perk of the Perkpocalypse Mayor val jerryMayor = getMayorFromPerk(getPerkFromName(perk.removeColor()) ?: return)?.addAllPerks() ?: return diff --git a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardElements.kt b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardElements.kt index 769184077b09..e1c5d3f845d1 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardElements.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/ScoreboardElements.kt @@ -784,6 +784,11 @@ private fun getMayorDisplayPair() = buildList { } if (!mayorConfig.showExtraMayor) return@buildList + addAll(addMinister()) + addAll(addPerkpocalypseMayor()) +} + +private fun addMinister() = buildList { val ministerName = MayorAPI.currentMinister?.mayorName?.let { MayorAPI.mayorNameWithColorCode(it) } ?: return@buildList add(ministerName to HorizontalAlignment.LEFT) @@ -792,7 +797,9 @@ private fun getMayorDisplayPair() = buildList { add(" §7- §e${perk.perkName}" to HorizontalAlignment.LEFT) } } +} +private fun addPerkpocalypseMayor() = buildList { val jerryExtraMayor = MayorAPI.jerryExtraMayor val extraMayor = jerryExtraMayor.first ?: return@buildList From 023b44c71ea7739716ebd010cea2841e5336a69b Mon Sep 17 00:00:00 2001 From: NopoTheGamer <40329022+NopoTheGamer@users.noreply.github.com> Date: Mon, 7 Oct 2024 07:43:06 +1100 Subject: [PATCH 094/155] Added the ability to disable chat errors via the repo (#2668) Co-authored-by: Cal --- .../data/jsonobjects/repo/RepoErrorData.kt | 10 +++ .../skyhanni/test/command/ErrorManager.kt | 64 +++++++++++++++++-- 2 files changed, 68 insertions(+), 6 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/RepoErrorData.kt diff --git a/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/RepoErrorData.kt b/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/RepoErrorData.kt new file mode 100644 index 000000000000..4866176516c3 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/RepoErrorData.kt @@ -0,0 +1,10 @@ +package at.hannibal2.skyhanni.data.jsonobjects.repo + +import com.google.gson.annotations.Expose + +data class RepoErrorData( + @Expose var messageExact: List?, + @Expose var messageStartsWith: List?, + @Expose var replaceMessage: String?, + @Expose var affectedVersions: List = listOf(), +) diff --git a/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt b/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt index 56a50ecebd06..e0fcf8fcbdc3 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt @@ -1,6 +1,10 @@ package at.hannibal2.skyhanni.test.command import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.config.ConfigManager +import at.hannibal2.skyhanni.data.jsonobjects.repo.RepoErrorData +import at.hannibal2.skyhanni.events.RepositoryReloadEvent +import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.utils.ChatUtils import at.hannibal2.skyhanni.utils.KeyboardManager import at.hannibal2.skyhanni.utils.LorenzUtils @@ -8,9 +12,12 @@ import at.hannibal2.skyhanni.utils.OSUtils import at.hannibal2.skyhanni.utils.StringUtils import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.TimeLimitedSet +import at.hannibal2.skyhanni.utils.json.fromJson import net.minecraft.client.Minecraft +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.time.Duration.Companion.minutes +@SkyHanniModule object ErrorManager { // random id -> error message @@ -158,12 +165,57 @@ object ErrorManager { if (finalMessage.last() !in ".?!") { finalMessage += "§c." } - ChatUtils.clickableChat( - "§c[SkyHanni-${SkyHanniMod.version}]: $finalMessage Click here to copy the error into the clipboard.", - onClick = { copyError(randomId) }, - "§eClick to copy!", - prefix = false, - ) + + var hideError = false + for (repoError in repoErrors) { + for (s in repoError.messageStartsWith ?: listOf()) { + if (rawMessage.startsWith(s)) { + hideError = true + } + } + for (s in repoError.messageExact ?: listOf()) { + if (rawMessage == s) { + hideError = true + } + } + if (hideError) { + if (repoError.replaceMessage != null) { + finalMessage = repoError.replaceMessage!! + hideError = false + } + break + } + } + + if (!hideError) { + ChatUtils.clickableChat( + "§c[SkyHanni-${SkyHanniMod.version}]: $finalMessage Click here to copy the error into the clipboard.", + onClick = { copyError(randomId) }, + "§eClick to copy!", + prefix = false, + ) + } + + } + + private var repoErrors: List = listOf() + + @SubscribeEvent + fun onRepoReload(event: RepositoryReloadEvent) { + val chatErrors = event.repoLocation.resolve("chat_errors") + repoErrors = if (chatErrors.exists()) { + chatErrors.listFiles() + .filter { + it != null && it.isFile && it.canRead() + } + .map { + ConfigManager.gson.fromJson(it.readText()) + }.filter { + SkyHanniMod.version in it.affectedVersions + } + } else { + listOf() + } } private fun buildExtraDataString(extraData: Array>): String { From 497d652aa83ed81e04f9400ae84362642585dfca Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 6 Oct 2024 22:48:31 +0200 Subject: [PATCH 095/155] code cleanup in the chat error repo logic --- .../data/jsonobjects/repo/RepoErrorData.kt | 18 ++++-- .../skyhanni/test/command/ErrorManager.kt | 60 ++++++++----------- 2 files changed, 38 insertions(+), 40 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/RepoErrorData.kt b/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/RepoErrorData.kt index 4866176516c3..3ec529db3e3f 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/RepoErrorData.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/RepoErrorData.kt @@ -1,10 +1,18 @@ package at.hannibal2.skyhanni.data.jsonobjects.repo import com.google.gson.annotations.Expose +import com.google.gson.annotations.SerializedName -data class RepoErrorData( - @Expose var messageExact: List?, - @Expose var messageStartsWith: List?, - @Expose var replaceMessage: String?, - @Expose var affectedVersions: List = listOf(), +data class RepoErrorJson( + @Expose @SerializedName("changed_error_messages") val changedErrorMessages: List, ) + +data class RepoErrorData( + @Expose @SerializedName("message_exact") private var rawMessageExact: List?, + @Expose @SerializedName("message_starts_with") private var rawMessageStartsWith: List?, + @Expose @SerializedName("replace_message") var replaceMessage: String?, + @Expose @SerializedName("affected_versions") var affectedVersions: List = listOf(), +) { + val messageExact by lazy { rawMessageExact ?: emptyList() } + val messageStartsWith by lazy { rawMessageStartsWith ?: emptyList() } +} diff --git a/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt b/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt index e0fcf8fcbdc3..7fed3ad028f5 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt @@ -1,8 +1,8 @@ package at.hannibal2.skyhanni.test.command import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.config.ConfigManager import at.hannibal2.skyhanni.data.jsonobjects.repo.RepoErrorData +import at.hannibal2.skyhanni.data.jsonobjects.repo.RepoErrorJson import at.hannibal2.skyhanni.events.RepositoryReloadEvent import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.utils.ChatUtils @@ -12,7 +12,6 @@ import at.hannibal2.skyhanni.utils.OSUtils import at.hannibal2.skyhanni.utils.StringUtils import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.TimeLimitedSet -import at.hannibal2.skyhanni.utils.json.fromJson import net.minecraft.client.Minecraft import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.time.Duration.Companion.minutes @@ -24,6 +23,7 @@ object ErrorManager { private val errorMessages = mutableMapOf() private val fullErrorMessages = mutableMapOf() private var cache = TimeLimitedSet>(10.minutes) + private var repoErrors: List = emptyList() private val breakAfter = listOf( "at at.hannibal2.skyhanni.config.commands.Commands\$createCommand", @@ -156,66 +156,56 @@ object ErrorManager { val extraDataString = buildExtraDataString(extraData) val rawMessage = message.removeColor() - errorMessages[randomId] = - "```\nSkyHanni ${SkyHanniMod.version}: $rawMessage\n \n$stackTrace\n$extraDataString```" + errorMessages[randomId] = "```\nSkyHanni ${SkyHanniMod.version}: $rawMessage\n \n$stackTrace\n$extraDataString```" fullErrorMessages[randomId] = "```\nSkyHanni ${SkyHanniMod.version}: $rawMessage\n(full stack trace)\n \n$fullStackTrace\n$extraDataString```" + val finalMessage = buildFinalMessage(message) ?: return + ChatUtils.clickableChat( + "§c[SkyHanni-${SkyHanniMod.version}]: $finalMessage Click here to copy the error into the clipboard.", + onClick = { copyError(randomId) }, + "§eClick to copy!", + prefix = false, + ) + } + + private fun buildFinalMessage(message: String): String? { var finalMessage = message if (finalMessage.last() !in ".?!") { finalMessage += "§c." } + val rawMessage = message.removeColor() var hideError = false for (repoError in repoErrors) { - for (s in repoError.messageStartsWith ?: listOf()) { - if (rawMessage.startsWith(s)) { + for (string in repoError.messageStartsWith) { + if (rawMessage.startsWith(string)) { hideError = true } } - for (s in repoError.messageExact ?: listOf()) { - if (rawMessage == s) { + for (string in repoError.messageExact) { + if (rawMessage == string) { hideError = true } } if (hideError) { - if (repoError.replaceMessage != null) { - finalMessage = repoError.replaceMessage!! + repoError.replaceMessage?.let { + finalMessage = it hideError = false } break } } - if (!hideError) { - ChatUtils.clickableChat( - "§c[SkyHanni-${SkyHanniMod.version}]: $finalMessage Click here to copy the error into the clipboard.", - onClick = { copyError(randomId) }, - "§eClick to copy!", - prefix = false, - ) - } - + return if (hideError) null else finalMessage } - private var repoErrors: List = listOf() - @SubscribeEvent fun onRepoReload(event: RepositoryReloadEvent) { - val chatErrors = event.repoLocation.resolve("chat_errors") - repoErrors = if (chatErrors.exists()) { - chatErrors.listFiles() - .filter { - it != null && it.isFile && it.canRead() - } - .map { - ConfigManager.gson.fromJson(it.readText()) - }.filter { - SkyHanniMod.version in it.affectedVersions - } - } else { - listOf() - } + val data = event.getConstant("ChangedChatErrors") + val version = SkyHanniMod.version + + repoErrors = data.changedErrorMessages.filter { version in it.affectedVersions } } private fun buildExtraDataString(extraData: Array>): String { From ff119419cce3e192012aee9e438911ffeb8d8519 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Sun, 6 Oct 2024 22:49:45 +0200 Subject: [PATCH 096/155] Fixed /viewrecipe replace breaking pages (#2679) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../features/commands/ViewRecipeCommand.kt | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/commands/ViewRecipeCommand.kt b/src/main/java/at/hannibal2/skyhanni/features/commands/ViewRecipeCommand.kt index e3d6a5713297..dbaf037ca363 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/commands/ViewRecipeCommand.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/commands/ViewRecipeCommand.kt @@ -6,6 +6,7 @@ import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.utils.ChatUtils.senderIsSkyhanni import at.hannibal2.skyhanni.utils.HypixelCommands import at.hannibal2.skyhanni.utils.NEUItems +import at.hannibal2.skyhanni.utils.NumberUtil.isInt import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -30,12 +31,20 @@ object ViewRecipeCommand { if (!config.viewRecipeLowerCase) return if (event.senderIsSkyhanni()) return - val item = pattern.matchMatcher(event.message.lowercase()) { - group("item").uppercase().replace(" ", "_") + val input = pattern.matchMatcher(event.message.lowercase()) { + group("item").uppercase() } ?: return + val args = input.split(" ") + val endsWithPageNumber = args.last().isInt() + val finalCommand = if (endsWithPageNumber) { + "${args.dropLast(1).joinToString("_")} ${args.last()}" + } else { + input.replace(" ", "_") + } + event.cancel() - HypixelCommands.viewRecipe(item) + HypixelCommands.viewRecipe(finalCommand) } val list by lazy { From c4077a9aa597ddec23f8d4649c07f6615d0ecfc2 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 6 Oct 2024 23:33:32 +0200 Subject: [PATCH 097/155] fixed serialized names not liking lazy --- .../skyhanni/data/jsonobjects/repo/RepoErrorData.kt | 4 ++-- .../java/at/hannibal2/skyhanni/test/command/ErrorManager.kt | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/RepoErrorData.kt b/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/RepoErrorData.kt index 3ec529db3e3f..0fe893723580 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/RepoErrorData.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/RepoErrorData.kt @@ -13,6 +13,6 @@ data class RepoErrorData( @Expose @SerializedName("replace_message") var replaceMessage: String?, @Expose @SerializedName("affected_versions") var affectedVersions: List = listOf(), ) { - val messageExact by lazy { rawMessageExact ?: emptyList() } - val messageStartsWith by lazy { rawMessageStartsWith ?: emptyList() } + val messageExact get() = rawMessageExact ?: emptyList() + val messageStartsWith get() = rawMessageStartsWith ?: emptyList() } diff --git a/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt b/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt index 7fed3ad028f5..fecdb6cdd7e3 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt @@ -171,9 +171,6 @@ object ErrorManager { private fun buildFinalMessage(message: String): String? { var finalMessage = message - if (finalMessage.last() !in ".?!") { - finalMessage += "§c." - } val rawMessage = message.removeColor() var hideError = false @@ -197,6 +194,9 @@ object ErrorManager { } } + if (finalMessage.last() !in ".?!") { + finalMessage += "§c." + } return if (hideError) null else finalMessage } From dc2ea3ff0b449489ee32bf066b9c8854791f5d86 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Sun, 6 Oct 2024 23:50:57 +0200 Subject: [PATCH 098/155] added support for custom_message --- .../hannibal2/skyhanni/data/jsonobjects/repo/RepoErrorData.kt | 1 + .../java/at/hannibal2/skyhanni/test/command/ErrorManager.kt | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/RepoErrorData.kt b/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/RepoErrorData.kt index 0fe893723580..41d0f701cb15 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/RepoErrorData.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/jsonobjects/repo/RepoErrorData.kt @@ -11,6 +11,7 @@ data class RepoErrorData( @Expose @SerializedName("message_exact") private var rawMessageExact: List?, @Expose @SerializedName("message_starts_with") private var rawMessageStartsWith: List?, @Expose @SerializedName("replace_message") var replaceMessage: String?, + @Expose @SerializedName("custom_message") var customMessage: String?, @Expose @SerializedName("affected_versions") var affectedVersions: List = listOf(), ) { val messageExact get() = rawMessageExact ?: emptyList() diff --git a/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt b/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt index fecdb6cdd7e3..25b485c5a0f1 100644 --- a/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/test/command/ErrorManager.kt @@ -190,6 +190,10 @@ object ErrorManager { finalMessage = it hideError = false } + repoError.customMessage?.let { + ChatUtils.userError(it) + return null + } break } } From 8a1591748ac661c6f61776e25592ee879bbcdd72 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Mon, 7 Oct 2024 00:52:59 +0200 Subject: [PATCH 099/155] removed unnecessary check --- .../features/fishing/tracker/SeaCreatureTracker.kt | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/SeaCreatureTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/SeaCreatureTracker.kt index ca8a73ce9d5f..5ba50c2b74f6 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/SeaCreatureTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/SeaCreatureTracker.kt @@ -79,16 +79,8 @@ object SeaCreatureTracker { val realAmount = data.amount.filter { filter(it.key) } val total = realAmount.sumAllValues() - for ((name, amount) in realAmount.entries.sortedByDescending { it.value }) { - val displayName = SeaCreatureManager.allFishingMobs[name]?.displayName ?: run { - ErrorManager.logErrorStateWithData( - "Sea Creature Tracker can not display a name correctly", - "Could not find sea creature by name", - "SeaCreatureManager.allFishingMobs.keys" to SeaCreatureManager.allFishingMobs.keys, - "name" to name - ) - name - } + for ((displayName, amount) in realAmount.entries.sortedByDescending { it.value }) { + val percentageSuffix = if (config.showPercentage.get()) { val percentage = LorenzUtils.formatPercentage(amount.toDouble() / total) From 71f6d7e18627a04e5d80d8f5951cdb3b2bc5d44d Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Mon, 7 Oct 2024 01:11:28 +0200 Subject: [PATCH 100/155] reverted old removal --- .../features/fishing/tracker/SeaCreatureTracker.kt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/SeaCreatureTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/SeaCreatureTracker.kt index 5ba50c2b74f6..ca8a73ce9d5f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/SeaCreatureTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/SeaCreatureTracker.kt @@ -79,8 +79,16 @@ object SeaCreatureTracker { val realAmount = data.amount.filter { filter(it.key) } val total = realAmount.sumAllValues() - for ((displayName, amount) in realAmount.entries.sortedByDescending { it.value }) { - + for ((name, amount) in realAmount.entries.sortedByDescending { it.value }) { + val displayName = SeaCreatureManager.allFishingMobs[name]?.displayName ?: run { + ErrorManager.logErrorStateWithData( + "Sea Creature Tracker can not display a name correctly", + "Could not find sea creature by name", + "SeaCreatureManager.allFishingMobs.keys" to SeaCreatureManager.allFishingMobs.keys, + "name" to name + ) + name + } val percentageSuffix = if (config.showPercentage.get()) { val percentage = LorenzUtils.formatPercentage(amount.toDouble() / total) From edbbe1e61afe600b9d111c7bf74db70f07befd2f Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Mon, 7 Oct 2024 01:32:30 +0200 Subject: [PATCH 101/155] Backend: Migrate Plhlegblast (#2684) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../fishing/tracker/SeaCreatureTracker.kt | 37 +++++++++++++++++-- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/SeaCreatureTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/SeaCreatureTracker.kt index ca8a73ce9d5f..e106858012de 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/SeaCreatureTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/tracker/SeaCreatureTracker.kt @@ -4,11 +4,13 @@ import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.events.ConfigLoadEvent import at.hannibal2.skyhanni.events.FishingBobberCastEvent import at.hannibal2.skyhanni.events.GuiRenderEvent +import at.hannibal2.skyhanni.events.ProfileJoinEvent import at.hannibal2.skyhanni.events.SeaCreatureFishEvent import at.hannibal2.skyhanni.features.fishing.FishingAPI import at.hannibal2.skyhanni.features.fishing.SeaCreatureManager import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.test.command.ErrorManager +import at.hannibal2.skyhanni.utils.ChatUtils import at.hannibal2.skyhanni.utils.CollectionUtils.addOrPut import at.hannibal2.skyhanni.utils.CollectionUtils.addSearchString import at.hannibal2.skyhanni.utils.CollectionUtils.sumAllValues @@ -25,6 +27,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @SkyHanniModule object SeaCreatureTracker { + private var needMigration = true private val config get() = SkyHanniMod.feature.fishing.seaCreatureTracker @@ -72,7 +75,15 @@ object SeaCreatureTracker { return map } + @SubscribeEvent + fun onProfileJoin(event: ProfileJoinEvent) { + needMigration = true + } + private fun drawDisplay(data: Data): List = buildList { + // manually migrating from "Phlhlegblast" to "Plhlegblast" when the new name is in the repo + tryToMigrate(data.amount) + addSearchString("§7Sea Creature Tracker:") val filter: (String) -> Boolean = addCategories(data) @@ -85,7 +96,7 @@ object SeaCreatureTracker { "Sea Creature Tracker can not display a name correctly", "Could not find sea creature by name", "SeaCreatureManager.allFishingMobs.keys" to SeaCreatureManager.allFishingMobs.keys, - "name" to name + "name" to name, ) name } @@ -100,6 +111,25 @@ object SeaCreatureTracker { addSearchString(" §7- §e${total.addSeparators()} §7Total Sea Creatures") } + private fun tryToMigrate( + data: MutableMap, + ) { + if (!needMigration) return + needMigration = false + + val oldName = "Phlhlegblast" + val newName = "Plhlegblast" + + // only migrate once the repo contains the new name + if (SeaCreatureManager.allFishingMobs.containsKey(newName)) { + data[oldName]?.let { + ChatUtils.debug("Sea Creature Tracker migrated $it $oldName to $newName") + data[newName] = it + data.remove(oldName) + } + } + } + private fun MutableList.addCategories(data: Data): (String) -> Boolean { val amounts = getCurrentCategories(data) val list = amounts.keys.toList() @@ -115,7 +145,7 @@ object SeaCreatureTracker { val id = list.indexOf(currentCategory) currentCategory = list[(id + 1) % list.size] tracker.update() - } + }, ) } @@ -161,6 +191,5 @@ object SeaCreatureTracker { tracker.resetCommand() } - private fun isEnabled() = - LorenzUtils.inSkyBlock && config.enabled && !FishingAPI.wearingTrophyArmor && !LorenzUtils.inKuudraFight + private fun isEnabled() = LorenzUtils.inSkyBlock && config.enabled && !FishingAPI.wearingTrophyArmor && !LorenzUtils.inKuudraFight } From 82ea42e7dfe989c75eebc072f1cebe0b6c000492 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Mon, 7 Oct 2024 01:52:48 +0200 Subject: [PATCH 102/155] Version 0.27 Beta 16 --- docs/CHANGELOG.md | 14 ++++++++++++++ root.gradle.kts | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index 050f6c9bd7af..72032222eff6 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -184,6 +184,7 @@ + Added Area Navigation support to Glacite Tunnels. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2544) + Updated wording in mineshaft pity breakdown ("efficient miner" -> "spread"). - luna (https://github.com/hannibal002/SkyHanni/pull/2633) + Improved the wording of the Mining Event data error chat message. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2671) ++ Added Mining Effects (Powder Pumpkin, Filet O' Fortune, and Chilled Pristine Potato) to the Non-God Effect Display. - jani (https://github.com/hannibal002/SkyHanni/pull/2677) #### Diana Improvements @@ -201,6 +202,7 @@ + Added an opacity slider for the Custom Background Image in the Custom Scoreboard. - Empa (https://github.com/hannibal002/SkyHanni/pull/1837) + Added an Undo message when auto alignment inCustom Scoreboard gets disabled. - j10a1n15 (https://github.com/hannibal002/SkyHanni/pull/2402) + Added an option to show SkyBlock time on the custom scoreboard rounded to 10 minutes, similar to the vanilla scoreboard. - Luna (https://github.com/hannibal002/SkyHanni/pull/2443) ++ Reduced the frequency of scoreboard errors being displayed. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2672) #### Inventory Improvements @@ -292,6 +294,8 @@ + Improved the way pathfinding lines are rendered. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2634) + Automatically starts pathfinding after clicking on SkyHanni reminder chat messages about Carnival Reminder, Hoppity NPC, City Project, and account/profile upgrades. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2635) + Greatly improved performance by optimizing SkyHanni Chroma support for Patcher Font Renderer. - nopo (https://github.com/hannibal002/SkyHanni/pull/2666) ++ "Could not find server id" errors are now less common. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2680) ++ Clarified the wording of Bazaar Data Loading error messages. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2681) ### Fixes @@ -335,6 +339,7 @@ + Fixed enchanting XP detection. + Fixed Minister in Calendar Perk description sometimes not using the gray color. - j10a1n15 (https://github.com/hannibal002/SkyHanni/pull/2632) + Fixed highlighting items in one's own inventory for some Bazaar features, e.g., in the "click to re-order" feature. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2640) ++ Automatically remove incorrect Account/Profile Upgrade warnings by talking to Elizabeth. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2674) #### Mining Fixes @@ -363,6 +368,7 @@ + Fixed Jasper gemstones not being addressed in the Powder Mining filter. - Daveed (https://github.com/hannibal002/SkyHanni/pull/2618) + Fixed the King Talisman Tracker sometimes not displaying the correct data. - martimavocado (https://github.com/hannibal002/SkyHanni/pull/2663) + Fixed the Powder Tracker not tracking items correctly. - HiZe (https://github.com/hannibal002/SkyHanni/pull/2645) ++ Fixed an error in Powder Tracker. - j10a1n15 (https://github.com/hannibal002/SkyHanni/pull/2678) #### Scoreboard Fixes @@ -386,6 +392,8 @@ + Fixed a Custom Scoreboard error during M7 Dragons. - j10a1n15 (https://github.com/hannibal002/SkyHanni/pull/2510) + Fixed Custom Scoreboard error during the Raffle Event. - j10a1n15 (https://github.com/hannibal002/SkyHanni/pull/2545) + Fixed both the Custom Scoreboard Active and Starting Soon Tab List events being active simultaneously in the Garden. - Empa, j10a1n15 (https://github.com/hannibal002/SkyHanni/pull/2592) ++ Fixed Custom Scoreboard not showing the Perkpocalypse Mayor. - j10a1n15 (https://github.com/hannibal002/SkyHanni/pull/2683) ++ Fixed some scoreboard error messages appearing in chat. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2672) #### Hoppity Fixes @@ -407,6 +415,7 @@ #### Commands Fixes + Fixed the command `/shtps` printing nothing if the TPS display was currently showing nothing. - CalMWolfs (https://github.com/hannibal002/SkyHanni/pull/2446) ++ Fixed "/viewrecipe command replace" breaking pages. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2679) #### Dungeon Fixes @@ -474,6 +483,8 @@ + Fixed item trackers displaying removed item names incorrectly. - CalMWolfs (https://github.com/hannibal002/SkyHanni/pull/2620) + Fixed some messages from Pablo NPC not being detected. - Luna (https://github.com/hannibal002/SkyHanni/pull/2636) + Fixed SkyHanni re-downloading the repository on every launch. - nopo (https://github.com/hannibal002/SkyHanni/pull/2669) ++ Fixed unknown Perkpocalypse Mayor chat spam. - j10a1n15 (https://github.com/hannibal002/SkyHanni/pull/2683) ++ Fixed the wiki keybind searching for "null" on items with no internal name. - MTOnline (https://github.com/hannibal002/SkyHanni/pull/2682) ### Technical Details @@ -548,6 +559,9 @@ + Added Bazaar Fetch information to `/shdebug`. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2675) + Removed the password from the download source check. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2649) + Added a missing SkyBlock check for debug commands `/shtrackparticles` and `/shtracksounds`. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2641) ++ Prepared for later migration of correct config name of Plhlegblast. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2684) ++ Added the ability to disable SkyHanni errors via repo configuration. - nopo (https://github.com/hannibal002/SkyHanni/pull/2668) ++ Added current server ID and fetch data to the `/shdebug` command. - hannibal2 (https://github.com/hannibal002/SkyHanni/pull/2680) ### Removed Features diff --git a/root.gradle.kts b/root.gradle.kts index 58285a7012c2..33a21442e6f0 100644 --- a/root.gradle.kts +++ b/root.gradle.kts @@ -14,7 +14,7 @@ plugins { allprojects { group = "at.hannibal2.skyhanni" - version = "0.27.Beta.15" + version = "0.27.Beta.16" repositories { mavenCentral() mavenLocal() From df210dceb42d76597272b066854fa39209f6d353 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Mon, 7 Oct 2024 11:21:31 +0200 Subject: [PATCH 103/155] Fix: Custom Scoreboard Update time (#2685) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../gui/customscoreboard/CustomScoreboard.kt | 22 ++++++------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/CustomScoreboard.kt b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/CustomScoreboard.kt index 8a1d7b50de45..4a86519c374e 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/CustomScoreboard.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/CustomScoreboard.kt @@ -30,6 +30,7 @@ import at.hannibal2.skyhanni.utils.RenderUtils.HorizontalAlignment import at.hannibal2.skyhanni.utils.RenderUtils.VerticalAlignment import at.hannibal2.skyhanni.utils.RenderUtils.renderRenderable import at.hannibal2.skyhanni.utils.SimpleTimeMark +import at.hannibal2.skyhanni.utils.SimpleTimeMark.Companion.fromNow import at.hannibal2.skyhanni.utils.StringUtils.firstLetterUppercase import at.hannibal2.skyhanni.utils.TabListData import at.hannibal2.skyhanni.utils.renderables.Renderable @@ -50,7 +51,7 @@ object CustomScoreboard { private var cache = emptyList() private const val GUI_NAME = "Custom Scoreboard" - private var lastScoreboardUpdate = SimpleTimeMark.farFuture() + private var nextScoreboardUpdate = SimpleTimeMark.farFuture() @SubscribeEvent fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { @@ -82,9 +83,7 @@ object CustomScoreboard { fun onGuiPositionMoved(event: GuiPositionMovedEvent) { if (event.guiName == GUI_NAME) { with(alignmentConfig) { - if (horizontalAlignment != HorizontalAlignment.DONT_ALIGN || - verticalAlignment != VerticalAlignment.DONT_ALIGN - ) { + if (horizontalAlignment != HorizontalAlignment.DONT_ALIGN || verticalAlignment != VerticalAlignment.DONT_ALIGN) { val tempHori = horizontalAlignment val tempVert = verticalAlignment @@ -108,15 +107,9 @@ object CustomScoreboard { fun onTick(event: LorenzTickEvent) { if (!isEnabled()) return - // We want to update the scoreboard as soon as we have new data, not 5 ticks delayed - var dirty = false - if (lastScoreboardUpdate.passedSince() > 250.milliseconds) { - lastScoreboardUpdate = SimpleTimeMark.farFuture() - dirty = true - } - - // Creating the lines - if (dirty) { + if (dirty || nextScoreboardUpdate.isInPast()) { + nextScoreboardUpdate = 250.milliseconds.fromNow() + dirty = false display = createLines().removeEmptyLinesFromEdges() if (TabListData.fullyLoaded) { cache = display.toList() @@ -129,10 +122,9 @@ object CustomScoreboard { @SubscribeEvent fun onScoreboardChange(event: ScoreboardUpdateEvent) { - lastScoreboardUpdate = SimpleTimeMark.now() + dirty = true } - internal val config get() = SkyHanniMod.feature.gui.customScoreboard internal val displayConfig get() = config.display internal val alignmentConfig get() = displayConfig.alignment From 3b61c48e2e1545bcf009bcbb563de5fbb63277ab Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Mon, 7 Oct 2024 11:24:20 +0200 Subject: [PATCH 104/155] Fix: Hoppity wrong amount (#2686) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../features/event/hoppity/HoppityCollectionStats.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityCollectionStats.kt b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityCollectionStats.kt index 7d2a6a457c28..6d201e57edcd 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityCollectionStats.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityCollectionStats.kt @@ -505,7 +505,11 @@ object HoppityCollectionStats { val found = !rabbitNotFoundPattern.anyMatches(itemLore) - if (!found) continue + if (!found) { + // if the config has wrong data, remove it + loggedRabbits.remove(itemName) + continue + } val duplicates = duplicatesFoundPattern.firstMatcher(itemLore) { group("duplicates").formatInt() From 129bc896df29ed5cedd915b094365058b19137a1 Mon Sep 17 00:00:00 2001 From: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> Date: Mon, 7 Oct 2024 21:08:50 +1100 Subject: [PATCH 105/155] Backend: Update pr template (#2687) --- pull_request_template.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pull_request_template.md b/pull_request_template.md index b004c1c13866..dba81f46b91c 100644 --- a/pull_request_template.md +++ b/pull_request_template.md @@ -1,4 +1,6 @@ - + + ## Dependencies - pr_number_or_link_here From 1de910a9ae9ab96fa75044367f9546d671fbcba1 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Mon, 7 Oct 2024 12:09:22 +0200 Subject: [PATCH 106/155] Fix: Hoppity > max (#2688) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../config/storage/ProfileSpecificStorage.java | 3 +++ .../inventory/chocolatefactory/ChocolateAmount.kt | 1 + .../inventory/chocolatefactory/ChocolateFactoryAPI.kt | 4 ++++ .../chocolatefactory/ChocolateFactoryDataLoader.kt | 11 +++++++++++ .../chocolatefactory/ChocolateFactoryStats.kt | 5 ++++- 5 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/main/java/at/hannibal2/skyhanni/config/storage/ProfileSpecificStorage.java b/src/main/java/at/hannibal2/skyhanni/config/storage/ProfileSpecificStorage.java index 754eea3bba59..4ccb0823d512 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/storage/ProfileSpecificStorage.java +++ b/src/main/java/at/hannibal2/skyhanni/config/storage/ProfileSpecificStorage.java @@ -102,6 +102,9 @@ public static class ChocolateFactoryStorage { @Expose public long currentChocolate = 0; + @Expose + public long maxChocolate = 0; + @Expose public long chocolateThisPrestige = 0; diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateAmount.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateAmount.kt index 7f0694e2a779..1f1f6d0c0969 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateAmount.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateAmount.kt @@ -31,6 +31,7 @@ enum class ChocolateAmount(val chocolate: () -> Long) { companion object { fun chocolateSinceUpdate(): Long { + if (ChocolateFactoryAPI.isMax()) return 0L val lastUpdate = profileStorage?.lastDataSave ?: return 0 val currentTime = SimpleTimeMark.now() val secondsSinceUpdate = (currentTime - lastUpdate).inWholeSeconds diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryAPI.kt index 112e8a7a7383..195ea51d32f9 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryAPI.kt @@ -239,4 +239,8 @@ object ChocolateFactoryAPI { it.rabbit.removeColor() == rabbitName.removeColor() } } + + fun isMax(): Boolean = profileStorage?.let { + it.maxChocolate == it.currentChocolate + } ?: false } diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryDataLoader.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryDataLoader.kt index eebbb19e93a7..64a99a8c911f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryDataLoader.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryDataLoader.kt @@ -51,6 +51,14 @@ object ChocolateFactoryDataLoader { "chocolate.thisprestige", "§7Chocolate this Prestige: §6(?[\\d,]+)", ) + + /** + * REGEX-TEST: §7Max Chocolate: §660B + */ + private val maxChocolatePattern by ChocolateFactoryAPI.patternGroup.pattern( + "chocolate.max", + "§7Max Chocolate: §6(?.*)", + ) private val chocolateForPrestigePattern by ChocolateFactoryAPI.patternGroup.pattern( "chocolate.forprestige", "§7§cRequires (?\\w+) Chocolate this.*", @@ -230,6 +238,9 @@ object ChocolateFactoryDataLoader { chocolateThisPrestigePattern.matchMatcher(line) { profileStorage.chocolateThisPrestige = group("amount").formatLong() } + maxChocolatePattern.matchMatcher(line) { + profileStorage.maxChocolate = group("max").formatLong() + } chocolateForPrestigePattern.matchMatcher(line) { ChocolateFactoryAPI.chocolateForPrestige = group("amount").formatLong() prestigeCost = ChocolateFactoryAPI.chocolateForPrestige diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryStats.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryStats.kt index 8d08e485e16f..36c79728cd39 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryStats.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/chocolatefactory/ChocolateFactoryStats.kt @@ -76,7 +76,10 @@ object ChocolateFactoryStats { val map = buildMap { put(ChocolateFactoryStat.HEADER, "§6§lChocolate Factory ${ChocolateFactoryAPI.currentPrestige.toRoman()}") - put(ChocolateFactoryStat.CURRENT, "§eCurrent Chocolate: §6${ChocolateAmount.CURRENT.formatted}") + val maxSuffix = if (ChocolateFactoryAPI.isMax()) { + " §cMax!" + } else "" + put(ChocolateFactoryStat.CURRENT, "§eCurrent Chocolate: §6${ChocolateAmount.CURRENT.formatted}$maxSuffix") put(ChocolateFactoryStat.THIS_PRESTIGE, "§eThis Prestige: §6${ChocolateAmount.PRESTIGE.formatted}") put(ChocolateFactoryStat.ALL_TIME, "§eAll-time: §6${ChocolateAmount.ALL_TIME.formatted}") From 266d007da9f23b19f8e815da3005451195a33a5e Mon Sep 17 00:00:00 2001 From: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> Date: Mon, 7 Oct 2024 21:16:35 +1100 Subject: [PATCH 107/155] its actually a plus (#2689) --- pull_request_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pull_request_template.md b/pull_request_template.md index dba81f46b91c..02769a0f8470 100644 --- a/pull_request_template.md +++ b/pull_request_template.md @@ -1,6 +1,6 @@