Commit Graph

1682 Commits

Author SHA1 Message Date
Florian CUNY
095237cd5d Flags#values() will no longer return deprecated flags
Deprecated Flags are flags that will be removed. It is therefore better to not return them in this method.
2019-02-19 10:09:45 +01:00
Florian CUNY
66de769bb0 Added Island#getVisitors() and Island#hasVisitors() 2019-02-18 21:53:48 +01:00
Florian CUNY
8e21785811
Added 'pardon' as an alias in IslandUnbanCommand 2019-02-17 21:11:51 +01:00
Florian CUNY
b9bc394945 Ignored failing tests 2019-02-17 15:10:40 +01:00
Florian CUNY
9174410998 Added 'options' as another alias to IslandSettingsCommand 2019-02-17 15:10:30 +01:00
Florian CUNY
dd467f27be Added the 'all players selector' to AdminResetsResetCommand#tabComplete(...) 2019-02-17 15:10:08 +01:00
Florian CUNY
dfc1f46730 Forgot to remove debug and commented-out code 2019-02-17 14:46:26 +01:00
Florian CUNY
028785c4b0 Fixed end portal not linking to normal end world
Fixes #306
2019-02-17 14:29:12 +01:00
tastybento
bce17ce467 Added admin trash command to handle damaged island db (#546)
* 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
2019-02-17 13:32:05 +01:00
tastybento
063303ad0e Adds admin command to reset all island flags to default
Used when an admin wants to change the default flag settings for all
islands and reset every one in the world.
2019-02-16 22:31:46 -08:00
Florian CUNY
af6ec400d1 Fixed tests 2019-02-16 22:58:46 +01:00
Florian CUNY
658bd10e5c Removed unused imports in PortalTeleportationListener 2019-02-16 22:51:17 +01:00
Florian CUNY
edd774d979 Merged Standard and Island Nethers portal handling in the same method 2019-02-16 22:48:05 +01:00
DarkRails
781676a90f Remove inventory clear in any case (#553)
Before this change, the inventory was cleared in any case even if inventory clear is set to false in configuration
2019-02-16 11:43:39 -08:00
Florian CUNY
3aefdc449d Renamed NetherPortals to PortalTeleportationListener
It is a way more explicit and conventional name, in my opinion!
2019-02-16 11:17:48 +01:00
Florian CUNY
a364128c5e Extracted standard nether/end spawns protection into its own listener
It was previously handled in the NetherPortals listener
2019-02-16 11:09:34 +01:00
Florian CUNY
5d7a7a0363 Ignoring NetherTreesListenerTest for now 2019-02-16 10:59:30 +01:00
Florian CUNY
9803a02471 Added NonNull to all listeners constructors 2019-02-16 10:58:25 +01:00
Florian CUNY
16c4c9b0be Revert "Fixed errors in tests"
This reverts commit b7f9892d95.
2019-02-16 10:48:41 +01:00
Florian CUNY
0d7836ff12 Revert "Made each "basic" listeners register themselves on instanciation"
This reverts commit 53137b526d.
2019-02-16 10:48:39 +01:00
Florian CUNY
44729ae9cb Moved NetherTreesListener to the correct package 2019-02-14 11:34:33 +01:00
Florian CUNY
b7f9892d95 Fixed errors in tests
However, tests are still failing!
2019-02-14 11:32:16 +01:00
Florian CUNY
53137b526d Made each "basic" listeners register themselves on instanciation 2019-02-14 11:24:58 +01:00
Florian CUNY
7ac5f556a1 Started NetherTreesListenerTest
I haven't worked that much on it yet. I've got tons of other things to do!
2019-02-14 11:13:00 +01:00
Florian CUNY
1eac578ba1 Moved the Nether trees conversion to its own listener 2019-02-14 11:08:54 +01:00
Florian CUNY
1a3049b3b9 Fixed code smells 2019-02-14 10:41:39 +01:00
Florian CUNY
6b0b0237cd Removed unused import 2019-02-13 11:12:06 +01:00
Florian CUNY
a1d8c69556 Added BentoBox#logStacktrace(Throwable) 2019-02-13 11:03:26 +01:00
Florian CUNY
d5750ca509 Removed 'duplicate' log in AddonsManager#handleAddonError() 2019-02-13 10:51:12 +01:00
tastybento
58253eb7d7 Implements gamemode-specific flags API (#541)
* Implements gamemode flags API

https://github.com/BentoBoxWorld/BentoBox/issues/406

* New and improved
2019-02-13 07:58:33 +01:00
tastybento
f89419f3d8 Made declaring the player mandatory when calling FlagListener#checkIsland(...) (#543)
* 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
2019-02-13 07:55:36 +01:00
tastybento
3ca0c440e4 Sets initial home location in middle of block 2019-02-12 20:03:02 -08:00
Florian CUNY
c2a7ca86ff Fixed some code smells 2019-02-12 20:29:20 +01:00
Florian CUNY
7893c03a64 Merge branch 'github' into develop 2019-02-12 16:44:36 +01:00
Florian CUNY
7e0ea8d945 Added WebManager 2019-02-12 16:24:51 +01:00
Florian CUNY
3fb60480ff Added AddonDescription#getRepository() 2019-02-12 16:11:11 +01:00
Florian CUNY
68b7702b1c Made AddonClassLoader#asDescription() use 'false' as getBoolean("metrics")'s default value 2019-02-12 16:09:20 +01:00
Florian CUNY
592e144ef0 Removed useless super(); in RanksManager's constructor 2019-02-12 16:08:20 +01:00
Florian CUNY
7fa72fdb81 Added NonNull to FlagsManager#plugin 2019-02-12 16:07:58 +01:00
Florian CUNY
9d41991c75 Added API to get data from GitHub's Web API
This took me quite a long time, but I did it!
2019-02-12 15:34:26 +01:00
Florian CUNY
600634db2e Added Util#parseGitHubDate(String) 2019-02-12 14:51:52 +01:00
tastybento
d7db3b034c Removed debug 2019-02-11 22:44:38 -08:00
tastybento
75c9f6fb2c Enables dragon to be summoned using /summon command
https://github.com/BentoBoxWorld/BentoBox/issues/522
2019-02-11 19:11:48 -08:00
tastybento
179a71b548 Get island by its UUID API added
https://github.com/BentoBoxWorld/BentoBox/issues/341
2019-02-11 19:01:44 -08:00
tastybento
9dfb0573d9 Adds test class for Island Sethome command.
Refactors some of IslandSethomeCommand class to use the new canExecute
method.
2019-02-11 15:54:15 -08:00
tastybento
dd3bd6d9e7 Fixes sethome in nether and end bug.
https://github.com/BentoBoxWorld/BentoBox/issues/538
2019-02-11 14:46:54 -08:00
tastybento
1d5057ec5a Explicitly sets user for break blocks check.
The user was not being set. Also the ordering of event handling was
random because both listeners had the same priority.

Should fix:
https://github.com/BentoBoxWorld/BentoBox/issues/534
2019-02-11 07:39:03 -08:00
tastybento
28c89ff814 Revert "Explicitly set user for break blocks listener"
This reverts commit 5beeb97f99.
2019-02-11 07:16:16 -08:00
tastybento
9a3d4bef03 Handles setspawn better when a player owns the island
Island members were not being cleared from the island properly. It
should be done via IslandManager and not directly on the island object
because the island manager holds a number of ownership maps. Also the
player needs to have their island home locations cleared. Further, any
members of the island also need to be completely cleared from the
island.
Finally, as this is similar to unregistering the player from the island,
the event should be fired so that any addons know the island is no
longer owned and the owner no longer owns an island.
2019-02-10 22:04:05 -08:00
tastybento
564f60bab3 Fixes loading and setting of spawn island.
https://github.com/BentoBoxWorld/BentoBox/issues/523

When loading islands the spawn setting was not being checked so spawn
islands were not added to the spawn island map.
2019-02-10 22:00:50 -08:00
tastybento
ce0b9569ca Corrected comment 2019-02-10 21:58:56 -08:00
tastybento
ac2e3596f7 Made admin unregister command confirmable.
Uses new canExecute API.
Also correctly removes any island members from the island.
2019-02-10 21:57:58 -08:00
tastybento
1dc56dfc4f Removes runnable from approach.
This could cause problems with threads because runnable should not be
run like this (effectively async). It should only be run inside a Bukkit
scheduled task to run on the main thread.
2019-02-10 20:11:50 -08:00
tastybento
0cf0742c07 Remove code duplication. 2019-02-10 20:09:39 -08:00
tastybento
583311ce03 Merge branch 'develop' of https://github.com/BentoBoxWorld/bentobox.git into develop 2019-02-10 20:06:22 -08:00
tastybento
5beeb97f99 Explicitly set user for break blocks listener
Removed duplicate break blocks listener in
BlockInteractionListener.java. Why was it there? Am I missing something?
2019-02-10 20:06:13 -08:00
Florian CUNY
f0543bc85c Fixed SafeSpotTeleport being way too spammy
https://github.com/BentoBoxWorld/BentoBox/issues/306#issuecomment-462190682
2019-02-11 00:47:26 +01:00
tastybento
04e4b2dbe5 Merge branch 'develop' of https://github.com/BentoBoxWorld/bentobox.git into develop 2019-02-10 15:36:46 -08:00
tastybento
8334de8cba Fixes island pasting issue when pasting clipboard every tick.
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.
2019-02-10 15:36:37 -08:00
Florian CUNY
4873d11ec3 Added Flags#BOAT
#387
2019-02-10 23:11:11 +01:00
Florian CUNY
a2607c913f Fixed AdminDeleteCommand tests (oopsie) 2019-02-10 22:59:03 +01:00
Florian CUNY
c86fb35aac Added Flags#MINECART
#387
2019-02-10 22:55:45 +01:00
Florian CUNY
865a1d0caa Added BentoBoxCommand#canExecute(User, String, List<String>)
#530
2019-02-10 22:32:33 +01:00
Florian CUNY
0fd043df23 Partially fixed island owner losing inventory on /is team kick
Partially fixes #521.
See https://github.com/BentoBoxWorld/BentoBox/issues/521#issuecomment-462128961 for reference.
2019-02-10 13:34:17 +01:00
Florian CUNY
f71ca4f084 Fixed likely NPE in IslandTeamKickCommand 2019-02-10 13:21:01 +01:00
Florian CUNY
890217939b Added some more package-info.java 2019-02-10 13:14:40 +01:00
Florian CUNY
82e7093fbc Added Flags#NATURAL_SPAWNING_OUTSIDE_RANGE
#513
2019-02-10 13:14:24 +01:00
BONNe
9708d9d3ed Correct Ender Dragon Block.
In Spigot (and Bukkit) the end exit portal frame and first dragon is generated after Ender Dragon Legacy check.
This check tries to find if in world exist Exit Portal, and if it does not find it, it generates everything from scratch.
So, to trick legacy check, it is enough to place 1 End Portal somewhere in (0.0) chunk, and portal will not be generated.
2019-02-10 01:28:51 +02:00
tastybento
7b612c102e Revert "Adds method to obtain island via island unique id."
This reverts commit f64968c7c7.
2019-02-09 08:26:55 -08:00
tastybento
46f39c3649 Merge branch 'develop' of https://github.com/BentoBoxWorld/bentobox.git into develop 2019-02-09 08:23:46 -08:00
tastybento
d17d19d5d3 Fixes horse and similar pasting from files
https://github.com/BentoBoxWorld/BentoBox/issues/532
2019-02-09 08:22:47 -08:00
Florian CUNY
b8afd1919f Added Flags#TREES_GROWING_OUTSIDE_RANGE
#512
2019-02-09 11:39:12 +01:00
Florian CUNY
69ca910df4 Made LiquidsFlowingOutListener priority to LOWEST 2019-02-09 11:35:28 +01:00
Florian CUNY
c623e7c036 Documented Flags#EGGS 2019-02-09 09:54:32 +01:00
tastybento
f64968c7c7 Adds method to obtain island via island unique id. 2019-02-08 21:56:14 -08:00
Florian CUNY
af96055753 Added testHasNotPermissionButIsOp in UserTest 2019-02-08 21:25:40 +01:00
Florian CUNY
2bec47ba90 Made User#hasPermission(String) return true if the user is op 2019-02-08 21:17:57 +01:00
Florian CUNY
1e20ccb604 Added package-info.java to flag listeners packages 2019-02-08 20:56:53 +01:00
Florian CUNY
e3c8b0a4c1
Merge pull request #527 from YellowZaki/patch-1
Add island.team.promote permission
2019-02-08 13:26:28 +01:00
tastybento
f7f47e8f44 Defensive code around null worlds
When a world is not loaded it becomes null in Bukkit so that any
references to that world will be null. If an admin removes a game mode,
then the island data was instantly becoming useless and quarantined.
This change leaves the files as-is so that if the game mode is put back,
the world is still viable.

As for home locations that are stored in the Player object, they are
removed so they do not cause errors.
2019-02-07 19:18:46 -08:00
YellowZaki
c949239ed6
Add island.team.promote permission 2019-02-08 02:54:24 +01:00
tastybento
2599839fad Shifted exception logging to logger.
These are really needed if you are writing an addon otherwise you are
blind to any reasons for an error.
2019-02-07 08:10:45 -08:00
tastybento
0d723587e4 Adds addon name to log messages. 2019-02-06 17:39:44 -08:00
Florian CUNY
281d16c175 Added ability to reload BentoBox's configuration using /bbox reload
#370
2019-02-06 16:46:17 +01:00
Florian CUNY
ca2bb18a56 Improved javadoc and locale description for LIQUIDS_FLOWING_OUT 2019-02-06 16:17:58 +01:00
Florian CUNY
93deee7c13 Fixed code smells 2019-02-06 16:06:03 +01:00
Florian CUNY
280f2e6c1c Added server version to /bbox v output
#518
2019-02-06 15:46:21 +01:00
Florian CUNY
5118b30303 Made ServerCompatibility#getServerVersion() and #getServerSoftware() public 2019-02-06 15:45:53 +01:00
Florian CUNY
8786c3a879 Fixed /bbox v using [name] textvariable to display BentoBox's version instead of [version] 2019-02-06 15:28:09 +01:00
tastybento
93e95b42a0 Remove end exit island deletion
Reverts that part because it causes an endless loop of chunk reloading
and block placement.
2019-02-05 23:22:18 -08:00
tastybento
446028fbae Revert "Reworks how dragons are removed."
This reverts commit af9de5580a.
2019-02-05 22:54:48 -08:00
tastybento
af9de5580a Reworks how dragons are removed.
Enables manual summoning of end dragons

https://github.com/BentoBoxWorld/BentoBox/issues/522
2019-02-05 18:37:05 -08:00
tastybento
0ad8dabba7 Added @since 1.3.0 tags 2019-02-04 23:19:13 -08:00
tastybento
3ccd19bf9c Fix locales to show correctly based on GameMode and locations
Fixes console translations too.

https://github.com/BentoBoxWorld/BentoBox/issues/519
2019-02-04 23:02:07 -08:00
tastybento
fd882c018b Fixes enderchest world setting
It was being double handled by two listeners.

Fixes:
https://github.com/BentoBoxWorld/BentoBox/issues/516
2019-02-04 22:01:43 -08:00
tastybento
f4c149dd6f Moved test classes to match src packages 2019-02-04 20:39:21 -08:00
tastybento
dba9829fd9 Makes the end exit island removal a world setting
https://github.com/BentoBoxWorld/BentoBox/issues/223
2019-02-03 22:54:49 -08:00
tastybento
7c099d941f Added IslandWorldManager test class
Fixed bugs found in IWM
2019-02-03 19:13:14 -08:00
tastybento
6bac97941a Handles null locations and worlds.
Added nullable and nonnull annotations to the IWM class.

https://github.com/BentoBoxWorld/BentoBox/issues/515
2019-02-03 17:54:47 -08:00
tastybento
472b9fa7b6 Adds missing locations to the event builder.
Some addons check the location and have NPE's if it is not set.
2019-02-03 16:28:03 -08:00
tastybento
bf1b59076c Removes the end trophy island
After looking at the server code, it does not appear to be possible to
prevent the end island from generating. However, it can be tricked to
place it very high up by placing a bedrock block at 0,255,0. Then 1
second after it is generated, it can be removed.

This results in the end island owner at 0,0 only being able to build up
to 250 blocks high instead of 255. I added a simple block place listener
to prevent placing of blocks above 250 because they will be deleted any
time the chunk is loaded.

If there's a better way to do this, I'm open to it!
2019-02-03 16:27:30 -08:00
Florian CUNY
1c06584131 Added Flags#LIQUIDS_FLOWING_OUT
Also fixed some Javadoc in Flags, and I've also done my very first test unit!

#511
2019-02-03 14:05:28 +01:00
Florian CUNY
30fb7820fc Minor modifications to ObsidianScoopingListenerTest 2019-02-03 13:59:00 +01:00
Florian CUNY
87f20e98a3 Removed already used icon condition when registering Flag
ID must be unique, icon may not.
2019-02-03 11:18:57 +01:00
Florian CUNY
c0c7cd6d26 Fixed colors in OBSIDIAN_SCOOPING description in en-US locale 2019-02-03 11:06:32 +01:00
Florian CUNY
d31be375da Updated Flags#CREEPER_GRIEFING javadoc 2019-02-03 10:31:37 +01:00
Florian CUNY
b4bd6c4e2c Fixed Flags#END_PORTAL duplicate call to PortalListener 2019-02-03 10:27:03 +01:00
Florian CUNY
ea12d8c167 Moved all the flags listeners to subpackages 2019-02-03 10:22:44 +01:00
tastybento
f60a39a543 Fires team and island events. Adds new events.
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.
2019-02-02 20:40:44 -08:00
tastybento
360cda5a1c Uses translations for the confirmation call 2019-02-02 18:26:12 -08:00
tastybento
ae9e030aae Moves placeholder manager initialization to before addon loading
This enables addons to register placeholders when they are enabled.
2019-02-02 12:29:16 -08:00
Florian CUNY
8b2ca8db23 Fixed zh-HK locale not having .yml extension 2019-02-02 21:03:35 +01:00
Florian CUNY
b8d9b410ae
Merge pull request #510 from mkcoldwolf/master
Added zh-HK locale and small fix for some others
2019-02-02 17:21:29 +01:00
mkcoldwolf
7e1da2fe2f
Create zh-HK
Directly translate from zh-CN but also update the messages to lastest
2019-02-02 21:39:43 +08:00
mkcoldwolf
a88fc4e45c
Update en-US.yml
Fixed locale that protection.ITEM_FRAME is missing in /is settings
2019-02-02 21:37:24 +08:00
Florian CUNY
384cbf31a7 Version 1.2.1 2019-02-02 14:15:16 +01:00
Florian CUNY
5609a19765 Fixed tab-completion suggesting help more than once
Fixes #416
2019-02-02 14:04:53 +01:00
Florian CUNY
18eba5725c Uncommented out a failing test and added a Ignore annotation to it 2019-02-02 14:04:01 +01:00
Florian CUNY
fb34c54165 Minor code cleanup in CompositeCommand 2019-02-02 12:01:48 +01:00
Florian CUNY
84e89f80cd Fixed players being stuck in SPECTATOR after going through End Portal
Fixes #377

It was due to the SafeSpotTeleport not being flagged as "portal" when issuing the teleportation Nether -> End.
2019-02-02 11:45:31 +01:00
Florian CUNY
ade4a141c4 Started javadoc-ing Flags 2019-02-02 11:30:43 +01:00
Florian CUNY
53eec634fb Added some dots at the end of sentences in en-US locale 2019-02-02 11:30:19 +01:00
Florian CUNY
fd3815d132 Removed unused import in FlagsManager 2019-02-02 11:29:53 +01:00
mkcoldwolf
8b8a4a01b8
Rename jp-JP.yml to ja-JP.yml
Language Code of Japanese should be ja-JP
2019-02-02 18:17:25 +08:00
Florian CUNY
de69c9c571 Removed deprecated FlagsManager#getFlagByID(String)
This method was actually still used in some classes, so I had to fix them as well.
2019-02-02 11:06:59 +01:00
Florian CUNY
57d70c3d24 Removed deprecated methods in AddonDescription and FlagListener 2019-02-02 10:51:59 +01:00
Florian CUNY
f2078aae3f Fixed additions where at least one operand was not casted as double 2019-02-02 10:47:59 +01:00
Florian CUNY
ce025cc49f Fixed typos in en-US locale 2019-02-02 10:38:25 +01:00
tastybento
f983aa5f44 Fixed permission bug with custom schems and reset
https://github.com/BentoBoxWorld/BentoBox/issues/509
2019-02-01 20:51:57 -08:00
tastybento
f351704e8a Prevent placing of armor stands
https://github.com/BentoBoxWorld/BentoBox/issues/507
2019-02-01 19:44:46 -08:00
tastybento
5755a19e3d Fix name too short and long locale reference
https://github.com/BentoBoxWorld/BentoBox/issues/508
2019-02-01 17:57:04 -08:00
tastybento
16e57dc757 Adds Residence plugin as a loadbefore
Work around for https://github.com/BentoBoxWorld/BentoBox/issues/503
2019-01-30 22:39:04 -08:00
tastybento
95efc7a66c Put in null check for item meta (missed one)
https://github.com/BentoBoxWorld/BentoBox/issues/492
2019-01-30 17:38:16 -08:00
tastybento
791c8b1de1 Put in null checks for item meta
https://github.com/BentoBoxWorld/BentoBox/issues/492
2019-01-30 17:37:16 -08:00
tastybento
8dbf7ec231 Admin team add command was not adding players correctly.
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.
2019-01-30 17:27:53 -08:00
tastybento
804d0f9878 Quarantines duplicate islands so they don't load continuously
https://github.com/BentoBoxWorld/BentoBox/issues/505
2019-01-30 16:46:51 -08:00
tastybento
271d6aa5e9 Adds json suffix to JSON database files
https://github.com/BentoBoxWorld/BentoBox/issues/502
2019-01-29 13:43:34 -08:00
Florian CUNY
7b79755d92
Merge pull request #496 from barpec12/master
Add possibility to load schems with non-lowercase names.
2019-01-29 06:12:35 +01:00
tastybento
46cc901c23 Adds support for ItemStack storage in non-YAML databases.
Fixes https://github.com/BentoBoxWorld/BentoBox/issues/501
2019-01-28 18:29:17 -08:00
barpec12
c5c2ae5fc1 Change imports 2019-01-28 13:47:55 +01:00
barpec12
c6b4a10634 Add possibility to load schems with non-lowercase names. 2019-01-28 11:11:07 +01:00
tastybento
8cddb1e69f Set user for potion splash event
https://github.com/BentoBoxWorld/BentoBox/issues/493
2019-01-27 19:59:00 -08:00
tastybento
04fa7fab80 Fixes issue with missing user assignment of potion thrown
Adds test for throwing potion class.

https://github.com/BentoBoxWorld/BentoBox/issues/493
2019-01-27 19:51:03 -08:00
tastybento
0280303058 Revert to fix Java 11 compatibility.
dfe7fc27e5 (commitcomment-32081178)
2019-01-27 09:17:54 -08:00
tastybento
873c12fe70 Revert "Fixed minor code smell in AddonClassLoader"
This reverts commit a392dbc8b3.
2019-01-27 09:08:41 -08:00
Florian CUNY
6fdf11f91e Version 1.2.0 🎉 2019-01-27 10:24:01 +01:00
Florian CUNY
9afb5c6382 Fixed HooksManager logging hook failures even if the target plugin is not available 2019-01-27 10:22:04 +01:00
Florian CUNY
aea057317b Added option to apply the reset cooldown when the player creates an island for the first time
Closes #456.
2019-01-27 10:10:25 +01:00
Florian CUNY
9551560593 Moved all command cooldown settings to "island.cooldown.time" node 2019-01-27 10:04:13 +01:00
Florian CUNY
30487beffc Improved some config comments 2019-01-27 09:59:31 +01:00
Florian CUNY
2a66598d2f Fixed bugs/vulnerabilities in YamlDatabaseConnector#removeStringFromFile(File) 2019-01-27 09:43:14 +01:00
Florian CUNY
5334caf7b5 Fixed AdminGetrankCommand for island members
Fixes #485
2019-01-27 09:32:16 +01:00
Florian CUNY
1c3ccba3ae Fixed probable NPEs in IslandsManager and IslandCache 2019-01-27 09:31:35 +01:00
Florian CUNY
e5170fc4b5 Updated since tags 2019-01-27 09:23:23 +01:00
tastybento
24806019b8 Addresses review issues. 2019-01-26 22:07:26 -08:00
tastybento
5bf6264e95 Fix since tag in GameModeAddon 2019-01-26 16:37:13 -08:00
tastybento
9968a8e083 Fixed Multiverse issues
Multiverse hookin wasn't working.
2019-01-26 16:33:59 -08:00
tastybento
daef788e65 Merge remote-tracking branch 'origin/develop' into startup 2019-01-26 15:33:35 -08:00
tastybento
db932dd836 Fix for LogEntry serialization.
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.
2019-01-26 15:32:52 -08:00
tastybento
5b2ad730df Adds getDefaultWorldGenerator method to BentoBox
This may help with Multiverse compatibility.
May fix https://github.com/BentoBoxWorld/BentoBox/issues/431

Adding as PR because GameMode addons will need changing to new
Interface.
2019-01-26 13:22:07 -08:00
tastybento
4e81baf45e Flags are requested from FlagManager not statically
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.
2019-01-26 09:39:34 -08:00
Florian CUNY
afdfc285cc Fixed LogEntryListAdapter
Fixes #486
2019-01-26 16:05:55 +01:00
Florian CUNY
b07d7ba3af Load hooks before loading addons
Fixes #489.
2019-01-26 15:29:18 +01:00
Florian CUNY
6155a8cf80 Version 1.1.1-SNAPSHOT (develop)
Rather than releasing a minor version, we will release a bug-fix focused one.
2019-01-26 15:23:46 +01:00
tastybento
5f49e2b17b Runs /spawn command for player if no safe teleport spot
https://github.com/BentoBoxWorld/BentoBox/issues/479
2019-01-24 08:30:43 -08:00
Florian CUNY
f5f345a1ab Documented Flag.Type 2019-01-23 19:58:31 +01:00
Florian CUNY
ae246435ba Temporarily removed Expose annotation to 'history'
Should fix #482
2019-01-23 19:29:42 +01:00
Florian CUNY
0789ec0969
IslandBanCommand: added "banned", "bans" aliases 2019-01-23 15:40:25 +01:00
Florian CUNY
29d0cb6eb3
IslandCreateCommand: add "new" alias 2019-01-23 15:39:41 +01:00
tastybento
9e0772367a Fixes NPE caused by island delete of a null island
If a player is invited and has no island, the accept command was still
trying to delete it and causing an NPE.

Also, the island save was being done on the old island, not the new team
island.
https://github.com/BentoBoxWorld/BentoBox/issues/481
2019-01-22 12:53:33 -08:00
Florian CUNY
4958304aa5 Added "logs.clean-super-flat-chunks" to config
Closes #483
2019-01-22 14:39:44 +01:00
Florian CUNY
77f9f4869b Fixed typo in previous commit 2019-01-22 14:28:10 +01:00
Florian CUNY
eb8f25f319 Improved documentation in CleanSuperFlatListener 2019-01-22 14:26:00 +01:00
Florian CUNY
9af389ce1d Made BentoBox#logWarning(String) evaluating lazily the parameter 2019-01-22 14:18:06 +01:00
Florian CUNY
bfad54b7e3 Made CleanSuperFlat log regenerating as INFO instead of WARN
#483
2019-01-22 14:17:43 +01:00
tastybento
468ad4e83d Fix cycle click nullables 2019-01-20 10:04:32 -08:00
Florian CUNY
6cdde8ca5f Forgot to update javadoc 2019-01-20 18:32:12 +01:00
Florian CUNY
85119a0b06 Fixed some code smells 2019-01-20 18:21:46 +01:00
Florian CUNY
bb188cb8ff Release 1.1 2019-01-20 10:10:29 +01:00
Florian CUNY
5a573bdbbe Fixed tests 2019-01-20 10:00:17 +01:00
Florian CUNY
819096eba9 Fixed usage of deprecated methods in CycleClicks and fixed a probable NPE 2019-01-20 09:47:15 +01:00
Florian CUNY
113335e60a Fixed code smells 2019-01-20 09:46:00 +01:00
Florian CUNY
5cbbbabcbf Fixed ejected players being stuck in SPECTATOR gamemode
If the player don't have an island, we try to teleport him to the "gamemode spawn".
If the "gamemode spawn" doesn't exist, we teleport it the hard way to the world's programmatic spawn and switch him back to the default gamemode.
That may not be the correct handling there, but at least it's working and it should prevent most of the cases.

Fixes #382.
2019-01-20 09:33:28 +01:00
Florian CUNY
dc61f06554 Added IslandSpawnCommand
#382
2019-01-20 09:22:46 +01:00
Florian CUNY
7525bc05e2 Added IslandsManager#spawnTeleport() and made #getSpawn(World) return an optional 2019-01-20 09:22:26 +01:00
Florian CUNY
7cbb0d6a87 Added PlayersManager#getPlayers()
#392
2019-01-20 09:01:38 +01:00
Florian CUNY
aad36c100f Added IslandsManager#getIslands()
#392
2019-01-20 08:57:19 +01:00
Florian CUNY
3f5736f555 Improved javadoc 2019-01-20 08:52:57 +01:00
tastybento
95b40841ba Adds all worlds to map in IWM
Fixes Multiverse world registration
2019-01-19 11:22:26 -08:00
tastybento
2df5d2a916 Added FlagAdapterTest and fixed deprecation 2019-01-19 08:30:42 -08:00
Florian CUNY
5ce8362fd5 Added addons metrics chart + added AddonDescription#isMetrics so that addons need to explicitely opt in
Deprecated AddonDescription.Builder#Builder(String, String) and AddonDescription.Builder#version(String).
Added AddonDescription.Builder#Builder(String, String, String).
Updated tests
2019-01-18 22:06:06 +01:00
Florian CUNY
0f5b5b5693 Fixed IslandResetCommand tests 2019-01-18 21:24:46 +01:00
Florian CUNY
a29bcd457e Updated FlagSerializers to use FlagsManager#getFlag(String) 2019-01-18 17:40:55 +01:00
Florian CUNY
c5f561c816 Reduced cognitive complexity in IslandResetCommand 2019-01-18 17:40:23 +01:00
Florian CUNY
755433e108 Added islands created count metrics
Made BStats class public
Added BentoBox#getMetrics()
2019-01-18 15:12:06 +01:00
Florian CUNY
7153378f5e Made LockAndBanListener extend FlagListener 2019-01-18 15:00:05 +01:00
Florian CUNY
a392dbc8b3 Fixed minor code smell in AddonClassLoader 2019-01-18 14:59:38 +01:00
Florian CUNY
dfe7fc27e5 Fixed code smell in AddonClassLoader 2019-01-18 12:32:32 +01:00
Florian CUNY
4d9a65151f Fixed code smells & added some more NonNull/Nullable annotations 2019-01-18 12:10:47 +01:00
Florian CUNY
d57f9544f3 Added NonNull/Nullable annotations to IslandsManager and IslandCache 2019-01-18 11:33:29 +01:00
Florian CUNY
d86b605057 Added Flags#POTION_THROWING
#468
2019-01-18 11:08:53 +01:00
Florian CUNY
3f9c917a2f Added IslandWorldManager#getWorlds()
#470
2019-01-17 20:49:54 +01:00
tastybento
ddb3fd63e6 Fix code smells. 2019-01-16 13:43:49 -08:00
Florian CUNY
9497066f44
Merge pull request #471 from BentoBoxWorld/locale-override
Adds ability for gamemodes to override locale references
2019-01-16 19:03:25 +01:00
Florian CUNY
eeda960d42
Use #getEnabledAddons() in AddonsManager#getGameModeAddons() 2019-01-16 18:53:11 +01:00
Florian CUNY
f381301b25
Added javadoc tags and NonNull/Nullable in GameModeAddon 2019-01-16 18:51:37 +01:00
tastybento
7d08a0db5a Enable main player and admin command declaration
See https://github.com/BentoBoxWorld/BentoBox/issues/448
2019-01-15 19:33:53 -08:00
tastybento
49d2365f85 Removed unneeded commented out code 2019-01-15 15:46:59 -08:00
tastybento
016c502b66 Added explicit test for addon locale override 2019-01-15 15:43:37 -08:00
tastybento
0636532bb4 Fixed code and tests.
Test failures in the User test were right - I had a bug in my code.
2019-01-15 15:23:17 -08:00
tastybento
e56928bef1 Adds ability for gamemodes to override locale references
The default BentoBox locale text is geared towards island games. When
writing the SkyGrid addon I am using the standard protection flags, but
I need to reference a "protection area" instead of an "island". This
enables me to do that by having the same reference but prefixed in the
locale file by the name of the addon (in lower case), as written in the
addon's addon.yml.
2019-01-15 13:23:36 -08:00
tastybento
3a9e969a86 Added JavaDoc comments 2019-01-15 11:47:10 -08:00
tastybento
2fa60d0e2d Added option to not paste a schem when creating a new island 2019-01-15 11:46:09 -08:00
tastybento
b48cc89f73 Added flag default setting for specific world. 2019-01-15 11:45:49 -08:00
tastybento
61481dee44 Added null protection against null world values 2019-01-15 08:33:14 -08:00
Florian CUNY
62d69b1022 Added NonNull/Nullable annotations to FlagListener, deprecated FlagListener#id(String), added FlagListener#getFlag(String) 2019-01-14 15:49:04 +01:00
Florian CUNY
80263d9751 Removed commented-out code in Clipboard 2019-01-14 15:48:16 +01:00
Florian CUNY
7fd6237280
Added comments to DeleteIslandChunks
I've also added a sonar suppresswarning to avoid the "issues" when calling regenerateChunk
2019-01-14 15:15:55 +01:00
tastybento
044c67ea28 Fixes bug with concurrent saving of files to the database.
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.
2019-01-13 22:17:36 -08:00
tastybento
5ed86ea271 Adds defensive code to avoid NPE with hiding clipboard 2019-01-13 15:57:45 -08:00
tastybento
fa8c0ec0c8 Implements async superflat cleaning
Should avoid crashes when there's a lot of cleaning to do.

https://github.com/BentoBoxWorld/BentoBox/issues/431
2019-01-13 15:53:12 -08:00
tastybento
ad3d044e88 Merge branch 'develop' of https://github.com/BentoBoxWorld/bentobox.git into develop 2019-01-13 14:19:31 -08:00
tastybento
96639792b8 Fixed random test failures.
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.
2019-01-13 14:19:23 -08:00
Florian CUNY
8260728e9b Added NonNull/Nullable annotations to CommandsManager 2019-01-13 18:41:38 +01:00
Florian CUNY
a66bc90746 Fixed code smells 2019-01-13 18:27:14 +01:00
tastybento
5f990b9103 Fix for PhysicalInteractionListenerTest
Sometimes would randomly fail. This should fix it. (He says...)
2019-01-13 09:07:05 -08:00
tastybento
6425938107 Merge branch 'develop' of https://github.com/BentoBoxWorld/bentobox.git into develop 2019-01-13 08:53:06 -08:00
tastybento
8a1b487a58 Fix test cases for ban commands. 2019-01-13 08:52:57 -08:00
Florian CUNY
270e14167e Made IslandTeamInviteAcceptCommand require confirmation
Closes #464.
2019-01-13 17:35:32 +01:00
tastybento
d8eab7e397 Adds deleteID method to MariaDB 2019-01-13 08:14:08 -08:00
Florian CUNY
35883435e5 Merge branch 'develop' into IslandDelete 2019-01-13 10:33:50 +01:00
Florian CUNY
6f4d3aeaed Added some more javadoc 2019-01-13 10:28:49 +01:00
Florian CUNY
9cf63611e4 Added some NonNull/Nullable in database code 2019-01-13 10:27:36 +01:00
Florian CUNY
dc7d5b40f2 Renamed DeletedIslandDO to IslandDeletion 2019-01-13 10:21:06 +01:00
Florian CUNY
0f253c35ef Renamed IslandDeleteManager to IslandDeletionManager 2019-01-13 10:09:35 +01:00
Florian CUNY
165a70aec9 Added MariaDB minimum version in config comment 2019-01-13 10:06:32 +01:00
Florian CUNY
348704f3d9 Added javadoc and updated Settings for MARIADB
@barpec12
2019-01-13 10:05:24 +01:00
tastybento
7854187448 Added async saving to YAML and MYSQL
Both seem to work fine, but probably need more real-world testing.
2019-01-12 18:18:22 -08:00
tastybento
501c3257ed Island delete enhancements
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.
2019-01-12 17:12:30 -08:00
tastybento
7a4ca8b48d Fixed JavaDoc error 2019-01-12 17:04:53 -08:00
Florian CUNY
a1b6f97a1a
Merge pull request #460 from barpec12/master
MariaDB 10.2.3+ support.
2019-01-12 22:57:01 +01:00
tastybento
7c1e195eaf Switch to timer-based chunk deletion 2019-01-12 10:31:25 -08:00
Florian CUNY
457b296372 Fixed code smells 2019-01-12 18:29:20 +01:00
Florian CUNY
76d4edd19f Added NonNull/Nullable to FlagsManager; deprecated getFlagById(String)
Added getFlag(String) that will return an optional instead.
2019-01-12 18:03:19 +01:00
Florian CUNY
12619e79db Improved links in LogEntry's javadoc 2019-01-12 18:02:32 +01:00
Florian CUNY
c783fa8e16 Started to add Nullable/NonNull annotations 2019-01-12 17:30:47 +01:00
barpec12
961ca02fa1 MariaDB 10.2.3+ support. 2019-01-10 16:54:11 +01:00
tastybento
b51178518a Fixes admin setowner and info commands for team members
https://github.com/BentoBoxWorld/BentoBox/issues/452
2019-01-07 21:37:37 -08:00
tastybento
cd4f0c2561 Fixes Invincible Visitors Settings GUI bug
https://github.com/BentoBoxWorld/BentoBox/issues/450

Added enhanced test to this class too.
2019-01-07 21:03:02 -08:00
tastybento
8a63bf80f9 Added defensive code to avoid infinite loop
CleanSuperFlat can infinite loop if the generator isn't working.
2019-01-07 20:43:37 -08:00
tastybento
dc8b672286 Added check against duplicate Island UUIDs
May relate to https://github.com/BentoBoxWorld/BentoBox/issues/447
2019-01-07 08:03:38 -08:00
tastybento
acb6cd5650 Added defensive null checking code to DB
Relates to https://github.com/BentoBoxWorld/BentoBox/issues/447
2019-01-07 07:46:59 -08:00
Florian CUNY
9eec14ffb3
Merge pull request #445 from BONNe/patch-1
Unnecessary getPermissionPrefix()
2019-01-07 06:25:57 +01:00
BONNe
dbbfdaea7f
Unnecessary getPermissionPrefix()
Kryniowesegryderiusz <3 in Support noticed that Admin tp command has double bskyblock.bskyblock, and I found reason in code.
This getPermissionPrefix() is not necessary, as setPermission() will also add prefix.
2019-01-06 23:32:15 +02:00
Florian CUNY
fe101a6e01 Added "UNOWNED" log to Island 2019-01-06 11:46:25 +01:00
Florian CUNY
d7fbfdb784 Added Island#setRank(UUID, int) 2019-01-06 11:28:37 +01:00
Florian CUNY
55afa166cd Added some defensive code in some Island's methods 2019-01-06 11:03:32 +01:00
Florian CUNY
8da1dc1590 Ignoring IslandBan- & IslandUnbanCommand tests for now
I could not get them to work again
2019-01-05 10:58:32 +01:00
Florian CUNY
9387f65dbf Added IslandBanEvent and IslandUnbanEvent (cancellable) 2019-01-05 10:23:53 +01:00
Florian CUNY
e3574e5ee3 Added AdminSetspawnCommand
#441
2019-01-04 21:33:17 +01:00
Florian CUNY
85fac3112f Improved IslandsManager#setSpawn(Island) + Javadoc
Added some checks to improve the handling.
2019-01-04 21:33:02 +01:00
Florian CUNY
185082f261 Improved Island#isSpawn() and Island#setSpawn() Javadoc + improved handling of Island#setSpawn() and added logging to the Island history 2019-01-04 21:32:21 +01:00
Florian CUNY
f75de015a2 Started working on AddonsManagerTest 2019-01-04 21:31:22 +01:00
Florian CUNY
c78efb8736 Fixed and improved error handling when loading addons
Fixes #440

* Added Addon#getState()
* Added LOADED in Addon.State
* Added AddonsManager#getLoadedAddons() and AddonsManager#getEnabledAddons()
* Improved the loading addons "workflow"
2019-01-04 11:33:35 +01:00
Florian CUNY
2b0ccb4099 Release 1.0 ( 🎉 ) 2019-01-03 20:53:18 +01:00
Florian CUNY
967ebccae1 Fixed 'banCooldown' config comment 2019-01-03 20:47:54 +01:00
Florian CUNY
ef96a01fc8 Fixed bug with the YAML Database when saving config containing hidden ConfigEntry 2019-01-03 20:45:51 +01:00
Florian CUNY
74a28963b4 Improved the "aborting bentobox enabling" message 2019-01-03 20:35:51 +01:00
Florian CUNY
d2f10d883d Set enableAutoOwnershipTransfer to false 2019-01-03 20:26:26 +01:00
Florian CUNY
81435c57f5 Delete GameWorld.puml 2019-01-03 20:26:10 +01:00
tastybento
d13ae470d5 Removed unused imports. 2019-01-03 10:25:03 -08:00
tastybento
2713f58ac5 Fix to fire Island events after an island is created.
Events were firing too early before the island had been fully pasted
async.
2019-01-03 10:24:50 -08:00
tastybento
8452a080f7 Merge branch 'develop' of https://github.com/BentoBoxWorld/bentobox.git into develop 2019-01-03 09:47:04 -08:00
tastybento
5351b162c5 Moved obsidian scooping to be a world flag in settings 2019-01-03 09:46:56 -08:00
Florian CUNY
000d556c7f Improved the "successfully-loaded" message 2019-01-03 18:12:32 +01:00
Florian CUNY
4b4ee1646e Added '@a' to AdminResetsResetCommand so that we can reset everyone 2019-01-03 17:43:00 +01:00
Florian CUNY
9545c74833 Removed since Javadoc tags 2019-01-03 17:28:18 +01:00
Florian CUNY
a5831947c2 Made automated ownership transfer settings hidden for now 2019-01-03 17:22:20 +01:00
Florian CUNY
4a6a109fa4 Added ConfigEntry#hidden() 2019-01-03 17:22:05 +01:00
Florian CUNY
9f676636e0 Fixed some code smells 2019-01-03 17:09:27 +01:00
Florian CUNY
160749c065 Merge branch 'develop' into 167-automated-island-ownership-transfer 2019-01-03 16:59:13 +01:00
Florian CUNY
2e2c7c69de Removed deprecated classes 2019-01-03 16:51:57 +01:00
Florian CUNY
bde91b7784 Fixed commands being registered with their main label as fallbackPrefix
This has been replaced by "bentobox" or the addon's name.
2019-01-03 16:40:51 +01:00
Florian CUNY
708c014d14 Moved allowObsidianScooping to WorldSettings and renamed ObsidianToLava to ObsidianScoopingListener
#432
2019-01-03 16:30:36 +01:00
Florian CUNY
915cd6f293 Made 'general.rank-command' experimental in config
#432
2019-01-03 16:19:08 +01:00
Florian CUNY
c549d969a4 Removed 'island.custom-ranks' from config
#432
2019-01-03 16:17:01 +01:00
Florian CUNY
369600e4d5 Renamed Island#addToBanList() and Island#removeFromBanList() + added log in them
They respectively got renamed to Island#ban() and Island#unban(). They now require the UUID of an issuer (which can be null, but it's better to provide one)
2019-01-03 15:59:24 +01:00
Florian CUNY
fa3dbc5519 Made LogEntry use the Builder pattern 2019-01-03 13:51:46 +01:00
Florian CUNY
245062b36e Removed the offline message "TODO" in User
Most of it will be handled by the Island history
2019-01-03 13:37:54 +01:00
Florian CUNY
0b62c7cf76 Made LogEntry#data a Map<String, Object> 2019-01-03 13:33:46 +01:00
Florian CUNY
265afaf345 Added history to island and Island#log(LogEntry) 2019-01-03 13:26:20 +01:00
Florian CUNY
a638b09ce3 Added LogEntry and its database adapter 2019-01-03 13:25:52 +01:00
tastybento
96bf67eb19 Added generic reload command for addons to use
This command just runs the onReload method so that individual addons can
reload their stuff.
2019-01-02 15:40:49 -08:00
Florian CUNY
396425a52d Started implementing automated island ownership transfer
#167
2019-01-02 23:02:52 +01:00
Florian CUNY
4ae36ef8e0 Fixed Island#getMemberSet() Javadoc 2019-01-02 23:01:39 +01:00
tastybento
b8312db655 Fixes double home teleport when resetting island. 2019-01-02 10:55:11 -08:00
tastybento
5f193b19f5 Merge remote-tracking branch 'origin/develop' into async-paste2 2019-01-02 10:44:50 -08:00
tastybento
81a0b3290f Adjustment to English locale file for addon reloading
https://github.com/BentoBoxWorld/BentoBox/issues/370
2019-01-02 10:22:39 -08:00
Florian CUNY
be91e137a8 Implemented Addons reloading
Relates (a bit) to #370
2019-01-02 17:49:37 +01:00
Florian CUNY
c7a85c2b5a Fixed AddonDescription to use a valid Builder pattern
AddonDescriptionBuilder has been renamed to AddonDescription.Builder ; and there is no longer public constructors in this class.

This change is obviously API breaking, but it's relatively "internal", so hopefully people didn't use it.
2019-01-02 17:28:11 +01:00