Repository navigation
Releases
Pre-Release Build 1.1.1
Fixes
- Added compatibility builds for Minecraft 1.21.11, 26.1.2, 26.2 and 26.3, updating release coverage beyond 1.21.10.
- Updated the 26.x build pipeline to use Java 25 and Paper's build-qualified Maven API instead of the older Spigot API coordinate scheme.
- Corrected per-version
plugin.ymlAPI declarations and extended validation so published JARs match the intended Minecraft version.
Changelog
Added
- Four Minecraft-version JARs and matching setup ZIPs, bringing release coverage to 14 supported build targets.
- Java 25 / Paper 26.x compatibility checks, including Towny's 26.3-compatible
0.103.2.15pre-release. - Additional test-plan coverage for 26.x startup, role synchronization, and DiscordSRV linking.
Modified
- Updated the README compatibility matrix, supported Java versions, dependency guidance, and download instructions.
- Removed outdated descriptions of unreleased development build variants from the public documentation.
- Improved consistency checks between CI, plugin metadata, release assets and Markdown guides.
Compatibility
| Minecraft | Server | Towny compile API | DiscordSRV |
|---|---|---|---|
| 1.16.5, 1.17.1, 1.18.2 | Spigot / Paper / Purpur | 0.100.3.0 | 1.30.5 |
| 1.19.4, 1.20.1, 1.20.6 | Paper / Purpur | 0.103.2.0 | 1.30.5 |
| 1.21.1, 1.21.4, 1.21.8, 1.21.10, 1.21.11 | Paper / Purpur | 0.103.2.0 | 1.30.5 |
| 26.1.2, 26.2 | Paper / Purpur, Java 25 | 0.103.2.0 | 1.30.5 |
| 26.3 | Paper / Purpur, Java 25 | 0.103.2.15 (pre-release) | 1.30.5 |
Minecraft 26.1.0 has no Paper build, and 26.1.1 is not included because only obsolete alpha Paper builds were available. Folia is not supported.
Downloads and upgrade notes
Choose the JAR matching your Minecraft version. The corresponding optional ZIP includes config.example.yml, README, migration instructions and BUILD-INFO.txt.
This is a pre-release: automated compilation and storage testing are not a substitute for real Discord guild/Paper-Purpur integration testing. Back up plugins/TownyDiscordChat/, your database, and important Discord guild settings before deployment.
There are no intentional changes to stored database schemas in 1.1.1. Existing 1.1.0 configuration settings remain compatible; leave config.yml in place when upgrading from 1.1.0. When upgrading from an older 1.0.x installation, follow the documented config.yml.bak migration and two-start review process. SQLite-to-MySQL migration remains a separate opt-in operation.
Pre-Release Build 1.1.0
Fixes
- Corrected duplicate role/channel creation and stale callbacks following Discord request timeouts, interrupted jobs, and server restarts.
- Preserved Towny identity across renames and prevented deleted or name-reused towns from inheriting another entity's Discord access.
- Prioritized membership revocations and verified resource deletions over non-urgent additions.
- Added safe-mode startup checks for invalid configuration, incompatible dependencies, missing bot permissions, and incomplete database state.
Changelog
Added
- Durable, SQL-backed Discord request queue with retries, backoff, persistent intents, deduplication, audit support, and dead-job inspection.
- Embedded SQLite for new installations, optional MySQL, and direct offline SQLite-to-MySQL migration to avoid unnecessary Discord API calls.
- Automatic
config.yml.bakupgrade to the latest configuration template, retaining compatible settings and requiring administrator review before the first sync. - Stable Towny UUID mapping so existing Discord resources can be renamed in place.
- DiscordSRV account-link onboarding through
/tdc statusand/tdc link. - Improved console diagnostics, Discord member display names in activity logs, and administrator warnings.
- Automated compatibility compilation and regression testing for ten Minecraft versions.
Modified
- Removed obsolete direct-event listeners and polling schedulers; Discord resource changes are handled through the durable worker.
- Simplified downloads into one standalone JAR and one optional documentation ZIP for each supported Minecraft version; no separate
-modernedition. - Updated default configuration, README, compatibility matrix, and test/migration documentation.
Compatibility and downloads
Select the JAR matching your exact Minecraft version. Each optional ZIP contains the matching JAR, config.example.yml, README, migration guides, and BUILD-INFO.txt.
| Minecraft version | Towny compile API | DiscordSRV compile API |
|---|---|---|
| 1.16.5, 1.17.1, 1.18.2 | 0.100.3.0 | 1.30.5 |
| 1.19.4, 1.20.1, 1.20.6 | 0.103.2.0 | 1.30.5 |
| 1.21.1, 1.21.4, 1.21.8, 1.21.10 | 0.103.2.0 | 1.30.5 |
Towny and DiscordSRV must be installed separately. Folia is not supported. This release is a pre-release: CI validates compilation, tests and packaging, but does not certify live Minecraft/Discord integration on every combination.
Installation and upgrades
For new installations, copy the matching ZIP's config.example.yml to the plugin directory before the server starts. SQLite is the default when MySQL credentials are not configured.
For upgrades, stop the server and back up the plugin directory and database. Rename the old config.yml to config.yml.bak, then start the new version once. It generates a current configuration with compatible values imported from the backup and stays in review-only safe mode. Review the generated file and restart to enable synchronization.
Changing SQLite to MySQL is a separate data migration; follow the migration instructions. Do not just change the storage type on a populated installation. Because 1.1.0 substantially replaces the 1.0.x implementation, test on a disposable Discord guild or with backups first.
Pre-Release Build 1.0.8
Fixes
Out of bounds error for passed event from Towny.
[Server] ERROR Could not pass event TownAddResidentEvent to TownyDiscordChat v1.0.7
[Server] INFO java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0
[Server] INFO at jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64) ~[?:?]
Changelog
Modified
- Removed messages being sent to player's private messages in discord
Pre-Release Build 1.0.7
Changelog
Added
- DiscordSRV API - 1.24.0
Pre-Release Build 1.0.6
Changelog
Modified
- Support for Minecraft 1.18
Added
- Spigot API - 1.18
- Towny API - 0.97.5.0
- DiscordSRV API - 1.22.0
Pre-Release Build 1.0.5
Fixes
Potentially solved an issue where the nation wouldn't get added after town on DiscordSRVAccountLinkEvent.
Changelog
Modified
- Methods to use separate queue calls to receive individual callbacks on completion (success or failure).
Added
- Added Installation instructions in README
- Added Configuration File explanation in README
- Custom message support in config.yml
Pre-Release Build 1.0.4
Fixes
Resolved issue #3.
Changelog
Modified
- Methods to use OfflinePlayer instead of Player
- Methods to use UUID when not able to use OfflinePlayer
Pre-Release Build 1.0.3
Changelog
Changes
- Updated DiscordSRV to latest API.
- Added bstats support.
- Removed unused imports.
- Removed unused messages.yml.
Pre-Release Build 1.0.2
Fixes
Resolved issues where duplicate channels would be created and assigned with the wrong roles.
Please delete these duplicate channels before updating the plugin.
Changelog
Split initial server role and channel creations into different methods to help reduce rest actions when needing to re-use commands.
Changes
- Added /TDC as alias to /TownyDiscordChat
- Modified NewDayEvent Listener to use individual methods on daily checkup
- Rewrote logic in TDCManager class
- Added new commands to use in-game
- Added permissions for commands
Commands
When adding this plugin to an existing Towny server make sure to run the first 4 commands in the order shown below.
Make sure to check they have completed before running the next one.
/TDC Check Role CreateAllTownsAndNations
Permission Node: TownyDiscordChat.Check.Role.CreateAllTownsAndNations:
Description: Allows you to force run a check for discord roles of all players in a town or nation and creates them if needed
/TDC Check TextChannel AllTownsAndNations
Permission Node: TownyDiscordChat.Check.TextChannel.AllTownsAndNations:
Description: Allows you to force run a check for discord text channels of all players in a town or nation and creates them if needed
/TDC Check VoiceChannel AllTownsAndNations
Permission Node: TownyDiscordChat.Check.VoiceChannel.AllTownsAndNations:
Description: Allows you to force run a check for discord voice channels of all players in a town or nation and creates them if needed
/TDC Check Role AllLinked
Permission Node: TownyDiscordChat.Check.Role.AllLinked:
Description: Allows you to force run a check for discord roles of all players in a town or nation then adds or removes them if needed
/TDC Check Role
Permission Node: TownyDiscordChat.Check.Role:
Description: Allows you to force run a check for discord roles of a single player in a town or nation then adds or removes
Nodes Structure
TownyDiscordChat.Admin
- TownyDiscordChat.Check.Role.CreateAllTownsAndNations
- TownyDiscordChat.Check.TextChannel.AllTownsAndNations
- TownyDiscordChat.Check.VoiceChannel.AllTownsAndNations
- TownyDiscordChat.Check.Role.AllLinked
- TownyDiscordChat.Check.Role
TownyDiscordChat.Player
- TownyDiscordChat.Check.Role
Pre-Release Build 1.0.1
I would recommend using this version for now. I am still learning these APIs and best practices.
I welcome contribution and improvement!
Changes
- Modified NewDayEvent Listener to run a daily checkup on all linked towns and nations
- Added better logic to handle accidentally deleting a town or nation discord channel
- Added better logic to handle accidentally deleting a town or nation server role
- Removed /TownyDiscordChat command to do nothing (left it registered for now).