mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2025-03-13 07:10:03 +01:00
[Fix] Prevented NPE due in PluginData
This exception was caused by analysisData being null during PluginData analysis - This should not occur unless two analysis are being performed concurrently & first analysis finishes and clears the variable. Additional work is required for preventing two concurrent analysis. Affected issues: #711
This commit is contained in:
parent
93951f1f25
commit
a18dc2d3f2
@ -72,7 +72,8 @@ public class FactionsData extends PluginData {
|
|||||||
if (!factions.isEmpty()) {
|
if (!factions.isEmpty()) {
|
||||||
FactionsAccordion factionsAccordion = new FactionsAccordion(
|
FactionsAccordion factionsAccordion = new FactionsAccordion(
|
||||||
factions,
|
factions,
|
||||||
analysisData.getValue(AnalysisKeys.PLAYERS_MUTATOR).orElse(new PlayersMutator(new ArrayList<>()))
|
Optional.ofNullable(analysisData).flatMap(c -> c.getValue(AnalysisKeys.PLAYERS_MUTATOR))
|
||||||
|
.orElse(new PlayersMutator(new ArrayList<>()))
|
||||||
);
|
);
|
||||||
analysisContainer.addHtml("factionAccordion", factionsAccordion.toHtml());
|
analysisContainer.addHtml("factionAccordion", factionsAccordion.toHtml());
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* Licence is provided in the jar as license.yml also here:
|
* Licence is provided in the jar as license.yml also here:
|
||||||
* https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml
|
* https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml
|
||||||
*/
|
*/
|
||||||
@ -62,7 +62,8 @@ public class KingdomsData extends PluginData {
|
|||||||
if (!kingdoms.isEmpty()) {
|
if (!kingdoms.isEmpty()) {
|
||||||
KingdomsAccordion kingdomsAccordion = new KingdomsAccordion(
|
KingdomsAccordion kingdomsAccordion = new KingdomsAccordion(
|
||||||
kingdoms,
|
kingdoms,
|
||||||
analysisData.getValue(AnalysisKeys.PLAYERS_MUTATOR).orElse(new PlayersMutator(new ArrayList<>()))
|
Optional.ofNullable(analysisData).flatMap(c -> c.getValue(AnalysisKeys.PLAYERS_MUTATOR))
|
||||||
|
.orElse(new PlayersMutator(new ArrayList<>()))
|
||||||
);
|
);
|
||||||
|
|
||||||
analysisContainer.addHtml("kingdomsAccordion", kingdomsAccordion.toHtml());
|
analysisContainer.addHtml("kingdomsAccordion", kingdomsAccordion.toHtml());
|
||||||
|
@ -179,7 +179,8 @@ public class LiteBansData extends PluginData implements BanData {
|
|||||||
if (objects.isEmpty()) {
|
if (objects.isEmpty()) {
|
||||||
table.addRow("No Data");
|
table.addRow("No Data");
|
||||||
} else {
|
} else {
|
||||||
Map<UUID, String> playerNames = analysisData.getValue(AnalysisKeys.PLAYER_NAMES).orElse(new HashMap<>());
|
Map<UUID, String> playerNames = Optional.ofNullable(analysisData)
|
||||||
|
.flatMap(c -> c.getValue(AnalysisKeys.PLAYER_NAMES)).orElse(new HashMap<>());
|
||||||
for (LiteBansDBObj object : objects) {
|
for (LiteBansDBObj object : objects) {
|
||||||
UUID uuid = object.getUuid();
|
UUID uuid = object.getUuid();
|
||||||
String name = playerNames.getOrDefault(uuid, uuid.toString());
|
String name = playerNames.getOrDefault(uuid, uuid.toString());
|
||||||
|
@ -97,7 +97,8 @@ public class TownyData extends PluginData {
|
|||||||
|
|
||||||
TownsAccordion townsAccordion = new TownsAccordion(
|
TownsAccordion townsAccordion = new TownsAccordion(
|
||||||
towns,
|
towns,
|
||||||
analysisData.getValue(AnalysisKeys.PLAYERS_MUTATOR).orElse(new PlayersMutator(new ArrayList<>()))
|
Optional.ofNullable(analysisData).flatMap(c -> c.getValue(AnalysisKeys.PLAYERS_MUTATOR))
|
||||||
|
.orElse(new PlayersMutator(new ArrayList<>()))
|
||||||
);
|
);
|
||||||
|
|
||||||
analysisContainer.addHtml("townAccordion", townsAccordion.toHtml());
|
analysisContainer.addHtml("townAccordion", townsAccordion.toHtml());
|
||||||
|
@ -9,7 +9,6 @@ import com.djrapitops.plan.data.element.InspectContainer;
|
|||||||
import com.djrapitops.plan.data.plugin.ContainerSize;
|
import com.djrapitops.plan.data.plugin.ContainerSize;
|
||||||
import com.djrapitops.plan.data.plugin.PluginData;
|
import com.djrapitops.plan.data.plugin.PluginData;
|
||||||
import com.djrapitops.plan.data.store.keys.AnalysisKeys;
|
import com.djrapitops.plan.data.store.keys.AnalysisKeys;
|
||||||
import com.djrapitops.plan.data.store.mutators.PlayersMutator;
|
|
||||||
import com.djrapitops.plan.system.cache.DataCache;
|
import com.djrapitops.plan.system.cache.DataCache;
|
||||||
import com.djrapitops.plan.utilities.FormatUtils;
|
import com.djrapitops.plan.utilities.FormatUtils;
|
||||||
import com.djrapitops.plan.utilities.html.icon.Color;
|
import com.djrapitops.plan.utilities.html.icon.Color;
|
||||||
@ -50,10 +49,11 @@ public class VaultEcoData extends PluginData {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AnalysisContainer getServerData(Collection<UUID> collection, AnalysisContainer analysisContainer) {
|
public AnalysisContainer getServerData(Collection<UUID> collection, AnalysisContainer analysisContainer) {
|
||||||
List<FakeOfflinePlayer> offlinePlayers = analysisData.getValue(AnalysisKeys.PLAYERS_MUTATOR)
|
List<FakeOfflinePlayer> offlinePlayers = Optional.ofNullable(analysisData)
|
||||||
.map(PlayersMutator::all).orElse(new ArrayList<>())
|
.flatMap(c -> c.getValue(AnalysisKeys.PLAYERS_MUTATOR))
|
||||||
.stream().map(FakeOfflinePlayer::new)
|
.map(mutator -> mutator.all().stream().map(FakeOfflinePlayer::new)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList()))
|
||||||
|
.orElse(new ArrayList<>());
|
||||||
|
|
||||||
Map<UUID, String> balances = new HashMap<>();
|
Map<UUID, String> balances = new HashMap<>();
|
||||||
double totalBalance = 0.0;
|
double totalBalance = 0.0;
|
||||||
|
@ -9,7 +9,6 @@ import com.djrapitops.plan.data.element.InspectContainer;
|
|||||||
import com.djrapitops.plan.data.plugin.ContainerSize;
|
import com.djrapitops.plan.data.plugin.ContainerSize;
|
||||||
import com.djrapitops.plan.data.plugin.PluginData;
|
import com.djrapitops.plan.data.plugin.PluginData;
|
||||||
import com.djrapitops.plan.data.store.keys.AnalysisKeys;
|
import com.djrapitops.plan.data.store.keys.AnalysisKeys;
|
||||||
import com.djrapitops.plan.data.store.mutators.PlayersMutator;
|
|
||||||
import com.djrapitops.plan.system.cache.DataCache;
|
import com.djrapitops.plan.system.cache.DataCache;
|
||||||
import com.djrapitops.pluginbridge.plan.FakeOfflinePlayer;
|
import com.djrapitops.pluginbridge.plan.FakeOfflinePlayer;
|
||||||
import net.milkbowl.vault.permission.Permission;
|
import net.milkbowl.vault.permission.Permission;
|
||||||
@ -49,10 +48,11 @@ public class VaultPermData extends PluginData {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AnalysisContainer getServerData(Collection<UUID> collection, AnalysisContainer analysisContainer) {
|
public AnalysisContainer getServerData(Collection<UUID> collection, AnalysisContainer analysisContainer) {
|
||||||
List<FakeOfflinePlayer> offlinePlayers = analysisData.getValue(AnalysisKeys.PLAYERS_MUTATOR)
|
List<FakeOfflinePlayer> offlinePlayers = Optional.ofNullable(analysisData)
|
||||||
.map(PlayersMutator::all).orElse(new ArrayList<>())
|
.flatMap(c -> c.getValue(AnalysisKeys.PLAYERS_MUTATOR))
|
||||||
.stream().map(FakeOfflinePlayer::new)
|
.map(mutator -> mutator.all().stream().map(FakeOfflinePlayer::new)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList()))
|
||||||
|
.orElse(new ArrayList<>());
|
||||||
|
|
||||||
Map<UUID, String> groups = new HashMap<>();
|
Map<UUID, String> groups = new HashMap<>();
|
||||||
for (FakeOfflinePlayer p : offlinePlayers) {
|
for (FakeOfflinePlayer p : offlinePlayers) {
|
||||||
|
Loading…
Reference in New Issue
Block a user