Skip to content

Commit

Permalink
Change: "Dungeon Filter" toggle changed to list (#884)
Browse files Browse the repository at this point in the history
Added options to change exactly what part of Dungeon Chat Filter should be used. #884
  • Loading branch information
byWambo authored Jan 11, 2024
1 parent 9b16887 commit 98cae88
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 47 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,14 @@
import com.google.gson.annotations.Expose;
import io.github.moulberry.moulconfig.annotations.Accordion;
import io.github.moulberry.moulconfig.annotations.ConfigEditorBoolean;
import io.github.moulberry.moulconfig.annotations.ConfigEditorDraggableList;
import io.github.moulberry.moulconfig.annotations.ConfigEditorKeybind;
import io.github.moulberry.moulconfig.annotations.ConfigOption;
import org.lwjgl.input.Keyboard;

import java.util.ArrayList;
import java.util.List;

public class ChatConfig {

@Expose
Expand All @@ -32,10 +36,36 @@ public class ChatConfig {
public ChatSymbols chatSymbols = new ChatSymbols();

@Expose
@ConfigOption(name = "Dungeon Filter", desc = "Hides pickup, reminder, buff, damage, ability, puzzle and end messages in Dungeons.")
@ConfigEditorBoolean
@FeatureToggle
public boolean dungeonMessages = true;
@ConfigOption(name = "Dungeon Filter", desc = "Hide specific message types in Dungeons.")
@ConfigEditorDraggableList
public List<DungeonMessageTypes> dungeonFilteredMessageTypes = new ArrayList<>();


public enum DungeonMessageTypes {
PREPARE("§bPreparation"),
START("§aClass Buffs §r/ §cMort Dialogue"),
AMBIENCE("§bAmbience"),
PICKUP("§ePickup"),
REMINDER("§cReminder"),
BUFF("§dBlessings"),
NOT_POSSIBLE("§cNot possible"),
DAMAGE("§cDamage"),
ABILITY("§dAbilities"),
PUZZLE("§dPuzzle §r/ §cQuiz"),
END("§cEnd §a(End of run spam)"),
;

private final String name;

DungeonMessageTypes(String name) {
this.name = name;
}

@Override
public String toString() {
return name;
}
}

@Expose
@ConfigOption(name = "Dungeon Boss Messages", desc = "Hide messages from the Watcher and bosses in the Dungeon.")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
package at.hannibal2.skyhanni.features.dungeon

import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.config.features.chat.ChatConfig
import at.hannibal2.skyhanni.events.LorenzChatEvent
import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.StringUtils.matches
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import java.util.regex.Pattern

private typealias MessageTypes = ChatConfig.DungeonMessageTypes

class DungeonChatFilter {

private val config get() = SkyHanniMod.feature.chat
Expand Down Expand Up @@ -110,10 +113,7 @@ class DungeonChatFilter {
"§4[STATUE] Oruo the Omniscient§r§f: §r§fI've had enough of you and your party fiddling with my buttons. Scram!",
"§4[STATUE] Oruo the Omniscient§r§f: §r§fEnough! My buttons are not to be pressed with such lack of grace!"
)
private val unsortedBlockedPatterns = listOf( // TODO sort out and filter separately
"(.*) §r§ehas obtained §r§a§r§9Beating Heart§r§e!".toPattern()
)
private val unsortedBlockedMessages = listOf(
private val ambienceMessages = listOf(
"§5A shiver runs down your spine..."
)
private val reminderMessages = listOf(
Expand All @@ -133,7 +133,8 @@ class DungeonChatFilter {
"§c(.*) §r§eYou picked up a Ability Damage Orb from (.*) §r§ehealing you for §r§c(.*) §r§eand granting you +§r§c(.*)% §r§eAbility Damage for §r§b10 §r§eseconds.".toPattern(),
"§c(.*) §r§eYou picked up a Damage Orb from (.*) §r§ehealing you for §r§c(.*) §r§eand granting you +§r§c(.*)% §r§eDamage for §r§b10 §r§eseconds.".toPattern(),
"(.*) §r§ehas obtained §r§a§r§9Premium Flesh§r§e!".toPattern(),
"§6§lRARE DROP! §r§9Beating Heart §r§b(.*)".toPattern()
"§6§lRARE DROP! §r§9Beating Heart §r§b(.*)".toPattern(),
"(.*) §r§ehas obtained §r§a§r§9Beating Heart§r§e!".toPattern()
)
private val pickupMessages = listOf(
"§fYou found a §r§dWither Essence§r§f! Everyone gains an extra essence!"
Expand Down Expand Up @@ -161,37 +162,36 @@ class DungeonChatFilter {
"§aYou can no longer consume or splash any potions during the remainder of this Dungeon run!",
)

private val messagesMap: Map<String, List<String>> = mapOf(
"prepare" to prepareMessages,
"start" to startMessages,
"unsorted" to unsortedBlockedMessages,
"pickup" to pickupMessages,
"reminder" to reminderMessages,
"buff" to buffMessages,
"not_possible" to notPossibleMessages,
"damage" to damageMessages,
"ability" to abilityMessages,
"puzzle" to puzzleMessages,
)
private val patternsMap: Map<String, List<Pattern>> = mapOf(
"prepare" to preparePatterns,
"start" to startPatterns,
"unsorted" to unsortedBlockedPatterns,
"pickup" to pickupPatterns,
"buff" to buffPatterns,
"damage" to damagePatterns,
"ability" to abilityPatterns,
"puzzle" to puzzlePatterns,
"end" to endPatterns,
)
private val messagesEndsWithMap: Map<String, List<String>> = mapOf(
"end" to endMessagesEndWith,
private val messagesMap: Map<MessageTypes, List<String>> = mapOf(
MessageTypes.PREPARE to prepareMessages,
MessageTypes.START to startMessages,
MessageTypes.AMBIENCE to ambienceMessages,
MessageTypes.PICKUP to pickupMessages,
MessageTypes.REMINDER to reminderMessages,
MessageTypes.BUFF to buffMessages,
MessageTypes.NOT_POSSIBLE to notPossibleMessages,
MessageTypes.DAMAGE to damageMessages,
MessageTypes.ABILITY to abilityMessages,
MessageTypes.PUZZLE to puzzleMessages,
)
private val patternsMap: Map<MessageTypes, List<Pattern>> = mapOf(
MessageTypes.PREPARE to preparePatterns,
MessageTypes.START to startPatterns,
MessageTypes.PICKUP to pickupPatterns,
MessageTypes.BUFF to buffPatterns,
MessageTypes.DAMAGE to damagePatterns,
MessageTypes.ABILITY to abilityPatterns,
MessageTypes.PUZZLE to puzzlePatterns,
MessageTypes.END to endPatterns,
)
private val messagesEndsWithMap: Map<MessageTypes, List<String>> = mapOf(
MessageTypes.END to endMessagesEndWith,
)
/// </editor-fold>

@SubscribeEvent
fun onChatMessage(event: LorenzChatEvent) {
if (!LorenzUtils.onHypixel || !config.dungeonMessages) return
if (!LorenzUtils.onHypixel || config.dungeonFilteredMessageTypes.isEmpty()) return

// Workaround since the potion message gets always sent at that moment when SkyBlock is set as false
if (!LorenzUtils.inSkyBlock && !event.message.startsWith("§aYour active Potion Effects")) return
Expand All @@ -204,26 +204,30 @@ class DungeonChatFilter {

private fun block(message: String): String {
when {
message.isPresent("prepare") -> return "prepare"
message.isPresent("start") -> return "start"
message.isFiltered(MessageTypes.PREPARE) -> return "prepare"
message.isFiltered(MessageTypes.START) -> return "start"
}

if (!LorenzUtils.inDungeons) return ""

return when {
message.isPresent("unsorted") -> "unsorted"
message.isPresent("pickup") -> "pickup"
message.isPresent("reminder") -> "reminder"
message.isPresent("buff") -> "buff"
message.isPresent("not_possible") -> "not_possible"
message.isPresent("damage") -> "damage"
message.isPresent("ability") -> "ability"
message.isPresent("puzzle") -> "puzzle"
message.isPresent("end") -> "end"
message.isFiltered(MessageTypes.AMBIENCE) -> "ambience"
message.isFiltered(MessageTypes.PICKUP) -> "pickup"
message.isFiltered(MessageTypes.REMINDER) -> "reminder"
message.isFiltered(MessageTypes.BUFF) -> "buff"
message.isFiltered(MessageTypes.NOT_POSSIBLE) -> "not_possible"
message.isFiltered(MessageTypes.DAMAGE) -> "damage"
message.isFiltered(MessageTypes.ABILITY) -> "ability"
message.isFiltered(MessageTypes.PUZZLE) -> "puzzle"
message.isFiltered(MessageTypes.END) -> "end"
else -> ""
}
}

private fun String.isFiltered(key: MessageTypes) : Boolean {
return config.dungeonFilteredMessageTypes.contains(key) && this.isPresent(key)
}

/**
* Checks if the message is present in the list of messages or patterns
* Checks against three maps that compare in different ways.
Expand All @@ -234,7 +238,7 @@ class DungeonChatFilter {
* @see patternsMap
* @see messagesEndsWithMap
*/
private fun String.isPresent(key: String): Boolean {
private fun String.isPresent(key: MessageTypes): Boolean {
return this in (messagesMap[key] ?: emptyList()) ||
(patternsMap[key] ?: emptyList()).any { it.matches(this) } ||
(messagesEndsWithMap[key] ?: emptyList()).any { this.endsWith(it) }
Expand Down

0 comments on commit 98cae88

Please sign in to comment.