mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2024-12-21 05:50:18 +08:00
Added Bungee PluginData rendering support #571
Added Bungee Plugin Support: AdvancedBan, BuyCraft, LiteBans, ViaVersion Added Sponge Plugin support: BuyCraft
This commit is contained in:
parent
5295d56f3c
commit
af2eed4d88
@ -173,4 +173,7 @@ public class NetworkContainer extends DataContainer {
|
||||
putSupplier(NetworkKeys.PLAYERS_MONTH, () -> getUnsafe(uniqueMonth).count());
|
||||
}
|
||||
|
||||
public ServerContainer getBungeeContainer() {
|
||||
return bungeeContainer;
|
||||
}
|
||||
}
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -149,3 +149,8 @@ Servers:
|
||||
WebServerPort: 8034
|
||||
ServerName: Example
|
||||
ThemeBase: Default
|
||||
# -----------------------------------------------------
|
||||
Plugins:
|
||||
BuyCraft:
|
||||
# http://help.buycraft.net/article/36-where-to-find-the-secret-key
|
||||
Secret: "-"
|
@ -130,6 +130,15 @@
|
||||
<span>Network Players</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="javascript:void(0);" class="menu-toggle">
|
||||
<i class="material-icons">extension</i>
|
||||
<span>Plugins</span>
|
||||
</a>
|
||||
<ul class="ml-menu">
|
||||
${navPluginsTabs}
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- #Menu -->
|
||||
@ -487,6 +496,7 @@
|
||||
<!-- #END# Geolocations -->
|
||||
</div>
|
||||
<!-- #END# Tab Geolocations -->
|
||||
${tabsPlugins}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
@ -41,6 +41,10 @@
|
||||
</properties>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>bungeecord-repo</id>
|
||||
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>spigot-repo</id>
|
||||
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
|
||||
@ -97,7 +101,13 @@
|
||||
<type>jar</type>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>net.md-5</groupId>
|
||||
<artifactId>bungeecord-api</artifactId>
|
||||
<version>1.12-SNAPSHOT</version>
|
||||
<type>jar</type>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<!-- Plugins from repositories -->
|
||||
|
||||
<dependency>
|
||||
|
@ -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)
|
||||
};
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
@ -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.
|
||||
* <p>
|
||||
* 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;
|
||||
}
|
||||
}
|
@ -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";
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
@ -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:
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
@ -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.
|
||||
* <p>
|
||||
* 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));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user