Commit Graph

292 Commits

Author SHA1 Message Date
GJ
b07cf6bdde It's now possible to run away from the Kraken. 2013-05-03 15:49:29 -04:00
GJ
7ed218ee7f Cleanup this task a bit. 2013-05-03 13:43:23 -04:00
GJ
3aedeea220 Remove client-side rain if the player kills the kraken. 2013-05-03 12:11:52 -04:00
GJ
09abab1b5d Kraken sounds can now be set to either player-only or global (default). 2013-05-03 07:51:58 -04:00
TfT_02
f6e9fd9f3a Add more localisation 2013-05-02 21:02:12 +02:00
GJ
0574de4a29 Configure the Kraken! 2013-05-02 07:56:29 -04:00
GJ
0033c8864e A dead kraken can't attack. 2013-05-01 22:17:48 -04:00
GJ
e7c749ee3a Added boosts to Fishing chance depending on conditions. Also, the
kraken, now with 100% more sound!
2013-05-01 21:57:42 -04:00
GJ
c465546871 Unleash the Kraken! 2013-05-01 21:17:59 -04:00
GJ
e1ebb96545 Still need to remove from pending even if offline. 2013-04-30 15:47:19 -04:00
GJ
14050cf096 Oops. 2013-04-30 14:24:31 -04:00
GJ
08be78fa35 Avoid possible IllegalStateException if player has logged out before
this processes.
2013-04-30 10:02:28 -04:00
GJ
50c9649b23 mcMMO - Now with 100% more scoreboards!
mcMMO now allows for the use of scoreboards to display information in
several instances. By default, all scoreboards are enabled in the config,
and will only display for 10 seconds. After 10 seconds, the scoreboard
will go away and revert to the previously displayed scoreboard, if one
exists.

A global scoreboard now exists for tracking all player stats, and will be
displayed when /mctop is used. Your name will be highlighted in gold when
looking through the scoreboard. Additionally, the scoreboard will display
players in groups of 15, rather than groups of 10 like in chat.
Unfortunately, due to the limitations of scoreboards, the player's rank
will not be displayed in front of their name.

The scoreboard area is now also used for displaying data for /mcrank,
/inspect. and /mcstats. Due to the way scoreboards are handled, the power
level is not guarenteed to show up at any given location in the
scoreboard, but is instead displayed in gold so that it can be easily
found.

Lastly, the scoreboard area is also now used for displaying current data
on skills when the relevant /<skillname> command is used. The effects and
ability stats will still be shown in chat, but the current level, xp, and
remaining xp will be shown in the scoreboard.
2013-04-29 15:45:07 -04:00
GJ
339a54b0ac Replace SkillMonitorTask with 3 unique timers instead. This should greatly
optimize our tool and ability cooldown tracking and hopefully reduce
server load.
2013-04-29 15:33:55 -04:00
GJ
98dc7b853a Protect our managers. 2013-04-25 09:16:42 -04:00
GJ
eea5784527 Abstract our database operations into a single class.
This allows the logic between SQL and Flatfile to remain more hidden in
most cases and makes the code easier to read.
2013-04-25 07:41:23 -04:00
GJ
2ca7d139fe Fix NPEs relating combat checks and world changing. Fixes #976, #979 2013-04-22 23:19:26 -04:00
TfT_02
1b4eda713f Moar magical fixes!
This will automagically fix bugged players who have joined multiple
parties.
2013-04-13 01:17:07 +02:00
TfT_02
cb133ced80 No longer needed! 2013-04-13 01:16:17 +02:00
TfT_02
682c2631f0 Fixed bug where players were able to join the same party multiple times
This change should automagically fix broken parties which have multiple
instances of the same player in it.

This will not fix bugged players who have joined multiple parties.
2013-04-13 00:41:36 +02:00
TfT_02
0ab1986202 Set a seperate cooldowns between getting hurt and teleportations
Closes #880
2013-04-10 17:19:14 +02:00
TfT_02
e11dc680de Add configurable warmup and cooldown timers for party teleportation
Closes #348
2013-04-10 17:18:06 +02:00
TfT_02
71249334c3 Change the ChimaeraWing timestamp into a general teleportation timestamp 2013-04-10 17:15:48 +02:00
GJ
dd8984314f Validate here instead. 2013-04-08 00:26:12 -04:00
GJ
b82c3f41d3 Remove metadata, validation checks. 2013-04-08 00:24:38 -04:00
GJ
da29185b7d Added health display for mobs during combat.
During combat, players will now see a healthbar appear over the head of
hostile mobs when they are damaged. This healthbar will have two display
options - HEARTS and BAR - which can be changed via the /mobhealth
command.

