* WIP - See FlagListener.java for changes
Makes declaring the player mandatory for checkIsland method so it cannot
be forgotten and will be fresh every check.
See BlockInteractionListener for how it will look.
* Update src/main/java/world/bentobox/bentobox/api/flags/FlagListener.java
Co-Authored-By: tastybento <tastybento@users.noreply.github.com>
* Update src/main/java/world/bentobox/bentobox/api/flags/FlagListener.java
Co-Authored-By: tastybento <tastybento@users.noreply.github.com>
* Adjusted all the flags to new API
https://github.com/BentoBoxWorld/BentoBox/issues/535
due to race conditions with task timers and incorrectly shared field
variables, islands would not paste completely if pasted every tick.
Now pasting is handled in its own class with a new instance created with
each paste.
A lot of the commands were not firing events. These events are now
needed by addons.
Added new JOINED, REGISTERED, UNREGISTERED reasons for events.
Switched to using Bukkit.getServer() instead of plugin.getServer() in a
number of classes because the former can be mocked but the latter cannot
be because it's marked as a final method in JavaPlugin.
Fixes https://github.com/BentoBoxWorld/BentoBox/issues/506
Also, admin unregister was blocking unregistration of team players, but
that is an artificial constraint, so I enabled it. Without it, it would
not be possible to correct weird team issues like this one after they
happen.
https://github.com/BentoBoxWorld/BentoBox/issues/486
Includes an autofixer for corrupted files and test for the adapter.
LogEntry was changed to just store strings instead of arbitrary types.
Unless the log serializer were to store hints as to what type of data
was being stored, it is impossible to deseralize. To make it all
simpler, we just store strings. If the UUIDs need to be converted back
to players are some point, that can be done based on the type of the log
stored.
Previous the Flags class was being used to grab all flags. This is wrong
because it may not contain all the flags that may exists, for example
ones registered by other addons. The correct way is to request flags
using the getFlag() method in the flags manager class.
This change was to prepare for the time when addons will register their
own flags with BentoBox.
Note: If using the User class in a test, you MUST set the mock plugin object using the User.setPlugin() method otherwise each test will use the wrong plugin object and verifications will not work.
Island deletion is done a few chunks at a time per tick. Current speed
is 5 chunks per tick per world (e.g., 15 chunks per tick if nether and
end islands are used).
Chunks are deleted based on the all-time maximum protection range of the
island. This is because the protection range can grow bigger or smaller
over the island's lifetime. To ensure all possible chunks are erased,
the largest every protection range is remembered and used.
Very large protection ranges will take a long time to fully delete.
Info on islands that are being deleted is stored in the database. If the
server shuts down mid-deletion, deletion will restart when the server
restarts.
While an island is being deleted, new islands cannot occupy that spot
and the spot cannot be reserved by the admin.
In addition, async approaches to island saving and player saving were
removed. Async will be implemented another way.
Now, instead of saving the full island or player database, individual
database entries are saved instead to be more efficient.