Skip to content

@LlmDl LlmDl released this Oct 25, 2020 · 168 commits to master since this release

Towny Advanced

Release contains:

TownyChat 0.81
TownyNameUpdater 5.0

Welcome to Towny
This marks the third Minor Release post- The original plan was to try for a fairly rapid release schedule of minor releases but as 2020 is want to do, things got a bit weird. While this is a hefty update the db changes are similar to other changes in prior 0.96.*.0 releases, so we're not moving to yet.
Of note: The very first download of Towny was made available to the public exactly 10 years ago today, by Shadeness, for the hMod server platform. So happy birthday Towny! 🎂 Here's some stats from those 10 years:
- 5133 Lines in the changelog.
- 578 Versions released as downloads.
- 461 Completed Tickets (Github only.)
- 437 Merged Pull Requests (Github only.)
- 113 Versions of Minecraft.
- 70+ Contributors (Github only.)
- 14 Languages.
- 2 Repos (r.i.p. GoogleCode.)
This release brings about a major change to the Towny flatfile and mysql databases, relieving Towny of the residents.txt, towns.txt and nations.txt files and two-way relational dependencies between residents/towns and towns/nations. This followed the removal of the townblocks.txt file in Towny is now less prone to safe mode and better able to self-correct when presented with bad data.