New Permissions:
mcmmo.mobhealthdisplay - Allows viewing of mob health display
mcmmo.commands.mobhealth - Allows access to the /mobhealth command

New Config Options (config.yml):
Mob_Healthbar.Display_Type - the default health display type
Mob_Healthbar.Display_Time - the amount of time to show health display
2013-04-04 22:11:11 -04:00
GJ
630c3e81e6 Fixed Chimera Wing displaying warmup message if warmup was set to 0 2013-04-04 09:59:10 -04:00
TfT_02
0ebc555136 Fixed bug with ChimaeraWings not taking Wings from a players inventory properly
Fixes #914
2013-04-01 11:32:28 +02:00
GJ
fe89c19969 Passing events is bad. 2013-03-28 09:30:49 -04:00
GJ
7d8888d47d Even simpler. 2013-03-27 15:56:03 -04:00
TfT_02
6fbfec48b0 Revert "Deal with the ConcurrentModification issue. Fixes #873"
This reverts commit ca51b2f.
2013-03-27 20:44:44 +01:00
GJ
0118346aaf ACTUALLY fix our CME. 2013-03-27 15:34:34 -04:00
TfT_02
ca51b2f70f Deal with the ConcurrentModification issue. Fixes #873 2013-03-26 15:18:14 +01:00
TfT_02
5b5b73cde0 Improving Chimaera Wing - part 2
* Added a warmup before using a Chimaera Wing
 * Closes #740
2013-03-22 00:38:21 +01:00
TfT_02
9730cdb880 Normalize line endings 2013-03-21 20:46:23 +01:00
GJ
399bf8e3b9 Use BukkitRunnable. 2013-03-20 03:11:16 -04:00
GJ
c3a69c8c55 Change to the newer, shorter scheduler methods. 2013-03-20 02:15:15 -04:00
GJ
410c946faf Tidying up Permission checks for /mcrank and /mctop 2013-03-11 12:48:00 -04:00
GJ
9eba2c683b Use equalsIgnoreCase() instead of equals(), and use == for compaing
worlds.

Fixes #815
2013-03-10 18:06:10 -04:00
T00thpick1
8059636b62 Permissions for stat displays 2013-03-10 15:50:10 -04:00
GJ
c0b4a33346 Importing Bukkit is usually bad. 2013-03-10 15:07:07 -04:00
bm01
cddcf36016 Reworked some methods related to Herbalism
Fixes double seed consumption for Green Terra when used on crops
Fixes wheat consumption instead of seed for Green Thumb
Fixes XP and double drop exploit with some blocks (flowers...)
2013-03-08 10:11:33 +01:00
bm01
cd4c328320 Improved SkillMonitorTask 2013-03-08 02:03:25 +01:00
bm01
c0b7f8a323 Moved everything that could be moved from PlayerProfile to McMMOPlayer
PlayerProfile now only store stored (flatfile or MySQL) data
2013-03-03 17:06:32 +01:00
NuclearW
a542d6cf3e Squashed commit of the following:
commit cb3e057dee1f2b29838ab654a526baac1baab7d6
Author: NuclearW <incongruency@gmail.com>
Date:   Fri Mar 1 00:43:57 2013 -0500

    1.4.00 release

commit 4f9628d2e4cde31c8946e9a911ee6f10e1fb6b35
Author: NuclearW <incongruency@gmail.com>
Date:   Fri Mar 1 00:07:30 2013 -0500

    \r -> \n

commit b2ca22e0477c747143b0f08a28a096967ee6ffd7
Author: GJ <gjmcferrin@gmail.com>
Date:   Thu Feb 28 23:53:56 2013 -0500

    Commented-out code shouldn't be done like that.

commit 92f131712cc671e3e616c14a22e22769ef6d6d0b
Author: GJ <gjmcferrin@gmail.com>
Date:   Thu Feb 28 23:45:36 2013 -0500

    More things we missed.

