From 4ddcc3b8d71a3b5a7948b473912475f0beaf8053 Mon Sep 17 00:00:00 2001 From: ZeroEpoch1969 <13510767+ZeroEpoch1969@users.noreply.github.com> Date: Fri, 29 May 2020 03:14:21 -0700 Subject: [PATCH] SQL DB is a WIP --- .../totalfreedommod/EntityWiper.java | 3 +- .../totalfreedom/totalfreedommod/Fuckoff.java | 2 +- .../totalfreedommod/LoginProcess.java | 4 +- .../totalfreedom/totalfreedommod/Muter.java | 2 + .../totalfreedommod/TotalFreedomMod.java | 8 +- .../totalfreedommod/admin/Admin.java | 98 +++--- .../totalfreedommod/admin/AdminList.java | 112 ++++--- .../totalfreedommod/banning/Ban.java | 52 +-- .../totalfreedommod/banning/BanManager.java | 87 ++--- .../totalfreedommod/banning/VPNBanList.java | 76 ----- .../blocking/BlockBlocker.java | 32 +- .../bridge/CoreProtectBridge.java | 3 +- .../totalfreedommod/command/Command_ban.java | 2 +- .../totalfreedommod/command/Command_cage.java | 32 +- .../command/Command_cmdspy.java | 2 +- .../totalfreedommod/command/Command_doom.java | 2 +- .../command/Command_gchat.java | 45 --- .../totalfreedommod/command/Command_gcmd.java | 64 ---- .../command/Command_glist.java | 4 +- .../command/Command_hubworld.java | 202 ++++++++++++ .../command/Command_jumppads.java | 2 +- .../totalfreedommod/command/Command_list.java | 3 +- .../command/Command_lockup.java | 13 +- .../command/Command_myadmin.java | 16 +- .../command/Command_plugincontrol.java | 15 +- .../command/Command_potion.java | 3 +- .../command/Command_potionspy.java | 2 +- .../command/Command_saconfig.java | 18 +- .../totalfreedommod/command/Command_tag.java | 2 +- .../command/Command_tempban.java | 4 +- .../command/Command_toggle.java | 15 +- .../command/Command_unlinkdiscord.java | 2 +- .../command/Command_unmute.java | 2 +- .../command/Command_verify.java | 2 +- .../command/Command_vpnbanlist.java | 35 -- .../totalfreedommod/config/ConfigEntry.java | 2 + .../totalfreedommod/discord/Discord.java | 2 +- .../discord/PrivateMessageListener.java | 2 +- .../totalfreedommod/httpd/HTTPDaemon.java | 2 - .../httpd/module/Module_admins.java | 7 +- .../httpd/module/Module_bans.java | 6 +- .../httpd/module/Module_schematic.java | 6 +- .../httpd/module/Module_vpnbans.java | 32 -- .../totalfreedommod/rank/Displayable.java | 2 + .../totalfreedommod/rank/Rank.java | 27 +- .../totalfreedommod/rank/RankManager.java | 47 +-- .../totalfreedommod/rank/Title.java | 23 +- .../totalfreedommod/sql/SQLite.java | 301 ++++++++++++++++++ .../totalfreedommod/util/FUtil.java | 21 +- .../totalfreedommod/world/HubWorld.java | 99 ++++++ .../world/WorldRestrictions.java | 3 +- src/main/resources/config.yml | 6 +- src/main/resources/permissions.yml | 2 + src/main/resources/vpnbans.yml | 9 - 54 files changed, 961 insertions(+), 604 deletions(-) delete mode 100644 src/main/java/me/totalfreedom/totalfreedommod/banning/VPNBanList.java delete mode 100644 src/main/java/me/totalfreedom/totalfreedommod/command/Command_gchat.java delete mode 100644 src/main/java/me/totalfreedom/totalfreedommod/command/Command_gcmd.java create mode 100644 src/main/java/me/totalfreedom/totalfreedommod/command/Command_hubworld.java delete mode 100644 src/main/java/me/totalfreedom/totalfreedommod/command/Command_vpnbanlist.java delete mode 100644 src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_vpnbans.java create mode 100644 src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java create mode 100644 src/main/java/me/totalfreedom/totalfreedommod/world/HubWorld.java delete mode 100644 src/main/resources/vpnbans.yml diff --git a/src/main/java/me/totalfreedom/totalfreedommod/EntityWiper.java b/src/main/java/me/totalfreedom/totalfreedommod/EntityWiper.java index 752d52d5..5bd0099d 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/EntityWiper.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/EntityWiper.java @@ -26,7 +26,8 @@ public class EntityWiper extends FreedomService EntityType.PAINTING, EntityType.BOAT, EntityType.LEASH_HITCH, - EntityType.ITEM_FRAME + EntityType.ITEM_FRAME, + EntityType.MINECART ); @Override diff --git a/src/main/java/me/totalfreedom/totalfreedommod/Fuckoff.java b/src/main/java/me/totalfreedom/totalfreedommod/Fuckoff.java index cc8b8a8c..8db1fe14 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/Fuckoff.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/Fuckoff.java @@ -53,7 +53,7 @@ public class Fuckoff extends FreedomService if (distanceSquared < (fuckoffRange * fuckoffRange)) { - event.setTo(foLocation.clone().add(opLocation.subtract(foLocation).toVector().normalize().multiply(fuckoffRange * 1.1))); + onlinePlayer.setVelocity(onlinePlayer.getLocation().toVector().subtract(foLocation.toVector()).normalize().multiply(fPlayer.getFuckoffRadius())); break; } } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java b/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java index 327af295..f5a189ff 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java @@ -199,7 +199,7 @@ public class LoginProcess extends FreedomService player.sendTitle(FUtil.colorize(ConfigEntry.SERVER_LOGIN_TITLE.getString()), FUtil.colorize(ConfigEntry.SERVER_LOGIN_SUBTITLE.getString()), 20, 100, 60); player.setOp(true); - if (TELEPORT_ON_JOIN.contains(player.getName())) + if (TELEPORT_ON_JOIN.contains(player.getName()) || ConfigEntry.AUTO_TP.getBoolean()) { int x = FUtil.randomInteger(-10000, 10000); int z = FUtil.randomInteger(-10000, 10000); @@ -210,7 +210,7 @@ public class LoginProcess extends FreedomService return; } - if (CLEAR_ON_JOIN.contains(player.getName())) + if (CLEAR_ON_JOIN.contains(player.getName()) || ConfigEntry.AUTO_CLEAR.getBoolean()) { player.getInventory().clear(); player.sendMessage(ChatColor.AQUA + "Your inventory has been cleared automatically."); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/Muter.java b/src/main/java/me/totalfreedom/totalfreedommod/Muter.java index 12722700..67dccc21 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/Muter.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/Muter.java @@ -45,6 +45,8 @@ public class Muter extends FreedomService FPlayer fPlayer = plugin.pl.getPlayerSync(player); + FLog.info("checking mute"); + if (!fPlayer.isMuted()) { return; diff --git a/src/main/java/me/totalfreedom/totalfreedommod/TotalFreedomMod.java b/src/main/java/me/totalfreedom/totalfreedommod/TotalFreedomMod.java index e733bcdf..c13ae3e3 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/TotalFreedomMod.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/TotalFreedomMod.java @@ -7,7 +7,6 @@ import me.totalfreedom.totalfreedommod.admin.ActivityLog; import me.totalfreedom.totalfreedommod.admin.AdminList; import me.totalfreedom.totalfreedommod.banning.BanManager; import me.totalfreedom.totalfreedommod.banning.PermbanList; -import me.totalfreedom.totalfreedommod.banning.VPNBanList; import me.totalfreedom.totalfreedommod.blocking.BlockBlocker; import me.totalfreedom.totalfreedommod.blocking.EditBlocker; import me.totalfreedom.totalfreedommod.blocking.EventBlocker; @@ -47,6 +46,7 @@ import me.totalfreedom.totalfreedommod.playerverification.PlayerVerification; import me.totalfreedom.totalfreedommod.punishments.PunishmentList; import me.totalfreedom.totalfreedommod.rank.RankManager; import me.totalfreedom.totalfreedommod.shop.Shop; +import me.totalfreedom.totalfreedommod.sql.SQLite; import me.totalfreedom.totalfreedommod.util.FLog; import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.MethodTimer; @@ -95,6 +95,7 @@ public class TotalFreedomMod extends AeroPlugin public AntiSpam as; public PlayerList pl; public Shop sh; + public SQLite sql; public Announcer an; public ChatManager cm; public Discord dc; @@ -102,7 +103,6 @@ public class TotalFreedomMod extends AeroPlugin public BanManager bm; public PermbanList pm; public PermissionManager pem; - public VPNBanList vn; public ProtectArea pa; public GameRuleHandler gr; public CommandSpy cs; @@ -177,9 +177,9 @@ public class TotalFreedomMod extends AeroPlugin backups.createBackups(AdminList.CONFIG_FILENAME); backups.createBackups(PermbanList.CONFIG_FILENAME); backups.createBackups(PermissionConfig.PERMISSIONS_FILENAME, true); - backups.createBackups(VPNBanList.CONFIG_FILENAME); backups.createBackups(MasterBuilder.CONFIG_FILENAME); backups.createBackups(PunishmentList.CONFIG_FILENAME); + backups.createBackups(""); config = new MainConfig(this); config.load(); @@ -193,6 +193,7 @@ public class TotalFreedomMod extends AeroPlugin sf = services.registerService(SavedFlags.class); wm = services.registerService(WorldManager.class); lv = services.registerService(LogViewer.class); + sql = services.registerService(SQLite.class); al = services.registerService(AdminList.class); acl = services.registerService(ActivityLog.class); rm = services.registerService(RankManager.class); @@ -217,7 +218,6 @@ public class TotalFreedomMod extends AeroPlugin bm = services.registerService(BanManager.class); pm = services.registerService(PermbanList.class); pem = services.registerService(PermissionManager.class); - vn = services.registerService(VPNBanList.class); pa = services.registerService(ProtectArea.class); gr = services.registerService(GameRuleHandler.class); snp = services.registerService(SignBlocker.class); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/admin/Admin.java b/src/main/java/me/totalfreedom/totalfreedommod/admin/Admin.java index 385422f2..aca96ae0 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/admin/Admin.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/admin/Admin.java @@ -1,30 +1,26 @@ package me.totalfreedom.totalfreedommod.admin; import com.google.common.collect.Lists; +import java.util.Arrays; import java.util.Collections; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import lombok.Getter; import lombok.Setter; import me.totalfreedom.totalfreedommod.LogViewer.LogsRegistrationMode; import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.util.FUtil; -import net.pravian.aero.base.ConfigLoadable; -import net.pravian.aero.base.ConfigSavable; -import net.pravian.aero.base.Validatable; import net.pravian.aero.util.Ips; import org.apache.commons.lang.StringUtils; -import org.apache.commons.lang.Validate; import org.bukkit.ChatColor; -import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; -public class Admin implements ConfigLoadable, ConfigSavable, Validatable +public class Admin { - @Getter - private String configKey; @Getter @Setter private String name; @@ -68,14 +64,28 @@ public class Admin implements ConfigLoadable, ConfigSavable, Validatable public Admin(Player player) { - this.configKey = player.getName().toLowerCase(); this.name = player.getName(); this.ips.add(Ips.getIp(player)); } - public Admin(String configKey) + public Admin(String username, List ips, Rank rank, Boolean active, Date lastLogin, String loginMessage, String tag, String discordID, List backupCodes, Boolean commandSpy, Boolean potionSpy, String acFormat, Boolean oldTags, Boolean logStick) { - this.configKey = configKey; + this.name = username; + this.active = active; + this.rank = rank; + this.ips.clear(); + this.ips.addAll(ips); + this.lastLogin = lastLogin; + this.loginMessage = loginMessage; + this.tag = tag; + this.discordID = discordID; + this.backupCodes.clear(); + this.backupCodes.addAll(backupCodes); + this.commandSpy = commandSpy; + this.potionSpy = potionSpy; + this.acFormat = acFormat; + this.oldTags = oldTags; + this.logStick = logStick; } @Override @@ -94,59 +104,39 @@ public class Admin implements ConfigLoadable, ConfigSavable, Validatable .append("- Potion Spy: ").append(potionSpy).append("\n") .append("- Admin Chat Format: ").append(acFormat).append("\n") .append("- Old Tags: ").append(oldTags).append("\n") - .append("- Log Stick: ").append(logStick) - .append("- Backup Codes: ").append(backupCodes.size()).append("/10").append("\n"); + .append("- Log Stick: ").append(logStick).append("\n") + .append("- Backup Codes: ").append(backupCodes.size()).append("/10"); return output.toString(); } public void loadFrom(Player player) { - configKey = player.getName().toLowerCase(); name = player.getName(); ips.clear(); ips.add(Ips.getIp(player)); } - @Override - public void loadFrom(ConfigurationSection cs) + public Map toSQLStorable() { - name = cs.getString("username", configKey); - active = cs.getBoolean("active", true); - rank = Rank.findRank(cs.getString("rank")); - ips.clear(); - ips.addAll(cs.getStringList("ips")); - backupCodes.clear(); - backupCodes.addAll(cs.getStringList("backupCodes")); - lastLogin = FUtil.stringToDate(cs.getString("last_login")); - loginMessage = cs.getString("login_message", null); - discordID = cs.getString("discord_id", null); - tag = cs.getString("tag", null); - commandSpy = cs.getBoolean("command_spy", false); - potionSpy = cs.getBoolean("potion_spy", false); - acFormat = cs.getString("acformat", null); - oldTags = cs.getBoolean("oldtags", false); - logStick = cs.getBoolean("logstick", false); - } - - @Override - public void saveTo(ConfigurationSection cs) - { - Validate.isTrue(isValid(), "Could not save admin entry: " + name + ". Entry not valid!"); - cs.set("username", name); - cs.set("active", active); - cs.set("rank", rank.toString()); - cs.set("ips", Lists.newArrayList(ips)); - cs.set("backupCodes", Lists.newArrayList(backupCodes)); - cs.set("last_login", FUtil.dateToString(lastLogin)); - cs.set("login_message", loginMessage); - cs.set("discord_id", discordID); - cs.set("tag", tag); - cs.set("command_spy", commandSpy); - cs.set("potion_spy", potionSpy); - cs.set("acformat", acFormat); - cs.set("oldtags", oldTags); - cs.set("logstick", logStick); + Map map = new HashMap() + {{ + put("username", name); + put("active", active); + put("rank", rank.toString()); + put("ips", FUtil.listToString(ips)); + put("backup_codes", FUtil.listToString(backupCodes)); + put("last_login", lastLogin.getTime()); + put("login_message", loginMessage); + put("discord_id", discordID); + put("tag", tag); + put("command_spy", commandSpy); + put("potion_spy", potionSpy); + put("ac_format", acFormat); + put("old_tags", oldTags); + put("log_stick", logStick); + }}; + return map; } public boolean isAtLeast(Rank pRank) @@ -225,11 +215,9 @@ public class Admin implements ConfigLoadable, ConfigSavable, Validatable } } - @Override public boolean isValid() { - return configKey != null - && name != null + return name != null && rank != null && !ips.isEmpty() && lastLogin != null; diff --git a/src/main/java/me/totalfreedom/totalfreedommod/admin/AdminList.java b/src/main/java/me/totalfreedom/totalfreedommod/admin/AdminList.java index 24c06e90..80d4ecd2 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/admin/AdminList.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/admin/AdminList.java @@ -3,6 +3,8 @@ package me.totalfreedom.totalfreedommod.admin; import com.google.common.base.Function; 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; @@ -20,7 +22,6 @@ import net.pravian.aero.config.YamlConfig; import net.pravian.aero.util.Ips; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; -import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; import org.bukkit.plugin.ServicePriority; @@ -30,7 +31,7 @@ public class AdminList extends FreedomService public static final String CONFIG_FILENAME = "admins.yml"; @Getter - private final Map allAdmins = Maps.newHashMap(); // Includes disabled admins + private final Set allAdmins = Sets.newHashSet(); // Includes disabled admins // Only active admins below @Getter private final Set activeAdmins = Sets.newHashSet(); @@ -69,7 +70,6 @@ public class AdminList extends FreedomService @Override protected void onStop() { - save(); } public void load() @@ -77,47 +77,40 @@ public class AdminList extends FreedomService config.load(); allAdmins.clear(); - for (String key : config.getKeys(false)) + try { - ConfigurationSection section = config.getConfigurationSection(key); - if (section == null) + ResultSet adminSet = plugin.sql.getAdminList(); { - logger.warning("Invalid admin list format: " + key); - continue; + while (adminSet.next()) + { + String name = adminSet.getString("username"); + List ips = FUtil.stringToList(adminSet.getString("ips")); + Rank rank = Rank.findRank(adminSet.getString("rank")); + Boolean active = adminSet.getBoolean("active");; + Date lastLogin = new Date(adminSet.getLong("last_login")); + String loginMessage = adminSet.getString("login_message"); + String tag = adminSet.getString("tag"); + String discordID = adminSet.getString("discord_id"); + List backupCodes = FUtil.stringToList(adminSet.getString("backup_codes")); + Boolean commandSpy = adminSet.getBoolean("command_spy"); + Boolean potionSpy = adminSet.getBoolean("potion_spy"); + String acFormat = adminSet.getString("ac_format"); + Boolean oldTags = adminSet.getBoolean("old_tags"); + Boolean logStick = adminSet.getBoolean("log_stick"); + Admin admin = new Admin(name, ips, rank, active, lastLogin, loginMessage, tag, discordID, backupCodes, commandSpy, potionSpy, acFormat, oldTags, logStick); + allAdmins.add(admin); + } } - - Admin admin = new Admin(key); - admin.loadFrom(section); - - if (!admin.isValid()) - { - FLog.warning("Could not load admin: " + key + ". Missing details!"); - continue; - } - - allAdmins.put(key, admin); + } + catch (SQLException e) + { + FLog.severe("Failed to get adminlist: " + e.getMessage()); } updateTables(); FLog.info("Loaded " + allAdmins.size() + " admins (" + nameTable.size() + " active, " + ipTable.size() + " IPs)"); } - public void save() - { - // Clear the config - for (String key : config.getKeys(false)) - { - config.set(key, null); - } - - for (Admin admin : allAdmins.values()) - { - admin.saveTo(config.createSection(admin.getConfigKey())); - } - - config.save(); - } - public void messageAllAdmins(String message) { for (Player player : server.getOnlinePlayers()) @@ -194,7 +187,7 @@ public class AdminList extends FreedomService { // Add the new IP if we have to admin.addIp(ip); - save(); + save(admin); updateTables(); } return admin; @@ -206,8 +199,9 @@ public class AdminList extends FreedomService if (admin != null) { // Set the new username + String oldName = admin.getName(); admin.setName(player.getName()); - save(); + plugin.sql.updateAdminName(oldName, admin.getName()); updateTables(); } @@ -253,7 +247,7 @@ public class AdminList extends FreedomService admin.setLastLogin(new Date()); admin.setName(player.getName()); - save(); + save(admin); } public boolean isAdminImpostor(Player player) @@ -281,19 +275,16 @@ public class AdminList extends FreedomService { if (!admin.isValid()) { - logger.warning("Could not add admin: " + admin.getConfigKey() + " Admin is missing details!"); + logger.warning("Could not add admin: " + admin.getName() + " Admin is missing details!"); return false; } - final String key = admin.getConfigKey(); - // Store admin, update views - allAdmins.put(key, admin); + allAdmins.add(admin); updateTables(); // Save admin - admin.saveTo(config.createSection(key)); - config.save(); + plugin.sql.addAdmin(admin); return true; } @@ -309,15 +300,14 @@ public class AdminList extends FreedomService } // Remove admin, update views - if (allAdmins.remove(admin.getConfigKey()) == null) + if (!allAdmins.remove(admin)) { return false; } updateTables(); - // 'Unsave' admin - config.set(admin.getConfigKey(), null); - config.save(); + // Unsave admin + plugin.sql.removeAdmin(admin); return true; } @@ -328,7 +318,7 @@ public class AdminList extends FreedomService nameTable.clear(); ipTable.clear(); - for (Admin admin : allAdmins.values()) + for (Admin admin : allAdmins) { if (!admin.isActive()) { @@ -358,9 +348,29 @@ public class AdminList extends FreedomService return ipTable.keySet(); } + public void save(Admin admin) + { + try + { + ResultSet currentSave = plugin.sql.getAdminByName(admin.getName()); + 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) + { + plugin.sql.setAdminValue(admin, entry.getKey(), entry.getValue()); + } + } + } + catch (SQLException e) + { + FLog.severe("Failed to save admin: " + e.getMessage()); + } + } + public void deactivateOldEntries(boolean verbose) { - for (Admin admin : allAdmins.values()) + for (Admin admin : allAdmins) { if (!admin.isActive() || admin.getRank().isAtLeast(Rank.SENIOR_ADMIN)) { @@ -381,9 +391,9 @@ public class AdminList extends FreedomService } admin.setActive(false); + save(admin); } - save(); updateTables(); } } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/banning/Ban.java b/src/main/java/me/totalfreedom/totalfreedommod/banning/Ban.java index 4b88657d..681474a3 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/banning/Ban.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/banning/Ban.java @@ -4,6 +4,7 @@ import com.google.common.collect.Lists; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.time.Instant; +import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashSet; @@ -14,16 +15,13 @@ import lombok.Getter; import lombok.Setter; import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.util.FUtil; -import net.pravian.aero.base.ConfigLoadable; -import net.pravian.aero.base.ConfigSavable; import net.pravian.aero.base.Validatable; import net.pravian.aero.util.Ips; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; -import org.bukkit.configuration.ConfigurationSection; import org.bukkit.entity.Player; -public class Ban implements ConfigLoadable, ConfigSavable, Validatable +public class Ban implements Validatable { public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd \'at\' HH:mm:ss z"); @@ -53,22 +51,19 @@ public class Ban implements ConfigLoadable, ConfigSavable, Validatable public Ban(String username, String ip, String by, Date at, Date expire, String reason) { this(username, - new String[] - { - ip - }, + Arrays.asList(ip), by, at, expire, reason); } - public Ban(String username, String[] ips, String by, Date at, Date expire, String reason) + public Ban(String username, List ips, String by, Date at, Date expire, String reason) { this.username = username; if (ips != null) { - this.ips.addAll(Arrays.asList(ips)); + this.ips.addAll(ips); } dedupeIps(); this.by = by; @@ -86,10 +81,7 @@ public class Ban implements ConfigLoadable, ConfigSavable, Validatable public static Ban forPlayerIp(Player player, CommandSender by, Date expiry, String reason) { - return new Ban(null, new String[] - { - Ips.getIp(player) - }, by.getName(), Date.from(Instant.now()), expiry, reason); + return new Ban(null, Arrays.asList(Ips.getIp(player)), by.getName(), Date.from(Instant.now()), expiry, reason); } public static Ban forPlayerIp(String ip, CommandSender by, Date expiry, String reason) @@ -107,7 +99,7 @@ public class Ban implements ConfigLoadable, ConfigSavable, Validatable public static Ban forPlayerName(String player, CommandSender by, Date expiry, String reason) { return new Ban(player, - (String[])null, + new ArrayList(), by.getName(), Date.from(Instant.now()), expiry, @@ -171,7 +163,7 @@ public class Ban implements ConfigLoadable, ConfigSavable, Validatable return hasExpiry() && expiryUnix < FUtil.getUnixTime(); } - public String bakeKickMessage(String ip) + public String bakeKickMessage() { final StringBuilder message = new StringBuilder(ChatColor.GOLD + "You"); @@ -203,9 +195,6 @@ public class Ban implements ConfigLoadable, ConfigSavable, Validatable .append(DATE_FORMAT.format(FUtil.getUnixDate(expiryUnix))); } - message.append("\n").append(ChatColor.RED).append("IP Address: ").append(ChatColor.GOLD) - .append(ip); - return message.toString(); } @@ -246,31 +235,6 @@ public class Ban implements ConfigLoadable, ConfigSavable, Validatable return hash; } - @Override - public void loadFrom(ConfigurationSection cs) - { - this.username = cs.getString("username", null); - this.ips.clear(); - this.ips.addAll(cs.getStringList("ips")); - this.by = cs.getString("by", null); - this.at = FUtil.stringToDate(cs.getString("at", null)); - this.reason = cs.getString("reason", null); - this.expiryUnix = cs.getLong("expiry_unix", 0); - dedupeIps(); - } - - @Override - public void saveTo(ConfigurationSection cs) - { - dedupeIps(); - cs.set("username", username); - cs.set("ips", ips.isEmpty() ? null : ips); - cs.set("by", by); - cs.set("at", FUtil.dateToString(at)); - cs.set("reason", reason); - cs.set("expiry_unix", expiryUnix > 0 ? expiryUnix : null); - } - @Override public boolean isValid() { diff --git a/src/main/java/me/totalfreedom/totalfreedommod/banning/BanManager.java b/src/main/java/me/totalfreedom/totalfreedommod/banning/BanManager.java index b7ed392d..7455afb3 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/banning/BanManager.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/banning/BanManager.java @@ -3,8 +3,12 @@ package me.totalfreedom.totalfreedommod.banning; import com.google.common.collect.Lists; 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.Collection; import java.util.Collections; +import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -15,7 +19,6 @@ import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.player.PlayerData; import me.totalfreedom.totalfreedommod.util.FLog; import me.totalfreedom.totalfreedommod.util.FUtil; -import net.pravian.aero.config.YamlConfig; import net.pravian.aero.util.Ips; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -30,41 +33,38 @@ public class BanManager extends FreedomService private final Map ipBans = Maps.newHashMap(); private final Map nameBans = Maps.newHashMap(); private final List unbannableUsernames = Lists.newArrayList(); - public static final String CONFIG_FILENAME = "bans.yml"; // - private final YamlConfig config; public BanManager(TotalFreedomMod plugin) { super(plugin); - this.config = new YamlConfig(plugin, "bans.yml"); } @Override protected void onStart() { - config.load(); - bans.clear(); - for (String id : config.getKeys(false)) + try { - if (!config.isConfigurationSection(id)) + ResultSet banSet = plugin.sql.getBanList(); { - FLog.warning("Could not load username ban: " + id + ". Invalid format!"); - continue; + while (banSet.next()) + { + String name = banSet.getString("name"); + List ips = FUtil.stringToList(banSet.getString("ips")); + String by = banSet.getString("by"); + Date at = new Date(banSet.getLong("at")); + Date expires = new Date(banSet.getLong("expires")); + String reason = banSet.getString("reason"); + Ban ban = new Ban(name, ips, by, at, expires, reason); + bans.add(ban); + } } - - Ban ban = new Ban(); - ban.loadFrom(config.getConfigurationSection(id)); - - if (!ban.isValid()) - { - FLog.warning("Not adding username ban: " + id + ". Missing information."); - continue; - } - - bans.add(ban); + } + catch (SQLException e) + { + FLog.severe("Failed to load ban list: " + e.getMessage()); } // Remove expired bans, repopulate ipBans and nameBans, @@ -81,8 +81,6 @@ public class BanManager extends FreedomService @Override protected void onStop() { - saveAll(); - logger.info("Saved " + bans.size() + " player bans"); } public Set getAllBans() @@ -100,21 +98,6 @@ public class BanManager extends FreedomService return Collections.unmodifiableCollection(nameBans.values()); } - public void saveAll() - { - // Remove expired - updateViews(); - - config.clear(); - for (Ban ban : bans) - { - ban.saveTo(config.createSection(String.valueOf(ban.hashCode()))); - } - - // Save config - config.save(); - } - public Ban getByIp(String ip) { final Ban directBan = ipBans.get(ip); @@ -168,7 +151,6 @@ public class BanManager extends FreedomService if (ban != null) { bans.remove(ban); - saveAll(); } return ban; @@ -181,7 +163,6 @@ public class BanManager extends FreedomService if (ban != null) { bans.remove(ban); - saveAll(); } return ban; @@ -199,12 +180,16 @@ public class BanManager extends FreedomService public boolean addBan(Ban ban) { + if (getByUsername(ban.getUsername()) != null) + { + removeBan(ban); + } if (bans.add(ban)) { - saveAll(); + plugin.sql.addBan(ban); + updateViews(); return true; } - updateViews(); return false; } @@ -213,23 +198,20 @@ public class BanManager extends FreedomService { if (bans.remove(ban)) { - saveAll(); + plugin.sql.removeBan(ban); + updateViews(); return true; } - updateViews(); return false; } public int purge() { - config.clear(); - config.save(); - int size = bans.size(); bans.clear(); updateViews(); - + plugin.sql.truncate("bans"); return size; } @@ -248,7 +230,7 @@ public class BanManager extends FreedomService if (ban != null && !ban.isExpired()) { - event.disallow(PlayerLoginEvent.Result.KICK_OTHER, ban.bakeKickMessage(ip)); + event.disallow(PlayerLoginEvent.Result.KICK_OTHER, ban.bakeKickMessage()); } } @@ -277,11 +259,12 @@ public class BanManager extends FreedomService private void updateViews() { // Remove expired bans - for (Iterator it = bans.iterator(); it.hasNext(); ) + for (Ban ban : new ArrayList<>(bans)) { - if (it.next().isExpired()) + if (ban.isExpired()) { - it.remove(); + bans.remove(ban); + plugin.sql.removeBan(ban); } } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/banning/VPNBanList.java b/src/main/java/me/totalfreedom/totalfreedommod/banning/VPNBanList.java deleted file mode 100644 index 9b379f69..00000000 --- a/src/main/java/me/totalfreedom/totalfreedommod/banning/VPNBanList.java +++ /dev/null @@ -1,76 +0,0 @@ -package me.totalfreedom.totalfreedommod.banning; - -import com.google.common.collect.Sets; -import java.util.Set; -import lombok.Getter; -import me.totalfreedom.totalfreedommod.FreedomService; -import me.totalfreedom.totalfreedommod.TotalFreedomMod; -import me.totalfreedom.totalfreedommod.config.ConfigEntry; -import me.totalfreedom.totalfreedommod.util.FLog; -import me.totalfreedom.totalfreedommod.util.FUtil; -import net.pravian.aero.config.YamlConfig; -import net.pravian.aero.util.Ips; -import org.bukkit.ChatColor; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.player.PlayerLoginEvent; - -public class VPNBanList extends FreedomService -{ - - public static final String CONFIG_FILENAME = "vpnbans.yml"; - - @Getter - private final Set vpnIps = Sets.newHashSet(); - - public VPNBanList(TotalFreedomMod plugin) - { - super(plugin); - } - - @Override - protected void onStart() - { - vpnIps.clear(); - - final YamlConfig config = new YamlConfig(plugin, CONFIG_FILENAME, true); - config.load(); - - for (String name : config.getKeys(false)) - { - vpnIps.addAll(config.getStringList(name)); - } - - FLog.info("Loaded " + vpnIps.size() + " VPN ips."); - } - - @Override - protected void onStop() - { - } - - @EventHandler(priority = EventPriority.LOWEST) - public void onPlayerLogin(PlayerLoginEvent event) - { - final String ip = Ips.getIp(event); - - // Permbanned IPs - for (String testIp : getVPNIps()) - { - if (FUtil.fuzzyIpMatch(testIp, ip, 4)) - { - event.disallow(PlayerLoginEvent.Result.KICK_OTHER, - ChatColor.RED + "Your IP address is detected as a VPN\n" - + "If you believe this is an error, release procedures are available at\n" - + ChatColor.GOLD + ConfigEntry.SERVER_PERMBAN_URL.getString()); - return; - } - } - - } - - public Set getVPNIps() - { - return this.vpnIps; - } -} diff --git a/src/main/java/me/totalfreedom/totalfreedommod/blocking/BlockBlocker.java b/src/main/java/me/totalfreedom/totalfreedommod/blocking/BlockBlocker.java index 83a4d1eb..a0176022 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/blocking/BlockBlocker.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/blocking/BlockBlocker.java @@ -48,11 +48,7 @@ public class BlockBlocker extends FreedomService { case LAVA: { - if (ConfigEntry.ALLOW_LAVA_PLACE.getBoolean()) - { - FLog.info(String.format("%s placed lava @ %s", player.getName(), FUtil.formatLocation(event.getBlock().getLocation()))); - } - else + if (!ConfigEntry.ALLOW_LAVA_PLACE.getBoolean()) { player.getInventory().setItem(player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1)); player.sendMessage(ChatColor.GRAY + "Lava placement is currently disabled."); @@ -62,11 +58,7 @@ public class BlockBlocker extends FreedomService } case WATER: { - if (ConfigEntry.ALLOW_WATER_PLACE.getBoolean()) - { - FLog.info(String.format("%s placed water @ %s", player.getName(), FUtil.formatLocation(event.getBlock().getLocation()))); - } - else + if (!ConfigEntry.ALLOW_WATER_PLACE.getBoolean()) { player.getInventory().setItem(player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1)); player.sendMessage(ChatColor.GRAY + "Water placement is currently disabled."); @@ -77,11 +69,7 @@ public class BlockBlocker extends FreedomService } case FIRE: { - if (ConfigEntry.ALLOW_FIRE_PLACE.getBoolean()) - { - FLog.info(String.format("%s placed fire @ %s", player.getName(), FUtil.formatLocation(event.getBlock().getLocation()))); - } - else + if (!ConfigEntry.ALLOW_FIRE_PLACE.getBoolean()) { player.getInventory().setItem(player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1)); player.sendMessage(ChatColor.GRAY + "Fire placement is currently disabled."); @@ -89,14 +77,6 @@ public class BlockBlocker extends FreedomService } break; } - case TNT: - { - if (ConfigEntry.ALLOW_EXPLOSIONS.getBoolean()) - { - FLog.info(String.format("%s placed TNT @ %s", player.getName(), FUtil.formatLocation(event.getBlock().getLocation()))); - } - break; - } case STRUCTURE_BLOCK: { if (!ConfigEntry.ALLOW_STRUCTURE_BLOCKS.getBoolean()) @@ -152,7 +132,7 @@ public class BlockBlocker extends FreedomService { if (!ConfigEntry.ALLOW_BEEHIVES.getBoolean()) { - player.sendMessage(ChatColor.GRAY + "Bee hives are disabled."); + player.sendMessage(ChatColor.GRAY + "Beehives are disabled."); player.getInventory().setItem(player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1)); event.setCancelled(true); } @@ -164,9 +144,9 @@ public class BlockBlocker extends FreedomService Skull skull = (Skull) event.getBlockPlaced().getState(); if (skull.hasOwner()) { - if (skull.getOwner().contains("§")) + if (skull.getOwner().contains("\u00A7")) { - skull.setOwner(skull.getOwner().replace("§", "")); + skull.setOwner(skull.getOwner().replace("\u00A7", "")); SkullMeta meta = (SkullMeta) event.getItemInHand().getItemMeta(); if (meta != null) { diff --git a/src/main/java/me/totalfreedom/totalfreedommod/bridge/CoreProtectBridge.java b/src/main/java/me/totalfreedom/totalfreedommod/bridge/CoreProtectBridge.java index 2488f9dd..98d94a0e 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/bridge/CoreProtectBridge.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/bridge/CoreProtectBridge.java @@ -183,7 +183,7 @@ public class CoreProtectBridge extends FreedomService String password = ConfigEntry.COREPROTECT_MYSQL_PASSWORD.getString(); String database = ConfigEntry.COREPROTECT_MYSQL_DATABASE.getString(); String url = host + ":" + port + "/" + database + "?user=" + username + "&password=" + password + "&useSSL=false"; - connection = DriverManager.getConnection("jdbc:mysql://" + url); + connection = DriverManager.getConnection("jdbc:sql://" + url); final Statement statement = connection.createStatement(); statement.setQueryTimeout(30); @@ -196,6 +196,7 @@ public class CoreProtectBridge extends FreedomService } // Ensure the world ID is not null + if (worldID == null) { FLog.warning("Failed to obtain the world ID for the " + world.getName()); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_ban.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_ban.java index df2cf208..f31cd46e 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_ban.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_ban.java @@ -149,7 +149,7 @@ public class Command_ban extends FreedomCommand // Kick player and handle others on IP if (player != null) { - player.kickPlayer(ban.bakeKickMessage(Ips.getIp(player))); + player.kickPlayer(ban.bakeKickMessage()); for (Player p : Bukkit.getOnlinePlayers()) { if (Ips.getIp(p).equals(Ips.getIp(player))) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_cage.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_cage.java index d881e298..44d62109 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_cage.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_cage.java @@ -16,7 +16,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @CommandPermissions(level = Rank.SUPER_ADMIN, source = SourceType.BOTH) -@CommandParameters(description = "Place a cage around someone with certain blocks, or someone's player head.", usage = "/ [head | block] [playername | blockname]") +@CommandParameters(description = "Place a cage around someone with certain blocks, or someone's player head.", usage = "/ [head | block] [playername | blockname]") public class Command_cage extends FreedomCommand { @@ -26,14 +26,8 @@ public class Command_cage extends FreedomCommand { return false; } + String skullName = null; - if ("off".equals(args[0]) && sender instanceof Player) - { - FUtil.adminAction(sender.getName(), "Uncaging " + sender.getName(), true); - final FPlayer playerdata = plugin.pl.getPlayer(playerSender); - playerdata.getCageData().setCaged(false); - return true; - } if ("purge".equals(args[0])) { FUtil.adminAction(sender.getName(), "Uncaging all players", true); @@ -44,13 +38,24 @@ public class Command_cage extends FreedomCommand } return true; } + Player player = getPlayer(args[0]); if (player == null) { sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); return true; } + final FPlayer fPlayer = plugin.pl.getPlayer(player); + + if (fPlayer.getCageData().isCaged()) + { + FUtil.adminAction(sender.getName(), "Uncaging " + sender.getName(), true); + final FPlayer playerdata = plugin.pl.getPlayer(playerSender); + playerdata.getCageData().setCaged(false); + return true; + } + Material outerMaterial = Material.GLASS; Material innerMaterial = Material.AIR; if (args.length >= 2 && args[1] != null) @@ -58,12 +63,6 @@ public class Command_cage extends FreedomCommand final String s = args[1]; switch (s) { - case "off": - { - FUtil.adminAction(sender.getName(), "Uncaging " + player.getName(), true); - fPlayer.getCageData().setCaged(false); - return true; - } case "head": { outerMaterial = Material.PLAYER_HEAD; @@ -91,6 +90,7 @@ public class Command_cage extends FreedomCommand } Location location = player.getLocation().clone().add(0.0, 1.0, 0.0); + if (skullName != null) { fPlayer.getCageData().cage(location, outerMaterial, innerMaterial, skullName); @@ -99,7 +99,9 @@ public class Command_cage extends FreedomCommand { fPlayer.getCageData().cage(location, outerMaterial, innerMaterial); } + player.setGameMode(GameMode.SURVIVAL); + if (outerMaterial == Material.PLAYER_HEAD) { FUtil.adminAction(sender.getName(), "Caging " + player.getName() + " in " + skullName, true); @@ -130,7 +132,7 @@ public class Command_cage extends FreedomCommand { if (!args[0].equals("purge")) { - return Arrays.asList("off", "head", "block"); + return Arrays.asList("head", "block"); } } else if (args.length == 3) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_cmdspy.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_cmdspy.java index 13a8898d..f1d55b0a 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_cmdspy.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_cmdspy.java @@ -17,7 +17,7 @@ public class Command_cmdspy extends FreedomCommand Admin admin = plugin.al.getAdmin(playerSender); admin.setCommandSpy(!admin.getCommandSpy()); - plugin.al.save(); + plugin.al.save(admin); plugin.al.updateTables(); msg("CommandSpy " + (admin.getCommandSpy() ? "enabled." : "disabled.")); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_doom.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_doom.java index 85b1cb1f..3c0a9e50 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_doom.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_doom.java @@ -51,7 +51,7 @@ public class Command_doom extends FreedomCommand { FUtil.adminAction(sender.getName(), "Removing " + player.getName() + " from the admin list", true); admin.setActive(false); - plugin.al.save(); + plugin.al.save(admin); plugin.al.updateTables(); if (plugin.dc.enabled && ConfigEntry.DISCORD_ROLE_SYNC.getBoolean()) { diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_gchat.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_gchat.java deleted file mode 100644 index da1c8e77..00000000 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_gchat.java +++ /dev/null @@ -1,45 +0,0 @@ -package me.totalfreedom.totalfreedommod.command; - -import me.totalfreedom.totalfreedommod.rank.Rank; -import me.totalfreedom.totalfreedommod.util.FUtil; -import org.apache.commons.lang.StringUtils; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -@CommandPermissions(level = Rank.SUPER_ADMIN, source = SourceType.BOTH, blockHostConsole = true) -@CommandParameters(description = "Send a chat message as the specified player.", usage = "/ ") -public class Command_gchat extends FreedomCommand -{ - - @Override - public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) - { - if (args.length < 2) - { - return false; - } - - final Player player = getPlayer(args[0]); - - if (player == null) - { - sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); - return true; - } - - if (!FUtil.isExecutive(sender.getName()) && plugin.al.isAdmin(player)) - { - msg("Only Executives may use this command on admins", ChatColor.RED); - return true; - } - - final String outMessage = StringUtils.join(args, " ", 1, args.length); - msg("Sending message as " + player.getName() + ": " + outMessage); - player.chat(outMessage); - msg("Message sent."); - - return true; - } -} diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_gcmd.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_gcmd.java deleted file mode 100644 index 033591e8..00000000 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_gcmd.java +++ /dev/null @@ -1,64 +0,0 @@ -package me.totalfreedom.totalfreedommod.command; - -import me.totalfreedom.totalfreedommod.rank.Rank; -import me.totalfreedom.totalfreedommod.util.FUtil; -import org.apache.commons.lang.StringUtils; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.ChatColor; - -@CommandPermissions(level = Rank.SUPER_ADMIN, source = SourceType.BOTH, blockHostConsole = true) -@CommandParameters(description = "Send a command as the specified player.", usage = "/ ") -public class Command_gcmd extends FreedomCommand -{ - - @Override - public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) - { - if (args.length < 2) - { - return false; - } - - final Player player = getPlayer(args[0]); - - if (player == null) - { - sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND); - return true; - } - - if (!FUtil.isExecutive(sender.getName()) && plugin.al.isAdmin(player)) - { - msg("Only Executives may use this command on admins", ChatColor.RED); - return true; - } - - final String outCommand = StringUtils.join(args, " ", 1, args.length); - - if (plugin.cb.isCommandBlocked(outCommand, sender)) - { - return true; - } - - try - { - msg("Sending command as " + player.getName() + ": " + outCommand); - if (server.dispatchCommand(player, outCommand)) - { - msg("Command sent."); - } - else - { - msg("Unknown error sending command."); - } - } - catch (Throwable ex) - { - msg("Error sending command: " + ex.getMessage()); - } - - return true; - } -} diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_glist.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_glist.java index 1412df89..24cb91c0 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_glist.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_glist.java @@ -104,7 +104,7 @@ public class Command_glist extends FreedomCommand if (player != null) { - player.kickPlayer(playerBan.bakeKickMessage(Ips.getIp(player))); + player.kickPlayer(playerBan.bakeKickMessage()); } plugin.pul.logPunishment(new Punishment(username, ips.get(0), sender.getName(), PunishmentType.BAN, null)); @@ -149,7 +149,7 @@ public class Command_glist extends FreedomCommand if (player != null) { - player.kickPlayer(nameBan.bakeKickMessage(Ips.getIp(player))); + player.kickPlayer(nameBan.bakeKickMessage()); } return true; diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_hubworld.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_hubworld.java new file mode 100644 index 00000000..bacadfdc --- /dev/null +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_hubworld.java @@ -0,0 +1,202 @@ +package me.totalfreedom.totalfreedommod.command; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import me.totalfreedom.totalfreedommod.rank.Rank; +import me.totalfreedom.totalfreedommod.world.WorldTime; +import me.totalfreedom.totalfreedommod.world.WorldWeather; +import org.bukkit.World; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +@CommandPermissions(level = Rank.OP, source = SourceType.BOTH) +@CommandParameters(description = "HubWorld management stuff", + usage = "/ [time | weather ]", + aliases = "hw,hub") +public class Command_hubworld extends FreedomCommand +{ + + private enum CommandMode + { + TELEPORT, TIME, WEATHER + } + + @Override + public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) + { + CommandMode commandMode = null; + + if (args.length == 0) + { + commandMode = CommandMode.TELEPORT; + } + else if (args.length >= 2) + { + if ("time".equalsIgnoreCase(args[0])) + { + commandMode = CommandMode.TIME; + } + else if ("weather".equalsIgnoreCase(args[0])) + { + commandMode = CommandMode.WEATHER; + } + } + + if (commandMode == null) + { + return false; + } + + try + { + switch (commandMode) + { + case TELEPORT: + { + if (!(sender instanceof Player) || playerSender == null) + { + return true; + } + + World hubWorld = null; + try + { + hubWorld = plugin.wm.hubworld.getWorld(); + } + catch (Exception ex) + { + } + + if (hubWorld == null || playerSender.getWorld() == hubWorld) + { + msg("Going to the main world."); + playerSender.teleport(server.getWorlds().get(0).getSpawnLocation()); + } + else + { + msg("Going to the hub world"); + plugin.wm.hubworld.sendToWorld(playerSender); + } + + break; + } + case TIME: + { + assertCommandPerms(sender, playerSender); + + if (args.length == 2) + { + WorldTime timeOfDay = WorldTime.getByAlias(args[1]); + if (timeOfDay != null) + { + plugin.wm.hubworld.setTimeOfDay(timeOfDay); + msg("Hub world time set to: " + timeOfDay.name()); + } + else + { + msg("Invalid time of day. Can be: sunrise, noon, sunset, midnight"); + } + } + else + { + return false; + } + + break; + } + case WEATHER: + { + assertCommandPerms(sender, playerSender); + + if (args.length == 2) + { + WorldWeather weatherMode = WorldWeather.getByAlias(args[1]); + if (weatherMode != null) + { + plugin.wm.hubworld.setWeatherMode(weatherMode); + msg("Hub world weather set to: " + weatherMode.name()); + } + else + { + msg("Invalid weather mode. Can be: off, rain, storm"); + } + } + else + { + return false; + } + + break; + } + default: + { + return false; + } + } + } + catch (PermissionDeniedException ex) + { + if (ex.getMessage().isEmpty()) + { + return noPerms(); + } + sender.sendMessage(ex.getMessage()); + return true; + } + + return true; + } + + @Override + public List getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args) + { + if (!plugin.al.isAdmin(sender)) + { + return Collections.emptyList(); + } + if (args.length == 1) + { + return Arrays.asList("time", "weather"); + } + else if (args.length == 2) + { + if (args[0].equals("time")) + { + return Arrays.asList("morning", "noon", "evening", "night"); + } + else if (args[0].equals("weather")) + { + return Arrays.asList("off", "rain", "storm"); + } + } + return Collections.emptyList(); + } + + // TODO: Redo this properly + private void assertCommandPerms(CommandSender sender, Player playerSender) throws PermissionDeniedException + { + if (!(sender instanceof Player) || playerSender == null || !plugin.al.isSeniorAdmin(playerSender)) + { + throw new PermissionDeniedException(); + } + } + + private class PermissionDeniedException extends Exception + { + + private static final long serialVersionUID = 1L; + + private PermissionDeniedException() + { + super(""); + } + + private PermissionDeniedException(String string) + { + super(string); + } + } + +} diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_jumppads.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_jumppads.java index 596780a9..a63f66af 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_jumppads.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_jumppads.java @@ -16,7 +16,7 @@ import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -@CommandPermissions(level = Rank.SUPER_ADMIN, source = SourceType.BOTH) +@CommandPermissions(level = Rank.OP, source = SourceType.BOTH) @CommandParameters(description = "Toggles jumppads on/off, view the status of jumppads, or make them sideways.", usage = "/ >", aliases = "launchpads,jp") public class Command_jumppads extends FreedomCommand { 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 0378689b..cf5c9e34 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_list.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_list.java @@ -7,6 +7,7 @@ import me.totalfreedom.totalfreedommod.admin.AdminList; import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.rank.Displayable; 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.ChatColor; @@ -95,7 +96,7 @@ public class Command_list extends FreedomCommand } else { - onlineStats.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(server.getOnlinePlayers().size() - plugin.al.vanished.size()) + onlineStats.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(server.getOnlinePlayers().size() - AdminList.vanished.size()) .append(ChatColor.BLUE) .append(" out of a maximum ") .append(ChatColor.RED) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_lockup.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_lockup.java index e8a97816..92222b16 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_lockup.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_lockup.java @@ -10,13 +10,14 @@ import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; @CommandPermissions(level = Rank.SENIOR_ADMIN, source = SourceType.BOTH, blockHostConsole = true) -@CommandParameters(description = "This is evil, and I never should have wrote it - blocks specified player's input.", usage = "/ on | off>>") +@CommandParameters(description = "This is evil, and I never should have wrote it - blocks specified player's input.", usage = "/ on | off> [-q]>") public class Command_lockup extends FreedomCommand { @Override public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { + Boolean silent = (args[args.length - 1].equalsIgnoreCase("-q")); if (args.length == 1) { if (args[0].equalsIgnoreCase("all")) @@ -56,7 +57,10 @@ public class Command_lockup extends FreedomCommand return true; } - FUtil.adminAction(sender.getName(), "Locking up " + player.getName(), true); + if (!silent) + { + FUtil.adminAction(sender.getName(), "Locking up " + player.getName(), true); + } startLockup(player); msg("Locked up " + player.getName() + "."); } @@ -70,7 +74,10 @@ public class Command_lockup extends FreedomCommand return true; } - FUtil.adminAction(sender.getName(), "Unlocking " + player.getName(), true); + if (!silent) + { + FUtil.adminAction(sender.getName(), "Unlocking " + player.getName(), true); + } cancelLockup(player); msg("Unlocked " + player.getName() + "."); } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_myadmin.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_myadmin.java index 70c8fc1d..c1bcff31 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_myadmin.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_myadmin.java @@ -83,7 +83,7 @@ public class Command_myadmin extends FreedomCommand target.clearIPs(); target.addIp(targetIp); - plugin.al.save(); + plugin.al.save(target); plugin.al.updateTables(); msg(counter + " IPs removed."); @@ -127,7 +127,7 @@ public class Command_myadmin extends FreedomCommand FUtil.adminAction(sender.getName(), "Removing a supered IP" + (init == null ? "" : " from " + targetPlayer.getName() + "'s IPs"), true); target.removeIp(args[1]); - plugin.al.save(); + plugin.al.save(target); plugin.al.updateTables(); msg("Removed IP " + args[1]); @@ -159,7 +159,7 @@ public class Command_myadmin extends FreedomCommand target.setLoginMessage(message); msg((init == null ? "Your" : targetPlayer.getName() + "'s") + " login message is now: "); msg("> " + previewMessage); - plugin.al.save(); + plugin.al.save(target); plugin.al.updateTables(); return true; } @@ -168,7 +168,7 @@ public class Command_myadmin extends FreedomCommand { FUtil.adminAction(sender.getName(), "Clearing personal login message" + (init == null ? "" : " for " + targetPlayer.getName()), false); target.setLoginMessage(null); - plugin.al.save(); + plugin.al.save(target); plugin.al.updateTables(); return true; } @@ -188,7 +188,7 @@ public class Command_myadmin extends FreedomCommand { String format = StringUtils.join(args, " ", 1, args.length); target.setAcFormat(format); - plugin.al.save(); + plugin.al.save(target); plugin.al.updateTables(); msg("Set admin chat format to \"" + format + "\".", ChatColor.GRAY); String example = format.replace("%name%", "ExampleAdmin").replace("%rank%", Rank.TELNET_ADMIN.getAbbr()).replace("%rankcolor%", Rank.TELNET_ADMIN.getColor().toString()).replace("%msg%", "The quick brown fox jumps over the lazy dog."); @@ -198,7 +198,7 @@ public class Command_myadmin extends FreedomCommand case "clearacformat": { target.setAcFormat(null); - plugin.al.save(); + plugin.al.save(target); plugin.al.updateTables(); msg("Cleared admin chat format.", ChatColor.GRAY); return true; @@ -206,7 +206,7 @@ public class Command_myadmin extends FreedomCommand case "oldtags": { target.setOldTags(!target.getOldTags()); - plugin.al.save(); + plugin.al.save(target); plugin.al.updateTables(); msg((target.getOldTags() ? "Enabled" : "Disabled") + " old tags."); return true; @@ -214,7 +214,7 @@ public class Command_myadmin extends FreedomCommand case "logstick": { target.setLogStick(!target.getLogStick()); - plugin.al.save(); + plugin.al.save(target); plugin.al.updateTables(); msg((target.getLogStick() ? "Enabled" : "Disabled") + " log-stick lookup."); return true; diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_plugincontrol.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_plugincontrol.java index 6e4dcf44..db928089 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_plugincontrol.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_plugincontrol.java @@ -18,6 +18,8 @@ import org.bukkit.plugin.PluginManager; public class Command_plugincontrol extends FreedomCommand { + private final List UNTOUCHABLE_PLUGINS = Arrays.asList(plugin.getName(), "BukkitTelnet"); + @Override public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { @@ -88,9 +90,9 @@ public class Command_plugincontrol extends FreedomCommand return true; } - if (target.getName().equals(plugin.getName())) + if (UNTOUCHABLE_PLUGINS.contains(target.getName())) { - msg("You cannot disable " + plugin.getName()); + msg("You cannot disable " + target.getName()); return true; } @@ -115,9 +117,9 @@ public class Command_plugincontrol extends FreedomCommand return true; } - if (target.getName().equals(plugin.getName())) + if (UNTOUCHABLE_PLUGINS.contains(target.getName())) { - msg("Use /tfm reload to reload instead."); + msg("You cannot reload " + target.getName()); return true; } @@ -157,7 +159,10 @@ public class Command_plugincontrol extends FreedomCommand List names = new ArrayList<>(); for (Plugin plugin : server.getPluginManager().getPlugins()) { - names.add(plugin.getName()); + if (!UNTOUCHABLE_PLUGINS.contains(plugin.getName())) + { + names.add(plugin.getName()); + } } names.remove(plugin.getName()); return names; diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_potion.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_potion.java index 7f9a6c7b..0af3b7d3 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_potion.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_potion.java @@ -17,7 +17,8 @@ import org.bukkit.potion.PotionEffectType; @CommandPermissions(level = Rank.OP, source = SourceType.BOTH) @CommandParameters( description = "Manipulate your potion effects. Duration is measured in server ticks (~20 ticks per second).", - usage = "/ [target name]>") + usage = "/ [target name]>", + aliases="effect") public class Command_potion extends FreedomCommand { diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_potionspy.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_potionspy.java index 70ca2738..cd94100a 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_potionspy.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_potionspy.java @@ -16,7 +16,7 @@ public class Command_potionspy extends FreedomCommand { Admin admin = plugin.al.getAdmin(playerSender); admin.setPotionSpy(!admin.getPotionSpy()); - plugin.al.save(); + plugin.al.save(admin); plugin.al.updateTables(); msg("PotionSpy is now " + (admin.getPotionSpy() ? "enabled." : "disabled.")); return true; 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 484bc9f0..3162b1f3 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_saconfig.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_saconfig.java @@ -99,7 +99,7 @@ public class Command_saconfig extends FreedomCommand FUtil.adminAction(sender.getName(), "Setting " + admin.getName() + "'s rank to " + rank.getName(), true); admin.setRank(rank); - plugin.al.save(); + plugin.al.save(admin); Player player = getPlayer(admin.getName()); if (player != null) @@ -175,7 +175,7 @@ public class Command_saconfig extends FreedomCommand // Find the old admin entry String name = player != null ? player.getName() : args[1]; Admin admin = null; - for (Admin loopAdmin : plugin.al.getAllAdmins().values()) + for (Admin loopAdmin : plugin.al.getAllAdmins()) { if (loopAdmin.getName().equalsIgnoreCase(name)) { @@ -204,11 +204,7 @@ public class Command_saconfig extends FreedomCommand } FUtil.adminAction(sender.getName(), "Adding " + player.getName() + " to the admin list", true); - plugin.al.addAdmin(new Admin(player)); - if (player != null) - { - plugin.rm.updateDisplay(player); - } + admin = new Admin(player); // Attempt to find discord account if (plugin.mbl.isMasterBuilder(player)) @@ -224,6 +220,8 @@ public class Command_saconfig extends FreedomCommand admin.setDiscordID(vPlayer.getDiscordId()); } } + plugin.al.addAdmin(admin); + plugin.rm.updateDisplay(player); } else // Existing admin { @@ -231,7 +229,9 @@ public class Command_saconfig extends FreedomCommand if (player != null) { + String oldName = admin.getName(); admin.setName(player.getName()); + plugin.sql.updateAdminName(oldName, admin.getName()); admin.addIp(Ips.getIp(player)); } @@ -287,7 +287,7 @@ public class Command_saconfig extends FreedomCommand plugin.al.verifiedNoAdminIps.remove(player.getName()); } - plugin.al.save(); + plugin.al.save(admin); plugin.al.updateTables(); if (player != null) { @@ -339,7 +339,7 @@ public class Command_saconfig extends FreedomCommand FUtil.adminAction(sender.getName(), "Removing " + admin.getName() + " from the admin list", true); admin.setActive(false); - plugin.al.save(); + plugin.al.save(admin); plugin.al.updateTables(); if (player != null) { diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tag.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tag.java index 219f2fe6..1fdb8332 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tag.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tag.java @@ -203,7 +203,7 @@ public class Command_tag extends FreedomCommand { Admin admin = plugin.al.getAdmin(player); admin.setTag(tag); - plugin.al.save(); + plugin.al.save(admin); plugin.al.updateTables(); } else if (plugin.mbl.isMasterBuilder(player)) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tempban.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tempban.java index dd77450a..556059dd 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tempban.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_tempban.java @@ -69,7 +69,7 @@ public class Command_tempban extends FreedomCommand } message.append(" until ").append(date_format.format(expires)); - String reason = "Banned by " + sender.getName(); + String reason = null; if (args.length >= 3) { reason = StringUtils.join(ArrayUtils.subarray(args, 2, args.length), " ") + " (" + sender.getName() + ")"; @@ -95,7 +95,7 @@ public class Command_tempban extends FreedomCommand ban.addIp(ip); } plugin.bm.addBan(ban); - player.kickPlayer(sender.getName() + " - " + message.toString()); + player.kickPlayer(ban.bakeKickMessage()); plugin.pul.logPunishment(new Punishment(player.getName(), Ips.getIp(player), sender.getName(), PunishmentType.TEMPBAN, reason)); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_toggle.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_toggle.java index 1cd5c2ad..20f06d2b 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_toggle.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_toggle.java @@ -46,6 +46,8 @@ public class Command_toggle extends FreedomCommand msg("- spawners"); msg("- 4chan"); msg("- beehives"); + msg("- autotp"); + msg("- autoclear"); return false; } @@ -213,6 +215,16 @@ public class Command_toggle extends FreedomCommand toggle("Beehives are", ConfigEntry.ALLOW_BEEHIVES); return true; } + else if (args[0].equalsIgnoreCase("autotp")) + { + toggle("Teleportation on join is", ConfigEntry.AUTO_TP); + return true; + } + else if (args[0].equalsIgnoreCase("autoclear")) + { + toggle("Clearing inventories on join is", ConfigEntry.AUTO_CLEAR); + return true; + } else { return false; @@ -232,7 +244,8 @@ public class Command_toggle extends FreedomCommand return Arrays.asList( "waterplace", "fireplace", "lavaplace", "fluidspread", "lavadmg", "firespread", "frostwalk", "firework", "prelog", "lockdown", "petprotect", "entitywipe", "nonuke", "explosives", "unsafeenchs", - "bells", "armorstands", "structureblocks", "jigsaws", "grindstones", "jukeboxes", "spawners", "4chan", "beehives"); + "bells", "armorstands", "structureblocks", "jigsaws", "grindstones", "jukeboxes", "spawners", "4chan", "beehives", + "autotp", "autoclear"); } return Collections.emptyList(); 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 ac7b6cc1..57170c85 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_unlinkdiscord.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_unlinkdiscord.java @@ -31,7 +31,7 @@ public class Command_unlinkdiscord extends FreedomCommand return true; } admin.setDiscordID(null); - plugin.al.save(); + plugin.al.save(admin); 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_unmute.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_unmute.java index 1ce2fa18..40c934d7 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_unmute.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_unmute.java @@ -14,7 +14,7 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; @CommandPermissions(level = Rank.SUPER_ADMIN, source = SourceType.BOTH) -@CommandParameters(description = "Mutes a player with brute force.", usage = "/ [-q] ") +@CommandParameters(description = "Unmutes a player", usage = "/ [-q] ") public class Command_unmute extends FreedomCommand { diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_verify.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_verify.java index 827d8736..e8d703c4 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_verify.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_verify.java @@ -218,7 +218,7 @@ public class Command_verify extends FreedomCommand admin.setActive(true); admin.setLastLogin(new Date()); - plugin.al.save(); + plugin.al.save(admin); plugin.al.updateTables(); plugin.rm.updateDisplay(playerSender); playerSender.setOp(true); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_vpnbanlist.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_vpnbanlist.java deleted file mode 100644 index 7d5bf60d..00000000 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_vpnbanlist.java +++ /dev/null @@ -1,35 +0,0 @@ -package me.totalfreedom.totalfreedommod.command; - -import me.totalfreedom.totalfreedommod.rank.Rank; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -@CommandPermissions(level = Rank.SENIOR_ADMIN, source = SourceType.ONLY_CONSOLE) -@CommandParameters(description = "Reload the banned VPN IP list.", usage = "/ reload") -public class Command_vpnbanlist extends FreedomCommand -{ - - @Override - public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) - { - if (args.length != 1) - { - return false; - } - - if (!args[0].equalsIgnoreCase("reload")) - { - return false; - } - - msg("Reloading VPN ban list...", ChatColor.RED); - plugin.vn.stop(); - plugin.vn.start(); - msg("Reloaded VPN ban list."); - msg(plugin.vn.getVPNIps().size() + " IPs loaded"); - return true; - } - -} diff --git a/src/main/java/me/totalfreedom/totalfreedommod/config/ConfigEntry.java b/src/main/java/me/totalfreedom/totalfreedommod/config/ConfigEntry.java index e15bc1ba..448f1705 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/config/ConfigEntry.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/config/ConfigEntry.java @@ -31,6 +31,8 @@ public enum ConfigEntry ALLOW_JUKEBOXES(Boolean.class, "allow.jukeboxes"), ALLOW_SPAWNERS(Boolean.class, "allow.spawners"), ALLOW_BEEHIVES(Boolean.class, "allow.beehives"), + AUTO_TP(Boolean.class, "allow.auto_tp"), + AUTO_CLEAR(Boolean.class, "allow.auto_clear"), // BLOCKED_CHATCODES(String.class, "blocked_chatcodes"), // diff --git a/src/main/java/me/totalfreedom/totalfreedommod/discord/Discord.java b/src/main/java/me/totalfreedom/totalfreedommod/discord/Discord.java index 837378a6..234c5976 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/discord/Discord.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/discord/Discord.java @@ -184,7 +184,7 @@ public class Discord extends FreedomService 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(); admin.setBackupCodes(encryptedCodes); - plugin.al.save(); + plugin.al.save(admin); plugin.al.updateTables(); file.delete(); return true; diff --git a/src/main/java/me/totalfreedom/totalfreedommod/discord/PrivateMessageListener.java b/src/main/java/me/totalfreedom/totalfreedommod/discord/PrivateMessageListener.java index efca196a..16199ed3 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/discord/PrivateMessageListener.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/discord/PrivateMessageListener.java @@ -23,7 +23,7 @@ public class PrivateMessageListener extends ListenerAdapter Admin admin = Discord.ADMIN_LINK_CODES.get(code); name = admin.getName(); admin.setDiscordID(event.getMessage().getAuthor().getId()); - TotalFreedomMod.plugin().al.save(); + TotalFreedomMod.plugin().al.save(admin); TotalFreedomMod.plugin().al.updateTables(); Discord.ADMIN_LINK_CODES.remove(code); Discord.syncRoles(admin); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/httpd/HTTPDaemon.java b/src/main/java/me/totalfreedom/totalfreedommod/httpd/HTTPDaemon.java index 0b27e205..867b0a96 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/httpd/HTTPDaemon.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/httpd/HTTPDaemon.java @@ -24,7 +24,6 @@ import me.totalfreedom.totalfreedommod.httpd.module.Module_permbans; import me.totalfreedom.totalfreedommod.httpd.module.Module_players; import me.totalfreedom.totalfreedommod.httpd.module.Module_punishments; import me.totalfreedom.totalfreedommod.httpd.module.Module_schematic; -import me.totalfreedom.totalfreedommod.httpd.module.Module_vpnbans; import me.totalfreedom.totalfreedommod.util.FLog; import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang.StringUtils; @@ -70,7 +69,6 @@ public class HTTPDaemon extends FreedomService module("players", Module_players.class, false); module("punishments", Module_punishments.class, true); module("schematic", Module_schematic.class, true); - module("vpnbans", Module_vpnbans.class, true); try { diff --git a/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_admins.java b/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_admins.java index 52da8ec6..405617c5 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_admins.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_admins.java @@ -17,7 +17,10 @@ public class Module_admins extends HTTPDModule @Override public NanoHTTPD.Response getResponse() { - File adminFile = new File(plugin.getDataFolder(), Admin.CONFIG_FILENAME); + + return new NanoHTTPD.Response(NanoHTTPD.Response.Status.NOT_FOUND, NanoHTTPD.MIME_PLAINTEXT, + "Error 404: Not Found - i have to re-work this"); + /*File adminFile = new File(plugin.getDataFolder(), Admin.CONFIG_FILENAME); if (adminFile.exists()) { final String remoteAddress = socket.getInetAddress().getHostAddress(); @@ -36,7 +39,7 @@ public class Module_admins extends HTTPDModule { return new NanoHTTPD.Response(NanoHTTPD.Response.Status.NOT_FOUND, NanoHTTPD.MIME_PLAINTEXT, "Error 404: Not Found - The requested resource was not found on this server."); - } + }*/ } private boolean isAuthorized(String remoteAddress) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_bans.java b/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_bans.java index ef512698..70850c26 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_bans.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_bans.java @@ -18,7 +18,9 @@ public class Module_bans extends HTTPDModule @Override public NanoHTTPD.Response getResponse() { - File banFile = new File(plugin.getDataFolder(), BanManager.CONFIG_FILENAME); + return new NanoHTTPD.Response(NanoHTTPD.Response.Status.NOT_FOUND, NanoHTTPD.MIME_PLAINTEXT, + "Error 404: Not Found - i have to re-work this"); + /*File banFile = new File(plugin.getDataFolder(), BanManager.CONFIG_FILENAME); if (banFile.exists()) { final String remoteAddress = socket.getInetAddress().getHostAddress(); @@ -37,7 +39,7 @@ public class Module_bans extends HTTPDModule { return new NanoHTTPD.Response(NanoHTTPD.Response.Status.NOT_FOUND, NanoHTTPD.MIME_PLAINTEXT, "Error 404: Not Found - The requested resource was not found on this server."); - } + }*/ } private boolean isAuthorized(String remoteAddress) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_schematic.java b/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_schematic.java index a7dcca64..b7379cda 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_schematic.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_schematic.java @@ -21,6 +21,7 @@ import me.totalfreedom.totalfreedommod.httpd.HTTPDaemon; import me.totalfreedom.totalfreedommod.httpd.NanoHTTPD; import me.totalfreedom.totalfreedommod.httpd.NanoHTTPD.Method; import me.totalfreedom.totalfreedommod.httpd.NanoHTTPD.Response; +import me.totalfreedom.totalfreedommod.masterbuilder.MasterBuilder; import me.totalfreedom.totalfreedommod.util.FLog; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringEscapeUtils; @@ -269,8 +270,9 @@ public class Module_schematic extends HTTPDModule private boolean isAuthorized(String remoteAddress) { - Admin entry = plugin.al.getEntryByIp(remoteAddress); - return entry != null && entry.isActive(); + Admin adminEntry = plugin.al.getEntryByIp(remoteAddress); + MasterBuilder masterBuilderEntry = plugin.mbl.getEntryByIp(remoteAddress); + return ((adminEntry != null && adminEntry.isActive()) || masterBuilderEntry != null); } private static class SchematicTransferException extends Exception diff --git a/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_vpnbans.java b/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_vpnbans.java deleted file mode 100644 index c5d0bd9b..00000000 --- a/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_vpnbans.java +++ /dev/null @@ -1,32 +0,0 @@ -package me.totalfreedom.totalfreedommod.httpd.module; - -import java.io.File; -import me.totalfreedom.totalfreedommod.TotalFreedomMod; -import me.totalfreedom.totalfreedommod.banning.VPNBanList; -import me.totalfreedom.totalfreedommod.httpd.HTTPDaemon; -import me.totalfreedom.totalfreedommod.httpd.NanoHTTPD; - -public class Module_vpnbans extends HTTPDModule -{ - - public Module_vpnbans(TotalFreedomMod plugin, NanoHTTPD.HTTPSession session) - { - super(plugin, session); - } - - @Override - public NanoHTTPD.Response getResponse() - { - File vpnbanFile = new File(plugin.getDataFolder(), VPNBanList.CONFIG_FILENAME); - - if (vpnbanFile.exists()) - { - return HTTPDaemon.serveFileBasic(new File(plugin.getDataFolder(), VPNBanList.CONFIG_FILENAME)); - } - else - { - return new NanoHTTPD.Response(NanoHTTPD.Response.Status.NOT_FOUND, NanoHTTPD.MIME_PLAINTEXT, - "Error 404: Not Found - The requested resource was not found on this server."); - } - } -} diff --git a/src/main/java/me/totalfreedom/totalfreedommod/rank/Displayable.java b/src/main/java/me/totalfreedom/totalfreedommod/rank/Displayable.java index a3e953a0..90b9063e 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/rank/Displayable.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/rank/Displayable.java @@ -19,4 +19,6 @@ public interface Displayable public String getColoredLoginMessage(); + public boolean hasTeam(); + } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/rank/Rank.java b/src/main/java/me/totalfreedom/totalfreedommod/rank/Rank.java index ccd82268..928577c4 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/rank/Rank.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/rank/Rank.java @@ -6,14 +6,14 @@ import org.bukkit.ChatColor; public enum Rank implements Displayable { - IMPOSTOR("an", "Impostor", Type.PLAYER, "Imp", ChatColor.YELLOW), - NON_OP("a", "Non-Op", Type.PLAYER, "", ChatColor.WHITE), - OP("an", "Op", Type.PLAYER, "OP", ChatColor.GREEN), - SUPER_ADMIN("a", "Super Admin", Type.ADMIN, "SA", ChatColor.AQUA), - TELNET_ADMIN("a", "Telnet Admin", Type.ADMIN, "STA", ChatColor.DARK_GREEN), - SENIOR_ADMIN("a", "Senior Admin", Type.ADMIN, "SrA", ChatColor.GOLD), - TELNET_CONSOLE("the", "Console", Type.ADMIN_CONSOLE, "Console", ChatColor.DARK_PURPLE), - SENIOR_CONSOLE("the", "Console", Type.ADMIN_CONSOLE, "Console", ChatColor.DARK_PURPLE); + IMPOSTOR("an", "Impostor", Type.PLAYER, "Imp", ChatColor.YELLOW, false), + NON_OP("a", "Non-Op", Type.PLAYER, "", ChatColor.WHITE, false), + OP("an", "Operator", Type.PLAYER, "OP", ChatColor.GREEN, false), + SUPER_ADMIN("a", "Super Admin", Type.ADMIN, "SA", ChatColor.AQUA, true), + TELNET_ADMIN("a", "Telnet Admin", Type.ADMIN, "STA", ChatColor.DARK_GREEN, true), + SENIOR_ADMIN("a", "Senior Admin", Type.ADMIN, "SrA", ChatColor.GOLD, true), + TELNET_CONSOLE("the", "Console", Type.ADMIN_CONSOLE, "Console", ChatColor.DARK_PURPLE, false), + SENIOR_CONSOLE("the", "Console", Type.ADMIN_CONSOLE, "Console", ChatColor.DARK_PURPLE, false); @Getter private final Type type; @Getter @@ -27,8 +27,10 @@ public enum Rank implements Displayable private final String coloredTag; @Getter private final ChatColor color; + @Getter + private final boolean hasTeam; - private Rank(String determiner, String name, Type type, String abbr, ChatColor color) + private Rank(String determiner, String name, Type type, String abbr, ChatColor color, Boolean hasTeam) { this.type = type; this.name = name; @@ -37,6 +39,7 @@ public enum Rank implements Displayable this.tag = abbr.isEmpty() ? "" : "[" + abbr + "]"; this.coloredTag = abbr.isEmpty() ? "" : ChatColor.DARK_GRAY + "[" + color + abbr + ChatColor.DARK_GRAY + "]" + color; this.color = color; + this.hasTeam = hasTeam; } @Override @@ -51,6 +54,12 @@ public enum Rank implements Displayable return determiner + " " + color + ChatColor.ITALIC + name; } + @Override + public boolean hasTeam() + { + return hasTeam; + } + @Override public String getAbbr() { diff --git a/src/main/java/me/totalfreedom/totalfreedommod/rank/RankManager.java b/src/main/java/me/totalfreedom/totalfreedommod/rank/RankManager.java index dd383114..fd9941bc 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/rank/RankManager.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/rank/RankManager.java @@ -6,6 +6,7 @@ import me.totalfreedom.totalfreedommod.admin.Admin; import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.playerverification.VPlayer; +import me.totalfreedom.totalfreedommod.util.FLog; import me.totalfreedom.totalfreedommod.util.FUtil; import net.pravian.aero.util.ChatUtils; import org.apache.commons.lang.StringUtils; @@ -16,6 +17,8 @@ import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.scoreboard.Scoreboard; +import org.bukkit.scoreboard.Team; public class RankManager extends FreedomService { @@ -175,6 +178,7 @@ public class RankManager extends FreedomService fPlayer.setTag(null); player.setPlayerListName(null); } + updatePlayerTeam(player); plugin.pem.setPermissions(player); } @@ -241,25 +245,8 @@ public class RankManager extends FreedomService final Displayable display = getDisplay(player); FUtil.bcastMsg(craftLoginMessage(player, null)); - plugin.pl.getPlayer(player).setTag(display.getColoredTag()); - if (isAdmin) - { - Admin admin = plugin.al.getAdmin(player); - if (admin.getTag() != null) - { - plugin.pl.getPlayer(player).setTag(FUtil.colorize(admin.getTag())); - } - } - - String displayName = display.getColor() + player.getName(); - try - { - player.setPlayerListName(StringUtils.substring(displayName, 0, 16)); - } - catch (IllegalArgumentException ex) - { - } + updateDisplay(player); } if (!plugin.pv.isPlayerImpostor(player) && target.getEnabled()) @@ -292,4 +279,28 @@ public class RankManager extends FreedomService } return loginMessage; } + + public void updatePlayerTeam(Player player) + { + FLog.info("Updating team data..."); + Displayable display = getDisplay(player); + Scoreboard scoreboard = server.getScoreboardManager().getMainScoreboard(); + Team team = scoreboard.getPlayerTeam(player); + if (team != null && !display.hasTeam()) + { + FLog.info("Removing from team"); + team.removePlayer(player); + return; + } + team = scoreboard.getTeam(display.toString()); + if (team == null) + { + FLog.info("Creating team..."); + team = scoreboard.registerNewTeam(display.toString()); + FLog.info("Created team " + team.getName()); + team.setColor(display.getColor()); + } + team.addPlayer(player); + FLog.info("Added player to team"); + } } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/rank/Title.java b/src/main/java/me/totalfreedom/totalfreedommod/rank/Title.java index b5fd00f4..85df02cf 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/rank/Title.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/rank/Title.java @@ -6,12 +6,12 @@ import org.bukkit.ChatColor; public enum Title implements Displayable { - MASTER_BUILDER("a", "Master Builder", ChatColor.DARK_AQUA, "MB"), - VERIFIED_ADMIN("a", "Verified Admin", ChatColor.LIGHT_PURPLE, "VA"), - ASSISTANT_EXECUTIVE("an", "Assistant Executive", ChatColor.RED, "Asst Exec"), - EXECUTIVE("an", "Executive", ChatColor.RED, "Exec"), - DEVELOPER("a", "Developer", ChatColor.DARK_PURPLE, "Dev"), - OWNER("the", "Owner", ChatColor.DARK_RED, "Owner"); + MASTER_BUILDER("a", "Master Builder", ChatColor.DARK_AQUA, "MB", false), + VERIFIED_ADMIN("a", "Verified Admin", ChatColor.LIGHT_PURPLE, "VA", false), + ASSISTANT_EXECUTIVE("an", "Assistant Executive", ChatColor.RED, "Asst Exec", false), + EXECUTIVE("an", "Executive", ChatColor.RED, "Exec", true), + DEVELOPER("a", "Developer", ChatColor.DARK_PURPLE, "Dev", true), + OWNER("the", "Owner", ChatColor.DARK_RED, "Owner", true); private final String determiner; @Getter @@ -24,8 +24,10 @@ public enum Title implements Displayable private final String coloredTag; @Getter private final ChatColor color; + @Getter + private final boolean hasTeam; - private Title(String determiner, String name, ChatColor color, String tag) + private Title(String determiner, String name, ChatColor color, String tag, Boolean hasTeam) { this.determiner = determiner; this.name = name; @@ -33,6 +35,7 @@ public enum Title implements Displayable this.abbr = tag; this.tag = "[" + tag + "]"; this.color = color; + this.hasTeam = hasTeam; } @Override @@ -41,6 +44,12 @@ public enum Title implements Displayable return color + name; } + @Override + public boolean hasTeam() + { + return hasTeam; + } + @Override public String getColoredLoginMessage() { diff --git a/src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java b/src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java new file mode 100644 index 00000000..040ca591 --- /dev/null +++ b/src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java @@ -0,0 +1,301 @@ +package me.totalfreedom.totalfreedommod.sql; + +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.text.MessageFormat; +import me.totalfreedom.totalfreedommod.FreedomService; +import me.totalfreedom.totalfreedommod.TotalFreedomMod; +import me.totalfreedom.totalfreedommod.admin.Admin; +import me.totalfreedom.totalfreedommod.banning.Ban; +import me.totalfreedom.totalfreedommod.util.FLog; +import me.totalfreedom.totalfreedommod.util.FUtil; + +public class SQLite extends FreedomService +{ + private final String FILE_NAME = "database.db"; + + private Connection connection; + + public SQLite(TotalFreedomMod plugin) + { + super(plugin); + } + + @Override + protected void onStart() + { + connect(); + checkTables(); + } + + @Override + protected void onStop() + { + disconnect(); + } + + public void connect() + { + + try + { + connection = DriverManager.getConnection("jdbc:sqlite:" + plugin.getDataFolder() + "/" + FILE_NAME); + FLog.info("Successfully connected to the database."); + } + catch (SQLException e) + { + FLog.severe("Failed to connect to the database: " + e.getMessage()); + FLog.info("Successfully disconnected from the database."); + } + } + + public void disconnect() + { + try + { + if (connection != null) + { + connection.close(); + } + } + catch (SQLException e) + { + FLog.severe("Failed to disconnect from the database: " + e.getMessage()); + } + } + + public void checkTables() + { + try + { + DatabaseMetaData meta = connection.getMetaData(); + if (!tableExists(meta, "bans")) + { + try + { + connection.createStatement().execute("CREATE TABLE `bans` ( `name` VARCHAR NOT NULL, `ips` VARCHAR, `by` VARCHAR NOT NULL, `at` LONG NOT NULL, `expires` LONG, `reason` VARCHAR );"); + } + catch (SQLException e) + { + FLog.severe("Failed to create the bans table: " + e.getMessage()); + } + } + + if (!tableExists(meta, "admins")) + { + 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, `login_message` VARCHAR, `tag` VARCHAR, `discord_id` VARCHAR, `backup_codes` VARCHAR, `command_spy` BOOLEAN NOT NULL, `potion_spy` BOOLEAN NOT NULL, `ac_format` VARCHAR, `old_tags` BOOLEAN NOT NULL, `log_stick` BOOLEAN NOT NULL, `discord_chat` BOOLEAN NOT NULL);"); + } + catch (SQLException e) + { + FLog.severe("Failed to create the admins table: " + e.getMessage()); + } + } + } + catch (SQLException e) + { + FLog.severe("Failed to check tables on database: " + e.getMessage()); + } + } + + public void truncate(String table) + { + try + { + connection.createStatement().execute("TRUNCATE TABLE " + table); + } + catch (SQLException e) + { + FLog.severe("Failed to truncate " + table + ": " + e.getMessage()); + } + } + + public ResultSet getBanList() throws SQLException + { + return connection.createStatement().executeQuery("SELECT * FROM bans"); + } + + + public ResultSet getAdminList() throws SQLException + { + return connection.createStatement().executeQuery("SELECT * FROM admins"); + } + + public void setAdminValue(Admin admin, String key, Object value) + { + try + { + Object[] data = {key, admin.getName()}; + PreparedStatement statement = connection.prepareStatement(MessageFormat.format("UPDATE admins SET {0}=? WHERE username=''{1}''", data)); + statement = setUnknownType(statement, 1, value); + statement.executeUpdate(); + + } + catch (SQLException e) + { + FLog.severe("Failed to update value: " + e.getMessage()); + } + } + + 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 value: " + e.getMessage()); + } + } + + public PreparedStatement setUnknownType(PreparedStatement statement, int index, Object value) throws SQLException + { + if (value.getClass().equals(String.class)) + { + String v = (String)value; + statement.setString(index, v); + } + else if (value.getClass().equals(Integer.class)) + { + int v = (int)value; + statement.setInt(index, v); + } + else if (value.getClass().equals(Boolean.class)) + { + boolean v = (boolean)value; + statement.setBoolean(index, v); + } + else if (value.getClass().equals(Long.class)) + { + long v = (long)value; + statement.setLong(index, v); + } + return statement; + } + + public Object getValue(ResultSet resultSet, String key, Object value) throws SQLException + { + Object result = null; + if (value instanceof String) + { + result = resultSet.getString(key); + } + else if (value instanceof Integer) + { + result = resultSet.getInt(key); + } + else if (value instanceof Boolean) + { + result = resultSet.getBoolean(key); + } + else if (value instanceof Long) + { + result = resultSet.getLong(key); + } + return result; + } + + public void addAdmin(Admin admin) + { + try + { + PreparedStatement statement = connection.prepareStatement("INSERT INTO admins VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + statement.setString(1, admin.getName()); + statement.setString(2, FUtil.listToString(admin.getIps())); + statement.setString(3, admin.getRank().toString()); + statement.setBoolean(4, admin.isActive()); + statement.setLong(5, admin.getLastLogin().getTime()); + statement.setString(6, admin.getLoginMessage()); + statement.setString(7, admin.getTag()); + statement.setString(8, admin.getDiscordID()); + statement.setString(9, FUtil.listToString(admin.getBackupCodes())); + statement.setBoolean(10, admin.getCommandSpy()); + statement.setBoolean(11, admin.getPotionSpy()); + statement.setString(12, admin.getAcFormat()); + statement.setBoolean(13, admin.getOldTags()); + statement.setBoolean(14, admin.getLogStick()); + statement.executeUpdate(); + } + catch (SQLException e) + { + FLog.severe("Failed to add admin: " + e.getMessage()); + } + } + + public ResultSet getAdminByName(String name) + { + try + { + ResultSet resultSet = connection.createStatement().executeQuery(MessageFormat.format("SELECT * FROM admins WHERE username=''{0}''", name)); + if (resultSet.next()) + { + return resultSet; + } + } + catch (SQLException e) + { + FLog.severe("Failed to get admin by name: " + e.getMessage()); + } + + return null; + } + + public void removeAdmin(Admin admin) + { + Object[] data = {admin.getName(), FUtil.listToString(admin.getBackupCodes())}; + try + { + connection.createStatement().executeUpdate(MessageFormat.format("DELETE FROM bans where name=''{0}'' and ips=''{1}''", data)); + } + catch (SQLException e) + { + FLog.severe("Failed to remove admin: " + e.getMessage()); + } + } + + public void addBan(Ban ban) + { + try + { + PreparedStatement statement = connection.prepareStatement("INSERT INTO bans VALUES (?, ?, ?, ?, ?, ?)"); + statement.setString(1, ban.getUsername()); + statement.setString(2, FUtil.listToString(ban.getIps())); + statement.setString(3, ban.getBy()); + statement.setLong(4, ban.getAt().getTime()); + statement.setLong(5, ban.getExpiryUnix()); + statement.setString(6, ban.getReason()); + statement.executeUpdate(); + } + catch (SQLException e) + { + FLog.severe("Failed to add ban: " + e.getMessage()); + } + } + + public void removeBan(Ban ban) + { + Object[] data = {ban.getUsername(), String.join(", ", ban.getIps())}; + try + { + connection.createStatement().executeUpdate(MessageFormat.format("DELETE FROM bans where name=''{0}'' and ips=''{1}''", data)); + } + catch (SQLException e) + { + FLog.severe("Failed to remove ban: " + e.getMessage()); + } + } + + public boolean tableExists(DatabaseMetaData meta, String name) throws SQLException + { + return meta.getTables(null, null, name, null).next(); + } +} \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java b/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java index c4eae300..5ae1b612 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java @@ -52,7 +52,7 @@ public class FUtil // public static final String SAVED_FLAGS_FILENAME = "savedflags.dat"; // See https://github.com/TotalFreedom/License - None of the listed names may be removed. - public static final List DEVELOPERS = Arrays.asList("Madgeek1450", "Prozza", "WickedGamingUK", "Wild1145", "Demonic_Mario", "OxLemonxO"); + public static final List DEVELOPERS = Arrays.asList("Madgeek1450", "Prozza", "WickedGamingUK", "Wild1145", "Demonic_Mario"); public static String DATE_STORAGE_FORMAT = "EEE, d MMM yyyy HH:mm:ss Z"; public static final Map CHAT_COLOR_NAMES = new HashMap<>(); public static final List CHAT_COLOR_POOL = Arrays.asList( @@ -156,6 +156,25 @@ public class FUtil return names; } + public static String listToString(List list) + { + if (list.size() == 0) + { + return null; + } + + return String.join(", ", list); + } + + public static List stringToList(String string) + { + if (string == null) + { + return new ArrayList<>(); + } + + return Arrays.asList(string.split(", ")); + } public static List getAllMaterialNames() { List names = new ArrayList<>(); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/world/HubWorld.java b/src/main/java/me/totalfreedom/totalfreedommod/world/HubWorld.java new file mode 100644 index 00000000..5cbafddc --- /dev/null +++ b/src/main/java/me/totalfreedom/totalfreedommod/world/HubWorld.java @@ -0,0 +1,99 @@ +package me.totalfreedom.totalfreedommod.world; + +import me.totalfreedom.totalfreedommod.config.ConfigEntry; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.World; +import org.bukkit.WorldCreator; +import org.bukkit.WorldType; +import org.bukkit.block.Block; +import org.bukkit.block.BlockFace; +import org.bukkit.entity.Player; + +public final class HubWorld extends CustomWorld +{ + + private static final String GENERATION_PARAMETERS = ConfigEntry.FLATLANDS_GENERATE_PARAMS.getString(); + // + private WorldWeather weather = WorldWeather.OFF; + private WorldTime time = WorldTime.INHERIT; + + public HubWorld() + { + super("hubworld"); + } + + @Override + public void sendToWorld(Player player) + { + super.sendToWorld(player); + } + + @Override + protected World generateWorld() + { + final WorldCreator worldCreator = new WorldCreator(getName()); + worldCreator.generateStructures(false); + worldCreator.type(WorldType.NORMAL); + worldCreator.environment(World.Environment.NORMAL); + worldCreator.generator(new CleanroomChunkGenerator(GENERATION_PARAMETERS)); + + final World world = server.createWorld(worldCreator); + + world.setSpawnFlags(false, false); + world.setSpawnLocation(0, 50, 0); + + final Block welcomeSignBlock = world.getBlockAt(0, 50, 0); + welcomeSignBlock.setType(Material.OAK_SIGN); + org.bukkit.block.Sign welcomeSign = (org.bukkit.block.Sign)welcomeSignBlock.getState(); + + org.bukkit.material.Sign signData = (org.bukkit.material.Sign)welcomeSign.getData(); + signData.setFacingDirection(BlockFace.NORTH); + + welcomeSign.setLine(0, ChatColor.GREEN + "Hub World"); + welcomeSign.setLine(1, ChatColor.DARK_GRAY + "---"); + welcomeSign.setLine(2, ChatColor.YELLOW + "Spawn Point"); + welcomeSign.setLine(3, ChatColor.DARK_GRAY + "---"); + welcomeSign.update(); + + plugin.gr.commitGameRules(); + return world; + } + + public WorldWeather getWeatherMode() + { + return weather; + } + + public void setWeatherMode(final WorldWeather weatherMode) + { + this.weather = weatherMode; + + try + { + weatherMode.setWorldToWeather(getWorld()); + } + catch (Exception ex) + { + } + } + + public WorldTime getTimeOfDay() + { + return time; + } + + public void setTimeOfDay(final WorldTime timeOfDay) + { + this.time = timeOfDay; + + try + { + timeOfDay.setWorldToTime(getWorld()); + } + catch (Exception ex) + { + } + } + +} diff --git a/src/main/java/me/totalfreedom/totalfreedommod/world/WorldRestrictions.java b/src/main/java/me/totalfreedom/totalfreedommod/world/WorldRestrictions.java index feeb9bc4..28eb6728 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/world/WorldRestrictions.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/world/WorldRestrictions.java @@ -4,6 +4,7 @@ import com.sk89q.worldguard.protection.flags.Flag; import com.sk89q.worldguard.protection.flags.Flags; import com.sk89q.worldguard.protection.flags.StateFlag; import com.sk89q.worldguard.protection.managers.RegionManager; +import com.sk89q.worldguard.protection.regions.GlobalProtectedRegion; import com.sk89q.worldguard.protection.regions.ProtectedRegion; import java.util.Arrays; import java.util.HashMap; @@ -162,7 +163,7 @@ public class WorldRestrictions extends FreedomService RegionManager regionManager = plugin.wgb.getRegionManager(world); - ProtectedRegion region = regionManager.getRegion("__global__"); + GlobalProtectedRegion region = new GlobalProtectedRegion("__global__"); region.setFlags(flags); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 7954c1a1..3320e37e 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -179,6 +179,8 @@ allow: jukeboxes: false spawners: false beehives: false + auto_tp: false + auto_clear: false # Blocked commands: # @@ -221,7 +223,6 @@ blocked_commands: - 'n:b:/ban-ip:_' - 'n:b:/pardon-ip:_' - 'n:b:/toggledownfall:_' - - 'n:b:/effect:Please use /potion to set effects.' - 'n:b:/enderchest:_' - 'n:b:/spreadplayers:_' - 'n:b:/execute:_' @@ -233,9 +234,6 @@ blocked_commands: - 'n:b:/skinrestorer:_' - 'n:b:/packet:_' - 'n:b:/thaw:_' - - 'n:b:/pp largeexplode:You may not use this particle! Please use another.' - - 'n:b:/pp hugeexplosion:You may not use this particle! Please use another.' - - 'n:b:/pp barrier:You may not use this particle! Please use another.' - 'n:b:/setjail:_' - 'n:b:/function:_' - 'n:b:/data:_' diff --git a/src/main/resources/permissions.yml b/src/main/resources/permissions.yml index f1660792..52e839e9 100644 --- a/src/main/resources/permissions.yml +++ b/src/main/resources/permissions.yml @@ -68,6 +68,8 @@ master_builders: - "worldedit.green" - "worldedit.extinguish" - "worldedit.thaw" + - "worldguard.region.bypass.hubworld" + - "worldguard.region.bypass.masterbuilderworld" # Super Admin permission nodes super_admins: diff --git a/src/main/resources/vpnbans.yml b/src/main/resources/vpnbans.yml deleted file mode 100644 index a1c40cb1..00000000 --- a/src/main/resources/vpnbans.yml +++ /dev/null @@ -1,9 +0,0 @@ -# -# TotalFreedomMod 5.5 VPN Bans -# - -badnetwork1: - - 123.123.123.123 - - 321.321.321.321 -badnetwork2: - - 111.111.111.111