This release also adds:
1) UUID Gathering Task (for when Towny eventually doesn't need TownyNameUpdater and supports UUIDs natively,)
2) Town Bankruptcy,
3) Hex colour code support,
4) Faster startups through async backups and
5) a lot more you can read about in the Added section below.
This is usually the spot where I would tell you to go over the changelog carefully for any REQUIRED changes you need to do to you world/config files, but that time is over. Towny is now able to make additions to your config (incl. town_level and nation_level,) and world files, (ie: when new blocks are added to Minecraft,) all by itself.
If you're upgrading from there are 0 REQUIRED changes.


  • Residents database refactor: removal of residents.txt

    • Towny will no longer save a residents.txt file.
    • Residents are loaded into memory from their files in the towny\data\residents\ folder.
    • After the first run, the towny\data\residents.txt will be deleted.
    • This will remove a cause of lag when new players join the server and reduce the ability for safemode to occur.
    • A resident's town is now only stored in their residentname.txt file.
    • This removes a possible chance for safemode to occur.
  • Town and Nation database refactor

    • Removes towns.txt and nations.txt files on flatfile databases.
      • Loads old towns.txt and nations.txt to ensure that orphaned files in the
        towns & nations folders are not loaded. If successfully loaded, the
        towns.txt and nations.txt files are deleted.
    • Residents now store their Town, and Towns do not store their Residents.
    • Towns now store their Nation, and Nations do not store their Towns.
    • Towny now handles loading a mayor for a town intelligently.
      • If a town attempts to set a mayor who is not part of the town, and the
        town has no residents, the town will be deleted.
      • Closes #4170.
    • Towny now handles loading the capital of a nation intelligently.
  • Big New Feature: Town Bankruptcy.

    • When enabled in the config:
    • Towns which cannot pay their upkeep costs will go into a bankrupt state.
    • While bankrupt their bank will continue to pay upkeep (optional) and continue to pay nation tax (optional.)
    • Their bank balance will go into the negatives until they hit their DebtCap.
    • Debtcap is calculated by the cost of the town, townblock costs and outpost costs.
    • Debtcap can optionally be capped to another number in case a town has an very high natural debtcap.
    • Debtcap can optionally be overridden to a set number applied to all towns.
    • Finally, the debtcap can be made to use the debtCapModifier in the town_level of the config.
      • In the config: economy.bankruptcy.debt_cap.debt_cap_uses_town_level is required to be true.
      • When the above is true, it will use the modifier multiplied by the debt_cap.override value.
    • While bankrupt:
      • Towns cannot invite members.
      • Towns cannot set their town to open status.
      • Towns cannot claim more land.
      • Towns cannot have anything built in their land.
    • Towns can erase their debt by using the /t deposit command.
  • New GatherResidentUUID task.

    • Towny will now pro-actively gather resident UUIDs for residents in a background task.
    • As long as the server is not already at 100% and the config setting plugin.database.gather_resident_uuids is true Towny will gather a UUID every 2 seconds.
    • Gathering begins 60 seconds after the server starts up.
    • It first asks the playercache on your server and if that fails it will ask the MojangAPI.
    • This will prepare your server for the day Towny switches to supporting UUIDs in the database.
    • Big thanks to creatorfromhell for his MojangAPI util.
  • Archive plot-block-data to save HDD space.

    • Towny will convert all existing plot-block-data .data files into .zip files.
    • Drastically reduces size on disk.
    • New plot-block-data are made zipped.
    • Closes #4327.
  • Added: per-world block explosion revert list.

    • Decides which blocks' explosions will be reverted on a per-world basis.
    • Closes #4300.
  • Add fire and air to the list of blocks Towny will not try an explosion regen task on.

    • Improves but doesn't completely solve #4306.
  • When /tw toggle revertunclaim is used, any active reverts will be stopped.

    • Removes necessity to stop the server and manually delete the towny\data\regen.txt.
  • /t outpost list now generates a clickable/hoverable list for easy interaction.

  • Re-activate the world files unclaimedZoneIgnoredIDs list.

    • This was only being used for wilds plots, and not having any effect on the wilderness.
  • Added NETHER_PORTAL to new_world_settings.plot_management.revert_on_unclaim.block_ignore.

  • Alter farm and wilds plots to have resident/friend build & destroy on automatically when the plot type is set.

    • As opposed to having those plot types mimic the town/resident perm line.
  • Added friendlyFire setting to database as a world setting.

  • Offline mode UUID task mercy branch #4384

    • Prevent the GatherUUIDTask from wiping the database on true offline mode servers.
  • Update log4j to 2.13.2.

  • Add town.hasResidentWithRank(Resident, String);

  • Firespread rules in Town no longer overrides single townblocks' firespread settings.

  • Cleaned up config comments, fixed white-spacing. Should be much more readable.

  • Add Hyperverse to plugin.yml's soft-depend.

  • Further improve config comments.

  • Clean up and beautify the Towny startup logging.

  • Small refactor of the cleanup() used in the sql_schema, fixes a bit of spam saying Towny couldn't drop a column that doesn't exist.

  • Add groupmanager and iconomy to the softdepend.

  • Add debt cap to town status screen when a town is bankrupt.

  • Datasource Cleanup - Greatly reduces redundancies in database code.

  • plotManagementIgnoreIds now also affect the wilderness explosion revert feature.

  • Make loadSettings() cleaner, fix up flatfile creation missing in TownyDataBaseHandler.

  • Make fields/objects that don't change Immutable, courtesy of Siris with PR #4171.
  • Move comparators to own file and clean up listing code, courtesy of Siris with PR #4122.
  • Add Respawn Anchor Integration, courtesy of Siris with PR #4134.
  • Add color code translation to resident formatted names, courtesy of Siris with PR #4059.
  • Add option for keep inventory for arena plots, courtesy of Siris with #4138.
  • Add Asynchronous Backup To Speed up Load Times, courtesy of Siris with PR #4136.
  • Confirmation System QOL Improvements/Changes, courtesy of Siris with PR #4167.
  • Add hex support to lang files, courtesy of Siris with PR #4161.
  • Add resident to town claim event, courtesy of Siris with PR #4156.
  • Add namespacing for commands run by clickable text, courtesy of Siris with PR #4147.
  • Unify Town and Nation code, and introduce new Eco Account Mechanics, courtesy of Siris with #3988.
  • Move translation code to separate object and introduce new method: Translation.of(), courtesy of Siris with PR #4177.
  • Do compression via tar and not zip, courtesy of Siris with PR #4195.
    • Tar does a lot better when unicode characters are being used in the database.
    • You can go back to using zip at your own risk, if that's your thing.
  • Remove Manual Config Changes and Migrate them automatically instead, courtesy of Siris with PR #4209.
    • Expect REQUIRED CHANGES in the updating process to become very infrequent.
  • Concurrency QOL, courtesy of Siris with PR #4256.
    • Improves locking of database for reads and writes in regards to synchronization.
  • Invite Cleanup, courtesy of Siris with PR #4269.
  • Cleanup Confirmation class and properly implement async, courtesy of Siris with PR #4280.
  • Minor task cleanup, courtesy of silverwolfg11 with PR #4174.
  • Metadata Improvements, courtesy of silverwolfg11 with PR #4186.
  • Reduce mysql DB queries on startup, courtesy of silverwolfg11 with PR #4242.
  • Optimize hasNationZone() method, courtesy of silverwolfg11 with PR #4312.
    • Also adds MathUtil.
  • Improve delete events, courtesy of silverwolfg11 with PR #4324.
    • Adds easy access to the UUID and date of registration for the resident/town/nation being deleted.
    • Also returns the Nation object for the PreDeleteNationEvent rather than just the name, spotted by NNYaKNpGms0eUVpiSdHx on the Discord.
  • Optimize town distance checks, courtesy of silverwolfg11 with PR #4323.
  • Metadata Improvements, courtesy of silverwolfg11 with PR #4386.
    • Adds a new metadata field to store longs by introducing the LongDataField.
    • Makes the CustomDataField class truly abstract relying less on switch statements and makes it much easier to add new metadata types in the future, potentially paving the way for even allowing developers to add their own metadata types in the future.
  • Update Reserve/TheNewChat maven repositories, courtesy of creatorfromhell with PR #4240.
  • Added 3 placeholders for entering-towns title/subtitle messages, courtesy of Yldales with PR #4153.
    • Along with the original {townname} option you may now also use the following on the notification.titles.town_title and notification.titles.town_subtitle lines:
    • {town_motd} : show the town's townboard.
    • {town_residents} : show the number of residents of the town.
    • {town_residents_online} : show the number of online residents (including npcs) of the town.
  • Add configurable default Town&Nation board, courtesy of ronthecookie with PR #4125. (First-Time Contributor!)
  • Add Mayoral Succession, courtesy of DocW with PR #4107. (First-Time Contributor!)
  • New farmable nether blocks added to config by Momshroom with PR #4353. (First-Time Contributor!)
  • Add discrete toggling to toggle commands, courtesy of FrankHeijden with PR #4336 (First-Time Contributor!)
    • Adds the ability to specify on or off on nearly every toggle command.

Automatic Config Edits (6)

Towny will automatically edit the following settings in your config and existing worlds

  • Added ,Wither,WitherSkull to explosion revert settings.
    • These will be automatically added to the config and world settings.
    • Closes #4307.
  • Added ,NETHERITE_AXE to protection.item_use_ids
  • Added ,CRIMSON_WALL_SIGN,CRIMSON_SIGN,WARPED_WALL_SIGN,WARPED_SIGN to new_world_settings.plot_management.mayor_plotblock_delete.mayor_plot_delete and world files.

Command Changes (5)
New Commands (4)

New Commands:

  • /town set board none & /nation set board none.
    • Sets an empty board message.
    • Empty board messages are not shown on login and do not appear on the /town and /nation status screens.
    • Closes #4322.
  • /tw toggle revertentityexpl
    • Toggles explosions caused by entities reverting on and off.
  • /tw toggle revertblockexpl
    • Toggles explosions caused by blocks reverting on and off..
  • /tw toggle friendlyfire
    • Toggles friendlyfire on and off in the world.

Removed Commands (1)

Removed Commands:

  • /tw toggle revertexpl - replaced with revertentityexpl & revertblockexpl.

📕 Config Changes (27)
📕 New Config Options (23)

📕 New Config Options:

These new settings will be added to your config with their default settings.

  • global_town_settings.respawn_anchor_higher_precendence

    • Default: true
    • When this is true, players will respawn to respawn anchors on death rather than their own town. Affect 1.16+ servers only.
  • global_town_settings.keep_inventory_on_death_in_arena

    • default: false.
    • If People should keep their inventories on death in an arena townblock.
    • Is not guaranteed to work with other keep inventory plugins!
  • global_town_settings.keep_inventory_on_death_in_own_town

    • Default: false
    • If People should keep their inventories on death in their own town.
    • Is not guaranteed to work with other keep inventory plugins!
    • Closes #3859.
  • global_town_settings.keep_inventory_on_death_in_allied_town

    • Default: false
    • If People should keep their inventories on death in an allied town.
    • Is not guaranteed to work with other keep inventory plugins!
    • Closes #3859.
  • town.default_board

    • default: /town set board [msg]
    • Default town board.
  • nation.default_board

    • default: /nation set board [msg]
    • Default nation board.
  • nation.default_public

    • default: false.
    • Whether new nations are public by default, and able to be spawned to using /n spawn nationname.
  • nation.default_open

    • default: false.
    • Whether new nations are open by default, and are able to be joined into using /n join nationname.
  • plugin.database.gather_resident_uuids

    • default: true
    • When true Towny will use a background task to gather UUIDs for residents who do not have UUIDs.
  • plugin.database.flatfile_backup_type

    • default: tar
    • Valid entries are: tar for tar.gz and zip for zip, use none for no backup.
  • protection.fire_spread_bypass_materials

    • Materials which can be lit on fire even when firespread is disabled.
    • Still requires the use of the flint and steel.
    • Closes #4204.
  • economy.debt_prefix

    • default: "debt-"
    • The debt prefix for the debt eco account.
  • economy.new_expand.max_price_claim_townblock, courtesy of the-codeboy with PR #4311.

    • Default: -1.0
    • The maximum price for an additional townblock. No matter how many blocks a town has the price will not be above this.
    • Set to -1 to deactivate this.
  • economy.bankruptcy.enabled

    • default: false
    • If this setting is true, then if a town runs out of money (due to upkeep, nation tax etc.), it does not get deleted, but instead goes into a 'bankrupt state'.
    • While bankrupt, the town bank account is in debt, and the town cannot expand (e.g claim, recruit, or build).
    • The debt has a ceiling equal to the estimated value of the town (from new town and claims costs.)
    • The debt can be repaid using /t deposit x.
    • Once all debt is repaid, the town immediately returns to a normal state.
  • economy.bankruptcy.debt_cap.maximum

    • default: 0.0
    • When set to greater than 0.0, this will be used to determine every town's maximum debt overriding the above calculation if the calculation would be larger than the set maximum.
  • economy.bankruptcy.debt_cap.override

    • default: 0.0
    • When set to greater than 0.0, this setting will override all other debt calculations and maximums, making all towns have the same debt cap.
  • economy.bankruptcy.upkeep.delete_towns_that_reach_debt_cap

    • default: false
    • If a town has reached their debt cap and is unable to pay the upkeep with debt, will Towny delete them?
  • economy.bankruptcy.nation_tax.do_bankrupt_towns_pay_nation_tax

    • default: false
    • Will bankrupt towns pay their nation tax?
    • If false towns that are bankrupt will not pay any nation tax and will leave their nation.
    • If true the town will go into debt up until their debt cap is reached.
    • True is recommended when using a Siege War style war/conquering system, otherwise conquered towns will be able to leave the nation simply by not paying the nation tax.
    • False is recommended otherwise so that nations are not using abandoned towns to gather taxes.
  • economy.bankruptcy.nation_tax.kick_towns_that_reach_debt_cap

    • default: false
    • If a town can no longer pay their nation tax with debt because they have reach their debtcap, are they kicked from the nation?
  • economy.bankruptcy.debt_cap.debt_cap_uses_town_levels

    • default: false
    • When true the debt_cap.override price will be multiplied by the debtCapModifier in the town_level section of the config. (Ex: debtCapModifier of 3.0 and debt_cap.override of 1000.0 would set a debtcap of 3.0 x 1000 = 3000.)
    • Closes #4374
  • economy.new_expand.price_purchased_bonus_townblock_max_price

    • Default: -1.0
    • The maximum price that bonus townblocks can cost to purchase. Set to -1.0 to deactivate this maxium.
    • Closes #3788.
  • new_world_settings.plot_management.wild_revert_on_block_explosion.enabled

    • default: true
    • Enabling this will slowly regenerate holes created in the wilderness by exploding blocks like beds.
    • Is a default setting for new worlds only.
  • new_world_settings.plot_management.wild_revert_on_block_explosion.blocks

    • The list of blocks whose explosions should be reverted.
    • Is a default settings applied to new worlds only.
  • new_world_settings.pvp.friendly_fire_enabled

    • Default: false.
    • Do new world have friendly fire enabled by default?
    • Does not affect Arena Plots which have FF enabled all the time.
    • When true players on the same town or nation will harm each other.

Removed Config Options (4)

Removed Config Options:

  • plugin.database.flatfile_backup - replaced with new back up option defaults to .tar
  • global_town_settings.friendly_fire - replaced with new per-world setting.
  • global_nation_settings.default.public - replaced with nation.default_public.
  • - replace with nation.default_open.

🔑 Permission Node Changes (3)
🔑 New Permission Nodes (3)

🔑 New Permission Nodes:

  • towny.admin.spawn.nocharge - makes spawning cost 0.
  • towny.admin.spawn.nocooldown - removes cooldown from spawning.
  • towny.admin.spawn.nowarmup - removes warmup from spawning.
    • All three are child nodes of towny.admin.spawn
    • Closes #4296.

Removed Permission Nodes (none)

Removed Permission Nodes:

  • none

💻 API Changes (10)

💻 API:

  • added TownyAPI.getInstance().getTownyWorld(String name)
    • Returns TownyWorld or null.
  • added TownyAPI.getInstance().getTown(Location location)
    • Returns Town or null.
  • Change: TownPreClaimEvent has new isOutpost() and isHomeBlock() methods.
  • added CombatUtil.isSameTown(Resident, Resident) and CombatUtil.isNameNation(Resident, Resident).
  • added Ally Events, courtesy of ceeedric with PR #4356. (First-Time Contributor!)
    • Adds the following cancellable events:
      • NationAcceptAllyRequestEvent
      • NationDenyAllyRequestEvent
      • NationRemoveAllyEvent
  • Add TownyAPI.getInstance().getOnlinePlayersInTown(Town town).
  • Add TownyAPI.getInstance().getOnlinePlayersInNation(Nation nation).
  • NewDayEvent now has removedTowns and bankruptTowns separated.
  • Added CombatUtil.preventFriendlyFire(attacker, defender, world).
  • Deprecated CombatUtil.preventFriendlyFire(attacker, defender).

🔧 Fixed

🔧 Fixed:

  • Little fixes for TownySQLSource:
    • Hit TownySQLSource with the formatting stick.
    • Add tar/tar.gz backups to the backup code.
    • Make deletePlotGroup actually do something.
  • Fix Towny deleting residents that do not load proper data.
    • This was probably overly heavy-handed, usually happening when a resident loaded a town that didn't exist.
    • Now resident will load with no town, if they have saved an invalid Town.
    • Removed spammy debug messages from TownySQLSource.
  • Fix /t list throwing an error on spigot servers when the economyhandler is not active.
    • Sometimes caused by having vault without any economy plugin present.
    • Closes #4284.
  • Fix allow_nation_spawn config nodes not overriding player permissions.
  • Fix revert-on-unclaim feature failing to read 1.15 and lower BlockStates of walls in 1.16.
  • Fix new Towns not adopting the economy.spawn_travel.price_town_public_spawn_travel cost for using /t spawn [townname].
  • Fix for CMIFakeOperator triggering a NotRegisteredException on the PlayerCommandPreprocessEvent.
  • Fix incorrect message confirming /plot set reset.
  • Fix firespread bypass for obsidian and netherrack not working.
  • Fix %townyadvanced_nation_prefix% returning the nation prefix.
  • Fix for confirmations' clickable commands executing wrong command.
  • Fix help menu's language strings not being retranslated when /ta reload lang is used.
  • Fix cancelling a spawn causing an NPE.
  • Fix claiming past townblock limit & claiming edge blocks showing wrong message.
  • Fix plot type setting costs causing townblocks to save with residential plot type.
  • Fix fake resident list in the config not matching full names.
  • Fix nation deletion not removing the nation from the towns.
  • Fix incorrect information being seen on /n ally received output.
  • Fix item_frames being broken by boats.
  • Actually fix NETHER_PORTALs regenerating in explosions.
  • Clear EventWar hashtable/lists & fix message.
  • Fix not being able to claim the last townblock in some situations.
  • Fix pistonretractevent being off by one block and testing the block behind it.
  • Fix explosion reverts being able to happen on top of explosion reverts causing the wrong blocks to restore.
  • Fix firing multiple cost confirmations when setting a plot type to a plot group.
  • Fix missing switch test, solving problem with unresearched slimefun items allowing bypass of switch protections.
  • Fix &k being allowed to be used in various things like titles/surnames/tags.
  • Fix mayors being able to alter the plot permissions of their residents on embassy plots in other towns.
  • Add support for colour codes in the plot line where players have coloured names.
  • Fix towns that cannot afford to purchase townblocks not seeing any message when they cannot pay.
  • Fix Citizens NPCs that use actual Resident names from throwing TownyExceptions when they enter/exit towns.
  • Hotfix/bankcaps affect taxes #4366
  • Fix reporting of gathered UUID %.
  • Fix for towns not having their homeblocks set sometimes on creation.
  • Fix for /t list by resident not working.
  • Fix the towny.nation.spawn.public node not being used for checks if a player can n spawn to a public nation.
  • Fix /towny prices showing costs when using_economy: false.
  • Fix death costs appearing messages showing when using_economy: false.
  • Fix /plot toggle being able to be used on grouped plots.
  • Fix NoSuchMethodError on startup from the new log4j methods.
  • Fix jail days being able to crash mysql databases, jail days now max out at 10000.
  • Fix HoverEvent deprecation and add adapter to for backwards compatibility, courtesy of Siris with PR #4173.
  • Fix nations not saving a true neutral status on flatfile databases.
  • Fix load error on databases where neutral nations are present.
  • Fix stacktrace showing when /t {foo} hits an exception.
  • Clean up deprecated Assistant related code.
  • Allow for nations and towns to set tags less than 4 characters.
  • Fix Nations generating debt accounts.
  • Fix being able to confirm cancelled confirmations.
  • Fix NPE caused by trying to delete an economy account before the EconomyHandler is set up.
  • On flatfile databases, move resident file into deleted folder instead of outright deleting them.
  • Readd TownyMessaging.sendMsg(Object, String) deprecated.
  • Fix Towny deleting resident that do not load proper data on sql databases.
  • Fix Towny still trying to load a nation's town list on SQL servers.
  • Fix for servers that do not use an economy being unable to do many commands/operations and seeing [Towny] null.
  • Fix TownySQLSource#backup() being synchronized.
  • Remove assistants column from nation table on mysql DBs.
  • Improve error messages on loading towns/nations for mysql.
  • Handle nations loading invalid capital.
  • Fix towns-paying-tax message in the new day not appearing for the town.
  • Fix nations selecting a new capital on startup.
  • Fix permissions not being give to members who've just joined a town.
  • Fix ConfigMigrator not migrating worldActions onto existing world settings.
  • Fix nation-alliance invite showing the wrong nation in the confirmation.
  • Fix AreaSelectionTools picking up already claimed TownBlocks in the initial sweeps.
  • Potential fix for #4078 (ActionBar spazzing out plot notifications.)
  • Fix trying to load non-existant residents in the friendslist.
  • Remove unused plotManagementRevertSpeed from sql and townyworld.
  • Remove unused & long-deprecated NameValidation settings from TownySettings.
  • Rearrange title and surname length test to occur after we've filtered out any characters we won't allow.
  • Fix /nation status screen never showing the nation board.
  • Fix newday showing the wrong message when towns are bankrupted under some circumstances.
  • Fix /ta town TOWNNAME withdraw displaying the correct message when a town is bankrupt and has hit the debtcap.
  • Fix bankruptcy test stopping players from using /t claim.
  • Fix Config Migrator & Add debtCapModifier.
  • Fix towns being able to get around the maxNumberResidentsWithoutNation setting.
  • Fix plotManagementRevertSpeed still being in the getWorldColumns() in the SQL_Schema.
  • Fix missing check to be sure that town banks are capped.
  • Fix flipped save/load types.
  • Fix nation tags being cut short, courtesy of silverwolfg11 with PR #4205.
  • Absolute path for h2 database, courtesy of silverwolfg11 with PR #4101.
  • Hotfix: Fix file IO synchronization, courtesy of silverwolfg11 with PR #4210.
  • Clean up HelpMenu, courtesy of silverwolfg11 with PR #4223.
  • Fix new day task not collecting taxes properly, courtesy of silverwolfg11 with PR #4225.
  • Prevent residents from being able to unclaim homeblocks, courtesy of silverworlfg11 with PR #4228.
  • Fix ClassNotFound exception due to old bungeecord version, courtesy of silverwolfg11 with PR #4238.
  • Fix taxes being below 0, courtesy of silverwolfg11 with PR #4243.
  • Fix economy bug with town confirmation, courtesy of silverwolfg11 with PR #4241.
  • Make sure debt accounts start with zeroed out balance, courtesy of Siris with PR #4193.
    • Closes #4192.
    • Also fixes closed-economy-support.
    • Closes #4188.
  • Remove exception printing stacktrace from invalid name in getTown(), courtesy of Siris with PR #4259.
  • Hotfix/bankcap bug, courtesy of Siris with PR #4260.
  • Hotfix: Make deletions and other IO operations go through the async queue, courtesy of Siris with PR #4288.
  • Hotfix/Delay backup until after initialization, courtesy of Siris with PR #4281.
  • Hotfix: Make "tar.gz" a valid config option, courtesy of Siris with PR #4267.
  • Fix loading system files when loading all townblocks, courtesy of Siris with PR #4182.
  • Fix upgrading from versions with added text in version causing issues with config migration, courtesy of Siris with PR #4282.
  • Remove Secondary POM file, courtesy of TheFlagCourier with PR #4278.
  • GM Source fetching player suffix instead of prefix, courtesy of ElgarL (👀Look at that!) with PR #4247.
    • Also fixes GM repo and solves issue with building Towny from source.

🌏 Language Updates

🌏 Language Updates:

  • Language files bumped to 0.88.
  • Updated chinese.yml, courtesy of qsefthuopq with PR #4114.
  • pt-br.yml updated to 0.84, courtesy of vsdepontes with PR #4139.
  • pt-br.yml updated to 0.86 by Plugner with PR #4348. (First-Time Contributor!)

👽 Placeholder Updates

👽 Placeholder Updates:

  • New PlaceholderAPI placeholders, courtesy of Yldales with PR #4160.
    • %townyadvanced_town_prefix%: Display the config-defined prefix of the player's town (ex: ruins, settlement, ...)
    • %townyadvanced_town_postfix%: Display the config-defined postfix of the player's nation (ex: ruins, settlement, ...)
    • %townyadvanced_nation_prefix%: Display the config-defined prefix of the player's town (ex: lands, realms, ...)
    • %townyadvanced_nation_postfix%: Display the config-defined postfix of the player's nation (ex: lands, realms, ...)
    • %townyadvanced_player_jailed%: Display true is the player is jailed, otherwise false.
    • %townyadvanced_player_plot_type%: Display the townblock's type at the resident's location (ex: shop), or "" if none.
    • %townyadvanced_player_plot_owner%: Display true if the resident is owning the townblock at his location.
  • New placeholder: %townyadvanced_nation_tag_town_name%
    • Displays nation tag (if set, otherwise blank,) followed by the Town name (if the player is part of a town.)
    • Closes #4377.
  • New placeholders: %townyadvanced_daily_town_tax% & %townyadvanced_daily_nation_tax%
    • Displays the daily tax charged by the town or the nation.
    • Closes #4145.