commit 408b03766f6261a03a862a1ab7f5835772feda4a
Author: NuclearW <incongruency@gmail.com>
Date:   Thu Feb 28 23:20:13 2013 -0500

    Format: util through spout and backup lib

commit d6bd2c29bbb51bee3607247468cfe145d4f38c9e
Author: GJ <gjmcferrin@gmail.com>
Date:   Thu Feb 28 22:50:08 2013 -0500

    The things we missed the first time through...

commit 393f0b889aa1b7011ee81ee7b15413d8824b8cfb
Author: GJ <gjmcferrin@gmail.com>
Date:   Thu Feb 28 22:05:29 2013 -0500

    Formatting: Skills

commit c097a6e188a7b760dd1b4389ed81dca417146b16
Author: GJ <gjmcferrin@gmail.com>
Date:   Thu Feb 28 19:30:12 2013 -0500

    Organize imports.

commit 34c3e74be7eb5f983f21d969e30155c5d82c01c1
Author: GJ <gjmcferrin@gmail.com>
Date:   Thu Feb 28 19:09:45 2013 -0500

    Fixed a missing fallthrough comment from ChatCommand

commit b4a76c9f022a2fd98bdd8f083accfea03becfd71
Author: GJ <gjmcferrin@gmail.com>
Date:   Thu Feb 28 19:09:36 2013 -0500

    Formatting: datatypes.* through events.*

commit 3e57dd41d3265a7c8106c7eb026df926770a4d15
Author: NuclearW <incongruency@gmail.com>
Date:   Thu Feb 28 17:56:15 2013 -0500

    Fix issue with bad rebase

commit e8c8e06b2971555b7334e49128257e3af6f36892
Author: GJ <gjmcferrin@gmail.com>
Date:   Thu Feb 28 17:35:32 2013 -0500

    Formatting: DatabaseManager, LeaderboardManager, DatabaseUpdateType, and
    PlayerStat

commit 13ecf1cc41f377a12991e357ac10abdcda24d6de
Author: NuclearW <incongruency@gmail.com>
Date:   Thu Feb 28 17:31:43 2013 -0500

    Format: listeners.* through runnables.*

commit 71686e3c0d96c2dcf25442b91703fadda1ea3bb0
Author: NuclearW <incongruency@gmail.com>
Date:   Thu Feb 28 17:13:57 2013 -0500

    Format PartyLockCommand

commit d50abed10bf94e1a88df3dc5cc07c259aea920ea
Author: NuclearW <incongruency@gmail.com>
Date:   Thu Feb 28 16:54:08 2013 -0500

    Format: base through config.*

commit 7004823eeebbae5be7728bf9cafc3b04e57b64cf
Author: NuclearW <incongruency@gmail.com>
Date:   Thu Feb 28 15:21:40 2013 -0500

    Example of using spaces to align like things

commit 534190cfe2481e466fe459d65628550458cc2993
Author: NuclearW <incongruency@gmail.com>
Date:   Thu Feb 28 15:12:19 2013 -0500

    Capitalization

commit 5b61d3ba4c8d81e6f358b0cf4f460abfe9798414
Author: NuclearW <incongruency@gmail.com>
Date:   Thu Feb 28 15:07:43 2013 -0500

    Updated readme, added standards.md

commit 5ec0df70fb82c527420a2f437f27f31bd758f884
Author: NuclearW <incongruency@gmail.com>
Date:   Thu Feb 28 14:42:16 2013 -0500

    Markdown was here, Creole is a loser

commit 70d557c59d086b6a5fb5e0e63c0c1d8eb4c8d19c
Author: NuclearW <incongruency@gmail.com>
Date:   Thu Feb 28 13:46:24 2013 -0500

    Move MCStats shading to .metrics.mcstats

commit eb9d67e66b1659d6abd2397ecf403343cfeffdda
Author: GJ <gjmcferrin@gmail.com>
Date:   Thu Feb 28 13:37:37 2013 -0500

    Move ALL the packages!

commit 8ffa9e7b75417b6c7f158613d4b4ffb783dcf2d0
Author: NuclearW <incongruency@gmail.com>
Date:   Thu Feb 28 12:37:12 2013 -0500

    /r/n -> /n
2013-03-01 00:52:01 -05:00
GJ
701822c69f MASSIVE Permissions overhaul. Added a handful of new permissions,
renamed a few more. Changed Green Terra to handle blocks based on
perms rather than the config file.

