* Multi world WIP - stashing
* Initial work on supporting multiple islands per player
The default allowed number is 5 for now, but will be set to 1 by
default.
Lots more work to do on this!
* More work on multi island. Fixed tests so clean compile.
* Remove unused imports
* Updated island go and homes command to multi island
Updated tests.
* Do not reload addons anymore.
* Add island name when entering or leaving own island
* Remove unused import
* Adds island names to /island go command.
* Enables more homes to be set if player has more than one island
* Switch to using a set for islands and explicit primary boolean in Island
* WIP
* Fix bugs with the go command.
* Be able to delete multiple islands, e.g. when joining a team
This is not fully tested.
* Do not remove all islands when a player does reset.
Players can reset just the island they are on.
* More fixes for go command
* Fix tests
* Fix @NonNull annotation
* Fix home syntax listing reference for IslandDeleteHome
* Fixed deletehome for multiple islands.
* Fix /island command teleport to current island default home.
* Remove deprecated code.
* Fix tag for concurrent island setting in config.yml
* Improve error when trying to make additional islands over limit
* Update config.yml
* Correctly assign invites for islands.
* Switch to canExecute API in prep for multi-island handling
* Prevent players from obtaining more concurrent islands by owner transfer
* Handle leaving and disbanding of teams
* Fix tests
* Fix minor bugs or code smells.
* Restore the quarantine code from deprecation.
This code can stay. It checks if islands can load, and if not puts them
in a trash. It does no harm.
* Remove unneeded eq()'s
* Fix tests
* Implements option to define non-existing flags in WorldSettings.
This change adds 2 new methods in WorldSettings:
* WorldSettings#getDefaultIslandFlagNames
* WorldSettings#getDefaultIslandSettingNames
These methods replace getDefaultIslandFlags and getDefaultIslandSettings methods.
Default implementation just reads values from replaced methods.
Fixes#1830
* Implement conversion from flag id to actual flag object.
Replaces flag assignment to new island based on flag id's.
Fixes#1830
* Switch from Flag object to String object in Island class.
This switch allows to keep flags that are not present in current BentoBox installation. Otherwise, unknown flags may cause an issues.
Fixes#1830
* Implement FlagBooleanSerializer.
This serializer converts input map of String, Boolean to map of String, Integer.
This map is used to read island setting flags, and integer value is not classic boolean values. (0 for true and -1 for false).
Fixes#1830
* Add WorldSettings methods for portals
* Vanilla portals option added.
Currently defaulted on for testing. Ultimately, the game mode config can
decide if the vanilla portal is used or not.
Note that the end platform is just a set of obsidian blocks.
* Reduces search radius when close to island edge
* Adds and fixes tests
* Use EntityPortalEnterEvent instead of PlayerMoveEvent
* Removed duplication between nether and end portalling
* Code clean up
* Single event handler for nether and end.
* Created new PlayerEntityPortalEvent class to enable entity teleports
Unfortunately, PlayerPortalEvent and EntityPortalEvent are not fraternal
classes so there's no way to apply code to both except via this
abstraction class.
Tests fail.
* Places end portal always in the same place.
* Teleport entites to nether or end
Identify the teleport cause manually because there is no method.
Teleports to the End happen but seem to be slightly different locations.
Some entities will disappear, others will stick around. I don't know
why.
* Put defaults back to false.
* Create end spawn point to default point when not making end islands
* Fixed PortalTeleportationListener tests.
* Updated since tag
Implements #1065.
Added two new permissions:
* [gamemode].trust.maxsize.[NUMBER]
* [gamemode].coop.maxsize.[NUMBER]
Added two new WorldSettings and related methods in IWM:
* getMaxCoopSize() (defaults to 4)
* getMaxTrustSize() (defaults to 4)
* Add limit for coop players #1065
* Edit comparison sign
* Add limit for trust players #1065
* Add default value and add since javadoc tags
* improved messages
* readded missing "
Co-authored-by: Florian CUNY <poslovitch@bentobox.world>
https://github.com/BentoBoxWorld/BentoBox/issues/1063
Note that corresponding settings must be added to game mode addons.
Also, note that I added this as a default method so that it will not
break current older game mode addons.
Implements https://github.com/BentoBoxWorld/BentoBox/issues/704
Gamemode addons will need to be updated to use the new WorldSettings, which have been properly documented so it should be easy to write down comments about them.
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.
* API addition - adds reset deaths on new island
BentoBox currently tracks deaths in the worlds but the current API only
allows them to be reset when a player joins a team. This setting enables
deaths to be reset when a player starts a new island or resets an
island.
WARN: This should be the only additional WorldSetting we need for deaths.
* Update src/main/java/world/bentobox/bentobox/api/configuration/WorldSettings.java
* Update src/main/java/world/bentobox/bentobox/managers/IslandWorldManager.java
* Update src/main/java/world/bentobox/bentobox/managers/island/NewIsland.java
* Update src/main/java/world/bentobox/bentobox/managers/IslandWorldManager.java
- 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
* Saves world settings to config.yml when they are changed mid-game.
* Fixes and adds to tests
* WIP: Added visibility settings for flags.
Tests still need to be fixed and requires saving to config.yml.
* Fixes tests
* Completed changes.
* Renames method to be hidden flags instead of visible settings
GameModeAddons will need to adjust WorldSettings API based classes.
This API enables any command to have a cool down and to have that cool
down called by another command. For example, the Kick command sets the
cool down on the Invite command. It is possible for commands to set cool
downs on themselves too.
Currently, cool downs are not stored persistently in the database so
they disappear if the server is reloaded. This should be okay for now.