From adcccb10e54a7439ee49a4950dee1b8257632c7f Mon Sep 17 00:00:00 2001 From: Video Date: Fri, 25 Mar 2022 14:45:32 -0600 Subject: [PATCH 1/7] Removes dependency on NMS --- pom.xml | 9 +- .../totalfreedommod/LoginProcess.java | 4 +- .../totalfreedommod/Pterodactyl.java | 2 +- .../totalfreedommod/ServerInterface.java | 78 ----- .../totalfreedommod/ServerPing.java | 13 +- .../totalfreedommod/TotalFreedomMod.java | 14 +- .../blocking/EventBlocker.java | 8 + .../totalfreedommod/blocking/SignBlocker.java | 67 ----- .../blocking/command/CommandBlockerEntry.java | 4 +- .../command/Command_modifyitem.java | 266 ------------------ .../command/Command_whitelist.java | 17 +- 11 files changed, 42 insertions(+), 440 deletions(-) delete mode 100644 src/main/java/me/totalfreedom/totalfreedommod/ServerInterface.java delete mode 100644 src/main/java/me/totalfreedom/totalfreedommod/blocking/SignBlocker.java delete mode 100644 src/main/java/me/totalfreedom/totalfreedommod/command/Command_modifyitem.java diff --git a/pom.xml b/pom.xml index f8c74766..b5ec3596 100644 --- a/pom.xml +++ b/pom.xml @@ -50,11 +50,6 @@ https://repo.codemc.org/repository/maven-public/ - - nms-repo - https://repo.codemc.org/repository/nms/ - - spigot-repo https://hub.spigotmc.org/nexus/content/repositories/snapshots/ @@ -140,8 +135,8 @@ - org.spigotmc - spigot + io.papermc.paper + paper-api 1.17.1-R0.1-SNAPSHOT provided diff --git a/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java b/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java index 64700e61..da86f7d0 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java @@ -175,9 +175,9 @@ public class LoginProcess extends FreedomService } // Whitelist - if (plugin.si.isWhitelisted()) + if (server.isWhitelistEnforced()) { - if (!plugin.si.getWhitelisted().contains(username.toLowerCase())) + if (!player.isWhitelisted()) { event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "You are not whitelisted on this server."); } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/Pterodactyl.java b/src/main/java/me/totalfreedom/totalfreedommod/Pterodactyl.java index 12c0cefd..75b2e548 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/Pterodactyl.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/Pterodactyl.java @@ -3,7 +3,7 @@ package me.totalfreedom.totalfreedommod; import java.io.IOException; import java.util.Arrays; import java.util.List; -import joptsimple.internal.Strings; +import com.google.common.base.Strings; import me.totalfreedom.totalfreedommod.admin.Admin; import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.rank.Rank; diff --git a/src/main/java/me/totalfreedom/totalfreedommod/ServerInterface.java b/src/main/java/me/totalfreedom/totalfreedommod/ServerInterface.java deleted file mode 100644 index 3821a949..00000000 --- a/src/main/java/me/totalfreedom/totalfreedommod/ServerInterface.java +++ /dev/null @@ -1,78 +0,0 @@ -package me.totalfreedom.totalfreedommod; - -import java.util.Arrays; -import java.util.List; -import me.totalfreedom.totalfreedommod.util.FLog; -import me.totalfreedom.totalfreedommod.util.FUtil; -import net.minecraft.server.level.EntityPlayer; -import net.minecraft.server.MinecraftServer; -import org.bukkit.Bukkit; -import org.bukkit.craftbukkit.v1_17_R1.CraftServer; - -public class ServerInterface extends FreedomService -{ - public static final String COMPILE_NMS_VERSION = "v1_17_R1"; - - public static void warnVersion() - { - final String nms = FUtil.getNMSVersion(); - - if (!COMPILE_NMS_VERSION.equals(nms)) - { - FLog.warning(TotalFreedomMod.pluginName + " is compiled for " + COMPILE_NMS_VERSION + " but the server is running version " + nms + "!"); - FLog.warning("This might result in unexpected behaviour!"); - } - } - - @Override - public void onStart() - { - } - - @Override - public void onStop() - { - } - - public int purgeWhitelist() - { - String[] whitelisted = getServer().getPlayerList().getWhitelisted(); - int size = whitelisted.length; - for (EntityPlayer player : getServer().getPlayerList().getPlayers()) - { - getServer().getPlayerList().getWhitelist().remove(player.getProfile()); - } - - try - { - getServer().getPlayerList().getWhitelist().save(); - } - catch (Exception ex) - { - FLog.warning("Could not purge the whitelist!"); - FLog.warning(ex); - } - return size; - } - - public boolean isWhitelisted() - { - return getServer().getPlayerList().getHasWhitelist(); - } - - public List getWhitelisted() - { - return Arrays.asList(getServer().getPlayerList().getWhitelisted()); - } - - public String getVersion() - { - return getServer().getVersion(); - } - - private MinecraftServer getServer() - { - return ((CraftServer)Bukkit.getServer()).getServer(); - } - -} diff --git a/src/main/java/me/totalfreedom/totalfreedommod/ServerPing.java b/src/main/java/me/totalfreedom/totalfreedommod/ServerPing.java index 57148a53..42eaf643 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/ServerPing.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/ServerPing.java @@ -1,5 +1,6 @@ package me.totalfreedom.totalfreedommod; +import com.google.gson.Gson; import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.util.FUtil; import org.bukkit.Bukkit; @@ -7,8 +8,13 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.server.ServerListPingEvent; +import java.io.InputStreamReader; + public class ServerPing extends FreedomService { + private final Gson gson = new Gson(); + private final VersionMeta meta = gson.fromJson(new InputStreamReader(Bukkit.class.getClassLoader().getResourceAsStream("version.json")),VersionMeta.class); + @Override public void onStart() { @@ -54,7 +60,7 @@ public class ServerPing extends FreedomService return; } - String baseMotd = ConfigEntry.SERVER_MOTD.getString().replace("%mcversion%", plugin.si.getVersion()); + String baseMotd = ConfigEntry.SERVER_MOTD.getString().replace("%mcversion%", meta.id); baseMotd = baseMotd.replace("\\n", "\n"); baseMotd = FUtil.colorize(baseMotd); @@ -73,4 +79,9 @@ public class ServerPing extends FreedomService event.setMotd(motd.toString().trim()); } + + private static class VersionMeta + { + private String id; + } } \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/TotalFreedomMod.java b/src/main/java/me/totalfreedom/totalfreedommod/TotalFreedomMod.java index e5593b91..31dff85b 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/TotalFreedomMod.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/TotalFreedomMod.java @@ -14,7 +14,6 @@ import me.totalfreedom.totalfreedommod.blocking.InteractBlocker; import me.totalfreedom.totalfreedommod.blocking.MobBlocker; import me.totalfreedom.totalfreedommod.blocking.PVPBlocker; import me.totalfreedom.totalfreedommod.blocking.PotionBlocker; -import me.totalfreedom.totalfreedommod.blocking.SignBlocker; import me.totalfreedom.totalfreedommod.blocking.command.CommandBlocker; import me.totalfreedom.totalfreedommod.bridge.BukkitTelnetBridge; import me.totalfreedom.totalfreedommod.bridge.CoreProtectBridge; @@ -54,7 +53,6 @@ import org.bukkit.generator.ChunkGenerator; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; -import org.spigotmc.SpigotConfig; public class TotalFreedomMod extends JavaPlugin { @@ -74,7 +72,6 @@ public class TotalFreedomMod extends JavaPlugin // Command Loader public CommandLoader cl; // Services - public ServerInterface si; public WorldManager wm; public LogViewer lv; public AdminList al; @@ -121,7 +118,6 @@ public class TotalFreedomMod extends JavaPlugin public Trailer tr; public HTTPDaemon hd; public WorldRestrictions wr; - public SignBlocker snp; public EntityWiper ew; public Sitter st; public VanishHandler vh; @@ -176,9 +172,6 @@ public class TotalFreedomMod extends JavaPlugin final MethodTimer timer = new MethodTimer(); timer.start(); - // Warn if we're running on a wrong version - ServerInterface.warnVersion(); - // Delete unused files FUtil.deleteCoreDumps(); FUtil.deleteFolder(new File("./_deleteme")); @@ -211,13 +204,10 @@ public class TotalFreedomMod extends JavaPlugin FLog.info("Started " + fsh.getServiceAmount() + " services."); timer.update(); - FLog.info("Version " + pluginVersion + " for " + ServerInterface.COMPILE_NMS_VERSION + " enabled in " + timer.getTotal() + "ms"); + FLog.info("Version " + pluginVersion + " enabled in " + timer.getTotal() + "ms"); // Metrics @ https://bstats.org/plugin/bukkit/TotalFreedomMod/2966 new Metrics(this, 2966); - - // little workaround to stop spigot from autorestarting - causing AMP to detach from process. - SpigotConfig.config.set("settings.restart-on-crash", false); } @Override @@ -296,7 +286,6 @@ public class TotalFreedomMod extends JavaPlugin private void initServices() { // Start services - si = new ServerInterface(); wm = new WorldManager(); lv = new LogViewer(); sql = new SQLite(); @@ -324,7 +313,6 @@ public class TotalFreedomMod extends JavaPlugin im = new IndefiniteBanList(); pem = new PermissionManager(); gr = new GameRuleHandler(); - snp = new SignBlocker(); ew = new EntityWiper(); st = new Sitter(); vh = new VanishHandler(); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/blocking/EventBlocker.java b/src/main/java/me/totalfreedom/totalfreedommod/blocking/EventBlocker.java index 70ed87f3..fb3713cd 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/blocking/EventBlocker.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/blocking/EventBlocker.java @@ -4,6 +4,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Objects; + +import io.papermc.paper.event.player.PlayerSignCommandPreprocessEvent; import me.totalfreedom.totalfreedommod.FreedomService; import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.util.FUtil; @@ -265,4 +267,10 @@ public class EventBlocker extends FreedomService FUtil.fixCommandVoid(event.getEntity()); event.setDeathMessage(event.getDeathMessage()); } + + @EventHandler + public void onSignInteract(PlayerSignCommandPreprocessEvent event) + { + event.setCancelled(true); + } } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/blocking/SignBlocker.java b/src/main/java/me/totalfreedom/totalfreedommod/blocking/SignBlocker.java deleted file mode 100644 index 3fabc837..00000000 --- a/src/main/java/me/totalfreedom/totalfreedommod/blocking/SignBlocker.java +++ /dev/null @@ -1,67 +0,0 @@ -package me.totalfreedom.totalfreedommod.blocking; - -import me.totalfreedom.totalfreedommod.FreedomService; -import net.minecraft.nbt.NBTTagCompound; -import org.bukkit.ChatColor; -import org.bukkit.Tag; -import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.block.Action; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.inventory.ItemStack; - -//codebeat:disable[LOC,ABC] - -public class SignBlocker extends FreedomService -{ - @Override - public void onStart() - { - } - - @Override - public void onStop() - { - } - - @EventHandler(priority = EventPriority.NORMAL) - public void onPlayerPlaceBlock(BlockPlaceEvent event) - { - - final Player player = event.getPlayer(); - if (Tag.SIGNS.getValues().contains(event.getBlock().getType())) - { - ItemStack sign = event.getItemInHand(); - net.minecraft.world.item.ItemStack nmsSign = CraftItemStack.asNMSCopy(sign); - NBTTagCompound compound = (nmsSign.hasTag()) ? nmsSign.getTag() : new NBTTagCompound(); - assert compound != null; - NBTTagCompound bet = compound.getCompound("BlockEntityTag"); - String line1 = bet.getString("Text1"); - String line2 = bet.getString("Text2"); - String line3 = bet.getString("Text3"); - String line4 = bet.getString("Text4"); - if (line1.contains("run_command") || line2.contains("run_command") || line3.contains("run_command") || line4.contains("run_command")) - { - player.sendMessage(ChatColor.GRAY + "You are not allowed to place command signs."); - event.setCancelled(true); - } - } - } - - @EventHandler(priority = EventPriority.LOWEST) - public void onPlayerInteractSign(PlayerInteractEvent event) - { - if (event.getAction() != Action.RIGHT_CLICK_BLOCK) - { - return; - } - - if (event.getClickedBlock() != null && Tag.SIGNS.getValues().contains(event.getClickedBlock().getType())) - { - event.setCancelled(true); - } - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/blocking/command/CommandBlockerEntry.java b/src/main/java/me/totalfreedom/totalfreedommod/blocking/command/CommandBlockerEntry.java index 8ccde03e..9325f8cb 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/blocking/command/CommandBlockerEntry.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/blocking/command/CommandBlockerEntry.java @@ -2,10 +2,10 @@ package me.totalfreedom.totalfreedommod.blocking.command; import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.util.FUtil; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import org.spigotmc.SpigotConfig; public class CommandBlockerEntry { @@ -45,7 +45,7 @@ public class CommandBlockerEntry } if (action == CommandBlockerAction.BLOCK_UNKNOWN) { - sender.sendMessage(SpigotConfig.unknownCommandMessage); + sender.sendMessage(Bukkit.spigot().getSpigotConfig().getString("messages.unknown-command")); return; } FUtil.playerMsg(sender, FUtil.colorize(message)); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_modifyitem.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_modifyitem.java deleted file mode 100644 index 4ba7ab88..00000000 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_modifyitem.java +++ /dev/null @@ -1,266 +0,0 @@ -package me.totalfreedom.totalfreedommod.command; - -import java.util.ArrayList; -import java.util.List; -import java.util.SplittableRandom; -import me.totalfreedom.totalfreedommod.rank.Rank; -import me.totalfreedom.totalfreedommod.util.FUtil; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import org.apache.commons.lang.StringUtils; -import org.bukkit.Material; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.inventory.meta.PotionMeta; -import org.bukkit.potion.PotionEffectType; - -@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME) -@CommandParameters(description = "Modify the current item you are holding.", usage = "/ | lore | enchant | potion | attribute | clear>", aliases = "mi") -public class Command_modifyitem extends FreedomCommand -{ - - @SuppressWarnings("deprecation") - @Override - public boolean run(final CommandSender sender, final Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) - { - if (args.length < 1) - { - return false; - } - - ItemStack item = playerSender.getInventory().getItemInMainHand(); - if (item.getType().equals(Material.AIR)) - { - msg("You must have an item in your hand!"); - return true; - } - - if (args[0].equalsIgnoreCase("clear")) - { - item.setItemMeta(null); - playerSender.getInventory().setItemInMainHand(item); - return true; - } - - if (args.length < 2) - { - return false; - } - - ItemMeta meta = item.getItemMeta(); - assert meta != null; - switch (args[0]) - { - case "name": - String name = FUtil.colorize(StringUtils.join(args, " ", 1, args.length)); - meta.setDisplayName(name); - item.setItemMeta(meta); - break; - - case "lore": - List lore = new ArrayList<>(); - for (String line : StringUtils.join(args, " ", 1, args.length).split("\\\\n")) - { - lore.add(FUtil.colorize(line)); - } - meta.setLore(lore); - item.setItemMeta(meta); - break; - - case "enchant": - if (args.length < 3) - { - return false; - } - - Enchantment enchantment = Enchantment.getByName(args[1].toUpperCase()); - if (enchantment == null) - { - msg("Invalid enchantment. Please run /enchant list for a list of valid enchantments."); - return true; - } - - int level; - try - { - level = Integer.parseInt(args[2]); - } - catch (NumberFormatException ex) - { - msg("The level specified is not a valid integer."); - return true; - } - meta.addEnchant(enchantment, level, true); - item.setItemMeta(meta); - break; - - case "potion": - { - if (!item.getType().equals(Material.POTION) & !item.getType().equals(Material.SPLASH_POTION) & !item.getType().equals(Material.LINGERING_POTION) & !item.getType().equals(Material.TIPPED_ARROW)) - { - msg("This item can not have potion effects added to it."); - return true; - } - - if (args.length < 4) - { - return false; - } - - PotionEffectType type = PotionEffectType.getByName(args[1]); - if (type == null) - { - msg("Invalid potion effect. Please run /potion list for a list of valid potion effects."); - return true; - } - - int duration; - try - { - duration = Math.max(1, Math.min(1000000, Integer.parseInt(args[2]))); - } - catch (NumberFormatException ex) - { - msg("The duration specified is not a valid integer."); - return true; - } - - int amplifier; - try - { - amplifier = Math.max(1, Math.min(256, Integer.parseInt(args[2]))); - } - catch (NumberFormatException ex) - { - msg("The amplifier specified is not a valid integer."); - return true; - } - PotionMeta potionMeta = (PotionMeta)meta; - potionMeta.addCustomEffect(type.createEffect(duration, amplifier), true); - item.setItemMeta(potionMeta); - break; - } - - case "attribute": - if (args.length < 3) - { - return false; - } - net.minecraft.world.item.ItemStack nmsStack = CraftItemStack.asNMSCopy(item); - NBTTagCompound compound = (nmsStack.hasTag()) ? nmsStack.getTag() : new NBTTagCompound(); - NBTTagList modifiers = getAttributeList(nmsStack); - NBTTagCompound cmpnd = new NBTTagCompound(); - Attribute attribute = Attribute.getByName(args[1].toUpperCase()); - if (attribute == null) - { - msg("Invalid attribute. Please run /attributelist for a list of valid attributes."); - return true; - } - cmpnd.setString("AttributeName", attribute.getAttribute()); - cmpnd.setString("Name", attribute.getAttribute()); - double amount; - try - { - amount = Double.parseDouble(args[2]); - } - catch (NumberFormatException ex) - { - msg("The amount specified is not a valid integer."); - return true; - } - if (Double.isNaN(amount)) - { - msg("The amount specified is illegal."); - return true; - } - cmpnd.setDouble("Amount", amount); - cmpnd.setInt("Operation", 0); - SplittableRandom random = new SplittableRandom(); - cmpnd.setIntArray("UUID", new int[] - { - random.nextInt(), - random.nextInt(), - random.nextInt(), - random.nextInt() - }); - cmpnd.setString("Slot", "mainhand"); - modifiers.add(cmpnd); - assert compound != null; - compound.set("AttributeModifiers", modifiers); - nmsStack.setTag(compound); - item = CraftItemStack.asBukkitCopy(nmsStack); - break; - default: - return false; - } - playerSender.getInventory().setItemInMainHand(item); - return true; - } - - private NBTTagList getAttributeList(net.minecraft.world.item.ItemStack stack) - { - if (stack.getTag() == null) - { - stack.setTag(new NBTTagCompound()); - } - NBTTagList attr = stack.getTag().getList("AttributeModifiers", 10); - if (attr == null) - { - stack.getTag().set("AttributeModifiers", new NBTTagList()); - } - return stack.getTag().getList("AttributeModifiers", 10); - } - - private enum Attribute - { - GENERIC_MAX_HEALTH("GENERIC_MAX_HEALTH", "generic.max_health"), - GENERIC_FOLLOW_RANGE("GENERIC_FOLLOW_RANGE", "generic.follow_range"), - GENERIC_KNOCKBACK_RESISTANCE("GENERIC_KNOCKBACK_RESISTANCE", "generic.knockback_resistance"), - GENERIC_MOVEMENT_SPEED("GENERIC_MOVEMENT_SPEED", "generic.movement_speed"), - GENERIC_FLYING_SPEED("GENERIC_FLYING_SPEED", "generic.flying_speed"), - GENERIC_ATTACK_DAMAGE("GENERIC_ATTACK_DAMAGE", "generic.attack_damage"), - GENERIC_ATTACK_SPEED("GENERIC_ATTACK_SPEED", "generic.attack_speed"), - GENERIC_ARMOR("GENERIC_ARMOR", "generic.armor"), - GENERIC_ARMOR_TOUGHNESS("GENERIC_ARMOR_TOUGHNESS", "generic.armor_toughmess"), - GENERIC_LUCK("GENERIC_LUCK", "generic.luck"), - HORSE_JUMP_STRENGTH("GENERIC_MAX_HEALTH", "horse.jump_strength"), - ZOMBIE_SPAWN_REINFORCEMENTS("ZOMBIE_SPAWN_REINFORCEMENTS", "zombie.spawn_reinforcements"); - - private final String name; - private final String attribute; - - Attribute(String name, String attribute) - { - this.name = name; - this.attribute = attribute; - } - - public static Attribute getByName(String name) - { - for (Attribute attr : Attribute.values()) - { - if (attr.toString().toUpperCase().equals(name)) - { - return attr; - } - } - return null; - } - - public String getAttribute() - { - return attribute; - } - - @Override - public String toString() - { - return name; - } - } -} diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_whitelist.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_whitelist.java index b07356e7..555d52e9 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_whitelist.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_whitelist.java @@ -158,7 +158,7 @@ public class Command_whitelist extends FreedomCommand if (args[0].equalsIgnoreCase("purge")) { FUtil.adminAction(sender.getName(), "Removing all players from the whitelist", false); - msg("Removed " + plugin.si.purgeWhitelist() + " players from the whitelist."); + msg("Removed " + purge() + " players from the whitelist."); return true; } return false; @@ -198,10 +198,21 @@ public class Command_whitelist extends FreedomCommand public List getWhitelistedNames() { List names = new ArrayList<>(); - for (Object name : plugin.si.getWhitelisted()) + for (OfflinePlayer player : server.getWhitelistedPlayers()) { - names.add(String.valueOf(name)); + names.add(player.getName()); } return names; } + + public int purge() + { + int removed = 0; + for (OfflinePlayer player : server.getWhitelistedPlayers()) + { + player.setWhitelisted(false); + removed++; + } + return removed; + } } \ No newline at end of file From c39c632a67b525cf7c05ee924d94ff09aa0f42ab Mon Sep 17 00:00:00 2001 From: Video Date: Fri, 15 Apr 2022 05:03:41 -0600 Subject: [PATCH 2/7] Removes useless code --- .../bridge/EssentialsBridge.java | 3 +- .../bridge/WorldEditBridge.java | 65 ------------------- .../bridge/WorldGuardBridge.java | 45 ++++--------- .../command/Command_whitelist.java | 5 +- .../util/DepreciationAggregator.java | 28 -------- .../totalfreedommod/util/FUtil.java | 51 --------------- .../world/WorldRestrictions.java | 24 ------- 7 files changed, 14 insertions(+), 207 deletions(-) delete mode 100644 src/main/java/me/totalfreedom/totalfreedommod/util/DepreciationAggregator.java diff --git a/src/main/java/me/totalfreedom/totalfreedommod/bridge/EssentialsBridge.java b/src/main/java/me/totalfreedom/totalfreedommod/bridge/EssentialsBridge.java index d58f8761..56e2937d 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/bridge/EssentialsBridge.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/bridge/EssentialsBridge.java @@ -114,8 +114,7 @@ public class EssentialsBridge extends FreedomService User user = getEssentialsUser(username); if (user != null) { - Long l = FUtil.getField(user, "lastActivity"); - return (l != null) ? l : 0L; + return user.getLastOnlineActivity(); } } catch (Exception ex) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/bridge/WorldEditBridge.java b/src/main/java/me/totalfreedom/totalfreedommod/bridge/WorldEditBridge.java index 79ccaa6f..bb75d14a 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/bridge/WorldEditBridge.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/bridge/WorldEditBridge.java @@ -48,52 +48,6 @@ public class WorldEditBridge extends FreedomService return worldeditPlugin; } - public void undo(Player player, int count) - { - try - { - LocalSession session = getPlayerSession(player); - if (session != null) - { - final BukkitPlayer bukkitPlayer = getBukkitPlayer(player); - if (bukkitPlayer != null) - { - for (int i = 0; i < count; i++) - { - session.undo(session.getBlockBag(bukkitPlayer), bukkitPlayer); - } - } - } - } - catch (Exception ex) - { - FLog.severe(ex); - } - } - - public void redo(Player player, int count) - { - try - { - LocalSession session = getPlayerSession(player); - if (session != null) - { - final BukkitPlayer bukkitPlayer = getBukkitPlayer(player); - if (bukkitPlayer != null) - { - for (int i = 0; i < count; i++) - { - session.redo(session.getBlockBag(bukkitPlayer), bukkitPlayer); - } - } - } - } - catch (Exception ex) - { - FLog.severe(ex); - } - } - public void setLimit(Player player, int limit) { try @@ -153,23 +107,4 @@ public class WorldEditBridge extends FreedomService return null; } } - - private BukkitPlayer getBukkitPlayer(Player player) - { - final WorldEditPlugin wep = getWorldEditPlugin(); - if (wep == null) - { - return null; - } - - try - { - return wep.wrapPlayer(player); - } - catch (Exception ex) - { - FLog.severe(ex); - return null; - } - } } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/bridge/WorldGuardBridge.java b/src/main/java/me/totalfreedom/totalfreedommod/bridge/WorldGuardBridge.java index ea03b670..e7632719 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/bridge/WorldGuardBridge.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/bridge/WorldGuardBridge.java @@ -1,19 +1,12 @@ package me.totalfreedom.totalfreedommod.bridge; -import com.sk89q.worldedit.bukkit.BukkitAdapter; -import com.sk89q.worldedit.util.Location; import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; -import com.sk89q.worldguard.protection.flags.Flags; -import com.sk89q.worldguard.protection.managers.RegionManager; -import com.sk89q.worldguard.protection.regions.ProtectedRegion; import com.sk89q.worldguard.protection.regions.RegionContainer; -import java.util.Map; import com.sk89q.worldguard.protection.regions.RegionQuery; import me.totalfreedom.totalfreedommod.FreedomService; -import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; @@ -22,7 +15,6 @@ public class WorldGuardBridge extends FreedomService @Override public void onStart() { - plugin.wr.protectWorld(plugin.wm.masterBuilderWorld.getWorld()); } @Override @@ -32,34 +24,19 @@ public class WorldGuardBridge extends FreedomService public boolean canEditCurrentWorld(Player player) { - LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player); - - RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer(); - RegionQuery query = container.createQuery(); - - return query.testBuild(localPlayer.getLocation(), localPlayer); - } - - public RegionManager getRegionManager(World world) - { - RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer(); - return container.get(BukkitAdapter.adapt(world)); - } - - public int wipeRegions(World world) - { - int count = 0; - RegionManager regionManager = getRegionManager(world); - if (regionManager != null) + // If WorldGuard integration is enabled, do a check with it. + if (isEnabled()) { - Map regions = regionManager.getRegions(); - for (ProtectedRegion region : regions.values()) - { - regionManager.removeRegion(region.getId()); - count++; - } + LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player); + + RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer(); + RegionQuery query = container.createQuery(); + + return query.testBuild(localPlayer.getLocation(), localPlayer); } - return count; + + // If the plugin isn't present, return true. + return true; } public boolean isEnabled() diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_whitelist.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_whitelist.java index 555d52e9..693c7cf9 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_whitelist.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_whitelist.java @@ -5,7 +5,6 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; import me.totalfreedom.totalfreedommod.rank.Rank; -import me.totalfreedom.totalfreedommod.util.DepreciationAggregator; import me.totalfreedom.totalfreedommod.util.FUtil; import org.bukkit.OfflinePlayer; import org.bukkit.command.Command; @@ -95,7 +94,7 @@ public class Command_whitelist extends FreedomCommand if (player == null) { - player = DepreciationAggregator.getOfflinePlayer(server, search_name); + player = server.getOfflinePlayer(search_name); } FUtil.adminAction(sender.getName(), "Adding " + player.getName() + " to the whitelist", false); @@ -117,7 +116,7 @@ public class Command_whitelist extends FreedomCommand if (player == null) { - player = DepreciationAggregator.getOfflinePlayer(server, search_name); + player = server.getOfflinePlayer(search_name); } if (player.isWhitelisted()) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/util/DepreciationAggregator.java b/src/main/java/me/totalfreedom/totalfreedommod/util/DepreciationAggregator.java deleted file mode 100644 index fa87fc18..00000000 --- a/src/main/java/me/totalfreedom/totalfreedommod/util/DepreciationAggregator.java +++ /dev/null @@ -1,28 +0,0 @@ -package me.totalfreedom.totalfreedommod.util; - -import java.util.HashSet; -import org.bukkit.Material; -import org.bukkit.OfflinePlayer; -import org.bukkit.Server; -import org.bukkit.block.Block; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.LivingEntity; - -@SuppressWarnings("deprecation") -public class DepreciationAggregator -{ - public static Block getTargetBlock(LivingEntity entity, HashSet transparent, int maxDistance) - { - return entity.getTargetBlock(transparent, maxDistance); - } - - public static OfflinePlayer getOfflinePlayer(Server server, String name) - { - return server.getOfflinePlayer(name); - } - - public static String getName_EntityType(EntityType et) - { - return et.getName(); - } -} diff --git a/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java b/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java index f6988aec..520ee630 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java @@ -225,33 +225,6 @@ public class FUtil return names; } - @SuppressWarnings("unchecked") - public static UUID nameToUUID(String name) - { - try - { - JSONArray json = new JSONArray(); - json.add(name); - List headers = new ArrayList<>(); - headers.add("Accept:application/json"); - headers.add("Content-Type:application/json"); - Response response = sendRequest("https://api.mojang.com/profiles/minecraft", "POST", headers, json.toString()); - // Don't care how stupid this looks, couldn't find anything to parse a json string to something readable in java with something not horrendously huge, maybe im just retarded - Pattern pattern = Pattern.compile("(?<=\"id\":\")[a-f0-9].{31}"); - Matcher matcher = pattern.matcher(response.getMessage()); - if (matcher.find()) - { - String rawUUID = matcher.group(0).replaceFirst("([a-f0-9]{8})([a-f0-9]{4})([a-f0-9]{4})([a-f0-9]{4})([a-f0-9]+)", "$1-$2-$3-$4-$5"); - return UUID.fromString(rawUUID); - } - } - catch (Exception e) - { - FLog.severe("Failed to convert name to UUID:\n" + e.toString()); - } - return null; - } - public static Response sendRequest(String endpoint, String method, List headers, String body) throws IOException { URL url = new URL(endpoint); @@ -537,30 +510,6 @@ public class FUtil return ip; } - //getField: Borrowed from WorldEdit - @SuppressWarnings("unchecked") - public static T getField(Object from, String name) - { - Class checkClass = from.getClass(); - do - { - try - { - Field field = checkClass.getDeclaredField(name); - field.setAccessible(true); - return (T) field.get(from); - - } - catch (NoSuchFieldException | IllegalAccessException ignored) - { - } - } - while (checkClass.getSuperclass() != Object.class - && ((checkClass = checkClass.getSuperclass()) != null)); - - return null; - } - public static ChatColor randomChatColor() { return CHAT_COLOR_POOL.get(RANDOM.nextInt(CHAT_COLOR_POOL.size())); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/world/WorldRestrictions.java b/src/main/java/me/totalfreedom/totalfreedommod/world/WorldRestrictions.java index 4aef7377..3dc501b0 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/world/WorldRestrictions.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/world/WorldRestrictions.java @@ -32,14 +32,6 @@ public class WorldRestrictions extends FreedomService private final List BLOCKED_ESSENTIALS_COMMANDS = Arrays.asList( "bigtree", "ebigtree", "largetree", "elargetree"); - private final Map, Object> flags = new HashMap, Object>() - {{ - put(Flags.PLACE_VEHICLE, StateFlag.State.DENY); - put(Flags.DESTROY_VEHICLE, StateFlag.State.DENY); - put(Flags.ENTITY_ITEM_FRAME_DESTROY, StateFlag.State.DENY); - put(Flags.ENTITY_PAINTING_DESTROY, StateFlag.State.DENY); - }}; - @Override public void onStart() { @@ -155,20 +147,4 @@ public class WorldRestrictions extends FreedomService } } } - - public void protectWorld(World world) - { - if (!plugin.wgb.isEnabled()) - { - return; - } - - RegionManager regionManager = plugin.wgb.getRegionManager(world); - - GlobalProtectedRegion region = new GlobalProtectedRegion("__global__"); - - region.setFlags(flags); - - regionManager.addRegion(region); - } } \ No newline at end of file From d4f44e988c29a954442e9bb75e5b2c831ab9ba1d Mon Sep 17 00:00:00 2001 From: Video Date: Fri, 15 Apr 2022 05:08:11 -0600 Subject: [PATCH 3/7] Additional future-proofing --- .../totalfreedommod/util/Groups.java | 76 +------------------ 1 file changed, 3 insertions(+), 73 deletions(-) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/util/Groups.java b/src/main/java/me/totalfreedom/totalfreedommod/util/Groups.java index 0df27d99..5c1b7c9b 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/util/Groups.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/util/Groups.java @@ -8,81 +8,11 @@ import org.bukkit.entity.EntityType; public class Groups { - public static final List WOOL_COLORS = Arrays.asList( - Material.WHITE_WOOL, - Material.RED_WOOL, - Material.ORANGE_WOOL, - Material.YELLOW_WOOL, - Material.GREEN_WOOL, - Material.LIME_WOOL, - Material.LIGHT_BLUE_WOOL, - Material.CYAN_WOOL, - Material.BLUE_WOOL, - Material.PURPLE_WOOL, - Material.MAGENTA_WOOL, - Material.PINK_WOOL, - Material.BROWN_WOOL, - Material.GRAY_WOOL, - Material.LIGHT_GRAY_WOOL, - Material.BLACK_WOOL); - - public static final List SHULKER_BOXES = Arrays.asList( - Material.SHULKER_BOX, - Material.WHITE_SHULKER_BOX, - Material.RED_SHULKER_BOX, - Material.ORANGE_SHULKER_BOX, - Material.YELLOW_SHULKER_BOX, - Material.GREEN_SHULKER_BOX, - Material.LIME_SHULKER_BOX, - Material.LIGHT_BLUE_SHULKER_BOX, - Material.CYAN_SHULKER_BOX, - Material.BLUE_SHULKER_BOX, - Material.PURPLE_SHULKER_BOX, - Material.MAGENTA_SHULKER_BOX, - Material.PINK_SHULKER_BOX, - Material.BROWN_SHULKER_BOX, - Material.GRAY_SHULKER_BOX, - Material.LIGHT_GRAY_SHULKER_BOX, - Material.BLACK_SHULKER_BOX); - + public static final List WOOL_COLORS = Arrays.stream(Material.values()).filter((m) -> m.name().endsWith("_WOOL")).toList(); + public static final List SHULKER_BOXES = Arrays.stream(Material.values()).filter((m) -> m.name().endsWith("SHULKER_BOX")).toList(); public static final List MOB_TYPES = Arrays.stream(EntityType.values()).filter(EntityType::isAlive).filter(EntityType::isSpawnable).toList(); - public static final List SPAWN_EGGS = Arrays.stream(Material.values()).filter((mat) -> mat.name().endsWith("_SPAWN_EGG")).toList(); - - public static final List BANNERS = Arrays.asList( - Material.BLACK_BANNER, - Material.BLACK_WALL_BANNER, - Material.BLUE_BANNER, - Material.BLUE_WALL_BANNER, - Material.BROWN_BANNER, - Material.BROWN_WALL_BANNER, - Material.CYAN_BANNER, - Material.CYAN_WALL_BANNER, - Material.GRAY_BANNER, - Material.GRAY_WALL_BANNER, - Material.GREEN_BANNER, - Material.GREEN_WALL_BANNER, - Material.LIGHT_BLUE_BANNER, - Material.LIGHT_BLUE_WALL_BANNER, - Material.LIGHT_GRAY_BANNER, - Material.LIGHT_GRAY_WALL_BANNER, - Material.LIME_BANNER, - Material.LIME_WALL_BANNER, - Material.MAGENTA_BANNER, - Material.MAGENTA_WALL_BANNER, - Material.ORANGE_BANNER, - Material.ORANGE_WALL_BANNER, - Material.PINK_BANNER, - Material.PINK_WALL_BANNER, - Material.PURPLE_BANNER, - Material.PURPLE_WALL_BANNER, - Material.RED_BANNER, - Material.RED_WALL_BANNER, - Material.WHITE_BANNER, - Material.WHITE_WALL_BANNER, - Material.YELLOW_BANNER, - Material.YELLOW_WALL_BANNER); - + public static final List BANNERS = Arrays.stream(Material.values()).filter((m) -> m.name().endsWith("_BANNER")).toList(); public static final List EXPLOSIVE_BED_BIOMES = Arrays.asList( Biome.NETHER_WASTES, Biome.CRIMSON_FOREST, From b656925e4ffbac693ea183a0e3f341f2be99b77c Mon Sep 17 00:00:00 2001 From: Video Date: Fri, 15 Apr 2022 05:28:32 -0600 Subject: [PATCH 4/7] Fixes two bugs related to commands - Fixes commands not showing up in their own dedicated section in /help - Fixes duplicate/disorganized commands in the HTTPD help page by overhauling it --- .../command/FreedomCommand.java | 52 ++++---- .../httpd/HTMLGenerationTools.java | 8 +- .../httpd/module/Module_help.java | 122 +++++++++++------- 3 files changed, 103 insertions(+), 79 deletions(-) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/FreedomCommand.java b/src/main/java/me/totalfreedom/totalfreedommod/command/FreedomCommand.java index 8d2dd093..017307a4 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/FreedomCommand.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/FreedomCommand.java @@ -13,19 +13,15 @@ import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.admin.Admin; import me.totalfreedom.totalfreedommod.player.PlayerData; import me.totalfreedom.totalfreedommod.rank.Rank; +import me.totalfreedom.totalfreedommod.util.FLog; import me.totalfreedom.totalfreedommod.util.FUtil; import org.apache.commons.lang.StringUtils; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Server; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandMap; -import org.bukkit.command.CommandSender; -import org.bukkit.command.ConsoleCommandSender; -import org.bukkit.command.PluginCommand; -import org.bukkit.command.TabCompleter; +import org.bukkit.command.*; import org.bukkit.entity.Player; +import org.bukkit.plugin.Plugin; import org.bukkit.util.StringUtil; import org.jetbrains.annotations.NotNull; @@ -40,7 +36,6 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter public static final String NO_PERMISSION = ChatColor.RED + "You do not have permission to execute this command."; public static final Timer timer = new Timer(); public static final Map COOLDOWN_TIMERS = new HashMap<>(); - private static CommandMap commandMap; protected final TotalFreedomMod plugin = TotalFreedomMod.getPlugin(); protected final Server server = plugin.getServer(); private final String name; @@ -69,34 +64,22 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter this.cooldown = perms.cooldown(); } - public static CommandMap getCommandMap() - { - if (commandMap == null) - { - try - { - final Field f = Bukkit.getServer().getPluginManager().getClass().getDeclaredField("commandMap"); - f.setAccessible(true); - commandMap = (CommandMap)f.get(Bukkit.getServer().getPluginManager()); - } - catch (Exception e) - { - e.printStackTrace(); - } - } - return commandMap; - } - public static FreedomCommand getFrom(Command command) { try { - return (FreedomCommand)(((PluginCommand)command).getExecutor()); + if (command instanceof FCommand) + { + return ((FCommand) command).getExecutor(); + } } catch (Exception ex) { + FLog.severe(ex); return null; } + + return null; } public static String getCommandPrefix() @@ -119,7 +102,7 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter { cmd.setUsage(this.usage); } - getCommandMap().register("totalfreedommod", cmd); + server.getCommandMap().register("totalfreedommod", cmd); cmd.setExecutor(this); } @@ -316,7 +299,7 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter return perms; } - private final class FCommand extends Command + public final class FCommand extends Command implements PluginIdentifiableCommand { private FreedomCommand cmd = null; @@ -325,6 +308,11 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter super(command); } + public final FreedomCommand getExecutor() + { + return cmd; + } + public void setExecutor(FreedomCommand cmd) { this.cmd = cmd; @@ -427,5 +415,11 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter } return new ArrayList<>(); } + + @Override + public @NotNull Plugin getPlugin() + { + return plugin; + } } } \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/httpd/HTMLGenerationTools.java b/src/main/java/me/totalfreedom/totalfreedommod/httpd/HTMLGenerationTools.java index b682e8cc..a808ab53 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/httpd/HTMLGenerationTools.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/httpd/HTMLGenerationTools.java @@ -11,9 +11,15 @@ public class HTMLGenerationTools return "

