Technically decreases when the bounty is taken, but adds 2 when completed to balance out. Figured this was a better solution than storing the original block in bounties and checking when they expire, as this would also cause random chunk loads.
Allow multiple copies
Allows for disabling the behavior where multiple people can take the same bounty.
Defaults for these settings retain existing behaviour
I understand the rationale behind your solution, though I do not think that this is ideal. This means that if you are just barely at Reputation 5 and then a player takes a bounty, it will go down to Rep 4 until the bounties are turned in, which is an unintended side effect that players would report as a bug
Instead, I would recommend that you store a map of Map<String, Long> which stores a map of bounty data hash codes to when they expire. When taking a bounty, add the hash code and expiry time to this map. When a bounty is turned in, the key/value pair is removed from this map. On a regular basis (every few seconds), the board will check to see if there exists an entry that has expired - if so, we reduce the reputation turn-in value by 1 and remove it from the map.
A more optimal solution would be to give individual bounties unique IDs instead of hash codes and I plan to do that in a future version. However, that currently does not exist in 1.20.1.
This does have the side effect that turning into a different bounty board means that the original bounty board will still lose 1 rep turn-in value. However, it's still better than the proposed solution which will always cause the board to lose 1 rep turn-in value even if future completion might occur.
There might be a more optimal solution than this, but this was just me spitballing on my lunch break :)
Adds two new settings:
Defaults for these settings retain existing behaviour