diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_loginmessage.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_loginmessage.java new file mode 100644 index 00000000..c3e4987b --- /dev/null +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_loginmessage.java @@ -0,0 +1,52 @@ +package me.totalfreedom.totalfreedommod.command; + +import me.totalfreedom.totalfreedommod.player.PlayerData; +import me.totalfreedom.totalfreedommod.rank.Rank; +import me.totalfreedom.totalfreedommod.shop.ShopItem; +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.OP, source = SourceType.ONLY_IN_GAME) +@CommandParameters(description = "Change your login message", usage = "/ [message]") +public class Command_loginmessage extends FreedomCommand +{ + + @Override + public boolean run(final CommandSender sender, final Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) + { + if (!plugin.pl.getData(playerSender).hasItem(ShopItem.LOGIN_MESSAGES) && !isStaff(playerSender)) + { + msg("You did not purchase the ability to use login messages! Purchase the ability from the shop.", ChatColor.RED); + return true; + } + + if (args.length == 0) + { + playerSender.openInventory(plugin.sh.generateLoginMessageGUI(playerSender)); + return true; + } + + checkRank(Rank.ADMIN); + + String message = StringUtils.join(args, " "); + if (!message.contains("%rank%") && !message.contains("%coloredrank%")) + { + msg("Your login message must contain your rank. Use either %rank% or %coloredrank% to specify where you want the rank", ChatColor.RED); + return true; + } + int length = message.replace("%name%", "").replace("%rank%", "").replace("%coloredrank%", "").replace("%det%", "").length(); + if (length > 100) + { + msg("Your login message cannot be more than 100 characters (excluding your rank and your name)", ChatColor.RED); + return true; + } + PlayerData data = getData(playerSender); + data.setLoginMessage(message); + plugin.pl.save(data); + msg("Your login message is now the following:\n" + plugin.rm.craftLoginMessage(playerSender, message), ChatColor.GREEN); + return true; + } +} diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_mystaff.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_myadmin.java similarity index 79% rename from src/main/java/me/totalfreedom/totalfreedommod/command/Command_mystaff.java rename to src/main/java/me/totalfreedom/totalfreedommod/command/Command_myadmin.java index 5beb27ed..2483494e 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_mystaff.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_myadmin.java @@ -17,7 +17,7 @@ import org.bukkit.entity.Player; @CommandPermissions(level = Rank.ADMIN, source = SourceType.ONLY_IN_GAME) @CommandParameters(description = "Manage your staff entry.", usage = "/ [-o ] | setlogin | clearlogin | setscformat | clearscformat> | oldtags | logstick | syncroles>") -public class Command_mystaff extends FreedomCommand +public class Command_myadmin extends FreedomCommand { @Override @@ -139,46 +139,6 @@ public class Command_mystaff extends FreedomCommand return true; } - case "setlogin": - { - checkRank(Rank.ADMIN); - if (args.length < 2) - { - return false; - } - - String message = StringUtils.join(args, " ", 1, args.length); - if (!message.contains("%rank%") && !message.contains("%coloredrank%")) - { - msg("Your login message must contain your rank. Use either %rank% or %coloredrank% to specify where you want the rank", ChatColor.RED); - return true; - } - int length = message.replace("%name%", "").replace("%rank%", "").replace("%coloredrank%", "").length(); - if (length > 100) - { - msg("Your login message cannot be more than 100 characters (excluding your rank and your name)", ChatColor.RED); - return true; - } - FUtil.staffAction(sender.getName(), "Setting personal login message" + (init == null ? "" : " for " + targetPlayer.getName()), false); - target.setLoginMessage(message); - String previewMessage = plugin.rm.craftLoginMessage(targetPlayer, message); - msg((init == null ? "Your" : targetPlayer.getName() + "'s") + " login message is now: "); - msg("> " + previewMessage); - plugin.sl.save(target); - plugin.sl.updateTables(); - return true; - } - - case "clearlogin": - { - checkRank(Rank.ADMIN); - FUtil.staffAction(sender.getName(), "Clearing personal login message" + (init == null ? "" : " for " + targetPlayer.getName()), false); - target.setLoginMessage(null); - plugin.sl.save(target); - plugin.sl.updateTables(); - return true; - } - case "setscformat": { String format = StringUtils.join(args, " ", 1, args.length); @@ -229,10 +189,6 @@ public class Command_mystaff extends FreedomCommand return true; } - case "genbackupcodes": - msg("Moved to /pv genbackupcodes", ChatColor.RED); - return true; - default: { return false; @@ -248,8 +204,8 @@ public class Command_mystaff extends FreedomCommand return Collections.emptyList(); } - List singleArguments = Arrays.asList("clearips", "setlogin", "setscformat"); - List doubleArguments = Arrays.asList("clearip", "clearlogin", "clearscformat", "oldtags", "syncroles"); + List singleArguments = Arrays.asList("clearips", "setscformat"); + List doubleArguments = Arrays.asList("clearip", "clearscformat", "syncroles"); if (args.length == 1) { List options = new ArrayList<>(); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/config/ConfigEntry.java b/src/main/java/me/totalfreedom/totalfreedommod/config/ConfigEntry.java index 872d5f62..929a693c 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/config/ConfigEntry.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/config/ConfigEntry.java @@ -99,11 +99,6 @@ public enum ConfigEntry PTERO_ADMIN_KEY(String.class, "ptero.admin_key"), PTERO_SERVER_KEY(String.class, "ptero.server_key"), // - DONATION_PROBOARDS_URL(String.class, "donation.proboards_url"), - DONATION_GROUP_ID(String.class, "donation.donator_group_id"), - DONATION_SESSION_ID(String.class, "donation.session_id"), - DONATION_CSRF_TOKEN(String.class, "donation.csrf_token"), - // SHOP_ENABLED(Boolean.class, "shop.enabled"), SHOP_TITLE(String.class, "shop.title"), SHOP_PREFIX(String.class, "shop.prefix"), @@ -113,12 +108,14 @@ public enum ConfigEntry SHOP_REACTIONS_TIME(Double.class, "shop.reactions.time"), SHOP_REACTIONS_COINS_PER_WIN(Integer.class, "shop.reactions.coins_per_win"), SHOP_REACTIONS_STRING_LENGTH(Integer.class, "shop.reactions.string_length"), + SHOP_LOGIN_MESSAGES(List.class, "shop.login_messages"), SHOP_PRICES_GRAPPLING_HOOK(Integer.class, "shop.prices.grappling_hook"), SHOP_PRICES_LIGHTNING_ROD(Integer.class, "shop.prices.lightning_rod"), SHOP_PRICES_FIRE_BALL(Integer.class, "shop.prices.fire_ball"), SHOP_PRICES_RIDEABLE_PEARL(Integer.class, "shop.prices.rideable_pearl"), SHOP_PRICES_STACKING_POTATO(Integer.class, "shop.prices.stacking_potato"), SHOP_PRICES_CLOWN_FISH(Integer.class, "shop.prices.clown_fish"), + SHOP_PRICES_LOGIN_MESSAGES(Integer.class, "shop.prices.login_messages"), // STAFFLIST_CLEAN_THESHOLD_HOURS(Integer.class, "stafflist.clean_threshold_hours"), STAFFLIST_CONSOLE_IS_ADMIN(Boolean.class, "stafflist.console_is_admin"), diff --git a/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_list.java b/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_list.java index 4ce26f86..c8cb29fb 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_list.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_list.java @@ -73,7 +73,7 @@ public class Module_list extends HTTPDModule operators.add(player.getName()); } - if (!hasSpecialTitle(player) && plugin.sl.isStaff(player)) + if (!hasSpecialTitle(player) && plugin.sl.isStaff(player) && !plugin.sl.isVanished(player.getName())) { StaffMember staffMember = plugin.sl.getAdmin(player); switch (staffMember.getRank()) @@ -142,7 +142,7 @@ public class Module_list extends HTTPDModule public boolean hasSpecialTitle(Player player) { - if (FUtil.DEVELOPERS.contains(player.getName()) || ConfigEntry.SERVER_EXECUTIVES.getList().contains(player.getName()) || ConfigEntry.SERVER_OWNERS.getList().contains(player.getName())) + if (FUtil.DEVELOPERS.contains(player.getUniqueId().toString()) || ConfigEntry.SERVER_EXECUTIVES.getList().contains(player.getName()) || ConfigEntry.SERVER_OWNERS.getList().contains(player.getName())) { return true; } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_players.java b/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_players.java index 8e09263d..89003d18 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_players.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/httpd/module/Module_players.java @@ -64,7 +64,7 @@ public class Module_players extends HTTPDModule masterbuilders.addAll(plugin.pl.getMasterBuilderNames()); // Developers - developers.addAll(FUtil.DEVELOPERS); + developers.addAll(FUtil.DEVELOPER_NAMES); // Executives executives.addAll(ConfigEntry.SERVER_EXECUTIVES.getList()); diff --git a/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerData.java b/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerData.java index 8bac6c98..789c9af9 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerData.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/player/PlayerData.java @@ -33,8 +33,6 @@ public class PlayerData private String discordID = null; private final List backupCodes = Lists.newArrayList(); @Setter - private boolean donator = false; - @Setter private Boolean masterBuilder = false; @Setter private Boolean verification = false; @@ -53,6 +51,9 @@ public class PlayerData @Getter @Setter private String redditUsername; + @Getter + @Setter + private String loginMessage; public PlayerData(ResultSet resultSet) { @@ -67,7 +68,6 @@ public class PlayerData discordID = resultSet.getString("discord_id"); backupCodes.clear(); backupCodes.addAll(FUtil.stringToList(resultSet.getString("backup_codes"))); - donator = resultSet.getBoolean("donator"); masterBuilder = resultSet.getBoolean("master_builder"); verification = resultSet.getBoolean("verification"); rideMode = resultSet.getString("ride_mode"); @@ -77,6 +77,7 @@ public class PlayerData totalVotes = resultSet.getInt("total_votes"); displayDiscord = resultSet.getBoolean("display_discord"); redditUsername = resultSet.getString("reddit_username"); + loginMessage = resultSet.getString("login_message"); } catch (SQLException e) { @@ -104,7 +105,6 @@ public class PlayerData output.append("Player: ").append(name).append("\n") .append("- IPs: ").append(StringUtils.join(ips, ", ")).append("\n") .append("- Discord ID: ").append(discordID).append("\n") - .append("- Donator: ").append(donator).append("\n") .append("- Master Builder: ").append(masterBuilder).append("\n") .append("- Has Verification: ").append(verification).append("\n") .append("- Coins: ").append(coins).append("\n") @@ -113,7 +113,8 @@ public class PlayerData .append("- Tag: ").append(FUtil.colorize(tag)).append(ChatColor.GRAY).append("\n") .append("- Ride Mode: ").append(rideMode).append("\n") .append("- Backup Codes: ").append(backupCodes.size()).append("/10").append("\n") - .append("- Reddit Username: ").append(redditUsername); + .append("- Reddit Username: ").append(redditUsername) + .append("- Login Message: ").append(loginMessage); return output.toString(); } @@ -128,6 +129,11 @@ public class PlayerData return Collections.unmodifiableList(ips); } + public boolean hasLoginMessage() + { + return loginMessage != null && !loginMessage.isEmpty(); + } + public boolean addIp(String ip) { return !ips.contains(ip) && ips.add(ip); @@ -221,11 +227,6 @@ public class PlayerData return verification; } - public boolean isDonator() - { - return donator; - } - public boolean isMasterBuilder() { return masterBuilder; @@ -241,7 +242,6 @@ public class PlayerData put("tag", tag); put("discord_id", discordID); put("backup_codes", FUtil.listToString(backupCodes)); - put("donator", donator); put("master_builder", masterBuilder); put("verification", verification); put("ride_mode", rideMode); @@ -250,6 +250,7 @@ public class PlayerData put("total_votes", totalVotes); put("display_discord", displayDiscord); put("reddit_username", redditUsername); + put("login_message", loginMessage); }}; return map; } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/rank/Displayable.java b/src/main/java/me/totalfreedom/totalfreedommod/rank/Displayable.java index 863e573f..db4ea54e 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/rank/Displayable.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/rank/Displayable.java @@ -5,6 +5,8 @@ import net.md_5.bungee.api.ChatColor; public interface Displayable { + public String getDeterminer(); + public String getName(); public String getTag(); @@ -21,7 +23,8 @@ public interface Displayable public String getColoredLoginMessage(); - public boolean hasTeam(); + public boolean hasDefaultLoginMessage(); + } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/rank/Rank.java b/src/main/java/me/totalfreedom/totalfreedommod/rank/Rank.java index abfd706e..cbedc2d4 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/rank/Rank.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/rank/Rank.java @@ -5,19 +5,20 @@ import net.md_5.bungee.api.ChatColor; public enum Rank implements Displayable { - IMPOSTOR("an", "Impostor", Type.PLAYER, "Imp", ChatColor.YELLOW, null, false), - NON_OP("a", "Non-Op", Type.PLAYER, "", ChatColor.WHITE, null, false), - OP("an", "Operator", Type.PLAYER, "OP", ChatColor.GREEN, null, false), - ADMIN("an", "Admin", Type.STAFF, "Admin", ChatColor.DARK_GREEN, org.bukkit.ChatColor.DARK_GREEN, true), - SENIOR_ADMIN("a", "Senior Admin", Type.STAFF, "SrA", ChatColor.GOLD, org.bukkit.ChatColor.GOLD, true), - ADMIN_CONSOLE("the", "Console", Type.STAFF_CONSOLE, "Console", ChatColor.DARK_PURPLE, null, false), - SENIOR_CONSOLE("the", "Console", Type.STAFF_CONSOLE, "Console", ChatColor.DARK_PURPLE, null, false); + IMPOSTOR("an", "Impostor", Type.PLAYER, "Imp", ChatColor.YELLOW, null, false, false), + NON_OP("a", "Non-Op", Type.PLAYER, "", ChatColor.WHITE, null, false, false), + OP("an", "Operator", Type.PLAYER, "OP", ChatColor.GREEN, null, false, false), + ADMIN("an", "Admin", Type.STAFF, "Admin", ChatColor.DARK_GREEN, org.bukkit.ChatColor.DARK_GREEN, true, true), + SENIOR_ADMIN("a", "Senior Admin", Type.STAFF, "SrA", ChatColor.GOLD, org.bukkit.ChatColor.GOLD, true, true), + ADMIN_CONSOLE("the", "Console", Type.STAFF_CONSOLE, "Console", ChatColor.DARK_PURPLE, null, false, false), + SENIOR_CONSOLE("the", "Console", Type.STAFF_CONSOLE, "Console", ChatColor.DARK_PURPLE, null, false, false); @Getter private final Type type; @Getter private final String name; @Getter private final String abbr; + @Getter private final String determiner; @Getter private final String tag; @@ -29,8 +30,10 @@ public enum Rank implements Displayable private final org.bukkit.ChatColor teamColor; @Getter private final boolean hasTeam; + @Getter + private final boolean hasDefaultLoginMessage; - Rank(String determiner, String name, Type type, String abbr, ChatColor color, org.bukkit.ChatColor teamColor, Boolean hasTeam) + Rank(String determiner, String name, Type type, String abbr, ChatColor color, org.bukkit.ChatColor teamColor, Boolean hasTeam, Boolean hasDefaultLoginMessage) { this.type = type; this.name = name; @@ -41,6 +44,7 @@ public enum Rank implements Displayable this.color = color; this.teamColor = teamColor; this.hasTeam = hasTeam; + this.hasDefaultLoginMessage = hasDefaultLoginMessage; } @Override @@ -61,6 +65,12 @@ public enum Rank implements Displayable return hasTeam; } + @Override + public boolean hasDefaultLoginMessage() + { + return hasDefaultLoginMessage; + } + @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 7d6bb30a..b099e187 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/rank/RankManager.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/rank/RankManager.java @@ -168,7 +168,7 @@ public class RankManager extends FreedomService FPlayer fPlayer = plugin.pl.getPlayer(player); PlayerData data = plugin.pl.getData(player); Displayable display = getDisplay(player); - if (plugin.sl.isStaff(player) || data.isMasterBuilder() || data.isDonator() || FUtil.isDeveloper(player)) + if (plugin.sl.isStaff(player) || data.isMasterBuilder() || FUtil.isDeveloper(player)) { String displayName = display.getColor() + player.getName(); player.setPlayerListName(displayName); @@ -237,7 +237,7 @@ public class RankManager extends FreedomService } // Broadcast login message - if (isStaff || FUtil.isDeveloper(player) || plugin.pl.getData(player).isMasterBuilder() || plugin.pl.getData(player).isDonator()) + if (isStaff || FUtil.isDeveloper(player) || plugin.pl.getData(player).isMasterBuilder() || plugin.pl.getData(player).hasLoginMessage()) { if (!plugin.sl.isVanished(player.getName())) { @@ -260,23 +260,32 @@ public class RankManager extends FreedomService public String craftLoginMessage(Player player, String message) { Displayable display = plugin.rm.getDisplay(player); - String loginMessage = ChatColor.AQUA + player.getName() + " is " + display.getColoredLoginMessage(); - if (plugin.sl.isStaff(player)) + PlayerData playerData = plugin.pl.getData(player); + if (message == null) { - StaffMember staffMember = plugin.sl.getAdmin(player); - if (staffMember.hasLoginMessage()) + if (playerData.hasLoginMessage()) { - if (message == null) + message = playerData.getLoginMessage(); + } + else + { + if (display.hasDefaultLoginMessage()) { - message = staffMember.getLoginMessage(); + message = "%name% is %det% %coloredrank%"; } - loginMessage = FUtil.colorize(ChatColor.AQUA + (message.contains("%name%") ? "" : player.getName() + " is ") - + FUtil.colorize(message).replace("%name%", player.getName()) - .replace("%rank%", display.getName()) - .replace("%coloredrank%", display.getColoredName())); } } - return loginMessage; + if (message != null) + { + String loginMessage = FUtil.colorize(ChatColor.AQUA + (message.contains("%name%") ? "" : player.getName() + " is ") + + FUtil.colorize(message).replace("%name%", player.getName()) + .replace("%rank%", display.getName()) + .replace("%coloredrank%", display.getColoredName()) + .replace("%det%", display.getDeterminer())); + return loginMessage; + } + + return null; } public void updatePlayerTeam(Player player) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/rank/Title.java b/src/main/java/me/totalfreedom/totalfreedommod/rank/Title.java index ff6fc3bf..6f67e7e3 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/rank/Title.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/rank/Title.java @@ -6,12 +6,13 @@ import net.md_5.bungee.api.ChatColor; public enum Title implements Displayable { - MASTER_BUILDER("a", "Master Builder", ChatColor.DARK_AQUA, org.bukkit.ChatColor.DARK_AQUA, "MB", true), - VERIFIED_STAFF("a", "Verified Staff", ChatColor.LIGHT_PURPLE, org.bukkit.ChatColor.LIGHT_PURPLE, "VS", false), - EXECUTIVE("an", "Executive", ChatColor.RED, org.bukkit.ChatColor.RED, "Exec", true), - DEVELOPER("a", "Developer", ChatColor.DARK_PURPLE, org.bukkit.ChatColor.DARK_PURPLE, "Dev", true), - OWNER("the", "Owner", ChatColor.of("#ff0000"), org.bukkit.ChatColor.DARK_RED, "Owner", true); + MASTER_BUILDER("a", "Master Builder", ChatColor.DARK_AQUA, org.bukkit.ChatColor.DARK_AQUA, "MB", true, true), + VERIFIED_STAFF("a", "Verified Staff Member", ChatColor.LIGHT_PURPLE, org.bukkit.ChatColor.LIGHT_PURPLE, "VS", false, true), + EXECUTIVE("an", "Executive", ChatColor.RED, org.bukkit.ChatColor.RED, "Exec", true, true), + DEVELOPER("a", "Developer", ChatColor.DARK_PURPLE, org.bukkit.ChatColor.DARK_PURPLE, "Dev", true, true), + OWNER("the", "Owner", ChatColor.of("#ff0000"), org.bukkit.ChatColor.DARK_RED, "Owner", true, true); + @Getter private final String determiner; @Getter private final String name; @@ -27,8 +28,9 @@ public enum Title implements Displayable private final org.bukkit.ChatColor teamColor; @Getter private final boolean hasTeam; + private final boolean hasDefaultLoginMessage; - Title(String determiner, String name, ChatColor color, org.bukkit.ChatColor teamColor, String tag, Boolean hasTeam) + Title(String determiner, String name, ChatColor color, org.bukkit.ChatColor teamColor, String tag, Boolean hasTeam, Boolean hasDefaultLoginMessage) { this.determiner = determiner; this.name = name; @@ -38,6 +40,7 @@ public enum Title implements Displayable this.color = color; this.teamColor = teamColor; this.hasTeam = hasTeam; + this.hasDefaultLoginMessage = hasDefaultLoginMessage; } @Override @@ -52,6 +55,12 @@ public enum Title implements Displayable return hasTeam; } + @Override + public boolean hasDefaultLoginMessage() + { + return hasDefaultLoginMessage; + } + @Override public String getColoredLoginMessage() { diff --git a/src/main/java/me/totalfreedom/totalfreedommod/shop/Shop.java b/src/main/java/me/totalfreedom/totalfreedommod/shop/Shop.java index aa0a73b2..2e92cd63 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/shop/Shop.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/shop/Shop.java @@ -35,6 +35,7 @@ public class Shop extends FreedomService public final String prefix = ChatColor.DARK_GRAY + "[" + ChatColor.YELLOW + "Reaction" + ChatColor.DARK_GRAY + "] "; public BukkitTask countdownTask; private BossBar countdownBar = null; + private final String LOGIN_MESSAGE_GUI_TITLE = ChatColor.DARK_GREEN + ChatColor.BOLD.toString() + "Login Messages"; @Override public void onStart() @@ -174,6 +175,27 @@ public class Shop extends FreedomService return gui; } + public Inventory generateLoginMessageGUI(Player player) + { + Inventory gui = server.createInventory(null, 36, LOGIN_MESSAGE_GUI_TITLE); + int slot = 0; + for (String loginMessage : ConfigEntry.SHOP_LOGIN_MESSAGES.getStringList()) + { + ItemStack icon = new ItemStack(Material.NAME_TAG); + ItemMeta meta = icon.getItemMeta(); + meta.setDisplayName(FUtil.colorize(plugin.rm.craftLoginMessage(player, loginMessage))); + icon.setItemMeta(meta); + gui.setItem(slot, icon); + slot++; + } + ItemStack clear = new ItemStack(Material.BARRIER); + ItemMeta meta = clear.getItemMeta(); + meta.setDisplayName(ChatColor.RED + "Clear login message"); + clear.setItemMeta(meta); + gui.setItem(35, clear); + return gui; + } + public boolean isRealItem(PlayerData data, ShopItem shopItem, PlayerInventory inventory, ItemStack realItem) { if (isRealItem(data, shopItem, inventory.getItemInMainHand(), realItem) || isRealItem(data, shopItem, inventory.getItemInOffHand(), realItem)) @@ -306,7 +328,7 @@ public class Shop extends FreedomService } @EventHandler(priority = EventPriority.HIGH) - public void onInventoryClick(InventoryClickEvent event) + public void onShopGUIClick(InventoryClickEvent event) { if (!(event.getWhoClicked() instanceof Player)) { @@ -350,6 +372,44 @@ public class Shop extends FreedomService } } + @EventHandler(priority = EventPriority.HIGH) + public void onLoginMessageGUIClick(InventoryClickEvent event) + { + if (!(event.getWhoClicked() instanceof Player)) + { + return; + } + + Inventory inventory = event.getInventory(); + if (inventory.getSize() != 36 || !event.getView().getTitle().equals(LOGIN_MESSAGE_GUI_TITLE)) + { + return; + } + event.setCancelled(true); + + int slot = event.getSlot(); + + Player player = (Player)event.getWhoClicked(); + PlayerData data = plugin.pl.getData(player); + + if (slot == 35) + { + data.setLoginMessage(null); + plugin.pl.save(data); + player.sendMessage(ChatColor.GREEN + "Removed your login message"); + } + else + { + String message = ConfigEntry.SHOP_LOGIN_MESSAGES.getStringList().get(slot); + data.setLoginMessage(message); + plugin.pl.save(data); + player.sendMessage(ChatColor.GREEN + "Your login message is now the following:\n" + plugin.rm.craftLoginMessage(player, message)); + } + + player.closeInventory(); + + } + public ShopItem getShopItem(int slot) { for (ShopItem shopItem : ShopItem.values()) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/shop/ShopItem.java b/src/main/java/me/totalfreedom/totalfreedommod/shop/ShopItem.java index 6eac77c6..f7aadccd 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/shop/ShopItem.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/shop/ShopItem.java @@ -12,17 +12,18 @@ public enum ShopItem FIRE_BALL("Fire Ball", Material.FIRE_CHARGE, 14, ConfigEntry.SHOP_PRICES_FIRE_BALL, ChatColor.RED, "fireBall", "/fireball"), RIDEABLE_PEARL("Rideable Ender Pearl", Material.ENDER_PEARL, 16, ConfigEntry.SHOP_PRICES_RIDEABLE_PEARL, ChatColor.DARK_PURPLE, "rideablePearl", "/rideablepearl"), STACKING_POTATO("Stacking Potato", Material.POTATO, 20, ConfigEntry.SHOP_PRICES_STACKING_POTATO, ChatColor.YELLOW, "stackingPotato", "/stackingpotato"), - CLOWN_FISH("Clown Fish", Material.TROPICAL_FISH, 24, ConfigEntry.SHOP_PRICES_CLOWN_FISH, ChatColor.GOLD, "clownFish", "/clownfish"); + CLOWN_FISH("Clown Fish", Material.TROPICAL_FISH, 22, ConfigEntry.SHOP_PRICES_CLOWN_FISH, ChatColor.GOLD, "clownFish", "/clownfish"), + LOGIN_MESSAGES("Login Messages", Material.NAME_TAG, 24, ConfigEntry.SHOP_PRICES_LOGIN_MESSAGES, ChatColor.DARK_GREEN, "loginMessages", "/loginmessage"); /* Shop GUI Layout: Dimensions: 9x4 = 36 - Key: g = Grappling Hook, l = Lightning Rod, f = Fire Ball, r = Rideable Ender Pearl, s = Stacking Potato, c = Clown Fish, $ = Coins} + Key: g = Grappling Hook, l = Lightning Rod, f = Fire Ball, r = Rideable Ender Pearl, s = Stacking Potato, c = Clown Fish, x = Login Messages $ = Coins} --------- -g-l-f-r- - --s---c-- + --s-c-x-- --------$ */ diff --git a/src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java b/src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java index 763e6eca..91b453b2 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/sql/SQLite.java @@ -82,7 +82,7 @@ public class SQLite extends FreedomService { try { - connection.createStatement().execute("CREATE TABLE `staff` (`username` VARCHAR NOT NULL, `ips` VARCHAR NOT NULL, `rank` VARCHAR NOT NULL, `active` BOOLEAN NOT NULL, `last_login` LONG NOT NULL, `login_message` VARCHAR, `command_spy` BOOLEAN NOT NULL, `potion_spy` BOOLEAN NOT NULL, `ac_format` VARCHAR, `ptero_id` VARCHAR);"); + connection.createStatement().execute("CREATE TABLE `staff` (`username` VARCHAR NOT NULL, `ips` VARCHAR NOT NULL, `rank` VARCHAR NOT NULL, `active` BOOLEAN NOT NULL, `last_login` LONG NOT NULL, `command_spy` BOOLEAN NOT NULL, `potion_spy` BOOLEAN NOT NULL, `ac_format` VARCHAR, `ptero_id` VARCHAR);"); } catch (SQLException e) { @@ -93,7 +93,7 @@ public class SQLite extends FreedomService { try { - connection.createStatement().execute("CREATE TABLE `players` (`username` VARCHAR NOT NULL, `ips` VARCHAR NOT NULL, `notes` VARCHAR, `tag` VARCHAR, `discord_id` VARCHAR, `backup_codes` VARCHAR, `donator` BOOLEAN NOT NULL, `master_builder` BOOLEAN NOT NULL,`verification` BOOLEAN NOT NULL, `ride_mode` VARCHAR NOT NULL, `coins` INT NOT NULL, `items` VARCHAR, `total_votes` INT NOT NULL, `display_discord` BOOLEAN NOT NULL, `reddit_username` VARCHAR NOT NULL);"); + connection.createStatement().execute("CREATE TABLE `players` (`username` VARCHAR NOT NULL, `ips` VARCHAR NOT NULL, `notes` VARCHAR, `tag` VARCHAR, `discord_id` VARCHAR, `backup_codes` VARCHAR, `donator` BOOLEAN NOT NULL, `master_builder` BOOLEAN NOT NULL,`verification` BOOLEAN NOT NULL, `ride_mode` VARCHAR NOT NULL, `coins` INT NOT NULL, `items` VARCHAR, `total_votes` INT NOT NULL, `display_discord` BOOLEAN NOT NULL, `reddit_username` VARCHAR NOT NULL, `login_message` VARCHAR);"); } catch (SQLException e) { @@ -141,7 +141,8 @@ public class SQLite extends FreedomService } catch (SQLException e) { - FLog.severe("Failed to update staff member value: " + e.getMessage()); + FLog.severe("Failed to update staff member value:"); + FLog.severe(e); } } @@ -252,7 +253,6 @@ public class SQLite extends FreedomService statement.setString(3, staffMember.getRank().toString()); statement.setBoolean(4, staffMember.isActive()); statement.setLong(5, staffMember.getLastLogin().getTime()); - statement.setString(6, staffMember.getLoginMessage()); statement.setBoolean(7, staffMember.getCommandSpy()); statement.setBoolean(8, staffMember.getPotionSpy()); statement.setString(9, staffMember.getAcFormat()); @@ -261,7 +261,8 @@ public class SQLite extends FreedomService } catch (SQLException e) { - FLog.severe("Failed to add staff member: " + e); + FLog.severe("Failed to add staff member:"); + FLog.severe(e); } } @@ -269,27 +270,28 @@ public class SQLite extends FreedomService { try { - PreparedStatement statement = connection.prepareStatement("INSERT INTO players VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + PreparedStatement statement = connection.prepareStatement("INSERT INTO players VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); statement.setString(1, player.getName()); statement.setString(2, FUtil.listToString(player.getIps())); statement.setString(3, FUtil.listToString(player.getNotes())); statement.setString(4, player.getTag()); statement.setString(5, player.getDiscordID()); statement.setString(6, FUtil.listToString(player.getBackupCodes())); - statement.setBoolean(7, player.isDonator()); - statement.setBoolean(8, player.isMasterBuilder()); - statement.setBoolean(9, player.hasVerification()); - statement.setString(10, player.getRideMode()); - statement.setInt(11, player.getCoins()); + statement.setBoolean(7, player.isMasterBuilder()); + statement.setBoolean(8, player.hasVerification()); + statement.setString(9, player.getRideMode()); + statement.setInt(10, player.getCoins()); statement.setString(12, FUtil.listToString(player.getItems())); statement.setInt(13, player.getTotalVotes()); statement.setBoolean(14, player.doesDisplayDiscord()); statement.setString(15, player.getRedditUsername()); + statement.setString(16, player.getLoginMessage()); statement.executeUpdate(); } catch (SQLException e) { - FLog.severe("Failed to add player: " + e); + FLog.severe("Failed to add player:"); + FLog.severe(e); } } @@ -305,7 +307,8 @@ public class SQLite extends FreedomService } catch (SQLException e) { - FLog.severe("Failed to get staff member by name: " + e); + FLog.severe("Failed to get staff member by name:"); + FLog.severe(e); } return null; @@ -323,7 +326,8 @@ public class SQLite extends FreedomService } catch (SQLException e) { - FLog.severe("Failed to get player by name: " + e); + FLog.severe("Failed to get player by name:"); + FLog.severe(e); } return null; @@ -337,7 +341,8 @@ public class SQLite extends FreedomService } catch (SQLException e) { - FLog.severe("Failed to get Master Builders: " + e); + FLog.severe("Failed to get Master Builders:"); + FLog.severe(e); } return null; @@ -355,7 +360,8 @@ public class SQLite extends FreedomService } catch (SQLException e) { - FLog.severe("Failed to get player by ip: " + e.getMessage()); + FLog.severe("Failed to get player by ip:"); + FLog.severe(e); } return null; @@ -369,7 +375,8 @@ public class SQLite extends FreedomService } catch (SQLException e) { - FLog.severe("Failed to remove staff member: " + e.getMessage()); + FLog.severe("Failed to remove staff member:"); + FLog.severe(e); } } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/staff/StaffMember.java b/src/main/java/me/totalfreedom/totalfreedommod/staff/StaffMember.java index d0dd9f9e..525f85c5 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/staff/StaffMember.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/staff/StaffMember.java @@ -35,9 +35,6 @@ public class StaffMember private Date lastLogin = new Date(); @Getter @Setter - private String loginMessage = null; - @Getter - @Setter private Boolean commandSpy = false; @Getter @Setter @@ -65,7 +62,6 @@ public class StaffMember this.ips.clear(); this.ips.addAll(FUtil.stringToList(resultSet.getString("ips"))); this.lastLogin = new Date(resultSet.getLong("last_login")); - this.loginMessage = resultSet.getString("login_message"); this.commandSpy = resultSet.getBoolean("command_spy"); this.potionSpy = resultSet.getBoolean("potion_spy"); this.acFormat = resultSet.getString("ac_format"); @@ -85,7 +81,6 @@ public class StaffMember output.append("Staff: ").append(name).append("\n") .append("- IPs: ").append(StringUtils.join(ips, ", ")).append("\n") .append("- Last Login: ").append(FUtil.dateToString(lastLogin)).append("\n") - .append("- Custom Login Message: ").append(loginMessage).append("\n") .append("- Rank: ").append(rank.getName()).append("\n") .append("- Is Active: ").append(active).append("\n") .append("- Potion Spy: ").append(potionSpy).append("\n") @@ -104,7 +99,6 @@ public class StaffMember put("rank", rank.toString()); put("ips", FUtil.listToString(ips)); put("last_login", lastLogin.getTime()); - put("login_message", loginMessage); put("command_spy", commandSpy); put("potion_spy", potionSpy); put("ac_format", acFormat); @@ -113,11 +107,6 @@ public class StaffMember return map; } - public boolean hasLoginMessage() - { - return loginMessage != null && !loginMessage.isEmpty(); - } - // Util IP methods public void addIp(String ip) { diff --git a/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java b/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java index fae626bd..931ee0fb 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java @@ -56,7 +56,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. Leaving this list here for anyone running TFM on a cracked server: - public static final List DEVELOPERS = Arrays.asList("Madgeek1450", "Prozza", "WickedGamingUK", "Wild1145", "aggelosQQ", "scripthead", "supernt", "Telesphoreo", "CoolJWB"); + public static final List DEVELOPERS = Arrays.asList("Madgeek1450", "Prozza", "WickedGamingUK", "Wild1145", "aggelosQQ", "scripthead", "Telesphoreo", "CoolJWB"); */ public static final List DEVELOPERS = Arrays.asList( "1156a81a-23fb-435e-9aff-fe9c2ea7e82d", // Madgeek1450 @@ -65,10 +65,10 @@ public class FUtil "604cbb51-842d-4b43-8b0a-d1d7c6cd2869", // Wild1145 "e67d77c4-fff9-4cea-94cc-9f1f1ab7806b", // aggelosQQ "0061326b-8b3d-44c8-830a-5f2d59f5dc1b", // scripthead - "53b1512e-3481-4702-9f4f-63cb9c8be6a1", // supernt "78408086-1991-4c33-a571-d8fa325465b2", // Telesphoreo "67ce0e28-3d6b-469c-ab71-304eec81b614" // CoolJWB ); + public static final List DEVELOPER_NAMES = Arrays.asList("Madgeek1450", "Prozza", "WickedGamingUK", "Wild1145", "aggelosQQ", "scripthead", "Telesphoreo", "CoolJWB"); 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( diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index bf6270f4..a633aa65 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -146,6 +146,11 @@ shop: # How long is the random string (in characters)? string_length: 10 + # Login messages. Use %name% for usernames, and %rank% for ranks/titles + login_messages: + - '&b%name% is a terrible %coloredrank%' + - '&bthat %name% dude is a shitty %coloredrank%' + # Item prices prices: grappling_hook: 100 @@ -154,6 +159,7 @@ shop: rideable_pearl: 700 stacking_potato: 300 clown_fish: 1500 + login_messages: 5000 # Staff list stafflist: @@ -190,12 +196,6 @@ social_links: Website: 'https://totalfreedom.me/' Discord: 'https://discordapp.com/invite/XXjmAmV/' -donation: - proboards_url: '' - donator_group_id: '' - session_id: '' - csrf_token: '' - # Blocking certain events allow: fire_place: false