For more details, read the diff.
2013-02-19 01:02:29 -05:00
Glitchfinder
519485f155 Converting entity tracking to use Bukkit metadata. Should greatly reduce lag on chunk loading and unloading. 2013-02-18 16:19:31 -08:00
NuclearW
57e6e5400b nope.avi
Revert "Protect placeStore. It's ugly and still needs work."

This reverts commit 1fe182babe.
2013-02-17 10:05:35 -05:00
GJ
1fe182babe Protect placeStore. It's ugly and still needs work. 2013-02-17 00:40:17 -05:00
GJ
284002bf8b No reason to String.valueOf() these. 2013-02-15 13:56:30 -05:00
T00thpick1
4cf658b629 Make mctop asynchroneous 2013-02-15 12:47:00 -05:00
GJ
1ef1d53fd9 Make our commands respect localized skill names. 2013-02-15 09:26:01 -05:00
bm01
35cdcb62b7 Removed needs for SkillType.ALL
Also apparently made /Skillreset work on offline players and fixed
missing permissions check
2013-02-04 16:33:34 +01:00
NuclearW
ebca9fc2da Change getString to use varargs 2013-02-02 02:55:49 -05:00
GJ
599bbe73b4 More major refactoring. My OCD is better now. 2013-01-30 11:53:51 -05:00
bm01
bff7919c21 Major cleanup 2013-01-26 23:01:55 +01:00
GJ
ba7ebe1319 Minor Database refactoring. 2013-01-24 22:53:02 -05:00
T00thpick1
135bfc2627 Don't cycle when on child skill 2013-01-23 23:49:01 -05:00
GJ
6b0e7a9c61 Major refactoring. This WILL break any mcMMO-related plugin that
does not properly hook into the API classes. 

