Handles null values for LevelsData

https://github.com/BentoBoxWorld/Level/issues/169
This commit is contained in:
tastybento 2020-07-10 20:36:58 -07:00
parent 6efa22e77f
commit 9fb7d7897d
4 changed files with 35 additions and 30 deletions

View File

@ -65,7 +65,7 @@
<!-- Do not change unless you want different name for local builds. --> <!-- Do not change unless you want different name for local builds. -->
<build.number>-LOCAL</build.number> <build.number>-LOCAL</build.number>
<!-- This allows to change between versions. --> <!-- This allows to change between versions. -->
<build.version>2.3.0</build.version> <build.version>2.3.1</build.version>
</properties> </properties>
<!-- Profiles will allow to automatically change build version. --> <!-- Profiles will allow to automatically change build version. -->

View File

@ -475,7 +475,6 @@ public class LevelsManager {
return ld.getLevel(world); return ld.getLevel(world);
} }
} }
addon.getPlugin().logDebug("Returning 0L");
return 0L; return 0L;
} }

View File

@ -7,7 +7,6 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import world.bentobox.bentobox.BentoBox;
import world.bentobox.bentobox.api.events.island.IslandEvent.IslandCreatedEvent; import world.bentobox.bentobox.api.events.island.IslandEvent.IslandCreatedEvent;
import world.bentobox.bentobox.api.events.island.IslandEvent.IslandPreclearEvent; import world.bentobox.bentobox.api.events.island.IslandEvent.IslandPreclearEvent;
import world.bentobox.bentobox.api.events.island.IslandEvent.IslandRegisteredEvent; import world.bentobox.bentobox.api.events.island.IslandEvent.IslandRegisteredEvent;
@ -39,20 +38,19 @@ public class IslandActivitiesListeners implements Listener {
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onNewIsland(IslandCreatedEvent e) { public void onNewIsland(IslandCreatedEvent e) {
BentoBox.getInstance().logDebug(e.getEventName());
zeroIsland(e.getIsland()); zeroIsland(e.getIsland());
} }
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onNewIsland(IslandResettedEvent e) { public void onNewIsland(IslandResettedEvent e) {
BentoBox.getInstance().logDebug(e.getEventName());
zeroIsland(e.getIsland()); zeroIsland(e.getIsland());
} }
private void zeroIsland(final Island island) { private void zeroIsland(final Island island) {
// Clear the island setting // Clear the island setting
if (island.getOwner() != null && island.getWorld() != null) { if (island.getOwner() != null && island.getWorld() != null) {
BentoBox.getInstance().logDebug("Zeroing island");
addon.getPipeliner().addIsland(island).thenAccept(results -> addon.getPipeliner().addIsland(island).thenAccept(results ->
addon.getManager().setInitialIslandLevel(island, results.getLevel())); addon.getManager().setInitialIslandLevel(island, results.getLevel()));
} }
@ -60,11 +58,10 @@ public class IslandActivitiesListeners implements Listener {
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onIslandDelete(IslandPreclearEvent e) { public void onIslandDelete(IslandPreclearEvent e) {
BentoBox.getInstance().logDebug(e.getEventName());
// Remove player from the top ten and level // Remove player from the top ten and level
UUID uuid = e.getIsland().getOwner(); UUID uuid = e.getIsland().getOwner();
World world = e.getIsland().getWorld(); World world = e.getIsland().getWorld();
BentoBox.getInstance().logDebug(uuid + " " + world);
remove(world, uuid); remove(world, uuid);
} }
@ -76,42 +73,42 @@ public class IslandActivitiesListeners implements Listener {
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onNewIslandOwner(TeamSetownerEvent e) { public void onNewIslandOwner(TeamSetownerEvent e) {
BentoBox.getInstance().logDebug(e.getEventName());
// Remove player from the top ten and level // Remove player from the top ten and level
remove(e.getIsland().getWorld(), e.getIsland().getOwner()); remove(e.getIsland().getWorld(), e.getIsland().getOwner());
} }
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onIsland(TeamJoinedEvent e) { public void onIsland(TeamJoinedEvent e) {
BentoBox.getInstance().logDebug(e.getEventName());
// Remove player from the top ten and level // Remove player from the top ten and level
remove(e.getIsland().getWorld(), e.getPlayerUUID()); remove(e.getIsland().getWorld(), e.getPlayerUUID());
} }
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onIsland(IslandUnregisteredEvent e) { public void onIsland(IslandUnregisteredEvent e) {
BentoBox.getInstance().logDebug(e.getEventName());
// Remove player from the top ten and level // Remove player from the top ten and level
remove(e.getIsland().getWorld(), e.getPlayerUUID()); remove(e.getIsland().getWorld(), e.getPlayerUUID());
} }
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onIsland(IslandRegisteredEvent e) { public void onIsland(IslandRegisteredEvent e) {
BentoBox.getInstance().logDebug(e.getEventName());
// Remove player from the top ten and level // Remove player from the top ten and level
remove(e.getIsland().getWorld(), e.getPlayerUUID()); remove(e.getIsland().getWorld(), e.getPlayerUUID());
} }
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onIsland(TeamLeaveEvent e) { public void onIsland(TeamLeaveEvent e) {
BentoBox.getInstance().logDebug(e.getEventName());
// Remove player from the top ten and level // Remove player from the top ten and level
remove(e.getIsland().getWorld(), e.getPlayerUUID()); remove(e.getIsland().getWorld(), e.getPlayerUUID());
} }
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void onIsland(TeamKickEvent e) { public void onIsland(TeamKickEvent e) {
BentoBox.getInstance().logDebug(e.getEventName());
// Remove player from the top ten and level // Remove player from the top ten and level
remove(e.getIsland().getWorld(), e.getPlayerUUID()); remove(e.getIsland().getWorld(), e.getPlayerUUID());
} }

View File

@ -70,6 +70,14 @@ public class LevelsData implements DataObject {
mdCount = new HashMap<>(); mdCount = new HashMap<>();
} }
private void initialize() {
if (levels == null) levels = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
if (initialLevel == null) initialLevel = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
if (pointsToNextLevel == null) pointsToNextLevel = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
if (uwCount == null) uwCount = new HashMap<>();
if (mdCount == null) mdCount = new HashMap<>();
}
/* (non-Javadoc) /* (non-Javadoc)
* @see world.bentobox.bbox.database.objects.DataObject#getUniqueId() * @see world.bentobox.bbox.database.objects.DataObject#getUniqueId()
*/ */
@ -92,7 +100,7 @@ public class LevelsData implements DataObject {
* @return island level * @return island level
*/ */
public Long getLevel(World world) { public Long getLevel(World world) {
if (levels == null) levels = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); initialize();
return world == null ? 0L : levels.getOrDefault(world.getName(), 0L); return world == null ? 0L : levels.getOrDefault(world.getName(), 0L);
} }
@ -100,7 +108,7 @@ public class LevelsData implements DataObject {
* @return the levels * @return the levels
*/ */
public Map<String, Long> getLevels() { public Map<String, Long> getLevels() {
if (levels == null) levels = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); initialize();
return levels; return levels;
} }
@ -108,7 +116,7 @@ public class LevelsData implements DataObject {
* @param levels the levels to set * @param levels the levels to set
*/ */
public void setLevels(Map<String, Long> levels) { public void setLevels(Map<String, Long> levels) {
if (levels == null) levels = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); initialize();
this.levels = levels; this.levels = levels;
} }
@ -118,7 +126,7 @@ public class LevelsData implements DataObject {
* @param lv - level * @param lv - level
*/ */
public void setLevel(World world, Long lv) { public void setLevel(World world, Long lv) {
if (levels == null) levels = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); initialize();
String name = world.getName().toLowerCase(Locale.ENGLISH); String name = world.getName().toLowerCase(Locale.ENGLISH);
levels.put(name, lv - this.initialLevel.getOrDefault(name, 0L)); levels.put(name, lv - this.initialLevel.getOrDefault(name, 0L));
} }
@ -129,7 +137,7 @@ public class LevelsData implements DataObject {
* @param level - level * @param level - level
*/ */
public void setInitialLevel(World world, long level) { public void setInitialLevel(World world, long level) {
if (initialLevel == null) initialLevel = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); initialize();
this.initialLevel.put(world.getName().toLowerCase(Locale.ENGLISH), level); this.initialLevel.put(world.getName().toLowerCase(Locale.ENGLISH), level);
} }
@ -137,7 +145,7 @@ public class LevelsData implements DataObject {
* @return the initialLevel * @return the initialLevel
*/ */
public Map<String, Long> getInitialLevel() { public Map<String, Long> getInitialLevel() {
if (initialLevel == null) initialLevel = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); initialize();
return initialLevel; return initialLevel;
} }
@ -145,7 +153,7 @@ public class LevelsData implements DataObject {
* @param initialLevel the initialLevel to set * @param initialLevel the initialLevel to set
*/ */
public void setInitialLevel(Map<String, Long> initialLevel) { public void setInitialLevel(Map<String, Long> initialLevel) {
if (initialLevel == null) initialLevel = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); initialize();
this.initialLevel = initialLevel; this.initialLevel = initialLevel;
} }
@ -155,7 +163,7 @@ public class LevelsData implements DataObject {
* @return initial island level or 0 by default * @return initial island level or 0 by default
*/ */
public long getInitialLevel(World world) { public long getInitialLevel(World world) {
if (initialLevel == null) initialLevel = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); initialize();
return initialLevel.getOrDefault(world.getName().toLowerCase(Locale.ENGLISH), 0L); return initialLevel.getOrDefault(world.getName().toLowerCase(Locale.ENGLISH), 0L);
} }
@ -164,6 +172,7 @@ public class LevelsData implements DataObject {
* @param world - world to remove * @param world - world to remove
*/ */
public void remove(World world) { public void remove(World world) {
initialize();
this.levels.remove(world.getName().toLowerCase(Locale.ENGLISH)); this.levels.remove(world.getName().toLowerCase(Locale.ENGLISH));
this.initialLevel.remove(world.getName().toLowerCase(Locale.ENGLISH)); this.initialLevel.remove(world.getName().toLowerCase(Locale.ENGLISH));
this.pointsToNextLevel.remove(world.getName().toLowerCase(Locale.ENGLISH)); this.pointsToNextLevel.remove(world.getName().toLowerCase(Locale.ENGLISH));
@ -175,7 +184,7 @@ public class LevelsData implements DataObject {
* @return the pointsToNextLevel * @return the pointsToNextLevel
*/ */
public Map<String, Long> getPointsToNextLevel() { public Map<String, Long> getPointsToNextLevel() {
if (pointsToNextLevel == null) pointsToNextLevel = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); initialize();
return pointsToNextLevel; return pointsToNextLevel;
} }
@ -183,7 +192,7 @@ public class LevelsData implements DataObject {
* @param pointsToNextLevel the pointsToNextLevel to set * @param pointsToNextLevel the pointsToNextLevel to set
*/ */
public void setPointsToNextLevel(Map<String, Long> pointsToNextLevel) { public void setPointsToNextLevel(Map<String, Long> pointsToNextLevel) {
if (pointsToNextLevel == null) pointsToNextLevel = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); initialize();
this.pointsToNextLevel = pointsToNextLevel; this.pointsToNextLevel = pointsToNextLevel;
} }
@ -194,7 +203,7 @@ public class LevelsData implements DataObject {
* @param points - points to next level * @param points - points to next level
*/ */
public void setPointsToNextLevel(World world, Long points) { public void setPointsToNextLevel(World world, Long points) {
if (pointsToNextLevel == null) pointsToNextLevel = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); initialize();
pointsToNextLevel.put(world.getName().toLowerCase(Locale.ENGLISH), points); pointsToNextLevel.put(world.getName().toLowerCase(Locale.ENGLISH), points);
} }
@ -205,7 +214,7 @@ public class LevelsData implements DataObject {
* @return points to next level or zero if unknown * @return points to next level or zero if unknown
*/ */
public long getPointsToNextLevel(World world) { public long getPointsToNextLevel(World world) {
if (pointsToNextLevel == null) pointsToNextLevel = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); initialize();
return pointsToNextLevel.getOrDefault(world.getName().toLowerCase(Locale.ENGLISH), 0L); return pointsToNextLevel.getOrDefault(world.getName().toLowerCase(Locale.ENGLISH), 0L);
} }
@ -213,7 +222,7 @@ public class LevelsData implements DataObject {
* @param uwCount the uwCount to set * @param uwCount the uwCount to set
*/ */
public void setUwCount(World world, Multiset<Material> uwCount) { public void setUwCount(World world, Multiset<Material> uwCount) {
if (this.uwCount == null) this.uwCount = new HashMap<>(); initialize();
Map<Material, Integer> count = new EnumMap<>(Material.class); Map<Material, Integer> count = new EnumMap<>(Material.class);
uwCount.forEach(m -> count.put(m, uwCount.count(m))); uwCount.forEach(m -> count.put(m, uwCount.count(m)));
@ -224,7 +233,7 @@ public class LevelsData implements DataObject {
* @param mdCount the mdCount to set * @param mdCount the mdCount to set
*/ */
public void setMdCount(World world, Multiset<Material> mdCount) { public void setMdCount(World world, Multiset<Material> mdCount) {
if (this.mdCount == null) this.mdCount = new HashMap<>(); initialize();
Map<Material, Integer> count = new EnumMap<>(Material.class); Map<Material, Integer> count = new EnumMap<>(Material.class);
mdCount.forEach(m -> count.put(m, mdCount.count(m))); mdCount.forEach(m -> count.put(m, mdCount.count(m)));
@ -237,7 +246,7 @@ public class LevelsData implements DataObject {
* @return the uwCount * @return the uwCount
*/ */
public Map<Material, Integer> getUwCount(World world) { public Map<Material, Integer> getUwCount(World world) {
if (this.uwCount == null) this.uwCount = new HashMap<>(); initialize();
return uwCount.getOrDefault(world.getName(), Collections.emptyMap()); return uwCount.getOrDefault(world.getName(), Collections.emptyMap());
} }
@ -246,7 +255,7 @@ public class LevelsData implements DataObject {
* @return the mdCount * @return the mdCount
*/ */
public Map<Material, Integer> getMdCount(World world) { public Map<Material, Integer> getMdCount(World world) {
if (this.mdCount == null) this.mdCount = new HashMap<>(); initialize();
return mdCount.getOrDefault(world.getName(), Collections.emptyMap()); return mdCount.getOrDefault(world.getName(), Collections.emptyMap());
} }