Implements https://github.com/BentoBoxWorld/BentoBox/issues/922
* Improved colors in 'commands.island.reset.resets-left' in en-US locale
* Added a confirmation message to IslandResetCommand, which states about the change ('commands.island.reset.confirmation')
* Subsequently removed the restriction asking to kick all island members prior to resetting the island
* TeamEvent.TeamDeleteEvent is now called upon the kick of the island members, meaning the actual deletion of the team as a side effect.
* Implements Basic/Advanced/Expert settings panels
Better alternative to https://github.com/BentoBoxWorld/BentoBox/pull/887
* Remove StatusIcon class - not used.
* Fixes glow of active tab.
* Moved FlagMode to Flag.Mode
* Display the LOCK flag no matter what the tab is
* Made the "mode" being saved for the player instead of per-tab
This means that a player will have its "mode" saved when he comes back later in the Settings Panel while also making the navigation more fluent - he won't need to set PROTECTION and SETTING to the same mode everytime.
Also renamed Flag.Mode#getNextFlag() to #getNext()
Added PlayersManager#setFlagsDisplayMode(UUID, Flag.Mode), #getFlagsDisplayMode(UUID)
* Play a sound when click on the mode button
* Added a description to the "mode" item
* Modified the mode for some flags
TabbedPanel extends Panel so that when an icon is
clicked, the context can be gathered by the click listener via the
getActiveTab method. In this case, the CycleClick and IslandToggleClick
classes cast the tab to the SettingsTab so they can retrieve the island
that the panel is referring too. This is required in the case where an
admin is setting a user's island settings. Previously the context of a
panel was only every about the user who opened the panel.
* Adds a tabbed panel API
* Added permission for tab
* Adds default world protection settings GUI
This switches the settings panel to use the new TabbedPanel API.
https://github.com/BentoBoxWorld/BentoBox/issues/384
* Adds admin command to change a player's settings.
Requires addon to add the admin settings command.
https://github.com/BentoBoxWorld/BentoBox/issues/59
* Locale for AdminSettingsCommand
* Implements an island reservation system using the admin register command
Admin flies to an empty spot and registers the player there. This
creates a bedrock block to mark the spot but it sets the island as
reserved for the target player. The next time a player issues the island
command (or island create) they get the selection of islands and it is
pasted at that location.
https://github.com/BentoBoxWorld/BentoBox/issues/749
* Update src/main/java/world/bentobox/bentobox/database/objects/Island.java
Co-Authored-By: Florian CUNY <poslovitch@bentobox.world>
* Update src/main/java/world/bentobox/bentobox/database/objects/Island.java
Co-Authored-By: Florian CUNY <poslovitch@bentobox.world>
* Update src/main/java/world/bentobox/bentobox/database/objects/Island.java
Co-Authored-By: Florian CUNY <poslovitch@bentobox.world>
* Update src/main/java/world/bentobox/bentobox/database/objects/Island.java
Co-Authored-By: Florian CUNY <poslovitch@bentobox.world>
https://github.com/BentoBoxWorld/BentoBox/issues/840
This adds (or fixes) the ability for admins to set the default setting
of a protection flag. The flags go in the world flags section of a game
mode's config.yml.
* Fixes owner demoting himself to subowner
This occurred whilst owner demoted himself to a subowner that led to non existence of the true owner
* Adds error on demote-yourself message
* Adds a cooldown API for flags.
https://github.com/BentoBoxWorld/BentoBox/issues/754
Added 60 second cooldown to PVP flags
* Added cooldowns to database.
This way, if a cooldown is a long one it will be remembered even if the
server restarts.
* Update src/main/java/world/bentobox/bentobox/database/objects/adapters/FlagSerializer3.java
Fixes#793
Add missing database transitions from YAML to MongoDB and SQLite.
Add missing database transitions from JSON to MongoDB and SQLite.
Add database transitions from SQLite to JSON.
Add database transitions from MongoDB to JSON.
Add database transitions from MariaDB to JSON.
* Added SQLite database
#570
* Makes SQLite work. Added config.yml option.
Tested on SQLite 3.24.0 2018-06-04 14:10:15
95fbac39baaab1c3a84fdfc82ccb7f42398b2e92f18a2a57bce1d4a713cbaapl
* Fix mariaDB test for close.
* Added test to MySQLDatabaseConnector and Handler
Prevents blueprints from being saved unless they have a bedrock block in
them.
If a blueprint is loaded and does not have a bedrock block, one is added
and a warning given in the console.
Added test class for BlueprintClipboardManager
https://github.com/BentoBoxWorld/BentoBox/issues/777
- Each /bentobox subcommand now has its own dedicated permission
- bentobox.admin is a permission node for most of them
- /bentobox about: bentobox.about
- /bentobox version: bentobox.version
- updated the plugin.yml with the new permissions
https://github.com/BentoBoxWorld/BentoBox/issues/731
Issue was that classes were not being fully removed from class loaders
and commands needed to be unregistered from Bukkit. For the latter,
reflection was required to obtain the knownCommand map and change it
because there is no Bukkit API to unregister commands.
It now displays the three dimensions for each world using a three-colour scale. Green means the world is generated and is an "island" world; orange means the world is generated but is not an "island" world and red means the world is not generated or does not exist. Actually, the overworld is always green, so I didn't put checks for it.
I also improved the overall layout for the game worlds display in each localization file.
* A prototype for Blueprint bundles and blueprints
This stores blueprints inside bundles. Each bundle can have up to 3
blueprints defines by the World.Environment.
This is not a finished manager. It just handles all the saving and
loading side of things. I thought this would help you so you can then
concentrate on the UI.
* WIP: Copy blocks to Blueprint done.
* WIP Pasting done.
* WIP: Added BlueprintsManager to ultimately replace SchemsManager.
* Moved blueprint suffix and changed to .blu
* Fixed unit test.
* Now tested and working.
Integrated with new island and resetting island.
If there are no blueprint bundles or blueprints then a default bedrock
set will be made and put in the game mode addon's blueprints folder.
Still to do: enable schems to be loaded and pasted for legacy support.
Add blueprints and a bundle to GameModeAddons like BSkyBlock.
* Renamed most of the classes
* Cleaned up clipboard and paster.
* Further cleanup on blueprint clipboard and paster.
* Merged blueprint classes into one package.
* Put Blueprint data objects in their own package.
Isolated schems classes for later removal.
* Renamed admin command classes and changed locale files.
* More clean up to remove schems
* Schem to blueprints converter done.
Converts schems to blueprint bundles and sets up a default set. Tested
the happy-path. Need to do more testing on edge cases.
* Added basic UI for development. Fixed bug with schem conversion.
* Adds permissions into the blueprints.
Fixes tests, cleans up some naming
* Added IslandCreationPanel and created BlueprintManagementPanel
* Fixed JSONDatabaseHandler's constructor being public
* Made the Blueprints button in ManagementPanel open the Blueprint management panel
* Fixed tests and ignored one (NPE)
* Upgrade BentoBox pom
- Replace default profile with ci profile, like in Challenges addon.
This profile will set value for build.number variable.
- Improve master profile
This will remove -SNAPSHOT for the end of revision and sets build.number to empty string.
* Add build.number at BentoBox version
This will allow to know which snapshot build is used in current build.
* Update pom.xml
Co-Authored-By: Florian CUNY <poslovitch@bentobox.world>
* Create Latvian language file.
This will contain most of the translations.
The only missing part is Flag translations.
* Update latvian translation
Translate protection flags
* Update latvian language
Add missing translations.
- JSON is now the default database type
- JSON database files are now pretty-printed
- It is now possible to migrate from a database type to another through the use of a command and specific transition database types
- It is recommended to move from YAML to JSON.
= Commits breakdown =
* Proposal to make JSON the default database and retire YAML.
* Make JSON file format easier to read.
* Fix tests.
* Adds a hybrid Yaml2Json database type.
This database always tries to use JSON if it is available. If a YAML
file is found, it will be loaded and replaced with a JSON file.
* Move to generic database transition code
* Better comments
* Adds transitional database options so admins can choose.
Adds Yaml2MySQL option and changes config.yml to add instructions.
* Enables full database migration between databases.
Adds /bbox migrate command.
Adds a number of transition databases. DB starts transition when the
server boots up and will migrate organically. The admin can force an
immediate update using the bbox migrate command.
This operation requires an API breaking change: Addons that use the
Config API must now implement ConfigObject in their config class instead
of DataObject. This is to differentiate YAML config classes from YAML
database classes. If a class is already implements WorldSettings
(GameModeAddons), then no change is required because WorldSettings
implements ConfigObject now. If an old addon is used that does not
implement ConfigObject, BentoBox will not load.
* Added null check to YAML deletion
* Removed the 2YAML transition dbs because YAML is deprecated.
YAML does not support some data structures so conversion could corrupt
data.
* Fixed some javadoc and added missing DatabaseType#JSON2MARIADB
* Renamed package database/transitiondb to database/transition
* Enables game mode addons to run as the only world.
Requires game mode addons to do the following in their onLoad:
1. Register commands
2. Be able to provide the chunk generator object because it will be used
to generate the worlds
3. Be able to provide the WorldSettings because the world name (string)
is required
* Sets world in CompositeCommand after onEnable
* Added Javadoc to Addon#onEnable and Addon#onLoad to better explain where to do what.
* Refactor of clipboard to separate out file saving/loading
There's now a clipboard manager to handle file system loading and saving
so that the clipboard works purely in blocks (YAML).
* Fixes a few bugs
* Renamed getClipBoard to getClipboard
* WIP - adds admin commands to handle damaged island db
Trash, purge, etc.
DO NOT MERGE YET
https://github.com/BentoBoxWorld/BentoBox/issues/505
* Prefixes the island uniqueId with the game mode name.
This enables manual removal of old game mode island files from the
database by admins if required.
* Adds Admin trash and empty trash commands
* Adds various commands for trash management
* Remove unused imports
* Forgot the javadoc in IslandsManager
Implemented a FIFO to queue async save requests for YAML and MySQL.
The assumption is that most database objects will be held in memory
because the ordering of object loading is not handled. That means that
it is theoretically possible to load something on the main thread before
it has been saved in the async thread if you are really quick. So, in
general, you should load objects once and ideally never load them again
unless there's a big span of time in between so the async can finish.
For most situations, this race condition should not occur, but I'm just
warning about it.
Saving on shutdown is not async and takes as long as it takes.
Also added some defensive code to disable the plugin if the database
connection info is wrong and print an error message instead of lots of
errors.
Changed CleanSuperFlatListener to use a LinkedList for its queue.
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.
This will load all schems in an add-on's schem folder if it exists and
associate them with this world set (overworld, nether and end). Schems
can be named anything, but the partner nether or end worlds must be
pre-fixed with "nether-" or "end-" in the filename.
Additional schems can be added by the admin into the schem folder, or
they can be stored in the jar file of the add-on. Both are supported.
No changes are required to current add-ons. I.e., there is no API
breakage here, but I would like to rename the SchemsManager method
loadIslands(World world) to be loadSchems(World world) in the future.
Related issues/PR:
https://github.com/BentoBoxWorld/BentoBox/issues/104https://github.com/BentoBoxWorld/BentoBox/issues/207https://github.com/BentoBoxWorld/BentoBox/issues/378https://github.com/BentoBoxWorld/BentoBox/pull/408
#361
* Added IslandInfoCommand : "/is info" or "/is who". This is basically a copy/paste from AdminInfoCommand, and it uses the same methods.
* Updated en-US locale accordingly