diff --git a/Plan/dependency-reduced-pom.xml b/Plan/dependency-reduced-pom.xml index f5d762d20..7b3d46293 100644 --- a/Plan/dependency-reduced-pom.xml +++ b/Plan/dependency-reduced-pom.xml @@ -83,14 +83,11 @@ org.slf4j plan.org.slf4j - - org.slf4j.Logger - - - org.bstats - com.djrapitops.plan.utilities.metrics - + + org.bstats + com.djrapitops.plan.utilities.metrics + @@ -149,14 +146,14 @@ sponge-repo https://repo.spongepowered.org/maven - - md_5-snapshots - http://repo.md-5.net/content/repositories/snapshots/ - - - bstats-repo - http://repo.bstats.org/content/repositories/releases/ - + + md_5-snapshots + http://repo.md-5.net/content/repositories/snapshots/ + + + bstats-repo + http://repo.bstats.org/content/repositories/releases/ + @@ -359,12 +356,12 @@ - - com.imaginarycode.minecraft - RedisBungee - 0.3.8-SNAPSHOT - provided - + + com.imaginarycode.minecraft + RedisBungee + 0.3.8-SNAPSHOT + provided + org.mockito mockito-core @@ -388,7 +385,7 @@ org.xerial sqlite-jdbc - 3.23.1 + 3.23.1 test diff --git a/Plan/pom.xml b/Plan/pom.xml index baf436b60..9f16f2e25 100644 --- a/Plan/pom.xml +++ b/Plan/pom.xml @@ -223,6 +223,7 @@ org.mockito:* org.easymock:* junit:* + @@ -248,9 +249,6 @@ org.slf4j plan.org.slf4j - - org.slf4j.Logger - org.bstats diff --git a/Plan/src/main/java/com/djrapitops/plan/PlanSponge.java b/Plan/src/main/java/com/djrapitops/plan/PlanSponge.java index 60ece7eba..543b60759 100644 --- a/Plan/src/main/java/com/djrapitops/plan/PlanSponge.java +++ b/Plan/src/main/java/com/djrapitops/plan/PlanSponge.java @@ -25,7 +25,7 @@ import org.spongepowered.api.plugin.Plugin; import java.io.File; import java.io.InputStream; -@Plugin(id = "plan", name = "Plan", version = "4.4.4", description = "Player Analytics Plugin by Rsl1122", authors = {"Rsl1122"}) +@Plugin(id = "plan", name = "Plan", version = "4.4.5", description = "Player Analytics Plugin by Rsl1122", authors = {"Rsl1122"}) public class PlanSponge extends SpongePlugin implements PlanPlugin { @Inject diff --git a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageUninstalledCommand.java b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageUninstalledCommand.java index e42715f52..456f388f0 100644 --- a/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageUninstalledCommand.java +++ b/Plan/src/main/java/com/djrapitops/plan/command/commands/manage/ManageUninstalledCommand.java @@ -3,7 +3,6 @@ package com.djrapitops.plan.command.commands.manage; import com.djrapitops.plan.PlanPlugin; import com.djrapitops.plan.api.exceptions.database.DBOpException; import com.djrapitops.plan.system.database.databases.Database; -import com.djrapitops.plan.system.info.connection.ConnectionSystem; import com.djrapitops.plan.system.info.server.Server; import com.djrapitops.plan.system.info.server.ServerInfo; import com.djrapitops.plan.system.locale.Locale; @@ -69,7 +68,7 @@ public class ManageUninstalledCommand extends CommandNode { } private Optional getServer(String[] args) { - if (args.length >= 1 && ConnectionSystem.getInstance().isServerAvailable()) { + if (args.length >= 1) { Map bukkitServers = Database.getActive().fetch().getBukkitServers(); String serverIdentifier = getGivenIdentifier(args); for (Map.Entry entry : bukkitServers.entrySet()) { diff --git a/Plan/src/main/java/com/djrapitops/plan/data/store/containers/NetworkContainer.java b/Plan/src/main/java/com/djrapitops/plan/data/store/containers/NetworkContainer.java index 12b14fc28..dab7aae04 100644 --- a/Plan/src/main/java/com/djrapitops/plan/data/store/containers/NetworkContainer.java +++ b/Plan/src/main/java/com/djrapitops/plan/data/store/containers/NetworkContainer.java @@ -173,4 +173,7 @@ public class NetworkContainer extends DataContainer { putSupplier(NetworkKeys.PLAYERS_MONTH, () -> getUnsafe(uniqueMonth).count()); } + public ServerContainer getBungeeContainer() { + return bungeeContainer; + } } \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ServerTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ServerTable.java index 6df2a8a83..d9a3aaf18 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ServerTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/ServerTable.java @@ -367,7 +367,7 @@ public class ServerTable extends Table { } public void setAsUninstalled(UUID serverUUID) { - String sql = "UPDATE " + tableName + " SET (" + Col.INSTALLED + "=?) WHERE " + Col.SERVER_UUID + "=?"; + String sql = "UPDATE " + tableName + " SET " + Col.INSTALLED + "=? WHERE " + Col.SERVER_UUID + "=?"; execute(new ExecStatement(sql) { @Override diff --git a/Plan/src/main/java/com/djrapitops/plan/system/info/BungeeInfoSystem.java b/Plan/src/main/java/com/djrapitops/plan/system/info/BungeeInfoSystem.java index c9e5e1d56..527597f46 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/info/BungeeInfoSystem.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/info/BungeeInfoSystem.java @@ -10,6 +10,7 @@ import com.djrapitops.plan.api.exceptions.connection.WebException; import com.djrapitops.plan.system.info.connection.BungeeConnectionSystem; import com.djrapitops.plan.system.info.request.CacheRequest; import com.djrapitops.plan.system.info.request.GenerateInspectPageRequest; +import com.djrapitops.plan.system.info.request.GenerateInspectPluginsTabRequest; import com.djrapitops.plan.system.info.request.InfoRequest; import com.djrapitops.plan.system.info.server.ServerInfo; import com.djrapitops.plan.system.webserver.cache.PageId; @@ -30,8 +31,10 @@ public class BungeeInfoSystem extends InfoSystem { @Override public void runLocally(InfoRequest infoRequest) throws WebException { - if (infoRequest instanceof CacheRequest || - infoRequest instanceof GenerateInspectPageRequest) { + if (infoRequest instanceof CacheRequest + || infoRequest instanceof GenerateInspectPageRequest + || infoRequest instanceof GenerateInspectPluginsTabRequest + ) { infoRequest.runLocally(); } else { // runLocally is called when ConnectionSystem has no servers. diff --git a/Plan/src/main/java/com/djrapitops/plan/system/info/connection/BungeeConnectionSystem.java b/Plan/src/main/java/com/djrapitops/plan/system/info/connection/BungeeConnectionSystem.java index 96aa03587..ae9516525 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/info/connection/BungeeConnectionSystem.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/info/connection/BungeeConnectionSystem.java @@ -7,6 +7,7 @@ package com.djrapitops.plan.system.info.connection; import com.djrapitops.plan.api.exceptions.connection.NoServersException; import com.djrapitops.plan.api.exceptions.database.DBOpException; import com.djrapitops.plan.system.database.databases.Database; +import com.djrapitops.plan.system.info.InfoSystem; import com.djrapitops.plan.system.info.request.*; import com.djrapitops.plan.system.info.server.Server; import com.djrapitops.plan.system.info.server.ServerInfo; @@ -44,7 +45,9 @@ public class BungeeConnectionSystem extends ConnectionSystem { protected Server selectServerForRequest(InfoRequest infoRequest) throws NoServersException { refreshServerMap(); Server server = null; - if (infoRequest instanceof CacheRequest || infoRequest instanceof GenerateInspectPageRequest) { + if (infoRequest instanceof CacheRequest + || infoRequest instanceof GenerateInspectPageRequest + || infoRequest instanceof GenerateInspectPluginsTabRequest) { // Run locally return ServerInfo.getServer(); } else if (infoRequest instanceof GenerateAnalysisPageRequest) { @@ -66,6 +69,10 @@ public class BungeeConnectionSystem extends ConnectionSystem { for (Server server : bukkitServers.values()) { WebExceptionLogger.logIfOccurs(this.getClass(), () -> sendInfoRequest(infoRequest, server)); } + // Quick hack + if (infoRequest instanceof GenerateInspectPluginsTabRequest) { + WebExceptionLogger.logIfOccurs(this.getClass(), () -> InfoSystem.getInstance().sendRequest(infoRequest)); + } } @Override diff --git a/Plan/src/main/java/com/djrapitops/plan/system/tasks/TPSCountTimer.java b/Plan/src/main/java/com/djrapitops/plan/system/tasks/TPSCountTimer.java index ba94523c3..93fe4cd32 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/tasks/TPSCountTimer.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/tasks/TPSCountTimer.java @@ -7,6 +7,8 @@ import com.djrapitops.plan.system.processing.processors.TPSInsertProcessor; import com.djrapitops.plugin.api.utility.log.Log; import com.djrapitops.plugin.task.AbsRunnable; +import java.lang.management.ManagementFactory; +import java.lang.management.OperatingSystemMXBean; import java.util.ArrayList; import java.util.List; @@ -52,4 +54,27 @@ public abstract class TPSCountTimer extends AbsRunnable { public int getLatestPlayersOnline() { return latestPlayersOnline; } + + protected long getUsedMemory() { + Runtime runtime = Runtime.getRuntime(); + long totalMemory = runtime.totalMemory(); + return (totalMemory - runtime.freeMemory()) / 1000000; + } + + protected double getCPUUsage() { + double averageCPUUsage; + + OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean(); + if (osBean instanceof com.sun.management.OperatingSystemMXBean) { + com.sun.management.OperatingSystemMXBean nativeOsBean = (com.sun.management.OperatingSystemMXBean) osBean; + averageCPUUsage = nativeOsBean.getSystemCpuLoad(); + } else { + int availableProcessors = osBean.getAvailableProcessors(); + averageCPUUsage = osBean.getSystemLoadAverage() / availableProcessors; + } + if (averageCPUUsage < 0) { // If unavailable, getSystemLoadAverage() returns -1 + averageCPUUsage = -1; + } + return averageCPUUsage * 100.0; + } } diff --git a/Plan/src/main/java/com/djrapitops/plan/system/tasks/bungee/BungeeTPSCountTimer.java b/Plan/src/main/java/com/djrapitops/plan/system/tasks/bungee/BungeeTPSCountTimer.java index 2d5edb328..dda2d8233 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/tasks/bungee/BungeeTPSCountTimer.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/tasks/bungee/BungeeTPSCountTimer.java @@ -19,6 +19,10 @@ public class BungeeTPSCountTimer extends TPSCountTimer { .date(now) .skipTPS() .playersOnline(onlineCount) + .usedCPU(getCPUUsage()) + .usedMemory(getUsedMemory()) + .entities(-1) + .chunksLoaded(-1) .toTPS(); history.add(tps); diff --git a/Plan/src/main/java/com/djrapitops/plan/system/tasks/server/BukkitTPSCountTimer.java b/Plan/src/main/java/com/djrapitops/plan/system/tasks/server/BukkitTPSCountTimer.java index 7ace91d0a..1017dea99 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/tasks/server/BukkitTPSCountTimer.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/tasks/server/BukkitTPSCountTimer.java @@ -7,9 +7,6 @@ import com.djrapitops.plugin.api.TimeAmount; import com.djrapitops.plugin.api.utility.log.Log; import org.bukkit.World; -import java.lang.management.ManagementFactory; -import java.lang.management.OperatingSystemMXBean; - public class BukkitTPSCountTimer extends TPSCountTimer { private long lastCheckNano; @@ -43,10 +40,7 @@ public class BukkitTPSCountTimer extends TPSCountTimer { private TPS calculateTPS(long diff, long now) { double averageCPUUsage = getCPUUsage(); - Runtime runtime = Runtime.getRuntime(); - - long totalMemory = runtime.totalMemory(); - long usedMemory = (totalMemory - runtime.freeMemory()) / 1000000; + long usedMemory = getUsedMemory(); int playersOnline = plugin.getServer().getOnlinePlayers().size(); latestPlayersOnline = playersOnline; @@ -58,22 +52,6 @@ public class BukkitTPSCountTimer extends TPSCountTimer { return getTPS(diff, now, averageCPUUsage, usedMemory, entityCount, loadedChunks, playersOnline); } - private double getCPUUsage() { - double averageCPUUsage; - - OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean(); - if (osBean instanceof com.sun.management.OperatingSystemMXBean) { - com.sun.management.OperatingSystemMXBean nativeOsBean = (com.sun.management.OperatingSystemMXBean) osBean; - averageCPUUsage = nativeOsBean.getSystemCpuLoad(); - } else { - int availableProcessors = osBean.getAvailableProcessors(); - averageCPUUsage = osBean.getSystemLoadAverage() / availableProcessors; - } - if (averageCPUUsage < 0) { // If unavailable, getSystemLoadAverage() returns -1 - averageCPUUsage = -1; - } - return averageCPUUsage * 100.0; - } /** * Gets the TPS for Spigot / Bukkit diff --git a/Plan/src/main/java/com/djrapitops/plan/system/tasks/server/SpongeTPSCountTimer.java b/Plan/src/main/java/com/djrapitops/plan/system/tasks/server/SpongeTPSCountTimer.java index 2e3356bab..a3ce43333 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/tasks/server/SpongeTPSCountTimer.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/tasks/server/SpongeTPSCountTimer.java @@ -9,9 +9,6 @@ import com.djrapitops.plugin.api.utility.log.Log; import org.spongepowered.api.Sponge; import org.spongepowered.api.world.World; -import java.lang.management.ManagementFactory; -import java.lang.management.OperatingSystemMXBean; - public class SpongeTPSCountTimer extends TPSCountTimer { private long lastCheckNano; @@ -42,18 +39,9 @@ public class SpongeTPSCountTimer extends TPSCountTimer { * @return the TPS */ private TPS calculateTPS(long now) { - OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean(); - int availableProcessors = operatingSystemMXBean.getAvailableProcessors(); - double averageCPUUsage = operatingSystemMXBean.getSystemLoadAverage() / availableProcessors * 100.0; + double averageCPUUsage = getCPUUsage(); - if (averageCPUUsage < 0) { // If unavailable, getSystemLoadAverage() returns -1 - averageCPUUsage = -1; - } - - Runtime runtime = Runtime.getRuntime(); - - long totalMemory = runtime.totalMemory(); - long usedMemory = (totalMemory - runtime.freeMemory()) / 1000000; + long usedMemory = getUsedMemory(); double tps = Sponge.getGame().getServer().getTicksPerSecond(); int playersOnline = ServerInfo.getServerProperties().getOnlinePlayers(); diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/graphs/ProgressBar.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/graphs/ProgressBar.java new file mode 100644 index 000000000..a29ebc932 --- /dev/null +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/graphs/ProgressBar.java @@ -0,0 +1,39 @@ +package com.djrapitops.plan.utilities.html.graphs; + +import com.djrapitops.plan.data.store.mutators.formatting.Formatters; + +/** + * Utility for creating ProgressBars. + * + * @author Rsl1122 + */ +public class ProgressBar { + + private final int obtained; + private final int max; + + private final String color; + + public ProgressBar(int obtained, int max) { + this(obtained, max, "teal"); + } + + public ProgressBar(int obtained, int max, String color) { + this.obtained = obtained; + this.max = max; + this.color = color; + } + + public String toHtml() { + double percentage = obtained * 1.0 / max; + int percentageRounded = (int) percentage; + + return "
" + + obtained + " / " + max + " (" + Formatters.percentage().apply(percentage) + ")" + + "
"; + } + +} \ No newline at end of file diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/DebugPage.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/DebugPage.java index ad8af1497..aaf0c69e2 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/DebugPage.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/DebugPage.java @@ -14,7 +14,6 @@ import com.djrapitops.plan.system.info.server.Server; import com.djrapitops.plan.system.info.server.ServerInfo; import com.djrapitops.plan.system.info.server.properties.ServerProperties; import com.djrapitops.plan.system.webserver.cache.ResponseCache; -import com.djrapitops.plan.utilities.file.FileUtil; import com.djrapitops.plan.utilities.html.Html; import com.djrapitops.plan.utilities.html.HtmlStructure; import com.djrapitops.plan.utilities.html.icon.Icon; @@ -23,11 +22,9 @@ import com.djrapitops.plugin.api.Benchmark; import com.djrapitops.plugin.api.utility.log.ErrorLogger; import com.djrapitops.plugin.api.utility.log.Log; -import java.io.File; import java.io.IOException; import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; -import java.nio.charset.Charset; import java.util.*; /** @@ -52,10 +49,9 @@ public class DebugPage implements Page { TabsElement.Tab info = new TabsElement.Tab(Icon.called("server") + " Server Information", createServerInfoContent()); TabsElement.Tab errors = new TabsElement.Tab(Icon.called("exclamation-circle") + " Errors", createErrorContent()); TabsElement.Tab debugLog = new TabsElement.Tab(Icon.called("bug") + " Debug Log", createDebugLogContent()); - TabsElement.Tab config = new TabsElement.Tab(Icon.called("cogs") + " Plan Config", createConfigContent()); TabsElement.Tab caches = new TabsElement.Tab(Icon.called("archive") + " Plan Caches", createCacheContent()); - TabsElement tabs = new TabsElement(info, errors, debugLog, config, caches); + TabsElement tabs = new TabsElement(info, errors, debugLog, caches); return preContent + tabs.toHtmlFull(); } @@ -105,12 +101,6 @@ public class DebugPage implements Page { } } - private String createConfigContent() { - StringBuilder content = new StringBuilder(); - appendConfig(content); - return content.toString(); - } - private String createDebugLogContent() { StringBuilder content = new StringBuilder(); appendDebugLog(content); @@ -221,21 +211,6 @@ public class DebugPage implements Page { content.append(""); } - private void appendConfig(StringBuilder content) { - try { - File configFile = new File(PlanPlugin.getInstance().getDataFolder(), "config.yml"); - if (configFile.exists()) { - content.append("
### config.yml
```
"); - FileUtil.lines(configFile, Charset.forName("UTF-8")) - .stream().filter(line -> !line.toLowerCase().contains("pass") && !line.toLowerCase().contains("secret")) - .forEach(line -> content.append(line).append("
")); - content.append("```
"); - } - } catch (IOException e) { - Log.toLog(this.getClass(), e); - } - } - private void appendBenchmarks(StringBuilder content) { content.append("
### Benchmarks
```
"); try { diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/NetworkPage.java b/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/NetworkPage.java index 16175b197..073cafbd0 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/NetworkPage.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/html/pages/NetworkPage.java @@ -13,6 +13,7 @@ import com.djrapitops.plan.system.webserver.cache.PageId; import com.djrapitops.plan.system.webserver.cache.ResponseCache; import com.djrapitops.plan.system.webserver.response.pages.parts.NetworkPageContent; import com.djrapitops.plan.utilities.file.FileUtil; +import com.djrapitops.plan.utilities.html.structure.AnalysisPluginsTabContentCreator; import static com.djrapitops.plan.data.store.keys.NetworkKeys.*; @@ -51,6 +52,13 @@ public class NetworkPage implements Page { ResponseCache.loadResponse(PageId.NETWORK_CONTENT.id(), NetworkPageContent::new); placeholderReplacer.put("tabContentServers", networkPageContent.getContents()); + String[] content = AnalysisPluginsTabContentCreator.createContent(networkContainer.getUnsafe(NetworkKeys.PLAYERS_MUTATOR), null); + String nav = content[0]; + String tabs = content[1]; + + placeholderReplacer.put("navPluginsTabs", nav); + placeholderReplacer.put("tabsPlugins", tabs); + return placeholderReplacer.apply(FileUtil.getStringFromResource("web/network.html")); } catch (Exception e) { throw new ParseException(e); diff --git a/Plan/src/main/resources/bungee.yml b/Plan/src/main/resources/bungee.yml index 365f2b64d..0b1e9b6f6 100644 --- a/Plan/src/main/resources/bungee.yml +++ b/Plan/src/main/resources/bungee.yml @@ -1,4 +1,4 @@ name: Plan author: Rsl1122 main: com.djrapitops.plan.PlanBungee -version: 4.4.4 \ No newline at end of file +version: 4.4.5 \ No newline at end of file diff --git a/Plan/src/main/resources/bungeeconfig.yml b/Plan/src/main/resources/bungeeconfig.yml index 02d582993..0a659ed81 100644 --- a/Plan/src/main/resources/bungeeconfig.yml +++ b/Plan/src/main/resources/bungeeconfig.yml @@ -148,4 +148,9 @@ Servers: Example: WebServerPort: 8034 ServerName: Example - ThemeBase: Default \ No newline at end of file + ThemeBase: Default +# ----------------------------------------------------- +Plugins: + BuyCraft: + # http://help.buycraft.net/article/36-where-to-find-the-secret-key + Secret: "-" \ No newline at end of file diff --git a/Plan/src/main/resources/plugin.yml b/Plan/src/main/resources/plugin.yml index 8583e4134..55c0b3fe7 100644 --- a/Plan/src/main/resources/plugin.yml +++ b/Plan/src/main/resources/plugin.yml @@ -1,7 +1,7 @@ name: Plan author: Rsl1122 main: com.djrapitops.plan.Plan -version: 4.4.4 +version: 4.4.5 softdepend: - EssentialsX - Towny diff --git a/Plan/src/main/resources/web/network.html b/Plan/src/main/resources/web/network.html index 77dfe6b25..869b50233 100644 --- a/Plan/src/main/resources/web/network.html +++ b/Plan/src/main/resources/web/network.html @@ -130,6 +130,15 @@ Network Players +
  • + + extension + Plugins + +
      + ${navPluginsTabs} +
    +
  • @@ -487,6 +496,7 @@ + ${tabsPlugins} diff --git a/PlanPluginBridge/PlanPluginBridge-4.4.0.jar b/PlanPluginBridge/PlanPluginBridge-4.4.0.jar index fdf51327b..c39acfcea 100644 Binary files a/PlanPluginBridge/PlanPluginBridge-4.4.0.jar and b/PlanPluginBridge/PlanPluginBridge-4.4.0.jar differ diff --git a/PlanPluginBridge/pom.xml b/PlanPluginBridge/pom.xml index cc4e6edba..eb7c024dc 100644 --- a/PlanPluginBridge/pom.xml +++ b/PlanPluginBridge/pom.xml @@ -41,6 +41,10 @@ + + bungeecord-repo + https://oss.sonatype.org/content/repositories/snapshots + spigot-repo https://hub.spigotmc.org/nexus/content/repositories/snapshots/ @@ -54,7 +58,7 @@ http://nexus.hc.to/content/repositories/pub_releases - jitpack.io + jitpack.io (GriefPrevention) https://jitpack.io @@ -82,14 +86,14 @@ 4.3.0-SNAPSHOT provided - + + com.destroystokyo.paper paper-api 1.12.2-R0.1-SNAPSHOT provided - org.spigotmc spigot-api @@ -97,6 +101,15 @@ jar provided + + net.md-5 + bungeecord-api + 1.12-SNAPSHOT + jar + provided + + + com.hm.achievement advanced-achievements-api @@ -104,39 +117,21 @@ provided - com.earth2me - essentials - 2.0.1 + com.github.TechFortress + GriefPrevention + 16.8 provided - com.massivecraft - factions - 2.10.0 + me.clip + placeholderapi + 2.9.1 provided - com.gamingmesh - jobs - 4.0.1 - provided - - - com.massivecraft - mcore - 2.10.0 - provided - - - com.gmail.nossr50 - mcMMO - 1.5.07 - provided - - - com.palmergames - towny - 0.91.4.0 + br.net.fabiozumbi12.RedProtect + RedProtect-Spigot + 7.5.3 provided @@ -146,18 +141,56 @@ provided - com.wasteofplastic.askyblock - ASkyBlock - 3.0.6.8 + us.myles + viaversion + 1.5.0 + provided + + + + + + me.konsolas + AAC + 3.5.0 provided - com.github.TechFortress - GriefPrevention - 16.7.1 + me.leoko + advancedban + 2.1.5 + provided + + + com.wasteofplastic.askyblock + ASkyBlock + 3.0.9.4 + provided + + + me.confuser + banmanager + 5.15.0 + provided + + + net.ess3 + EssentialsX + 2.15.0.1 + provided + + + com.massivecraft + factions + 2.14.0 + provided + + + com.massivecraft + mcore + 2.14.0 provided - net.kaikk.mc GriefPreventionPlus @@ -165,21 +198,9 @@ provided - litebans - api - 0.2 - provided - - - io.minimum - minecraft.superbvote - 0.4.1 - provided - - - us.myles - viaversion - 1.1.1 + com.gamingmesh + jobs + 4.7.4 provided @@ -189,51 +210,39 @@ provided - me.confuser - banmanager - 5.15.0 + litebans + api + 0.3 + provided + + + com.gmail.nossr50 + mcMMO + 1.6.0 provided - - - - - - com.github.ProtocolSupport ProtocolSupport 4.28 provided - - br.net.fabiozumbi12.RedProtect - RedProtect-Spigot - RELEASE - provided - - - me.konsolas - AAC - 3.3.5 - provided - - - me.clip - placeholderapi - LATEST - provided - com.volmit react - 6.549 + 6.573 provided - me.leoko - advancedban - 2.1.5 + io.minimum + minecraft.superbvote + 0.5.3 + provided + + + com.palmergames + towny + 0.92.0.0 provided @@ -245,46 +254,6 @@ maven-install-plugin 2.5.2 - org.jacoco jacoco-maven-plugin diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/Bridge.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/Bridge.java index 809783300..6659fdb50 100644 --- a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/Bridge.java +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/Bridge.java @@ -16,14 +16,16 @@ import com.djrapitops.pluginbridge.plan.griefprevention.GriefPreventionHook; import com.djrapitops.pluginbridge.plan.griefprevention.plus.GriefPreventionPlusHook; import com.djrapitops.pluginbridge.plan.jobs.JobsHook; import com.djrapitops.pluginbridge.plan.kingdoms.KingdomsHook; -import com.djrapitops.pluginbridge.plan.litebans.LiteBansHook; +import com.djrapitops.pluginbridge.plan.litebans.LiteBansBukkitHook; +import com.djrapitops.pluginbridge.plan.litebans.LiteBansBungeeHook; import com.djrapitops.pluginbridge.plan.mcmmo.McmmoHook; import com.djrapitops.pluginbridge.plan.protocolsupport.ProtocolSupportHook; import com.djrapitops.pluginbridge.plan.redprotect.RedProtectHook; import com.djrapitops.pluginbridge.plan.superbvote.SuperbVoteHook; import com.djrapitops.pluginbridge.plan.towny.TownyHook; import com.djrapitops.pluginbridge.plan.vault.VaultHook; -import com.djrapitops.pluginbridge.plan.viaversion.ViaVersionHook; +import com.djrapitops.pluginbridge.plan.viaversion.ViaVersionBukkitHook; +import com.djrapitops.pluginbridge.plan.viaversion.ViaVersionBungeeHook; /** * Manages connection to other plugins. @@ -56,17 +58,30 @@ public class Bridge { private static Hook[] getHooks(HookHandler h) { Hook[] hooks; - if (Check.isBukkitAvailable()) { - hooks = getBukkitHooks(h); - } else { + if (Check.isBungeeAvailable()) { hooks = getBungeeHooks(h); + } else if (Check.isBukkitAvailable()) { + hooks = getBukkitHooks(h); + } else if (Check.isSpongeAvailable()) { + hooks = getSpongeHooks(h); + } else { + return new Hook[0]; } return hooks; } + private static Hook[] getSpongeHooks(HookHandler h) { + return new Hook[]{ + new BuyCraftHook(h) + }; + } + private static Hook[] getBungeeHooks(HookHandler h) { return new Hook[]{ - new AdvancedBanHook(h) + new AdvancedBanHook(h), + new BuyCraftHook(h), + new LiteBansBungeeHook(h), + new ViaVersionBungeeHook(h) }; } @@ -84,7 +99,7 @@ public class Bridge { new GriefPreventionPlusHook(h), new JobsHook(h), new KingdomsHook(h), - new LiteBansHook(h), + new LiteBansBukkitHook(h), new McmmoHook(h), new SuperbVoteHook(h), new ProtocolSupportHook(h), @@ -92,7 +107,7 @@ public class Bridge { new RedProtectHook(h), new TownyHook(h), new VaultHook(h), - new ViaVersionHook(h)//, + new ViaVersionBukkitHook(h)//, // new PlaceholderAPIHook(h) }; } diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/advancedban/AdvancedBanData.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/advancedban/AdvancedBanData.java index 31f4bfae2..377083f1a 100644 --- a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/advancedban/AdvancedBanData.java +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/advancedban/AdvancedBanData.java @@ -9,7 +9,6 @@ import com.djrapitops.plan.data.element.AnalysisContainer; import com.djrapitops.plan.data.element.InspectContainer; import com.djrapitops.plan.data.plugin.ContainerSize; import com.djrapitops.plan.data.plugin.PluginData; -import com.djrapitops.plan.data.store.keys.AnalysisKeys; import com.djrapitops.plan.utilities.FormatUtils; import com.djrapitops.plan.utilities.html.Html; import com.djrapitops.plan.utilities.html.HtmlUtils; @@ -17,15 +16,13 @@ import com.djrapitops.plan.utilities.html.icon.Color; import com.djrapitops.plan.utilities.html.icon.Family; import com.djrapitops.plan.utilities.html.icon.Icon; import com.djrapitops.plan.utilities.html.icon.Icons; -import com.djrapitops.plugin.api.utility.log.Log; -import java.util.Collection; -import java.util.HashMap; -import java.util.UUID; import me.leoko.advancedban.manager.PunishmentManager; -import me.leoko.advancedban.manager.UUIDManager; import me.leoko.advancedban.utils.Punishment; import me.leoko.advancedban.utils.PunishmentType; +import java.util.Collection; +import java.util.UUID; + /** * PluginData for AdvancedBan plugin. * @@ -45,59 +42,52 @@ public class AdvancedBanData extends PluginData { return inspectContainer; } - Punishment ban = PunishmentManager.get().getBan(abUuid); - Punishment mute = PunishmentManager.get().getMute(abUuid); - long warnings = PunishmentManager.get().getWarns(abUuid).stream().filter(warning -> !warning.isExpired()).count(); + PunishmentManager punishmentManager = PunishmentManager.get(); + Punishment ban = punishmentManager.getBan(abUuid); + Punishment mute = punishmentManager.getMute(abUuid); + long warnings = punishmentManager.getWarns(abUuid).stream().filter(warning -> !warning.isExpired()).count(); inspectContainer.addValue(getWithIcon("Banned", Icons.BANNED), ban != null ? "Yes" : "No"); - inspectContainer.addValue(getWithIcon("Muted", Icon.called("bell-slash").of(Color.DEEP_ORANGE)), mute != null ? "Yes" : "No"); + if (ban != null) { + addPunishment(inspectContainer, ban, "Permanent ban"); + } + + inspectContainer.addValue(getWithIcon("Muted", Icon.called("bell-slash").of(Color.DEEP_ORANGE)), mute != null ? "Yes" : "No"); + if (mute != null) { + addPunishment(inspectContainer, mute, "Permanent mute"); + } + inspectContainer.addValue(getWithIcon("Warnings", Icon.called("flag").of(Color.YELLOW)), warnings); - if (ban != null) { - String operator = ban.getOperator(); - String link = Html.LINK.parse(PlanAPI.getInstance().getPlayerInspectPageLink(operator), operator); - String reason = HtmlUtils.swapColorsToSpan(ban.getReason()); - long start = ban.getStart(); - String end = FormatUtils.formatTimeStampYear(ban.getEnd()); - - if (ban.getType() == PunishmentType.BAN || ban.getType() == PunishmentType.IP_BAN) { // Permanent - end = "Permanent ban"; - } - - if (operator.equals("CONSOLE")) { - link = "CONSOLE"; - } - - inspectContainer.addValue(" " + getWithIcon("Operator", Icon.called("user").of(Color.RED)), link); - inspectContainer.addValue(" " + getWithIcon("Date", Icon.called("calendar").of(Color.RED).of(Family.REGULAR)), FormatUtils.formatTimeStampYear(start)); - inspectContainer.addValue(" " + getWithIcon("Ends", Icon.called("calendar-check").of(Color.RED).of(Family.REGULAR)), end); - inspectContainer.addValue(" " + getWithIcon("Reason", Icon.called("comment").of(Color.RED).of(Family.REGULAR)), reason); - } - - if (mute != null) { - String operator = mute.getOperator(); - String link = Html.LINK.parse(PlanAPI.getInstance().getPlayerInspectPageLink(operator), operator); - String reason = HtmlUtils.swapColorsToSpan(mute.getReason()); - long start = mute.getStart(); - String end = FormatUtils.formatTimeStampYear(mute.getEnd()); - - if (mute.getType() == PunishmentType.MUTE) { // Permanent - end = "Permanent mute"; - } - - if (operator.equals("CONSOLE")) { - link = "CONSOLE"; - } - - inspectContainer.addValue(" " + getWithIcon("Operator", Icon.called("user").of(Color.DEEP_ORANGE)), link); - inspectContainer.addValue(" " + getWithIcon("Date", Icon.called("calendar").of(Color.DEEP_ORANGE).of(Family.REGULAR)), FormatUtils.formatTimeStampYear(start)); - inspectContainer.addValue(" " + getWithIcon("Ends", Icon.called("calendar-check").of(Color.DEEP_ORANGE).of(Family.REGULAR)), end); - inspectContainer.addValue(" " + getWithIcon("Reason", Icon.called("comment").of(Color.DEEP_ORANGE).of(Family.REGULAR)), reason); - } - return inspectContainer; } + private void addPunishment(InspectContainer inspectContainer, Punishment punishment, String identifier) { + String operator = punishment.getOperator(); + String link = Html.LINK.parse(PlanAPI.getInstance().getPlayerInspectPageLink(operator), operator); + String reason = HtmlUtils.swapColorsToSpan(punishment.getReason()); + String start = FormatUtils.formatTimeStampYear(punishment.getStart()); + String end = FormatUtils.formatTimeStampYear(punishment.getEnd()); + + PunishmentType type = punishment.getType(); + // Permanent + if (type == PunishmentType.BAN + || type == PunishmentType.IP_BAN + || type == PunishmentType.MUTE + ) { + end = identifier; + } + + if (operator.equals("CONSOLE")) { + link = "CONSOLE"; + } + + inspectContainer.addValue(" " + getWithIcon("Operator", Icon.called("user").of(Color.RED)), link); + inspectContainer.addValue(" " + getWithIcon("Date", Icon.called("calendar").of(Color.RED).of(Family.REGULAR)), start); + inspectContainer.addValue(" " + getWithIcon("Ends", Icon.called("calendar-check").of(Color.RED).of(Family.REGULAR)), end); + inspectContainer.addValue(" " + getWithIcon("Reason", Icon.called("comment").of(Color.RED).of(Family.REGULAR)), reason); + } + @Override public AnalysisContainer getServerData(Collection uuids, AnalysisContainer analysisContainer) { return analysisContainer; diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/askyblock/ASkyBlockData.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/askyblock/ASkyBlockData.java index 08516f12d..fc3640f07 100644 --- a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/askyblock/ASkyBlockData.java +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/askyblock/ASkyBlockData.java @@ -6,14 +6,18 @@ package com.djrapitops.pluginbridge.plan.askyblock; import com.djrapitops.plan.data.element.AnalysisContainer; import com.djrapitops.plan.data.element.InspectContainer; +import com.djrapitops.plan.data.element.TableContainer; import com.djrapitops.plan.data.plugin.ContainerSize; import com.djrapitops.plan.data.plugin.PluginData; +import com.djrapitops.plan.utilities.html.graphs.ProgressBar; import com.djrapitops.plan.utilities.html.icon.Color; import com.djrapitops.plan.utilities.html.icon.Family; import com.djrapitops.plan.utilities.html.icon.Icon; +import com.djrapitops.plugin.utilities.Format; import com.wasteofplastic.askyblock.ASkyBlockAPI; import java.util.Collection; +import java.util.Map; import java.util.UUID; /** @@ -35,7 +39,7 @@ public class ASkyBlockData extends PluginData { public InspectContainer getPlayerData(UUID uuid, InspectContainer inspectContainer) { if (api.hasIsland(uuid)) { String islandName = api.getIslandName(uuid); - int level = api.getIslandLevel(uuid); + long level = api.getLongIslandLevel(uuid); int resetsLeft = api.getResetsLeft(uuid); inspectContainer.addValue(getWithIcon("Island Name", Icon.called("street-view").of(Color.GREEN)), islandName); @@ -45,9 +49,39 @@ public class ASkyBlockData extends PluginData { inspectContainer.addValue(getWithIcon("Island Name", Icon.called("street-view").of(Color.GREEN)), "No Island"); } + Map challengeCompletion = api.getChallengeTimes(uuid); + int obtained = (int) challengeCompletion.values().stream().filter(value -> value != 0).count(); + int max = challengeCompletion.size(); + + inspectContainer.addValue(getWithIcon("Challenge Progress", Icon.called("bookmark").of(Color.LIGHT_BLUE)), obtained + " / " + max); + ProgressBar challengeProgress = new ProgressBar(obtained, max, "light-blue"); + inspectContainer.addHtml("challenge-progress", challengeProgress.toHtml()); + + addTable(inspectContainer, challengeCompletion); + return inspectContainer; } + private void addTable(InspectContainer inspectContainer, Map challengeCompletion) { + TableContainer challenges = new TableContainer( + getWithIcon("Challenge", Icon.called("bookmark")), + getWithIcon("Times completed", Icon.called("check")) + ); + challenges.setColor("light-blue"); + challengeCompletion.entrySet().stream() + .sorted((one, two) -> Integer.compare(two.getValue(), one.getValue())) + .forEach(entry -> { + String challenge = new Format(entry.getKey()).capitalize().toString(); + Integer completionTimes = entry.getValue(); + boolean complete = completionTimes > 0; + challenges.addRow( + "" + challenge + "", + completionTimes + ); + }); + inspectContainer.addTable("challenge-table", challenges); + } + @Override public AnalysisContainer getServerData(Collection uuids, AnalysisContainer analysisContainer) { int islandCount = api.getIslandCount(); diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/litebans/LiteBansHook.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/litebans/LiteBansBukkitHook.java similarity index 83% rename from PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/litebans/LiteBansHook.java rename to PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/litebans/LiteBansBukkitHook.java index 67dfc0544..516d3241c 100644 --- a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/litebans/LiteBansHook.java +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/litebans/LiteBansBukkitHook.java @@ -5,6 +5,7 @@ import com.djrapitops.plan.system.settings.Settings; import com.djrapitops.plugin.api.utility.log.Log; import com.djrapitops.pluginbridge.plan.Hook; import litebans.api.Database; +import org.bukkit.Bukkit; /** * A Class responsible for hooking to LiteBans and registering data @@ -13,7 +14,7 @@ import litebans.api.Database; * @author Rsl1122 * @since 3.5.0 */ -public class LiteBansHook extends Hook { +public class LiteBansBukkitHook extends Hook { /** * Hooks the plugin and registers it's PluginData objects. @@ -24,7 +25,7 @@ public class LiteBansHook extends Hook { * @throws NoClassDefFoundError when the plugin class can not be found. */ @SuppressWarnings("ResultOfMethodCallIgnored") - public LiteBansHook(HookHandler hookH) { + public LiteBansBukkitHook(HookHandler hookH) { super(hookH); try { Database.get(); @@ -39,7 +40,8 @@ public class LiteBansHook extends Hook { public void hook() throws NoClassDefFoundError { if (enabled) { - LiteBansDatabaseQueries db = new LiteBansDatabaseQueries(); + String tablePrefix = Bukkit.getPluginManager().getPlugin("LiteBans").getConfig().getString("sql.table_prefix"); + LiteBansDatabaseQueries db = new LiteBansDatabaseQueries(tablePrefix); addPluginDataSource(new LiteBansData(db)); } } diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/litebans/LiteBansBungeeHook.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/litebans/LiteBansBungeeHook.java new file mode 100644 index 000000000..3cfe62196 --- /dev/null +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/litebans/LiteBansBungeeHook.java @@ -0,0 +1,69 @@ +package com.djrapitops.pluginbridge.plan.litebans; + +import com.djrapitops.plan.data.plugin.HookHandler; +import com.djrapitops.plan.system.settings.Settings; +import com.djrapitops.plugin.api.utility.log.Log; +import com.djrapitops.pluginbridge.plan.Hook; +import litebans.api.Database; +import net.md_5.bungee.api.ProxyServer; +import net.md_5.bungee.config.Configuration; +import net.md_5.bungee.config.ConfigurationProvider; +import net.md_5.bungee.config.YamlConfiguration; + +import java.io.File; +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; + +/** + * A Class responsible for hooking to LiteBans and registering data + * sources. + * + * @author Rsl1122 + * @since 3.5.0 + */ +public class LiteBansBungeeHook extends Hook { + + /** + * Hooks the plugin and registers it's PluginData objects. + *

    + * API#addPluginDataSource uses the same method from HookHandler. + * + * @param hookH HookHandler instance for registering the data sources. + * @throws NoClassDefFoundError when the plugin class can not be found. + */ + @SuppressWarnings("ResultOfMethodCallIgnored") + public LiteBansBungeeHook(HookHandler hookH) { + super(hookH); + try { + Database.get(); + enabled = true; + } catch (NoClassDefFoundError | NoSuchFieldError | NoSuchMethodError | Exception e) { + if (Settings.DEV_MODE.isTrue()) { + Log.toLog(this.getClass(), e); + } + enabled = false; + } + } + + public void hook() throws NoClassDefFoundError { + if (enabled) { + LiteBansDatabaseQueries db = new LiteBansDatabaseQueries(getTablePrefix()); + addPluginDataSource(new LiteBansData(db)); + } + } + + private String getTablePrefix() { + String tablePrefix = "libeans_"; + try { + File litebansDataFolder = ProxyServer.getInstance().getPluginManager().getPlugin("LiteBans").getDataFolder(); + File configFile = new File(litebansDataFolder, "config.yml"); + + Configuration configuration = ConfigurationProvider.getProvider(YamlConfiguration.class).load(configFile); + tablePrefix = configuration.getString("sql.table_prefix"); + } catch (NullPointerException | IOException e) { + Logger.getLogger("Plan").log(Level.WARNING, "Could not get Litebans table prefix, using default (litebans_). " + e.toString()); + } + return tablePrefix; + } +} diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/litebans/LiteBansData.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/litebans/LiteBansData.java index 48cde675c..f58704be9 100644 --- a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/litebans/LiteBansData.java +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/litebans/LiteBansData.java @@ -44,7 +44,7 @@ public class LiteBansData extends PluginData implements BanData { public InspectContainer getPlayerData(UUID uuid, InspectContainer inspectContainer) { inspectContainer.addValue(Icon.called("balance-scale").of(Color.RED) + - "Hover over 'What' column entry for offence reasons", ""); + " Hover over 'What' column entry for offence reasons", ""); String what = getWithIcon("Effect", Icon.called("times-circle").of(Family.REGULAR)); String by = getWithIcon("By", Icon.called("gavel")); diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/litebans/LiteBansDatabaseQueries.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/litebans/LiteBansDatabaseQueries.java index 3c9f90332..f11cfb0b2 100644 --- a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/litebans/LiteBansDatabaseQueries.java +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/litebans/LiteBansDatabaseQueries.java @@ -5,7 +5,6 @@ import com.djrapitops.plan.system.database.databases.sql.processing.QueryAllStat import com.djrapitops.plan.system.database.databases.sql.processing.QueryStatement; import com.djrapitops.plan.system.database.databases.sql.tables.Table; import litebans.api.Database; -import org.bukkit.Bukkit; import java.sql.PreparedStatement; import java.sql.ResultSet; @@ -30,10 +29,9 @@ public class LiteBansDatabaseQueries extends Table { private final String selectSQL; - public LiteBansDatabaseQueries() { + public LiteBansDatabaseQueries(String tablePrefix) { super("litebans", null); database = Database.get(); - String tablePrefix = Bukkit.getPluginManager().getPlugin("LiteBans").getConfig().getString("sql.table_prefix"); banTable = tablePrefix + "bans"; mutesTable = tablePrefix + "mutes"; warningsTable = tablePrefix + "warnings"; diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/react/ReactDataTask.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/react/ReactDataTask.java index 7510e0c88..2a44728a2 100644 --- a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/react/ReactDataTask.java +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/react/ReactDataTask.java @@ -7,8 +7,8 @@ import com.djrapitops.plugin.task.AbsRunnable; import com.volmit.react.React; import com.volmit.react.api.GraphSampleLine; import com.volmit.react.api.SampledType; -import com.volmit.react.util.GMap; import com.volmit.react.util.M; +import com.volmit.react.volume.lang.collections.GMap; import java.util.ArrayList; import java.util.EnumMap; diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/PlayerVersionListener.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/BukkitPlayerVersionListener.java similarity index 92% rename from PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/PlayerVersionListener.java rename to PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/BukkitPlayerVersionListener.java index da82d60f8..ca41fbd7e 100644 --- a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/PlayerVersionListener.java +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/BukkitPlayerVersionListener.java @@ -24,11 +24,11 @@ import java.util.UUID; * @author Rsl1122 * @since 3.5.0 */ -public class PlayerVersionListener implements Listener { +public class BukkitPlayerVersionListener implements Listener { private ViaAPI viaAPI; - public PlayerVersionListener(ViaAPI viaAPI) { + public BukkitPlayerVersionListener(ViaAPI viaAPI) { this.viaAPI = viaAPI; } diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/BungeePlayerVersionListener.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/BungeePlayerVersionListener.java new file mode 100644 index 000000000..382fedc1d --- /dev/null +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/BungeePlayerVersionListener.java @@ -0,0 +1,46 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.djrapitops.pluginbridge.plan.viaversion; + +import com.djrapitops.plan.api.exceptions.database.DBOpException; +import com.djrapitops.plan.system.database.databases.Database; +import com.djrapitops.plan.system.database.databases.sql.SQLDB; +import com.djrapitops.plan.system.processing.Processing; +import com.djrapitops.plugin.api.utility.log.Log; +import net.md_5.bungee.api.event.PostLoginEvent; +import net.md_5.bungee.api.plugin.Listener; +import net.md_5.bungee.event.EventHandler; +import us.myles.ViaVersion.api.ViaAPI; + +import java.util.UUID; + +/** + * Class responsible for listening join events for Version protocol. + * + * @author Rsl1122 + * @since 3.5.0 + */ +public class BungeePlayerVersionListener implements Listener { + + private ViaAPI viaAPI; + + public BungeePlayerVersionListener(ViaAPI viaAPI) { + this.viaAPI = viaAPI; + } + + @EventHandler + public void onJoin(PostLoginEvent event) { + UUID uuid = event.getPlayer().getUniqueId(); + int playerVersion = viaAPI.getPlayerVersion(uuid); + Processing.submitNonCritical(() -> { + try { + new ProtocolTable((SQLDB) Database.getActive()).saveProtocolVersion(uuid, playerVersion); + } catch (DBOpException e) { + Log.toLog(this.getClass(), e); + } + }); + } +} diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/Protocol.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/Protocol.java index b99764fb7..a98417036 100644 --- a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/Protocol.java +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/Protocol.java @@ -25,6 +25,8 @@ public class Protocol { */ public static String getMCVersion(int protocolVersion) { switch (protocolVersion) { + case 401: + return "1.13.1"; case 390: case 391: case 392: diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/ViaVersionHook.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/ViaVersionBukkitHook.java similarity index 89% rename from PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/ViaVersionHook.java rename to PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/ViaVersionBukkitHook.java index bcaaa9f12..4db2dc27e 100644 --- a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/ViaVersionHook.java +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/ViaVersionBukkitHook.java @@ -16,7 +16,7 @@ import us.myles.ViaVersion.api.ViaAPI; * @author Rsl1122 * @since 3.1.0 */ -public class ViaVersionHook extends Hook { +public class ViaVersionBukkitHook extends Hook { /** * Hooks the plugin and registers it's PluginData objects. @@ -25,7 +25,7 @@ public class ViaVersionHook extends Hook { * * @param hookH HookHandler instance for registering the data sources. */ - public ViaVersionHook(HookHandler hookH) { + public ViaVersionBukkitHook(HookHandler hookH) { super("us.myles.ViaVersion.ViaVersionPlugin", hookH); } @@ -42,7 +42,7 @@ public class ViaVersionHook extends Hook { Log.toLog(this.getClass().getName(), e); return; } - plan.registerListener(new PlayerVersionListener(api)); + plan.registerListener(new BukkitPlayerVersionListener(api)); addPluginDataSource(new ViaVersionData(table)); } } \ No newline at end of file diff --git a/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/ViaVersionBungeeHook.java b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/ViaVersionBungeeHook.java new file mode 100644 index 000000000..41addff02 --- /dev/null +++ b/PlanPluginBridge/src/main/java/com/djrapitops/pluginbridge/plan/viaversion/ViaVersionBungeeHook.java @@ -0,0 +1,48 @@ +package com.djrapitops.pluginbridge.plan.viaversion; + +import com.djrapitops.plan.PlanBungee; +import com.djrapitops.plan.api.exceptions.database.DBException; +import com.djrapitops.plan.data.plugin.HookHandler; +import com.djrapitops.plan.system.database.databases.Database; +import com.djrapitops.plan.system.database.databases.sql.SQLDB; +import com.djrapitops.plugin.api.utility.log.Log; +import com.djrapitops.pluginbridge.plan.Hook; +import us.myles.ViaVersion.api.Via; +import us.myles.ViaVersion.api.ViaAPI; + +/** + * A Class responsible for hooking to ViaVersion and registering data sources. + * + * @author Rsl1122 + * @since 3.1.0 + */ +public class ViaVersionBungeeHook extends Hook { + + /** + * Hooks the plugin and registers it's PluginData objects. + *

    + * API#addPluginDataSource uses the same method from HookHandler. + * + * @param hookH HookHandler instance for registering the data sources. + */ + public ViaVersionBungeeHook(HookHandler hookH) { + super("us.myles.ViaVersion.BungeePlugin", hookH); + } + + public void hook() throws NoClassDefFoundError { + if (!enabled) { + return; + } + PlanBungee plan = PlanBungee.getInstance(); + ViaAPI api = Via.getAPI(); + ProtocolTable table = new ProtocolTable((SQLDB) Database.getActive()); + try { + table.createTable(); + } catch (DBException e) { + Log.toLog(this.getClass().getName(), e); + return; + } + plan.registerListener(new BungeePlayerVersionListener(api)); + addPluginDataSource(new ViaVersionData(table)); + } +} \ No newline at end of file