mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2024-10-05 18:08:00 +02:00
BanData is now used in Server Analysis #630
This commit is contained in:
parent
228997950a
commit
5bf69b61aa
@ -11,7 +11,8 @@ import java.util.UUID;
|
||||
* Interface for PluginData objects that affect Ban state of players.
|
||||
*
|
||||
* @author Rsl1122
|
||||
* @deprecated As of 4.3.2+ BanData has been deprecated as a way to display bans. Use Key integration instead.
|
||||
* @deprecated New implementations should not be created as better plugin data integration is
|
||||
* being created.
|
||||
*/
|
||||
@Deprecated
|
||||
public interface BanData {
|
||||
|
@ -10,6 +10,7 @@ import com.djrapitops.plugin.utilities.Verify;
|
||||
import com.djrapitops.pluginbridge.plan.Bridge;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* Class responsible for hooking to other plugins and managing the %plugins%
|
||||
@ -87,6 +88,13 @@ public class HookHandler implements SubSystem {
|
||||
return additionalDataSources;
|
||||
}
|
||||
|
||||
public List<BanData> getBanDataSources() {
|
||||
return additionalDataSources.stream()
|
||||
.filter(p -> p instanceof BanData)
|
||||
.map(p -> (BanData) p)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public Map<PluginData, InspectContainer> getInspectContainersFor(UUID uuid) {
|
||||
List<PluginData> plugins = getAdditionalDataSources();
|
||||
Map<PluginData, InspectContainer> containers = new HashMap<>();
|
||||
|
@ -7,6 +7,7 @@ import com.djrapitops.plan.data.store.keys.AnalysisKeys;
|
||||
import com.djrapitops.plan.data.store.keys.PlayerKeys;
|
||||
import com.djrapitops.plan.data.store.keys.ServerKeys;
|
||||
import com.djrapitops.plan.data.store.mutators.*;
|
||||
import com.djrapitops.plan.data.store.mutators.combiners.MultiBanCombiner;
|
||||
import com.djrapitops.plan.data.store.mutators.formatting.Formatters;
|
||||
import com.djrapitops.plan.data.time.WorldTimes;
|
||||
import com.djrapitops.plan.system.database.databases.Database;
|
||||
@ -16,6 +17,7 @@ import com.djrapitops.plan.system.settings.Settings;
|
||||
import com.djrapitops.plan.system.settings.theme.Theme;
|
||||
import com.djrapitops.plan.system.settings.theme.ThemeVal;
|
||||
import com.djrapitops.plan.utilities.MiscUtils;
|
||||
import com.djrapitops.plan.utilities.analysis.ServerBanDataReader;
|
||||
import com.djrapitops.plan.utilities.html.graphs.ActivityStackGraph;
|
||||
import com.djrapitops.plan.utilities.html.graphs.PunchCardGraph;
|
||||
import com.djrapitops.plan.utilities.html.graphs.WorldMap;
|
||||
@ -69,6 +71,12 @@ public class AnalysisContainer extends DataContainer {
|
||||
addCommandSuppliers();
|
||||
addServerHealth();
|
||||
addPluginSuppliers();
|
||||
|
||||
runCombiners();
|
||||
}
|
||||
|
||||
private void runCombiners() {
|
||||
new MultiBanCombiner(this.serverContainer).combine(getUnsafe(AnalysisKeys.BAN_DATA));
|
||||
}
|
||||
|
||||
private void addConstants() {
|
||||
@ -379,8 +387,10 @@ public class AnalysisContainer extends DataContainer {
|
||||
putSupplier(navAndTabs, () ->
|
||||
AnalysisPluginsTabContentCreator.createContent(
|
||||
getUnsafe(AnalysisKeys.PLAYERS_MUTATOR),
|
||||
this)
|
||||
this
|
||||
)
|
||||
);
|
||||
putSupplier(AnalysisKeys.BAN_DATA, () -> new ServerBanDataReader().readBanDataForContainer(this));
|
||||
putSupplier(AnalysisKeys.PLUGINS_TAB_NAV, () -> getUnsafe(navAndTabs)[0]);
|
||||
putSupplier(AnalysisKeys.PLUGINS_TAB, () -> getUnsafe(navAndTabs)[1]);
|
||||
}
|
||||
|
@ -139,6 +139,7 @@ public class AnalysisKeys {
|
||||
public static final Key<Long> ANALYSIS_TIME_MONTH_AGO = new Key<>(Long.class, "ANALYSIS_TIME_MONTH_AGO");
|
||||
public static final Key<Map<UUID, String>> PLAYER_NAMES = new Key<>(new Type<Map<UUID, String>>() {}, "PLAYER_NAMES");
|
||||
public static final Key<TreeMap<Long, Map<String, Set<UUID>>>> ACTIVITY_DATA = new Key<>(new Type<TreeMap<Long, Map<String, Set<UUID>>>>() {}, "ACTIVITY_DATA");
|
||||
public static final Key<Set<UUID>> BAN_DATA = new Key<>(new Type<Set<UUID>>() {}, "BAN_DATA");
|
||||
|
||||
private AnalysisKeys() {
|
||||
/* Static variable class */
|
||||
|
@ -0,0 +1,49 @@
|
||||
package com.djrapitops.plan.data.store.mutators.combiners;
|
||||
|
||||
import com.djrapitops.plan.data.store.containers.DataContainer;
|
||||
import com.djrapitops.plan.data.store.containers.PerServerContainer;
|
||||
import com.djrapitops.plan.data.store.containers.PlayerContainer;
|
||||
import com.djrapitops.plan.data.store.keys.PerServerKeys;
|
||||
import com.djrapitops.plan.data.store.keys.PlayerKeys;
|
||||
import com.djrapitops.plan.data.store.keys.ServerKeys;
|
||||
import com.djrapitops.plan.system.info.server.ServerInfo;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class MultiBanCombiner {
|
||||
|
||||
private final DataContainer container;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param container DataContainer that supports {@link com.djrapitops.plan.data.store.keys.ServerKeys}.PLAYERS
|
||||
*/
|
||||
public MultiBanCombiner(DataContainer container) {
|
||||
this.container = container;
|
||||
}
|
||||
|
||||
public void combine(Set<UUID> banned) {
|
||||
combine(Collections.singletonMap(ServerInfo.getServerUUID(), banned));
|
||||
}
|
||||
|
||||
public void combine(Map<UUID, Set<UUID>> perServerBanned) {
|
||||
List<PlayerContainer> playerContainers = container.getValue(ServerKeys.PLAYERS).orElse(new ArrayList<>());
|
||||
|
||||
for (Map.Entry<UUID, Set<UUID>> entry : perServerBanned.entrySet()) {
|
||||
UUID serverUUID = entry.getKey();
|
||||
Set<UUID> banned = entry.getValue();
|
||||
for (PlayerContainer player : playerContainers) {
|
||||
if (player.getValue(PlayerKeys.UUID).map(banned::contains).orElse(false)) {
|
||||
PerServerContainer perServer = player.getValue(PlayerKeys.PER_SERVER)
|
||||
.orElse(new PerServerContainer());
|
||||
DataContainer perServerContainer = perServer.getOrDefault(serverUUID, new DataContainer());
|
||||
|
||||
perServerContainer.putRawData(PerServerKeys.BANNED, true);
|
||||
|
||||
perServer.put(serverUUID, perServerContainer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package com.djrapitops.plan.utilities.analysis;
|
||||
|
||||
import com.djrapitops.plan.data.plugin.BanData;
|
||||
import com.djrapitops.plan.data.plugin.HookHandler;
|
||||
import com.djrapitops.plan.data.store.containers.DataContainer;
|
||||
import com.djrapitops.plan.data.store.keys.AnalysisKeys;
|
||||
import com.djrapitops.plan.data.store.mutators.PlayersMutator;
|
||||
import com.djrapitops.plugin.api.utility.log.Log;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class ServerBanDataReader {
|
||||
|
||||
public Set<UUID> readBanDataForContainer(DataContainer container) {
|
||||
return readBanData(
|
||||
container.getValue(AnalysisKeys.PLAYERS_MUTATOR)
|
||||
.map(PlayersMutator::uuids)
|
||||
.orElse(new ArrayList<>())
|
||||
);
|
||||
}
|
||||
|
||||
public Set<UUID> readBanData(Collection<UUID> uuids) {
|
||||
List<BanData> banPlugins = HookHandler.getInstance().getBanDataSources();
|
||||
|
||||
Set<UUID> banned = new HashSet<>();
|
||||
for (BanData banPlugin : banPlugins) {
|
||||
try {
|
||||
banned.addAll(banPlugin.filterBanned(uuids));
|
||||
} catch (Exception | NoSuchMethodError | NoClassDefFoundError | NoSuchFieldError e) {
|
||||
Log.toLog("PluginData caused exception: " + banPlugin.getClass().getName(), e);
|
||||
}
|
||||
}
|
||||
return banned;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user