Skip to content

Commit

Permalink
Merge pull request #3 from Maxopoly/master
Browse files Browse the repository at this point in the history
Banstick association exclusions by Maxopoly
  • Loading branch information
TealNerd authored Jun 24, 2018
2 parents 69993ab + 4acecc7 commit a777bd4
Show file tree
Hide file tree
Showing 11 changed files with 863 additions and 211 deletions.
48 changes: 23 additions & 25 deletions src/main/java/com/programmerdan/minecraft/banstick/BanStick.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@
import com.programmerdan.minecraft.banstick.handler.BanStickProxyHandler;
import com.programmerdan.minecraft.banstick.handler.BanStickScrapeHandler;
import com.programmerdan.minecraft.banstick.handler.BanStickTorUpdater;

import vg.civcraft.mc.civmodcore.ACivMod;

public class BanStick extends ACivMod {
Expand All @@ -25,20 +24,20 @@ public class BanStick extends ACivMod {
private BanStickScrapeHandler scrapeHandler;
private BanStickImportHandler importHandler;
private BSLog logHandler;

private boolean slaveMode = false;

@Override
public void onEnable() {
super.onEnable();

saveDefaultConfig();
reloadConfig();

BanStick.instance = this;
connectDatabase();
if (!this.isEnabled()) return;

if (getConfig().getBoolean("slaveMode", false)) {
slaveMode = true;
}
Expand All @@ -53,11 +52,11 @@ public void onEnable() {
registerImportHandler();
registerLogHandler();
}

@Override
public void onDisable() {
super.onDisable();

if (this.eventHandler != null) this.eventHandler.shutdown();
if (this.proxyHandler != null) this.proxyHandler.shutdown();
if (this.scrapeHandler != null) this.scrapeHandler.shutdown();
Expand All @@ -68,7 +67,7 @@ public void onDisable() {
if (this.logHandler != null) this.logHandler.disable();
if (this.databaseHandler != null) this.databaseHandler.doShutdown();
}

private void connectDatabase() {
try {
this.databaseHandler = new BanStickDatabaseHandler(getConfig());
Expand All @@ -77,19 +76,19 @@ private void connectDatabase() {
this.setEnabled(false);
}
}

public BanStickIPDataHandler getIPDataHandler() {
return this.ipdataUpdater;
}

public BanStickIPHubHandler getIPHubHandler() {
return this.ipHubUpdater;
}

public BanStickEventHandler getEventHandler() {
return this.eventHandler;
}

private void registerCommandHandler() {
if (!this.isEnabled()) return;
try {
Expand All @@ -107,9 +106,9 @@ private void registerEventHandler() {
} catch (Exception e) {
this.severe("Failed to set up event capture / handling", e);
this.setEnabled(false);
}
}
}

private void registerTorHandler() {
if (!this.isEnabled()) return;
try {
Expand All @@ -118,7 +117,7 @@ private void registerTorHandler() {
this.severe("Failed to set up TOR updater!", e);
}
}

private void registerProxyHandler() {
if (!this.isEnabled()) return;
try {
Expand All @@ -127,7 +126,7 @@ private void registerProxyHandler() {
this.severe("Failed to set up Proxy updaters!", e);
}
}

private void registerIPDataHandler() {
if (!this.isEnabled()) return;
try {
Expand All @@ -136,7 +135,7 @@ private void registerIPDataHandler() {
this.severe("Failed to set up dynamic IPData updater!", e);
}
}

private void registerIPHubHandler() {
if (!this.isEnabled()) return;
try {
Expand All @@ -145,7 +144,7 @@ private void registerIPHubHandler() {
this.severe("Failed to set up dynamic IPHub.info updater!", e);
}
}

private void registerScrapeHandler() {
if (!this.isEnabled()) return;
try {
Expand All @@ -154,7 +153,7 @@ private void registerScrapeHandler() {
this.severe("Failed to set up anonymous proxy scrapers", e);
}
}

private void registerImportHandler() {
if (!this.isEnabled()) return;
try {
Expand All @@ -163,7 +162,7 @@ private void registerImportHandler() {
this.severe("Failed to set up data imports", e);
}
}

private void registerLogHandler() {
if (!this.isEnabled()) return;
try {
Expand All @@ -173,21 +172,21 @@ private void registerLogHandler() {
this.severe("Failed to set up ban log handler", e);
}
}

public BSLog getLogHandler() {
return this.logHandler;
}

/**
*
*
* @return the static global instance. Not my fav pattern, but whatever.
*/
public static BanStick getPlugin() {
return BanStick.instance;
}

/**
*
*
* @return the name of this plugin.
*/
@Override
Expand All @@ -198,9 +197,8 @@ protected String getPluginName() {
public void saveCache() {
this.databaseHandler.doShutdown();
}

public static boolean slave() {
return BanStick.instance.slaveMode;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package com.programmerdan.minecraft.banstick.commands;

import com.programmerdan.minecraft.banstick.data.BSPlayer;
import java.util.Set;
import java.util.UUID;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;

public class GetAltsCommand implements CommandExecutor {

public static String name = "getalts";

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (args.length != 1) {
sender.sendMessage(ChatColor.RED + "You must specify a single player name or uuid");
return false;
}
UUID uuid = UntangleCommand.resolveName(args [0]);
if (uuid == null) {
sender.sendMessage(ChatColor.RED + "Could not parse player: " + args [0]);
return false;
}
BSPlayer player = BSPlayer.byUUID(uuid);
if (player == null) {
sender.sendMessage(ChatColor.RED + "Player with uuid is not known: " + uuid.toString());
return false;
}
Set<BSPlayer> directAssoc = player.getTransitiveSharedPlayers(true);
Set<BSPlayer> ignoredAssoc = player.getTransitiveSharedPlayers(false);
StringBuilder sb = new StringBuilder();
sb.append(ChatColor.GOLD + "Directly associated accounts for " + player.getName() + " are: ");
for(BSPlayer alt : directAssoc) {
sb.append(alt.getName());
sb.append(" ");
}
sender.sendMessage(sb.toString());
sb = new StringBuilder();
sb.append(ChatColor.GOLD + "Associated accounts split off through exclusions are: ");
for(BSPlayer alt : ignoredAssoc) {
if (directAssoc.contains(alt)) {
continue;
}
sb.append(alt.getName());
sb.append(" ");
}
sender.sendMessage(sb.toString());
return true;
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
package com.programmerdan.minecraft.banstick.commands;

import com.programmerdan.minecraft.banstick.data.BSExclusion;
import com.programmerdan.minecraft.banstick.data.BSPlayer;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import vg.civcraft.mc.namelayer.NameAPI;

public class UntangleCommand implements CommandExecutor {

public static String name = "untangle";

@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (args.length == 0) {
sender.sendMessage(ChatColor.RED + "You must specify player names or uuids");
return true;
}
Set<BSPlayer> subGraphPlayers = new HashSet<>();
Set<BSPlayer> allGraphPlayers = new HashSet<>();
// parse uuids out of the command
for (String arg : args) {
UUID uuid = resolveName(arg);
if (uuid == null) {
sender.sendMessage(ChatColor.RED + "Could not parse player: " + arg);
return false;
}
subGraphPlayers.add(BSPlayer.byUUID(uuid));
}
// Determine all nodes (players) in the graph (association network) we are creating a subgraph off
for (BSPlayer player : subGraphPlayers) {
allGraphPlayers.addAll(player.getTransitiveSharedPlayers(true));
}

int delCounter = 0;
// Delete all preexisting exclusions within this graph
for (BSPlayer playerOuter : allGraphPlayers) {
for (BSPlayer playerInner : allGraphPlayers) {
BSExclusion excl = playerOuter.getExclusionWith(playerInner);
if (excl != null) {
excl.delete();
delCounter++;
}
}
}

int createCounter = 0;
// create exclusions between all players in the new subgraph and all players not in the new subgraph
Set<BSPlayer> outsideSubGraphPlayers = new HashSet<>(allGraphPlayers);
outsideSubGraphPlayers.removeAll(subGraphPlayers);
for (BSPlayer inside : subGraphPlayers) {
for (BSPlayer outside : outsideSubGraphPlayers) {
BSExclusion excl = BSExclusion.create(inside, outside);
inside.addExclusion(excl);
outside.addExclusion(excl);
createCounter++;
}
}
sender.sendMessage(ChatColor.GREEN + String.format(
"Added exclusions to group containing %d players. %d exclusions were created and %d exclusions were deleted",
allGraphPlayers.size(), createCounter, delCounter));
StringBuilder sb = new StringBuilder();
for(BSPlayer player : subGraphPlayers) {
sb.append(player.getName());
sb.append(":");
sb.append(player.getUUID());
sb.append(" ");
}
sender.sendMessage(ChatColor.GREEN + String.format("First group created contains %d players: %s", subGraphPlayers.size(), sb.toString()));

sb = new StringBuilder();
for(BSPlayer player : outsideSubGraphPlayers) {
sb.append(player.getName());
sb.append(":");
sb.append(player.getUUID());
sb.append(" ");
}
sender.sendMessage(ChatColor.GREEN + String.format("Second group created contains %d players: %s", outsideSubGraphPlayers.size(), sb.toString()));
return true;
}

public static UUID resolveName(String input) {
UUID playerId = null;
if (input.length() <= 16) {
// interpret as player name
try {
return NameAPI.getUUID(input);
} catch (NoClassDefFoundError ncde) {
}
if (playerId == null) {
Player match = Bukkit.getPlayer(input);
if (match != null) {
return match.getUniqueId();
} else {
OfflinePlayer offPlay = Bukkit.getOfflinePlayer(input);
if (offPlay != null) {
return offPlay.getUniqueId();
}
}
}
} else if (input.length() == 36) {
try {
playerId = UUID.fromString(input);
} catch (IllegalArgumentException iae) {
return null;
}
}
return null;
}

}
Loading

0 comments on commit a777bd4

Please sign in to comment.