diff options
7 files changed, 143 insertions, 40 deletions
diff --git a/docs/chattabs.md b/docs/chattabs.md index 6caeaaf..2c8ca9a 100644 --- a/docs/chattabs.md +++ b/docs/chattabs.md @@ -12,6 +12,9 @@ something like this: "enabled": true, "name": "ALL", "unformatted": false, + "color": 14737632, + "hovered_color": 16777120, + "selected_color": 10526880, "prefix": "" }, { @@ -78,6 +81,9 @@ something like this: "§cThis party is currently muted\\.§r", "(§r)*(§9P §8>)+(.*)" ], + "color": 14737632, + "hovered_color": 16777120, + "selected_color": 10526880, "prefix": "/pc " }, { @@ -88,6 +94,9 @@ something like this: "Guild >", "G >" ], + "color": 14737632, + "hovered_color": 16777120, + "selected_color": 10526880, "prefix": "/gc " }, { @@ -98,15 +107,19 @@ something like this: "To ", "From " ], + "color": 14737632, + "hovered_color": 16777120, + "selected_color": 10526880, "prefix": "/r " } ], - "version": 3 + "version": 4 } ``` The `version` property stores the version number of the Chat Tabs JSON file. This should not be touched unless you have -an older Chat Tab JSON and would like Chatting to automatically migrate to the newer version. +an older Chat Tab JSON and would like Chatting to automatically migrate to the newer version. The current version is `4` +. The `tabs` property stores all the chat tabs, in the order they should be displayed in. By default, there are 4 chat tabs - ALL, PARTY, GUILD, and PM. ALL simply shows all messages; nothing is filtered. PARTY shows only party messages, @@ -144,6 +157,9 @@ that you may want to use. ... "(§r)*(§9P §8>)+(.*)" ], + "color": 14737632, + "hovered_color": 16777120, + "selected_color": 10526880, "prefix": "/pc " } ``` @@ -197,5 +213,13 @@ The `regex` property allows you to only allow a message if it matches a regex in You can append `ignore_` to `starts`, `ends`, `equals`, or `regex` to ignore messages that match rather than allow, and of course use both at the same time. +The `color` property allows you to change the color of the chat tab text. It is in RGBA format. + +The `hovered_color` property allows you to change the color of the chat tab text while being hovered. This takes +priority over the `color` property. Like the `color` property, it is in RGBA format. + +The `selected_color` property allows you to change the color of the chat tab text while selected. This takes priority +over all the other color properties. Like the other color properties, it is in RGBA format. + The `prefix` property appends the prefix to any message sent while in the specific chat tab **if it is not a command**. This can be used to automatically send messages in a specific channel in servers, like in Hypixel.
\ No newline at end of file diff --git a/src/main/kotlin/cc/woverflow/chatting/chat/ChatTab.kt b/src/main/kotlin/cc/woverflow/chatting/chat/ChatTab.kt index 1e20b01..2cd4418 100644 --- a/src/main/kotlin/cc/woverflow/chatting/chat/ChatTab.kt +++ b/src/main/kotlin/cc/woverflow/chatting/chat/ChatTab.kt @@ -20,6 +20,9 @@ data class ChatTab( @SerializedName("ignore_ends") val ignoreEndsWith: List<String>?, @SerializedName("ignore_equals") val ignoreEquals: List<String>?, @SerializedName("ignore_regex") val uncompiledIgnoreRegex: List<String>?, + val color: Int?, + @SerializedName("hovered_color") val hoveredColor: Int?, + @SerializedName("selected_color") val selectedColor: Int?, val prefix: String, ) { lateinit var button: TabButton diff --git a/src/main/kotlin/cc/woverflow/chatting/chat/ChatTabs.kt b/src/main/kotlin/cc/woverflow/chatting/chat/ChatTabs.kt index ec9dfc8..99a8999 100644 --- a/src/main/kotlin/cc/woverflow/chatting/chat/ChatTabs.kt +++ b/src/main/kotlin/cc/woverflow/chatting/chat/ChatTabs.kt @@ -1,6 +1,7 @@ package cc.woverflow.chatting.chat import cc.woverflow.chatting.Chatting +import cc.woverflow.chatting.gui.components.TabButton import com.google.gson.GsonBuilder import com.google.gson.JsonArray import com.google.gson.JsonObject @@ -43,16 +44,26 @@ object ChatTabs { chatTabJson.tabs.forEach { applyVersion2Changes(it.asJsonObject) applyVersion3Changes(it.asJsonObject) + applyVersion4Changes(it.asJsonObject) } - chatTabJson.version = 3 + chatTabJson.version = ChatTabsJson.VERSION tabFile.writeText(chatTabJson.toString()) } 2 -> { - // ver 2 adds `enabled` + // ver 3 adds ignore_ chatTabJson.tabs.forEach { applyVersion3Changes(it.asJsonObject) + applyVersion4Changes(it.asJsonObject) + } + chatTabJson.version = ChatTabsJson.VERSION + tabFile.writeText(chatTabJson.toString()) + } + 3 -> { + // ver 4 adds color options + chatTabJson.tabs.forEach { + applyVersion4Changes(it.asJsonObject) } - chatTabJson.version = 3 + chatTabJson.version = ChatTabsJson.VERSION tabFile.writeText(chatTabJson.toString()) } } @@ -86,6 +97,12 @@ object ChatTabs { json.add("ignore_regex", JsonArray()) } + private fun applyVersion4Changes(json: JsonObject) { + json.addProperty("color", TabButton.color) + json.addProperty("hovered_color", TabButton.hoveredColor) + json.addProperty("selected_color", TabButton.selectedColor) + } + fun shouldRender(message: IChatComponent): Boolean { return currentTab?.shouldRender(message) ?: true } @@ -95,12 +112,30 @@ object ChatTabs { val jsonObject = JsonObject() val defaultTabs = generateDefaultTabs() jsonObject.add("tabs", defaultTabs) - jsonObject.addProperty("version", 3) + jsonObject.addProperty("version", ChatTabsJson.VERSION) tabFile.writeText(jsonObject.toString()) } private fun generateDefaultTabs(): JsonArray { - val all = ChatTab(true, "ALL", false, null, null, null, null, null, null, null, null, null, null, "") + val all = ChatTab( + true, + "ALL", + false, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + TabButton.color, + TabButton.hoveredColor, + TabButton.selectedColor, + "" + ) val party = ChatTab( true, "PARTY", @@ -164,6 +199,9 @@ object ChatTabs { null, null, null, + TabButton.color, + TabButton.hoveredColor, + TabButton.selectedColor, "/pc " ) val guild = ChatTab( @@ -180,6 +218,9 @@ object ChatTabs { null, null, null, + TabButton.color, + TabButton.hoveredColor, + TabButton.selectedColor, "/gc " ) val pm = ChatTab( @@ -196,6 +237,9 @@ object ChatTabs { null, null, null, + TabButton.color, + TabButton.hoveredColor, + TabButton.selectedColor, "/r " ) tabs.add(all) diff --git a/src/main/kotlin/cc/woverflow/chatting/chat/ChatTabsJson.kt b/src/main/kotlin/cc/woverflow/chatting/chat/ChatTabsJson.kt index e37ef7f..6954b8e 100644 --- a/src/main/kotlin/cc/woverflow/chatting/chat/ChatTabsJson.kt +++ b/src/main/kotlin/cc/woverflow/chatting/chat/ChatTabsJson.kt @@ -3,9 +3,13 @@ package cc.woverflow.chatting.chat import com.google.gson.JsonArray import com.google.gson.annotations.SerializedName -data class ChatTabsJson(@SerializedName("tabs") val tabs: JsonArray, @SerializedName("version") var version: Int) { +data class ChatTabsJson(@SerializedName("tabs") val tabs: JsonArray, var version: Int) { override fun toString(): String { - return "{\"tabs\": $tabs, \"version\": \"$version\"}" + return "{\"tabs\": $tabs, \"version\": $version}" + } + + companion object { + const val VERSION = 4 } }
\ No newline at end of file diff --git a/src/main/kotlin/cc/woverflow/chatting/config/ChattingConfig.kt b/src/main/kotlin/cc/woverflow/chatting/config/ChattingConfig.kt index 6c09731..223de76 100644 --- a/src/main/kotlin/cc/woverflow/chatting/config/ChattingConfig.kt +++ b/src/main/kotlin/cc/woverflow/chatting/config/ChattingConfig.kt @@ -5,6 +5,8 @@ import cc.woverflow.chatting.chat.ChatShortcuts import cc.woverflow.chatting.chat.ChatTab import cc.woverflow.chatting.chat.ChatTabs import cc.woverflow.chatting.gui.ChatShortcutViewGui +import cc.woverflow.chatting.gui.components.TabButton +import cc.woverflow.onecore.utils.openScreen import gg.essential.api.EssentialAPI import gg.essential.vigilance.Vigilant import gg.essential.vigilance.data.Category @@ -14,7 +16,8 @@ import gg.essential.vigilance.data.SortingBehavior import java.awt.Color import java.io.File -object ChattingConfig : Vigilant(File(Chatting.modDir, "${Chatting.ID}.toml"), Chatting.NAME, sortingBehavior = ConfigSorting) { +object ChattingConfig : + Vigilant(File(Chatting.modDir, "${Chatting.ID}.toml"), Chatting.NAME, sortingBehavior = ConfigSorting) { @Property( type = PropertyType.SELECTOR, @@ -106,11 +109,7 @@ object ChattingConfig : Vigilant(File(Chatting.modDir, "${Chatting.ID}.toml"), C name = "Screenshot Mode", description = "The mode in which screenshotting will work.", category = "Screenshotting", - options = [ - "Save To System", - "Add To Clipboard", - "Both" - ] + options = ["Save To System", "Add To Clipboard", "Both"] ) var copyMode = 0 @@ -123,10 +122,7 @@ object ChattingConfig : Vigilant(File(Chatting.modDir, "${Chatting.ID}.toml"), C var chatSearch = true @Property( - type = PropertyType.SWITCH, - name = "Chat Tabs", - description = "Add chat tabs.", - category = "Tabs" + type = PropertyType.SWITCH, name = "Chat Tabs", description = "Add chat tabs.", category = "Tabs" ) var chatTabs = true get() { @@ -147,10 +143,7 @@ object ChattingConfig : Vigilant(File(Chatting.modDir, "${Chatting.ID}.toml"), C var hypixelOnlyChatTabs = true @Property( - type = PropertyType.SWITCH, - name = "Chat Shortcuts", - description = "Add chat shortcuts.", - category = "Shortcuts" + type = PropertyType.SWITCH, name = "Chat Shortcuts", description = "Add chat shortcuts.", category = "Shortcuts" ) var chatShortcuts = false get() { @@ -176,9 +169,7 @@ object ChattingConfig : Vigilant(File(Chatting.modDir, "${Chatting.ID}.toml"), C description = "Edit chat shortcuts.", category = "Shortcuts" ) - fun openChatShortcutsGUI() { - EssentialAPI.getGuiUtil().openScreen(ChatShortcutViewGui()) - } + fun openChatShortcutsGUI() = ChatShortcutViewGui().openScreen() init { initialize() @@ -186,7 +177,25 @@ object ChattingConfig : Vigilant(File(Chatting.modDir, "${Chatting.ID}.toml"), C chatTabs = funny ChatTabs.initialize() if (!funny) { - val dummy = ChatTab(true, "ALL", false, null, null, null, null, null, null, null, null, null, null, "") + val dummy = ChatTab( + true, + "ALL", + false, + null, + null, + null, + null, + null, + null, + null, + null, + null, + null, + TabButton.color, + TabButton.hoveredColor, + TabButton.selectedColor, + "" + ) dummy.initialize() ChatTabs.currentTab = dummy } else { diff --git a/src/main/kotlin/cc/woverflow/chatting/gui/components/CleanButton.kt b/src/main/kotlin/cc/woverflow/chatting/gui/components/CleanButton.kt index 9863936..1d8d8ce 100644 --- a/src/main/kotlin/cc/woverflow/chatting/gui/components/CleanButton.kt +++ b/src/main/kotlin/cc/woverflow/chatting/gui/components/CleanButton.kt @@ -14,7 +14,17 @@ import java.awt.Color * https://github.com/P0keDev/ChatShortcuts/blob/master/LICENSE * @author P0keDev */ -open class CleanButton(buttonId: Int, private val x: () -> Int, private val y: () -> Int, widthIn: Int, heightIn: Int, name: String, private val renderType: () -> RenderType) : +open class CleanButton(buttonId: Int, private val x: () -> Int, private val y: () -> Int, widthIn: Int, heightIn: Int, name: String, private val renderType: () -> RenderType, private val textColor: (packedFGColour: Int, enabled: Boolean, hovered: Boolean) -> Int = { packedFGColour: Int, enabled: Boolean, hovered: Boolean -> + var j = 14737632 + if (packedFGColour != 0) { + j = packedFGColour + } else if (!enabled) { + j = 10526880 + } else if (hovered) { + j = 16777120 + } + j +}) : GuiButton(buttonId, x.invoke(), 0, widthIn, heightIn, name) { open fun isEnabled(): Boolean { @@ -36,8 +46,8 @@ open class CleanButton(buttonId: Int, private val x: () -> Int, private val y: ( override fun drawButton(mc: Minecraft, mouseX: Int, mouseY: Int) { enabled = isEnabled() - xPosition = x.invoke() - yPosition = y.invoke() + xPosition = x() + yPosition = y() if (visible) { val fontrenderer = mc.fontRendererObj GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f) @@ -53,15 +63,8 @@ open class CleanButton(buttonId: Int, private val x: () -> Int, private val y: ( ) } mouseDragged(mc, mouseX, mouseY) - var j = 14737632 - if (packedFGColour != 0) { - j = packedFGColour - } else if (!enabled) { - j = 10526880 - } else if (hovered) { - j = 16777120 - } - when (renderType.invoke()) { + val j = textColor(packedFGColour, enabled, hovered) + when (renderType()) { RenderType.NONE, RenderType.SHADOW -> { drawCenteredString(fontrenderer, displayString, xPosition + width / 2, yPosition + (height - 8) / 2, j) } diff --git a/src/main/kotlin/cc/woverflow/chatting/gui/components/TabButton.kt b/src/main/kotlin/cc/woverflow/chatting/gui/components/TabButton.kt index 25190e1..da20eed 100644 --- a/src/main/kotlin/cc/woverflow/chatting/gui/components/TabButton.kt +++ b/src/main/kotlin/cc/woverflow/chatting/gui/components/TabButton.kt @@ -8,7 +8,17 @@ import gg.essential.universal.UResolution class TabButton(buttonId: Int, x: Int, widthIn: Int, heightIn: Int, private val chatTab: ChatTab) : CleanButton(buttonId, { x }, { UResolution.scaledHeight - 26 - }, widthIn, heightIn, chatTab.name, { RenderType.values()[ChattingConfig.textRenderType] }) { + }, widthIn, heightIn, chatTab.name, { RenderType.values()[ChattingConfig.textRenderType] }, { packedFGColour: Int, enabled: Boolean, hovered: Boolean -> + var j = chatTab.color ?: color + if (packedFGColour != 0) { + j = packedFGColour + } else if (!enabled) { + j = chatTab.selectedColor ?: selectedColor + } else if (hovered) { + j = chatTab.hoveredColor ?: hoveredColor + } + j + }) { override fun onMousePress() { ChatTabs.currentTab = chatTab @@ -17,4 +27,10 @@ class TabButton(buttonId: Int, x: Int, widthIn: Int, heightIn: Int, private val override fun isEnabled(): Boolean { return chatTab != ChatTabs.currentTab } + + companion object { + const val color: Int = 14737632 + const val hoveredColor: Int = 16777120 + const val selectedColor: Int = 10526880 + } }
\ No newline at end of file |