diff --git a/.gitignore b/.gitignore
index af949cf..47188b6 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,8 @@
-target/
+/spigot-server/
+/target/
+/.settings/
+.project
+.classpath
# Created by https://www.gitignore.io/api/java,macos,intellij
# Edit at https://www.gitignore.io/?templates=java,macos,intellij
@@ -123,7 +127,7 @@ hs_err_pid*
.LSOverride
# Icon must end with two \r
-Icon
+Icon
# Thumbnails
._*
diff --git a/libs/ProtocolSupport-LATEST.jar b/libs/ProtocolSupport-LATEST.jar
deleted file mode 100644
index 1eae141..0000000
Binary files a/libs/ProtocolSupport-LATEST.jar and /dev/null differ
diff --git a/libs/TinyProtocol-1.0.0-SNAPSHOT.jar b/libs/com/comphenix/tinyprotocol/TinyProtocol/1.0.0-SNAPSHOT/TinyProtocol-1.0.0-SNAPSHOT.jar
similarity index 100%
rename from libs/TinyProtocol-1.0.0-SNAPSHOT.jar
rename to libs/com/comphenix/tinyprotocol/TinyProtocol/1.0.0-SNAPSHOT/TinyProtocol-1.0.0-SNAPSHOT.jar
diff --git a/libs/com/comphenix/tinyprotocol/TinyProtocol/1.0.0-SNAPSHOT/TinyProtocol-1.0.0-SNAPSHOT.pom b/libs/com/comphenix/tinyprotocol/TinyProtocol/1.0.0-SNAPSHOT/TinyProtocol-1.0.0-SNAPSHOT.pom
new file mode 100644
index 0000000..3346ae6
--- /dev/null
+++ b/libs/com/comphenix/tinyprotocol/TinyProtocol/1.0.0-SNAPSHOT/TinyProtocol-1.0.0-SNAPSHOT.pom
@@ -0,0 +1,9 @@
+
+
+ 4.0.0
+ com.comphenix.tinyprotocol
+ TinyProtocol
+ 1.0.0-SNAPSHOT
+ POM was created from install:install-file
+
diff --git a/libs/com/comphenix/tinyprotocol/TinyProtocol/1.0.0-SNAPSHOT/maven-metadata-local.xml b/libs/com/comphenix/tinyprotocol/TinyProtocol/1.0.0-SNAPSHOT/maven-metadata-local.xml
new file mode 100644
index 0000000..fde9dd1
--- /dev/null
+++ b/libs/com/comphenix/tinyprotocol/TinyProtocol/1.0.0-SNAPSHOT/maven-metadata-local.xml
@@ -0,0 +1,24 @@
+
+
+ com.comphenix.tinyprotocol
+ TinyProtocol
+ 1.0.0-SNAPSHOT
+
+
+ true
+
+ 20191221141945
+
+
+ jar
+ 1.0.0-SNAPSHOT
+ 20191221141945
+
+
+ pom
+ 1.0.0-SNAPSHOT
+ 20191221141945
+
+
+
+
diff --git a/libs/com/comphenix/tinyprotocol/TinyProtocol/maven-metadata-local.xml b/libs/com/comphenix/tinyprotocol/TinyProtocol/maven-metadata-local.xml
new file mode 100644
index 0000000..abbb65b
--- /dev/null
+++ b/libs/com/comphenix/tinyprotocol/TinyProtocol/maven-metadata-local.xml
@@ -0,0 +1,11 @@
+
+
+ com.comphenix.tinyprotocol
+ TinyProtocol
+
+
+ 1.0.0-SNAPSHOT
+
+ 20191221141945
+
+
diff --git a/libs/BungeeYAML-1.0.jar b/libs/fr/onecraft/BungeeYAML/1.0.0/BungeeYAML-1.0.0.jar
similarity index 100%
rename from libs/BungeeYAML-1.0.jar
rename to libs/fr/onecraft/BungeeYAML/1.0.0/BungeeYAML-1.0.0.jar
diff --git a/libs/fr/onecraft/BungeeYAML/1.0.0/BungeeYAML-1.0.0.pom b/libs/fr/onecraft/BungeeYAML/1.0.0/BungeeYAML-1.0.0.pom
new file mode 100644
index 0000000..b4700b7
--- /dev/null
+++ b/libs/fr/onecraft/BungeeYAML/1.0.0/BungeeYAML-1.0.0.pom
@@ -0,0 +1,9 @@
+
+
+ 4.0.0
+ fr.onecraft
+ BungeeYAML
+ 1.0.0
+ POM was created from install:install-file
+
diff --git a/libs/fr/onecraft/BungeeYAML/maven-metadata-local.xml b/libs/fr/onecraft/BungeeYAML/maven-metadata-local.xml
new file mode 100644
index 0000000..4fbd9a0
--- /dev/null
+++ b/libs/fr/onecraft/BungeeYAML/maven-metadata-local.xml
@@ -0,0 +1,12 @@
+
+
+ fr.onecraft
+ BungeeYAML
+
+ 1.0.0
+
+ 1.0.0
+
+ 20191221141825
+
+
diff --git a/libs/XCore-1.0.jar b/libs/fr/onecraft/XCore/1.0.0/XCore-1.0.0.jar
similarity index 100%
rename from libs/XCore-1.0.jar
rename to libs/fr/onecraft/XCore/1.0.0/XCore-1.0.0.jar
diff --git a/libs/fr/onecraft/XCore/1.0.0/XCore-1.0.0.pom b/libs/fr/onecraft/XCore/1.0.0/XCore-1.0.0.pom
new file mode 100644
index 0000000..a4544dd
--- /dev/null
+++ b/libs/fr/onecraft/XCore/1.0.0/XCore-1.0.0.pom
@@ -0,0 +1,9 @@
+
+
+ 4.0.0
+ fr.onecraft
+ XCore
+ 1.0.0
+ POM was created from install:install-file
+
diff --git a/libs/fr/onecraft/XCore/maven-metadata-local.xml b/libs/fr/onecraft/XCore/maven-metadata-local.xml
new file mode 100644
index 0000000..eb331a6
--- /dev/null
+++ b/libs/fr/onecraft/XCore/maven-metadata-local.xml
@@ -0,0 +1,12 @@
+
+
+ fr.onecraft
+ XCore
+
+ 1.0.0
+
+ 1.0.0
+
+ 20191221141700
+
+
diff --git a/pom.xml b/pom.xml
index 031bd65..fb2a4a2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,285 +1,254 @@
- 4.0.0
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ 4.0.0
- fr.onecraft
- ClientStats
- 2.9.0
+ fr.onecraft
+ ClientStats
+ 2.9.1-SNAPSHOT
-
-
- clientstats
+
+
+ clientstats
-
- UTF-8
- ${projectEncoding}
- ${projectEncoding}
+
+ UTF-8
+ ${projectEncoding}
+ ${projectEncoding}
-
- 1.7
+
+ 1.8
-
- 1.14.4-R0.1-SNAPSHOT
+
+ 1.14.4-R0.1-SNAPSHOT
-
- 1.14-SNAPSHOT
+
+ 1.14-SNAPSHOT
-
- ${basedir}/../../Libs
+
-
- ${basedir}/../../../MC/Plugins
-
+
+ ${project.name}
+ src/main/java
+ clean package
-
- ${project.name}
- src/main/java
- clean install
+
+
+ .
+ true
+ src/main/resources/
+
+ **/*.yml
+
+
+
-
-
- .
- true
- src/main/resources/
-
- **/*.yml
-
-
-
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 2.3.2
+
+ ${jdkVersion}
+ ${jdkVersion}
+ UTF-8
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 2.4.1
+
+ false
+
+
+ com.github.ProtocolSupport:ProtocolSupport
+
+ com.comphenix.tinyprotocol:TinyProtocol
+ com.google.code.gson:gson
+ org.apache.commons:commons-lang3
+ it.unimi.dsi:fastutil
+
+
+
+
+ fr.onecraft.core
+ fr.onecraft.${pluginPackage}.core
+
+
+ fr.onecraft.config
+ fr.onecraft.${pluginPackage}.bungee.config
+
+
+
+
+ *:*
+
+ META-INF/
+ javax/annotation/**
+
+
+
+
+
+
+ package
+
+ shade
+
+
+
+
+
+
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 2.3.2
-
- ${jdkVersion}
- ${jdkVersion}
- UTF-8
-
-
-
- org.apache.maven.plugins
- maven-shade-plugin
- 2.4.1
-
- true
- false
-
-
- fr.onecraft.core
- fr.onecraft.${pluginPackage}.core
-
-
- fr.onecraft.config
- fr.onecraft.${pluginPackage}.bungee.config
-
-
-
-
- *:*
-
- META-INF/
- javax/annotation/**
-
-
-
-
-
-
- package
-
- shade
-
-
-
-
-
- maven-resources-plugin
- 2.6
-
-
- copy-files-on-build
- package
-
- copy-resources
-
-
- ${export}
-
-
- ${project.build.directory}
- ${project.build.finalName}.jar
- false
-
-
-
-
-
-
-
- maven-dependency-plugin
-
-
- process-sources
-
- copy-dependencies
-
-
- XCore, ProtocolSupport, BungeeYAML, TinyProtocol
- ${project.basedir}/libs/
-
-
-
-
+
+
+ profile-dev
+
+ true
+
+
+
+
+ fr.onecraft
+ XCore
+ 1.0.0
+
+
+
+ com.github.ProtocolSupport
+ ProtocolSupport
+ 2356a84f71
+
+
+
+ fr.onecraft
+ BungeeYAML
+ 1.0.0
+
+
+
+ com.comphenix.tinyprotocol
+ TinyProtocol
+ 1.0.0-SNAPSHOT
+
+
+
+
+ profile-test
+
+
+
+ fr.onecraft
+ XCore
+ 1.0.0
+
+
+
+ com.github.ProtocolSupport
+ ProtocolSupport
+ 2356a84f71
+
+
+
+ fr.onecraft
+ BungeeYAML
+ 1.0.0
+
+
+
+ com.comphenix.tinyprotocol
+ TinyProtocol
+ 1.0.0-SNAPSHOT
+
+
+
+
-
-
-
-
-
- profile-dev
-
- true
-
-
-
-
- fr.onecraft
- XCore
- 1.0
- compile
-
-
-
- protocolsupport
- ProtocolSupport
- LATEST
- system
- ${libs}/ProtocolSupport/latest/ProtocolSupport.jar
-
-
-
- fr.onecraft
- BungeeYAML
- 1.0
- compile
-
-
-
- com.comphenix.tinyprotocol
- TinyProtocol
- 1.0.0-SNAPSHOT
- compile
-
-
-
-
- profile-test
-
-
-
- fr.onecraft
- XCore
- 1.0
- system
- ${project.basedir}/libs/XCore-1.0.jar
-
-
-
- protocolsupport
- ProtocolSupport
- LATEST
- system
- ${project.basedir}/libs/ProtocolSupport-LATEST.jar
-
-
-
- fr.onecraft
- BungeeYAML
- 1.0
- system
- ${project.basedir}/libs/BungeeYAML-1.0.jar
-
-
-
- com.comphenix.tinyprotocol
- TinyProtocol
- 1.0.0-SNAPSHOT
- system
- ${project.basedir}/libs/TinyProtocol-1.0.0-SNAPSHOT.jar
-
-
-
-
-
-
-
-
- spigot-repo
- https://hub.spigotmc.org/nexus/content/repositories/snapshots/
-
-
-
- bungeecord-repo
- https://oss.sonatype.org/content/repositories/snapshots
-
-
-
- dmulloy2-repo
- http://repo.dmulloy2.net/content/groups/public/
-
-
-
- viaversion-repo
- https://repo.viaversion.com/
-
-
-
-
-
- org.spigotmc
- spigot-api
- ${spigotVersion}
- provided
-
-
-
- net.md-5
- bungeecord-api
- ${bungeeVersion}
- provided
-
-
-
- com.comphenix.protocol
- ProtocolLib-API
- 4.3.0
- provided
-
-
-
- us.myles
- viaversion
- 2.1.3
- provided
-
-
-
- junit
- junit
- 4.12
- test
-
-
-
- org.mockito
- mockito-all
- RELEASE
- test
-
-
+
+
+
+ spigot-repo
+ https://hub.spigotmc.org/nexus/content/repositories/snapshots/
+
+
+
+ bungeecord-repo
+ https://oss.sonatype.org/content/repositories/snapshots
+
+
+
+ dmulloy2-repo
+ http://repo.dmulloy2.net/content/groups/public/
+
+
+
+ viaversion-repo
+ https://repo.viaversion.com/
+
+
+
+ jitpack.io
+ https://jitpack.io
+
+
+
+ local-repo
+ file://${project.basedir}/libs
+
+
+
+
+
+ org.spigotmc
+ spigot-api
+ ${spigotVersion}
+ provided
+
+
+
+ net.md-5
+ bungeecord-api
+ ${bungeeVersion}
+ provided
+
+
+
+ com.comphenix.protocol
+ ProtocolLib-API
+ 4.3.0
+ provided
+
+
+
+ us.myles
+ viaversion
+ 2.1.3
+ provided
+
+
+
+
+ org.apache.httpcomponents
+ httpclient
+ 4.5.10
+
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+
+ org.mockito
+ mockito-all
+ 1.10.19
+ test
+
+
diff --git a/src/main/java/fr/onecraft/clientstats/ClientStats.java b/src/main/java/fr/onecraft/clientstats/ClientStats.java
index 361a50b..8106ecc 100644
--- a/src/main/java/fr/onecraft/clientstats/ClientStats.java
+++ b/src/main/java/fr/onecraft/clientstats/ClientStats.java
@@ -10,11 +10,11 @@ public class ClientStats {
private static ClientStatsAPI api;
public static ClientStatsAPI getApi() {
- return api;
+ return api;
}
public static void setApi(ClientStatsAPI api) {
- ClientStats.api = api;
+ ClientStats.api = api;
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/ClientStatsAPI.java b/src/main/java/fr/onecraft/clientstats/ClientStatsAPI.java
index ab62ffe..84f9e6e 100644
--- a/src/main/java/fr/onecraft/clientstats/ClientStatsAPI.java
+++ b/src/main/java/fr/onecraft/clientstats/ClientStatsAPI.java
@@ -1,15 +1,16 @@
package fr.onecraft.clientstats;
-import fr.onecraft.clientstats.common.base.ServerType;
-import fr.onecraft.clientstats.common.user.MixedUser;
-
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import java.text.DateFormat;
import java.util.Map;
import java.util.Map.Entry;
import java.util.UUID;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import fr.onecraft.clientstats.common.base.ServerType;
+import fr.onecraft.clientstats.common.user.MixedUser;
+
public interface ClientStatsAPI {
/**
@@ -83,7 +84,8 @@ public interface ClientStatsAPI {
/**
* Get date when maximum of online players was reached
*
- * Number returned is the amount of milliseconds since midnight, January 1, 1970 UTC
+ * Number returned is the amount of milliseconds since midnight, January 1, 1970
+ * UTC
*
* @return Timestamp of maximum player count
*/
@@ -145,7 +147,8 @@ public interface ClientStatsAPI {
/**
* Get start of statistics recording
*
- * Number returned is the amount of milliseconds since midnight, January 1, 1970 UTC
+ * Number returned is the amount of milliseconds since midnight, January 1, 1970
+ * UTC
*
* @return Timestamp when the statistics started to be recorded
*/
diff --git a/src/main/java/fr/onecraft/clientstats/bukkit/BukkitAPI.java b/src/main/java/fr/onecraft/clientstats/bukkit/BukkitAPI.java
index 7f88e0d..85537ac 100644
--- a/src/main/java/fr/onecraft/clientstats/bukkit/BukkitAPI.java
+++ b/src/main/java/fr/onecraft/clientstats/bukkit/BukkitAPI.java
@@ -1,41 +1,43 @@
package fr.onecraft.clientstats.bukkit;
+import java.util.logging.Logger;
+
+import javax.annotation.Nonnull;
+
+import org.bukkit.ChatColor;
+
import fr.onecraft.clientstats.common.base.ServerType;
import fr.onecraft.clientstats.common.base.VersionProvider;
import fr.onecraft.clientstats.common.core.AbstractAPI;
-import org.bukkit.ChatColor;
-
-import javax.annotation.Nonnull;
-import java.util.logging.Logger;
public class BukkitAPI extends AbstractAPI {
private final BukkitPlugin plugin;
public BukkitAPI(VersionProvider provider, BukkitPlugin plugin) {
- super(provider, plugin);
- this.plugin = plugin;
+ super(provider, plugin);
+ this.plugin = plugin;
}
@Nonnull
@Override
public ServerType getServerType() {
- return ServerType.BUKKIT;
+ return ServerType.BUKKIT;
}
@Override
public boolean isEnabled() {
- return plugin.isEnabled();
+ return this.plugin.isEnabled();
}
@Override
public Logger getLogger() {
- return plugin.getLogger();
+ return this.plugin.getLogger();
}
@Override
public String colorize(String string) {
- return ChatColor.translateAlternateColorCodes('&', string);
+ return ChatColor.translateAlternateColorCodes('&', string);
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/bukkit/BukkitPlugin.java b/src/main/java/fr/onecraft/clientstats/bukkit/BukkitPlugin.java
index 97a60bf..ba0dd9c 100644
--- a/src/main/java/fr/onecraft/clientstats/bukkit/BukkitPlugin.java
+++ b/src/main/java/fr/onecraft/clientstats/bukkit/BukkitPlugin.java
@@ -1,133 +1,173 @@
package fr.onecraft.clientstats.bukkit;
+import java.util.List;
+import java.util.logging.Level;
+
+import org.bukkit.configuration.ConfigurationSection;
+
import fr.onecraft.clientstats.ClientStats;
import fr.onecraft.clientstats.bukkit.dispatcher.CommandDispatcher;
import fr.onecraft.clientstats.bukkit.dispatcher.EventDispatcher;
-import fr.onecraft.clientstats.bukkit.hook.detector.*;
+import fr.onecraft.clientstats.bukkit.hook.detector.ProtocolLibDetector;
+import fr.onecraft.clientstats.bukkit.hook.detector.ProtocolSupportDetector;
+import fr.onecraft.clientstats.bukkit.hook.detector.ServerDetector;
+import fr.onecraft.clientstats.bukkit.hook.detector.TinyProtocolDetector;
+import fr.onecraft.clientstats.bukkit.hook.detector.ViaProtocolDetector;
+import fr.onecraft.clientstats.bukkit.hook.detector.ViaVersionDetector;
+import fr.onecraft.clientstats.bukkit.hook.detector.ViaVersionLegacyDetector;
import fr.onecraft.clientstats.bukkit.user.BukkitUserProvider;
import fr.onecraft.clientstats.common.base.Configurable;
import fr.onecraft.clientstats.common.base.VersionProvider;
import fr.onecraft.clientstats.common.core.AbstractAPI;
+import fr.onecraft.clientstats.common.core.VersionNameProvider;
import fr.onecraft.clientstats.common.user.MixedUser;
import fr.onecraft.core.plugin.Core;
-import org.bukkit.configuration.ConfigurationSection;
-
-import java.util.List;
public class BukkitPlugin extends Core implements Configurable {
@Override
public void enable() {
- // User provider
- MixedUser.setProvider(new BukkitUserProvider(getServer()));
-
- // Version detection
- VersionProvider provider = null;
- if (ViaProtocolDetector.isUsable()) provider = ViaProtocolDetector.getProvider();
- else if (ViaVersionDetector.isUsable()) provider = ViaVersionDetector.getProvider();
- else if (ViaVersionLegacyDetector.isUsable()) provider = ViaVersionLegacyDetector.getProvider();
- else if (ProtocolSupportDetector.isUsable()) provider = ProtocolSupportDetector.getProvider();
- else if (ServerDetector.isUsable()) provider = ServerDetector.getProvider();
- else if (getConfig().getBoolean("settings.use-packets", false)) {
-
- if (ProtocolLibDetector.isUsable()) provider = ProtocolLibDetector.getProvider();
- else if (TinyProtocolDetector.isUsable()) provider = TinyProtocolDetector.getProvider();
- else {
- severe("---------------------");
- severe("\"use-packets\" is enabled, but we can't find a way to use them.");
- severe("Please install ProtocolLib to enable version detection.");
- severe("---------------------");
- }
-
- } else {
- warning("---------------------");
- warning("Your server doesn't seem to support multiple Minecraft versions.");
- warning("If it does, please enable \"use-packets\" in the config and restart the server.");
- warning("---------------------");
- }
-
- // Bukkit API
- AbstractAPI api = new BukkitAPI(provider, this);
-
- // Reload config
- api.reload();
-
- // Register Event
- new EventDispatcher(api).register();
-
- // Handle command
- new CommandDispatcher(api).register("clientstats");
-
- // Api is ready
- ClientStats.setApi(api);
+ // User provider
+ MixedUser.setProvider(new BukkitUserProvider(this.getServer()));
+
+ // Version detection
+ VersionProvider provider = null;
+ if (ViaProtocolDetector.isUsable())
+ provider = ViaProtocolDetector.getProvider();
+ else if (ViaVersionDetector.isUsable())
+ provider = ViaVersionDetector.getProvider();
+ else if (ViaVersionLegacyDetector.isUsable())
+ provider = ViaVersionLegacyDetector.getProvider();
+ else if (ProtocolSupportDetector.isUsable())
+ provider = ProtocolSupportDetector.getProvider();
+ else if (ServerDetector.isUsable())
+ provider = ServerDetector.getProvider();
+ else if (this.getConfig().getBoolean("settings.use-packets", false)) {
+
+ if (ProtocolLibDetector.isUsable())
+ provider = ProtocolLibDetector.getProvider();
+ else if (TinyProtocolDetector.isUsable())
+ provider = TinyProtocolDetector.getProvider();
+ else {
+ severe("---------------------");
+ severe("\"use-packets\" is enabled, but we can't find a way to use them.");
+ severe("Please install ProtocolLib to enable version detection.");
+ severe("---------------------");
+ }
+
+ } else {
+ warning("---------------------");
+ warning("Your server doesn't seem to support multiple Minecraft versions.");
+ warning("If it does, please enable \"use-packets\" in the config and restart the server.");
+ warning("---------------------");
+ }
+
+ // Version Provider
+ for (int i = 1; i <= 5; i++) {
+ this.getLogger().info("Reloading version list... (Attempt " + i + ")");
+ try {
+ VersionNameProvider.reload(true, this.getLogger());
+ break;
+ } catch (Exception e) {
+ this.getLogger().log(Level.SEVERE, "Unable to load version list", e);
+ }
+ }
+
+ // Bukkit API
+ AbstractAPI api = new BukkitAPI(provider, this);
+
+ // Reload config
+ api.reload();
+
+ // Register Event
+ new EventDispatcher(api).register();
+
+ // Handle command
+ new CommandDispatcher(api).register("clientstats");
+
+ // Api is ready
+ ClientStats.setApi(api);
}
@Override
- public void start() {}
+ public void start() {
+ }
@Override
public void disable() {
- // Remove api
- ClientStats.setApi(null);
+ // Remove api
+ ClientStats.setApi(null);
}
@Override
public void migrate() {
- // v2.7.3 -> v2.7.4
- Object help = getConfig().get("messages.commands.help");
- if (help instanceof List) {
- getConfig().set("messages.commands.help", null);
- ConfigurationSection cs = getConfig().getConfigurationSection("messages.commands.joined");
- if (cs != null) {
- getConfig().set("messages.commands.joined", null);
- }
- saveConfig();
- }
-
- // v2.7.6 -> v2.7.7
- String helpKey = "messages.commands.help.stats";
- String helpMsg = getConfig().getString(helpKey);
- if (helpMsg.equals("&b/{1} stats &f- Statistics since server startup")) {
- getConfig().set(helpKey, "&b/{1} stats &f- Global statistics");
- } else if (helpMsg.contains("Statistics since server startup")) {
- getConfig().set(helpKey, helpMsg.replace("Statistics since server startup", "Global statistics"));
- }
-
- // v2.7.6 -> v2.7.7
- String statsKey = "messages.commands.stats.title";
- String statsMsg = getConfig().getString(statsKey);
- if (statsMsg.equals("Statistics since server startup:")) {
- getConfig().set(statsKey, "Statistics since {1}:");
- } else if (statsMsg.contains("server startup")) {
- getConfig().set(statsKey, statsMsg.replace("server startup", "{1}"));
- }
-
+ // v2.7.3 -> v2.7.4
+ Object help = this.getConfig().get("messages.commands.help");
+ if (help instanceof List) {
+ this.getConfig().set("messages.commands.help", null);
+ ConfigurationSection cs = this.getConfig().getConfigurationSection("messages.commands.joined");
+ if (cs != null) {
+ this.getConfig().set("messages.commands.joined", null);
+ }
+ }
+
+ // v2.7.6 -> v2.7.7
+ String helpKey = "messages.commands.help.stats";
+ String helpMsg = this.getConfig().getString(helpKey);
+ if (helpMsg.equals("&b/{1} stats &f- Statistics since server startup")) {
+ this.getConfig().set(helpKey, "&b/{1} stats &f- Global statistics");
+ } else if (helpMsg.contains("Statistics since server startup")) {
+ this.getConfig().set(helpKey, helpMsg.replace("Statistics since server startup", "Global statistics"));
+ }
+
+ // v2.7.6 -> v2.7.7
+ String statsKey = "messages.commands.stats.title";
+ String statsMsg = this.getConfig().getString(statsKey);
+ if (statsMsg.equals("Statistics since server startup:")) {
+ this.getConfig().set(statsKey, "Statistics since {1}:");
+ } else if (statsMsg.contains("server startup")) {
+ this.getConfig().set(statsKey, statsMsg.replace("server startup", "{1}"));
+ }
+
+ // v2.9.0 -> v2.9.1
+ String reloadKey = "messages.reload";
+ String reloadMsg = this.getConfig().getString(reloadKey);
+ if (reloadMsg != null) {
+ this.getConfig().set(reloadKey, null);
+ this.getConfig().set("messages.reload.config", reloadMsg);
+ this.getConfig().set("messages.reload.version-start", "Reloading version name provider...");
+ this.getConfig().set("messages.reload.version-end", "Reloaded version name provider");
+ this.getConfig().set("messages.reload.version-failed",
+ "Cannot reload version name provider, version names will not work !");
+ }
+
+ this.saveConfig();
}
@Override
public void options() {
- // Copy headers and new values
- getConfig().options().copyDefaults(true).copyHeader(true);
+ // Copy headers and new values
+ this.getConfig().options().copyDefaults(true).copyHeader(true);
}
@Override
public String getConfigString(String path) {
- return getConfig().getString(path);
+ return this.getConfig().getString(path);
}
@Override
public String getConfigString(String path, String def) {
- return getConfig().getString(path, def);
+ return this.getConfig().getString(path, def);
}
@Override
public void setConfigValue(String path, Object value) {
- getConfig().set(path, value);
+ this.getConfig().set(path, value);
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/bukkit/dispatcher/CommandDispatcher.java b/src/main/java/fr/onecraft/clientstats/bukkit/dispatcher/CommandDispatcher.java
index c516ee2..305fdc6 100644
--- a/src/main/java/fr/onecraft/clientstats/bukkit/dispatcher/CommandDispatcher.java
+++ b/src/main/java/fr/onecraft/clientstats/bukkit/dispatcher/CommandDispatcher.java
@@ -1,30 +1,31 @@
package fr.onecraft.clientstats.bukkit.dispatcher;
+import java.util.List;
+
+import org.bukkit.command.Command;
+
import fr.onecraft.clientstats.ClientStatsAPI;
import fr.onecraft.clientstats.bukkit.user.BukkitUser;
import fr.onecraft.clientstats.common.core.CommandHandler;
import fr.onecraft.core.command.CommandUser;
import fr.onecraft.core.command.TabCommandRegister;
-import org.bukkit.command.Command;
-
-import java.util.List;
public class CommandDispatcher extends TabCommandRegister {
private final CommandHandler handler;
public CommandDispatcher(ClientStatsAPI plugin) {
- this.handler = new CommandHandler(plugin);
+ this.handler = new CommandHandler(plugin);
}
@Override
protected void execute(CommandUser user, List args, Command command, String alias) {
- handler.execute(BukkitUser.of(user.getSender()), args, alias);
+ this.handler.execute(BukkitUser.of(user.getSender()), args, alias);
}
@Override
public List complete(CommandUser user, List args, String token, Command cmd, String label) {
- return handler.complete(BukkitUser.of(user.getSender()), args, token);
+ return this.handler.complete(BukkitUser.of(user.getSender()), args, token);
}
}
\ No newline at end of file
diff --git a/src/main/java/fr/onecraft/clientstats/bukkit/dispatcher/EventDispatcher.java b/src/main/java/fr/onecraft/clientstats/bukkit/dispatcher/EventDispatcher.java
index 1def687..bb5d1e1 100644
--- a/src/main/java/fr/onecraft/clientstats/bukkit/dispatcher/EventDispatcher.java
+++ b/src/main/java/fr/onecraft/clientstats/bukkit/dispatcher/EventDispatcher.java
@@ -1,31 +1,32 @@
package fr.onecraft.clientstats.bukkit.dispatcher;
-import fr.onecraft.clientstats.bukkit.user.BukkitUser;
-import fr.onecraft.clientstats.common.core.AbstractAPI;
-import fr.onecraft.clientstats.common.core.EventListener;
-import fr.onecraft.core.event.EventRegister;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
+import fr.onecraft.clientstats.bukkit.user.BukkitUser;
+import fr.onecraft.clientstats.common.core.AbstractAPI;
+import fr.onecraft.clientstats.common.core.EventListener;
+import fr.onecraft.core.event.EventRegister;
+
public class EventDispatcher extends EventRegister {
private final EventListener listener;
public EventDispatcher(AbstractAPI api) {
- this.listener = new EventListener(api);
+ this.listener = new EventListener(api);
}
@EventHandler
public void on(PlayerJoinEvent e) {
- Player p = e.getPlayer();
- listener.onPlayerJoin(BukkitUser.of(p), !p.hasPlayedBefore());
+ Player p = e.getPlayer();
+ this.listener.onPlayerJoin(BukkitUser.of(p), !p.hasPlayedBefore());
}
@EventHandler
public void on(PlayerQuitEvent e) {
- listener.onPlayerQuit(BukkitUser.of(e.getPlayer()));
+ this.listener.onPlayerQuit(BukkitUser.of(e.getPlayer()));
}
}
\ No newline at end of file
diff --git a/src/main/java/fr/onecraft/clientstats/bukkit/hook/base/AbstractPacketHandler.java b/src/main/java/fr/onecraft/clientstats/bukkit/hook/base/AbstractPacketHandler.java
index b7128d2..573d975 100644
--- a/src/main/java/fr/onecraft/clientstats/bukkit/hook/base/AbstractPacketHandler.java
+++ b/src/main/java/fr/onecraft/clientstats/bukkit/hook/base/AbstractPacketHandler.java
@@ -1,16 +1,5 @@
package fr.onecraft.clientstats.bukkit.hook.base;
-import fr.onecraft.core.event.Events;
-import fr.onecraft.core.plugin.Core;
-import fr.onecraft.core.task.Tasks;
-import fr.onecraft.core.tuple.Pair;
-import org.bukkit.Bukkit;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.player.PlayerQuitEvent;
-import org.bukkit.scheduler.BukkitRunnable;
-
import java.net.InetSocketAddress;
import java.util.HashSet;
import java.util.Iterator;
@@ -19,6 +8,18 @@
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.player.PlayerQuitEvent;
+import org.bukkit.scheduler.BukkitRunnable;
+
+import fr.onecraft.core.event.Events;
+import fr.onecraft.core.plugin.Core;
+import fr.onecraft.core.task.Tasks;
+import fr.onecraft.core.tuple.Pair;
+
public abstract class AbstractPacketHandler extends AbstractProvider implements Listener {
// Protocol map
@@ -29,57 +30,61 @@ public abstract class AbstractPacketHandler extends AbstractProvider implements
public AbstractPacketHandler() {
- super();
+ super();
- Events.register(this);
+ Events.register(this);
- registerPacketListener();
+ this.registerPacketListener();
- Core.warning("The use of " + getProviderName() + " is experimental, it may not be stable and efficient for large servers.");
+ Core.warning("The use of " + this.getProviderName()
+ + " is experimental, it may not be stable and efficient for large servers.");
- Tasks.after(1, TimeUnit.MINUTES).every(1, TimeUnit.MINUTES).async(new BukkitRunnable() {
- @Override
- public void run() {
+ Tasks.after(1, TimeUnit.MINUTES).every(1, TimeUnit.MINUTES).async(new BukkitRunnable() {
+ @Override
+ public void run() {
- // In addresses we have all the current connected addresses
- Set addresses = new HashSet<>();
- for (Player player : Bukkit.getOnlinePlayers()) {
- addresses.add(player.getAddress());
- }
+ // In addresses we have all the current connected
+ // addresses
+ Set addresses = new HashSet<>();
+ for (Player player : Bukkit.getOnlinePlayers()) {
+ addresses.add(player.getAddress());
+ }
- Iterator>> it = versions.entrySet().iterator();
- long now = System.currentTimeMillis();
+ Iterator>> it = AbstractPacketHandler.this.versions
+ .entrySet().iterator();
+ long now = System.currentTimeMillis();
- while (it.hasNext()) {
- Map.Entry> entry = it.next();
- // Address tried to connect, but timed out (still not logged in)
- if (entry.getValue().getRight() + TIMEOUT < now && !addresses.contains(entry.getKey())) {
- it.remove();
- }
- }
- }
- });
+ while (it.hasNext()) {
+ Map.Entry> entry = it.next();
+ // Address tried to connect, but timed out (still
+ // not logged in)
+ if (((entry.getValue().getRight() + TIMEOUT) < now) && !addresses.contains(entry.getKey())) {
+ it.remove();
+ }
+ }
+ }
+ });
}
protected void add(InetSocketAddress address, int protocolVersion) {
- versions.put(address, Pair.of(protocolVersion, System.currentTimeMillis()));
+ this.versions.put(address, Pair.of(protocolVersion, System.currentTimeMillis()));
}
protected void remove(InetSocketAddress address) {
- versions.remove(address);
+ this.versions.remove(address);
}
@Override
public int getProtocol(Player p) {
- Pair pair = versions.get(p.getAddress());
- return pair == null ? 0 : pair.getLeft();
+ Pair pair = this.versions.get(p.getAddress());
+ return pair == null ? 0 : pair.getLeft();
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
- // Player decided to quit the server
- versions.remove(event.getPlayer().getAddress());
+ // Player decided to quit the server
+ this.versions.remove(event.getPlayer().getAddress());
}
public abstract void registerPacketListener();
diff --git a/src/main/java/fr/onecraft/clientstats/bukkit/hook/base/AbstractProvider.java b/src/main/java/fr/onecraft/clientstats/bukkit/hook/base/AbstractProvider.java
index 06c5f5c..ff84c56 100644
--- a/src/main/java/fr/onecraft/clientstats/bukkit/hook/base/AbstractProvider.java
+++ b/src/main/java/fr/onecraft/clientstats/bukkit/hook/base/AbstractProvider.java
@@ -1,24 +1,25 @@
package fr.onecraft.clientstats.bukkit.hook.base;
+import java.util.UUID;
+
+import org.bukkit.entity.Player;
+
import fr.onecraft.clientstats.common.base.VersionProvider;
import fr.onecraft.core.helpers.Players;
import fr.onecraft.core.plugin.Core;
-import org.bukkit.entity.Player;
-
-import java.util.UUID;
public abstract class AbstractProvider implements VersionProvider {
public AbstractProvider() {
- if (getProviderName() != null) {
- Core.info("Hooked into " + getProviderName() + "!");
- }
+ if (this.getProviderName() != null) {
+ Core.info("Hooked into " + this.getProviderName() + "!");
+ }
}
@Override
public int getProtocol(UUID player) {
- Player p = Players.get(player);
- return p != null ? getProtocol(p) : 0;
+ Player p = Players.get(player);
+ return p != null ? this.getProtocol(p) : 0;
}
abstract public int getProtocol(Player p);
diff --git a/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ProtocolLibDetector.java b/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ProtocolLibDetector.java
index 5394f2b..cc6cfd4 100644
--- a/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ProtocolLibDetector.java
+++ b/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ProtocolLibDetector.java
@@ -1,17 +1,18 @@
package fr.onecraft.clientstats.bukkit.hook.detector;
+import org.bukkit.Bukkit;
+
import fr.onecraft.clientstats.bukkit.hook.provider.ProtocolLibProvider;
import fr.onecraft.clientstats.common.base.VersionProvider;
-import org.bukkit.Bukkit;
public class ProtocolLibDetector {
public static boolean isUsable() {
- return Bukkit.getPluginManager().isPluginEnabled("ProtocolLib");
+ return Bukkit.getPluginManager().isPluginEnabled("ProtocolLib");
}
public static VersionProvider getProvider() {
- return new ProtocolLibProvider();
+ return new ProtocolLibProvider();
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ProtocolSupportDetector.java b/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ProtocolSupportDetector.java
index 5d6051a..32c36d8 100644
--- a/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ProtocolSupportDetector.java
+++ b/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ProtocolSupportDetector.java
@@ -1,17 +1,18 @@
package fr.onecraft.clientstats.bukkit.hook.detector;
+import org.bukkit.Bukkit;
+
import fr.onecraft.clientstats.bukkit.hook.provider.ProtocolSupportProvider;
import fr.onecraft.clientstats.common.base.VersionProvider;
-import org.bukkit.Bukkit;
public class ProtocolSupportDetector {
public static boolean isUsable() {
- return Bukkit.getPluginManager().isPluginEnabled("ProtocolSupport");
+ return Bukkit.getPluginManager().isPluginEnabled("ProtocolSupport");
}
public static VersionProvider getProvider() {
- return new ProtocolSupportProvider();
+ return new ProtocolSupportProvider();
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ServerDetector.java b/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ServerDetector.java
index f270387..5c87836 100644
--- a/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ServerDetector.java
+++ b/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ServerDetector.java
@@ -1,24 +1,25 @@
package fr.onecraft.clientstats.bukkit.hook.detector;
+import java.lang.reflect.Method;
+
import fr.onecraft.clientstats.bukkit.hook.provider.ServerProvider;
import fr.onecraft.clientstats.common.base.VersionProvider;
import fr.onecraft.core.helpers.Reflections;
-import java.lang.reflect.Method;
-
public class ServerDetector {
public static boolean isUsable() {
- try {
- Class> networkManager = Class.forName(Reflections.NMS.getPrefix() + ".NetworkManager");
- Method method = networkManager.getMethod("getVersion");
- return method.getReturnType().isAssignableFrom(int.class) || method.getReturnType().isAssignableFrom(Integer.class);
- } catch (ClassNotFoundException | NoSuchMethodException | SecurityException e) {
- return false;
- }
+ try {
+ Class> networkManager = Class.forName(Reflections.NMS.getPrefix() + ".NetworkManager");
+ Method method = networkManager.getMethod("getVersion");
+ return method.getReturnType().isAssignableFrom(int.class)
+ || method.getReturnType().isAssignableFrom(Integer.class);
+ } catch (ClassNotFoundException | NoSuchMethodException | SecurityException e) {
+ return false;
+ }
}
public static VersionProvider getProvider() {
- return new ServerProvider();
+ return new ServerProvider();
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/TinyProtocolDetector.java b/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/TinyProtocolDetector.java
index 50dac58..a049dd0 100644
--- a/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/TinyProtocolDetector.java
+++ b/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/TinyProtocolDetector.java
@@ -1,6 +1,7 @@
package fr.onecraft.clientstats.bukkit.hook.detector;
import com.comphenix.tinyprotocol.Reflection;
+
import fr.onecraft.clientstats.bukkit.hook.provider.TinyProtocolProvider;
import fr.onecraft.clientstats.common.base.VersionProvider;
@@ -8,38 +9,39 @@ public class TinyProtocolDetector {
public static boolean isUsable() {
- try {
- // Netty update
- Class.forName("io.netty.channel.ChannelInitializer");
- } catch (ClassNotFoundException e) {
- return false;
- }
+ try {
+ // Netty update
+ Class.forName("io.netty.channel.ChannelInitializer");
+ } catch (ClassNotFoundException e) {
+ return false;
+ }
- try {
+ try {
- // Handshake packets
- Class> handshake = Reflection.getClass("{nms}.PacketHandshakingInSetProtocol");
- Class ENUM_PROTOCOL = Reflection.getUntypedClass("{nms}.EnumProtocol");
- Reflection.getField(handshake, int.class, 0);
- Reflection.getField(handshake, ENUM_PROTOCOL, 0);
+ // Handshake packets
+ Class> handshake = Reflection.getClass("{nms}.PacketHandshakingInSetProtocol");
+ Class ENUM_PROTOCOL = Reflection.getUntypedClass("{nms}.EnumProtocol");
+ Reflection.getField(handshake, int.class, 0);
+ Reflection.getField(handshake, ENUM_PROTOCOL, 0);
- // Disconnect while login
- Reflection.getClass("{nms}.PacketLoginOutDisconnect");
+ // Disconnect while login
+ Reflection.getClass("{nms}.PacketLoginOutDisconnect");
- // We need to have LOGIN
- for (Object value : ENUM_PROTOCOL.getEnumConstants()) {
- if ("LOGIN".equalsIgnoreCase(value.toString())) {
- return true;
- }
- }
+ // We need to have LOGIN
+ for (Object value : ENUM_PROTOCOL.getEnumConstants()) {
+ if ("LOGIN".equalsIgnoreCase(value.toString())) {
+ return true;
+ }
+ }
- } catch (Exception ignored) {}
+ } catch (Exception ignored) {
+ }
- return false;
+ return false;
}
public static VersionProvider getProvider() {
- return new TinyProtocolProvider();
+ return new TinyProtocolProvider();
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ViaProtocolDetector.java b/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ViaProtocolDetector.java
index e97ce34..453dcc5 100644
--- a/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ViaProtocolDetector.java
+++ b/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ViaProtocolDetector.java
@@ -1,29 +1,30 @@
package fr.onecraft.clientstats.bukkit.hook.detector;
+import org.bukkit.Bukkit;
+
import fr.onecraft.clientstats.bukkit.hook.provider.ViaProtocolProvider;
import fr.onecraft.clientstats.common.base.VersionProvider;
import fr.onecraft.core.plugin.Core;
-import org.bukkit.Bukkit;
public class ViaProtocolDetector {
public static boolean isUsable() {
- if (Bukkit.getPluginManager().isPluginEnabled("ViaVersion")
- && Bukkit.getPluginManager().isPluginEnabled("ProtocolSupport")) {
+ if (Bukkit.getPluginManager().isPluginEnabled("ViaVersion")
+ && Bukkit.getPluginManager().isPluginEnabled("ProtocolSupport")) {
- try {
- // ViaVersion 1.0.0 and up
- Class.forName("us.myles.ViaVersion.api.Via");
- return true;
- } catch (ClassNotFoundException ignored) {
- Core.warning("Please update ViaVersion for better version detection!");
- }
- }
- return false;
+ try {
+ // ViaVersion 1.0.0 and up
+ Class.forName("us.myles.ViaVersion.api.Via");
+ return true;
+ } catch (ClassNotFoundException ignored) {
+ Core.warning("Please update ViaVersion for better version detection!");
+ }
+ }
+ return false;
}
public static VersionProvider getProvider() {
- return new ViaProtocolProvider();
+ return new ViaProtocolProvider();
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ViaVersionDetector.java b/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ViaVersionDetector.java
index a0eb191..1c7d028 100644
--- a/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ViaVersionDetector.java
+++ b/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ViaVersionDetector.java
@@ -1,24 +1,26 @@
package fr.onecraft.clientstats.bukkit.hook.detector;
+import org.bukkit.Bukkit;
+
import fr.onecraft.clientstats.bukkit.hook.provider.ViaVersionProvider;
import fr.onecraft.clientstats.common.base.VersionProvider;
-import org.bukkit.Bukkit;
public class ViaVersionDetector {
public static boolean isUsable() {
- if (Bukkit.getPluginManager().isPluginEnabled("ViaVersion")) {
- try {
- // ViaVersion 1.0.0 and up
- Class.forName("us.myles.ViaVersion.api.Via");
- return true;
- } catch (ClassNotFoundException ignored) {}
- }
- return false;
+ if (Bukkit.getPluginManager().isPluginEnabled("ViaVersion")) {
+ try {
+ // ViaVersion 1.0.0 and up
+ Class.forName("us.myles.ViaVersion.api.Via");
+ return true;
+ } catch (ClassNotFoundException ignored) {
+ }
+ }
+ return false;
}
public static VersionProvider getProvider() {
- return new ViaVersionProvider();
+ return new ViaVersionProvider();
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ViaVersionLegacyDetector.java b/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ViaVersionLegacyDetector.java
index 0f4e084..28e3d4a 100644
--- a/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ViaVersionLegacyDetector.java
+++ b/src/main/java/fr/onecraft/clientstats/bukkit/hook/detector/ViaVersionLegacyDetector.java
@@ -1,24 +1,26 @@
package fr.onecraft.clientstats.bukkit.hook.detector;
+import org.bukkit.Bukkit;
+
import fr.onecraft.clientstats.bukkit.hook.provider.ViaVersionLegacyProvider;
import fr.onecraft.clientstats.common.base.VersionProvider;
-import org.bukkit.Bukkit;
public class ViaVersionLegacyDetector {
public static boolean isUsable() {
- if (Bukkit.getPluginManager().isPluginEnabled("ViaVersion")) {
- try {
- // ViaVersion 0.9.9 and below
- Class.forName("us.myles.ViaVersion.api.ViaVersion");
- return true;
- } catch (ClassNotFoundException ignored) {}
- }
- return false;
+ if (Bukkit.getPluginManager().isPluginEnabled("ViaVersion")) {
+ try {
+ // ViaVersion 0.9.9 and below
+ Class.forName("us.myles.ViaVersion.api.ViaVersion");
+ return true;
+ } catch (ClassNotFoundException ignored) {
+ }
+ }
+ return false;
}
public static VersionProvider getProvider() {
- return new ViaVersionLegacyProvider();
+ return new ViaVersionLegacyProvider();
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ProtocolLibProvider.java b/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ProtocolLibProvider.java
index d94a8d2..0e05615 100644
--- a/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ProtocolLibProvider.java
+++ b/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ProtocolLibProvider.java
@@ -5,6 +5,7 @@
import com.comphenix.protocol.events.ListenerPriority;
import com.comphenix.protocol.events.PacketAdapter;
import com.comphenix.protocol.events.PacketEvent;
+
import fr.onecraft.clientstats.bukkit.hook.base.AbstractPacketHandler;
import fr.onecraft.core.plugin.Core;
@@ -12,38 +13,38 @@ public class ProtocolLibProvider extends AbstractPacketHandler {
@Override
public String getProviderName() {
- return "ProtocolLib";
+ return "ProtocolLib";
}
@Override
public void registerPacketListener() {
- ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(Core.plugin(),
- ListenerPriority.NORMAL,
- PacketType.Handshake.Client.SET_PROTOCOL, PacketType.Login.Server.DISCONNECT) {
+ ProtocolLibrary.getProtocolManager().addPacketListener(new PacketAdapter(Core.plugin(), ListenerPriority.NORMAL,
+ PacketType.Handshake.Client.SET_PROTOCOL, PacketType.Login.Server.DISCONNECT) {
- @Override
- public void onPacketReceiving(PacketEvent event) {
+ @Override
+ public void onPacketReceiving(PacketEvent event) {
- if (event.getPacketType() == PacketType.Handshake.Client.SET_PROTOCOL) {
- // Receiving handshake packet
+ if (event.getPacketType() == PacketType.Handshake.Client.SET_PROTOCOL) {
+ // Receiving handshake packet
- if (event.getPacket().getProtocols().read(0) == PacketType.Protocol.LOGIN) {
- // Intent to login
- add(event.getPlayer().getAddress(), event.getPacket().getIntegers().read(0));
- }
+ if (event.getPacket().getProtocols().read(0) == PacketType.Protocol.LOGIN) {
+ // Intent to login
+ ProtocolLibProvider.this.add(event.getPlayer().getAddress(),
+ event.getPacket().getIntegers().read(0));
+ }
- }
- }
+ }
+ }
- @Override
- public void onPacketSending(PacketEvent event) {
- if (event.getPacketType() == PacketType.Login.Server.DISCONNECT) {
- // Server kick player or deny login
- remove(event.getPlayer().getAddress());
- }
- }
- });
+ @Override
+ public void onPacketSending(PacketEvent event) {
+ if (event.getPacketType() == PacketType.Login.Server.DISCONNECT) {
+ // Server kick player or deny login
+ ProtocolLibProvider.this.remove(event.getPlayer().getAddress());
+ }
+ }
+ });
}
diff --git a/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ProtocolSupportProvider.java b/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ProtocolSupportProvider.java
index e514663..fdfcb99 100644
--- a/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ProtocolSupportProvider.java
+++ b/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ProtocolSupportProvider.java
@@ -1,19 +1,20 @@
package fr.onecraft.clientstats.bukkit.hook.provider;
-import fr.onecraft.clientstats.bukkit.hook.base.AbstractProvider;
import org.bukkit.entity.Player;
+
+import fr.onecraft.clientstats.bukkit.hook.base.AbstractProvider;
import protocolsupport.api.ProtocolSupportAPI;
public class ProtocolSupportProvider extends AbstractProvider {
@Override
public String getProviderName() {
- return "ProtocolSupport";
+ return "ProtocolSupport";
}
@Override
public int getProtocol(Player p) {
- return ProtocolSupportAPI.getProtocolVersion(p).getId();
+ return ProtocolSupportAPI.getProtocolVersion(p).getId();
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ServerProvider.java b/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ServerProvider.java
index 6c11464..ee135f0 100644
--- a/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ServerProvider.java
+++ b/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ServerProvider.java
@@ -1,44 +1,44 @@
package fr.onecraft.clientstats.bukkit.hook.provider;
-import fr.onecraft.clientstats.bukkit.hook.base.AbstractProvider;
-import org.bukkit.entity.Player;
-
import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import org.bukkit.entity.Player;
+
+import fr.onecraft.clientstats.bukkit.hook.base.AbstractProvider;
+
public class ServerProvider extends AbstractProvider {
@Override
public String getProviderName() {
- return "Protocol Hack Server";
+ return "Protocol Hack Server";
}
@Override
public int getProtocol(Player p) {
- try {
- @SuppressWarnings("JavaReflectionMemberAccess")
- Method getHandle = p.getClass().getMethod("getHandle");
- Object nmsPlayer = getHandle.invoke(p);
+ try {
+ Method getHandle = p.getClass().getMethod("getHandle");
+ Object nmsPlayer = getHandle.invoke(p);
- Field fieldPlayerConnection = nmsPlayer.getClass().getField("playerConnection");
- Object playerConnection = fieldPlayerConnection.get(nmsPlayer);
+ Field fieldPlayerConnection = nmsPlayer.getClass().getField("playerConnection");
+ Object playerConnection = fieldPlayerConnection.get(nmsPlayer);
- Field fieldNetworkManager = playerConnection.getClass().getField("networkManager");
- Object networkManager = fieldNetworkManager.get(playerConnection);
+ Field fieldNetworkManager = playerConnection.getClass().getField("networkManager");
+ Object networkManager = fieldNetworkManager.get(playerConnection);
- Method getVersion = networkManager.getClass().getMethod("getVersion");
- Object value = getVersion.invoke(networkManager);
+ Method getVersion = networkManager.getClass().getMethod("getVersion");
+ Object value = getVersion.invoke(networkManager);
- Integer version = (Integer) value;
+ Integer version = (Integer) value;
- if (version != null) {
- return version;
- }
- } catch (Exception ex) {
- ex.printStackTrace();
- }
+ if (version != null) {
+ return version;
+ }
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
- return 0;
+ return 0;
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/TinyProtocolProvider.java b/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/TinyProtocolProvider.java
index e2fe713..0f01e10 100644
--- a/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/TinyProtocolProvider.java
+++ b/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/TinyProtocolProvider.java
@@ -1,22 +1,26 @@
package fr.onecraft.clientstats.bukkit.hook.provider;
+import java.net.InetSocketAddress;
+import java.net.SocketAddress;
+
+import org.bukkit.entity.Player;
+
import com.comphenix.tinyprotocol.Reflection;
import com.comphenix.tinyprotocol.TinyProtocol;
+
import fr.onecraft.clientstats.bukkit.hook.base.AbstractPacketHandler;
import fr.onecraft.core.plugin.Core;
import io.netty.channel.Channel;
-import org.bukkit.entity.Player;
-
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
public class TinyProtocolProvider extends AbstractPacketHandler {
// Handshake packets
private final Class> HANDSHAKE = Reflection.getClass("{nms}.PacketHandshakingInSetProtocol");
private final Class ENUM_PROTOCOL = Reflection.getUntypedClass("{nms}.EnumProtocol");
- private final Reflection.FieldAccessor PROTOCOL_VERSION = Reflection.getField(HANDSHAKE, int.class, 0);
- private final Reflection.FieldAccessor NEXT_STATE = Reflection.getField(HANDSHAKE, ENUM_PROTOCOL, 0);
+ private final Reflection.FieldAccessor PROTOCOL_VERSION = Reflection.getField(this.HANDSHAKE, int.class,
+ 0);
+ private final Reflection.FieldAccessor NEXT_STATE = Reflection.getField(this.HANDSHAKE, this.ENUM_PROTOCOL,
+ 0);
private final String HANDSHAKE_LOGIN = "LOGIN";
// Disconnect while login
@@ -24,48 +28,50 @@ public class TinyProtocolProvider extends AbstractPacketHandler {
@Override
public String getProviderName() {
- return "TinyProtocol";
+ return "TinyProtocol";
}
@Override
public void registerPacketListener() {
- new TinyProtocol(Core.plugin()) {
-
- @Override
- public Object onPacketInAsync(Player sender, Channel channel, Object packet) {
-
- if (HANDSHAKE.isInstance(packet)) {
- if (PROTOCOL_VERSION.hasField(packet) && NEXT_STATE.hasField(packet)) {
- Object nextState = NEXT_STATE.get(packet);
- if (nextState != null && HANDSHAKE_LOGIN.equalsIgnoreCase(nextState.toString())) {
- Integer protocolVersion = PROTOCOL_VERSION.get(packet);
- if (protocolVersion != null) {
- SocketAddress address = channel.remoteAddress();
- if (address instanceof InetSocketAddress) {
- add((InetSocketAddress) address, protocolVersion);
- }
- }
- }
- }
- }
-
- return super.onPacketInAsync(sender, channel, packet);
- }
-
- @Override
- public Object onPacketOutAsync(Player receiver, Channel channel, Object packet) {
-
- if (DISCONNECT.isInstance(packet)) {
- SocketAddress address = channel.remoteAddress();
- if (address instanceof InetSocketAddress) {
- remove((InetSocketAddress) address);
- }
- }
-
- return super.onPacketOutAsync(receiver, channel, packet);
- }
-
- };
+ new TinyProtocol(Core.plugin()) {
+
+ @Override
+ public Object onPacketInAsync(Player sender, Channel channel, Object packet) {
+
+ if (TinyProtocolProvider.this.HANDSHAKE.isInstance(packet)) {
+ if (TinyProtocolProvider.this.PROTOCOL_VERSION.hasField(packet)
+ && TinyProtocolProvider.this.NEXT_STATE.hasField(packet)) {
+ Object nextState = TinyProtocolProvider.this.NEXT_STATE.get(packet);
+ if ((nextState != null)
+ && TinyProtocolProvider.this.HANDSHAKE_LOGIN.equalsIgnoreCase(nextState.toString())) {
+ Integer protocolVersion = TinyProtocolProvider.this.PROTOCOL_VERSION.get(packet);
+ if (protocolVersion != null) {
+ SocketAddress address = channel.remoteAddress();
+ if (address instanceof InetSocketAddress) {
+ TinyProtocolProvider.this.add((InetSocketAddress) address, protocolVersion);
+ }
+ }
+ }
+ }
+ }
+
+ return super.onPacketInAsync(sender, channel, packet);
+ }
+
+ @Override
+ public Object onPacketOutAsync(Player receiver, Channel channel, Object packet) {
+
+ if (TinyProtocolProvider.this.DISCONNECT.isInstance(packet)) {
+ SocketAddress address = channel.remoteAddress();
+ if (address instanceof InetSocketAddress) {
+ TinyProtocolProvider.this.remove((InetSocketAddress) address);
+ }
+ }
+
+ return super.onPacketOutAsync(receiver, channel, packet);
+ }
+
+ };
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ViaProtocolProvider.java b/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ViaProtocolProvider.java
index 06ba524..4f02771 100644
--- a/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ViaProtocolProvider.java
+++ b/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ViaProtocolProvider.java
@@ -1,41 +1,43 @@
package fr.onecraft.clientstats.bukkit.hook.provider;
+import java.util.UUID;
+
+import org.bukkit.entity.Player;
+
import fr.onecraft.clientstats.bukkit.hook.base.AbstractProvider;
import fr.onecraft.core.helpers.Players;
-import org.bukkit.entity.Player;
import protocolsupport.api.ProtocolSupportAPI;
import us.myles.ViaVersion.api.Via;
import us.myles.ViaVersion.api.ViaAPI;
-import java.util.UUID;
-
public class ViaProtocolProvider extends AbstractProvider {
+ @SuppressWarnings("rawtypes")
private final ViaAPI viaVersion = Via.getAPI();
@Override
public String getProviderName() {
- return "ViaVersion + ProtocolSupport";
+ return "ViaVersion + ProtocolSupport";
}
@Override
public int getProtocol(UUID player) {
- Player p = Players.get(player);
+ Player p = Players.get(player);
- if (p != null) {
- int version = ProtocolSupportAPI.getProtocolVersion(p).getId();
- if (version == -1) {
- return viaVersion.getPlayerVersion(player);
- }
- return version;
- }
+ if (p != null) {
+ int version = ProtocolSupportAPI.getProtocolVersion(p).getId();
+ if (version == -1) {
+ return this.viaVersion.getPlayerVersion(player);
+ }
+ return version;
+ }
- return 0;
+ return 0;
}
@Override
public int getProtocol(Player p) {
- throw new AbstractMethodError("Impossible call to getProtocol(Player)");
+ throw new AbstractMethodError("Impossible call to getProtocol(Player)");
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ViaVersionLegacyProvider.java b/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ViaVersionLegacyProvider.java
index f02a05b..e491071 100644
--- a/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ViaVersionLegacyProvider.java
+++ b/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ViaVersionLegacyProvider.java
@@ -1,23 +1,24 @@
package fr.onecraft.clientstats.bukkit.hook.provider;
-import fr.onecraft.clientstats.bukkit.hook.base.AbstractProvider;
import org.bukkit.entity.Player;
+
+import fr.onecraft.clientstats.bukkit.hook.base.AbstractProvider;
import us.myles.ViaVersion.api.ViaVersion;
import us.myles.ViaVersion.api.ViaVersionAPI;
+@SuppressWarnings("deprecation")
public class ViaVersionLegacyProvider extends AbstractProvider {
- @SuppressWarnings("deprecation")
private final ViaVersionAPI viaVersion = ViaVersion.getInstance();
@Override
public String getProviderName() {
- return "ViaVersion Legacy";
+ return "ViaVersion Legacy";
}
@Override
public int getProtocol(Player p) {
- return viaVersion.getPlayerVersion(p);
+ return this.viaVersion.getPlayerVersion(p);
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ViaVersionProvider.java b/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ViaVersionProvider.java
index 36a1aeb..af95e76 100644
--- a/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ViaVersionProvider.java
+++ b/src/main/java/fr/onecraft/clientstats/bukkit/hook/provider/ViaVersionProvider.java
@@ -1,29 +1,31 @@
package fr.onecraft.clientstats.bukkit.hook.provider;
-import fr.onecraft.clientstats.bukkit.hook.base.AbstractProvider;
+import java.util.UUID;
+
import org.bukkit.entity.Player;
+
+import fr.onecraft.clientstats.bukkit.hook.base.AbstractProvider;
import us.myles.ViaVersion.api.Via;
import us.myles.ViaVersion.api.ViaAPI;
-import java.util.UUID;
-
public class ViaVersionProvider extends AbstractProvider {
+ @SuppressWarnings("rawtypes")
private final ViaAPI viaVersion = Via.getAPI();
@Override
public String getProviderName() {
- return "ViaVersion";
+ return "ViaVersion";
}
@Override
public int getProtocol(UUID player) {
- return viaVersion.getPlayerVersion(player);
+ return this.viaVersion.getPlayerVersion(player);
}
@Override
public int getProtocol(Player p) {
- throw new AbstractMethodError("Impossible call to getProtocol(Player)");
+ throw new AbstractMethodError("Impossible call to getProtocol(Player)");
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/bukkit/user/BukkitUser.java b/src/main/java/fr/onecraft/clientstats/bukkit/user/BukkitUser.java
index bc32c9d..4c2fe74 100644
--- a/src/main/java/fr/onecraft/clientstats/bukkit/user/BukkitUser.java
+++ b/src/main/java/fr/onecraft/clientstats/bukkit/user/BukkitUser.java
@@ -1,46 +1,47 @@
package fr.onecraft.clientstats.bukkit.user;
-import fr.onecraft.clientstats.common.user.MixedUser;
+import java.util.UUID;
+
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
-import java.util.UUID;
+import fr.onecraft.clientstats.common.user.MixedUser;
public class BukkitUser extends MixedUser {
public static MixedUser of(CommandSender sender) {
- return sender == null ? null : new BukkitUser(sender);
+ return sender == null ? null : new BukkitUser(sender);
}
private BukkitUser(CommandSender sender) {
- this.sender = sender;
+ this.sender = sender;
}
private final CommandSender sender;
@Override
public void sendMessage(String msg) {
- sender.sendMessage(msg);
+ this.sender.sendMessage(msg);
}
@Override
public boolean hasPermission(String permission) {
- return sender.hasPermission(permission);
+ return this.sender.hasPermission(permission);
}
@Override
public boolean isPlayer() {
- return sender instanceof Player;
+ return this.sender instanceof Player;
}
@Override
public UUID getUniqueId() {
- return sender instanceof Player ? ((Player) sender).getUniqueId() : null;
+ return this.sender instanceof Player ? ((Player) this.sender).getUniqueId() : null;
}
@Override
public String getName() {
- return sender instanceof Player ? sender.getName() : null;
+ return this.sender instanceof Player ? this.sender.getName() : null;
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/bukkit/user/BukkitUserProvider.java b/src/main/java/fr/onecraft/clientstats/bukkit/user/BukkitUserProvider.java
index 7920aa2..7a052e1 100644
--- a/src/main/java/fr/onecraft/clientstats/bukkit/user/BukkitUserProvider.java
+++ b/src/main/java/fr/onecraft/clientstats/bukkit/user/BukkitUserProvider.java
@@ -1,45 +1,48 @@
package fr.onecraft.clientstats.bukkit.user;
-import fr.onecraft.clientstats.common.user.MixedUser;
-import fr.onecraft.clientstats.common.user.UserProvider;
-import org.bukkit.Server;
-import org.bukkit.entity.Player;
-
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.UUID;
+import org.bukkit.Server;
+import org.bukkit.entity.Player;
+
+import fr.onecraft.clientstats.common.user.MixedUser;
+import fr.onecraft.clientstats.common.user.UserProvider;
+
public class BukkitUserProvider implements UserProvider {
private final Server server;
public BukkitUserProvider(Server server) {
- this.server = server;
+ this.server = server;
}
@Override
public Collection getOnlineIds() {
- List users = new ArrayList<>(getOnlineCount());
- for (Player player : server.getOnlinePlayers()) users.add(player.getUniqueId());
- return users;
+ List users = new ArrayList<>(this.getOnlineCount());
+ for (Player player : this.server.getOnlinePlayers())
+ users.add(player.getUniqueId());
+ return users;
}
@Override
public Collection getOnlineNames() {
- List users = new ArrayList<>(getOnlineCount());
- for (Player player : server.getOnlinePlayers()) users.add(player.getName());
- return users;
+ List users = new ArrayList<>(this.getOnlineCount());
+ for (Player player : this.server.getOnlinePlayers())
+ users.add(player.getName());
+ return users;
}
@Override
public int getOnlineCount() {
- return server.getOnlinePlayers().size();
+ return this.server.getOnlinePlayers().size();
}
@Override
public MixedUser getUser(String name) {
- return BukkitUser.of(server.getPlayer(name));
+ return BukkitUser.of(this.server.getPlayer(name));
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/bungee/BungeeAPI.java b/src/main/java/fr/onecraft/clientstats/bungee/BungeeAPI.java
index f094b11..7932453 100644
--- a/src/main/java/fr/onecraft/clientstats/bungee/BungeeAPI.java
+++ b/src/main/java/fr/onecraft/clientstats/bungee/BungeeAPI.java
@@ -1,41 +1,42 @@
package fr.onecraft.clientstats.bungee;
+import java.util.logging.Logger;
+
+import javax.annotation.Nonnull;
+
import fr.onecraft.clientstats.common.base.ServerType;
import fr.onecraft.clientstats.common.base.VersionProvider;
import fr.onecraft.clientstats.common.core.AbstractAPI;
import net.md_5.bungee.api.ChatColor;
-import javax.annotation.Nonnull;
-import java.util.logging.Logger;
-
public class BungeeAPI extends AbstractAPI {
private final BungeePlugin plugin;
public BungeeAPI(BungeePlugin plugin, VersionProvider provider) {
- super(provider, plugin);
- this.plugin = plugin;
+ super(provider, plugin);
+ this.plugin = plugin;
}
@Nonnull
@Override
public ServerType getServerType() {
- return ServerType.BUNGEE;
+ return ServerType.BUNGEE;
}
@Override
public boolean isEnabled() {
- return plugin.isEnabled();
+ return this.plugin.isEnabled();
}
@Override
public Logger getLogger() {
- return plugin.getLogger();
+ return this.plugin.getLogger();
}
@Override
public String colorize(String string) {
- return ChatColor.translateAlternateColorCodes('&', string);
+ return ChatColor.translateAlternateColorCodes('&', string);
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/bungee/BungeePlugin.java b/src/main/java/fr/onecraft/clientstats/bungee/BungeePlugin.java
index 3887a9a..7e5b155 100644
--- a/src/main/java/fr/onecraft/clientstats/bungee/BungeePlugin.java
+++ b/src/main/java/fr/onecraft/clientstats/bungee/BungeePlugin.java
@@ -1,5 +1,8 @@
package fr.onecraft.clientstats.bungee;
+import java.util.UUID;
+import java.util.logging.Level;
+
import fr.onecraft.clientstats.ClientStats;
import fr.onecraft.clientstats.bungee.dispatcher.CommandDispatcher;
import fr.onecraft.clientstats.bungee.dispatcher.EventDispatcher;
@@ -8,12 +11,11 @@
import fr.onecraft.clientstats.common.base.Configurable;
import fr.onecraft.clientstats.common.base.VersionProvider;
import fr.onecraft.clientstats.common.core.AbstractAPI;
+import fr.onecraft.clientstats.common.core.VersionNameProvider;
import fr.onecraft.clientstats.common.user.MixedUser;
import fr.onecraft.config.plugin.PluginConfigurable;
import net.md_5.bungee.api.ProxyServer;
-import java.util.UUID;
-
public class BungeePlugin extends PluginConfigurable implements Configurable {
// Plugin state
@@ -22,101 +24,112 @@ public class BungeePlugin extends PluginConfigurable implements Configurable {
@Override
public void onEnable() {
- // User provider
- MixedUser.setProvider(new BungeeUserProvider(getProxy()));
-
- // Version provider
- VersionProvider provider;
- if (ViaVersionDetector.isUsable()) {
- provider = ViaVersionDetector.getProvider();
- } else {
- provider = new VersionProvider() {
- @Override
- public String getProviderName() {
- return "Bungeecord";
- }
-
- @Override
- public int getProtocol(UUID player) {
- return ProxyServer.getInstance().getPlayer(player).getPendingConnection().getVersion();
- }
- };
- }
- getLogger().info("Hooked into " + provider.getProviderName() + " !");
-
- // Bungeecord API
- AbstractAPI api = new BungeeAPI(this, provider);
-
- // Reload config
- api.reload();
-
- // Register Event
- getProxy().getPluginManager().registerListener(this, new EventDispatcher(api));
-
- // Handle command
- getProxy().getPluginManager().registerCommand(this, new CommandDispatcher(api));
-
- // Api is ready
- enabled = true;
- ClientStats.setApi(api);
+ // User provider
+ MixedUser.setProvider(new BungeeUserProvider(this.getProxy()));
+
+ // Version provider
+ VersionProvider provider;
+ if (ViaVersionDetector.isUsable()) {
+ provider = ViaVersionDetector.getProvider();
+ } else {
+ provider = new VersionProvider() {
+ @Override
+ public String getProviderName() {
+ return "Bungeecord";
+ }
+
+ @Override
+ public int getProtocol(UUID player) {
+ return ProxyServer.getInstance().getPlayer(player).getPendingConnection().getVersion();
+ }
+ };
+ }
+ this.getLogger().info("Hooked into " + provider.getProviderName() + " !");
+
+ // Version Provider
+ for (int i = 1; i <= 5; i++) {
+ this.getLogger().info("Reloading version list... (Attempt " + i + ")");
+ try {
+ VersionNameProvider.reload(true, this.getLogger());
+ break;
+ } catch (Exception e) {
+ this.getLogger().log(Level.SEVERE, "Unable to load version list", e);
+ }
+ }
+
+ // Bungeecord API
+ AbstractAPI api = new BungeeAPI(this, provider);
+
+ // Reload config
+ api.reload();
+
+ // Register Event
+ this.getProxy().getPluginManager().registerListener(this, new EventDispatcher(api));
+
+ // Handle command
+ this.getProxy().getPluginManager().registerCommand(this, new CommandDispatcher(api));
+
+ // Api is ready
+ this.enabled = true;
+ ClientStats.setApi(api);
}
@Override
public void onDisable() {
- // Remove api
- ClientStats.setApi(null);
- enabled = false;
+ // Remove api
+ ClientStats.setApi(null);
+ this.enabled = false;
}
public boolean isEnabled() {
- return enabled;
+ return this.enabled;
}
@Override
public void migrate() {
- // v2.7.6 -> v2.7.7
- String helpKey = "messages.commands.help.stats";
- String helpMsg = getConfig().getString(helpKey);
- if (helpMsg.equals("&b/{1} stats &f- Statistics since server startup")) {
- getConfig().set(helpKey, "&b/{1} stats &f- Global statistics");
- } else if (helpMsg.contains("Statistics since server startup")) {
- getConfig().set(helpKey, helpMsg.replace("Statistics since server startup", "Global statistics"));
- }
-
- // v2.7.6 -> v2.7.7
- String statsKey = "messages.commands.stats.title";
- String statsMsg = getConfig().getString(statsKey);
- if (statsMsg.equals("Statistics since server startup:")) {
- getConfig().set(statsKey, "Statistics since {1}:");
- } else if (statsMsg.contains("server startup")) {
- getConfig().set(statsKey, statsMsg.replace("server startup", "{1}"));
- }
+ // v2.7.6 -> v2.7.7
+ String helpKey = "messages.commands.help.stats";
+ String helpMsg = this.getConfig().getString(helpKey);
+ if (helpMsg.equals("&b/{1} stats &f- Statistics since server startup")) {
+ this.getConfig().set(helpKey, "&b/{1} stats &f- Global statistics");
+ } else if (helpMsg.contains("Statistics since server startup")) {
+ this.getConfig().set(helpKey, helpMsg.replace("Statistics since server startup", "Global statistics"));
+ }
+
+ // v2.7.6 -> v2.7.7
+ String statsKey = "messages.commands.stats.title";
+ String statsMsg = this.getConfig().getString(statsKey);
+ if (statsMsg.equals("Statistics since server startup:")) {
+ this.getConfig().set(statsKey, "Statistics since {1}:");
+ } else if (statsMsg.contains("server startup")) {
+ this.getConfig().set(statsKey, statsMsg.replace("server startup", "{1}"));
+ }
}
@Override
public void options() {
- // Copy headers and new values
- getConfig().options().copyDefaults(true).copyHeader(true);
+ // Copy headers and new values
+ this.getConfig().options().copyDefaults(true).copyHeader(true);
}
@Override
public String getConfigString(String path) {
- return getConfig().getString(path);
+ return this.getConfig().getString(path);
}
@Override
public String getConfigString(String path, String def) {
- return getConfig().getString(path, def);
+ return this.getConfig().getString(path, def);
}
@Override
public void setConfigValue(String path, Object value) {
- getConfig().set(path, value);
+ this.getConfig().set(path, value);
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/bungee/dispatcher/CommandDispatcher.java b/src/main/java/fr/onecraft/clientstats/bungee/dispatcher/CommandDispatcher.java
index 457c6da..b37f292 100644
--- a/src/main/java/fr/onecraft/clientstats/bungee/dispatcher/CommandDispatcher.java
+++ b/src/main/java/fr/onecraft/clientstats/bungee/dispatcher/CommandDispatcher.java
@@ -1,5 +1,8 @@
package fr.onecraft.clientstats.bungee.dispatcher;
+import java.util.Arrays;
+import java.util.List;
+
import fr.onecraft.clientstats.ClientStatsAPI;
import fr.onecraft.clientstats.bungee.user.BungeeUser;
import fr.onecraft.clientstats.common.core.CommandHandler;
@@ -7,34 +10,31 @@
import net.md_5.bungee.api.plugin.Command;
import net.md_5.bungee.api.plugin.TabExecutor;
-import java.util.Arrays;
-import java.util.List;
-
public class CommandDispatcher extends Command implements TabExecutor {
private final CommandHandler handler;
public CommandDispatcher(ClientStatsAPI plugin) {
- super("clientstats", null, "cstats", "cs", "bclientstats", "bcstats", "bcs");
- this.handler = new CommandHandler(plugin);
+ super("clientstats", null, "cstats", "cs", "bclientstats", "bcstats", "bcs");
+ this.handler = new CommandHandler(plugin);
}
@Override
public void execute(CommandSender sender, String[] args) {
- handler.execute(BungeeUser.of(sender), Arrays.asList(args), "cstats");
+ this.handler.execute(BungeeUser.of(sender), Arrays.asList(args), "cstats");
}
@Override
public Iterable onTabComplete(CommandSender sender, String[] args) {
- String token;
- List list;
- if (args.length == 0) {
- list = Arrays.asList(args);
- token = null;
- } else {
- list = Arrays.asList(Arrays.copyOf(args, args.length - 1));
- token = args[args.length - 1];
- }
- return handler.complete(BungeeUser.of(sender), list, token);
+ String token;
+ List list;
+ if (args.length == 0) {
+ list = Arrays.asList(args);
+ token = null;
+ } else {
+ list = Arrays.asList(Arrays.copyOf(args, args.length - 1));
+ token = args[args.length - 1];
+ }
+ return this.handler.complete(BungeeUser.of(sender), list, token);
}
}
\ No newline at end of file
diff --git a/src/main/java/fr/onecraft/clientstats/bungee/dispatcher/EventDispatcher.java b/src/main/java/fr/onecraft/clientstats/bungee/dispatcher/EventDispatcher.java
index 914d642..e064811 100644
--- a/src/main/java/fr/onecraft/clientstats/bungee/dispatcher/EventDispatcher.java
+++ b/src/main/java/fr/onecraft/clientstats/bungee/dispatcher/EventDispatcher.java
@@ -13,17 +13,17 @@ public class EventDispatcher implements Listener {
private final EventListener listener;
public EventDispatcher(AbstractAPI api) {
- this.listener = new EventListener(api);
+ this.listener = new EventListener(api);
}
@EventHandler
public void on(PostLoginEvent e) {
- listener.onPlayerJoin(BungeeUser.of(e.getPlayer()), false);
+ this.listener.onPlayerJoin(BungeeUser.of(e.getPlayer()), false);
}
@EventHandler
public void on(PlayerDisconnectEvent e) {
- listener.onPlayerQuit(BungeeUser.of(e.getPlayer()));
+ this.listener.onPlayerQuit(BungeeUser.of(e.getPlayer()));
}
}
\ No newline at end of file
diff --git a/src/main/java/fr/onecraft/clientstats/bungee/hooks/ViaVersionDetector.java b/src/main/java/fr/onecraft/clientstats/bungee/hooks/ViaVersionDetector.java
index 9e51419..01ffcda 100644
--- a/src/main/java/fr/onecraft/clientstats/bungee/hooks/ViaVersionDetector.java
+++ b/src/main/java/fr/onecraft/clientstats/bungee/hooks/ViaVersionDetector.java
@@ -6,11 +6,11 @@
public class ViaVersionDetector {
public static boolean isUsable() {
- return ProxyServer.getInstance().getPluginManager().getPlugin("ViaVersion") != null;
+ return ProxyServer.getInstance().getPluginManager().getPlugin("ViaVersion") != null;
}
public static VersionProvider getProvider() {
- return new ViaVersionProvider();
+ return new ViaVersionProvider();
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/bungee/hooks/ViaVersionProvider.java b/src/main/java/fr/onecraft/clientstats/bungee/hooks/ViaVersionProvider.java
index 75dc00d..7d0699e 100644
--- a/src/main/java/fr/onecraft/clientstats/bungee/hooks/ViaVersionProvider.java
+++ b/src/main/java/fr/onecraft/clientstats/bungee/hooks/ViaVersionProvider.java
@@ -1,23 +1,24 @@
package fr.onecraft.clientstats.bungee.hooks;
+import java.util.UUID;
+
import fr.onecraft.clientstats.common.base.VersionProvider;
import us.myles.ViaVersion.api.Via;
import us.myles.ViaVersion.api.ViaAPI;
-import java.util.UUID;
-
public class ViaVersionProvider implements VersionProvider {
+ @SuppressWarnings("rawtypes")
private final ViaAPI viaVersion = Via.getAPI();
@Override
public String getProviderName() {
- return "ViaVersion";
+ return "ViaVersion";
}
@Override
public int getProtocol(UUID player) {
- return viaVersion.getPlayerVersion(player);
+ return this.viaVersion.getPlayerVersion(player);
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/bungee/user/BungeeUser.java b/src/main/java/fr/onecraft/clientstats/bungee/user/BungeeUser.java
index 5f0e3bc..5fc3231 100644
--- a/src/main/java/fr/onecraft/clientstats/bungee/user/BungeeUser.java
+++ b/src/main/java/fr/onecraft/clientstats/bungee/user/BungeeUser.java
@@ -1,47 +1,47 @@
package fr.onecraft.clientstats.bungee.user;
+import java.util.UUID;
+
import fr.onecraft.clientstats.common.user.MixedUser;
import net.md_5.bungee.api.CommandSender;
import net.md_5.bungee.api.chat.TextComponent;
import net.md_5.bungee.api.connection.ProxiedPlayer;
-import java.util.UUID;
-
public class BungeeUser extends MixedUser {
public static MixedUser of(CommandSender sender) {
- return sender == null ? null : new BungeeUser(sender);
+ return sender == null ? null : new BungeeUser(sender);
}
private BungeeUser(CommandSender sender) {
- this.sender = sender;
+ this.sender = sender;
}
private final CommandSender sender;
@Override
public void sendMessage(String msg) {
- sender.sendMessage(TextComponent.fromLegacyText(msg));
+ this.sender.sendMessage(TextComponent.fromLegacyText(msg));
}
@Override
public boolean hasPermission(String permission) {
- return sender.hasPermission(permission);
+ return this.sender.hasPermission(permission);
}
@Override
public boolean isPlayer() {
- return sender instanceof ProxiedPlayer;
+ return this.sender instanceof ProxiedPlayer;
}
@Override
public UUID getUniqueId() {
- return sender instanceof ProxiedPlayer ? ((ProxiedPlayer) sender).getUniqueId() : null;
+ return this.sender instanceof ProxiedPlayer ? ((ProxiedPlayer) this.sender).getUniqueId() : null;
}
@Override
public String getName() {
- return sender instanceof ProxiedPlayer ? sender.getName() : null;
+ return this.sender instanceof ProxiedPlayer ? this.sender.getName() : null;
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/bungee/user/BungeeUserProvider.java b/src/main/java/fr/onecraft/clientstats/bungee/user/BungeeUserProvider.java
index 7025659..76bdebd 100644
--- a/src/main/java/fr/onecraft/clientstats/bungee/user/BungeeUserProvider.java
+++ b/src/main/java/fr/onecraft/clientstats/bungee/user/BungeeUserProvider.java
@@ -1,45 +1,47 @@
package fr.onecraft.clientstats.bungee.user;
-import fr.onecraft.clientstats.common.user.MixedUser;
-import fr.onecraft.clientstats.common.user.UserProvider;
-import net.md_5.bungee.api.ProxyServer;
-import net.md_5.bungee.api.connection.ProxiedPlayer;
-
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.UUID;
+import fr.onecraft.clientstats.common.user.MixedUser;
+import fr.onecraft.clientstats.common.user.UserProvider;
+import net.md_5.bungee.api.ProxyServer;
+import net.md_5.bungee.api.connection.ProxiedPlayer;
+
public class BungeeUserProvider implements UserProvider {
private final ProxyServer server;
public BungeeUserProvider(ProxyServer server) {
- this.server = server;
+ this.server = server;
}
@Override
public Collection getOnlineIds() {
- List users = new ArrayList<>(getOnlineCount());
- for (ProxiedPlayer player : server.getPlayers()) users.add(player.getUniqueId());
- return users;
+ List users = new ArrayList<>(this.getOnlineCount());
+ for (ProxiedPlayer player : this.server.getPlayers())
+ users.add(player.getUniqueId());
+ return users;
}
@Override
public Collection getOnlineNames() {
- List users = new ArrayList<>(getOnlineCount());
- for (ProxiedPlayer player : server.getPlayers()) users.add(player.getName());
- return users;
+ List users = new ArrayList<>(this.getOnlineCount());
+ for (ProxiedPlayer player : this.server.getPlayers())
+ users.add(player.getName());
+ return users;
}
@Override
public int getOnlineCount() {
- return server.getOnlineCount();
+ return this.server.getOnlineCount();
}
@Override
public MixedUser getUser(String name) {
- return BungeeUser.of(server.getPlayer(name));
+ return BungeeUser.of(this.server.getPlayer(name));
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/common/base/ServerType.java b/src/main/java/fr/onecraft/clientstats/common/base/ServerType.java
index cc7973e..85a10ef 100644
--- a/src/main/java/fr/onecraft/clientstats/common/base/ServerType.java
+++ b/src/main/java/fr/onecraft/clientstats/common/base/ServerType.java
@@ -2,7 +2,6 @@
public enum ServerType {
- BUKKIT,
- BUNGEE,
+ BUKKIT, BUNGEE,
}
diff --git a/src/main/java/fr/onecraft/clientstats/common/core/AbstractAPI.java b/src/main/java/fr/onecraft/clientstats/common/core/AbstractAPI.java
index a5b6eec..004e4dd 100644
--- a/src/main/java/fr/onecraft/clientstats/common/core/AbstractAPI.java
+++ b/src/main/java/fr/onecraft/clientstats/common/core/AbstractAPI.java
@@ -1,5 +1,19 @@
package fr.onecraft.clientstats.common.core;
+import static fr.onecraft.clientstats.common.user.MixedUser.getOnlineCount;
+
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.UUID;
+import java.util.logging.Logger;
+
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
import fr.onecraft.clientstats.ClientStatsAPI;
import fr.onecraft.clientstats.common.base.Configurable;
import fr.onecraft.clientstats.common.base.VersionProvider;
@@ -7,19 +21,11 @@
import fr.onecraft.core.helpers.Locales;
import fr.onecraft.core.tuple.Pair;
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.*;
-import java.util.logging.Logger;
-
-import static fr.onecraft.clientstats.common.user.MixedUser.getOnlineCount;
-
public abstract class AbstractAPI implements ClientStatsAPI {
// Default datetime format
- protected final static DateFormat DEFAULT_DATETIME_FORMAT = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
+ protected final static DateFormat DEFAULT_DATETIME_FORMAT = DateFormat.getDateTimeInstance(DateFormat.SHORT,
+ DateFormat.SHORT);
// Config values
protected String PREFIX = "§9[ClientStats] §f";
@@ -45,8 +51,8 @@ public abstract class AbstractAPI implements ClientStatsAPI {
private int playtimeRatio = 0;
public AbstractAPI(VersionProvider provider, Configurable config) {
- this.provider = provider;
- this.config = config;
+ this.provider = provider;
+ this.config = config;
}
public abstract Logger getLogger();
@@ -56,203 +62,204 @@ public AbstractAPI(VersionProvider provider, Configurable config) {
@Override
public void reload() {
- // Save config if it doesn't exist
- config.saveDefaultConfig();
-
- // Reload to get latest values
- config.reloadConfig();
-
- // Migrate over versions
- config.migrate();
-
- // Copy headers and new values
- config.options();
-
- // And save it
- config.saveConfig();
-
- // Get prefixes
- PREFIX = colorize(config.getConfigString("messages.prefix", PREFIX));
- SUBLINE = colorize(config.getConfigString("messages.subline", SUBLINE));
-
- // Get date format
- String userFormat = config.getConfigString("settings.date-format", "default");
- DateFormat userDateFormat = null;
-
- if (userFormat.equalsIgnoreCase("default")) {
- // Default format
- userDateFormat = DEFAULT_DATETIME_FORMAT;
- } else {
- Locale locale = Locales.valueOf(userFormat);
- if (locale != null) {
- // It's a locale
- DateFormat dateTimeInstance = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, locale);
- if (dateTimeInstance != null) {
- userDateFormat = dateTimeInstance;
- }
- } else if (userFormat.length() > 2) {
- // It may be a date format
- try {
- userDateFormat = new SimpleDateFormat(userFormat);
- } catch (IllegalArgumentException ignored) {}
- }
- }
-
- if (userDateFormat == null) {
- getLogger().warning("Invalid date-format value, reverting to default.");
- dateTimeFormat = DEFAULT_DATETIME_FORMAT;
- config.setConfigValue("settings.date-format", "default");
- config.saveConfig();
- } else {
- dateTimeFormat = userDateFormat;
- }
+ // Save config if it doesn't exist
+ this.config.saveDefaultConfig();
+
+ // Reload to get latest values
+ this.config.reloadConfig();
+
+ // Migrate over versions
+ this.config.migrate();
+
+ // Copy headers and new values
+ this.config.options();
+
+ // And save it
+ this.config.saveConfig();
+
+ // Get prefixes
+ this.PREFIX = this.colorize(this.config.getConfigString("messages.prefix", this.PREFIX));
+ this.SUBLINE = this.colorize(this.config.getConfigString("messages.subline", this.SUBLINE));
+
+ // Get date format
+ String userFormat = this.config.getConfigString("settings.date-format", "default");
+ DateFormat userDateFormat = null;
+
+ if (userFormat.equalsIgnoreCase("default")) {
+ // Default format
+ userDateFormat = DEFAULT_DATETIME_FORMAT;
+ } else {
+ Locale locale = Locales.valueOf(userFormat);
+ if (locale != null) {
+ // It's a locale
+ DateFormat dateTimeInstance = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT,
+ locale);
+ if (dateTimeInstance != null) {
+ userDateFormat = dateTimeInstance;
+ }
+ } else if (userFormat.length() > 2) {
+ // It may be a date format
+ try {
+ userDateFormat = new SimpleDateFormat(userFormat);
+ } catch (IllegalArgumentException ignored) {
+ }
+ }
+ }
+
+ if (userDateFormat == null) {
+ this.getLogger().warning("Invalid date-format value, reverting to default.");
+ this.dateTimeFormat = DEFAULT_DATETIME_FORMAT;
+ this.config.setConfigValue("settings.date-format", "default");
+ this.config.saveConfig();
+ } else {
+ this.dateTimeFormat = userDateFormat;
+ }
}
@Override
public void resetStats() {
- joined.clear();
- totalJoined = 0;
- maxOnlinePlayers = MixedUser.getOnlineCount();
- maxOnlineDate = System.currentTimeMillis();
- averagePlaytime = 0;
- playtimeRatio = 0;
- startOfRecording = System.currentTimeMillis();
+ this.joined.clear();
+ this.totalJoined = 0;
+ this.maxOnlinePlayers = MixedUser.getOnlineCount();
+ this.maxOnlineDate = System.currentTimeMillis();
+ this.averagePlaytime = 0;
+ this.playtimeRatio = 0;
+ this.startOfRecording = System.currentTimeMillis();
}
@Override
public boolean isVersionDetectionEnabled() {
- return isEnabled() && provider != null;
+ return this.isEnabled() && (this.provider != null);
}
@Override
public int getTotalJoined() {
- return totalJoined;
+ return this.totalJoined;
}
@Override
public int getTotalNewPlayers() {
- return totalNewPlayers;
+ return this.totalNewPlayers;
}
@Override
public int getUniqueJoined() {
- return joined.size();
+ return this.joined.size();
}
@Override
public int getMaxOnlinePlayers() {
- return maxOnlinePlayers;
+ return this.maxOnlinePlayers;
}
@Override
public long getMaxOnlineDate() {
- return maxOnlineDate;
+ return this.maxOnlineDate;
}
@Override
public double getAveragePlaytime() {
- return averagePlaytime;
+ return this.averagePlaytime;
}
@Nonnull
@Override
public Map getProtocolJoined() {
- return Collections.unmodifiableMap(joined);
+ return Collections.unmodifiableMap(this.joined);
}
@Nonnull
@Override
public String getVersionName(int version) {
- String versionName = config.getConfigString("versions." + version);
-
- if (versionName == null || versionName.isEmpty()) {
- getLogger().severe("Missing version: versions." + version);
- versionName = config.getConfigString("versions.0");
+ String versionName = VersionNameProvider.get(version);
- if (versionName == null || versionName.isEmpty()) {
- getLogger().severe("Missing message: versions.0");
- return "unknown";
- }
- }
+ if (versionName == null) {
+ this.getLogger().warning("Unknown version: " + version);
+ versionName = "Unknown";
+ }
- return versionName;
+ return versionName;
}
@Override
public int getProtocol(@Nonnull UUID player) {
- return isVersionDetectionEnabled() ? provider.getProtocol(player) : 0;
+ return this.isVersionDetectionEnabled() ? this.provider.getProtocol(player) : 0;
}
@Nullable
@Override
public Pair getVersion(@Nonnull UUID player) {
- int version = getProtocol(player);
- if (version == 0) return null;
- String versionName = getVersionName(version);
- return Pair.of(version, versionName);
+ int version = this.getProtocol(player);
+ if (version == 0)
+ return null;
+ String versionName = this.getVersionName(version);
+ return Pair.of(version, versionName);
}
public void updatePlayerCount() {
- int online = MixedUser.getOnlineCount();
- if (online > maxOnlinePlayers) {
- maxOnlinePlayers = online;
- maxOnlineDate = System.currentTimeMillis();
- }
+ int online = MixedUser.getOnlineCount();
+ if (online > this.maxOnlinePlayers) {
+ this.maxOnlinePlayers = online;
+ this.maxOnlineDate = System.currentTimeMillis();
+ }
}
public void registerJoin(MixedUser p, boolean isNew) {
- totalJoined++;
- if (isNew) totalNewPlayers++;
- if (isVersionDetectionEnabled()) joined.put(p.getUniqueId(), getProtocol(p.getUniqueId()));
+ this.totalJoined++;
+ if (isNew)
+ this.totalNewPlayers++;
+ if (this.isVersionDetectionEnabled())
+ this.joined.put(p.getUniqueId(), this.getProtocol(p.getUniqueId()));
}
public void registerPlaytime(long playtimeMillis) {
- long playtimeSeconds = playtimeMillis / 1000;
- playtimeRatio++;
- averagePlaytime += (playtimeSeconds - averagePlaytime) / playtimeRatio;
+ long playtimeSeconds = playtimeMillis / 1000;
+ this.playtimeRatio++;
+ this.averagePlaytime += (playtimeSeconds - this.averagePlaytime) / this.playtimeRatio;
}
@Override
public long getStartOfRecording() {
- return startOfRecording;
+ return this.startOfRecording;
}
@Nonnull
@Override
public DateFormat getDateTimeFormat() {
- return dateTimeFormat;
+ return this.dateTimeFormat;
}
@Override
public void sendMessage(MixedUser receiver, String messageCode, Object... args) {
- processMessage(receiver, messageCode, PREFIX, args);
+ this.processMessage(receiver, messageCode, this.PREFIX, args);
}
@Override
public void subMessage(MixedUser receiver, String messageCode, Object... args) {
- processMessage(receiver, messageCode, SUBLINE, args);
+ this.processMessage(receiver, messageCode, this.SUBLINE, args);
}
private void processMessage(MixedUser receiver, String messageCode, String prefix, Object... args) {
- String message = config.getConfigString("messages." + messageCode);
+ String message = this.config.getConfigString("messages." + messageCode);
- if (message == null || message.isEmpty()) {
- getLogger().warning("Missing message: " + messageCode);
- message = config.getConfigString("messages.error.general");
+ if ((message == null) || message.isEmpty()) {
+ this.getLogger().warning("Missing message: " + messageCode);
+ message = this.config.getConfigString("messages.error.general");
- if (message == null || message.isEmpty()) {
- message = "&cAn internal error occurred..";
- }
- }
+ if ((message == null) || message.isEmpty()) {
+ message = "&cAn internal error occurred..";
+ }
+ }
- if (message.isEmpty()) return;
+ if (message.isEmpty())
+ return;
- for (int i = 0; i < args.length; i++) {
- message = message.replace("{" + (i + 1) + "}", args[i].toString());
- }
+ for (int i = 0; i < args.length; i++) {
+ message = message.replace("{" + (i + 1) + "}", args[i].toString());
+ }
- receiver.sendMessage(prefix + colorize(message));
+ receiver.sendMessage(prefix + this.colorize(message));
}
}
diff --git a/src/main/java/fr/onecraft/clientstats/common/core/CommandHandler.java b/src/main/java/fr/onecraft/clientstats/common/core/CommandHandler.java
index 2dc1839..f773747 100644
--- a/src/main/java/fr/onecraft/clientstats/common/core/CommandHandler.java
+++ b/src/main/java/fr/onecraft/clientstats/common/core/CommandHandler.java
@@ -1,238 +1,281 @@
package fr.onecraft.clientstats.common.core;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.UUID;
+
+import org.apache.http.concurrent.FutureCallback;
+
import fr.onecraft.clientstats.ClientStatsAPI;
import fr.onecraft.clientstats.common.base.ServerType;
import fr.onecraft.clientstats.common.user.MixedUser;
import fr.onecraft.core.tuple.MutablePair;
import fr.onecraft.core.tuple.Pair;
-import java.util.*;
-
-
public class CommandHandler {
private static final List EMPTY_LIST = Collections.emptyList();
- private static final List SUB_COMMANDS = Arrays.asList("stats", "version", "online", "player", "reset", "reload");
+ private static final List SUB_COMMANDS = Arrays.asList("stats", "version", "online", "player", "reset",
+ "reload");
private final ClientStatsAPI api;
public CommandHandler(ClientStatsAPI api) {
- this.api = api;
+ this.api = api;
}
private boolean denied(MixedUser sender, String cmd) {
- return denied(sender, cmd, true);
+ return this.denied(sender, cmd, true);
}
private boolean denied(MixedUser sender, String cmd, boolean verbose) {
- if (sender.hasPermission(ClientStatsAPI.PERMISSION_ADMIN)
- || sender.hasPermission(ClientStatsAPI.PERMISSION_COMMAND.replace("{cmd}", cmd))) {
- return false;
- } else {
- if (verbose) api.sendMessage(sender, "error.permission");
- return true;
- }
+ if (sender.hasPermission(ClientStatsAPI.PERMISSION_ADMIN)
+ || sender.hasPermission(ClientStatsAPI.PERMISSION_COMMAND.replace("{cmd}", cmd))) {
+ return false;
+ } else {
+ if (verbose)
+ this.api.sendMessage(sender, "error.permission");
+ return true;
+ }
}
private boolean versionDetectionDisabled(MixedUser sender) {
- if (!api.isVersionDetectionEnabled()) {
- api.sendMessage(sender, "warning.version-disabled");
- return true;
- }
- return false;
+ if (!this.api.isVersionDetectionEnabled()) {
+ this.api.sendMessage(sender, "warning.version-disabled");
+ return true;
+ }
+ return false;
}
private List filter(Iterable list, String token, MixedUser commandUser) {
- List completions = new ArrayList<>();
- token = token == null || token.isEmpty() ? null : token.toLowerCase();
- for (String s : list) {
- if ((token == null || s.toLowerCase().startsWith(token)) && (commandUser == null || !denied(commandUser, s, false))) {
- completions.add(s);
- }
- }
- return completions.size() == 1 ? Collections.singletonList(completions.get(0) + " ") : completions;
+ List completions = new ArrayList<>();
+ token = (token == null) || token.isEmpty() ? null : token.toLowerCase();
+ for (String s : list) {
+ if (((token == null) || s.toLowerCase().startsWith(token))
+ && ((commandUser == null) || !this.denied(commandUser, s, false))) {
+ completions.add(s);
+ }
+ }
+ return completions.size() == 1 ? Collections.singletonList(completions.get(0) + " ") : completions;
}
public List complete(MixedUser sender, List args, String token) {
- if (args.size() == 1) {
- if (args.get(0).equalsIgnoreCase("player") && !denied(sender, "player")) {
- return filter(MixedUser.getOnlineNames(), token, null);
- }
- } else if (args.size() == 0) {
- return filter(SUB_COMMANDS, token, sender);
- }
- return EMPTY_LIST;
+ if (args.size() == 1) {
+ if (args.get(0).equalsIgnoreCase("player") && !this.denied(sender, "player")) {
+ return this.filter(MixedUser.getOnlineNames(), token, null);
+ }
+ } else if (args.size() == 0) {
+ return this.filter(SUB_COMMANDS, token, sender);
+ }
+ return EMPTY_LIST;
}
public void execute(MixedUser sender, List args, String label) {
- if (args.size() == 1) {
-
- if (args.get(0).equalsIgnoreCase("stats")) {
- if (denied(sender, "stats")) return;
-
- api.sendMessage(sender, "commands.stats.title", api.getDateTimeFormat().format(new Date(api.getStartOfRecording())));
- api.subMessage(sender, "commands.stats.unique", api.getUniqueJoined());
-
- if (api.getServerType() != ServerType.BUNGEE) {
- api.subMessage(sender, "commands.stats.new", api.getTotalNewPlayers());
- }
-
- api.subMessage(sender, "commands.stats.total", api.getTotalJoined());
-
- String date = api.getDateTimeFormat().format(new Date(api.getMaxOnlineDate()));
- api.subMessage(sender, "commands.stats.max", api.getMaxOnlinePlayers(), date);
-
- long averagePlaytime = Math.round(api.getAveragePlaytime());
- long min = averagePlaytime / 60;
- long sec = averagePlaytime % 60;
- api.subMessage(sender, "commands.stats.playtime", min, sec);
-
- // Warn user if stats are low and he has exempt permission
- if (api.getUniqueJoined() < 10 && sender.isPlayer() && sender.hasPermission(ClientStatsAPI.EXEMPT_PERMISSION)) {
- api.subMessage(sender, "warning.exempted");
- }
-
- return;
-
- } else if (args.get(0).equalsIgnoreCase("version")) {
- if (denied(sender, "version") || versionDetectionDisabled(sender)) return;
-
- Map> versions = new TreeMap<>();
- int total = 0;
-
- for (Integer version : api.getProtocolJoined().values()) {
- total++;
- Pair pair = versions.get(version);
- if (pair == null) {
- String versionName = api.getVersionName(version);
- versions.put(version, MutablePair.of(versionName, 1));
- } else {
- pair.setRight(pair.getRight() + 1);
- versions.put(version, pair);
- }
- }
-
- api.sendMessage(sender, "commands.version.title");
-
- if (total == 0) {
- api.subMessage(sender, "commands.version.empty");
- } else {
- for (Pair pair : versions.values()) {
- api.subMessage(sender, "commands.version.list", pair.getRight(), pair.getLeft(), Math.round(pair.getRight() * 100F / total));
- }
- }
-
- // Warn user if stats are low and he has exempt permission
- if (total < 10 && sender.isPlayer() && sender.hasPermission(ClientStatsAPI.EXEMPT_PERMISSION)) {
- api.subMessage(sender, "warning.exempted");
- }
-
- return;
-
- } else if (args.get(0).equalsIgnoreCase("online")) {
- if (denied(sender, "online") || versionDetectionDisabled(sender)) return;
-
- Map> versions = new TreeMap<>();
- int total = 0;
-
- for (UUID online : MixedUser.getOnlineIds()) {
- total++;
- int version = api.getProtocol(online);
- Pair pair = versions.get(version);
- if (pair == null) {
- String versionName = api.getVersionName(version);
- versions.put(version, MutablePair.of(versionName, 1));
- } else {
- pair.setValue(pair.getRight() + 1);
- versions.put(version, pair);
- }
- }
-
- api.sendMessage(sender, "commands.online.title");
-
- if (total == 0) {
- api.subMessage(sender, "commands.online.empty");
- } else {
- for (Pair pair : versions.values()) {
- api.subMessage(sender, "commands.online.list", pair.getRight(), pair.getLeft(), Math.round(pair.getRight() * 100F / total));
- }
- }
-
- return;
-
- } else if (args.get(0).equalsIgnoreCase("player")) {
- if (denied(sender, "player") || versionDetectionDisabled(sender)) return;
-
- if (!sender.isPlayer()) {
- api.sendMessage(sender, "error.not-a-player");
- return;
- }
-
- Map.Entry version = api.getVersion(sender.getUniqueId());
- if (version == null) {
- api.sendMessage(sender, "error.general");
- } else {
- api.sendMessage(sender, "commands.player.self", version.getValue());
- }
-
- return;
-
- } else if (args.get(0).equalsIgnoreCase("reset")) {
- if (denied(sender, "reset")) return;
-
- api.resetStats();
- api.sendMessage(sender, "commands.reset");
-
- return;
-
- } else if (args.get(0).equalsIgnoreCase("reload")) {
- if (denied(sender, "reload")) return;
-
- api.reload();
- api.sendMessage(sender, "commands.reload");
-
- return;
- }
-
- } else if (args.size() == 2) {
-
- if (args.get(0).equalsIgnoreCase("player")) {
- if (denied(sender, "player") || versionDetectionDisabled(sender)) return;
-
- MixedUser player = MixedUser.getUser(args.get(1));
- if (player == null) {
- api.sendMessage(sender, "commands.player.not-found", args.get(1));
- } else {
- Map.Entry version = api.getVersion(player.getUniqueId());
- if (version == null) {
- api.sendMessage(sender, "error.general");
- } else {
- api.sendMessage(sender, "commands.player.other", player.getName(), version.getValue());
- }
- }
-
- return;
-
- }
- }
-
- boolean isAdmin = sender.hasPermission(ClientStatsAPI.PERMISSION_ADMIN);
- List messages = new ArrayList<>();
-
- for (String subCommand : SUB_COMMANDS) {
- if (isAdmin || sender.hasPermission(ClientStatsAPI.PERMISSION_COMMAND.replace("{cmd}", subCommand))) {
- messages.add("commands.help." + subCommand);
- }
- }
-
- if (messages.isEmpty()) {
- api.sendMessage(sender, "error.permission");
- } else {
- api.sendMessage(sender, "commands.help.title");
- for (String message : messages) {
- api.subMessage(sender, message, label);
- }
- }
+ if (args.size() == 1) {
+
+ if (args.get(0).equalsIgnoreCase("stats")) {
+ if (this.denied(sender, "stats"))
+ return;
+
+ this.api.sendMessage(sender, "commands.stats.title",
+ this.api.getDateTimeFormat().format(new Date(this.api.getStartOfRecording())));
+ this.api.subMessage(sender, "commands.stats.unique", this.api.getUniqueJoined());
+
+ if (this.api.getServerType() != ServerType.BUNGEE) {
+ this.api.subMessage(sender, "commands.stats.new", this.api.getTotalNewPlayers());
+ }
+
+ this.api.subMessage(sender, "commands.stats.total", this.api.getTotalJoined());
+
+ String date = this.api.getDateTimeFormat().format(new Date(this.api.getMaxOnlineDate()));
+ this.api.subMessage(sender, "commands.stats.max", this.api.getMaxOnlinePlayers(), date);
+
+ long averagePlaytime = Math.round(this.api.getAveragePlaytime());
+ long min = averagePlaytime / 60;
+ long sec = averagePlaytime % 60;
+ this.api.subMessage(sender, "commands.stats.playtime", min, sec);
+
+ // Warn user if stats are low and he has exempt permission
+ if ((this.api.getUniqueJoined() < 10) && sender.isPlayer()
+ && sender.hasPermission(ClientStatsAPI.EXEMPT_PERMISSION)) {
+ this.api.subMessage(sender, "warning.exempted");
+ }
+
+ return;
+
+ } else if (args.get(0).equalsIgnoreCase("version")) {
+ if (this.denied(sender, "version") || this.versionDetectionDisabled(sender))
+ return;
+
+ Map> versions = new TreeMap<>();
+ int total = 0;
+
+ for (Integer version : this.api.getProtocolJoined().values()) {
+ total++;
+ Pair pair = versions.get(version);
+ if (pair == null) {
+ String versionName = this.api.getVersionName(version);
+ versions.put(version, MutablePair.of(versionName, 1));
+ } else {
+ pair.setRight(pair.getRight() + 1);
+ versions.put(version, pair);
+ }
+ }
+
+ this.api.sendMessage(sender, "commands.version.title");
+
+ if (total == 0) {
+ this.api.subMessage(sender, "commands.version.empty");
+ } else {
+ for (Pair pair : versions.values()) {
+ this.api.subMessage(sender, "commands.version.list", pair.getRight(), pair.getLeft(),
+ Math.round((pair.getRight() * 100F) / total));
+ }
+ }
+
+ // Warn user if stats are low and he has exempt permission
+ if ((total < 10) && sender.isPlayer() && sender.hasPermission(ClientStatsAPI.EXEMPT_PERMISSION)) {
+ this.api.subMessage(sender, "warning.exempted");
+ }
+
+ return;
+
+ } else if (args.get(0).equalsIgnoreCase("online")) {
+ if (this.denied(sender, "online") || this.versionDetectionDisabled(sender))
+ return;
+
+ Map> versions = new TreeMap<>();
+ int total = 0;
+
+ for (UUID online : MixedUser.getOnlineIds()) {
+ total++;
+ int version = this.api.getProtocol(online);
+ Pair pair = versions.get(version);
+ if (pair == null) {
+ String versionName = this.api.getVersionName(version);
+ versions.put(version, MutablePair.of(versionName, 1));
+ } else {
+ pair.setValue(pair.getRight() + 1);
+ versions.put(version, pair);
+ }
+ }
+
+ this.api.sendMessage(sender, "commands.online.title");
+
+ if (total == 0) {
+ this.api.subMessage(sender, "commands.online.empty");
+ } else {
+ for (Pair pair : versions.values()) {
+ this.api.subMessage(sender, "commands.online.list", pair.getRight(), pair.getLeft(),
+ Math.round((pair.getRight() * 100F) / total));
+ }
+ }
+
+ return;
+
+ } else if (args.get(0).equalsIgnoreCase("player")) {
+ if (this.denied(sender, "player") || this.versionDetectionDisabled(sender))
+ return;
+
+ if (!sender.isPlayer()) {
+ this.api.sendMessage(sender, "error.not-a-player");
+ return;
+ }
+
+ Map.Entry version = this.api.getVersion(sender.getUniqueId());
+ if (version == null) {
+ this.api.sendMessage(sender, "error.general");
+ } else {
+ this.api.sendMessage(sender, "commands.player.self", version.getValue());
+ }
+
+ return;
+
+ } else if (args.get(0).equalsIgnoreCase("reset")) {
+ if (this.denied(sender, "reset"))
+ return;
+
+ this.api.resetStats();
+ this.api.sendMessage(sender, "commands.reset");
+
+ return;
+
+ } else if (args.get(0).equalsIgnoreCase("reload")) {
+ if (this.denied(sender, "reload"))
+ return;
+
+ this.api.reload();
+ this.api.sendMessage(sender, "commands.reload.config");
+
+ this.api.sendMessage(sender, "commands.reload.version-start");
+ VersionNameProvider.reloadLater(true, ((AbstractAPI) this.api).getLogger(), new FutureCallback() {
+
+ @Override
+ public void completed(Void result) {
+ CommandHandler.this.api.sendMessage(sender, "commands.reload.version-end");
+ }
+
+ @Override
+ public void failed(Exception ex) {
+ CommandHandler.this.api.sendMessage(sender, "commands.reload.version-failed");
+ ex.printStackTrace();
+ }
+
+ @Override
+ public void cancelled() {
+ CommandHandler.this.api.sendMessage(sender, "commands.reload.version-failed");
+ }
+
+ });
+
+ return;
+ }
+
+ } else if (args.size() == 2) {
+
+ if (args.get(0).equalsIgnoreCase("player")) {
+ if (this.denied(sender, "player") || this.versionDetectionDisabled(sender))
+ return;
+
+ MixedUser player = MixedUser.getUser(args.get(1));
+ if (player == null) {
+ this.api.sendMessage(sender, "commands.player.not-found", args.get(1));
+ } else {
+ Map.Entry version = this.api.getVersion(player.getUniqueId());
+ if (version == null) {
+ this.api.sendMessage(sender, "error.general");
+ } else {
+ this.api.sendMessage(sender, "commands.player.other", player.getName(), version.getValue());
+ }
+ }
+
+ return;
+
+ }
+ }
+
+ boolean isAdmin = sender.hasPermission(ClientStatsAPI.PERMISSION_ADMIN);
+ List messages = new ArrayList<>();
+
+ for (String subCommand : SUB_COMMANDS) {
+ if (isAdmin || sender.hasPermission(ClientStatsAPI.PERMISSION_COMMAND.replace("{cmd}", subCommand))) {
+ messages.add("commands.help." + subCommand);
+ }
+ }
+
+ if (messages.isEmpty()) {
+ this.api.sendMessage(sender, "error.permission");
+ } else {
+ this.api.sendMessage(sender, "commands.help.title");
+ for (String message : messages) {
+ this.api.subMessage(sender, message, label);
+ }
+ }
}
}
\ No newline at end of file
diff --git a/src/main/java/fr/onecraft/clientstats/common/core/EventListener.java b/src/main/java/fr/onecraft/clientstats/common/core/EventListener.java
index 86c8a96..ce633f4 100644
--- a/src/main/java/fr/onecraft/clientstats/common/core/EventListener.java
+++ b/src/main/java/fr/onecraft/clientstats/common/core/EventListener.java
@@ -1,34 +1,34 @@
package fr.onecraft.clientstats.common.core;
-import fr.onecraft.clientstats.ClientStatsAPI;
-import fr.onecraft.clientstats.common.user.MixedUser;
-
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
+import fr.onecraft.clientstats.ClientStatsAPI;
+import fr.onecraft.clientstats.common.user.MixedUser;
+
public class EventListener {
private final Map playtimes = new HashMap<>();
private final AbstractAPI plugin;
public EventListener(AbstractAPI plugin) {
- this.plugin = plugin;
+ this.plugin = plugin;
}
public void onPlayerJoin(MixedUser player, boolean isNew) {
- if (!player.hasPermission(ClientStatsAPI.EXEMPT_PERMISSION)) {
- plugin.registerJoin(player, isNew);
- playtimes.put(player.getUniqueId(), System.currentTimeMillis());
- }
- plugin.updatePlayerCount();
+ if (!player.hasPermission(ClientStatsAPI.EXEMPT_PERMISSION)) {
+ this.plugin.registerJoin(player, isNew);
+ this.playtimes.put(player.getUniqueId(), System.currentTimeMillis());
+ }
+ this.plugin.updatePlayerCount();
}
public void onPlayerQuit(MixedUser player) {
- Long playtime = playtimes.remove(player.getUniqueId());
- if (playtime != null) {
- plugin.registerPlaytime(System.currentTimeMillis() - playtime);
- }
+ Long playtime = this.playtimes.remove(player.getUniqueId());
+ if (playtime != null) {
+ this.plugin.registerPlaytime(System.currentTimeMillis() - playtime);
+ }
}
}
\ No newline at end of file
diff --git a/src/main/java/fr/onecraft/clientstats/common/core/VersionNameProvider.java b/src/main/java/fr/onecraft/clientstats/common/core/VersionNameProvider.java
new file mode 100644
index 0000000..8b4ecd4
--- /dev/null
+++ b/src/main/java/fr/onecraft/clientstats/common/core/VersionNameProvider.java
@@ -0,0 +1,89 @@
+package fr.onecraft.clientstats.common.core;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.concurrent.FutureCallback;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+
+public class VersionNameProvider {
+
+ public static final String versionURL = "https://raw.githubusercontent.com/PrismarineJS/minecraft-data/master/data/pc/common/protocolVersions.json";
+
+ private static HashMap versionMap = new HashMap<>();
+ private static CloseableHttpClient httpClient = HttpClients.createDefault();
+ private static JsonParser parser = new JsonParser();
+ private static ExecutorService executor = Executors.newSingleThreadExecutor();
+
+ private static boolean isReloading = false;
+ private static Object reloadingBlock = new Object();
+
+ public static synchronized void reload(boolean silent, Logger logger) throws Exception {
+ isReloading = true;
+ logger.log(Level.INFO, "Reloading version names...");
+ HashMap old = new HashMap<>(versionMap);
+ try {
+ versionMap.clear();
+ if (!silent)
+ logger.log(Level.INFO, "Retrieving latest version list...");
+ CloseableHttpResponse response = httpClient.execute(new HttpGet(VersionNameProvider.versionURL));
+ JsonArray versions = parser.parse(EntityUtils.toString(response.getEntity())).getAsJsonArray();
+ if (!silent)
+ logger.log(Level.INFO, "Parsing version list...");
+ Iterator it = versions.iterator();
+ while (it.hasNext()) {
+ JsonObject obj = it.next().getAsJsonObject();
+ if (!obj.get("usesNetty").getAsBoolean())
+ continue;
+ versionMap.put(obj.get("version").getAsInt(),
+ (versionMap.get(obj.get("version").getAsInt()) != null
+ ? (versionMap.get(obj.get("version").getAsInt()) + "/")
+ : "") + obj.get("minecraftVersion").getAsString());
+ if (!silent)
+ logger.log(Level.INFO,
+ obj.get("version").getAsInt() + " -> " + versionMap.get(obj.get("version").getAsInt()));
+ }
+ } catch (Exception e) {
+ versionMap = old;
+ isReloading = false;
+ synchronized (reloadingBlock) {
+ reloadingBlock.notifyAll();
+ }
+ throw new Exception("Error while reloading version names", e);
+ }
+ isReloading = false;
+ synchronized (reloadingBlock) {
+ reloadingBlock.notifyAll();
+ }
+ logger.log(Level.INFO, "Reloaded version names.");
+ }
+
+ public static void reloadLater(boolean silent, Logger logger, FutureCallback callback) {
+ executor.submit(() -> {
+ try {
+ VersionNameProvider.reload(silent, logger);
+ } catch (Exception e) {
+ callback.failed(e);
+ }
+ callback.completed(null);
+ });
+ }
+
+ public static String get(int version) {
+ return versionMap.get(version);
+ }
+
+}
diff --git a/src/main/java/fr/onecraft/clientstats/common/user/MixedUser.java b/src/main/java/fr/onecraft/clientstats/common/user/MixedUser.java
index fc5476d..562d966 100644
--- a/src/main/java/fr/onecraft/clientstats/common/user/MixedUser.java
+++ b/src/main/java/fr/onecraft/clientstats/common/user/MixedUser.java
@@ -8,23 +8,23 @@ public abstract class MixedUser {
private static UserProvider provider;
public static void setProvider(UserProvider provider) {
- MixedUser.provider = provider;
+ MixedUser.provider = provider;
}
public static Collection getOnlineIds() {
- return provider.getOnlineIds();
+ return provider.getOnlineIds();
}
public static Collection getOnlineNames() {
- return provider.getOnlineNames();
+ return provider.getOnlineNames();
}
public static int getOnlineCount() {
- return provider.getOnlineCount();
+ return provider.getOnlineCount();
}
public static MixedUser getUser(String name) {
- return provider.getUser(name);
+ return provider.getUser(name);
}
public abstract void sendMessage(String msg);
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index 982e30d..e2b9eb1 100755
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -37,7 +37,7 @@ messages:
online: "&b/{1} online &f- Version of online players"
player: "&b/{1} player [who] &f- Version of player"
reset: "&b/{1} reset &f- Reset tracked stats"
- reload: "&b/{1} reload &f- Reload configuration"
+ reload: "&b/{1} reload &f- Reload configuration and version names"
stats:
title: "Statistics since {1}:"
unique: "&b{1}&f unique players joined the server."
@@ -58,7 +58,11 @@ messages:
other: "{1} is using &a{2}&f."
not-found: "Player &c{1}&f wasn't found."
reset: "All stats have been reset !"
- reload: "Configuration reloaded !"
+ reload:
+ config: "Configuration reloaded !"
+ version-start: "Reloading version name provider..."
+ version-end: "Reloaded version name provider !"
+ version-failed: "Cannot reload version name provider, version names will not work !"
warning:
version-disabled: "Sorry, version detection is §cdisabled§f. Please check server logs for more information."
exempted: "You are excluded since you have &eclientstats.exempt&f permission."
@@ -66,280 +70,3 @@ messages:
permission: "You don't have the permission."
not-a-player: "You aren't a player."
general: "An error occured.."
-versions:
- "0": "unknown"
- "498": "1.14.4"
- "497": "1.14.4-pre7"
- "496": "1.14.4-pre6"
- "495": "1.14.4-pre5"
- "494": "1.14.4-pre4"
- "493": "1.14.4-pre3"
- "492": "1.14.4-pre2"
- "491": "1.14.4-pre1"
- "490": "1.14.3"
- "489": "1.14.3-pre4"
- "488": "1.14.3-pre3"
- "487": "1.14.3-pre2"
- "486": "1.14.3-pre1"
- "485": "1.14.2"
- "484": "1.14.2 Pre-Release 4"
- "483": "1.14.2 Pre-Release 3"
- "482": "1.14.2 Pre-Release 2"
- "481": "1.14.2 Pre-Release 1"
- "480": "1.14.1"
- "479": "1.14.1 Pre-Release 2"
- "478": "1.14.1 Pre-Release 1"
- "477": "1.14"
- "476": "1.14 Pre-Release 5"
- "475": "1.14 Pre-Release 4"
- "474": "1.14 Pre-Release 3"
- "473": "1.14 Pre-Release 2"
- "472": "1.14 Pre-Release 1"
- "471": "19w14b"
- "470": "19w14a"
- "469": "19w13b"
- "468": "19w13a"
- "467": "19w12b"
- "466": "19w12a"
- "465": "19w11b"
- "464": "19w11a"
- "463": "19w09a"
- "462": "19w08b"
- "461": "19w08a"
- "460": "19w07a"
- "459": "19w06a"
- "458": "19w05a"
- "457": "19w04b"
- "456": "19w04a"
- "455": "19w03c"
- "454": "19w03b"
- "453": "19w03a"
- "452": "19w02a"
- "451": "18w50a"
- "450": "18w49a"
- "449": "18w48b"
- "448": "18w48a"
- "447": "18w47b"
- "446": "18w47a"
- "445": "18w46a"
- "444": "18w45a"
- "443": "18w44a"
- "442": "18w43c"
- "441": "18w43b"
- "441": "18w43a"
- "404": "1.13.2"
- "403": "1.13.2-pre2"
- "402": "1.13.2-pre1"
- "401": "1.13.1"
- "400": "1.13.1-pre2"
- "399": "1.13.1-pre1"
- "398": "18w33a"
- "397": "18w32a"
- "396": "18w31a"
- "395": "18w30b"
- "394": "18w30a"
- "393": "1.13"
- "392": "1.13-pre10"
- "391": "1.13-pre9"
- "390": "1.13-pre8"
- "389": "1.13-pre7"
- "388": "1.13-pre6"
- "387": "1.13-pre5"
- "386": "1.13-pre4"
- "385": "1.13-pre3"
- "384": "1.13-pre2"
- "383": "1.13-pre1"
- "382": "18w22c"
- "381": "18w22b"
- "380": "18w22a"
- "379": "18w21b"
- "378": "18w21a"
- "377": "18w20c"
- "376": "18w20b"
- "375": "18w20a"
- "374": "18w19b"
- "373": "18w19a"
- "372": "18w16a"
- "371": "18w15a"
- "370": "18w14b"
- "369": "18w14a"
- "368": "18w11a"
- "367": "18w10d"
- "366": "18w10c"
- "365": "18w10b"
- "364": "18w10a"
- "363": "18w09a"
- "362": "18w08b"
- "361": "18w08a"
- "360": "18w07c"
- "359": "18w07b"
- "358": "18w07a"
- "357": "18w06a"
- "356": "18w05a"
- "355": "18w03b"
- "354": "18w03a"
- "353": "18w02a"
- "352": "18w01a"
- "351": "17w50a"
- "350": "17w49b"
- "349": "17w49a"
- "348": "17w48a"
- "347": "17w47b"
- "346": "17w47a"
- "345": "17w46a"
- "344": "17w45b"
- "343": "17w45a"
- "342": "17w43b"
- "341": "17w43a"
- "340": "1.12.2"
- "339": "1.12.2-pre1, 1.12.2-pre2"
- "338": "1.12.1"
- "337": "1.12.1-pre1"
- "336": "17w31a"
- "335": "1.12"
- "334": "1.12-pre7"
- "333": "1.12-pre6"
- "332": "1.12-pre5"
- "331": "1.12-pre4"
- "330": "1.12-pre3"
- "329": "1.12-pre2"
- "328": "1.12-pre1"
- "327": "17w18b"
- "326": "17w18a"
- "325": "17w17b"
- "324": "17w17a"
- "323": "17w16b"
- "322": "17w16a"
- "321": "17w15a"
- "320": "17w14a"
- "319": "17w13b"
- "318": "17w13a"
- "317": "17w06a"
- "316": "1.11.1, 1.11.2"
- "315": "1.11"
- "314": "1.11-pre1"
- "313": "16w43a, 16w44a"
- "312": "16w42a"
- "311": "16w41a"
- "310": "16w40a"
- "309": "16w39c"
- "308": "16w39b"
- "307": "16w39a"
- "306": "16w38a"
- "305": "16w36a"
- "304": "16w35a"
- "303": "16w33a"
- "302": "16w32b"
- "301": "16w32a"
- "210": "1.10 - 1.10.2"
- "205": "1.10-pre2"
- "204": "1.10-pre1"
- "203": "16w21b"
- "202": "16w21a"
- "201": "16w20a"
- "110": "1.9.3, 1.9.4"
- "109": "1.9.2"
- "108": "1.9.1"
- "107": "1.9"
- "106": "1.9 pre4"
- "105": "1.9 pre3"
- "104": "1.9 pre2"
- "103": "1.9 pre1"
- "102": "16w07b"
- "101": "16w07a"
- "100": "16w06a"
- "99": "16w05b"
- "98": "16w05a"
- "97": "16w04a"
- "96": "16w03a"
- "95": "16w02a"
- "94": "15w51b"
- "93": "15w51a"
- "92": "15w50a"
- "91": "15w49b"
- "90": "15w49a"
- "89": "15w47c"
- "88": "15w47b"
- "87": "15w47a"
- "86": "15w46a"
- "85": "15w45a"
- "84": "15w44b"
- "83": "15w44a"
- "82": "15w43c"
- "81": "15w43b"
- "80": "15w43a"
- "79": "15w42a"
- "78": "15w41b"
- "77": "15w41a"
- "76": "15w40b"
- "75": "15w40a"
- "74": "15w39c"
- "73": "15w38b"
- "72": "15w38a"
- "71": "15w37a"
- "70": "15w36d"
- "69": "15w36c"
- "68": "15w36b"
- "67": "15w36a"
- "66": "15w35e"
- "65": "15w35d"
- "64": "15w35c"
- "63": "15w35b"
- "62": "15w35a"
- "61": "15w34d"
- "60": "15w34c"
- "59": "15w34b"
- "58": "15w34a"
- "57": "15w33c"
- "56": "15w33b"
- "55": "15w33a"
- "54": "15w32c"
- "53": "15w32b"
- "52": "15w32a"
- "51": "15w31c"
- "50": "15w31b"
- "49": "15w31a"
- "48": "15w14a"
- "47": "1.8 - 1.8.9"
- "46": "1.8 pre3"
- "45": "1.8 pre2"
- "44": "1.8 pre1"
- "43": "14w34d"
- "42": "14w34c"
- "41": "14w34b"
- "40": "14w34a"
- "39": "14w33c"
- "38": "14w33b"
- "37": "14w33a"
- "36": "14w32d"
- "35": "14w32c"
- "34": "14w32b"
- "33": "14w32a"
- "32": "14w31a"
- "31": "14w30c"
- "30": "14w30a"
- "29": "14w29a"
- "28": "14w28b"
- "27": "14w28a"
- "26": "14w27a, 14w27b"
- "25": "14w26c"
- "24": "14w26b"
- "23": "14w26a"
- "22": "14w25b"
- "21": "14w25a"
- "20": "14w21b"
- "19": "14w21a"
- "18": "14w20a"
- "17": "14w19a"
- "16": "14w18b"
- "15": "14w17a"
- "14": "14w11a"
- "12": "14w08a"
- "11": "14w07a"
- "10": "14w06a"
- "9": "14w05a"
- "8": "14w04b"
- "7": "14w04a"
- "6": "14w03a"
- "5": "1.7.6 - 1.7.10"
- "4": "1.7.1 - 1.7.5"
diff --git a/src/test/java/fr/onecraft/clientstats/common/SortingTest.java b/src/test/java/fr/onecraft/clientstats/common/SortingTest.java
index e8ebf67..b7d026d 100644
--- a/src/test/java/fr/onecraft/clientstats/common/SortingTest.java
+++ b/src/test/java/fr/onecraft/clientstats/common/SortingTest.java
@@ -1,36 +1,37 @@
package fr.onecraft.clientstats.common;
-import fr.onecraft.core.tuple.Pair;
-import org.junit.Test;
+import static org.junit.Assert.assertEquals;
import java.util.Map;
import java.util.TreeMap;
-import static org.junit.Assert.assertEquals;
+import org.junit.Test;
+
+import fr.onecraft.core.tuple.Pair;
public class SortingTest {
@Test
public void treeMap() {
- Integer[] protocolOrder = new Integer[]{47, 107, 108, 109, 110, 210};
+ Integer[] protocolOrder = new Integer[] { 47, 107, 108, 109, 110, 210 };
- Map> versions = new TreeMap<>();
- versions.put(108, Pair.of("1.9.1", 14));
- versions.put(47, Pair.of("1.8 - 1.8.9", 210));
- versions.put(210, Pair.of("1.10 - 1.10.2", 210));
- versions.put(107, Pair.of("1.9", 79));
- versions.put(110, Pair.of("1.9.3, 1.9.4", 478));
- versions.put(109, Pair.of("1.9.2", 56));
+ Map> versions = new TreeMap<>();
+ versions.put(108, Pair.of("1.9.1", 14));
+ versions.put(47, Pair.of("1.8 - 1.8.9", 210));
+ versions.put(210, Pair.of("1.10 - 1.10.2", 210));
+ versions.put(107, Pair.of("1.9", 79));
+ versions.put(110, Pair.of("1.9.3, 1.9.4", 478));
+ versions.put(109, Pair.of("1.9.2", 56));
// int total = 0;
// for (Pair pair : versions.values()) total += pair.getRight();
- int i = 0;
- for (Map.Entry> entry : versions.entrySet()) {
- assertEquals(protocolOrder[i++], entry.getKey());
+ int i = 0;
+ for (Map.Entry> entry : versions.entrySet()) {
+ assertEquals(protocolOrder[i++], entry.getKey());
// int percent = Math.round(entry.getValue().getRight() * 100F / total);
- }
+ }
}