Fixed an error that occurred while using the /bountyadmin command with no arguments. You now get the admin commands displayed.
Fixed a bug with some messages getting displayed in silent commands.
Added the /bountyadmin command to the language.yml help.admin section. It will not automatically be added to your file if you update. In case you want to add it, this is what is in the default:
'&9/bountyadmin (player) <bounty command> &7- &dRuns a bounty command for a player.'
Bounty stats and the leaderboard now require a separate permission: notbounties.stats (given by default)
The help for stat commands is now a separate list in the language.yml file (was previously in the view section). If you have modified the message for the help.view section, then you should move your stat messages to the new help.stats section.
Fixed an error that occurred when using an earlier version of MMOLib
Added a new option to the config called offline-set. There is an option named the same thing in the random-bounties section, but this one is not under any configuration section to represent that it is a global option for anyone setting a bounty. This option controls whether players can set a bounty on other players who are offline.
{notification} will now be replaced with true if bounty broadcast is enabled, and false if bounty broadcast is disabled.
Added a new option in the murder-bounty configuration section called multiplicative which allows you to enable or disable a scalar or linear increase of the murderer's bounty.
Code (YAML):
# whether the bounty-increase represents the percent of the current bounty added, or a flat number. # if the multiplicative is set to true, and the current bounty is 0, the bounty will be set to the min-bounty. multiplicative: false
Added a new option in the trickle-bounties configuration section called natural-death-bounty-loss which controls how much of a bounty is lost when a player dies a natural death.
Code (YAML):
# the percent of the player's bounty that is lost when a player has a natural death (not from another player) # 0 = 0% 0.25 = 25% 1 = 100% natural-death-bounty-loss: 0
Fixed a bug that would display the incorrect bounty in some areas after multiple bounties were set on a player.
You can now change MMOLib stats when you reach a certain bounty. Added a new section to the config.yml file
Code (YAML):
# Config to use with the MMOLib plugin MMOLib: # whether this feature is enabled enabled: false
# A stat modifier, 'attack-modifier' can be named whatever you want attack-modifier: # The bounty value where this modifier takes place # '0-100' will apply this modifier when the player has a bounty in the range 0 (inclusive) to 100 (exclusive) # '100' will apply this modifier when the player has a bounty greater than or equal to 100 bounty: '0-100'
# the stat to change stat: ATTACK_DAMAGE
# the value to change value: 10
# whether the value will multiply onto the base value or add to it multiplicative: false
health-modifier:
bounty: '100'
stat: MAX_HEALTH
value: 10
multiplicative: true
You can add or remove the modifier sections. Because the configuration sections are modifiable, they will not automatically appear in your config. If you want to use this feature, copy the whole code above, and paste it at the bottom of the config.yml file. If you are generating a new config, this will be present.
Thanks to WaterArchery for submitting a pull request to fix an error when a player didn't have an island.
Added a new admin command to run bounty commands for other players with admin permissions.
/bountyadmin (player) <args>
If you generate a new gui.yml, the commands will use this
Added a new config option called maximum-bounty which limits the maximum bounty that can be set on a player
Added a new option to the update notification where you can skip the update.
You can now edit the messages sent to admins who click on a bounty in the GUI to edit it. The following 2 lines will automatically be added to your language.yml file:
Code (YAML):
edit-bounty-clickable: '&6To edit
{receiver
}''s bounty, &e&lClick this message &6and enter the amount to change. &7
(e.g. 10, -500, or 10k
)'
edit-setter-clickable: '&6To edit
{player
}''s amount on
{receiver
}''s bounty, &e&lClick this message &6and enter the amount to change. &7
(e.g. 10, -500, or 10k
)'
Fixed a bug when trying to use negative numbers while editing a certain setter which caused the amount to change unexpectedly.
Fixed an error that occurred when generating a new player data file. If you get an error starting the server with this version, you need to delete your plugins/NotBounties/data/player_data.json file, and it will regenerate a new one for you.
Proxy messaging will now only be enabled if the config option is enabled in databases.
Invalid proxy messages from a player will now kick them instead of spamming to the console.
Made changes to bounty posters and bounty tracker items. Bounty maps used to have the chance to overwrite maps created in your world, but not in this update. Consequently, old posters may no longer render depending on your server setup. There is also now an option in the config to disable creating new bounty posters. Bounty trackers should work as normal.
The leftover % in trickle bounties will now stay as a bounty on the player instead of being deleted. If configured, you can cause claiming the bounty to only reduce the bounty on the player by a percentage.
Added velocity proxy synchronization for velocity. If you add the velocity version of NotBounties to your proxy in addition to the Bukkit version on your backends, bounties and player stats will by synchronized. See this page for the Velocity file.
Moved the bounties.yml file into 3 separate files for bounties, player stats, and player data. You can now easily reset one of those by deleting the file. Your old bounties.yml file will automatically be migrated.
The %notbounties_wanted% placeholder will no longer show anything if the player has less than the minimum bounty amount
Added the broadcast alias for bdc
You can now go back pages flawlessly in the tutorial
Bounty whitelists now always save after restart
Improved tab completion for large servers
Added support for SuperiorSkyblock2. You won't be able to claim bounties on members of your island.
Fixed a few errors that would pop up.
I am very grateful to everyone who uses this plugin. I want to keep improving it when I have the chance. If you see any bugs, please join the
discord server to report them.
This is a very very small update. I changed and API key that I use for time zones. If you stay on a previous version and a new player joins, then messages with the time in them will be formatted to use the server's time instead of the players, which isn't that big of a deal. When you update next, it will correct itself.
Now using an earlier spigot dependency to have backwards compatibility with all supported versions.
Now only the database external dependencies will be loaded through the spigot library loader so platforms that do not have access to that will still have most features.
Fixed a bug where the bounty for a player would be counted for the all time stat when the bounty was created and when it was claimed. (now only when it is created)
This is a huge update that has been in the works for many months. The most important change is that only Java 17 and above is supported, which means Minecraft 1.17 and above. Testing for this update was done on 1.20 and 1.21. If you find any bugs, please report them in the
discord.
New Features
Bounty Challenges. There is a new challenges.yml file to configure challenges. Ex: Claim x Bounties. These are disabled by default, but you can go into the file and enable it. There is also a new challenges GUI. Use /bounty challenges.
View bounties with more detail. There is a new view-bounty GUI to display more information on the bounty reward including custom items. The general-currency-item custom item goes with this GUI to display placeholder currency. Use /bounty check (player).
override-type option in the bedrock-gui.yml file to override the GUI type (simple, modal, custom)
Bounty Click Actions. You can now configure which actions occur when a player clicks a bounty in the main GUI. New configuration section called bounty-gui-clicks in the config.yml file.
Trickle Bounties. Added a new config section called trickle-bounties that allows you to control how much of a bounty is claimed, and how much of a bounty you receive from claiming another bounty.
New messages in language.yml to go with the new features.
Redis is now supported as a database.
Backups of your local bounties are now taken automatically. Old backups will be deleted.
A new message appears for bedrock players when they open a form.
Added /bounty pause command for admins to disable all bounty features except viewing
Added player prefix and suffix options in the language.yml file to add text before or after most {player} and {receiever} placeholders in the file
You can now specify the inventory-type option for GUIs
Added EssentialsX Hook for item values
Added _rank suffix to stat placeholders. ex: %notbounties_all_rank% will return your rank regarding your all time bounty
Changes
GUI backend changes
Data storage backend changes
Major SQL changes: SQL requests were reduced significantly. Bounties are now updated from the database every 5 minutes.
Renamed SabreFactions to Factions in the config.yml
You can now create bounty posters for offline players. @unknown-user
There is now a minBounty option in the config for the bounty tracker.
Multiple bounties on the same person set by the same person are no longer grouped together
Bedrock skin requests are now async
Now formatting timezones by player locales if a specific timezone isn't recorded
Set bounty statistic is now updated after a bounty is added instead of when the bounty is claimed
Added a new bstats chart for active bounties
Bounty whitelist will now be disabled by default when generating a new config
Disabling bounty whitelists will now allow anyone to claim previously whitelisted bounties
buy-items set to false will give back to the setter
use-item-values set to false will override min-bounty
Offline bounty notification now includes the value of items
Changed use-item-values in the config to item-values, and it now is a text option. (the old value will automatically migrate)
Changed how databases are represented in the config.
Reloading the config will attempt to connect to any configured databases
You can now edit the update notification in the language.yml file
Whitelist messages now show in the view-bounty GUI
The console name can now be used in the view-bounty GUI
Dependencies are now downloaded at runtime to reduce the file size for spigot
Bug Fixes
Fixed a bug that occurred when removing expired bounties from the SQL database.
Using other faction plugins will no longer result in an error when a bounty is claimed
Added an extra method to remove stuck bounty boards
Requesting a bedrock skin will catch a null returned value.
Added an extra check to remove stuck wanted tags
You can now modify the number formatting divisions and wanted tag level properly.
Removed entities message is no longer formatting for currency
Fixed a bug that prevented skins from loading in the bedrock GUIs.
Fixed a bug that would display the wrong player in the bounty-item-select GUI.
Fixed a bug that allowed bedrock players to steal items from the GUI if they transitioned from a java GUI to a bedrock form
Fixed a bug that caused {slot<x>} placeholder in GUI items to always return the player who opened the GUI
Skin requests will only create a maximum of 2 extra threads
Fixed a bug that occurred when registering the bounty tracker recipe
The bounty list in chat is now consistent with the GUI
This is a huge update. All features have been tested, but there may still be bugs. If you find one, please report it in the
discord.
This version has been tested on 1.21
New Features:
Getting player skins in offline mode without Skins Restorer
Empty Tracker items that can be crafted. Players will discover the recipe after they set a bounty. These trackers can be turned into Bounty trackers with a command, clicking a bounty poster, or by crafting it with a player head.
Bounty Posters can be crafted with an empty map and a player head
Bounty Posters and Bounty Trackers can be washed in a cauldron to get an empty map or empty tracker
Players can place any item as a bounty with all the item data kept. This is a separate feature from the currency which can be enabled in the bounty-items section in the config.
Added {notification}, {mode_raw}, {tax}, {bounty_currency}, {bounty_item_values}, & {bounty_items} as placeholders
bedrock-gui.yml dropdown components can use the {player} placeholder to display online players and use [@ll] in the commands to execute a command with all players
death tax override for combat logging
PVP flags for Worldguard regions (only tested for 1.20.6)
A sound will now be played while items are being given to the player
The default gui.yml file will have a settings GUI
Added hide-tooltip option for custom items (version 1.20.6 or higher)
Added a steal-bounties option in the config that lets you steal your own bounty if you kill the player who set it on you
Added the plugin-bounty-commands config option that lets you control which command aliases are used and which command the plugin uses when forcing players to run something
You can now use -s in commands to make them silent (excluding setting a bounty)
Changes:
Skins are now loaded more efficiently
Bedrock toggle components can use a placeholder for the default state
You can now use {items} in the list-setter message in the language.yml file to display the items on the bounty. (used with the /bounty check command)
Wanted tags become smart... They will slow down updating if they cause server lag
Items will stop being given if the player disconnects
You can now specify on/off for the /bounty bdc command
Moved the error message when a hidden player name couldn't be converted to a uuid when using sql
Bounty board checks are no longer done when nobody is online
The combat-safe message will now be sent when a player dies while combat logged
Fixes:
Fixed an SQL memory leak
bedrock-gui.yml can now be updated
Bedrock GUIs now work with a proxy
Skins are no longer loaded for GUIs that don't display them
Tracker tab complete now works as intended
Reward heads get the right lore
Bounty boards no longer update in-game every interval while using SQL
Fixed a bug where the combat tag message would be sent every time someone hit you
Fixed a double webhook message
Big bounty is now triggered if you place a bounty directly on the threshold
Opped players now have perms to do /bounty tracker (player)
Fixed a bug where top bounties with sql would only return the first player
Tutorial command now parses the prefix
You can no longer go out of bounds with the help command
Optimized all of the skin requests for player heads or bounty posters
Created a Velocity version of NotBounties that currently only sends over skin information from SkinsRestorer, but will sync more information in the future. You can download it here.
You can now add "_name" to the end of the top placeholder to get the name of the player in that position. Ex: %notbounties_top_1_current_name% will get the name of the player with the highest active bounty.
Fixed a bug where you needed a space at the end of custom model data
Added %notbounties_total% placeholder for the total bounties on the server (receiver wise) and %notbounties_total_unique% for the total bounties (setter wise)
Added a couple of options in the config under wanted-tags to control the update rate
If give-own is enabled for bounty trackers or posters, you can obtain them by right or left clicking the player in the bounty gui if you do not have the notbounties.admin permission. A few extra messages have been added for this in the language.yml file.
Added a cooldown for giving yourself a poster or tracker
Added a see-player-list option in the config that will add an extra check for vanished players. The reason this is an option is that some plugins may interfere with it.
Fixed a bug where players on other servers connected with SQL wouldn't show up in the online players
Added a cooldown if an API request returned an error
Cached API values
Avoided unnecessary calls to functions when a message was being parsed
Added an option in the config to change wanted tag update time
Fixed bugs with the GUI and doing actions with cracked offline players
{time} will now show the timezone
Performance issues should be fixed in this update, but I don't have a large server to test it on, so if you are still having issues, please report it in the
discord.
Added more options under the pvp-restrictions configuration section
Added 2 new messages in the language.yml file for a combat tag and the tag expiring
Code (YAML):
# claim bounties if players combat-log combat-logging: # time in seconds that a player must be without combat to log out without losing their bounty - 0 to disable time: 0
# send the combat-tag and combat-safe messages when they are tagged send-message: false
This works alongside the other pvp-restrictions, so the worlds declared in the pvp-restrictions section will apply to combat logging. To disable the whitelist, just set worlds to an empty list: worlds: []
If you want to only use combat logging, set the rule to 0.
Additional Vanish Detecting
The wanted tags will now disappear for vanish from more plugins, specifically VanishPremium
If this is not the case for a plugin, let me know, so I can add it
Time Zone Formatting
Time in messages is now formatted in the timezone of the players.
This is not used much, but the most common case is with the command: /bounty check {player}
You can disable this with the auto-timezone option in the config
# prompt feature settings for action commands prompts: # how many attempts the player gets before the prompt is canceled attempts: 5
# typing these words in chat will exit the prompt cancel-words: - 'cancel'
- 'exit'
# the time the player has to type in an answer to the prompt before it times out # in seconds time-limit: 30
Multiple attempts for prompts if an incorrect input is used
This will work for any bounty commands. If you want to prompt a command from a different plugin, you can specify an answer type in the prompt.
Code (Text):
Using a bounty command:
'[pprompt] bounty {slot13} <&eEnter in chat the bounty amount or type "cancel" to cancel.>'
Using other commands for a player name input:
'[cprompt] give <PLAYER~&eEnter in chat a player name or type "cancel" to cancel.> DIAMOND 1'
Using other commands for a number input:
'[cprompt] give {player} DIAMOND <NUMBER~&eEnter in chat a number or type "cancel" to cancel.>'
Cancel words for prompts
Time limit for prompts
The amount of commands have increased to be quite long in chat, so I've transitioned them into different pages sorted by their function.
These permissions will stop the related auto bounties from being set on the player.
Added a new option to override regular immunity for auto-bounties (not the immunity listed above)
Code (YAML):
# players with immunity will be able to have bounties set on them by auto bounties # this does not override the permission specific immunities like notbounties.immunity.murder override-immunity: true
The front page will be updated with these permissions and last update's addons soon.
The teams configuration section has been updated since 2 more team plugins were added.
Code (YAML):
# allow players on the same team claim each-other's bounties teams: # claim if on the same scoreboard team # some plugins use scoreboard teams, so disabling this may break claiming bounties scoreboard-claim: true
# players with the same placeholder result will not be able to claim each other's bounties (Must have PlaceholderAPI installed) # ex: '%luckperms_prefix%' would prevent anyone with the same prefix from killing each other placeholder: ''
# <===> BetterTeams <===> better-teams: # claim if on the same BetterTeams team team: false
# claim if allied with each other's BetterTeams team ally: false
# <===> TownyAdvanced <===> towny-advanced: # claim if in the same nation nation: false
# claim if in the same town town: false
# claim if nations are allied ally: false
# <===> KingdomsX <===> kingdoms-x: # claim if in the same nation nation: false
# claim if nations are allied nation-ally: false
# claim if in the same kingdom kingdom: false
# claim if kingdoms are allied kingdom-ally: false
# <===> Lands <===> # The claim_bounty flag can be used lands: # claim if in the same nation nation: false
# claim if nations are allied nation-ally: false
# claim if they are trusted in each other's lands land: false
# claim if lands are allied land-ally: false
Bug fixes:
Fixed a bug where players or admins couldn't remove bounties
Fixed a bug where you couldn't use items without metadata in the GUI. Credit to srnyx.
There are many new changes in this update. I thank everyone who added suggestions or bug reports in the discord. Without them, the plugin would have never gotten this big.
Changes
Added built in Webhooks for discord in the webhooks.yml file
Added a bounty-expire configuration section in the config
Added bounty expire offline tracking option
Added an option in the bounty-expire section to reward the receiever when the bounty expires
Added a bedrock-gui.yml file that uses the bedrock UI. (This file is similar to gui.yml, but with added complexity)
Big bounty commands, bounty claim commands, and GUI commands have been synced with the actions you can do in them.
Added [broadcast] action for the commands in the config
Added different types of triggers for the big bounty commands (see big-bounties config section)
Divisions can now be used in inputs. Ex: /bounty Not_Jaden 1K will work to set a bounty for 1000
Raw values can now be obtained from most placeholders by adding "_value" to the end of the placeholder
Players can remove their set bounties with the notbounties.removeset permission (default false) and the command /bounty remove (player)
New messages in langugage.yml for added commands
The GUI names are now fully parsed like all other messages
Added a few whitelist commands: /bounty whitelist toggle <whitelist/blacklist> /bounty whitelist toggle (player)
Leaderboard values are properly formatted (Right?)
A lightweight attempt in autocompleting player names is now used if you don't finish a player's name in a command
Added some new built-in placeholders: {whitelist<x>} = Whitelisted player at index x. {whitelist} = All players in the whitelist. {mode} = Whitelist/Blacklist. {min_expire} = Time until part of the parser's bounty expires. {max_expire} = Time until all of the parser's bounty expires. For the GUI titles: {page} = page of the GUI. {page_max} = max page of the GUI
Added self-setting option in the config to allow or disallow players from setting bounties on themselves
View other's stats with /bounty stat (stat) (player) and edit their stats with /bounty stat (stat) (player) (setValue/edit) (new value/change)
The broke message will now be sent before the confirmation GUI
/bounty buy now opens the buy confirmation GUI
Added a check for persistent bounty entities near where players join
Added the command /bounty cleanEntities <radius> to remove any persistent entities that the plugin missed
I'm still working on updating the Wiki with new features, so if you have any questions, feel free to ask them in the
discord.
In this update, these suggestions were implemented:
Bimodal currency option to use two different currencies for adding and removing. To use, set add-single-currency to BIMODAL and use a list for the currency option like with multiple currencies. The first currency is the add currency and the second is the remove currency.
Code (YAML):
# if you are using multiple currencies # descending - currency will be given in descending order of weights # first - only the first currency in the object list will be given # ratio - a ratio of the currencies with their weights will be given # bimodal - add the first currency, remove the second add-single-currency: BIMODAL
Partial manual economy so auto bounties will give money.
Code (YAML):
# this option will change how involved NotBounties will be with currency transactions # AUTOMATIC - NotBounties will do all the currency transactions # PARTIAL - NotBounties will only do the currency transactions for auto-bounties # MANUAL - NotBounties will not do any currency transactions, but will run the remove and add commands # I suggest pairing this up with the redeem-reward-later option for a voucher of proof manual-economy: PARTIAL
Changed force-death-event to claim-order, and you can now set it to be claimed when the players respawn
Code (YAML):
# Change the order when the bounties are claimed event wise # BEFORE, REGULAR, or AFTER can be used # do not change this unless you know what you are doing claim-order: REGULAR
Other Changes:
Fixed a bug that gave an error in the GUI
Immunity time is formatted in the help message
Lots of internal changes with immunity to optimize and clean code
Added offline-tracking option for immunity
The help messages in language.yml will now display when players mistype a command
Fixed a bug where reloading the config would give an error
Planned future features:
Skinsrestorer hook on a proxy and eventually proxy based bounties
Discord webhooks
Challenges
Bounty expire time option for auto bounties
Bounty expire offline tracking option
Edit other player's bounty stats
View specific player stats
I've started my spring semester of school recently, so updates will be coming out slower. Fixing bugs will be a higher priority for me, so if you see anything, report it in the
discord.
Added new conditional that will check a placeholder for a value before executing a command
Code (YAML):
# adding ~{player/killer({placeholder/material} {<|>|>=|<=|=|!=} {value}) will check a placeholder or material value before executing - The squiggly brackets are just to show the possible values # checking a material value of the player will not work unless they have respawned # This will message the killer if they have the bounty notification enabled # ex: ~killer(%notbounties_notification% = true) [message_killer] &eYou have claimed &6%notbounties_kills% &ebounties.
Added a message action to use the NotBounties prefix
Code (YAML):
# starting with [message_player] will message the player with the NotBounties prefix # starting with [message_killer] will message the killer with the NotBounties prefix
Added 3 new built-in placeholders
Code (YAML):
# {amount} is replaced with the bounty value # {bounty} is replaced with the formatted bounty value # {cost} is replaced with the formatted bounty value wrapped with the currency suffix and prefix
Timed Bounties
Added a new feature that will automatically set bounties for surviving a set amount of time
Code (YAML):
# add bounties after a set amount of time timed-bounties: # the time in seconds before the next bounty is set - 0 to disable time: 0
# how much the bounty will increase bounty-increase: 10
# bounty amount that the player needs for timed-bounties to stop setting bounties - 0 to disable max-bounty: 0
# reset the timer when the player dies reset-on-death: true
# time will be tracked when the player is offline, and bounties will be set while they are offline offline-tracking: false
Other Changes
Random bounties can now get online players through MySQL if you are connected to a database
Expire time can now use decimals
You can now translate the help message
Added a force death event feature for servers with programs that block it
Added an extra message to the update notification to disable it
Currency add and remove commands will now be executed if manual-economy is enabled;
Added a new configuration option in the currency section called manual-economy
Enabling this will stop NotBounties from giving or removing currency. Players will still need a sufficient balance to set bounties, but they need to claim the reward manually from the players who set it
I suggest enabling redeem-reward-later in the config to keep track of who set each reward, and while you are at it, change the lore of the voucher in the language.yml with the option bounty-voucher-lore
Code (YAML):
bounty-voucher-lore: - ''
- '&2Awarded to
{receiver
}'
- ''
Redeem Reward Later Changes
Moved the redeem-reward-later option closer to the top of the config and made it a configuration section
The voucher-per-setter will give the bounty claimer a voucher for every person who sets a bounty
The setter-lore-addition will add a line to the lore for each setter. It is useful if you only want one voucher given out
In language.yml, the bounty-voucher-lore and bounty-voucher-name will now use {amount} for the voucher amount and {bounty} for the bounty amount
Other Changes
[pprompt] and [cprompt] in GUI commands now have an event priority of LOWEST
Added 3 new config options to stop players on the same town or nation from claiming each other's bounties
Code (YAML):
teams: # <===> TownyAdvanced <===> # claim if in the same nation towny-nation: false
# claim if in the same town towny-town: false
# claim if nations are allied towny-allies: false
PVP Restrictions
Added a new configuration section to restrict PVP in certain worlds
The restrictions are based on bounties
Code (YAML):
# restrict PVP pvp-restrictions: # worlds to restrict PVP worlds: - pvp_restriction_world
# pvp rules # 1 - players can only damage other players with bounties # 2 - players can damage other players with bounties and those players can fight back # 3 - players can damage other players with bounties and players with bounties can damage anyone rule: 2
# if rule is set to 2 - the time in seconds that players with bounties can fight back after taking damage from another player pvp-time: 60
Other Changes
Added a new option for bounty-claim-commands to run for specific bounty amounts
Code (YAML):
# adding >(amount) or <(amount) at the beginning will only run the following command if the claimed bounty was greater or equal to the amount # This tempbans the player if they had a bounty claimed greater than or equal to 2500 currency # ex: >(2499.99) tempban {player} 1h
For most server owners, this is not a version that needs to be installed. Since the last version, code was cleaned up and bounty-related methods were all moved to one class. 2 events were added on claiming bounties and setting bounties.
For more information about the API, look at the
wiki page
You can now disable bounties being claimed on players on the same team
Works with scoreboard teams and BetterTeams teams and allies.
If you want to use another team plugin, there is a placeholder option that will compare placeholders between players. Players with the same placeholder values will not be able to claim eachother's bounties.
Code (YAML):
# allow players on the same team claim each-other's bounties teams: # claim if on the same scoreboard team # some plugins use scoreboard teams, so disabling this may break claiming bounties scoreboard-claim: true
# players with the same placeholder result will not be able to claim each other's bounties (Must have PlaceholderAPI installed) # ex: '%luckperms_prefix%' would prevent anyone with the same prefix from killing each other placeholder: ''
# claim if on the same BetterTeams team (Must have BetterTeams installed) bt-claim: false
# claim if allied with each other's BetterTeams team bt-allies: false
Multi-Currency Update
add-single-currency now has 3 options: first, ratio, and descending
true was changed to first, and false was changed to ratio
Descending is new and will add the weights in descending order
Add commands not tied to a currency will be executed if add-single-currency is set to first
Added the ability to use custom model data in currency items
Currency with values greater than 1 will now more accurately be removed, and any excess used will be given back.
# descending - currency will be given in descending order of weights # first - only the first currency in the object list will be given # ratio - a ratio of the currencies with their weights will be given add-single-currency: descending
Placeholders
Added 2 new placeholders:
%notbounties_notification% - returns "true" if the player has bounty broadcast enabled, otherwise, returns "false".
%notbounties_mode% - returns "Whitelist" or "Blacklist" depending on the whitelist mode
Big Bounty commands are now parsed with PlaceholderAPI
Other Changes
added the ability to play sounds in bounty claim commands and GUI commands
Code (YAML):
# using [sound_player] (SOUND_ID) <VOLUME> <PITCH> will play a sound for the player # using [sound_killer] (SOUND_ID) <VOLUME> <PITCH> will play a sound for the killer # vvv GUI commands can only use this one vvv # using [sound] (SOUND_ID) <VOLUME> <PITCH> will play a sound for everyone near the death
Fixed a bug where the SQL data table wouldn't update from an old version
You can now use lists in the GUI layout slots
Fixed a bug where logged players would get deleted on database migration
Bounty Map It has come to my attention that rendering bounty maps is very server-intensive with a lot of bounty boards, so I've made some changes to minimize the lag.
Added a new config option under bounty-board called staggered-update. This will control how many boards update per update interval.
Bounty maps are now created asynchronously.
GUI
Page items will now be replaced with air if there is nothing else to replace them with and replace-items is set to true
You can now toggle offline players in certain GUIs instead of having to exit the GUI
Added [offline] as a custom item action. This will toggle offline players in the set-whitelist and set-bounty GUIs. The old action will still work.
Going to the next page now accurately shows all players
Fixed a bug where the wanted tags and the bounty board would not be deleted when the server stopped. This will not delete any old bounty entities, only new ones that are created.
If you find any that you want to delete, you have to use a kill command. If you had a bounty board, there is a high probability that there are extra item frames there. ex:
New Bounty Board feature was added that lets you track top bounties on posted bounty posters. The posters will auto-update as new bounties are added.
Setup the bounty board by running /bounty board and punching where you want the poster
Other commands include /bounty board <rank> to set a specific poster for a leaderboard rank, /bounty board remove to remove a specific bounty board, and /bounty board clear to remove all the bounty board posters
There is a new configuration section that allows you to customize some parts of the bounty board
Code (YAML):
bounty-board: # 0 oldest bounties # 1 newest bounties # 2 top bounties # 3 lowest bounties type: 2
# how many seconds between the board updates - minimum of 2 seconds update-interval: 5
# glow item frame glow: true
# invisible item frame invisible: true
PlaceholderAPI Fixes
Leaderboard placeholders now work again (Idk how they broke)
_full ending now returns a completed message
_formatted ending will only have currency prefix/suffix for the stats that require it
Added a new ending _value that will return just the value of the placeholder unformatted
Other Changes
Added a new stat called Current. This can be used to see the top current bounties with leaderboards if the regular GUI is sorted differently
Optimized code in many areas
Bounties can now be sorted in different order if you are connected to a database
Fixed a bug where an error would occur when migrating data
Let me know if you experience any bugs or have any suggestions. You're feedback in very important to me! If you want a fast response, send a message in the
discord.
Added a new config option to have tags above a player's head for their bounty
Added a new placeholder to use the tag elsewhere: %notbounties_wanted%
Code (YAML):
# add a tag above a player's head if they have a bounty wanted-tag:
enabled: true
# how high above the player's eyes the tag is offset: 0.4
# text above the player text: '&f
{level
} &6&lWANTED&f
: {amount
}'
# minimum bounty to display tag min-bounty: 100
# hide the tag when sneaking hide-when-sneaking: true
# text for certain levels of bounty level: # minimum bounty amount: text 1000: '&f☠'
2500: '&c☠☠'
5000: '&4☠☠☠'
Other changes:
Fixed a bug that caused PlaceholderAPI to produce an error when creating a bounty map
Added a new section in the config called bounty-claim-commands that runs commands when a bounty is claimed.
Code (YAML):
# commands to be executed when a bounty is claimed # {player} is replaced with the person whose bounty was claimed # {killer} is replaced with the person who claimed the bounty # starting with [player] will run the command for the person whose bounty was claimed # starting with [killer] will run the command for the person who claimed the bounty # starting with nothing will run the command as console # adding @(player/killer)permission or !@(player/killer)permission before everything with check for a permission of the player or killer to run the command # This will check if the killer has the permission and will message the person they killed # ex: @(killer)notbounties.view [killer] msg {player} It wasn''t personal. # a command that is just <respawn> will force the player to respawn. This is useful if you want to tp them somewhere after they die # You can use placeholders, but they will always be parsed for the player who died bounty-claim-commands: - <respawn
> - '@
(killer
)notbounties.view
[killer
] msg
{player
} It wasn''t personal.'
- execute run tp
{player
} 138 100 319
The default config will generate an empty list with no commands
Added an option in the config called remove-banned-players that will check for bounties with banned players every 10 minutes and remove them
Supports vanilla banning and LiteBans banning
Random bounties will no longer be placed on banned players
Bounty Poster Changes:
The reward text will now be centered
You can now customize the name line
Placeholders and chat colors can now be used
Here are the new config options in bounty-posters and a little bit more about them
Code (YAML):
# The line right below the player head # placeholders can be used in here, but will only get updated every server restart if save-templates is false # Long text here may make the names illegible name-line: '
{name
}'
# always update the map even if the bounty hasn't changed always-update: false
# save created maps to be used later - player heads will not change unless the player changes their name save-templates: true
# delete all the saved poster templates in the NotBounties/posters folder # set this to true if you change anything about what is displayed on the poster besides reward-text and currency-wrap # this will be set to false again automatically after a clean has been done clean-posters: false
If you are using placeholders, I suggest setting save-templates to false and always-update to true. This will keep the maps updated but also increase the load on your server
Other Changes:
Added /bounty debug command
Fixed a bug where an error would occur when typing bounty in console
Bounties removed because they were expired, removed by an admin, or because the player was banned, will now refund the setters. If vault is hooked in, it will refund the setters right away; otherwise, refunds will occur when the setters log in.
Fixed a bug where the notified message was sent even if the player was already notified
Thanks for all the suggestions and bug reports. If you have any problems, shoot me a message or joining the
discord server. (I respond much quicker on discord)
Vault will now auto-integrate with the plugin. There is a new option in the currency config section called override-vault. If you have previously set up the currency, this will be true and Vault will not be directly integrated. If this option is false, Vault will be used instead of your currency object if Vault is enabled.
The leaderboard placeholders will no longer always return <???> for player names
Added a new permission called notbounties.player that controls all of the following permissions:
notbounties.set
notbounties.view
notbounties.buyown
notbounties.buyimmunity
notbounties.removeimmunity
notbounties.tracker
notbounties.whitelist
notbounties.basic
Added a new config section that allows you to set random bounties on players that have joined the server before
Code (YAML):
# set a random bounty every once in a while random-bounties: # minimum seconds between next random bounty - 0 to disable min-time: 0
# 86400 seconds in a day # maximum seconds between next random bounty max-time: 0
# minimum bounty price min-price: 10
# maximum bounty price max-price: 100
The notbounties.view permission now blocks players from viewing bounties in the GUI
You can have bounties increase when players kill other players
If your config is already loaded, you will have to enable it
New message in language.yml
Code (YAML):
# add a bounty if a player kills another player murder-bounty: # How many seconds before you can kill the same person and increase your bounty player-cooldown: 360
# how much the bounty increases per player kill. Consider raising minimum-broadcast if you change this if you don't want a message in chat bounty-increase: 10
# you will be excluded from the bounty increase if you are claiming another bounty exclude-claiming: true
Other changes:
Added console-bounty-name option in the config. Bounties set by console or by murdering other players will have this name as the setter.
Added a new permission called notbounties.basic that is required to use /bounty bdc, /bounty help, and /bounty tutorial
Fixed a bug where /whitelist set would remove duplicates in current whitelist and new whitelist
The minimum broadcast value in the config now applies to claimed bounties
Switched player and receiver for the set bounty broadcast
Fixed a bug where the bounty broadcast would display for an empty bounty
Previously I was loading a font from the jar file, but that ended up corrupting frequently. Now I am using the default Times New Roman font. This also solved the issue of the plugin being massive in size. You can still use a custom font by placing a ttf file in the posters folder called playerfont.ttf
Admins can create bounty posters with /bounty poster (player) <receiver>
You can customize the Reward text in the config, and customize the rest of the poster in the posters folder
Posters will display bounties on a map and show the reward
Code (YAML):
# wanted posters of bounty bounty-posters: # players can give themselves bounty posters of any bounty, otherwise, only admins can give posters give-own: false
# display bounty reward on the poster # note: changing this will change the position of the names and can cause text to overlap # if you want to change this, I suggest deleting all the made maps in plugins/NotBounties/posters display-reward: true
# reward text below name if display-reward is enabled reward-text: 'REWARD
: '
# total bounty will follow this # lock the bounty map - this will improve performance, but the maps will not update after they are created # if you turn this on, I advise disabling display-reward to avoid confusing your players lock-maps: false
# true adds the currency prefix and suffix to the reward text # Some special characters like ◆ do not work on the poster currency-wrap: false
# how many milliseconds between map updates update-interval: 1000
Other Changes
Bounty whitelist has changed in the config, and you can disable it there
Added a custom heads feature that can use Base64 or HeadDataBase. Create a custom item, and for the material, put: PLAYER_HEAD (HDB ID/Base64)
Big bounty particle and bounty tracker no longer work when a player is vanished
Page items will not take you to another page if they are hidden
You can now add multiple lines in buy own bounty lore
Buy back is now formatted properly
Added a new option to limit the amount of bounties a player can have
You can whitelist certain players to claim the bounties you set.
Add people to your whitelist with /bounty whitelist (add/set/remove) or the new GUI with /bounty whitelist
Players can choose up to 10 players to whitelist. This is limited to reduce the burden of hosting an SQL server
Whitelisting costs extra per additional person to whitelist. You can change how much it costs in the config
Added a world filter option in the config to whitelist or blacklist worlds from bounties being claimed
Added notbounties.whitelist permission
Death Tax
Added an option in the config to modify the death tax
Players will be taxed a percentage of their bounty when it is claimed
0.1 death tax would tax the player 10% of the bounty when they die
Use this if you want players to value surviving longer
Multiple Currencies
The currency object option in the config can accept a list of currencies
If you have multiple placeholder currencies, you must list their add and remove commands in the same order they are in for the currency object
Currency example
Code (YAML):
currency: # accepts a material or a placeholder # if the currency is a material, the plugin will automatically take away the necessary amounts object: # vvv This number is the currency value. You can set a bounty of 5 with just 1 diamond. - 'DIAMOND 5'
# If you do not specify a currency value, it defaults to 1. You can use decimal values with placeholders but not items # vvv This second number is the currency weight. The default weight is 0 - '
%vault_eco_balance% 1 1' # If only one weight is set for all the currencies, then that currency will be used until their balance is empty. - 'GOLD_INGOT 2'
# With the weights like this, setting a bounty for 30 will use 10 vault currency and 20 nottokens if the player has the balance. # if the player doesn't have vault or token currencies, the plugin will look for diamonds and gold ingots in the player's inventory - '
%nottokens_amount% 10 2' # before the currency in all occurrences in language.yml prefix: '&f'
suffix: '&b◆'
# only needed if you are using a placeholder, but will be called either way. # {player} & {amount} or use a placeholder remove-commands: []# ['eco take {player} {amount}'] add-commands: []# ['eco give {player} {amount}'] # if you are using multiple currencies, true will add only the first currency - false will split the different currencies and will account for weight if any is set add-single-currency: true
Time Immunity
Changed how immunity is displayed in the config
Code (YAML):
immunity: # players can buy immunity from having bounties set on them as opposed to having immunity from the permission node # Immunity types: # 0 - disabled # 1 - permanent immunity # 2 - scaling immunity # 3 - time immunity type: 2
# immunity will never run out permanent-immunity:
cost: 128
# immunity will be stronger the more money you spend - only if permanent immunity is disabled # if you buy immunity for 2500, then it protects you from bounties set for 2500, 2499, 1500, etc. (with ratio set to 1) # bounties can be set on you for 2501 and higher scaling-immunity: # money spent -> bounty protection # ex: if ratio is 0.5, buying immunity for 1000 will protect you from bounties 500 or less ratio: 1.0
# immunity wil only last for a period of time time-immunity: # how many seconds 1 currency will add to your immunity # ex: spending $15 with seconds: 3600 will give you 54000 seconds of immunity, or 15 hours seconds: 3600
# in SECONDS how long before a player can set a bounty on a player that was just killed with a bounty grace-period: 10
Time immunity will protect you from bounties for a certain amount of time
You can change how long 1 currency will protect you for in the config under immunity> time-immunity> seconds
Other Changes
There are 10 new messages in language.yml
Added a button in currency setup to clear add and remove commands
Bug Fixes
You can now edit console bounties
Fixed a message being generated with two apostrophes
Currency setup now says Essentials instead of vault
Fixed a bug where some bounties couldn't be claimed because of heads
Overall this is a huge update, and it took a lot of time and coding. I'm not expecting this to be perfect, so if you find any bugs, please let me know. The fastest way to contact me is through the
discord. Thank you Maus, zuhir, and FBI38 for the bug reports and suggestion included in this update.
Changed how number-formatting is run. Instead of providing symbols and selecting a type, you can choose your location format. It is similar to how EssentialsX does number formatting
There will no longer be an excess amount of 0's in the GUI
Fixed a bug where most leaderboards were broken
Added an option in the config called npc-claim that disables NPCs from claiming bounties
The set-bounty gui will now only show online players by default. If you want to see offline players too, players can do the command, /bounty set offline or you can add this custom item in gui.yml:
Code (YAML):
add-offline:
material: LEVER
amount: 1
name: '&7See
all players'
commands: - '
[gui
] set-bounty 1 offline'
Make sure you add it to the set-bounty layout too. Thanks HassanTM on Discord for the suggestion.
Fixed a bug where errors would pop up when looking at the leaderboards
This update added number formatting. This means all the numbers will be read more easily. 12345 > 12,345 or 12.34K. You can edit the number formatting options in the config.
Also fixed a bug where other players could not see your big bounty particle.
This update was very big for the back-end code. Bounties can now be stored in decimal form and to do that, I had to change a whole bunch of data types. Fingers crossed there are no problems for anyone. I had no problems with my tests, but I can never test every case. If you do have problems, let me know in the
discord, and they will be fixed ASAP.
Added a new config option under bounty-tracker called give-own. This config option allows people with the notbounties.tracker permission to give themselves a bounty tracker
Added a new message in language.yml called tracked-notify. This message will display in a player's action bar when they are glowing due to being tracked.
In this update, I have completely reworked the GUI to make room for a few new GUIs and added customizability to all.
New GUIs:
Bounty top
Set bounty
Select Price
Changes:
GUI settings have been moved to gui.yml. Don't worry, your previous gui will be saved, but I advise you to backup your config file before you update just in case
/bounty top redirects to a GUI instead of chat, but you still list top stats in chat by adding "list" to the end of the command. Ex: /bounty top all list
The confirmation GUI after removing or buying back your bounty is now fully customizable
New Features:
Hidden players section in the config for players that will not show up in bounty top
You can bypass the repeat command for buying your own bounty or buying immunity by adding --confirm to the end
Changed most of the placeholders to match up with the statistics. Old placeholders will work still. You can now add _formatted to the end to add currency prefix and suffix. Add _full to the end of a top bounty to get information on what the placeholder is.
There are new lines in the language.yml file
I will advise you again to backup your config file before you update just in case. I haven't had any problems, but I don't want to see anyone's work get flushed away. Lastly, let me know in the
discord if you find any bugs, so I can patch them ASAP.
Ex: %notbounties_top_all_1% will return the player with the highest all-time bounty and the price. With the default config, it would look something like this:
1.Not_Jaden >32◆
In the future I plan to add more GUI to the plugin so players can set bounties and view top bounties in the GUI as well.
Currency If you are updating, the biggest thing for you is the new currency settings. The config has added 2 new options for a currency prefix and suffix to avoid having to change every message in the language.yml.
Code (YAML):
# accepts a material or a placeholder # if the currency is a material, the plugin will automatically take away the necessary amounts # I recommend changing the language.yml file to fit with your currency currency: 'DIAMOND'
Code (YAML):
currency: # accepts a material or a placeholder # if the currency is a material, the plugin will automatically take away the necessary amounts object: 'DIAMOND'
# before the currency in all occurrences in language.yml prefix: '&f'
suffix: '&b◆'
Updating won't add anything to the prefix or suffix in the config
MySQL There is now support for MySQL. You can find the options in the config. If the plugin doesn't connect to an SQL server, then it will default to local storage. Similarly, if
migrate-local-data is enabled in the config, all of the locally stored bounties will be moved into the database.
Another bonus option in the config is
auto-connect. With this enabled, NotBounties will try to connect to a database every 30 seconds if one isn't already connected.
Bounty Leaderboards There are new commands that will show your own bounty stats as well as top bounty stats.
/bounty top (all/kills/claimed/deaths/set/immunity) -
Lists the top 10 players with the respective stats. /bounty stat (all/kills/claimed/deaths/set/immunity) -
View your bounty stats.
Most of these were already recorded with placeholders, but now, you can see them without any external plugins. The players just need the
notbounties.view permission. There was one placeholder that was added that is "claimed" in the command and "%notbounties_currency_gained%" for the placeholder.
With these new commands, there are new options in the language.yml.
In the future, I plan on adding an area in the GUI to view bounty stats. Overall, this has been a decently large update, especially with MySQL. Although I do test my plugins before updates, it is getting harder and harder the more features I add. That being said, if you do see any bugs at all, send me a message either here or on discord.
This update includes many new features and bug fixes, notably big bounties.
Features:
Big Bounties - run commands for players that obtain bounties over a certain threshold and a particle above their head. You can edit the bounty threshold, what commands to run, and toggle the particle in the config.
Added message for the big bounty
Added a new config option "minimum-broadcast:" that allows server owners to reduce the chat spam and display only bigger bounties in chat when they are set.
Added another message sent to the player when they receive a bounty and removed duplicate broadcast messages.
Added sounds for claiming, setting, and redeeming bounties
Bounty notifications now tell you who and how much of a bounty was added to you while offline
Fixes:
Fixed a bug where claiming a bounty set by the console wouldn't work
The startup message won't include double [NotBounties]
I'd like to say thanks again to everyone that uses my plugins. Also, if you see any bugs or want to suggest a new feature in the discord.
This update includes
1 new feature suggested by .ash that allows you to change the sorting type. You can change this in config.yml under advanced-gui.
Code (YAML):
advanced-gui: # how the bounty menu is sorted # 0 : newer bounties at top # 1 : older bounties at top # 2 : more expensive bounties at top # 3 : less expensive bounties at top sort-type: 0
You can sort by bounty set date or the bounty price.
If you would like your suggestion implemented, message Jaden#8952 or join the
discord.
Fixed a bug with custom model data causing the commands not to work
Fixed a bug where tab complete wasn't working
Bounty Tracker: What is it? Track players with bounties with a special compass How do I get it? do /bounty tracker (bounty) (receiver) How can I disable it? doing nothing will keep the plugin performing mostly like before. If you are worried about a performance drop, disable the tracker in the new section in the config Check the config on the overview page to see comments on usage GUI Name: You can now change the name of the GUI in language.yml
You can now put the parameter: "custom-model-data: x" in your custom items to give them the data. I also updated the config to be a little more descriptive in the comments. If you already have the plugin installed, you may have to look at the config file in the main page for the descriptions.
You can now customize the look of your GUI!
A new section in the config has been added. Don't worry about adding anything new, it will auto-generate for you!
The new section will look like this:
Code (YAML):
# for customizing the layout of the gui advanced-gui:
size: 54
custom-items:
fill:
material: GRAY_STAINED_GLASS_PANE
amount: 1
name: '&r'
lore: [] enchanted: false
# use {player} to replace with the player's name # [close] to close gui # [p] (command) to send as the player commands: [] bounty-slots: - '0-44'
layout:
1: # use custom items here or preset items such as 'exit' 'next' 'back' item: fill
slot: 45-53
2:
item: exit
slot: 49
# these will only appear when there are multiple pages 3:
item: back
slot: 45
4:
item: next
slot: 53
You can add custom items, select which slots the bounties can appear on, and choose how big your inventory is!
It is 1 am for me right now, but I didn't want to wait any longer to release this. I have tested it, but I am not perfect, so there may be bugs. Let me know right away so I can fix them.
I will go into more depth in the future on the main page.
Removed the API version in the plugin.yml so it can run on previous versions. I have only tested 1.16.5. If you come across a problem in one of these versions, let me know. Also, if the plugin runs on another legacy version, post a comment and I'll add it to the tested versions