Commit Graph

439 Commits

Author SHA1 Message Date
Tastybento
c916bbf827 Automated code cleanup.
Removes spaces, adds {} to if statements, etc.
2018-02-08 20:08:46 -08:00
Tastybento
98b49ea37a Fixed bug where if statement had a ; in it 2018-02-08 20:06:00 -08:00
Tastybento
5314f3618a Removed unused imports. 2018-02-07 21:33:55 -08:00
Tastybento
b253ff5c64 Code cleanup. 2018-02-07 21:33:36 -08:00
Tastybento
fc8876cf80 Fixed return values to match pass/fail. 2018-02-07 21:13:32 -08:00
Tastybento
2be005acb1 Removed vulnerabilities
Mainly leftover raw stacktrace prints in exceptions instead of propper
logging statements.
2018-02-07 21:11:23 -08:00
Tastybento
b833b17d22 Helped secure the prepared statement 2018-02-07 20:43:13 -08:00
Tastybento
41dd491f05 Code cleanup. 2018-02-07 19:44:10 -08:00
Tastybento
1d5086531d Removed performance hit of logging
Since Java 8, we can use Supplier for logger, which will be evaluated
lazily.

In general, the debug stuff should be removed when we have more
stability.
2018-02-07 19:39:00 -08:00
Tastybento
29d09922b9 Switched to use Files.delete
When File.delete fails, this boolean method simply returns false with no
indication of the cause. On the other hand, when Files.delete fails,
this void method returns one of a series of exception types to better
indicate the cause of the failure. More information is generally better
in a debugging situation, so I'll use this option.
2018-02-07 19:33:59 -08:00
Tastybento
08b2e2579b Reverted to using an explicit throw of all exceptions 2018-02-07 19:28:29 -08:00
Tastybento
e4fbc6fab1 Simplified code, no need for internal variable. 2018-02-07 19:16:05 -08:00
Tastybento
3f35afc76a Close is handled automatically. 2018-02-07 19:13:40 -08:00
Tastybento
7e7b259531 Converted Map to EnumMap
When all the keys of a Map are values from the same enum, the Map can be
replaced with an EnumMap, which can be much more efficient than other
sets because the underlying data structure is a simple array.
2018-02-07 19:12:23 -08:00
Florian CUNY
7b55ca70b2 Fixed some Flags and added a security check in FlagsManager
...to avoid duplicates of Listeners
2018-02-07 13:41:37 +01:00
Florian CUNY
f33fa2477a Use .equals() in #isBanned(UUID) in Island 2018-02-07 13:33:37 +01:00
Florian CUNY
12cac6b3aa Minor adjustments to ranks-related methods in Island 2018-02-07 13:29:19 +01:00
Florian CUNY
293ab2ccf9 Added default values to Settings 2018-02-07 13:16:09 +01:00
Tastybento
e5a87ccf7a Code cleanup and bug fixing.
This just cleans up a lot of code that could cause confusion or was
actually wrong.
2018-02-06 23:04:09 -08:00
Tastybento
1db21c10da Fixed bug with help that I introduced.
Added specific convenience showHelp() method to Composite command.
2018-02-06 22:45:21 -08:00
Tastybento
61f0a6f997 Made homeTeleport void because it does not return anything useful 2018-02-06 22:02:14 -08:00
Tastybento
ad50b04177 Removed unneeded method. 2018-02-06 21:59:15 -08:00
Tastybento
eefcd48c7c Fixed return values for execute. 2018-02-06 21:57:45 -08:00
Tastybento
af5c7e472e Fixed execute return values. 2018-02-06 21:48:59 -08:00
Tastybento
a9373a3eea Fixed return values - false = error 2018-02-06 21:46:59 -08:00
Tastybento
00470b1fc8 Return false if error. 2018-02-06 21:45:10 -08:00
Tastybento
3e2d2ec2d6 Return false if unsuccessful due to no island. 2018-02-06 21:44:40 -08:00
Tastybento
219d1e66ab Fixed brackets. 2018-02-06 21:43:31 -08:00
Tastybento
f4c7a3fe45 Made command return false if unsuccessful. 2018-02-06 21:40:29 -08:00
Tastybento
81b0543f25 Added missing break statement to switch. 2018-02-06 21:34:48 -08:00
Tastybento
574febb327 Added missing break statement in switch. 2018-02-06 21:34:20 -08:00
Tastybento
2e89a2654f Added more try-with-resource to auto-close prepared statement 2018-02-06 21:33:05 -08:00
Tastybento
fdc7a62990 Fixed issue where Optional was not being explicitly checked before get. 2018-02-06 21:31:59 -08:00
Tastybento
2d64070d3f Avoided setting static variable in non-static method. 2018-02-06 21:31:19 -08:00
Tastybento
5a5ae2d077 Used Java standard ordering of words 2018-02-06 21:30:56 -08:00
Tastybento
ed622dc9c0 Fixed switch break bug. 2018-02-06 21:30:35 -08:00
tastybento
bb404380f5 Replaced raw stack trace dumps with helpful error messages. 2018-02-06 16:37:34 -08:00
tastybento
aac17990bc Made description private. 2018-02-06 16:09:49 -08:00
tastybento
8b7d92d8e6 Added better error message for exception when loading addons. 2018-02-06 16:06:04 -08:00
tastybento
04a4394752 Make addon non-public and provide getter to address minor vulnerability. 2018-02-06 16:04:22 -08:00
tastybento
7e2f8052da Improved exception handling error messages. 2018-02-06 15:59:42 -08:00
tastybento
1e920825ef Added context to raw stack trace dump after exception. 2018-02-06 15:55:31 -08:00
tastybento
672d43fb67 Fixed unnecessary if statement and removed redundant code. 2018-02-06 14:11:10 -08:00
tastybento
56ff9f62e4 Used try-with-resources to ensure jar is closed. 2018-02-06 14:07:35 -08:00
tastybento
28b88763e6 Changed Optional map to ifPresent because return value is not needed. 2018-02-06 14:05:48 -08:00
tastybento
8743ac50ef Removed duplicate sub-expression in if statement. 2018-02-06 14:02:58 -08:00
tastybento
941d9d3dc5 Removed if/else change because it is not required. 2018-02-06 14:01:52 -08:00
tastybento
d2098c3dbe Check if Optional click handler exists before getting it. 2018-02-06 13:59:23 -08:00
tastybento
2c1d52761f Cast operand to double. 2018-02-06 13:54:23 -08:00
tastybento
06e61d858c Fixed a lot of unclosed prepared statements, connections and resultset 2018-02-06 13:52:25 -08:00
tastybento
84d36a1a24 Simplified some logic. 2018-02-06 13:35:17 -08:00
tastybento
f7c4e5a988 Added null checks. 2018-02-06 13:33:08 -08:00
tastybento
1ddf706c68 Bug fixes to avoid NPE's and Optional gets without isPresent 2018-02-06 13:21:08 -08:00
Tastybento
ace6294e23 Came full circle - kept Flags as final statics
This approach simulates an enum, but one that can be extended by others
to add custom flags. I added a handy values() method that uses
reflection to provide a list of all the flags in the class.