💬 TownyChat Changes

💬 TownyChat Changes:

  • Add Hex Color Support to TownyChat, courtesy of Siris with PR #27.
    • The format for hex colors is a # symbol followed by 6 numbers.
    • You can use any of the 3 formats:
    • #RRGGBB
    • &#RRGGBB
    • {#RRGGBB}
  • Fix Towny API error spam.
  • Replace deprecated getLangString code.
  • Update to fix spying on servers with DeluxeChat.
  • Fix changing chat channels removing non-channel modes.
  • Add Towny version checking to enforce min. required versions.
  • Fix chat format line not parsing hex colors, courtesy of Siris with PR #28.
  • Build against, minimum required Towny version now
  • Dynmap added to softdepends list, courtesy of ZombiMigz with PR #31.
  • Allow for colouring the alone message.
  • Adapt to change in Towny Version code.
  • Build against, minimum required Towny version now
  • Fix colouring the alone message.
  • Replace TownyMessaging method used to send some TownyChat messages.
    • Removes double prefixes ie: [Towny] [TownyChat] message....
  • Add* childnodes to plugin.yml so players are explicitly not given them.
  • Fix double prefix displaying on the message shown when using a channel command for the channel you're already joined to.

Towny Sponsors

I want to give a big thank you to all of my sponsors:
These are the people that help to make Towny's support and development as active as it is.

MrLogano Momshroom Cobrex1 KarlOfDuty
scatterspell gerardvanschip bartymc DrprofLuigi
Tobza SmallSansSerif RuthMcNeely TheNylox
diontimmer CaptnCrafty ZeeRaider trevor1097
benevolent2012 bretomart HunSolos and 2 private sponsors.

If you want to support the developer consider becoming a sponsor.

(It's just like Patreon but 100% goes to the developer.)
Important Links
How Towny WorksTowny Install GuideTowny Update Guide
Complete Changelog Default Config FilesCommands/Permissions

Download available as a .zip file in the Assets section below:

Assets 3
You can’t perform that action at this time.