-
-
Notifications
You must be signed in to change notification settings - Fork 216
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Feature: Sound Responses (Meow) (#2222)
Co-authored-by: Cal <cwolfson58@gmail.com> Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com>
- Loading branch information
1 parent
7d4e044
commit d154001
Showing
4 changed files
with
94 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
24 changes: 24 additions & 0 deletions
24
src/main/java/at/hannibal2/skyhanni/config/features/chat/ChatSoundResponseConfig.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
package at.hannibal2.skyhanni.config.features.chat | ||
|
||
import at.hannibal2.skyhanni.config.FeatureToggle | ||
import at.hannibal2.skyhanni.features.chat.SoundResponseTypes | ||
import com.google.gson.annotations.Expose | ||
import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorBoolean | ||
import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorDraggableList | ||
import io.github.notenoughupdates.moulconfig.annotations.ConfigOption | ||
|
||
class ChatSoundResponseConfig { | ||
@Expose | ||
@ConfigOption( | ||
name = "Enabled", | ||
desc = "Enable sound responses which play animal sounds when they are said in chat.", | ||
) | ||
@FeatureToggle | ||
@ConfigEditorBoolean | ||
var enabled: Boolean = false | ||
|
||
@Expose | ||
@ConfigOption(name = "Sound Responses", desc = "Add animal sounds to play when certain words are said in chat.") | ||
@ConfigEditorDraggableList | ||
var soundResponses = SoundResponseTypes.entries.toMutableList() | ||
} |
60 changes: 60 additions & 0 deletions
60
src/main/java/at/hannibal2/skyhanni/features/chat/ChatSoundResponse.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
package at.hannibal2.skyhanni.features.chat | ||
|
||
import at.hannibal2.skyhanni.SkyHanniMod | ||
import at.hannibal2.skyhanni.events.LorenzChatEvent | ||
import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule | ||
import at.hannibal2.skyhanni.utils.LorenzUtils | ||
import at.hannibal2.skyhanni.utils.RegexUtils.matches | ||
import at.hannibal2.skyhanni.utils.SoundUtils | ||
import at.hannibal2.skyhanni.utils.SoundUtils.playSound | ||
import at.hannibal2.skyhanni.utils.StringUtils.firstLetterUppercase | ||
import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern | ||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent | ||
|
||
@SkyHanniModule | ||
object ChatSoundResponse { | ||
|
||
private val config get() = SkyHanniMod.feature.chat.soundResponse | ||
|
||
init { | ||
SoundResponseTypes.entries.forEach { it.pattern } | ||
} | ||
|
||
@SubscribeEvent | ||
fun onLorenzChat(event: LorenzChatEvent) { | ||
if (!isEnabled()) return | ||
|
||
for (soundType in SoundResponseTypes.entries) { | ||
if (!config.soundResponses.contains(soundType)) continue | ||
if (soundType.pattern.matches(event.message)) { | ||
soundType.sound.playSound() | ||
return | ||
} | ||
} | ||
} | ||
|
||
fun isEnabled() = LorenzUtils.inSkyBlock && config.enabled | ||
} | ||
|
||
private const val START_PATTERN = "(?:^|^.* )(?: |§.)*(?i)" | ||
private const val END_PATTERN = "(?: |§.|!|\\?|\\.)*(?:\$| .*\$)" | ||
|
||
enum class SoundResponseTypes(soundLocation: String, triggersOn: List<String>) { | ||
CAT("mob.cat.meow", listOf("meow")), | ||
DOG("mob.wolf.bark", listOf("bark", "arf", "woof")), | ||
SHEEP("mob.sheep.say", listOf("baa+h*")), | ||
COW("mob.cow.say", listOf("moo+")), | ||
PIG("mob.pig.say", listOf("oink")), | ||
CHICKEN("mob.chicken.say", listOf("cluck")), | ||
; | ||
|
||
val sound by lazy { SoundUtils.createSound(soundLocation, 1f) } | ||
|
||
// creates a pattern that looks for if the message contains any of the triggerOn strings but as a full word | ||
val pattern by RepoPattern.pattern( | ||
"chat.sound.response" + name.lowercase(), | ||
"$START_PATTERN(?:${triggersOn.joinToString("|")})$END_PATTERN", | ||
) | ||
|
||
override fun toString(): String = name.firstLetterUppercase() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters