\n \u003Ca href=\"https://github.com/WiIIiam278/HuskChat/actions/workflows/ci.yml\">\n \u003Cimg src=\"https://img.shields.io/github/actions/workflow/status/WiIIiam278/HuskChat/ci.yml?branch=master&logo=github\"/>\n \u003C/a> \n \u003Ca href=\"https://repo.william278.net/#/releases/net/william278/huskchat/\">\n \u003Cimg src=\"https://repo.william278.net/api/badge/latest/releases/net/william278/huskchat?color=00fb9a&name=Maven&prefix=v\" />\n \u003C/a> \n \u003Ca href=\"https://discord.gg/tVYhJfyDWG\">\n \u003Cimg src=\"https://img.shields.io/discord/818135932103557162.svg?label=&logo=discord&logoColor=fff&color=7389D8&labelColor=6A7EC2\" />\n \u003C/a> \n \u003Cbr/>\n \u003Cb>\n \u003Ca href=\"https://www.spigotmc.org/resources/huskchat.94496/\">Spigot\u003C/a>\n \u003C/b> —\n \u003Cb>\n \u003Ca href=\"https://william278.net/docs/huskchat/setup\">Setup\u003C/a>\n \u003C/b> — \n \u003Cb>\n \u003Ca href=\"https://william278.net/docs/huskchat/\">Docs\u003C/a>\n \u003C/b> — \n \u003Cb>\n \u003Ca href=\"https://github.com/WiIIiam278/HuskChat/issues\">Issues\u003C/a>\n \u003C/b>\n\u003C/p>\n\u003Cbr/>\n\n**HuskChat** is a no-frills, simple and customisable chat system for Minecraft networks. It supports both running on BungeeCord and Velocity frontend servers for cross-server chat, or on a single-server Spigot setup.\n\nIt's designed to be easy to configure with an elegant out-of-box setup, while also being highly configurable, suiting a variety of use cases by allowing you to define channels and manage who can send and receive messages within them.\n\n## Features\n**⭐ Works great out of the box** — Install on your Spigot server or Velocity/BungeeCord-based proxy and use right away\n\n**⭐ Placeholder support** — Hooks with LuckPerms to display user roles, PAPI support via [PAPIProxyBridge](https://william278.net/docs/huskchat/formatting)\n\n**⭐ Private messaging** — Private messages—including group DMs&mdash and replying, admin spy features\n\n**⭐ Fine-tune channels** — Set send/receive permissions for channels, send messages to a discord webhook, filter [& more](https://william278.net/docs/huskchat/channels)!\n\n**⭐ Quick and easy to use** — Super simple set of [commands](https://william278.net/docs/huskchat/commands). Define channel shortcut commands, too!\n\n**⭐ Advanced profanity checking** — Machine learning powered profanity filter\n\n**⭐ Filters & replacers** — Customisable spam limiting filter, anti-advertising & special emoji\n\n**⭐ Modern formatting** — Utilise modern formatting, with RGB and Gradient support via [MineDown](https://github.com/Phoenix616/MineDown)\n\n## Building\nTo build HuskChat, you'll need python (>=`v3.6`) with associated packages installed; `jep` and `alt-profanity-check`. \nYou can install these with `pip install jep` and `pip install alt-profanity-check`. These are needed to run the profanity filter tests.\n\nThen, simply run the following in the root of the repository:\n```\n./gradlew clean build\n```\n\n## License\nHuskChat is licensed under the Apache 2.0 license.\n\n- [License](https://github.com/WiIIiam278/HuskChat/blob/master/LICENSE)\n\n## Translations\nTranslations of the plugin locales are welcome to help make the plugin more accessible. Please submit a pull request with your translations as a `.yml` file.\n\n- [Locales Directory](https://github.com/WiIIiam278/HuskChat/tree/master/common/src/main/resources/locales)\n- [English Locales](https://github.com/WiIIiam278/HuskChat/tree/master/common/src/main/resources/locales/en-gb.yml)\n\n## Links\n- [Docs](https://william278.net/docs/huskchat/) — Read the plugin documentation!\n- [Spigot](https://www.spigotmc.org/resources/huskchat.94496/) — View the Spigot resource page (Also: [Polymart](https://polymart.org/resource/huskchat.1217), [Modrinth](https://modrinth.com/plugin/huskchat))\n- [Issues](https://github.com/WiIIiam278/HuskChat/issues) — File a bug report or feature request\n- [Discord](https://discord.gg/tVYhJfyDWG) — Get help, ask questions\n- [bStats](https://bstats.org/plugin/bungeecord/HuskChat/11882) — View plugin metrics (Also: [Velocity](https://bstats.org/plugin/velocity/HuskChat%20-%20Velocity/14187))\n\n---\n© [William278](https://william278.net/), 2024. Licensed under the Apache-2.0 License.\n",[22,25,28],{"id":23,"url":24},"spigot","https://spigotmc.org/resources/huskchat.94496",{"id":26,"url":27},"polymart","https://polymart.org/resource/huskchat.1217",{"id":29,"url":30},"modrinth","https://modrinth.com/plugin/huskchat",[32],"William278",[23,34,35,36],"paper","waterfall","velocity",0,"",[40,58,83,106],{"order":37,"name":41,"children":42},"Setup",[43,47],{"order":37,"url":44,"title":41,"icon":45,"children":46},"setup","fa6-solid:book",[],{"order":48,"url":49,"title":50,"icon":51,"children":52},1,"config-files","Config","fa6-solid:file-code",[53],{"order":37,"url":54,"title":55,"icon":56,"children":57},"translations","Locales","material-symbols:translate",[],{"order":48,"name":59,"children":60},"Features",[61,66,71,77],{"order":37,"url":62,"title":63,"icon":64,"children":65},"commands","Commands","octicon:command-palette-16",[],{"order":48,"url":67,"title":68,"icon":69,"children":70},"join-and-quit-messages","Join & Quit Messages","mdi:greeting-outline",[],{"order":72,"url":73,"title":74,"icon":75,"children":76},2,"group-messages","Group Private Messages","ic:outline-email",[],{"order":78,"url":79,"title":80,"icon":81,"children":82},3,"social-and-local-spy","Social & Local Spy","tabler:spy",[],{"order":72,"name":84,"children":85},"Chat",[86,91,96,101],{"order":37,"url":87,"title":88,"icon":89,"children":90},"channels","Chat Channels","grommet-icons:channel",[],{"order":48,"url":92,"title":93,"icon":94,"children":95},"formatting","Formatting","mdi:paint-outline",[],{"order":72,"url":97,"title":98,"icon":99,"children":100},"filters-and-replacers","Filters & Replacers","lucide:filter",[],{"order":78,"url":102,"title":103,"icon":104,"children":105},"discord-hook","Discord Hook","material-symbols:webhook",[],{"order":78,"name":107,"children":108},"Developers",[109],{"order":37,"url":18,"title":110,"icon":111,"children":112},"Source Code","fa6-solid:code",[],20,{"SVG":115,"PNG":116,"PNG_TRANSPARENT":117,"SVG_TRANSPARENT":118},"huskchat.svg","huskchat.png","huskchat-transparent.png","huskchat-transparent.svg",[],[],{"downloadCount":122,"averageRating":123,"numberOfRatings":124,"interactions":125,"onlinePlayers":37,"onlineServers":37},27865,3.892307692307692,13,79,{"data":127,"body":128},{},{"type":129,"children":130},"root",[131,164,186,193,206,279],{"type":132,"tag":133,"props":134,"children":135},"element","p",{},[136,139,153,155,162],{"type":137,"value":138},"text","HuskChat supports a number of community-sourced translations of the plugin locales into different languages. The default language is ",{"type":132,"tag":140,"props":141,"children":145},"a",{"href":142,"rel":143},"https://github.com/WiIIiam278/HuskChat/blob/master/common/src/main/resources/locales/en-gb.yml",[144],"nofollow",[146],{"type":132,"tag":147,"props":148,"children":150},"code",{"className":149},[],[151],{"type":137,"value":152},"en-gb",{"type":137,"value":154}," (English). The messages file is formatted using ",{"type":132,"tag":140,"props":156,"children":159},{"href":157,"rel":158},"https://github.com/Phoenix616/MineDown",[144],[160],{"type":137,"value":161},"MineDown",{"type":137,"value":163},".",{"type":132,"tag":133,"props":165,"children":166},{},[167,169,175,177,184],{"type":137,"value":168},"You can change which preset language option to use by changing the top-level ",{"type":132,"tag":147,"props":170,"children":172},{"className":171},[],[173],{"type":137,"value":174},"language",{"type":137,"value":176}," setting in the plugin config.yml file. You must change this to one of the supported language codes. You can ",{"type":132,"tag":140,"props":178,"children":181},{"href":179,"rel":180},"https://github.com/WiIIiam278/HuskChat/tree/master/common/src/main/resources/locales",[144],[182],{"type":137,"value":183},"view a list of the supported languages",{"type":137,"value":185}," by looking at the locales source folder.",{"type":132,"tag":187,"props":188,"children":190},"h2",{"id":189},"contributing-locales",[191],{"type":137,"value":192},"Contributing Locales",{"type":132,"tag":133,"props":194,"children":195},{},[196,198,204],{"type":137,"value":197},"You can contribute locales by submitting a pull request with a yaml file containing translations of the ",{"type":132,"tag":140,"props":199,"children":201},{"href":142,"rel":200},[144],[202],{"type":137,"value":203},"default locales",{"type":137,"value":205}," into your language. Here's a few pointers for doing this:",{"type":132,"tag":207,"props":208,"children":209},"ul",{},[210,224,235,247,252,266],{"type":132,"tag":211,"props":212,"children":213},"li",{},[214,216,222],{"type":137,"value":215},"Do not translate the locale keys themselves (e.g. ",{"type":132,"tag":147,"props":217,"children":219},{"className":218},[],[220],{"type":137,"value":221},"channel_switched",{"type":137,"value":223},")",{"type":132,"tag":211,"props":225,"children":226},{},[227,229],{"type":137,"value":228},"Your pull request should be for a file in the ",{"type":132,"tag":140,"props":230,"children":232},{"href":179,"rel":231},[144],[233],{"type":137,"value":234},"locales folder",{"type":132,"tag":211,"props":236,"children":237},{},[238,240,245],{"type":137,"value":239},"Do not translate the ",{"type":132,"tag":140,"props":241,"children":243},{"href":157,"rel":242},[144],[244],{"type":137,"value":161},{"type":137,"value":246}," syntax itself or commands and their parameters; only the english interface text",{"type":132,"tag":211,"props":248,"children":249},{},[250],{"type":137,"value":251},"Each locale should be on one line, and the header should be removed.",{"type":132,"tag":211,"props":253,"children":254},{},[255,257,264],{"type":137,"value":256},"Use the correct ISO 639-1 ",{"type":132,"tag":140,"props":258,"children":261},{"href":259,"rel":260},"https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes",[144],[262],{"type":137,"value":263},"locale code",{"type":137,"value":265}," for your language and dialect",{"type":132,"tag":211,"props":267,"children":268},{},[269,271,277],{"type":137,"value":270},"If you are able to, you can add your name to the ",{"type":132,"tag":147,"props":272,"children":274},{"className":273},[],[275],{"type":137,"value":276},"AboutMenu",{"type":137,"value":278}," translators credit list yourself, otherwise this can be done for you",{"type":132,"tag":133,"props":280,"children":281},{},[282],{"type":137,"value":283},"Thank you for your interest in making HuskChat more accessible around the world!",["Reactive",285],{"$snuxt-i18n-meta":286,"$sauth":-1,"$sxsrf":-1},{},["Set"],["ShallowReactive",289],{"$fD1VhuLPQfSq5Kjb6MOPBDmeZZVXLASbuQ_sxsenhdug":-1,"user":290,"mdc--m1yapg-key":-1},["NuxtError",291],{"message":292,"statusCode":293,"statusMessage":294,"data":295},"[GET] \"https://api.william278.net/v1/users/@me\": 401 Unauthorized",401,"Unauthorized",{"error":296},"You must be logged in to perform this action.","/docs/huskchat/translations"]