AdvancedBan support (#688)

+ Make Hook not check if the class extends JavaPlugin
This commit is contained in:
Vankka 2018-08-16 16:59:54 +03:00 committed by Rsl1122
parent 5ad7f3f591
commit 9d45fa1c40
6 changed files with 148 additions and 11 deletions

View File

@ -19,6 +19,7 @@ softdepend:
- ProtocolSupport
- Kingdoms
- RedProtect
- AdvancedBan
commands:
plan:

View File

@ -129,7 +129,7 @@
</dependency>
<dependency>
<groupId>com.gmail.nossr50</groupId>
<artifactId>mcmmo</artifactId>
<artifactId>mcMMO</artifactId>
<version>1.5.07</version>
<scope>provided</scope>
</dependency>
@ -161,7 +161,7 @@
<dependency>
<groupId>net.kaikk.mc</groupId>
<artifactId>GriefPreventionPlus</artifactId>
<version>RELEASE</version>
<version>13.3</version>
<scope>provided</scope>
</dependency>
<dependency>
@ -230,6 +230,12 @@
<version>6.549</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>me.leoko</groupId>
<artifactId>advancedban</artifactId>
<version>2.1.5</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>

View File

@ -6,6 +6,7 @@ import com.djrapitops.plugin.api.Check;
import com.djrapitops.plugin.api.utility.log.Log;
import com.djrapitops.pluginbridge.plan.aac.AdvancedAntiCheatHook;
import com.djrapitops.pluginbridge.plan.advancedachievements.AdvancedAchievementsHook;
import com.djrapitops.pluginbridge.plan.advancedban.AdvancedBanHook;
import com.djrapitops.pluginbridge.plan.askyblock.ASkyBlockHook;
import com.djrapitops.pluginbridge.plan.banmanager.BanManagerHook;
import com.djrapitops.pluginbridge.plan.buycraft.BuyCraftHook;
@ -64,13 +65,16 @@ public class Bridge {
}
private static Hook[] getBungeeHooks(HookHandler h) {
return new Hook[0];
return new Hook[]{
new AdvancedBanHook(h)
};
}
private static Hook[] getBukkitHooks(HookHandler h) {
return new Hook[]{
new AdvancedAntiCheatHook(h),
new AdvancedAchievementsHook(h),
new AdvancedBanHook(h),
new ASkyBlockHook(h),
new BanManagerHook(h),
new BuyCraftHook(h),

View File

@ -2,9 +2,6 @@ package com.djrapitops.pluginbridge.plan;
import com.djrapitops.plan.data.plugin.HookHandler;
import com.djrapitops.plan.data.plugin.PluginData;
import org.bukkit.plugin.java.JavaPlugin;
import static org.bukkit.plugin.java.JavaPlugin.getPlugin;
/**
* Abstract class for easy hooking of plugins.
@ -35,11 +32,9 @@ public abstract class Hook {
public Hook(String plugin, HookHandler hookHandler) {
this.hookHandler = hookHandler;
try {
Class<?> givenClass = Class.forName(plugin);
Class<? extends JavaPlugin> pluginClass = (Class<? extends JavaPlugin>) givenClass;
JavaPlugin hookedPlugin = getPlugin(pluginClass);
enabled = hookedPlugin.isEnabled();
} catch (NoClassDefFoundError | NoSuchFieldError | NoSuchMethodError | Exception e) {
Class.forName(plugin);
enabled = true;
} catch (Exception e) {
enabled = false;
}
}

View File

@ -0,0 +1,105 @@
/*
* Licence is provided in the jar as license.yml also here:
* https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml
*/
package com.djrapitops.pluginbridge.plan.advancedban;
import com.djrapitops.plan.api.PlanAPI;
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;
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;
/**
* PluginData for AdvancedBan plugin.
*
* @author Vankka
*/
public class AdvancedBanData extends PluginData {
public AdvancedBanData() {
super(ContainerSize.THIRD, "AdvancedBan");
setPluginIcon(Icons.BANNED);
}
@Override
public InspectContainer getPlayerData(UUID uuid, InspectContainer inspectContainer) {
String abUuid = uuid.toString().replace("-", "");
if (uuid.version() == 3) { // Cracked / Offline UUID
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();
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");
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("&nbsp;" + getWithIcon("Operator", Icon.called("user").of(Color.RED)), link);
inspectContainer.addValue("&nbsp;" + getWithIcon("Date", Icon.called("calendar").of(Color.RED).of(Family.REGULAR)), FormatUtils.formatTimeStampYear(start));
inspectContainer.addValue("&nbsp;" + getWithIcon("Ends", Icon.called("calendar-check").of(Color.RED).of(Family.REGULAR)), end);
inspectContainer.addValue("&nbsp;" + 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("&nbsp;" + getWithIcon("Operator", Icon.called("user").of(Color.DEEP_ORANGE)), link);
inspectContainer.addValue("&nbsp;" + getWithIcon("Date", Icon.called("calendar").of(Color.DEEP_ORANGE).of(Family.REGULAR)), FormatUtils.formatTimeStampYear(start));
inspectContainer.addValue("&nbsp;" + getWithIcon("Ends", Icon.called("calendar-check").of(Color.DEEP_ORANGE).of(Family.REGULAR)), end);
inspectContainer.addValue("&nbsp;" + getWithIcon("Reason", Icon.called("comment").of(Color.DEEP_ORANGE).of(Family.REGULAR)), reason);
}
return inspectContainer;
}
@Override
public AnalysisContainer getServerData(Collection<UUID> uuids, AnalysisContainer analysisContainer) {
return analysisContainer;
}
}

View File

@ -0,0 +1,26 @@
/*
* Licence is provided in the jar as license.yml also here:
* https://github.com/Rsl1122/Plan-PlayerAnalytics/blob/master/Plan/src/main/resources/license.yml
*/
package com.djrapitops.pluginbridge.plan.advancedban;
import com.djrapitops.pluginbridge.plan.Hook;
import com.djrapitops.plan.data.plugin.HookHandler;
/**
* Hook for AdvancedBan plugin.
*
* @author Vankka
*/
public class AdvancedBanHook extends Hook {
public AdvancedBanHook(HookHandler hookHandler) {
super("me.leoko.advancedban.Universal", hookHandler);
}
@Override
public void hook() throws NoClassDefFoundError {
if (enabled) {
addPluginDataSource(new AdvancedBanData());
}
}
}