See TestBSkyBlock.java test classes for the tests of the default flag
registration and the custom flag registration.
2018-02-05 23:53:07 -08:00
tastybento
be5404e9c2 Added Setting type to flags.
Flags can be Protection type or Setting Type.

Still needs testing for PVP.
2018-02-05 17:39:04 -08:00
tastybento
645b4eb610 Implements flags as enum so flags are protected. 2018-02-05 14:51:03 -08:00
tastybento
ffbf938a32 WIP trying out moving flags into flag manager. 2018-02-05 14:30:35 -08:00
tastybento
812594783e Made Adapter its own annotation. 2018-02-05 11:35:50 -08:00
Tastybento
26956d8386 Fixed missing locale text for invites.
Fixed config settings for teams.
2018-02-04 21:48:34 -08:00
Tastybento
fa1ccd0c99 Fixed bugs with MySQL saving and loading.
Added the adapter annotation to MySQL and fixed issues with empty
hashmaps causing null errors.

Added a flag serializer adapter for the protection flags so that flags
are saved and loaded correctly.

Renamed the Adapter notation class to be clearer about what it is doing.
2018-02-04 12:53:17 -08:00
Tastybento
83d0848429 Fixed bugs with protection.
Added serializer adapter for the Flags hashmap in Island.

Teams don't work. Need to work out why.
PVP doesn't work correctly. It allows members to hit visitors anytime,
but visitors can only hit others if PVP is off. This isn't how it is
supposed to work!
2018-02-03 20:42:12 -08:00
Tastybento
6c2078fbec Added event tests.
Fixed bug with user being retained after a checkIsland.
2018-02-03 19:25:53 -08:00
Tastybento
c648409858 Reworked code so it can be tested using automated unit tests.
See TestBSkyBlock.java class for protection tests.