This consolidates the skill-related classes into their own individual
packages, and moves several misc skill classes into the main Skill
package as well. This also moves all Party & Spout related files into
their own respective packages as well.
2013-01-22 12:43:25 -05:00
GJ
7f8beca33c Synchronizing watches... 2013-01-21 19:19:25 -05:00
GJ
0711454e31 General cleanup to satisfy my OCD a little while longer. 2013-01-21 17:22:54 -05:00
Glitchfinder
c1e82b566e Fixing a new duping bug. And this time it was NOT our fault! 2013-01-20 18:06:30 -08:00
Glitchfinder
b424ecfd3e Removing ChunkletUnloader and dependents, since they are no longer necessary. 2013-01-18 15:39:02 -08:00
GJ
a9c722de67 Wrapping up the localizations... though I'm sure there are probably
still some that got missed.
2013-01-17 11:02:55 -05:00
GJ
2a4fe4aa48 Because lowercase class names are just wrong... 2013-01-16 17:13:56 -05:00
GJ
64c20d0e24 Because toothplck1 doesn't know how to locale, apparently. 2013-01-16 16:58:00 -05:00
T00thpick1
51777dbe85 Import chatColor 2013-01-16 16:15:03 -05:00
T00thpick1
fb1d48fcae Output Header along with info for mcRank 2013-01-16 16:13:31 -05:00
GJ
957605d46b More localization updates. 2013-01-16 14:28:59 -05:00
T00thpick1
c0dfcfd9f6 More changes 2013-01-16 13:28:14 -05:00
T00thpick1
c073c7ed3a Make mcRank Async in SQL 2013-01-16 02:50:18 -05:00
GJ
8e2707d33e Duplicate code is stupid. 2013-01-14 00:47:47 -05:00
GJ
ed5120eead This should be static access. 2013-01-14 00:27:30 -05:00
GJ
e7e680fd8e Updating the SQL for the purge command, adding config options for
purging old users.
2013-01-14 00:25:31 -05:00
GJ
7b334601c6 Merge pull request #500 from t00thpick1/master
More SQL stuff
2013-01-13 21:09:40 -08:00
T00thpick1
050cb8c5f4 Speed up purgeOldUsers task 2013-01-14 00:06:01 -05:00
Glitchfinder
c1bbc685e6 Fixing a minor spacing issue. 2013-01-13 20:05:20 -08:00
Glitchfinder
d5d6f7e860 Reducing CPU usage as a result of unloading chunks. 2013-01-13 20:02:11 -08:00
GJ
21a0849a5b Fix t00thpick's mistake. :p 2013-01-13 16:22:56 -05:00
T00thpick1
14f5a25633 Speed up SQL powerless users purge 2013-01-13 16:09:47 -05:00
gmcferrin
d0e2358fab This is a much better way to delete things. 2013-01-11 15:26:56 -05:00
gmcferrin
08592cbacf Hopefully speed up UserPergeTask 2013-01-11 12:12:19 -05:00
gmcferrin
6496816692 Fixed the null check I broke. 2013-01-10 22:06:50 -05:00
gmcferrin
e20098d462 Fixed up the log messages. 2013-01-10 21:54:32 -05:00
gmcferrin
d25a314d3a Fix bug with UserPurgeTask... 2013-01-10 21:41:35 -05:00
gmcferrin
3dde331f9d Add some debug so we can find the problem... 2013-01-10 21:11:11 -05:00
gmcferrin
f7e56d9833 (Hopefully) Fix NPE, delay PurgeTask start for a few seconds just to be
safe.
2013-01-10 20:49:33 -05:00
gmcferrin
b554fb342a Helpful logging! 2013-01-10 20:33:48 -05:00
gmcferrin
ce42da5806 Added task to prune old and powerless users from the SQL database.
*** WARNING: THIS WILL RUN AUTOMATICALLY ON YOUR DB. IF YOU ARE WORRIED
ABOUT DATA LOSS, BACK UP YOUR SQL DATA BEFORE INSTALLING THIS BUILD ***
2013-01-10 19:36:11 -05:00
Glitchfinder
637e826c1b Adding a cleanup task to remove invalid entities from the spawned mob storage. 2013-01-10 14:12:41 -08:00
gmcferrin
4a4db675f1 More OCD. 2013-01-09 23:07:32 -05:00
gmcferrin
e193da2cd7 My OCD made me do it. 2013-01-09 23:03:17 -05:00
gmcferrin
8b9432d1d9 So many useless else statements... 2013-01-09 22:43:21 -05:00
gmcferrin
75a5ffcb10 Cleanup our iterators. 2013-01-09 22:18:41 -05:00
TfT_02
66cc9bc6db Fixed a bug where GreenThumb_StageChange wasn't read from advanced.yml 2013-01-02 02:10:16 +01:00
Grant
36d5344ded Cleanup formatting. 2012-12-24 16:56:25 -05:00
Grant
6b3bde585d Fixed some issues with static access 2012-12-24 16:17:33 -05:00
Grant
f4e7e6c74a Added default cases to switch/case statements 2012-12-24 16:17:32 -05:00
U-YUE\Sean
3153973c2b Fiuxing merge issue. 2012-11-29 12:18:35 -08:00
Glitchfinder
a61423aa99 Dealing with a few minor issues. 2012-11-13 14:27:58 -08:00
Glitchfinder
7859660ece Adding herbalism green thumb ability to carrots, potatoes, and netherwart. 2012-11-09 16:37:12 -08:00
Glitchfinder
88ed14fe5c Fixing index error. 2012-11-05 20:14:23 -08:00
Glitchfinder
c21286dbc3 Offloading chunk conversion. SHould alleviate lag. 2012-11-05 19:28:00 -08:00
Glitchfinder
3129acfc19 General cleanup for pull request. 2012-11-05 16:03:44 -08:00
Glitchfinder
62f5185a1b Attempting to fix index error. 2012-11-04 20:36:47 -08:00
Glitchfinder
83e072dad1 Fixing a potential error with legacy chunklet types. 2012-11-04 13:43:14 -08:00
Glitchfinder
eb5ac80714 Updating modified block storage to a region-style format. 2012-11-04 13:36:57 -08:00
Marco Cunha
58a15e61dd Fix refactoring typos 2012-10-22 19:05:13 +02:00
Marco Cunha
34ae64706e Improved DB connection handling
Support for aggressive connection timeouts, with exponential backoff
for multiple failures.
2012-10-22 14:45:16 +02:00
GJ
3c2d658b37 Protect our database. 2012-07-09 11:12:46 -04:00
GJ
f0b2cc1bab Protect our file paths. 2012-07-09 10:55:33 -04:00
NuclearW
f7a5678814 Change ChunkletManager to a notify/demand system
Allowing NullChunkletManager to bypass the ChunkletUnloader as it is not needed.
2012-07-07 14:43:14 -04:00
GJ
5b8811bd09 More work on McMMOPlayer 2012-07-06 11:57:17 -04:00
GJ
1ba498c443 Because "final static" is just backwards. 2012-07-06 00:12:17 -04:00
GJ
b94085c5f4 Make 'em final 2012-07-05 09:33:57 -04:00
GJ
caf9c07ba3 Because PP is an awful variable name. 2012-07-03 10:04:04 -04:00
bm01
1443e2f6b8 Removed unneeded null check, according to eclipse :3 2012-07-03 03:52:12 +02:00
bm01
f18a9bdcc7 Fixed duplication bug with sticky pistons 2012-07-02 23:54:05 +02:00
bm01
c88ada489a Chunklets optimization 2012-06-30 02:38:22 +02:00
GJ
f4dd7ff483 Fixed ClassDef error that prevented the server from loading unless
Spout was installed.
2012-06-28 10:03:22 -04:00
bm01
0c1a8eff85 Fixed NPE caused by Spout players after a /reload 2012-06-28 06:51:13 +02:00
GJ
61205989cc Cleanup cooldown monitoring a bit. 2012-06-25 10:29:29 -04:00
bm01
5057a8a7a3 Fixed memory leak in ProfileSaveTask 2012-06-25 14:38:07 +02:00
bm01
b8e9269488 Made things cleaner 2012-06-25 14:37:18 +02:00
bm01
dc48d467f5 Return to HashMap! 2012-06-24 22:46:45 +02:00
bm01
c9082083d1 Merged ProfileSaveTask and RemoveProfileFromMemory 2012-06-10 06:56:39 +02:00
bm01
3732db2226 Reworked Party 2012-06-09 03:08:36 +02:00
bm01
90c8e57ed7 Reworked a little Users.java 2012-06-08 20:00:02 +02:00
GJ
2f15c71412 Because making it upper case broke all the things. 2012-06-06 18:02:22 -04:00
GJ
e5d2ed4bb2 Because lowercase class names are evil. 2012-06-06 14:49:07 -04:00
bm01
56aff1d191 Replaced playerName fields in PlayerProfile and Users by the Player object 2012-06-06 02:03:27 +02:00
GJ
71446a12af Static ALL the things! 2012-06-05 10:42:56 -04:00
GJ
1cca4de9e5 Cleanup! 2012-06-05 09:57:10 -04:00
GJ
1e58c32a5f Change XP processing to use a single function. 2012-06-04 09:30:51 -04:00
GJ
2a27048174 Functions that start with capital letters are bad. 2012-06-04 09:08:41 -04:00
bm01
2a977557c2 Made sure that SpoutConfig.load is called when the instance is created, for safety 2012-05-24 06:18:43 +02:00
GJ
450e938092 Change Spout Config file to only load if Spout is enabled.
Removed unused imports.
2012-05-23 14:31:03 -04:00
GJ
63f683982f Moved Spout stuff to its own config file. 2012-05-23 10:50:47 -04:00
bm01
3e435c419a Refixed NPE due to GainXp task 2012-05-06 09:47:25 +02:00
GJ
1b37ba8daa Fixed a few issues from the merge, added the mod directory to the zip
backup.
2012-05-05 13:51:54 -04:00
nossr50
d9b3eff18f Changed how a few variables were initialized 2012-05-05 10:16:41 -07:00
bm01
dbc57060ee Reduced bleeding ticks damage 2012-05-01 23:49:11 +02:00
GJ
edaa51593b Skills refactoring 2012-05-01 13:58:47 -04:00
bm01
d235ca8ed8 Fixed SQLReconnect not working 2012-05-01 07:53:03 +02:00
bm01
18c52a5e23 Cleanup 2012-05-01 01:32:50 +02:00
GJ
064fc0a8e2 Command format & permission changes, other minor cleanup. 2012-04-29 22:58:54 -04:00
nossr50
96e6270520 Changed MySQL to not save everything at once 2012-04-29 12:02:24 -07:00
bm01
9e98351923 Capped bleeding ticks for monsters, moved players bleeding to BleedTimer 2012-04-28 07:33:57 +02:00
nossr50
47b7780c96 Refactor ALL THE THINGS! 2012-04-27 02:47:11 -07:00
nossr50
8dec24693c Possible fix for NPE on save 2012-04-27 02:21:43 -07:00