diff --git a/dependency-reduced-pom.xml b/dependency-reduced-pom.xml
index 7cab65a..7978100 100644
--- a/dependency-reduced-pom.xml
+++ b/dependency-reduced-pom.xml
@@ -23,21 +23,30 @@
shade
-
-
-
- com.gmail.artemis.the.gr8.playerstats.Main
-
-
-
-
- org.jetbrains:annotations
- META-INF/versions/**
-
-
-
+
+
+
+ com.gmail.artemis.the.gr8.playerstats.Main
+
+
+
+
+ org.jetbrains:annotations
+
+
+
+
+ *:*
+
+ META-INF/versions/**
+ META-INF/maven/com.tchristofferson/**
+ images/**
+
+
+
+
diff --git a/pom.xml b/pom.xml
index d61f77e..31f4bfb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -92,23 +92,32 @@
shade
-
-
-
- com.gmail.artemis.the.gr8.playerstats.Main
-
-
-
-
- org.jetbrains:annotations
- META-INF/versions/**
-
-
-
+
+
+
+ com.gmail.artemis.the.gr8.playerstats.Main
+
+
+
+
+ org.jetbrains:annotations
+
+
+
+
+ *:*
+
+ META-INF/versions/**
+ META-INF/maven/com.tchristofferson/**
+ images/**
+
+
+
+
-
\ No newline at end of file
diff --git a/src/main/java/com/gmail/artemis/the/gr8/playerstats/config/ConfigHandler.java b/src/main/java/com/gmail/artemis/the/gr8/playerstats/config/ConfigHandler.java
index 52de2e3..3fa03d3 100644
--- a/src/main/java/com/gmail/artemis/the/gr8/playerstats/config/ConfigHandler.java
+++ b/src/main/java/com/gmail/artemis/the/gr8/playerstats/config/ConfigHandler.java
@@ -56,14 +56,12 @@ public class ConfigHandler {
}
try {
config = YamlConfiguration.loadConfiguration(configFile);
+ return true;
}
catch (IllegalArgumentException e) {
MyLogger.logException(e, "ConfigHandler", "reloadConfig");
return false;
}
- //TODO Move this to ReloadThread
- MyLogger.setDebugLevel(getDebugLevel());
- return true;
}
/** Returns the desired debugging level.
diff --git a/src/main/java/com/gmail/artemis/the/gr8/playerstats/msg/MessageWriter.java b/src/main/java/com/gmail/artemis/the/gr8/playerstats/msg/MessageWriter.java
index 5f4957c..00270a4 100644
--- a/src/main/java/com/gmail/artemis/the/gr8/playerstats/msg/MessageWriter.java
+++ b/src/main/java/com/gmail/artemis/the/gr8/playerstats/msg/MessageWriter.java
@@ -30,7 +30,6 @@ public class MessageWriter {
getComponentFactory();
}
- //TODO Make ReloadThread do an update
public static void updateComponentFactory() {
getComponentFactory();
}
@@ -55,27 +54,12 @@ public class MessageWriter {
"your request will be processed when it is done!", isBukkitConsole);
}
- public TextComponent partiallyReloaded(boolean isBukkitConsole) {
- return componentFactory.msg(
- "The reload process was interrupted. " +
- "If you notice unexpected behavior, " +
- "please reload PlayerStats again to fix it!", isBukkitConsole);
- }
-
- public TextComponent interruptedRequest() {
- return componentFactory.msg("Your request was interrupted, please try again in a moment!", false);
- }
-
public TextComponent waitAMoment(boolean longWait, boolean isBukkitConsole) {
String msg = longWait ? "Calculating statistics, this may take a minute..." :
"Calculating statistics, this may take a few moments...";
return componentFactory.msg(msg, isBukkitConsole);
}
- public TextComponent formatExceptions(@NotNull String exception, boolean isBukkitConsole) {
- return componentFactory.msg(exception, isBukkitConsole);
- }
-
public TextComponent missingStatName(boolean isBukkitConsole) {
return componentFactory.msg(
"Please provide a valid statistic name!", isBukkitConsole);
diff --git a/src/main/java/com/gmail/artemis/the/gr8/playerstats/reload/ReloadThread.java b/src/main/java/com/gmail/artemis/the/gr8/playerstats/reload/ReloadThread.java
index 70e1a32..1b8a75f 100644
--- a/src/main/java/com/gmail/artemis/the/gr8/playerstats/reload/ReloadThread.java
+++ b/src/main/java/com/gmail/artemis/the/gr8/playerstats/reload/ReloadThread.java
@@ -12,11 +12,9 @@ import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
-import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
-import java.util.ConcurrentModificationException;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
@@ -54,74 +52,56 @@ public class ReloadThread extends Thread {
long time = System.currentTimeMillis();
MyLogger.threadStart(this.getName());
- //if reload is triggered by /statreload (aka this thread does not have ID number 1)...
- if (reloadThreadID != 1) {
- if (statThread != null && statThread.isAlive()) {
- statThread.stopThread();
- return;
-
- /*
- try {
- MyLogger.waitingForOtherThread(this.getName(), statThread.getName());
- statThread.join();
- } catch (InterruptedException e) {
- MyLogger.logException(e, "ReloadThread", "run(), trying to join" + statThread.getName());
- throw new RuntimeException(e);
- }
- */
- }
- MyLogger.logMsg("Reloading!", false);
- if (config.reloadConfig()) {
- boolean isBukkitConsole = sender instanceof ConsoleCommandSender && Bukkit.getName().equalsIgnoreCase("CraftBukkit");
-
- try {
- OfflinePlayerHandler.updateOfflinePlayerList(getPlayerMap());
- }
- catch (ConcurrentModificationException e) {
- MyLogger.logException(e, "ReloadThread", "run(), trying to update OfflinePlayerList during a reload");
- if (sender != null) {
- adventure.sender(sender).sendMessage(messageWriter.partiallyReloaded(isBukkitConsole));
- }
- }
-
- MyLogger.logTimeTaken("ReloadThread", ("loaded " + OfflinePlayerHandler.getOfflinePlayerCount() + " offline players"), time);
- if (sender != null) {
- adventure.sender(sender).sendMessage(messageWriter.reloadedConfig(isBukkitConsole));
- }
+ if (statThread != null && statThread.isAlive()) {
+ try {
+ MyLogger.waitingForOtherThread(this.getName(), statThread.getName());
+ statThread.join();
+ } catch (InterruptedException e) {
+ MyLogger.logException(e, "ReloadThread", "run(), trying to join" + statThread.getName());
+ throw new RuntimeException(e);
}
}
- //during first start-up...
- else {
- try {
- OfflinePlayerHandler.updateOfflinePlayerList(getPlayerMap());
- ThreadManager.recordCalcTime(System.currentTimeMillis() - time);
- MyLogger.logTimeTaken("ReloadThread",
- ("loaded " + OfflinePlayerHandler.getOfflinePlayerCount() + " offline players"), time);
- }
- catch (ConcurrentModificationException e) {
- MyLogger.logException(e, "ReloadThread", "run(), trying to update OfflinePlayerList during first start-up");
+
+ if (reloadThreadID != 1 && config.reloadConfig()) { //during a reload
+ MyLogger.logMsg("Reloading!", false);
+ MyLogger.setDebugLevel(config.getDebugLevel());
+ MessageWriter.updateComponentFactory();
+ loadOfflinePlayers();
+
+ boolean isBukkitConsole = sender instanceof ConsoleCommandSender && Bukkit.getName().equalsIgnoreCase("CraftBukkit");
+ if (sender != null) {
+ adventure.sender(sender).sendMessage(
+ messageWriter.reloadedConfig(isBukkitConsole));
}
}
+ else { //during first start-up
+ MyLogger.setDebugLevel(config.getDebugLevel());
+ loadOfflinePlayers();
+ ThreadManager.recordCalcTime(System.currentTimeMillis() - time);
+ }
}
- private @NotNull ConcurrentHashMap getPlayerMap() throws ConcurrentModificationException {
+ private void loadOfflinePlayers() {
long time = System.currentTimeMillis();
OfflinePlayer[] offlinePlayers;
if (config.whitelistOnly()) {
offlinePlayers = Bukkit.getWhitelistedPlayers().toArray(OfflinePlayer[]::new);
- MyLogger.logTimeTaken("ReloadThread", "retrieved whitelist", time, DebugLevel.MEDIUM);
+ MyLogger.logTimeTaken("ReloadThread",
+ "retrieved whitelist", time, DebugLevel.MEDIUM);
}
else if (config.excludeBanned()) {
Set bannedPlayers = Bukkit.getBannedPlayers();
offlinePlayers = Arrays.stream(Bukkit.getOfflinePlayers())
.parallel()
.filter(offlinePlayer -> !bannedPlayers.contains(offlinePlayer)).toArray(OfflinePlayer[]::new);
- MyLogger.logTimeTaken("ReloadThread", "retrieved banlist", time, DebugLevel.MEDIUM);
+ MyLogger.logTimeTaken("ReloadThread",
+ "retrieved banlist", time, DebugLevel.MEDIUM);
}
else {
offlinePlayers = Bukkit.getOfflinePlayers();
- MyLogger.logTimeTaken("ReloadThread", "retrieved list of Offline Players", time, DebugLevel.MEDIUM);
+ MyLogger.logTimeTaken("ReloadThread",
+ "retrieved list of Offline Players", time, DebugLevel.MEDIUM);
}
int size = offlinePlayers != null ? offlinePlayers.length : 16;
@@ -129,23 +109,11 @@ public class ReloadThread extends Thread {
ReloadAction task = new ReloadAction(threshold, offlinePlayers, config.getLastPlayedLimit(), playerMap);
MyLogger.actionCreated((offlinePlayers != null) ? offlinePlayers.length : 0);
-
ForkJoinPool.commonPool().invoke(task);
MyLogger.actionFinished(1);
+ MyLogger.logTimeTaken("ReloadThread",
+ ("loaded " + OfflinePlayerHandler.getOfflinePlayerCount() + " offline players"), time);
- return generateFakeExtraPlayers(playerMap, 10);
- }
-
- //generate fake extra players for PlayerStats, by looping over the real offlinePlayers multiple times
- private @NotNull ConcurrentHashMap generateFakeExtraPlayers(@NotNull ConcurrentHashMap realPlayers, int loops) {
- if (loops == 0 || loops == 1) return realPlayers;
-
- ConcurrentHashMap newPlayerMap = new ConcurrentHashMap<>(realPlayers.size() * loops);
- for (int i = 0; i < loops; i++) {
- for (String key : realPlayers.keySet()) {
- newPlayerMap.put(key + i, realPlayers.get(key));
- }
- }
- return newPlayerMap;
+ OfflinePlayerHandler.updateOfflinePlayerList(playerMap);
}
}
\ No newline at end of file
diff --git a/src/main/java/com/gmail/artemis/the/gr8/playerstats/statistic/StatThread.java b/src/main/java/com/gmail/artemis/the/gr8/playerstats/statistic/StatThread.java
index 02bb5ff..2760976 100644
--- a/src/main/java/com/gmail/artemis/the/gr8/playerstats/statistic/StatThread.java
+++ b/src/main/java/com/gmail/artemis/the/gr8/playerstats/statistic/StatThread.java
@@ -10,10 +10,7 @@ import com.gmail.artemis.the.gr8.playerstats.utils.MyLogger;
import com.gmail.artemis.the.gr8.playerstats.utils.OfflinePlayerHandler;
import com.google.common.collect.ImmutableList;
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
-import org.bukkit.Bukkit;
import org.bukkit.OfflinePlayer;
-import org.bukkit.command.CommandSender;
-import org.bukkit.command.ConsoleCommandSender;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -24,7 +21,6 @@ import java.util.stream.Collectors;
public class StatThread extends Thread {
- private volatile boolean keepRunning = true;
private final int threshold;
private final StatRequest request;
@@ -51,12 +47,6 @@ public class StatThread extends Thread {
MyLogger.threadCreated(this.getName());
}
- public void stopThread() {
- MyLogger.logMsg("stopThread() is being executed by: " + Thread.currentThread().getName(), false);
- keepRunning = false;
- MyLogger.logMsg("StatThread has been forced to stop!", true);
- }
-
//what the thread will do once started
@Override
public void run() throws IllegalStateException, NullPointerException {
@@ -69,54 +59,45 @@ public class StatThread extends Thread {
throw new NullPointerException("No statistic request was found!");
}
- CommandSender sender = request.getCommandSender();
- boolean isBukkitConsole = sender instanceof ConsoleCommandSender && Bukkit.getName().equalsIgnoreCase("CraftBukkit");
if (reloadThread != null && reloadThread.isAlive()) {
try {
MyLogger.waitingForOtherThread(this.getName(), reloadThread.getName());
adventure.sender(request.getCommandSender())
.sendMessage(messageWriter
- .stillReloading(isBukkitConsole));
+ .stillReloading(request.isBukkitConsoleSender()));
reloadThread.join();
- //TODO Add timeout after which it checks again and potentially aborts mission
} catch (InterruptedException e) {
MyLogger.logException(e, "StatThread", "Trying to join" + reloadThread.getName());
throw new RuntimeException(e);
}
}
- //TODO Evaluate if this really does something
- while (keepRunning) {
- Target selection = request.getSelection();
- if (selection == Target.PLAYER) {
- adventure.sender(sender).sendMessage(
- messageWriter.formatPlayerStat(getIndividualStat(), request));
- }
- else {
- if (ThreadManager.getLastRecordedCalcTime() > 2000) {
- adventure.sender(sender).sendMessage(
- messageWriter.waitAMoment(ThreadManager.getLastRecordedCalcTime() > 20000, isBukkitConsole));
- }
- try {
- if (selection == Target.TOP) {
- adventure.sender(sender).sendMessage(
- messageWriter.formatTopStats(getTopStats(), request));
- } else {
- adventure.sender(sender).sendMessage(
- messageWriter.formatServerStat(getServerTotal(), request));
- }
- } catch (ConcurrentModificationException e) {
- if (!isBukkitConsole) {
- adventure.sender(sender).sendMessage(
- messageWriter.unknownError(false));
- }
- }
- }
- return;
+ Target selection = request.getSelection();
+ if (selection == Target.PLAYER) {
+ adventure.sender(request.getCommandSender()).sendMessage(
+ messageWriter.formatPlayerStat(getIndividualStat(), request));
+ }
+ else {
+ if (ThreadManager.getLastRecordedCalcTime() > 2000) {
+ adventure.sender(request.getCommandSender()).sendMessage(
+ messageWriter.waitAMoment(ThreadManager.getLastRecordedCalcTime() > 20000, request.isBukkitConsoleSender()));
+ }
+ try {
+ if (selection == Target.TOP) {
+ adventure.sender(request.getCommandSender()).sendMessage(
+ messageWriter.formatTopStats(getTopStats(), request));
+ } else {
+ adventure.sender(request.getCommandSender()).sendMessage(
+ messageWriter.formatServerStat(getServerTotal(), request));
+ }
+ } catch (ConcurrentModificationException e) {
+ if (!request.isConsoleSender()) {
+ adventure.sender(request.getCommandSender()).sendMessage(
+ messageWriter.unknownError(false));
+ }
+ }
}
- MyLogger.logMsg("(" + Thread.currentThread().getName() + ") shutting down...", false);
- adventure.sender(sender).sendMessage(messageWriter.interruptedRequest());
}
private LinkedHashMap getTopStats() throws ConcurrentModificationException {