More to come!
2018-02-03 15:26:13 -08:00
Tastybento
df0ecca217 Added dependency injection (DI) for flag listeners for plugin.
This is required for automated testing (can't use static getInstance). I
really need automated testing of the protection classes, so even though
this adds a parameter to the classes, it's important to have it right
now.
2018-02-03 11:54:33 -08:00
Tastybento
1427f16bec Merge branch 'ranks' of https://github.com/tastybento/bskyblock.git into ranks 2018-02-02 08:22:00 -08:00
Tastybento
0d645600fc Fixed bugs with start up and flag registration.
Protection does not work yet. Still need more debugging.
2018-02-02 08:18:56 -08:00
Florian CUNY
3d7b1bc647 Renamed PVP and Item Drop/pickup related flags
Also assigned the ItemDropPickUpListener() to the related events
2018-02-02 15:29:24 +01:00
Florian CUNY
5293d647c0 Removed duplicate listeners in Flags 2018-02-02 15:22:37 +01:00
Tastybento
72c99656cc Added the protection listeners. Took all day!
Generally these are very easy to understand. They use an abstract class
for common code.

I have not tested these in-game. I would like to see if I can create
some test classes but it may not be possible because of the static
BSkyBlock calls.
2018-02-01 20:30:57 -08:00
tastybento
4fe94bee3b Finished up the place and break block listeners.
There's a lot more that needs to be checked in these listeners! I moved
some common methods into the abstract class because they will be used
again and again by other listeners.

Added an anvil listener.

Added the flags. They were from ASkyBlock so may have name changes.
2018-01-31 15:46:38 -08:00
tastybento
5b087c83e7 Fixed comment. 2018-01-30 17:00:09 -08:00
tastybento
177023f314 Added code to support protection flag listeners.
Made getIslandsAt() Optional to enable better code structures in the
listeners.

Created an abstract class to simplify flag protection listeners.

Added default setting for flags that will be able to be set by config.
This default is used for any space in the worlds not occupied by an
island.
2018-01-30 16:59:10 -08:00
Tastybento
f7b6898559 Added protection methods. 2018-01-28 20:44:57 -08:00
Tastybento
ba62989788 Shifted some constants around. 2018-01-28 18:13:45 -08:00
Tastybento
417f767705 Added a Ranks Manager 2018-01-28 12:47:17 -08:00
Tastybento
eec4e99172 Added ranks to island members. More to do! 2018-01-28 11:48:54 -08:00
Tastybento
f1072e5984 Fixed flag optional aspect. 2018-01-28 09:47:51 -08:00
Florian CUNY
1d5b0ab8dd API Improvements on PanelItem and Flags
Their respective builders now have default values
Flags get automatically registered once built
Added some convenience methods
2018-01-28 13:31:07 +01:00
Tastybento
2b434bf93a Added ability for panel description to be just a string. 2018-01-27 15:58:15 -08:00
Tastybento
970711ca63 Merge branch 'develop' of https://github.com/tastybento/bskyblock.git into develop 2018-01-27 15:48:53 -08:00
Tastybento
67e05955f8 Made skyblock sky again. The sea water level was being set. 2018-01-27 15:48:44 -08:00
Florian CUNY
72c862c0d5 Starting to implement some Flags to test the API 2018-01-27 17:04:08 +01:00
Florian CUNY
6c08763cbb Made PanelItemBuilder methods' name suit the Builder style 2018-01-27 17:03:30 +01:00
Florian CUNY
9cc9518bc3 Fixed new-island.signs.line* locale entries 2018-01-27 16:47:30 +01:00
Florian CUNY
8b636a8ee3 Minor code quality fixes 2018-01-27 16:39:02 +01:00
Tastybento
475f9b1416 Made changes to fix events and support the FAWE addon. 2018-01-25 22:19:33 -08:00
Tastybento
9ce1dbf592 Added team kick and leave commands. Need full testing. 2018-01-24 20:49:08 -08:00
Tastybento
f6ca7f7866 Fixed subcommand aliases. Added admin tp command.
While writing the admin tp command, I realized that subcommand aliases
were not working. Also, it was not possible to tell what alias had been
used for a command. I added that capability. i.e., if the alias is used,
then the label of that command is set to the alias.
2018-01-21 12:58:35 -08:00
Tastybento
c3c0a87dbb Added block search when making a new island. Fixed sign text.
When finding a spot for a new island, the algorithm will ensure the
island location is on the grid and check around for any blocks that may
be there already. If they exist, then they will be added as unowned
islands to the database.
The sign text was not using the correct locale tags.
2018-01-20 10:30:26 -08:00
tastybento
1b1e30c125
Merge pull request #125 from tastybento/config-api-v2
Submitting a modular and automatic Config API
2018-01-08 11:27:01 -08:00
Tastybento
09b9d4dd49 Now uses the official config.yml in the BSkyBlock data folder.
Saves a backup of the config after validation in the database so it can
be checked.

To Be Done: Validation of the config when it is loaded against the
database version.
2018-01-07 14:43:37 -08:00
Tastybento
16bcb90127 Added saveSettings and loadSettings methods.
These methods are used specifically for loading and saving settings
classes (those use the ISettings interface). The saving saves a copy of
any settings class in the database for future reference. The loading
loads a copy from the database if it exists and checks if any fields are
different from the config file. If they are different and some action
needs to be taken, the action is taken. This is still be to be coded.

In other news, the saving of arrays is unsupported and currently should
be avoided. Use Lists or Sets instead.
2018-01-07 11:56:43 -08:00
Tastybento
2765e5f3ab Fixed code according to comments on last commit.
Reworked locales so they use a nice and pretty folder structure.

Added the ability to define adapters to serialize certain data
structures. Added the PotionType list adapter.

Saving and loading of configs basically works. Known issues:

1. The config.yml is saved and loaded to/from the database folder
2. More error handling is required for the config loading. e.g., a list
value with only one value in it is not read as a list. This could get
tricky.
3. Comments are not saved (yet)
2018-01-06 19:40:25 -08:00
Tastybento
92af75e602 Converted to using the Settings loaded by the database handler.
Removed a lot of static references.

Constants have their own class.
2018-01-06 15:23:01 -08:00
Tastybento
2d447afa88 Added annotation handling to the flatfile database handler.
Currently it handles the @ConfigEntry path and specificTo fields.

Experimental: There is a class called Setting2.java. It has an
annotation that defines its filename as config.yml. Currently, it is
using the database folder as its location, but it could be the plugin's
datafolder in the future. By placing the config.yml file in the database
folder, it will be read. See the code in BSkyBlock onEnable() for how
that is done.

The main differences between Settings2.java and Settings.java are that
all fields are NOT static and therefore it is an object and uses getters
and setters. This is because it is a JavaBean. In other code, settings
should be queried using this config object.
2018-01-05 19:58:08 -08:00
Tastybento
478968dac7 Extended the config api annotations.
Added the concept of an adapter class that would convert the YAML input
to the setting type and value.
I included an example adapter class for Enum.

I fixed a number of the settings to match the config/yml or the other
way around.

After compiling and running, do /bsb reload to see the result.

This is a WIP and obviously not finished.
2018-01-04 19:58:04 -08:00
Florian CUNY
01dc515d57 Merge branch 'develop' of https://github.com/tastybento/bskyblock into develop 2018-01-04 20:35:12 +01:00
Florian CUNY
1430eda5ce ConfigAPI - Implementing the basic functionnalities
a lot of unused/useless Settings has been removed
Settings class has been moved to the main package, because the config package would then only contain it

I need feedback about it
2018-01-04 16:57:12 +01:00
Florian CUNY
b7f1d68bcf Store the locale files in their own "parent" folder, so it looks nicer, instead of having a prefix
also renamed BSBLocale#add() to BSBLocale#merge()
and renamed the locale files as well
2018-01-04 14:14:18 +01:00
Tastybento
4aaab9f69f Added a depth limit to the help command. 2018-01-03 21:37:37 -08:00
Tastybento
b324e7d0e0 Fixed teleport to island message. 2018-01-03 20:43:58 -08:00
Florian CUNY
d56326feb0 Made /is about easier to read 2018-01-03 22:11:55 +01:00
Florian CUNY
afa292986d Removed the cache from BSBLocale
because YAMLConfiguration is a cache itself.
2018-01-03 21:57:32 +01:00
Florian CUNY
62480d7249 Fixed NPE in User when doing #getTranslation(reference, ...variables)
it was due to the null value possibly returned by the LocalesManager#get(user, reference) method when nothing has been found, leading the variables replacement to cause a NPE.

User#getTranslation(reference, ...variables) now does the check and return the reference if the translation found equals null BEFORE trying to replace variables.
User#getTranslationOrNothing(reference, ...variables) works the same as before, it just checks if the returned translation is the same than the reference (therefore it returns the blank String), otherwise it sends the translation.
2018-01-03 21:41:30 +01:00
Florian CUNY
f8c1dba503 Added localized message for "Creating your island" 2018-01-03 21:19:48 +01:00
Florian CUNY
c28853e301 Load ResetnameCommand before SethomeCommand
just because it looks nicer in the /is help 😛
2018-01-03 21:16:25 +01:00
Florian CUNY
351dfac3cd Fixed /is create creating an island even when the player already had one 2018-01-03 21:15:30 +01:00
Florian CUNY
7acc8d5401 Minor changes in CompositeCommand
Notably improved the #isPlayer(user) condition
2018-01-03 21:15:01 +01:00
Florian CUNY
b8dcc98a0c Removed useless accessibility keywords in BSBCommand interface 2018-01-03 21:14:11 +01:00
Florian CUNY
34f291b17f Minor changes in User and IslandBuilder
Mainly spacing but also optimized the User#hasPermission() condition
2018-01-03 21:06:28 +01:00
Florian CUNY
c6ea8ff4c4 Made LocalesManager final (so it cannot be extended)
also added authors :)
2018-01-03 20:51:20 +01:00
Tastybento
7e9a287143 Added help text top and bottom
Fixed top-level-command weirdness. / is required in getUsage().
2018-01-03 08:21:49 -08:00
Tastybento
d86c763716 Fixed island multihome to match new syntax.
Renamed island multihome to start with "Custom" to make it clearer. This
class is as much an example as anything of how to override the default
help.

Renamed my author tag to be tastybento. :-)
2018-01-03 07:56:10 -08:00
Florian CUNY
a0cbb451fa Fixed IslandCommand description not being a valid reference 2018-01-03 16:12:08 +01:00
Florian CUNY
44742d8946 Made use of "commands.help.syntax" for help
This is a more flexible and natural way to provide the display for the help, especially for the colors.

I had to remove the "/" from the usage though. If you think it should be there, re-add it but remove it from the locale then.
2018-01-03 16:11:45 +01:00
Florian CUNY
6536ff58cc Fixed user#getTranslation() not replacing variables 2018-01-03 16:09:54 +01:00
Tastybento
5aa3594f42 The color update!
Added colors to help text.
2018-01-02 19:36:53 -08:00
Tastybento
30fb087777 Implemented locales that include addons.
This is a first working version and can probably be improved.

Firstly, the plugin will save any BSkyBlock language files to the locale
folder from the BSkyBlock jar if and only if the locale folder does not
exist. It will then do the same for any addons as they are loaded. Addon
language files are prefixed with their addon name to keep them separate
and recongnizable.

Then the plugin loads the language files and merges common languages
together into a YAMLConfiguration that is held in memory. The combined
config is never saved out to the file system.

If a request is made for a particular reference to a language that does
not exist or if the reference does not exist, then the default language
is tried.
2018-01-01 18:32:59 -08:00
Tastybento
32794a5d3f Added comments for clarity. 2018-01-01 14:17:47 -08:00
Tastybento
037bf04836 Added methods to allow shared classes across multiple addons.
The original code did not allow addons to talk to each other in any way.
After trying loads of things with class path I studied the bukkit code
and saw that they override the findClass method in URLClassLoader. This
enables addons to find classes in other addons. All that was then needed
was a map in the AddonsManager of classes that this manager knows about
and a getter and setter method for them. After all that (3 hours) it
works.
2018-01-01 11:40:25 -08:00
Florian CUNY
df5434930c Renamed SettingChangeEvent to FlagChangeEvent and removed references to SettingsFlag 2018-01-01 01:53:03 +01:00
Florian CUNY
22ad8285a5 Replaced SettingsFlag references in config-related classes 2018-01-01 01:52:32 +01:00
Florian CUNY
ae0dc7c538 Implemented basic Flags API
Removed Island's SettingsFlags
Fixed Island#toggleFlag()
2018-01-01 01:41:19 +01:00
Florian CUNY
1d3c82d1c7 Minor change in PanelListenerManager to use Optional#ifPresent() 2018-01-01 01:18:43 +01:00
Tastybento
bfcbd44478 Minor changes around Optional. 2017-12-31 16:12:53 -08:00
Florian CUNY
131a8affca PanelsAPI - Fixed ambiguous logic with the cancellation of the clickevent 2018-01-01 00:55:53 +01:00
Florian CUNY
5ea46aea29 Removed useless accessibility keywords in Interfaces 2018-01-01 00:43:32 +01:00
Tastybento
b03d4552fd Added addons manager to BSKyBlock.class 2017-12-31 15:31:08 -08:00
Tastybento
002c54ef21 Fixed issues while implementing the warps addon. 2017-12-31 14:08:15 -08:00
Tastybento
5b6e3cec7e Fixed database bugs.
Made the code more robust by using isAssignableBy() to check super
classes.
2017-12-31 12:51:57 -08:00
Tastybento
109c0edca3 Panel additions or changes.
By working on the Warp addon I made changes to the Panel API.
2017-12-30 21:14:58 -08:00
Tastybento
06dec42029 Moved a method to use User instead of Player. 2017-12-30 17:28:25 -08:00
Tastybento
1f92c2b60e Added more around the Panel API. 2017-12-30 17:13:20 -08:00
Tastybento
1f57e1eb0b Fixed return type of getBSkyBlock() 2017-12-29 11:02:38 -08:00
Tastybento
4289a24c56 Improved the panel API.
I'm working on addons and realized it would be a better approach to be
able to register the listener for a panel explicitly for each panel.
This is optional. Also, added the ability to open the panel immediately
for a player.
2017-12-29 09:11:14 -08:00
Tastybento
452311fb69 Boom! NMS is gone! (Again) Will it come back?
Used reflection to get the command map from the server instead of using
the NMS call.