" + escapeHtml4(data) + "

\r\n"; } + public static String heading(String data, String id, int level) + { + return "" + escapeHtml4(data) + + "\r\n"; + } + public static String heading(String data, int level) { - return "" + escapeHtml4(data) + "\r\n"; + return heading(data, null, level); } public static String list(Map map) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_help.java b/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_help.java index d19849be..dbaeddda 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_help.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_help.java @@ -1,52 +1,67 @@ package me.totalfreedom.totalfreedommod.httpd.module; import com.google.common.collect.Lists; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Objects; -import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.command.FreedomCommand; import me.totalfreedom.totalfreedommod.httpd.NanoHTTPD; -import me.totalfreedom.totalfreedommod.rank.Displayable; +import me.totalfreedom.totalfreedommod.rank.Rank; import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.CommandMap; import org.bukkit.command.PluginIdentifiableCommand; -import org.bukkit.command.SimpleCommandMap; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + import static me.totalfreedom.totalfreedommod.httpd.HTMLGenerationTools.heading; import static me.totalfreedom.totalfreedommod.httpd.HTMLGenerationTools.paragraph; import static org.apache.commons.lang3.StringEscapeUtils.escapeHtml4; public class Module_help extends HTTPDModule { - public Module_help(NanoHTTPD.HTTPSession session) { super(session); } - private static String buildDescription(Command command) + private static String buildDescription(@NotNull Command command) + { + return buildDescription(command.getName(), command.getDescription(), command.getUsage(), StringUtils.join(command.getAliases(), ", ")); + } + + private static String buildDescription(@NotNull FreedomCommand command) + { + return buildDescription(command.getName(), command.getDescription(), command.getUsage(), command.getAliases()); + } + + private static String buildDescription(@NotNull String name, @Nullable String description, @NotNull String usage, @NotNull String aliases) { StringBuilder sb = new StringBuilder(); sb.append( "
  • {$CMD_NAME} - Usage: {$CMD_USAGE}" - .replace("{$CMD_NAME}", escapeHtml4(command.getName().trim())) - .replace("{$CMD_USAGE}", escapeHtml4(command.getUsage().trim()))); + .replace("{$CMD_NAME}", escapeHtml4(name.trim())) + .replace("{$CMD_USAGE}", escapeHtml4(usage.trim()))); - if (!command.getAliases().isEmpty()) + if (!aliases.isEmpty()) { sb.append( " - Aliases: {$CMD_ALIASES}" - .replace("{$CMD_ALIASES}", escapeHtml4(StringUtils.join(command.getAliases(), ", ")))); + .replace("{$CMD_ALIASES}", escapeHtml4(aliases.trim()))); } - sb.append( - "
    {$CMD_DESC}
  • \r\n" - .replace("{$CMD_DESC}", escapeHtml4(command.getDescription().trim()))); + if (description != null) + { + sb.append( + "
    {$CMD_DESC}\r\n" + .replace("{$CMD_DESC}", escapeHtml4(description.trim()))); + } return sb.toString(); } @@ -54,11 +69,7 @@ public class Module_help extends HTTPDModule @Override public String getBody() { - final CommandMap map = FreedomCommand.getCommandMap(); - if (!(map instanceof SimpleCommandMap)) - { - return paragraph("Error loading commands."); - } + final CommandMap map = Bukkit.getCommandMap(); final StringBuilder responseBody = new StringBuilder() .append(heading("Command Help", 1)) @@ -66,7 +77,7 @@ public class Module_help extends HTTPDModule "This page is an automatically generated listing of all plugin commands that are currently live on the server. " + "Please note that it does not include vanilla server commands.")); - final Collection knownCommands = ((SimpleCommandMap)map).getCommands(); + final Collection knownCommands = map.getKnownCommands().values(); final Map> commandsByPlugin = new HashMap<>(); for (Command command : knownCommands) @@ -79,34 +90,47 @@ public class Module_help extends HTTPDModule List pluginCommands = commandsByPlugin.computeIfAbsent(pluginName, k -> Lists.newArrayList()); - pluginCommands.add(command); + if (!pluginCommands.contains(command)) + { + pluginCommands.add(command); + } } + final CommandComparator comparator = new CommandComparator(); + + // For every plugin... for (Map.Entry> entry : commandsByPlugin.entrySet()) { final String pluginName = entry.getKey(); final List commands = entry.getValue(); - commands.sort(new CommandComparator()); + // Sort them alphabetically + commands.sort(comparator); - responseBody.append(heading(pluginName, 2)).append("
      \r\n"); + responseBody.append(heading(pluginName, pluginName, 2)).append("
        \r\n"); - Displayable lastTfmCommandLevel = null; - for (Command command : commands) + if (!plugin.getName().equals(pluginName)) { - if (!TotalFreedomMod.pluginName.equals(pluginName)) - { - responseBody.append(buildDescription(command)); - continue; - } + commands.forEach((command) -> responseBody.append(buildDescription(command))); + } + else + { + Map> freedomCommands = new HashMap<>(); - Displayable tfmCommandLevel = Objects.requireNonNull(FreedomCommand.getFrom(command)).getPerms().level(); - if (lastTfmCommandLevel == null || lastTfmCommandLevel != tfmCommandLevel) - { - responseBody.append("
      \r\n").append(heading(tfmCommandLevel.getName(), 3)).append("
        \r\n"); - } - lastTfmCommandLevel = tfmCommandLevel; - responseBody.append(buildDescription(command)); + // Filters out non-TFM commands + commands.stream().filter((cmd) -> cmd instanceof FreedomCommand.FCommand).forEach((tfmCmd) -> { + Rank rank = FreedomCommand.getFrom(tfmCmd).getLevel(); + if (!freedomCommands.containsKey(rank)) + freedomCommands.put(rank, new ArrayList<>()); + freedomCommands.get(rank).add(FreedomCommand.getFrom(tfmCmd)); + }); + + // Finally dumps them to HTML + Arrays.stream(Rank.values()).filter(freedomCommands::containsKey) + .sorted(comparator::compare).forEach((rank -> { + responseBody.append("
      \r\n").append(heading(rank.getName(), 3)).append("
        \r\n"); + freedomCommands.get(rank).stream().sorted(comparator::compare).forEach((command) -> responseBody.append(buildDescription(command))); + })); } responseBody.append("
      \r\n"); @@ -118,7 +142,7 @@ public class Module_help extends HTTPDModule @Override public String getTitle() { - return "TotalFreedomMod :: Command Help"; + return plugin.getName() + " :: Command Help"; } @Override @@ -129,23 +153,23 @@ public class Module_help extends HTTPDModule public static class CommandComparator implements Comparator { - @Override public int compare(Command a, Command b) { - FreedomCommand ca = FreedomCommand.getFrom(a); - FreedomCommand cb = FreedomCommand.getFrom(b); + return a.getName().compareTo(b.getName()); + } - if (ca == null - || cb == null - || ca.getPerms() == null - || cb.getPerms() == null) - { - return a.getName().compareTo(b.getName()); - } + public int compare(FreedomCommand a, FreedomCommand b) + { + return a.getName().compareTo(b.getName()); + } - return ca.getPerms().level().getName().compareTo(cb.getPerms().level().getName()); + public int compare(Rank a, Rank b) + { + Integer levelA = a.getLevel(); + Integer levelB = b.getLevel(); + + return levelB.compareTo(levelA); } } - } From 98388d0d23910c59bf7b64f4b3d82a78e365ddbd Mon Sep 17 00:00:00 2001 From: Video Date: Fri, 15 Apr 2022 06:27:32 -0600 Subject: [PATCH 5/7] Stage 1 of IP -> UUID migration: changing player data to use UUIDs instead --- .../totalfreedommod/player/PlayerData.java | 26 +++--- .../totalfreedommod/player/PlayerList.java | 92 ++++++++----------- .../totalfreedommod/sql/SQLite.java | 29 ++---- 3 files changed, 58 insertions(+), 89 deletions(-) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerData.java b/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerData.java index 942f9db4..f4275778 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerData.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerData.java @@ -3,24 +3,23 @@ package me.totalfreedom.totalfreedommod.player; import com.google.common.collect.Lists; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; + import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.shop.ShopItem; import me.totalfreedom.totalfreedommod.util.FLog; import me.totalfreedom.totalfreedommod.util.FUtil; import org.apache.commons.lang.StringUtils; +import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.entity.Player; public class PlayerData { + private UUID uuid; private final List ips = Lists.newArrayList(); private final List notes = Lists.newArrayList(); private final List backupCodes = Lists.newArrayList(); - private String name; private String tag = null; private String discordID = null; private Boolean masterBuilder = false; @@ -48,7 +47,7 @@ public class PlayerData { try { - name = resultSet.getString("username"); + uuid = UUID.fromString(resultSet.getString("uuid")); ips.clear(); ips.addAll(FUtil.stringToList(resultSet.getString("ips"))); notes.clear(); @@ -88,14 +87,13 @@ public class PlayerData public PlayerData(Player player) { - this.name = player.getName(); + this.uuid = player.getUniqueId(); } @Override public String toString() { - - return "Player: " + name + "\n" + + return "Player: " + getName() + "\n" + "- IPs: " + StringUtils.join(ips, ", ") + "\n" + "- Discord ID: " + discordID + "\n" + "- Master Builder: " + masterBuilder + "\n" + @@ -232,7 +230,7 @@ public class PlayerData { return new HashMap() {{ - put("username", name); + put("uuid", uuid.toString()); put("ips", FUtil.listToString(ips)); put("notes", FUtil.listToString(notes)); put("tag", tag); @@ -255,14 +253,14 @@ public class PlayerData return displayDiscord; } - public String getName() + public UUID getUuid() { - return name; + return uuid; } - public void setName(String name) + public String getName() { - this.name = name; + return Bukkit.getOfflinePlayer(uuid).getName(); } public String getTag() diff --git a/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerList.java b/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerList.java index 222e54d2..fb710c98 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerList.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerList.java @@ -3,11 +3,8 @@ package me.totalfreedom.totalfreedommod.player; import com.google.common.collect.Maps; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; + import me.totalfreedom.totalfreedommod.FreedomService; import me.totalfreedom.totalfreedommod.admin.Admin; import me.totalfreedom.totalfreedommod.config.ConfigEntry; @@ -21,7 +18,7 @@ public class PlayerList extends FreedomService { public final Map playerMap = Maps.newHashMap(); // ip,dataMap - public final Map dataMap = Maps.newHashMap(); // username, data + public final Map dataMap = Maps.newHashMap(); // uuid, data @Override public void onStart() @@ -57,7 +54,7 @@ public class PlayerList extends FreedomService while (resultSet.next()) { PlayerData playerData = load(resultSet); - dataMap.put(playerData.getName(), playerData); + dataMap.put(playerData.getUuid(), playerData); } } catch (SQLException e) @@ -122,9 +119,9 @@ public class PlayerList extends FreedomService return tPlayer; } - public PlayerData loadByName(String name) + public PlayerData loadByUuid(UUID uuid) { - return load(plugin.sql.getPlayerByName(name)); + return load(plugin.sql.getPlayerByUuid(uuid)); } public PlayerData loadByIp(String ip) @@ -204,7 +201,7 @@ public class PlayerList extends FreedomService { try { - ResultSet currentSave = plugin.sql.getPlayerByName(player.getName()); + ResultSet currentSave = plugin.sql.getPlayerByUuid(player.getUuid()); for (Map.Entry entry : player.toSQLStorable().entrySet()) { Object storedValue = plugin.sql.getValue(currentSave, entry.getKey(), entry.getValue()); @@ -223,69 +220,56 @@ public class PlayerList extends FreedomService public PlayerData getData(Player player) { // Check for existing data - PlayerData playerData = dataMap.get(player.getName()); + PlayerData playerData = dataMap.get(player.getUniqueId()); if (playerData != null) { return playerData; } // Load data - playerData = loadByName(player.getName()); + playerData = loadByUuid(player.getUniqueId()); + // Oh you don't have any data? Well now you do if (playerData == null) { - playerData = loadByIp(FUtil.getIp(player)); - if (playerData != null) - { - plugin.sql.updatePlayerName(playerData.getName(), player.getName()); - playerData.setName(player.getName()); - dataMap.put(player.getName(), playerData); - return playerData; - } - } - else - { - dataMap.put(player.getName(), playerData); - return playerData; + FLog.info("Creating new player data entry for " + player.getName()); + + playerData = new PlayerData(player); + playerData.addIp(FUtil.getIp(player)); } - // Create new data if nonexistent - FLog.info("Creating new player verification entry for " + player.getName()); + // Store it in memory. + dataMap.put(player.getUniqueId(), playerData); - // Create new player - playerData = new PlayerData(player); - playerData.addIp(FUtil.getIp(player)); - - // Store player - dataMap.put(player.getName(), playerData); - - // Save player + // Send it to the SQL database. plugin.sql.addPlayer(playerData); - return playerData; + // Returns it + return playerData; + } + + public PlayerData getData(UUID uuid) + { + PlayerData data = dataMap.get(uuid); + + if (data == null) + { + data = loadByUuid(uuid); + } + + return data; } public PlayerData getData(String username) { - // Check for existing data - PlayerData playerData = dataMap.get(username); - if (playerData != null) + OfflinePlayer player = server.getPlayer(username); + + if (player == null) { - return playerData; + player = server.getOfflinePlayer(username); } - playerData = loadByName(username); - - if (playerData != null) - { - dataMap.put(username, playerData); - } - else - { - return null; - } - - return playerData; + return getData(player.getUniqueId()); } public PlayerData getDataByIp(String ip) @@ -294,7 +278,7 @@ public class PlayerList extends FreedomService if (player != null) { - dataMap.put(player.getName(), player); + dataMap.put(player.getUuid(), player); } return player; @@ -305,7 +289,7 @@ public class PlayerList extends FreedomService return playerMap; } - public Map getDataMap() + public Map getDataMap() { return dataMap; } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java b/src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java index 09551e02..8b2fb9fb 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java @@ -7,6 +7,8 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.text.MessageFormat; +import java.util.UUID; + import me.totalfreedom.totalfreedommod.FreedomService; import me.totalfreedom.totalfreedommod.admin.Admin; import me.totalfreedom.totalfreedommod.banning.Ban; @@ -93,7 +95,7 @@ public class SQLite extends FreedomService { try { - connection.createStatement().execute("CREATE TABLE `players` (`username` VARCHAR NOT NULL, `ips` VARCHAR NOT NULL, `notes` VARCHAR, `tag` VARCHAR, `discord_id` VARCHAR, `backup_codes` VARCHAR, `master_builder` BOOLEAN NOT NULL,`verification` BOOLEAN NOT NULL, `ride_mode` VARCHAR NOT NULL, `coins` INT, `items` VARCHAR, `total_votes` INT NOT NULL, `display_discord` BOOLEAN NOT NULL, `login_message` VARCHAR, `inspect` BOOLEAN NOT NULL);"); + connection.createStatement().execute("CREATE TABLE `players` (`uuid` VARCHAR NOT NULL, `ips` VARCHAR NOT NULL, `notes` VARCHAR, `tag` VARCHAR, `discord_id` VARCHAR, `backup_codes` VARCHAR, `master_builder` BOOLEAN NOT NULL,`verification` BOOLEAN NOT NULL, `ride_mode` VARCHAR NOT NULL, `coins` INT, `items` VARCHAR, `total_votes` INT NOT NULL, `display_discord` BOOLEAN NOT NULL, `login_message` VARCHAR, `inspect` BOOLEAN NOT NULL);"); } catch (SQLException e) { @@ -151,7 +153,7 @@ public class SQLite extends FreedomService try { Object[] data = {key, player.getName()}; - PreparedStatement statement = connection.prepareStatement(MessageFormat.format("UPDATE players SET {0}=? WHERE username=''{1}''", data)); + PreparedStatement statement = connection.prepareStatement(MessageFormat.format("UPDATE players SET {0}=? WHERE uuid=''{1}''", data)); statement = setUnknownType(statement, 1, value); statement.executeUpdate(); @@ -177,21 +179,6 @@ public class SQLite extends FreedomService } } - public void updatePlayerName(String oldName, String newName) - { - try - { - PreparedStatement statement = connection.prepareStatement(MessageFormat.format("UPDATE players SET username=? WHERE username=''{0}''", oldName)); - statement = setUnknownType(statement, 1, newName); - statement.executeUpdate(); - - } - catch (SQLException e) - { - FLog.severe("Failed to update player name: " + e.getMessage()); - } - } - public PreparedStatement setUnknownType(PreparedStatement statement, int index, Object value) throws SQLException { if (value == null) @@ -271,7 +258,7 @@ public class SQLite extends FreedomService try { PreparedStatement statement = connection.prepareStatement("INSERT INTO players VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); - statement.setString(1, player.getName()); + statement.setString(1, player.getUuid().toString()); statement.setString(2, FUtil.listToString(player.getIps())); statement.setString(3, FUtil.listToString(player.getNotes())); statement.setString(4, player.getTag()); @@ -314,11 +301,11 @@ public class SQLite extends FreedomService return null; } - public ResultSet getPlayerByName(String name) + public ResultSet getPlayerByUuid(UUID uuid) { try { - ResultSet resultSet = connection.createStatement().executeQuery(MessageFormat.format("SELECT * FROM players WHERE username=''{0}''", name)); + ResultSet resultSet = connection.createStatement().executeQuery(MessageFormat.format("SELECT * FROM players WHERE uuid=''{0}''", uuid.toString())); if (resultSet.next()) { return resultSet; @@ -326,7 +313,7 @@ public class SQLite extends FreedomService } catch (SQLException e) { - FLog.severe("Failed to get player by name:"); + FLog.severe("Failed to get player by UUID:"); FLog.severe(e); } From 05745c4210390f3304f16d7d9d12aad65eaec2e0 Mon Sep 17 00:00:00 2001 From: Video Date: Fri, 15 Apr 2022 07:09:23 -0600 Subject: [PATCH 6/7] Stage 2 of IP -> UUID migration: changing the admin list to use UUIDs --- .../totalfreedommod/LoginProcess.java | 14 ++-- .../totalfreedommod/admin/Admin.java | 29 +++---- .../totalfreedommod/admin/AdminList.java | 77 ++++--------------- .../bridge/BukkitTelnetBridge.java | 2 +- .../command/Command_saconfig.java | 8 -- .../discord/PrivateMessageListener.java | 2 +- .../totalfreedommod/player/PlayerList.java | 6 +- .../totalfreedommod/sql/SQLite.java | 27 ++----- 8 files changed, 49 insertions(+), 116 deletions(-) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java b/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java index da86f7d0..e2d1f904 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java @@ -3,7 +3,10 @@ package me.totalfreedom.totalfreedommod; import io.papermc.lib.PaperLib; import java.util.ArrayList; import java.util.List; +import java.util.UUID; import java.util.regex.Pattern; + +import me.totalfreedom.totalfreedommod.admin.Admin; import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.player.PlayerData; @@ -58,13 +61,13 @@ public class LoginProcess extends FreedomService @EventHandler(priority = EventPriority.NORMAL) public void onPlayerPreLogin(AsyncPlayerPreLoginEvent event) { - final String ip = event.getAddress().getHostAddress().trim(); - final boolean isAdmin = plugin.al.getEntryByIp(ip) != null; + final Admin entry = plugin.al.getEntryByUuid(event.getUniqueId()); + final boolean isAdmin = entry != null && entry.isActive(); // Check if the player is already online for (Player onlinePlayer : server.getOnlinePlayers()) { - if (!onlinePlayer.getName().equalsIgnoreCase(event.getName())) + if (!onlinePlayer.getUniqueId().equals(event.getUniqueId())) { continue; } @@ -86,7 +89,7 @@ public class LoginProcess extends FreedomService { final Player player = event.getPlayer(); final String username = player.getName(); - final String ip = event.getAddress().getHostAddress().trim(); + final UUID uuid = player.getUniqueId(); // Check username length if (username.length() < MIN_USERNAME_LENGTH || username.length() > MAX_USERNAME_LENGTH) @@ -120,7 +123,8 @@ public class LoginProcess extends FreedomService } // Validation below this point - if (plugin.al.getEntryByIp(ip) != null) // Check if player is admin + final Admin entry = plugin.al.getEntryByUuid(uuid); + if (entry != null && entry.isActive()) // Check if player is admin { // Force-allow log in event.allow(); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/admin/Admin.java b/src/main/java/me/totalfreedom/totalfreedommod/admin/Admin.java index 17920853..79f699bb 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/admin/Admin.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/admin/Admin.java @@ -2,11 +2,8 @@ package me.totalfreedom.totalfreedommod.admin; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; + import me.totalfreedom.totalfreedommod.LogViewer.LogsRegistrationMode; import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.rank.Rank; @@ -18,10 +15,8 @@ import org.bukkit.entity.Player; public class Admin { - - private final List ips = new ArrayList<>(); - private String name; + private UUID uuid; private boolean active = true; private Rank rank = Rank.ADMIN; private Date lastLogin = new Date(); @@ -32,7 +27,7 @@ public class Admin public Admin(Player player) { - this.name = player.getName(); + uuid = player.getUniqueId(); this.ips.add(FUtil.getIp(player)); } @@ -40,7 +35,7 @@ public class Admin { try { - this.name = resultSet.getString("username"); + this.uuid = UUID.fromString(resultSet.getString("uuid")); this.active = resultSet.getBoolean("active"); this.rank = Rank.findRank(resultSet.getString("rank")); this.ips.clear(); @@ -62,7 +57,7 @@ public class Admin { final StringBuilder output = new StringBuilder(); - output.append("Admin: ").append(name).append("\n") + output.append("Admin: ").append(getName()).append("\n") .append("- IPs: ").append(StringUtils.join(ips, ", ")).append("\n") .append("- Last Login: ").append(FUtil.dateToString(lastLogin)).append("\n") .append("- Rank: ").append(rank.getName()).append("\n") @@ -78,7 +73,7 @@ public class Admin { Map map = new HashMap() {{ - put("username", name); + put("uuid", uuid.toString()); put("active", active); put("rank", rank.toString()); put("ips", FUtil.listToString(ips)); @@ -120,20 +115,20 @@ public class Admin public boolean isValid() { - return name != null + return uuid != null && rank != null && !ips.isEmpty() && lastLogin != null; } - public String getName() + public UUID getUuid() { - return name; + return uuid; } - public void setName(String name) + public String getName() { - this.name = name; + return Bukkit.getOfflinePlayer(uuid).getName(); } public boolean isActive() diff --git a/src/main/java/me/totalfreedom/totalfreedommod/admin/AdminList.java b/src/main/java/me/totalfreedom/totalfreedommod/admin/AdminList.java index 8cbb49b8..ec983ffe 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/admin/AdminList.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/admin/AdminList.java @@ -4,11 +4,7 @@ import com.google.common.collect.Maps; import com.google.common.collect.Sets; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.concurrent.TimeUnit; import me.totalfreedom.totalfreedommod.FreedomService; import me.totalfreedom.totalfreedommod.config.ConfigEntry; @@ -26,6 +22,7 @@ public class AdminList extends FreedomService private final Set allAdmins = Sets.newHashSet(); // Includes disabled admins // Only active admins below private final Set activeAdmins = Sets.newHashSet(); + private final Map uuidTable = Maps.newHashMap(); private final Map nameTable = Maps.newHashMap(); private final Map ipTable = Maps.newHashMap(); @@ -66,7 +63,7 @@ public class AdminList extends FreedomService } updateTables(); - FLog.info("Loaded " + allAdmins.size() + " admins (" + nameTable.size() + " active, " + ipTable.size() + " IPs)"); + FLog.info("Loaded " + allAdmins.size() + " admins (" + uuidTable.size() + " active, " + ipTable.size() + " IPs)"); } public void messageAllAdmins(String message) @@ -154,40 +151,20 @@ public class AdminList extends FreedomService public Admin getAdmin(Player player) { - // Find admin - String ip = FUtil.getIp(player); - Admin admin = getEntryByName(player.getName()); + final String ip = FUtil.getIp(player); + final Admin entry = getEntryByUuid(player.getUniqueId()); - // Admin by name - if (admin != null) + if (entry != null && !entry.getIps().contains(ip)) { - // Check if we're in online mode, - // Or the players IP is in the admin entry - if (Bukkit.getOnlineMode() || admin.getIps().contains(ip)) - { - if (!admin.getIps().contains(ip)) - { - // Add the new IP if we have to - admin.addIp(ip); - save(admin); - updateTables(); - } - return admin; - } + entry.addIp(ip); } - // Admin by ip - admin = getEntryByIp(ip); - if (admin != null) - { - // Set the new username - String oldName = admin.getName(); - admin.setName(player.getName()); - plugin.sql.updateAdminName(oldName, admin.getName()); - updateTables(); - } + return entry; + } - return null; + public Admin getEntryByUuid(UUID uuid) + { + return uuidTable.get(uuid); } public Admin getEntryByName(String name) @@ -200,25 +177,6 @@ public class AdminList extends FreedomService return ipTable.get(ip); } - public Admin getEntryByIpFuzzy(String needleIp) - { - final Admin directAdmin = getEntryByIp(needleIp); - if (directAdmin != null) - { - return directAdmin; - } - - for (String ip : ipTable.keySet()) - { - if (FUtil.fuzzyIpMatch(needleIp, ip, 3)) - { - return ipTable.get(ip); - } - } - - return null; - } - public void updateLastLogin(Player player) { final Admin admin = getAdmin(player); @@ -228,13 +186,12 @@ public class AdminList extends FreedomService } admin.setLastLogin(new Date()); - admin.setName(player.getName()); save(admin); } public boolean isAdminImpostor(Player player) { - return getEntryByName(player.getName()) != null && !isAdmin(player) && !isVerifiedAdmin(player); + return getEntryByUuid(player.getUniqueId()) != null && !isAdmin(player) && !isVerifiedAdmin(player); } public boolean isVerifiedAdmin(Player player) @@ -297,6 +254,7 @@ public class AdminList extends FreedomService public void updateTables() { activeAdmins.clear(); + uuidTable.clear(); nameTable.clear(); ipTable.clear(); @@ -308,13 +266,13 @@ public class AdminList extends FreedomService } activeAdmins.add(admin); + uuidTable.put(admin.getUuid(), admin); nameTable.put(admin.getName().toLowerCase(), admin); for (String ip : admin.getIps()) { ipTable.put(ip, admin); } - } } @@ -332,11 +290,10 @@ public class AdminList extends FreedomService { try { - ResultSet currentSave = plugin.sql.getAdminByName(admin.getName()); + ResultSet currentSave = plugin.sql.getAdminByUuid(admin.getUuid()); for (Map.Entry entry : admin.toSQLStorable().entrySet()) { - Object storedValue = plugin.sql.getValue(currentSave, entry.getKey(), entry.getValue()); - if (storedValue != null && !storedValue.equals(entry.getValue()) || storedValue == null && entry.getValue() != null || entry.getValue() == null) + Object storedValue = plugin.sql.getValue(currentSave, entry.getKey(), entry.getValue()); if (storedValue != null && !storedValue.equals(entry.getValue()) || storedValue == null && entry.getValue() != null || entry.getValue() == null) { plugin.sql.setAdminValue(admin, entry.getKey(), entry.getValue()); } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/bridge/BukkitTelnetBridge.java b/src/main/java/me/totalfreedom/totalfreedommod/bridge/BukkitTelnetBridge.java index 479a30e1..d9e75846 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/bridge/BukkitTelnetBridge.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/bridge/BukkitTelnetBridge.java @@ -42,7 +42,7 @@ public class BukkitTelnetBridge extends FreedomService return; } - final Admin admin = plugin.al.getEntryByIpFuzzy(ip); + final Admin admin = plugin.al.getEntryByIp(ip); if (admin == null || !admin.isActive() || !admin.getRank().hasConsoleVariant()) { diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_saconfig.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_saconfig.java index 0a1c06dc..dace14ae 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_saconfig.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_saconfig.java @@ -205,15 +205,7 @@ public class Command_saconfig extends FreedomCommand else // Existing admin { FUtil.adminAction(sender.getName(), "Re-adding " + player.getName() + " to the admin list", true); - - String oldName = admin.getName(); - if (!oldName.equals(player.getName())) - { - admin.setName(player.getName()); - plugin.sql.updateAdminName(oldName, admin.getName()); - } admin.addIp(FUtil.getIp(player)); - admin.setActive(true); admin.setLastLogin(new Date()); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/discord/PrivateMessageListener.java b/src/main/java/me/totalfreedom/totalfreedommod/discord/PrivateMessageListener.java index aee47a51..a1ffb72f 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/discord/PrivateMessageListener.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/discord/PrivateMessageListener.java @@ -24,7 +24,7 @@ public class PrivateMessageListener extends ListenerAdapter player.setDiscordID(event.getMessage().getAuthor().getId()); player.setVerification(true); - Admin admin = TotalFreedomMod.getPlugin().al.getEntryByName(name); + Admin admin = TotalFreedomMod.getPlugin().al.getEntryByUuid(player.getUuid()); if (admin != null) { Discord.syncRoles(admin, player.getDiscordID()); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerList.java b/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerList.java index fb710c98..eeab3f5e 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerList.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerList.java @@ -100,7 +100,7 @@ public class PlayerList extends FreedomService public boolean isTelnetMasterBuilder(PlayerData playerData) { - Admin admin = plugin.al.getEntryByName(playerData.getName()); + Admin admin = plugin.al.getEntryByUuid(playerData.getUuid()); return admin != null && admin.getRank().isAtLeast(Rank.ADMIN) && playerData.isMasterBuilder(); } @@ -165,7 +165,7 @@ public class PlayerList extends FreedomService if (plugin.al.isAdminImpostor(player)) { - Admin admin = plugin.al.getEntryByName(player.getName()); + Admin admin = plugin.al.getEntryByUuid(player.getUniqueId()); admin.setLastLogin(new Date()); admin.addIp(FUtil.getIp(player)); plugin.al.updateTables(); @@ -185,7 +185,7 @@ public class PlayerList extends FreedomService public void syncIps(PlayerData playerData) { - Admin admin = plugin.al.getEntryByName(playerData.getName()); + Admin admin = plugin.al.getEntryByUuid(playerData.getUuid()); if (admin != null && admin.isActive()) { diff --git a/src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java b/src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java index 8b2fb9fb..2c61896a 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java @@ -84,7 +84,7 @@ public class SQLite extends FreedomService { try { - connection.createStatement().execute("CREATE TABLE `admins` (`username` VARCHAR NOT NULL, `ips` VARCHAR NOT NULL, `rank` VARCHAR NOT NULL, `active` BOOLEAN NOT NULL, `last_login` LONG NOT NULL, `command_spy` BOOLEAN NOT NULL, `potion_spy` BOOLEAN NOT NULL, `ac_format` VARCHAR, `ptero_id` VARCHAR);"); + connection.createStatement().execute("CREATE TABLE `admins` (`uuid` VARCHAR NOT NULL, `ips` VARCHAR NOT NULL, `rank` VARCHAR NOT NULL, `active` BOOLEAN NOT NULL, `last_login` LONG NOT NULL, `command_spy` BOOLEAN NOT NULL, `potion_spy` BOOLEAN NOT NULL, `ac_format` VARCHAR, `ptero_id` VARCHAR);"); } catch (SQLException e) { @@ -135,8 +135,8 @@ public class SQLite extends FreedomService { try { - Object[] data = {key, admin.getName()}; - PreparedStatement statement = connection.prepareStatement(MessageFormat.format("UPDATE admins SET {0}=? WHERE username=''{1}''", data)); + Object[] data = {key, admin.getUuid()}; + PreparedStatement statement = connection.prepareStatement(MessageFormat.format("UPDATE admins SET {0}=? WHERE uuid=''{1}''", data)); statement = setUnknownType(statement, 1, value); statement.executeUpdate(); @@ -164,21 +164,6 @@ public class SQLite extends FreedomService } } - public void updateAdminName(String oldName, String newName) - { - try - { - PreparedStatement statement = connection.prepareStatement(MessageFormat.format("UPDATE admins SET username=? WHERE username=''{0}''", oldName)); - statement = setUnknownType(statement, 1, newName); - statement.executeUpdate(); - - } - catch (SQLException e) - { - FLog.severe("Failed to update admin name: " + e.getMessage()); - } - } - public PreparedStatement setUnknownType(PreparedStatement statement, int index, Object value) throws SQLException { if (value == null) @@ -235,7 +220,7 @@ public class SQLite extends FreedomService try { PreparedStatement statement = connection.prepareStatement("INSERT INTO admins VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"); - statement.setString(1, admin.getName()); + statement.setString(1, admin.getUuid().toString()); statement.setString(2, FUtil.listToString(admin.getIps())); statement.setString(3, admin.getRank().toString()); statement.setBoolean(4, admin.isActive()); @@ -282,11 +267,11 @@ public class SQLite extends FreedomService } } - public ResultSet getAdminByName(String name) + public ResultSet getAdminByUuid(UUID uuid) { try { - ResultSet resultSet = connection.createStatement().executeQuery(MessageFormat.format("SELECT * FROM admins WHERE username=''{0}''", name)); + ResultSet resultSet = connection.createStatement().executeQuery(MessageFormat.format("SELECT * FROM admins WHERE uuid=''{0}''", uuid.toString())); if (resultSet.next()) { return resultSet; From 6af9f240f4b1302d03aac2c2b9ae796cb20b42f9 Mon Sep 17 00:00:00 2001 From: Video Date: Fri, 15 Apr 2022 07:52:06 -0600 Subject: [PATCH 7/7] Stage 3 of IP -> UUID migration: completely removing the verification system --- pom.xml | 8 - .../totalfreedommod/LoginProcess.java | 9 +- .../totalfreedommod/admin/AdminList.java | 27 --- .../command/Command_linkdiscord.java | 4 +- .../totalfreedommod/command/Command_list.java | 16 +- .../command/Command_manuallyverify.java | 63 ------- .../command/Command_mbconfig.java | 26 +-- .../command/Command_playerverification.java | 158 ------------------ .../command/Command_saconfig.java | 11 -- .../command/Command_unlinkdiscord.java | 5 +- .../command/Command_verify.java | 101 ----------- .../command/Command_verifynoadmin.java | 92 ---------- .../totalfreedommod/config/ConfigEntry.java | 1 - .../totalfreedommod/discord/Discord.java | 106 +----------- .../discord/PrivateMessageListener.java | 4 +- .../totalfreedommod/freeze/FreezeData.java | 7 +- .../httpd/module/Module_list.java | 12 -- .../httpd/module/Module_players.java | 2 +- .../totalfreedommod/player/FPlayer.java | 13 -- .../totalfreedommod/player/PlayerData.java | 54 ------ .../totalfreedommod/player/PlayerList.java | 51 ------ .../totalfreedommod/rank/Rank.java | 1 - .../totalfreedommod/rank/RankManager.java | 67 +------- .../totalfreedommod/rank/Title.java | 1 - .../totalfreedommod/sql/SQLite.java | 22 ++- src/main/resources/config.yml | 2 - 26 files changed, 35 insertions(+), 828 deletions(-) delete mode 100644 src/main/java/me/totalfreedom/totalfreedommod/command/Command_manuallyverify.java delete mode 100644 src/main/java/me/totalfreedom/totalfreedommod/command/Command_playerverification.java delete mode 100644 src/main/java/me/totalfreedom/totalfreedommod/command/Command_verify.java delete mode 100644 src/main/java/me/totalfreedom/totalfreedommod/command/Command_verifynoadmin.java diff --git a/pom.xml b/pom.xml index b5ec3596..3de2d95e 100644 --- a/pom.xml +++ b/pom.xml @@ -120,13 +120,6 @@ compile - - commons-codec - commons-codec - 1.15 - compile - - org.bstats bstats-bukkit @@ -427,7 +420,6 @@ commons-io:commons-io org.apache.commons:commons-lang3 - commons-codec:commons-codec org.reflections:reflections org.javassist:javassist io.papermc:paperlib diff --git a/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java b/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java index e2d1f904..b1000767 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java @@ -179,12 +179,9 @@ public class LoginProcess extends FreedomService } // Whitelist - if (server.isWhitelistEnforced()) + if (server.isWhitelistEnforced() && !player.isWhitelisted()) { - if (!player.isWhitelisted()) - { - event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "You are not whitelisted on this server."); - } + event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "You are not whitelisted on this server."); } } @@ -225,7 +222,7 @@ public class LoginProcess extends FreedomService return; } - if (!playerData.hasVerification() && !playerData.getIps().contains(FUtil.getIp(player))) + if (!playerData.getIps().contains(FUtil.getIp(player))) { playerData.addIp(FUtil.getIp(player)); plugin.pl.save(playerData); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/admin/AdminList.java b/src/main/java/me/totalfreedom/totalfreedommod/admin/AdminList.java index ec983ffe..639023b8 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/admin/AdminList.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/admin/AdminList.java @@ -18,7 +18,6 @@ import org.bukkit.entity.Player; public class AdminList extends FreedomService { public static final List vanished = new ArrayList<>(); - public final Map> verifiedNoAdmin = Maps.newHashMap(); private final Set allAdmins = Sets.newHashSet(); // Includes disabled admins // Only active admins below private final Set activeAdmins = Sets.newHashSet(); @@ -189,27 +188,6 @@ public class AdminList extends FreedomService save(admin); } - public boolean isAdminImpostor(Player player) - { - return getEntryByUuid(player.getUniqueId()) != null && !isAdmin(player) && !isVerifiedAdmin(player); - } - - public boolean isVerifiedAdmin(Player player) - { - return verifiedNoAdmin.containsKey(player.getName()) && verifiedNoAdmin.get(player.getName()).contains(FUtil.getIp(player)); - } - - public boolean isIdentityMatched(Player player) - { - if (Bukkit.getOnlineMode()) - { - return true; - } - - Admin admin = getAdmin(player); - return admin != null && admin.getName().equalsIgnoreCase(player.getName()); - } - public boolean addAdmin(Admin admin) { if (!admin.isValid()) @@ -358,9 +336,4 @@ public class AdminList extends FreedomService { return ipTable; } - - public Map> getVerifiedNoAdmin() - { - return verifiedNoAdmin; - } } \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_linkdiscord.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_linkdiscord.java index 40df6d93..56d5315e 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_linkdiscord.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_linkdiscord.java @@ -18,7 +18,7 @@ public class Command_linkdiscord extends FreedomCommand { if (!plugin.dc.enabled) { - msg("The Discord verification system is currently disabled.", ChatColor.RED); + msg("The Discord integration system is currently disabled.", ChatColor.RED); return true; } @@ -32,7 +32,7 @@ public class Command_linkdiscord extends FreedomCommand } playerData.setDiscordID(args[1]); - msg("Linked " + args[0] + "'s discord account.", ChatColor.GREEN); + msg("Linked " + args[0] + "'s Discord account.", ChatColor.GREEN); return true; } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_list.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_list.java index 996ac302..fc592793 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_list.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_list.java @@ -15,8 +15,8 @@ import org.bukkit.entity.Player; import java.util.ArrayList; import java.util.List; -@CommandPermissions(level = Rank.IMPOSTOR, source = SourceType.BOTH) -@CommandParameters(description = "Lists the real names of all online players.", usage = "/ [-s | -i | -f | -v]", aliases = "who,lsit") +@CommandPermissions(level = Rank.NON_OP, source = SourceType.BOTH) +@CommandParameters(description = "Lists the real names of all online players.", usage = "/ [-s | -f | -v]", aliases = "who,lsit") public class Command_list extends FreedomCommand { @@ -63,11 +63,6 @@ public class Command_list extends FreedomCommand listFilter = ListFilter.TELNET_SESSIONS; break; } - case "-i": - { - listFilter = ListFilter.IMPOSTORS; - break; - } case "-f": { listFilter = ListFilter.FAMOUS_PLAYERS; @@ -122,10 +117,6 @@ public class Command_list extends FreedomCommand { continue; } - if (listFilter == ListFilter.IMPOSTORS && !plugin.al.isAdminImpostor(p)) - { - continue; - } if (listFilter == ListFilter.FAMOUS_PLAYERS && !ConfigEntry.FAMOUS_PLAYERS.getList().contains(p.getName().toLowerCase())) { continue; @@ -164,7 +155,6 @@ public class Command_list extends FreedomCommand ADMINS, VANISHED_ADMINS, TELNET_SESSIONS, - FAMOUS_PLAYERS, - IMPOSTORS + FAMOUS_PLAYERS } } \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_manuallyverify.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_manuallyverify.java deleted file mode 100644 index 1776538f..00000000 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_manuallyverify.java +++ /dev/null @@ -1,63 +0,0 @@ -package me.totalfreedom.totalfreedommod.command; - -import me.totalfreedom.totalfreedommod.config.ConfigEntry; -import me.totalfreedom.totalfreedommod.rank.Rank; -import me.totalfreedom.totalfreedommod.util.FUtil; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH) -@CommandParameters(description = "Manually verify someone", usage = "/ ", aliases = "mv") -public class Command_manuallyverify extends FreedomCommand -{ - @Override - public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) - { - boolean verificationEnabled = ConfigEntry.DISCORD_VERIFICATION.getBoolean(); - if (!plugin.dc.enabled) - { - msg("The Discord verification system is currently disabled.", ChatColor.RED); - return true; - } - - if (!verificationEnabled) - { - msg("The Discord verification system is currently disabled.", ChatColor.RED); - return true; - } - - if (args.length == 0) - { - return false; - } - - final Player player = getPlayer(args[0]); - if (player == null) - { - msg(FreedomCommand.PLAYER_NOT_FOUND); - return true; - } - - if (!plugin.pl.IsImpostor(player)) - { - msg("That player is not an impostor."); - return true; - } - - FUtil.adminAction(sender.getName(), "Manually verifying player " + player.getName(), false); - player.setOp(true); - msg(player, YOU_ARE_OP); - - if (plugin.pl.getPlayer(player).getFreezeData().isFrozen()) - { - plugin.pl.getPlayer(player).getFreezeData().setFrozen(false); - msg(player, "You have been unfrozen."); - } - - plugin.pl.verify(player, null); - plugin.rm.updateDisplay(player); - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_mbconfig.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_mbconfig.java index 23320e41..0bd5cc40 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_mbconfig.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_mbconfig.java @@ -116,39 +116,21 @@ public class Command_mbconfig extends FreedomCommand return true; } - if (data.isMasterBuilder() && plugin.pl.isPlayerImpostor(player)) - { - FUtil.adminAction(sender.getName(), "Re-adding " + data.getName() + " to the Master Builder list", true); - - if (plugin.pl.getPlayer(player).getFreezeData().isFrozen()) - { - plugin.pl.getPlayer(player).getFreezeData().setFrozen(false); - } - if (player != null) - { - plugin.pl.verify(player, null); - plugin.rm.updateDisplay(player); - player.setOp(true); - msg(player, YOU_ARE_OP); - } - } - else if (!data.isMasterBuilder()) + if (!data.isMasterBuilder()) { FUtil.adminAction(sender.getName(), "Adding " + data.getName() + " to the Master Builder list", true); data.setMasterBuilder(true); - data.setVerification(true); plugin.pl.save(data); if (player != null) { plugin.rm.updateDisplay(player); } - return true; } else { msg("That player is already on the Master Builder list."); - return true; } + return true; } case "remove": { @@ -173,10 +155,6 @@ public class Command_mbconfig extends FreedomCommand FUtil.adminAction(sender.getName(), "Removing " + data.getName() + " from the Master Builder list", true); data.setMasterBuilder(false); - if (data.getDiscordID() == null) - { - data.setVerification(false); - } plugin.pl.save(data); if (player != null) { diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_playerverification.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_playerverification.java deleted file mode 100644 index 0bfe476a..00000000 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_playerverification.java +++ /dev/null @@ -1,158 +0,0 @@ -package me.totalfreedom.totalfreedommod.command; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import me.totalfreedom.totalfreedommod.config.ConfigEntry; -import me.totalfreedom.totalfreedommod.player.PlayerData; -import me.totalfreedom.totalfreedommod.rank.Rank; -import me.totalfreedom.totalfreedommod.util.FUtil; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME) -@CommandParameters(description = "Manage your verification", usage = "/ | status | genbackupcodes>", aliases = "playerverify,pv") -public class Command_playerverification extends FreedomCommand -{ - @Override - public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) - { - PlayerData target = plugin.pl.getData(playerSender); - boolean verificationEnabled = ConfigEntry.DISCORD_VERIFICATION.getBoolean(); - List ips = new ArrayList<>(target.getIps()); - - if (verificationEnabled) - { - if (args.length == 1) - { - if (args[0].equalsIgnoreCase("clearips")) - { - int cleared = 0; - for (String ip : ips) - { - if (!ip.equals(FUtil.getIp(playerSender))) - { - target.removeIp(ip); - cleared++; - } - } - - msg("Cleared all IP's except your current IP \"" + FUtil.getIp(playerSender) + "\""); - msg("Cleared " + cleared + " IP's."); - plugin.pl.save(target); - plugin.pl.syncIps(target); - return true; - } - else if (args[0].equalsIgnoreCase("clearip")) - { - return false; - } - } - - if (args.length < 1) - { - return false; - } - - PlayerData data = plugin.pl.getData(playerSender); - - switch (args[0].toLowerCase()) - { - case "enable": - { - if (!plugin.dc.enabled) - { - msg("The Discord verification system is currently disabled.", ChatColor.RED); - return true; - } - else if (data.hasVerification()) - { - msg("Discord verification is already enabled for you.", ChatColor.RED); - return true; - } - else if (data.getDiscordID() == null) - { - msg("Please link a discord account with /linkdiscord.", ChatColor.RED); - return true; - } - - data.setVerification(true); - plugin.pl.save(data); - msg("Re-enabled Discord verification.", ChatColor.GREEN); - return true; - } - - case "disable": - { - if (!data.hasVerification()) - { - msg("Discord verification is already disabled for you.", ChatColor.RED); - return true; - } - - data.setVerification(false); - plugin.pl.save(data); - msg("Disabled Discord verification.", ChatColor.GREEN); - return true; - } - - case "status": - { - boolean enabled = target.hasVerification(); - boolean specified = target.getDiscordID() != null; - msg(ChatColor.GRAY + "Discord Verification Enabled: " + (enabled ? ChatColor.GREEN + "true" : ChatColor.RED + "false")); - msg(ChatColor.GRAY + "Discord ID: " + (specified ? ChatColor.GREEN + target.getDiscordID() : ChatColor.RED + "not set")); - msg(ChatColor.GRAY + "Backup Codes: " + data.getBackupCodes().size() + "/" + "10"); - return true; - } - - case "genbackupcodes": - { - if (!plugin.dc.enabled) - { - msg("The Discord verification system is currently disabled.", ChatColor.RED); - return true; - } - else if (!data.hasVerification()) - { - msg("Discord verification is not enabled for you.", ChatColor.RED); - return true; - } - - boolean generated = plugin.dc.sendBackupCodes(data); - - if (generated) - { - msg("Your backup codes have been sent to your discord account. They can be re-generated at anytime.", ChatColor.GREEN); - } - else - { - msg("Failed to generate backup codes, please contact a developer.", ChatColor.RED); - } - return true; - } - default: - return false; - } - } - else - { - msg("The Discord verification system is currently disabled.", ChatColor.RED); - } - return true; - } - - @Override - public List getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args) - { - if (args.length == 1) - { - return Arrays.asList("enable", "disable", "status", "clearips", "genbackupcodes"); - } - - return Collections.emptyList(); - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_saconfig.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_saconfig.java index dace14ae..47ee7219 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_saconfig.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_saconfig.java @@ -187,12 +187,6 @@ public class Command_saconfig extends FreedomCommand } } - if (plugin.pl.isPlayerImpostor(player)) - { - msg("This player was labeled as a Player impostor and is not an admin, therefore they cannot be added to the admin list.", ChatColor.RED); - return true; - } - if (admin == null) // New admin { @@ -209,11 +203,6 @@ public class Command_saconfig extends FreedomCommand admin.setActive(true); admin.setLastLogin(new Date()); - if (plugin.al.isVerifiedAdmin(player)) - { - plugin.al.verifiedNoAdmin.remove(player.getName()); - } - plugin.al.save(admin); plugin.al.updateTables(); plugin.rm.updateDisplay(player); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_unlinkdiscord.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_unlinkdiscord.java index 922db3a4..e34df0c9 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_unlinkdiscord.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_unlinkdiscord.java @@ -17,7 +17,7 @@ public class Command_unlinkdiscord extends FreedomCommand { if (!plugin.dc.enabled) { - msg("The Discord verification system is currently disabled.", ChatColor.RED); + msg("The Discord integration system is currently disabled.", ChatColor.RED); return true; } @@ -31,7 +31,7 @@ public class Command_unlinkdiscord extends FreedomCommand } playerData.setDiscordID(null); - msg("Unlinked " + args[0] + "'s discord account.", ChatColor.GREEN); + msg("Unlinked " + args[0] + "'s Discord account.", ChatColor.GREEN); return true; } @@ -42,7 +42,6 @@ public class Command_unlinkdiscord extends FreedomCommand return true; } data.setDiscordID(null); - data.setVerification(false); plugin.pl.save(data); msg("Your Minecraft account has been successfully unlinked from the Discord account.", ChatColor.GREEN); return true; diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_verify.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_verify.java deleted file mode 100644 index fb33dca6..00000000 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_verify.java +++ /dev/null @@ -1,101 +0,0 @@ -package me.totalfreedom.totalfreedommod.command; - -import me.totalfreedom.totalfreedommod.config.ConfigEntry; -import me.totalfreedom.totalfreedommod.discord.Discord; -import me.totalfreedom.totalfreedommod.player.FPlayer; -import me.totalfreedom.totalfreedommod.player.PlayerData; -import me.totalfreedom.totalfreedommod.rank.Rank; -import me.totalfreedom.totalfreedommod.util.FUtil; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -@CommandPermissions(level = Rank.IMPOSTOR, source = SourceType.BOTH) -@CommandParameters(description = "Sends a verification code to the player, or the player can input the sent code. Admins can manually verify a player impostor.", usage = "/ >") -public class Command_verify extends FreedomCommand -{ - - @Override - public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) - { - boolean verificationEnabled = ConfigEntry.DISCORD_VERIFICATION.getBoolean(); - if (!plugin.dc.enabled) - { - msg("The Discord verification system is currently disabled.", ChatColor.RED); - return true; - } - - if (!verificationEnabled) - { - msg("The Discord verification system is currently disabled.", ChatColor.RED); - return true; - } - - if (senderIsConsole) - { - msg("/manuallyverify ", ChatColor.WHITE); - return true; - } - - if (!plugin.pl.IsImpostor(playerSender)) - { - msg("You are not an impostor, therefore you do not need to verify.", ChatColor.RED); - return true; - } - - PlayerData playerData = plugin.pl.getData(playerSender); - String discordId = playerData.getDiscordID(); - - if (playerData.getDiscordID() == null) - { - msg("You do not have a Discord account linked to your Minecraft account, please verify the manual way.", ChatColor.RED); - return true; - } - - if (args.length == 0) - { - String code = plugin.dc.generateCode(10); - plugin.dc.addVerificationCode(code, playerData); - plugin.dc.getUser(discordId).openPrivateChannel().complete().sendMessage("A user with the IP `" + FUtil.getIp(playerSender) + "` has sent a verification request. Please run the following in-game command: `/verify " + code + "`").complete(); - msg("A verification code has been sent to your account, please copy the code and run /verify ", ChatColor.GREEN); - return true; - } - - String code = args[0]; - String backupCode = null; - - if (plugin.pl.IsImpostor(playerSender)) - { - PlayerData mapPlayer = plugin.dc.getVerificationCodes().get(code); - if (mapPlayer == null) - { - if (!playerData.getBackupCodes().contains(Discord.getMD5(code))) - { - msg("You have entered an invalid verification code", ChatColor.RED); - return true; - } - else - { - backupCode = Discord.getMD5(code); - } - } - else - { - plugin.dc.removeVerificationCode(code); - } - - final FPlayer fPlayer = plugin.pl.getPlayer(playerSender); - if (fPlayer.getFreezeData().isFrozen()) - { - fPlayer.getFreezeData().setFrozen(false); - msg("You have been unfrozen."); - } - FUtil.bcastMsg(playerSender.getName() + " has verified!", ChatColor.GOLD); - playerSender.setOp(true); - plugin.pl.verify(playerSender, backupCode); - return true; - } - return true; - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_verifynoadmin.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_verifynoadmin.java deleted file mode 100644 index 426566f1..00000000 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_verifynoadmin.java +++ /dev/null @@ -1,92 +0,0 @@ -package me.totalfreedom.totalfreedommod.command; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import me.totalfreedom.totalfreedommod.player.FPlayer; -import me.totalfreedom.totalfreedommod.rank.Rank; -import me.totalfreedom.totalfreedommod.util.FUtil; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH) -@CommandParameters(description = "Verify an admin without giving them admin permissions.", usage = "/ ", aliases = "vns,verifynostaff,vna") -public class Command_verifynoadmin extends FreedomCommand -{ - - @Override - public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) - { - if (args.length < 1) - { - return false; - } - - Player player = getPlayer(args[0]); - - if (player == null) - { - msg(PLAYER_NOT_FOUND); - return true; - } - - if (plugin.al.isAdminImpostor(player)) - { - String ip = FUtil.getIp(player); - if (!plugin.al.verifiedNoAdmin.containsKey(player.getName())) - { - List ips = new ArrayList<>(); - ips.add(ip); - plugin.al.verifiedNoAdmin.put(player.getName(), ips); - } - else - { - List ips = plugin.al.verifiedNoAdmin.get(player.getName()); - if (!ips.contains(ip)) - { - ips.add(ip); - plugin.al.verifiedNoAdmin.remove(player.getName()); - plugin.al.verifiedNoAdmin.put(player.getName(), ips); - } - } - plugin.rm.updateDisplay(player); - FUtil.adminAction(sender.getName(), "Verified " + player.getName() + ", without admin permissions.", true); - player.setOp(true); - msg(player, YOU_ARE_OP); - final FPlayer fPlayer = plugin.pl.getPlayer(player); - if (fPlayer.getFreezeData().isFrozen()) - { - fPlayer.getFreezeData().setFrozen(false); - msg(player, "You have been unfrozen."); - } - msg("Verified " + player.getName() + " but didn't give them admin permissions", ChatColor.GREEN); - } - else - { - msg(player.getName() + " is not an admin imposter.", ChatColor.RED); - } - - return true; - } - - @Override - public List getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args) - { - if (args.length == 1) - { - List adminImposters = new ArrayList<>(); - for (Player player : server.getOnlinePlayers()) - { - if (plugin.al.isAdminImpostor(player)) - { - adminImposters.add(player.getName()); - } - } - return adminImposters; - } - - return Collections.emptyList(); - } -} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/config/ConfigEntry.java b/src/main/java/me/totalfreedom/totalfreedommod/config/ConfigEntry.java index 4d336882..abede2c7 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/config/ConfigEntry.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/config/ConfigEntry.java @@ -73,7 +73,6 @@ public enum ConfigEntry SERVER_WHITELIST_MOTD(String.class, "server.motds.whitelist"), SERVER_FULL_MOTD(String.class, "server.motds.full"), // - DISCORD_VERIFICATION(Boolean.class, "discord.verification"), DISCORD_TOKEN(String.class, "discord.token"), DISCORD_REPORT_CHANNEL_ID(String.class, "discord.report_channel_id"), DISCORD_CHAT_CHANNEL_ID(String.class, "discord.chat_channel_id"), diff --git a/src/main/java/me/totalfreedom/totalfreedommod/discord/Discord.java b/src/main/java/me/totalfreedom/totalfreedommod/discord/Discord.java index 484d6016..1eb5f226 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/discord/Discord.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/discord/Discord.java @@ -1,9 +1,6 @@ package me.totalfreedom.totalfreedommod.discord; import com.google.common.base.Strings; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; import java.time.Instant; import java.time.ZonedDateTime; import java.util.ArrayList; @@ -22,7 +19,6 @@ import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.player.PlayerData; import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.util.FLog; -import me.totalfreedom.totalfreedommod.util.FUtil; import net.dv8tion.jda.api.EmbedBuilder; import net.dv8tion.jda.api.JDA; import net.dv8tion.jda.api.JDABuilder; @@ -41,7 +37,6 @@ import net.dv8tion.jda.api.requests.GatewayIntent; import net.dv8tion.jda.api.utils.ChunkingFilter; import net.dv8tion.jda.api.utils.MemberCachePolicy; import net.dv8tion.jda.internal.utils.concurrent.CountingThreadFactory; -import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.WordUtils; import org.bukkit.GameRule; @@ -57,18 +52,12 @@ public class Discord extends FreedomService { public static HashMap LINK_CODES = new HashMap<>(); - public static HashMap VERIFICATION_CODES = new HashMap<>(); public static JDA bot = null; public ScheduledThreadPoolExecutor RATELIMIT_EXECUTOR; public List> sentMessages = new ArrayList<>(); public Boolean enabled = false; private final Pattern DISCORD_MENTION_PATTERN = Pattern.compile("(<@!?([0-9]{16,20})>)"); - public static String getMD5(String string) - { - return DigestUtils.md5Hex(string); - } - public static String getCode(PlayerData playerData) { for (String code : LINK_CODES.keySet()) @@ -157,12 +146,6 @@ public class Discord extends FreedomService public void startBot() { - boolean verificationEnabled = ConfigEntry.DISCORD_VERIFICATION.getBoolean(); - if (!verificationEnabled) - { - FLog.info("Discord Verification has been manually disabled."); - } - enabled = !Strings.isNullOrEmpty(ConfigEntry.DISCORD_TOKEN.getString()); if (!enabled) { @@ -199,15 +182,15 @@ public class Discord extends FreedomService .setMemberCachePolicy(MemberCachePolicy.ALL) .enableIntents(GatewayIntent.GUILD_MEMBERS) .build(); - FLog.info("Discord verification bot has successfully enabled!"); + FLog.info("Discord integration has successfully enabled!"); } catch (LoginException e) { - FLog.warning("An invalid token for the discord verification bot, the bot will not enable."); + FLog.warning("An invalid token for Discord integration was provided, the bot will not enable."); } catch (IllegalArgumentException e) { - FLog.warning("Discord verification bot failed to start."); + FLog.warning("Discord integration failed to start."); } catch (NoClassDefFoundError e) { @@ -261,35 +244,6 @@ public class Discord extends FreedomService return member.getUser(); } - public boolean sendBackupCodes(PlayerData playerData) - { - List codes = generateBackupCodes(); - List encryptedCodes = generateEncryptedBackupCodes(codes); - User user = getUser(playerData.getDiscordID()); - File file = generateBackupCodesFile(playerData.getName(), codes); - if (file == null) - { - return false; - } - PrivateChannel privateChannel = user.openPrivateChannel().complete(); - privateChannel.sendMessage("Do not share these codes with anyone as they can be used to impose as you.").addFile(file).complete(); - playerData.setBackupCodes(encryptedCodes); - plugin.pl.save(playerData); - //noinspection ResultOfMethodCallIgnored - file.delete(); - return true; - } - - public List generateBackupCodes() - { - List codes = new ArrayList<>(); - for (int i = 0; i < 10; i++) - { - codes.add(FUtil.randomAlphanumericString(10)); - } - return codes; - } - public String generateCode(int size) { StringBuilder code = new StringBuilder(); @@ -301,58 +255,6 @@ public class Discord extends FreedomService return code.toString(); } - public List generateEncryptedBackupCodes(List codes) - { - List encryptedCodes = new ArrayList<>(); - for (String code : codes) - { - encryptedCodes.add(getMD5(code)); - } - return encryptedCodes; - } - - public File generateBackupCodesFile(String name, List codes) - { - StringBuilder text = new StringBuilder(); - text.append("Below are your backup codes for use on TotalFreedom in the event you lose access to your discord account.\n") - .append("Simply pick a code, and run /verify on the server. Each code is one use, so be sure to cross it off once you use it.\n") - .append("To generate new codes, simply run /generatebackupcodes\n\n"); - - for (String code : codes) - { - text.append(code).append("\n"); - } - - String fileUrl = plugin.getDataFolder().getAbsolutePath() + "/TF-Backup-Codes-" + name + ".txt"; - try - { - FileWriter fileWriter = new FileWriter(fileUrl); - fileWriter.write(text.toString()); - fileWriter.close(); - } - catch (IOException e) - { - FLog.severe("Failed to generate backup codes file: " + e.toString()); - return null; - } - return new File(fileUrl); - } - - public void addVerificationCode(String code, PlayerData playerData) - { - VERIFICATION_CODES.put(code, playerData); - } - - public void removeVerificationCode(String code) - { - VERIFICATION_CODES.remove(code); - } - - public HashMap getVerificationCodes() - { - return VERIFICATION_CODES; - } - @EventHandler(priority = EventPriority.MONITOR) public void onPlayerDeath(PlayerDeathEvent event) { @@ -475,7 +377,7 @@ public class Discord extends FreedomService messageChatChannel("**Server has stopped**"); } - FLog.info("Discord verification bot has successfully shutdown."); + FLog.info("Discord integration has successfully shutdown."); } public String deformat(String input) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/discord/PrivateMessageListener.java b/src/main/java/me/totalfreedom/totalfreedommod/discord/PrivateMessageListener.java index a1ffb72f..a9a2bde4 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/discord/PrivateMessageListener.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/discord/PrivateMessageListener.java @@ -22,7 +22,6 @@ public class PrivateMessageListener extends ListenerAdapter PlayerData player = Discord.LINK_CODES.get(code); name = player.getName(); player.setDiscordID(event.getMessage().getAuthor().getId()); - player.setVerification(true); Admin admin = TotalFreedomMod.getPlugin().al.getEntryByUuid(player.getUuid()); if (admin != null) @@ -37,8 +36,7 @@ public class PrivateMessageListener extends ListenerAdapter { return; } - event.getChannel().sendMessage("Link successful. Now this Discord account is linked with your Minecraft account **" + name + "**.\n" - + "Now when you are an impostor on the server, you may use `/verify` to verify.").complete(); + event.getChannel().sendMessage("Link successful. Now this Discord account is linked with your Minecraft account **" + name + "**.").complete(); } } } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/freeze/FreezeData.java b/src/main/java/me/totalfreedom/totalfreedommod/freeze/FreezeData.java index bb03caaf..8a6dabc1 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/freeze/FreezeData.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/freeze/FreezeData.java @@ -61,11 +61,8 @@ public class FreezeData @Override public void run() { - if (!Objects.requireNonNull(plugin()).al.isAdminImpostor(player) && Objects.requireNonNull(plugin()).pl.isPlayerImpostor(player)) - { - FUtil.adminAction("TotalFreedom", "Unfreezing " + player.getName(), false); - setFrozen(false); - } + FUtil.adminAction("TotalFreedom", "Unfreezing " + player.getName(), false); + setFrozen(false); } }.runTaskLater(Objects.requireNonNull(plugin()), AUTO_PURGE_TICKS); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_list.java b/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_list.java index 33573926..fa2f5f6d 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_list.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_list.java @@ -34,7 +34,6 @@ public class Module_list extends HTTPDModule final JSONArray admins = new JSONArray(); final JSONArray masterbuilders = new JSONArray(); final JSONArray operators = new JSONArray(); - final JSONArray imposters = new JSONArray(); for (Player player : Bukkit.getOnlinePlayers()) { @@ -43,11 +42,6 @@ public class Module_list extends HTTPDModule continue; } - if (isImposter(player)) - { - imposters.add(player.getName()); - } - if (plugin.pl.getData(player).isMasterBuilder()) { masterbuilders.add(player.getName()); @@ -105,7 +99,6 @@ public class Module_list extends HTTPDModule responseObject.put("admins", admins); responseObject.put("master_builders", masterbuilders); responseObject.put("operators", operators); - responseObject.put("imposters", imposters); responseObject.put("online", FUtil.getFakePlayerCount()); responseObject.put("max", server.getMaxPlayers()); @@ -141,11 +134,6 @@ public class Module_list extends HTTPDModule } } - public boolean isImposter(Player player) - { - return plugin.al.isAdminImpostor(player) || plugin.pl.isPlayerImpostor(player); - } - public boolean hasSpecialTitle(Player player) { return !FUtil.DEVELOPERS.contains(player.getUniqueId().toString()) && !ConfigEntry.SERVER_EXECUTIVES.getList().contains(player.getName()) && !ConfigEntry.SERVER_OWNERS.getList().contains(player.getName()); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_players.java b/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_players.java index 61f8b819..059b4009 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_players.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_players.java @@ -37,7 +37,7 @@ public class Module_players extends HTTPDModule if (!plugin.al.isVanished(player.getName())) { players.add(player.getName()); - if (plugin.al.isAdmin(player) && !plugin.al.isAdminImpostor(player)) + if (plugin.al.isAdmin(player)) { onlineadmins.add(player.getName()); } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/player/FPlayer.java b/src/main/java/me/totalfreedom/totalfreedommod/player/FPlayer.java index 03e0c075..603cd4af 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/player/FPlayer.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/player/FPlayer.java @@ -54,9 +54,6 @@ public class FPlayer private String lastMessage = ""; private boolean inAdminchat = false; private boolean allCommandsBlocked = false; - - - private boolean superadminIdVerified = false; private String lastCommand = ""; private boolean cmdspyEnabled = false; private String tag = null; @@ -648,16 +645,6 @@ public class FPlayer this.allCommandsBlocked = allCommandsBlocked; } - public boolean isSuperadminIdVerified() - { - return superadminIdVerified; - } - - public void setSuperadminIdVerified(boolean superadminIdVerified) - { - this.superadminIdVerified = superadminIdVerified; - } - public boolean isCmdspyEnabled() { return cmdspyEnabled; diff --git a/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerData.java b/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerData.java index f4275778..680bc98d 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerData.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerData.java @@ -5,7 +5,6 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.*; -import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.shop.ShopItem; import me.totalfreedom.totalfreedommod.util.FLog; import me.totalfreedom.totalfreedommod.util.FUtil; @@ -19,13 +18,10 @@ public class PlayerData private UUID uuid; private final List ips = Lists.newArrayList(); private final List notes = Lists.newArrayList(); - private final List backupCodes = Lists.newArrayList(); private String tag = null; private String discordID = null; private Boolean masterBuilder = false; - private Boolean verification = false; - private String rideMode = "ask"; @@ -54,10 +50,7 @@ public class PlayerData notes.addAll(FUtil.stringToList(resultSet.getString("notes"))); tag = resultSet.getString("tag"); discordID = resultSet.getString("discord_id"); - backupCodes.clear(); - backupCodes.addAll(FUtil.stringToList(resultSet.getString("backup_codes"))); masterBuilder = resultSet.getBoolean("master_builder"); - verification = resultSet.getBoolean("verification"); rideMode = resultSet.getString("ride_mode"); coins = resultSet.getInt("coins"); items.clear(); @@ -71,18 +64,6 @@ public class PlayerData { FLog.severe("Failed to load player: " + e.getMessage()); } - - // Force verification for Master Builders - if (masterBuilder && !verification) - { - verification = true; - TotalFreedomMod.getPlugin().pl.save(this); - } - else if (!masterBuilder && discordID == null && verification) - { - this.verification = false; - TotalFreedomMod.getPlugin().pl.save(this); - } } public PlayerData(Player player) @@ -97,13 +78,11 @@ public class PlayerData "- IPs: " + StringUtils.join(ips, ", ") + "\n" + "- Discord ID: " + discordID + "\n" + "- Master Builder: " + masterBuilder + "\n" + - "- Has Verification: " + verification + "\n" + "- Coins: " + coins + "\n" + "- Total Votes: " + totalVotes + "\n" + "- Display Discord: " + displayDiscord + "\n" + "- Tag: " + FUtil.colorize(tag) + ChatColor.GRAY + "\n" + "- Ride Mode: " + rideMode + "\n" + - "- Backup Codes: " + backupCodes.size() + "/10" + "\n" + "- Login Message: " + loginMessage; } @@ -152,22 +131,6 @@ public class PlayerData notes.clear(); } - public List getBackupCodes() - { - return Collections.unmodifiableList(backupCodes); - } - - public void setBackupCodes(List codes) - { - backupCodes.clear(); - backupCodes.addAll(codes); - } - - public void removeBackupCode(String code) - { - backupCodes.remove(code); - } - public void addNote(String note) { notes.add(note); @@ -211,11 +174,6 @@ public class PlayerData items.remove(item.getDataName()); } - public boolean hasVerification() - { - return verification; - } - public boolean isMasterBuilder() { return masterBuilder; @@ -235,9 +193,7 @@ public class PlayerData put("notes", FUtil.listToString(notes)); put("tag", tag); put("discord_id", discordID); - put("backup_codes", FUtil.listToString(backupCodes)); put("master_builder", masterBuilder); - put("verification", verification); put("ride_mode", rideMode); put("coins", coins); put("items", FUtil.listToString(items)); @@ -293,16 +249,6 @@ public class PlayerData this.masterBuilder = masterBuilder; } - public Boolean getVerification() - { - return verification; - } - - public void setVerification(Boolean verification) - { - this.verification = verification; - } - public String getRideMode() { return rideMode; diff --git a/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerList.java b/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerList.java index eeab3f5e..6cd3ad0b 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerList.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerList.java @@ -138,43 +138,6 @@ public class PlayerList extends FreedomService return new PlayerData(resultSet); } - public Boolean isPlayerImpostor(Player player) - { - PlayerData playerData = getData(player); - return plugin.dc.enabled - && !plugin.al.isAdmin(player) - && (playerData.hasVerification()) - && !playerData.getIps().contains(FUtil.getIp(player)); - } - - public boolean IsImpostor(Player player) - { - return isPlayerImpostor(player) || plugin.al.isAdminImpostor(player); - } - - public void verify(Player player, String backupCode) - { - PlayerData playerData = getData(player); - if (backupCode != null) - { - playerData.removeBackupCode(backupCode); - } - - playerData.addIp(FUtil.getIp(player)); - save(playerData); - - if (plugin.al.isAdminImpostor(player)) - { - Admin admin = plugin.al.getEntryByUuid(player.getUniqueId()); - admin.setLastLogin(new Date()); - admin.addIp(FUtil.getIp(player)); - plugin.al.updateTables(); - plugin.al.save(admin); - } - - plugin.rm.updateDisplay(player); - } - public void syncIps(Admin admin) { PlayerData playerData = getData(admin.getName()); @@ -183,20 +146,6 @@ public class PlayerList extends FreedomService plugin.pl.save(playerData); } - public void syncIps(PlayerData playerData) - { - Admin admin = plugin.al.getEntryByUuid(playerData.getUuid()); - - if (admin != null && admin.isActive()) - { - admin.clearIPs(); - admin.addIps(playerData.getIps()); - plugin.al.updateTables(); - plugin.al.save(admin); - } - } - - public void save(PlayerData player) { try diff --git a/src/main/java/me/totalfreedom/totalfreedommod/rank/Rank.java b/src/main/java/me/totalfreedom/totalfreedommod/rank/Rank.java index b7ebb707..98eaf217 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/rank/Rank.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/rank/Rank.java @@ -4,7 +4,6 @@ import net.md_5.bungee.api.ChatColor; public enum Rank implements Displayable { - IMPOSTOR("an", "Impostor", Type.PLAYER, "Imp", ChatColor.YELLOW, null, false, false), NON_OP("a", "Non-Op", Type.PLAYER, "", ChatColor.WHITE, null, false, false), OP("an", "Operator", Type.PLAYER, "OP", ChatColor.GREEN, null, false, false), ADMIN("an", "Admin", Type.ADMIN, "Admin", ChatColor.DARK_GREEN, org.bukkit.ChatColor.DARK_GREEN, true, true), diff --git a/src/main/java/me/totalfreedom/totalfreedommod/rank/RankManager.java b/src/main/java/me/totalfreedom/totalfreedommod/rank/RankManager.java index d246b19f..9af8fe94 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/rank/RankManager.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/rank/RankManager.java @@ -39,12 +39,6 @@ public class RankManager extends FreedomService final Player player = (Player)sender; - // Display impostors - if (plugin.al.isAdminImpostor(player)) - { - return Rank.IMPOSTOR; - } - // If the player's an owner, display that if (ConfigEntry.SERVER_OWNERS.getList().contains(player.getName())) { @@ -67,11 +61,6 @@ public class RankManager extends FreedomService return Title.ASSTEXEC; } - if (plugin.al.isVerifiedAdmin(player)) - { - return Title.VERIFIED_ADMIN; - } - // Master builders show up if they are not an admin if (plugin.pl.getData(player).isMasterBuilder() && !plugin.al.isAdmin(player)) { @@ -137,11 +126,6 @@ public class RankManager extends FreedomService public Rank getRank(Player player) { - if (plugin.al.isAdminImpostor(player) || plugin.pl.isPlayerImpostor(player)) - { - return Rank.IMPOSTOR; - } - final Admin entry = plugin.al.getAdmin(player); if (entry != null) { @@ -193,52 +177,14 @@ public class RankManager extends FreedomService public void onPlayerJoin(PlayerJoinEvent event) { final Player player = event.getPlayer(); - final FPlayer fPlayer = plugin.pl.getPlayer(player); PlayerData target = plugin.pl.getData(player); - // Unban admins boolean isAdmin = plugin.al.isAdmin(player); + + // Updates last login time if (isAdmin) { - // Verify strict IP match - if (!plugin.al.isIdentityMatched(player)) - { - FUtil.bcastMsg("Warning: " + player.getName() + " is an admin, but is using an account not registered to one of their ip-list.", ChatColor.RED); - fPlayer.setSuperadminIdVerified(false); - } - else - { - fPlayer.setSuperadminIdVerified(true); - plugin.al.updateLastLogin(player); - } - } - - if (plugin.al.isVerifiedAdmin(player)) - { - FUtil.bcastMsg("Warning: " + player.getName() + " is an admin, but does not have any admin permissions.", ChatColor.RED); - } - - // Handle impostors - boolean isImpostor = plugin.al.isAdminImpostor(player) || plugin.pl.isPlayerImpostor(player); - if (isImpostor) - { - FUtil.bcastMsg(ChatColor.AQUA + player.getName() + " is " + Rank.IMPOSTOR.getColoredLoginMessage()); - if (plugin.al.isAdminImpostor(player)) - { - FUtil.bcastMsg("Warning: " + player.getName() + " has been flagged as an admin impostor and has been frozen!", ChatColor.RED); - } - else if (plugin.pl.isPlayerImpostor(player)) - { - FUtil.bcastMsg("Warning: " + player.getName() + " has been flagged as a player impostor and has been frozen!", ChatColor.RED); - } - String displayName = Rank.IMPOSTOR.getColor() + player.getName(); - player.setPlayerListName(StringUtils.substring(displayName, 0, 16)); - player.getInventory().clear(); - player.setOp(false); - player.setGameMode(GameMode.SURVIVAL); - plugin.pl.getPlayer(player).getFreezeData().setFrozen(true); - player.sendMessage(ChatColor.RED + "You are marked as an impostor, please verify yourself!"); - return; + plugin.al.updateLastLogin(player); } // Broadcast login message @@ -253,12 +199,9 @@ public class RankManager extends FreedomService // Set display updateDisplay(player); - if (!plugin.pl.isPlayerImpostor(player) && target.hasVerification()) + if (target.getTag() != null) { - if (target.getTag() != null) - { - plugin.pl.getData(player).setTag(FUtil.colorize(target.getTag())); - } + plugin.pl.getData(player).setTag(FUtil.colorize(target.getTag())); } } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/rank/Title.java b/src/main/java/me/totalfreedom/totalfreedommod/rank/Title.java index 93bd0339..c21d9f79 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/rank/Title.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/rank/Title.java @@ -6,7 +6,6 @@ public enum Title implements Displayable { MASTER_BUILDER("a", "Master Builder", ChatColor.DARK_AQUA, org.bukkit.ChatColor.DARK_AQUA, "MB", true, true), - VERIFIED_ADMIN("a", "Verified Admin", ChatColor.LIGHT_PURPLE, org.bukkit.ChatColor.LIGHT_PURPLE, "VA", false, true), EXECUTIVE("an", "Executive", ChatColor.RED, org.bukkit.ChatColor.RED, "Exec", true, true), ASSTEXEC("an", "Assistant Executive", ChatColor.RED, org.bukkit.ChatColor.RED, "Asst Exec", true, true), DEVELOPER("a", "Developer", ChatColor.DARK_PURPLE, org.bukkit.ChatColor.DARK_PURPLE, "Dev", true, true), diff --git a/src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java b/src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java index 2c61896a..39bd1223 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java @@ -95,7 +95,7 @@ public class SQLite extends FreedomService { try { - connection.createStatement().execute("CREATE TABLE `players` (`uuid` VARCHAR NOT NULL, `ips` VARCHAR NOT NULL, `notes` VARCHAR, `tag` VARCHAR, `discord_id` VARCHAR, `backup_codes` VARCHAR, `master_builder` BOOLEAN NOT NULL,`verification` BOOLEAN NOT NULL, `ride_mode` VARCHAR NOT NULL, `coins` INT, `items` VARCHAR, `total_votes` INT NOT NULL, `display_discord` BOOLEAN NOT NULL, `login_message` VARCHAR, `inspect` BOOLEAN NOT NULL);"); + connection.createStatement().execute("CREATE TABLE `players` (`uuid` VARCHAR NOT NULL, `ips` VARCHAR NOT NULL, `notes` VARCHAR, `tag` VARCHAR, `discord_id` VARCHAR, `master_builder` BOOLEAN NOT NULL, `ride_mode` VARCHAR NOT NULL, `coins` INT, `items` VARCHAR, `total_votes` INT NOT NULL, `display_discord` BOOLEAN NOT NULL, `login_message` VARCHAR, `inspect` BOOLEAN NOT NULL);"); } catch (SQLException e) { @@ -242,22 +242,20 @@ public class SQLite extends FreedomService { try { - PreparedStatement statement = connection.prepareStatement("INSERT INTO players VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + PreparedStatement statement = connection.prepareStatement("INSERT INTO players VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); statement.setString(1, player.getUuid().toString()); statement.setString(2, FUtil.listToString(player.getIps())); statement.setString(3, FUtil.listToString(player.getNotes())); statement.setString(4, player.getTag()); statement.setString(5, player.getDiscordID()); - statement.setString(6, FUtil.listToString(player.getBackupCodes())); - statement.setBoolean(7, player.isMasterBuilder()); - statement.setBoolean(8, player.hasVerification()); - statement.setString(9, player.getRideMode()); - statement.setInt(10, player.getCoins()); - statement.setString(11, FUtil.listToString(player.getItems())); - statement.setInt(12, player.getTotalVotes()); - statement.setBoolean(13, player.doesDisplayDiscord()); - statement.setString(14, player.getLoginMessage()); - statement.setBoolean(15, player.hasInspection()); + statement.setBoolean(6, player.isMasterBuilder()); + statement.setString(7, player.getRideMode()); + statement.setInt(8, player.getCoins()); + statement.setString(9, FUtil.listToString(player.getItems())); + statement.setInt(10, player.getTotalVotes()); + statement.setBoolean(11, player.doesDisplayDiscord()); + statement.setString(12, player.getLoginMessage()); + statement.setBoolean(13, player.hasInspection()); statement.executeUpdate(); } catch (SQLException e) diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 33b4b43e..b690154b 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -56,8 +56,6 @@ server: # Discord discord: - # Do you want to enable the Discord verification system? (Disabled by default) - verification: false # If you do not have a token, make a bot account and get one at https://discordapp.com/developers/applications/me token: '' # The official discord server's ID for this server