\n \u003Ca href=\"https://github.com/WiIIiam278/HuskTowns/actions/workflows/ci.yml\">\n \u003Cimg src=\"https://img.shields.io/github/actions/workflow/status/WiIIiam278/HuskTowns/ci.yml?branch=master&logo=github\"/>\n \u003C/a> \n \u003Ca href=\"https://repo.william278.net/#/releases/net/william278/husktowns/\">\n \u003Cimg src=\"https://repo.william278.net/api/badge/latest/releases/net/william278/husktowns/husktowns-common?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/husktowns.92672/\">Spigot\u003C/a>\n \u003C/b> —\n \u003Cb>\n \u003Ca href=\"https://william278.net/docs/husktowns/setup\">Setup\u003C/a>\n \u003C/b> — \n \u003Cb>\n \u003Ca href=\"https://william278.net/docs/husktowns/\">Docs\u003C/a>\n \u003C/b> — \n \u003Cb>\n \u003Ca href=\"http://github.com/WiIIiam278/HuskTowns/issues\">Issues\u003C/a>\n \u003C/b>\n\u003C/p>\n\u003Cbr/>\n\n**HuskTowns** is a simple and elegant proxy-compatible Towny-style protection plugin for Spigot-based Minecraft servers. Let players form towns, claim chunks and carve out a thriving community. Built into HuskTowns is a robust and beautiful chat interface with a plethora of admin tools and config options to let you tailor the plugin to your needs.\n\nAll of this is supported on both standalone setups and across a network of proxied servers—with support for a good range of add-ons to further enhance your experience.\n\n## Features\n**⭐ Works cross-server** — Let players seamlessly manage their towns, claims and teleport to their town spawn across your proxy network!\n\n**⭐ Super intuitive** — Users will pick up how to use it right away! Make a town with /town create and claim a chunk with /town claim to get started.\n\n**⭐ Quick and beautiful menus** — Sometimes, simple is better. No monolithic chest GUIs—instead, robust and beautiful interactive chat menus.\n\n**⭐ Great admin features** — Manage the towns on your server and easily make admin claims. Comes with built-in support for Dynmap, BlueMap, Pl3xMap, Plan, LuckPerms, HuskHomes & more!\n\n**⭐ Easy to configure** — Players can fine-tune town flags and access settings in-game, and admins can easily configure roles and levels through a simple config structure.\n\n**⭐ Extensible API & open-source** — Need more? Extend the plugin with the Developer API. Or, submit a pull request through our code bounty system!\n\n**Ready?** [Let's head down town!](https://william278.net/docs/husktowns/setup)\n\n## Setup\nRequires Java 17+ and a Minecraft 1.17.1+ Spigot-based server. A MySQL database and (optionally) Redis are also needed if you wish to run the plugin across multiple servers on a proxy network.\n\n1. Place the plugin jar file in the `/plugins/` directory of each Spigot server you want to install it on.\n2. Start, then stop every server to let HuskTowns generate the config file.\n3. Navigate to the HuskTowns config file on each server (`~/plugins/HuskTowns/config.yml`) \n4. Configure the plugin to your liking. If you are running HuskTowns across multiple servers, enable `cross_server` mode and fill in your MySQL credentials, remembering to change the database type to `MYSQL` as well.\n5. You can also modify the level requirements in `~/levels.yml`, the default town rule settings in `~/rules.yml` and the town roles in `~/roles.yml`\n6. Start every server again and HuskTowns should have completed installation!\n\n## Development\nTo build HuskTowns, simply run the following in the root of the repository:\n\n```bash\n./gradlew clean build\n```\n\n### License\nHuskTowns is licensed under the Apache 2.0 license.\n\n- [License](https://github.com/WiIIiam278/HuskTowns/blob/master/LICENSE)\n\nContributions to the project are welcome—feel free to open a pull request with new features, improvements and/or fixes!\n\n### Support\nDue to its complexity, official binaries and customer support for HuskTowns is provided through a paid model. This means that support is only available to users who have purchased a license to the plugin from Spigot, Polymart, Craftaro, or BuiltByBit and have provided proof of purchase. Please join our Discord server if you have done so and need help!\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. ([More info…](https://william278.net/docs/husktowns/translations))\n\n- [Locales Directory](https://github.com/WiIIiam278/HuskTowns/tree/master/common/src/main/resources/locales)\n- [English Locales](https://github.com/WiIIiam278/HuskTowns/tree/master/common/src/main/resources/locales/en-gb.yml)\n\n## Links\n- [Docs](https://william278.net/docs/husktowns) — Read the plugin documentation!\n- [Spigot](https://www.spigotmc.org/resources/husktowns.92672/) — View the Spigot resource page (Also: [Polymart](https://polymart.org/resource/husktowns.1056), [Craftaro](https://craftaro.com/marketplace/product/husktowns.622), [BuiltByBit](https://builtbybit.com/resources/husktowns.34959/))\n- [Issues](https://github.com/WiIIiam278/HuskTowns/issues) — File a bug report or feature request\n- [Discord](https://discord.gg/tVYhJfyDWG) — Get help, ask questions (Proof of purchase required)\n- [bStats](https://bstats.org/plugin/bukkit/HuskTowns/11265) — View plugin metrics\n\n---\n© [William278](https://william278.net/), 2024. Licensed under the Apache-2.0 License.\n",[21,24,27],{"id":22,"url":23},"spigot","https://www.spigotmc.org/resources/husktowns.92672/",{"id":25,"url":26},"polymart","https://polymart.org/resource/husktowns.1056",{"id":28,"url":29},"builtbybit","https://builtbybit.com/resources/husktowns.34959/",[31],"William278",[22,33],"paper",9.99,"842728756384759828",false,[38,73,118],{"order":39,"name":40,"children":41},0,"Setup",[42,51],{"order":39,"url":43,"title":40,"icon":44,"children":45},"setup","fa6-solid:book",[46],{"order":39,"url":47,"title":48,"icon":49,"children":50},"legacy-migration","Legacy Migration","material-symbols:upgrade-rounded",[],{"order":52,"url":53,"title":54,"icon":55,"children":56},1,"config-files","Config","fa6-solid:file-code",[57,62,67],{"order":39,"url":58,"title":59,"icon":60,"children":61},"database","Database","fa6-solid:database",[],{"order":52,"url":63,"title":64,"icon":65,"children":66},"redis-support","Redis","devicon-plain:redis",[],{"order":68,"url":69,"title":70,"icon":71,"children":72},2,"translations","Locales","material-symbols:translate",[],{"order":52,"name":74,"children":75},"Features",[76,81,101,106,112],{"order":39,"url":77,"title":78,"icon":79,"children":80},"commands","Commands","octicon:command-palette-16",[],{"order":52,"url":82,"title":83,"icon":84,"children":85},"towns","Towns","fa-solid:city",[86,91,96],{"order":39,"url":87,"title":88,"icon":89,"children":90},"roles","Roles","eos-icons:role-binding",[],{"order":52,"url":92,"title":93,"icon":94,"children":95},"relations","Alliances & Enemies","ri:hearts-fill",[],{"order":68,"url":97,"title":98,"icon":99,"children":100},"wars","Wars","healthicons:war",[],{"order":68,"url":102,"title":103,"icon":104,"children":105},"claims","Claims","material-symbols:border-all-outline-rounded",[],{"order":107,"url":108,"title":109,"icon":110,"children":111},3,"inactive-town-pruning","Inactivity Pruning","icon-park-outline:sleep",[],{"order":113,"url":114,"title":115,"icon":116,"children":117},4,"hooks","Hooks","fa6-solid:plug",[],{"order":68,"name":119,"children":120},"Developers",[121,145,149],{"order":39,"url":122,"title":123,"icon":124,"children":125},"api","API v3","mdi:api",[126,130,135,140],{"order":39,"url":127,"title":128,"icon":84,"children":129},"towns-api","Towns API",[],{"order":52,"url":131,"title":132,"icon":133,"children":134},"claims-api","Claims API","mdi:cog-box",[],{"order":68,"url":136,"title":137,"icon":138,"children":139},"operations-api","Operations API","mdi:movie-open-cog",[],{"order":107,"url":141,"title":142,"icon":143,"children":144},"api-events","API Events","mingcute:lightning-line",[],{"order":52,"url":146,"title":147,"icon":124,"children":148},"api-v1","API v1 (legacy)",[],{"order":68,"url":18,"title":150,"icon":151,"children":152},"Source Code","fa6-solid:code",[],{"SVG":154,"PNG":155,"PNG_TRANSPARENT":156,"SVG_TRANSPARENT":157},"husktowns.svg","husktowns.png","husktowns-transparent.png","husktowns-transparent.svg",[],[],{"downloadCount":161,"averageRating":162,"numberOfRatings":163,"interactions":164,"onlinePlayers":39,"onlineServers":39},492,4.53125,16,82,{"data":166,"body":167},{},{"type":168,"children":169},"root",[170,178,185,203,223,229,234,241,258,264,290,296,304,310,315,320,339,344,365,371,514,520,564,570,591,597],{"type":171,"tag":172,"props":173,"children":174},"element","p",{},[175],{"type":176,"value":177},"text","This will walk you through installing HuskTowns on either your Spigot server, or proxied network of Spigot servers.",{"type":171,"tag":179,"props":180,"children":182},"h2",{"id":181},"requirements",[183],{"type":176,"value":184},"Requirements",{"type":171,"tag":186,"props":187,"children":190},"notice",{"title":188,"type":189},"Note:","info",[191],{"type":171,"tag":172,"props":192,"children":193},{},[194,196],{"type":176,"value":195},"If the plugin fails to load, please check that you are not running an ",{"type":171,"tag":197,"props":198,"children":200},"a",{"href":199},"Unsupported-Versions",[201],{"type":176,"value":202},"incompatible version combination",{"type":171,"tag":204,"props":205,"children":206},"ul",{},[207,213,218],{"type":171,"tag":208,"props":209,"children":210},"li",{},[211],{"type":176,"value":212},"A Spigot-based Minecraft server (1.17.1 or higher, Java 17+)",{"type":171,"tag":208,"props":214,"children":215},{},[216],{"type":176,"value":217},"(For proxy network support) A proxy server (Velocity, BungeeCord) and MySQL (v8.0+) database",{"type":171,"tag":208,"props":219,"children":220},{},[221],{"type":176,"value":222},"(For optional redis support) A Redis database (v5.0+)",{"type":171,"tag":179,"props":224,"children":226},{"id":225},"single-server-setup-instructions",[227],{"type":176,"value":228},"Single-server Setup Instructions",{"type":171,"tag":172,"props":230,"children":231},{},[232],{"type":176,"value":233},"These instructions are for simply installing HuskTowns on one Spigot/Paper server.",{"type":171,"tag":235,"props":236,"children":238},"h3",{"id":237},"_1-install-the-jar",[239],{"type":176,"value":240},"1. Install the jar",{"type":171,"tag":204,"props":242,"children":243},{},[244],{"type":171,"tag":208,"props":245,"children":246},{},[247,249,256],{"type":176,"value":248},"Place the plugin jar file in the ",{"type":171,"tag":250,"props":251,"children":253},"code",{"className":252},[],[254],{"type":176,"value":255},"/plugins/",{"type":176,"value":257}," directory of your Spigot server.",{"type":171,"tag":235,"props":259,"children":261},{"id":260},"_2-restart-the-server-and-configure",[262],{"type":176,"value":263},"2. Restart the server and configure",{"type":171,"tag":204,"props":265,"children":266},{},[267,272,277],{"type":171,"tag":208,"props":268,"children":269},{},[270],{"type":176,"value":271},"Start, then stop your server to let HuskTowns generate the config file.",{"type":171,"tag":208,"props":273,"children":274},{},[275],{"type":176,"value":276},"You can now edit the config files to your liking.",{"type":171,"tag":208,"props":278,"children":279},{},[280,282,288],{"type":176,"value":281},"For the ",{"type":171,"tag":250,"props":283,"children":285},{"className":284},[],[286],{"type":176,"value":287},"roles.yml",{"type":176,"value":289}," file especially, make sure to set that file up now as adding new roles later isn't possible",{"type":171,"tag":235,"props":291,"children":293},{"id":292},"_3-turn-on-your-server",[294],{"type":176,"value":295},"3. Turn on your server",{"type":171,"tag":204,"props":297,"children":298},{},[299],{"type":171,"tag":208,"props":300,"children":301},{},[302],{"type":176,"value":303},"Start your server again and enjoy HuskTowns!",{"type":171,"tag":179,"props":305,"children":307},{"id":306},"multi-server-setup-instructions",[308],{"type":176,"value":309},"Multi-server Setup Instructions",{"type":171,"tag":172,"props":311,"children":312},{},[313],{"type":176,"value":314},"These instructions are for installing HuskTowns on multiple Spigot servers and having them network together. A MySQL database (v8.0+) is required.",{"type":171,"tag":235,"props":316,"children":318},{"id":317},"_1-install-the-jar-1",[319],{"type":176,"value":240},{"type":171,"tag":204,"props":321,"children":322},{},[323,334],{"type":171,"tag":208,"props":324,"children":325},{},[326,327,332],{"type":176,"value":248},{"type":171,"tag":250,"props":328,"children":330},{"className":329},[],[331],{"type":176,"value":255},{"type":176,"value":333}," directory of each Spigot server.",{"type":171,"tag":208,"props":335,"children":336},{},[337],{"type":176,"value":338},"You don't need to install HuskTowns as a proxy plugin.",{"type":171,"tag":235,"props":340,"children":342},{"id":341},"_2-restart-the-server-and-configure-1",[343],{"type":176,"value":263},{"type":171,"tag":204,"props":345,"children":346},{},[347,352],{"type":171,"tag":208,"props":348,"children":349},{},[350],{"type":176,"value":351},"Start, then stop every server to let HuskTowns generate the config file.",{"type":171,"tag":208,"props":353,"children":354},{},[355,357,363],{"type":176,"value":356},"Advanced users: If you'd prefer, you can just create one config.yml file and create symbolic links in each ",{"type":171,"tag":250,"props":358,"children":360},{"className":359},[],[361],{"type":176,"value":362},"/plugins/HuskTowns/",{"type":176,"value":364}," folder to it to make updating it easier.",{"type":171,"tag":235,"props":366,"children":368},{"id":367},"_3-configure-servers-to-use-cross-server-mode",[369],{"type":176,"value":370},"3. Configure servers to use cross-server mode",{"type":171,"tag":204,"props":372,"children":373},{},[374,387,413,433,461,481,509],{"type":171,"tag":208,"props":375,"children":376},{},[377,379,385],{"type":176,"value":378},"Navigate to the HuskTowns general config file on each server (",{"type":171,"tag":250,"props":380,"children":382},{"className":381},[],[383],{"type":176,"value":384},"~/plugins/HuskTowns/config.yml",{"type":176,"value":386},")",{"type":171,"tag":208,"props":388,"children":389},{},[390,392,397,399,405,407],{"type":176,"value":391},"Under ",{"type":171,"tag":250,"props":393,"children":395},{"className":394},[],[396],{"type":176,"value":58},{"type":176,"value":398},", set ",{"type":171,"tag":250,"props":400,"children":402},{"className":401},[],[403],{"type":176,"value":404},"type",{"type":176,"value":406}," to ",{"type":171,"tag":250,"props":408,"children":410},{"className":409},[],[411],{"type":176,"value":412},"MYSQL",{"type":171,"tag":208,"props":414,"children":415},{},[416,417,423,425,431],{"type":176,"value":391},{"type":171,"tag":250,"props":418,"children":420},{"className":419},[],[421],{"type":176,"value":422},"mysql",{"type":176,"value":424},"/",{"type":171,"tag":250,"props":426,"children":428},{"className":427},[],[429],{"type":176,"value":430},"credentials",{"type":176,"value":432},", enter the credentials of your MySQL database server.",{"type":171,"tag":208,"props":434,"children":435},{},[436,438,444,446,452,453,459],{"type":176,"value":437},"Scroll down and look for the ",{"type":171,"tag":250,"props":439,"children":441},{"className":440},[],[442],{"type":176,"value":443},"cross_server",{"type":176,"value":445}," section. Set ",{"type":171,"tag":250,"props":447,"children":449},{"className":448},[],[450],{"type":176,"value":451},"enabled",{"type":176,"value":406},{"type":171,"tag":250,"props":454,"children":456},{"className":455},[],[457],{"type":176,"value":458},"true",{"type":176,"value":460},".",{"type":171,"tag":208,"props":462,"children":463},{},[464,466,472,473,479],{"type":176,"value":465},"You can additionally configure a Redis server to use for network messaging, if you prefer (set the ",{"type":171,"tag":250,"props":467,"children":469},{"className":468},[],[470],{"type":176,"value":471},"messenger_type",{"type":176,"value":406},{"type":171,"tag":250,"props":474,"children":476},{"className":475},[],[477],{"type":176,"value":478},"REDIS",{"type":176,"value":480}," if you do this).",{"type":171,"tag":208,"props":482,"children":483},{},[484,486,492,494,500,502,507],{"type":176,"value":485},"Update your ",{"type":171,"tag":250,"props":487,"children":489},{"className":488},[],[490],{"type":176,"value":491},"levels.yml",{"type":176,"value":493},", ",{"type":171,"tag":250,"props":495,"children":497},{"className":496},[],[498],{"type":176,"value":499},"rules.yml",{"type":176,"value":501}," and ",{"type":171,"tag":250,"props":503,"children":505},{"className":504},[],[506],{"type":176,"value":287},{"type":176,"value":508}," files to your liking. For the roles.yml file especially, make sure to set that file up now as adding new roles later isn't possible",{"type":171,"tag":208,"props":510,"children":511},{},[512],{"type":176,"value":513},"Save the configs file. Make sure you've updated the files on every server.",{"type":171,"tag":235,"props":515,"children":517},{"id":516},"_4-restart-servers-and-set-serveryml-values",[518],{"type":176,"value":519},"4. Restart servers and set server.yml values",{"type":171,"tag":204,"props":521,"children":522},{},[523,543],{"type":171,"tag":208,"props":524,"children":525},{},[526,528,534,536,542],{"type":176,"value":527},"Restart each server again. A ",{"type":171,"tag":250,"props":529,"children":531},{"className":530},[],[532],{"type":176,"value":533},"server.yml",{"type":176,"value":535}," file should generate inside (",{"type":171,"tag":250,"props":537,"children":539},{"className":538},[],[540],{"type":176,"value":541},"~/plugins/HuskTowns/",{"type":176,"value":386},{"type":171,"tag":208,"props":544,"children":545},{},[546,548,554,556,562],{"type":176,"value":547},"Set the ",{"type":171,"tag":250,"props":549,"children":551},{"className":550},[],[552],{"type":176,"value":553},"name",{"type":176,"value":555}," of the server in this file to the ID of this server as defined in the config of your proxy (e.g. if this is the \"hub\" server you access with ",{"type":171,"tag":250,"props":557,"children":559},{"className":558},[],[560],{"type":176,"value":561},"/server hub",{"type":176,"value":563},", put \"hub\" here)",{"type":171,"tag":235,"props":565,"children":567},{"id":566},"_5-restart-your-servers-one-last-time",[568],{"type":176,"value":569},"5. Restart your servers one last time",{"type":171,"tag":204,"props":571,"children":572},{},[573,578],{"type":171,"tag":208,"props":574,"children":575},{},[576],{"type":176,"value":577},"Provided your MySQL database credentials were correct, your network should now be setup to use HuskTowns!",{"type":171,"tag":208,"props":579,"children":580},{},[581,583,589],{"type":176,"value":582},"You can delete the ",{"type":171,"tag":250,"props":584,"children":586},{"className":585},[],[587],{"type":176,"value":588},"HuskTownsData.db",{"type":176,"value":590}," SQLite flat file that was generated, if you would like.",{"type":171,"tag":179,"props":592,"children":594},{"id":593},"next-steps",[595],{"type":176,"value":596},"Next steps",{"type":171,"tag":204,"props":598,"children":599},{},[600,609,618],{"type":171,"tag":208,"props":601,"children":602},{},[603],{"type":171,"tag":197,"props":604,"children":606},{"href":605},"/docs/husktowns/getting-started",[607],{"type":176,"value":608},"Getting Started",{"type":171,"tag":208,"props":610,"children":611},{},[612],{"type":171,"tag":197,"props":613,"children":615},{"href":614},"/docs/husktowns/config-files",[616],{"type":176,"value":617},"Config Files",{"type":171,"tag":208,"props":619,"children":620},{},[621],{"type":171,"tag":197,"props":622,"children":623},{"href":78},[624],{"type":176,"value":625},"Commands & Permissions",["Reactive",627],{"$snuxt-i18n-meta":628,"$sauth":-1,"$sxsrf":-1},{},["Set"],["ShallowReactive",631],{"$fOVQqbkKDBW2_5kdTPxds549I-7C3eysDmtAyEx2dK9c":-1,"user":632,"mdc-b5yaz1-key":-1},["NuxtError",633],{"message":634,"statusCode":635,"statusMessage":636,"data":637},"[GET] \"https://api.william278.net/v1/users/@me\": 401 Unauthorized",401,"Unauthorized",{"error":638},"You must be logged in to perform this action.","/docs/husktowns/setup"]