Also, more importantly, this commit enables CompositeCommands to
auto-register their top-level command in the constructor. No need to
separately obtain the command manager object. Yes, easy API. :-)
2017-12-28 20:36:04 -08:00
Tastybento
9b0992c30d Removed perm checks for console. 2017-12-28 17:20:33 -08:00
Tastybento
4d7b5374e5 Bolstered error reporting for malformed addon.yml files. 2017-12-28 17:11:49 -08:00
Tastybento
6e6165a301 Merge branch 'develop' of https://github.com/tastybento/bskyblock.git into develop 2017-12-28 11:56:55 -08:00
Tastybento
a15b1b2371 Added saveResource method to AddOn save to a specific folder. 2017-12-28 11:56:45 -08:00
Florian CUNY
cb2d24c779 Removed useless AddonStates and added MISSING_DEPENDENCY 2017-12-28 20:50:24 +01:00
Tastybento
92213f20c1 Addon data folder name change. 2017-12-28 11:32:57 -08:00
Tastybento
d3490a6f24 Added comments to Addon. Added save config method. 2017-12-28 09:37:07 -08:00
Florian CUNY
c2271ae229 Removed TeamChatEvent, CoopJoinEvent and CoopLeaveEvent
because their related features won't be implemented in BSB
2017-12-28 15:30:18 +01:00
Florian CUNY
390d58cc8b AddonsAPI & Events changes
Moved PremadeEvent to api/events
Made use of PremadeEvent for all existing events
Renamed TeamReason to Reason in TeamEvent
Made the addon events follow the used builder pattern
Renamed #loadAddons() to #enableAddons() in AddonsManager
Added #disableAddons() in AddonsManager
2017-12-28 15:29:32 +01:00
Florian CUNY
40c59f2f7e AddonsAPI - Polishing the API
Renamed all the classes
2017-12-28 14:50:02 +01:00
Florian CUNY
86ad00acab AddonsAPI - Polishing the API
Temporarily remove api/addons folder to rename files
2017-12-28 14:49:27 +01:00
Tastybento
687a71876d Completed the addons additions.
Everything seems to work okay.
2017-12-27 19:16:13 -08:00
Tastybento
f80a933c34 Merge branch 'develop' into addons 2017-12-27 14:03:52 -08:00
Tastybento
fcaa3514ac Fixed NPE bug when getting plugin. 2017-12-27 14:03:00 -08:00