diff --git a/pom.xml b/pom.xml index 00e4ad55..bdc39832 100644 --- a/pom.xml +++ b/pom.xml @@ -156,7 +156,7 @@ org.spigotmc spigot - 1.16.4-R0.1-SNAPSHOT + 1.16.5-R0.1-SNAPSHOT provided diff --git a/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java b/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java index 07e1ac54..21ff89c1 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/LoginProcess.java @@ -30,6 +30,7 @@ public class LoginProcess extends FreedomService private static boolean lockdownEnabled = false; public List TELEPORT_ON_JOIN = new ArrayList<>(); public List CLEAR_ON_JOIN = new ArrayList<>(); + public List CLOWNFISH_TOGGLE = new ArrayList<>(); public static boolean isLockdownEnabled() { diff --git a/src/main/java/me/totalfreedom/totalfreedommod/blocking/EditBlocker.java b/src/main/java/me/totalfreedom/totalfreedommod/blocking/EditBlocker.java index 8fefc1f1..06c5585f 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/blocking/EditBlocker.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/blocking/EditBlocker.java @@ -1,61 +1,61 @@ -package me.totalfreedom.totalfreedommod.blocking; - -import me.totalfreedom.totalfreedommod.FreedomService; -import me.totalfreedom.totalfreedommod.player.FPlayer; -import me.totalfreedom.totalfreedommod.util.FSync; -import org.bukkit.ChatColor; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.block.BlockPlaceEvent; - -public class EditBlocker extends FreedomService -{ - @Override - public void onStart() - { - } - - @Override - public void onStop() - { - } - - @EventHandler(priority = EventPriority.LOW) - public void onBlockPlace(BlockPlaceEvent event) - { - FPlayer fPlayer = plugin.pl.getPlayerSync(event.getPlayer()); - if (!fPlayer.isEditBlocked()) - { - return; - } - - if (plugin.al.isAdminSync(event.getPlayer())) - { - fPlayer.setEditBlocked(false); - return; - } - - FSync.playerMsg(event.getPlayer(), ChatColor.RED + "Your ability to place blocks has been disabled!"); - event.setCancelled(true); - } - - @EventHandler(priority = EventPriority.LOW) - public void onBlockBreak(BlockBreakEvent event) - { - FPlayer fPlayer = plugin.pl.getPlayerSync(event.getPlayer()); - if (!fPlayer.isEditBlocked()) - { - return; - } - - if (plugin.al.isAdminSync(event.getPlayer())) - { - fPlayer.setEditBlocked(false); - return; - } - - FSync.playerMsg(event.getPlayer(), ChatColor.RED + "Your ability to destroy blocks has been disabled!"); - event.setCancelled(true); - } +package me.totalfreedom.totalfreedommod.blocking; + +import me.totalfreedom.totalfreedommod.FreedomService; +import me.totalfreedom.totalfreedommod.player.FPlayer; +import me.totalfreedom.totalfreedommod.util.FSync; +import org.bukkit.ChatColor; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.block.BlockPlaceEvent; + +public class EditBlocker extends FreedomService +{ + @Override + public void onStart() + { + } + + @Override + public void onStop() + { + } + + @EventHandler(priority = EventPriority.LOW) + public void onBlockPlace(BlockPlaceEvent event) + { + FPlayer fPlayer = plugin.pl.getPlayerSync(event.getPlayer()); + if (!fPlayer.isEditBlocked()) + { + return; + } + + if (plugin.al.isAdminSync(event.getPlayer())) + { + fPlayer.setEditBlocked(false); + return; + } + + FSync.playerMsg(event.getPlayer(), ChatColor.RED + "Your ability to place blocks has been disabled!"); + event.setCancelled(true); + } + + @EventHandler(priority = EventPriority.LOW) + public void onBlockBreak(BlockBreakEvent event) + { + FPlayer fPlayer = plugin.pl.getPlayerSync(event.getPlayer()); + if (!fPlayer.isEditBlocked()) + { + return; + } + + if (plugin.al.isAdminSync(event.getPlayer())) + { + fPlayer.setEditBlocked(false); + return; + } + + FSync.playerMsg(event.getPlayer(), ChatColor.RED + "Your ability to destroy blocks has been disabled!"); + event.setCancelled(true); + } } \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_clownfish.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_clownfish.java index 11338c59..3f2caaf1 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_clownfish.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_clownfish.java @@ -15,14 +15,14 @@ public class Command_clownfish extends FreedomCommand @Override public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) { - if (plugin.pl.getData(playerSender).hasItem(ShopItem.CLOWN_FISH)) + if (plugin.pl.getData(playerSender).hasItem(ShopItem.CLOWN_FISH) && (!plugin.lp.CLOWNFISH_TOGGLE.contains(playerSender.getName()))) { playerSender.getInventory().addItem(plugin.sh.getClownFish()); msg("You have been given a Clown Fish", ChatColor.GREEN); } else { - msg("You do not own a Clown Fish! Purchase one from the shop.", ChatColor.RED); + msg("You do not own a Clown Fish or an admin has toggled your ability to use it. Purchase one from the shop.", ChatColor.RED); } return true; } diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_coins.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_coins.java index 50ab4b63..f50b8985 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_coins.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_coins.java @@ -1,54 +1,54 @@ -package me.totalfreedom.totalfreedommod.command; - -import me.totalfreedom.totalfreedommod.config.ConfigEntry; -import me.totalfreedom.totalfreedommod.player.PlayerData; -import me.totalfreedom.totalfreedommod.rank.Rank; -import me.totalfreedom.totalfreedommod.util.FUtil; -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -@CommandPermissions(level = Rank.OP, source = SourceType.BOTH) -@CommandParameters(description = "Shows the amount of coins you have or another player has", usage = "/ [playername]") -public class Command_coins extends FreedomCommand -{ - @Override - public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) - { - if (!ConfigEntry.SHOP_ENABLED.getBoolean()) - { - msg("The shop is currently disabled!", ChatColor.RED); - return true; - } - Player p; - final String prefix = FUtil.colorize(ConfigEntry.SHOP_PREFIX.getString() + " "); - if (args.length > 0) - { - if (getPlayer(args[0]) != null) - { - p = getPlayer(args[0]); - } - else - { - msg(PLAYER_NOT_FOUND); - return true; - } - } - else - { - if (senderIsConsole) - { - msg(prefix + ChatColor.RED + "You are not a player, use /coins "); - return true; - } - else - { - p = playerSender; - } - } - PlayerData playerData = plugin.pl.getData(p); - msg(prefix + ChatColor.GREEN + (args.length > 0 ? p.getName() + " has " : "You have ") + ChatColor.RED + playerData.getCoins() + ChatColor.GREEN + " coins."); - return true; - } +package me.totalfreedom.totalfreedommod.command; + +import me.totalfreedom.totalfreedommod.config.ConfigEntry; +import me.totalfreedom.totalfreedommod.player.PlayerData; +import me.totalfreedom.totalfreedommod.rank.Rank; +import me.totalfreedom.totalfreedommod.util.FUtil; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +@CommandPermissions(level = Rank.OP, source = SourceType.BOTH) +@CommandParameters(description = "Shows the amount of coins you have or another player has", usage = "/ [playername]") +public class Command_coins extends FreedomCommand +{ + @Override + public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) + { + if (!ConfigEntry.SHOP_ENABLED.getBoolean()) + { + msg("The shop is currently disabled!", ChatColor.RED); + return true; + } + Player p; + final String prefix = FUtil.colorize(ConfigEntry.SHOP_PREFIX.getString() + " "); + if (args.length > 0) + { + if (getPlayer(args[0]) != null) + { + p = getPlayer(args[0]); + } + else + { + msg(PLAYER_NOT_FOUND); + return true; + } + } + else + { + if (senderIsConsole) + { + msg(prefix + ChatColor.RED + "You are not a player, use /coins "); + return true; + } + else + { + p = playerSender; + } + } + PlayerData playerData = plugin.pl.getData(p); + msg(prefix + ChatColor.GREEN + (args.length > 0 ? p.getName() + " has " : "You have ") + ChatColor.RED + playerData.getCoins() + ChatColor.GREEN + " coins."); + return true; + } } \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_explode.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_explode.java index 470c07b7..0b407f71 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_explode.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_explode.java @@ -1,69 +1,69 @@ -package me.totalfreedom.totalfreedommod.command; - -import java.util.Collections; -import java.util.List; -import me.totalfreedom.totalfreedommod.rank.Rank; -import me.totalfreedom.totalfreedommod.util.FUtil; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.util.Vector; - -@CommandPermissions(level = Rank.SENIOR_ADMIN, source = SourceType.BOTH) -@CommandParameters(description = "Surprise someone.", usage = "/ ") -public class Command_explode extends FreedomCommand -{ - @Override - public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) - { - - if (args.length == 0) - { - return false; - } - - final Player player = getPlayer(args[0]); - - if (player == null) - { - msg(FreedomCommand.PLAYER_NOT_FOUND); - return true; - } - - player.setFlying(false); - player.setVelocity(player.getVelocity().clone().add(new Vector(0, 50, 0))); - - for (int i = 1; i <= 3; i++) - { - FUtil.createExplosionOnDelay(player.getLocation(), 2L, i * 10); - } - - new BukkitRunnable() - { - @Override - public void run() - { - for (int i = 0; i < 4; i++) - { - player.getWorld().strikeLightning(player.getLocation()); - player.getWorld().createExplosion(player.getLocation(), 4L); - } - player.setHealth(0.0); - msg("Exploded " + player.getName()); - } - }.runTaskLater(plugin, 40); - - return true; - } - - @Override - public List getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args) - { - if (args.length == 1 && plugin.al.isAdmin(sender)) - { - return FUtil.getPlayerList(); - } - return Collections.emptyList(); - } +package me.totalfreedom.totalfreedommod.command; + +import java.util.Collections; +import java.util.List; +import me.totalfreedom.totalfreedommod.rank.Rank; +import me.totalfreedom.totalfreedommod.util.FUtil; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.util.Vector; + +@CommandPermissions(level = Rank.SENIOR_ADMIN, source = SourceType.BOTH) +@CommandParameters(description = "Surprise someone.", usage = "/ ") +public class Command_explode extends FreedomCommand +{ + @Override + public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) + { + + if (args.length == 0) + { + return false; + } + + final Player player = getPlayer(args[0]); + + if (player == null) + { + msg(FreedomCommand.PLAYER_NOT_FOUND); + return true; + } + + player.setFlying(false); + player.setVelocity(player.getVelocity().clone().add(new Vector(0, 50, 0))); + + for (int i = 1; i <= 3; i++) + { + FUtil.createExplosionOnDelay(player.getLocation(), 2L, i * 10); + } + + new BukkitRunnable() + { + @Override + public void run() + { + for (int i = 0; i < 4; i++) + { + player.getWorld().strikeLightning(player.getLocation()); + player.getWorld().createExplosion(player.getLocation(), 4L); + } + player.setHealth(0.0); + msg("Exploded " + player.getName()); + } + }.runTaskLater(plugin, 40); + + return true; + } + + @Override + public List getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args) + { + if (args.length == 1 && plugin.al.isAdmin(sender)) + { + return FUtil.getPlayerList(); + } + return Collections.emptyList(); + } } \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_fuckoff.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_fuckoff.java index bed1cc71..169e6fbf 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_fuckoff.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_fuckoff.java @@ -21,8 +21,13 @@ public class Command_fuckoff extends FreedomCommand FPlayer player = plugin.pl.getPlayer(playerSender); - if (args[0].equalsIgnoreCase("off")) + if (!args[0].equals("on")) { + player.disableFuckoff(); + } + else + { + double radius = 25.0; if (args.length >= 2) { @@ -34,14 +39,12 @@ public class Command_fuckoff extends FreedomCommand { } } + player.setFuckoff(radius); } - else - { - player.disableFuckoff(); - } msg("Fuckoff " + (player.isFuckOff() ? ("enabled. Radius: " + player.getFuckoffRadius() + ".") : "disabled.")); + return true; } } \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_manageshop.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_manageshop.java index 5c53e3d2..8bad2b61 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_manageshop.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_manageshop.java @@ -1,219 +1,219 @@ -package me.totalfreedom.totalfreedommod.command; - -import me.totalfreedom.totalfreedommod.player.PlayerData; -import me.totalfreedom.totalfreedommod.rank.Rank; -import me.totalfreedom.totalfreedommod.shop.ShopItem; -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.SENIOR_ADMIN, source = SourceType.ONLY_CONSOLE) -@CommandParameters(description = "Manage the shop", usage = "/ | items: ", aliases = "ms") -public class Command_manageshop extends FreedomCommand -{ - @Override - public boolean run(final CommandSender sender, final Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) - { - - if (!FUtil.isExecutive(sender.getName())) - { - return noPerms(); - } - - if (args.length < 2) - { - return false; - } - if (args[0].equals("coins")) - { - if (args.length < 4) - { - return false; - } - switch (args[1]) - { - - case "add": - try - { - int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2]))); - if (!args[3].equals("all")) - { - PlayerData playerData = plugin.pl.getData(args[3]); - if (playerData == null) - { - msg(PLAYER_NOT_FOUND); - return true; - } - playerData.setCoins(playerData.getCoins() + amount); - plugin.pl.save(playerData); - msg("Successfully added " + amount + " coins to " + args[3] + ". Their new balance is " + playerData.getCoins(), ChatColor.GREEN); - Player player = getPlayer(args[3]); - if (player != null) - { - player.sendMessage(ChatColor.GREEN + sender.getName() + " gave you " + amount + " coins. Your new balance is " + playerData.getCoins()); - } - } - else - { - for (Player player : server.getOnlinePlayers()) - { - PlayerData playerData = plugin.pl.getData(player); - playerData.setCoins(playerData.getCoins() + amount); - plugin.pl.save(playerData); - player.sendMessage(ChatColor.GREEN + sender.getName() + " gave you " + amount + " coins. Your new balance is " + playerData.getCoins()); - } - msg("Successfully added " + amount + " coins to all online players.", ChatColor.GREEN); - } - return true; - } - catch (NumberFormatException ex) - { - msg("Invalid number: " + args[2], ChatColor.RED); - return true; - } - case "remove": - try - { - int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2]))); - if (!args[3].equals("all")) - { - PlayerData playerData = plugin.pl.getData(args[3]); - if (playerData == null) - { - msg(PLAYER_NOT_FOUND); - return true; - } - playerData.setCoins(playerData.getCoins() - amount); - if (playerData.getCoins() < 0) - { - playerData.setCoins(0); - } - plugin.pl.save(playerData); - msg("Successfully removed " + amount + " coins from " + args[3] + ". Their new balance is " + playerData.getCoins(), ChatColor.GREEN); - Player player = getPlayer(args[3]); - if (player != null) - { - player.sendMessage(ChatColor.RED + sender.getName() + " took " + amount + " coins from you. Your new balance is " + playerData.getCoins()); - } - } - else - { - for (Player player : server.getOnlinePlayers()) - { - PlayerData playerData = plugin.pl.getData(player); - playerData.setCoins(playerData.getCoins() - amount); - if (playerData.getCoins() < 0) - { - playerData.setCoins(0); - } - plugin.pl.save(playerData); - player.sendMessage(ChatColor.RED + sender.getName() + " took " + amount + " coins from you. Your new balance is " + playerData.getCoins()); - } - msg("Successfully took " + amount + " coins from all online players.", ChatColor.GREEN); - } - return true; - } - catch (NumberFormatException ex) - { - msg("Invalid number: " + args[2], ChatColor.RED); - return true; - } - case "set": - try - { - int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2]))); - PlayerData playerData = plugin.pl.getData(args[3]); - if (playerData == null) - { - msg(PLAYER_NOT_FOUND); - return true; - } - playerData.setCoins(amount); - plugin.pl.save(playerData); - msg("Successfully set " + args[3] + "'s coins to " + amount, ChatColor.GREEN); - Player player = getPlayer(args[3]); - if (player != null) - { - player.sendMessage(ChatColor.GREEN + sender.getName() + " set your coin balance to " + amount); - } - return true; - } - catch (NumberFormatException ex) - { - msg("Invalid number: " + args[2], ChatColor.RED); - return true; - } - } - } - else if (args[0].equals("items")) - { - if (args[1].equals("list")) - { - msg("List of all shop items: " + StringUtils.join(ShopItem.values(), ", ")); - return true; - } - - if (args.length < 4) - { - return false; - } - - if (args[1].equals("give")) - { - ShopItem item = ShopItem.findItem(args[2].toUpperCase()); - if (item == null) - { - msg(args[2] + " is not a valid item.", ChatColor.RED); - return true; - } - - PlayerData playerData = plugin.pl.getData(args[3]); - if (playerData == null) - { - msg(PLAYER_NOT_FOUND); - return true; - } - playerData.giveItem(item); - plugin.pl.save(playerData); - msg("Successfully gave the " + item.getName() + " to " + args[3], ChatColor.GREEN); - Player player = getPlayer(args[3]); - if (player != null) - { - player.sendMessage(ChatColor.GREEN + sender.getName() + " gave the " + item.getName() + " to you"); - } - return true; - } - else if (args[1].equals("take")) - { - ShopItem item = ShopItem.findItem(args[2].toUpperCase()); - if (item == null) - { - msg(args[2] + " is not a valid item.", ChatColor.RED); - return true; - } - - PlayerData playerData = plugin.pl.getData(args[3]); - if (playerData == null) - { - msg(PLAYER_NOT_FOUND); - return true; - } - playerData.removeItem(item); - plugin.pl.save(playerData); - msg("Successfully took the " + item.getName() + " from " + args[3], ChatColor.GREEN); - Player player = getPlayer(args[3]); - if (player != null) - { - player.sendMessage(ChatColor.RED + sender.getName() + " took the " + item.getName() + " from you"); - } - return true; - } - - } - return false; - } +package me.totalfreedom.totalfreedommod.command; + +import me.totalfreedom.totalfreedommod.player.PlayerData; +import me.totalfreedom.totalfreedommod.rank.Rank; +import me.totalfreedom.totalfreedommod.shop.ShopItem; +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.ADMIN, source = SourceType.BOTH) +@CommandParameters(description = "Manage the shop", usage = "/ | items: ", aliases = "ms") +public class Command_manageshop extends FreedomCommand +{ + @Override + public boolean run(final CommandSender sender, final Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) + { + + if (!FUtil.isExecutive(sender.getName())) + { + return noPerms(); + } + + if (args.length < 2) + { + return false; + } + if (args[0].equals("coins")) + { + if (args.length < 4) + { + return false; + } + switch (args[1]) + { + + case "add": + try + { + int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2]))); + if (!args[3].equals("all")) + { + PlayerData playerData = plugin.pl.getData(args[3]); + if (playerData == null) + { + msg(PLAYER_NOT_FOUND); + return true; + } + playerData.setCoins(playerData.getCoins() + amount); + plugin.pl.save(playerData); + msg("Successfully added " + amount + " coins to " + args[3] + ". Their new balance is " + playerData.getCoins(), ChatColor.GREEN); + Player player = getPlayer(args[3]); + if (player != null) + { + player.sendMessage(ChatColor.GREEN + sender.getName() + " gave you " + amount + " coins. Your new balance is " + playerData.getCoins()); + } + } + else + { + for (Player player : server.getOnlinePlayers()) + { + PlayerData playerData = plugin.pl.getData(player); + playerData.setCoins(playerData.getCoins() + amount); + plugin.pl.save(playerData); + player.sendMessage(ChatColor.GREEN + sender.getName() + " gave you " + amount + " coins. Your new balance is " + playerData.getCoins()); + } + msg("Successfully added " + amount + " coins to all online players.", ChatColor.GREEN); + } + return true; + } + catch (NumberFormatException ex) + { + msg("Invalid number: " + args[2], ChatColor.RED); + return true; + } + case "remove": + try + { + int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2]))); + if (!args[3].equals("all")) + { + PlayerData playerData = plugin.pl.getData(args[3]); + if (playerData == null) + { + msg(PLAYER_NOT_FOUND); + return true; + } + playerData.setCoins(playerData.getCoins() - amount); + if (playerData.getCoins() < 0) + { + playerData.setCoins(0); + } + plugin.pl.save(playerData); + msg("Successfully removed " + amount + " coins from " + args[3] + ". Their new balance is " + playerData.getCoins(), ChatColor.GREEN); + Player player = getPlayer(args[3]); + if (player != null) + { + player.sendMessage(ChatColor.RED + sender.getName() + " took " + amount + " coins from you. Your new balance is " + playerData.getCoins()); + } + } + else + { + for (Player player : server.getOnlinePlayers()) + { + PlayerData playerData = plugin.pl.getData(player); + playerData.setCoins(playerData.getCoins() - amount); + if (playerData.getCoins() < 0) + { + playerData.setCoins(0); + } + plugin.pl.save(playerData); + player.sendMessage(ChatColor.RED + sender.getName() + " took " + amount + " coins from you. Your new balance is " + playerData.getCoins()); + } + msg("Successfully took " + amount + " coins from all online players.", ChatColor.GREEN); + } + return true; + } + catch (NumberFormatException ex) + { + msg("Invalid number: " + args[2], ChatColor.RED); + return true; + } + case "set": + try + { + int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2]))); + PlayerData playerData = plugin.pl.getData(args[3]); + if (playerData == null) + { + msg(PLAYER_NOT_FOUND); + return true; + } + playerData.setCoins(amount); + plugin.pl.save(playerData); + msg("Successfully set " + args[3] + "'s coins to " + amount, ChatColor.GREEN); + Player player = getPlayer(args[3]); + if (player != null) + { + player.sendMessage(ChatColor.GREEN + sender.getName() + " set your coin balance to " + amount); + } + return true; + } + catch (NumberFormatException ex) + { + msg("Invalid number: " + args[2], ChatColor.RED); + return true; + } + } + } + else if (args[0].equals("items")) + { + if (args[1].equals("list")) + { + msg("List of all shop items: " + StringUtils.join(ShopItem.values(), ", ")); + return true; + } + + if (args.length < 4) + { + return false; + } + + if (args[1].equals("give")) + { + ShopItem item = ShopItem.findItem(args[2].toUpperCase()); + if (item == null) + { + msg(args[2] + " is not a valid item.", ChatColor.RED); + return true; + } + + PlayerData playerData = plugin.pl.getData(args[3]); + if (playerData == null) + { + msg(PLAYER_NOT_FOUND); + return true; + } + playerData.giveItem(item); + plugin.pl.save(playerData); + msg("Successfully gave the " + item.getName() + " to " + args[3], ChatColor.GREEN); + Player player = getPlayer(args[3]); + if (player != null) + { + player.sendMessage(ChatColor.GREEN + sender.getName() + " gave the " + item.getName() + " to you"); + } + return true; + } + else if (args[1].equals("take")) + { + ShopItem item = ShopItem.findItem(args[2].toUpperCase()); + if (item == null) + { + msg(args[2] + " is not a valid item.", ChatColor.RED); + return true; + } + + PlayerData playerData = plugin.pl.getData(args[3]); + if (playerData == null) + { + msg(PLAYER_NOT_FOUND); + return true; + } + playerData.removeItem(item); + plugin.pl.save(playerData); + msg("Successfully took the " + item.getName() + " from " + args[3], ChatColor.GREEN); + Player player = getPlayer(args[3]); + if (player != null) + { + player.sendMessage(ChatColor.RED + sender.getName() + " took the " + item.getName() + " from you"); + } + return true; + } + + } + return false; + } } \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_namehistory.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_namehistory.java index ad854ac2..1bc2033c 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_namehistory.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_namehistory.java @@ -1,23 +1,23 @@ -package me.totalfreedom.totalfreedommod.command; - -import me.totalfreedom.totalfreedommod.rank.Rank; -import me.totalfreedom.totalfreedommod.util.History; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -@CommandPermissions(level = Rank.OP, source = SourceType.BOTH) -@CommandParameters(description = "Check the name history of a specified player.", usage = "/ ", aliases = "nh") -public class Command_namehistory extends FreedomCommand -{ - @Override - public boolean run(final CommandSender sender, final Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) - { - if (args.length != 1) - { - return false; - } - History.reportHistory(sender, args[0]); - return true; - } +package me.totalfreedom.totalfreedommod.command; + +import me.totalfreedom.totalfreedommod.rank.Rank; +import me.totalfreedom.totalfreedommod.util.History; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +@CommandPermissions(level = Rank.OP, source = SourceType.BOTH) +@CommandParameters(description = "Check the name history of a specified player.", usage = "/ ", aliases = "nh") +public class Command_namehistory extends FreedomCommand +{ + @Override + public boolean run(final CommandSender sender, final Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) + { + if (args.length != 1) + { + return false; + } + History.reportHistory(sender, args[0]); + return true; + } } \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_scare.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_scare.java index 719b5ee2..bf8289fa 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_scare.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_scare.java @@ -1,62 +1,62 @@ -package me.totalfreedom.totalfreedommod.command; - -import java.util.Collections; -import java.util.List; -import me.totalfreedom.totalfreedommod.rank.Rank; -import me.totalfreedom.totalfreedommod.util.FUtil; -import org.bukkit.ChatColor; -import org.bukkit.Particle; -import org.bukkit.Sound; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -@CommandPermissions(level = Rank.SENIOR_ADMIN, source = SourceType.BOTH) -@CommandParameters(description = "Sends a guardian particle effect with an enderman scream to the specified player.", usage = "/ ") -public class Command_scare extends FreedomCommand -{ - @Override - public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) - { - if (!FUtil.isPaper()) - { - msg("This command won't work without Paper!", ChatColor.RED); - return true; - } - - if (args.length == 0) - { - return false; - } - - final Player player = getPlayer(args[0]); - - if (player == null) - { - msg(FreedomCommand.PLAYER_NOT_FOUND); - return true; - } - - msg("Scared " + player.getName()); - player.sendMessage(ChatColor.RED + "ZING"); - - player.spawnParticle(Particle.MOB_APPEARANCE, player.getLocation(), 4); - for (int i = 0; i < 10; ++i) - { - player.playSound(player.getLocation(), Sound.ENTITY_ENDERMAN_SCREAM, 1, 0); - } - - - return true; - } - - @Override - public List getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args) - { - if (args.length == 1 && plugin.al.isAdmin(sender)) - { - return FUtil.getPlayerList(); - } - return Collections.emptyList(); - } -} +package me.totalfreedom.totalfreedommod.command; + +import java.util.Collections; +import java.util.List; +import me.totalfreedom.totalfreedommod.rank.Rank; +import me.totalfreedom.totalfreedommod.util.FUtil; +import org.bukkit.ChatColor; +import org.bukkit.Particle; +import org.bukkit.Sound; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +@CommandPermissions(level = Rank.SENIOR_ADMIN, source = SourceType.BOTH) +@CommandParameters(description = "Sends a guardian particle effect with an enderman scream to the specified player.", usage = "/ ") +public class Command_scare extends FreedomCommand +{ + @Override + public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) + { + if (!FUtil.isPaper()) + { + msg("This command won't work without Paper!", ChatColor.RED); + return true; + } + + if (args.length == 0) + { + return false; + } + + final Player player = getPlayer(args[0]); + + if (player == null) + { + msg(FreedomCommand.PLAYER_NOT_FOUND); + return true; + } + + msg("Scared " + player.getName()); + player.sendMessage(ChatColor.RED + "ZING"); + + player.spawnParticle(Particle.MOB_APPEARANCE, player.getLocation(), 4); + for (int i = 0; i < 10; ++i) + { + player.playSound(player.getLocation(), Sound.ENTITY_ENDERMAN_SCREAM, 1, 0); + } + + + return true; + } + + @Override + public List getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args) + { + if (args.length == 1 && plugin.al.isAdmin(sender)) + { + return FUtil.getPlayerList(); + } + return Collections.emptyList(); + } +} diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_serverstats.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_serverstats.java index e7790ca1..6f3a3f35 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_serverstats.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_serverstats.java @@ -1,28 +1,28 @@ -package me.totalfreedom.totalfreedommod.command; - -import me.totalfreedom.totalfreedommod.config.ConfigEntry; -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.OP, source = SourceType.BOTH) -@CommandParameters(description = "Check the status of the server, including opped players, admins, etc.", usage = "/", aliases = "ss") -public class Command_serverstats extends FreedomCommand -{ - - @Override - public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) - { - msg("-==" + ConfigEntry.SERVER_NAME.getString() + " server stats==-", ChatColor.GOLD); - msg("Total opped players: " + server.getOperators().size(), ChatColor.RED); - msg("Total admins: " + plugin.al.getAllAdmins().size() + " (" + plugin.al.getActiveAdmins().size() + " active)", ChatColor.BLUE); - int bans = plugin.im.getIndefBans().size(); - int nameBans = plugin.im.getNameBanCount(); - int uuidBans = plugin.im.getUuidBanCount(); - int ipBans = plugin.im.getIpBanCount(); - msg("Total indefinite ban entries: " + bans + " (" + nameBans + " name bans, " + uuidBans + " UUID bans, and " + ipBans + " IP bans)", ChatColor.GREEN); - return true; - } +package me.totalfreedom.totalfreedommod.command; + +import me.totalfreedom.totalfreedommod.config.ConfigEntry; +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.OP, source = SourceType.BOTH) +@CommandParameters(description = "Check the status of the server, including opped players, admins, etc.", usage = "/", aliases = "ss") +public class Command_serverstats extends FreedomCommand +{ + + @Override + public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) + { + msg("-==" + ConfigEntry.SERVER_NAME.getString() + " server stats==-", ChatColor.GOLD); + msg("Total opped players: " + server.getOperators().size(), ChatColor.RED); + msg("Total admins: " + plugin.al.getAllAdmins().size() + " (" + plugin.al.getActiveAdmins().size() + " active)", ChatColor.BLUE); + int bans = plugin.im.getIndefBans().size(); + int nameBans = plugin.im.getNameBanCount(); + int uuidBans = plugin.im.getUuidBanCount(); + int ipBans = plugin.im.getIpBanCount(); + msg("Total indefinite ban entries: " + bans + " (" + nameBans + " name bans, " + uuidBans + " UUID bans, and " + ipBans + " IP bans)", ChatColor.GREEN); + return true; + } } \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_toggleclownfish.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_toggleclownfish.java new file mode 100644 index 00000000..a4f05a39 --- /dev/null +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_toggleclownfish.java @@ -0,0 +1,36 @@ +package me.totalfreedom.totalfreedommod.command; + +import me.totalfreedom.totalfreedommod.rank.Rank; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; + +@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH) +@CommandParameters(description = "Toggle whether or not a player has the ability to use clownfish", usage = "/ ", aliases = "togglecf") +public class Command_toggleclownfish extends FreedomCommand +{ + + @Override + public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) + { + if (args.length == 0) + { + return false; + } + + boolean enabled = plugin.lp.CLOWNFISH_TOGGLE.contains(args[0]); + + if (enabled) + { + plugin.lp.CLOWNFISH_TOGGLE.remove(args[0]); + } + else + { + plugin.lp.CLOWNFISH_TOGGLE.add(args[0]); + } + + msg(args[0] + " will " + (enabled ? "now" : "no longer") + " have the ability to use clownfish."); + + return true; + } +} diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_vote.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_vote.java index f87f16a8..3f1df406 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_vote.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_vote.java @@ -1,34 +1,34 @@ -package me.totalfreedom.totalfreedommod.command; - -import java.util.List; -import me.totalfreedom.totalfreedommod.config.ConfigEntry; -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.OP, source = SourceType.BOTH) -@CommandParameters(description = "Information on how to vote", usage = "/") -public class Command_vote extends FreedomCommand -{ - - @Override - public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) - { - List voteInfo = ConfigEntry.VOTING_INFO.getStringList(); - - if (voteInfo.isEmpty()) - { - msg("The voting information section of the config.yml file has not been configured.", ChatColor.RED); - } - else - { - msg(FUtil.colorize(StringUtils.join(voteInfo, "\n"))); - } - - return true; - } -} +package me.totalfreedom.totalfreedommod.command; + +import java.util.List; +import me.totalfreedom.totalfreedommod.config.ConfigEntry; +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.OP, source = SourceType.BOTH) +@CommandParameters(description = "Information on how to vote", usage = "/") +public class Command_vote extends FreedomCommand +{ + + @Override + public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) + { + List voteInfo = ConfigEntry.VOTING_INFO.getStringList(); + + if (voteInfo.isEmpty()) + { + msg("The voting information section of the config.yml file has not been configured.", ChatColor.RED); + } + else + { + msg(FUtil.colorize(StringUtils.join(voteInfo, "\n"))); + } + + 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 90aee0ac..c19bad9d 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/config/ConfigEntry.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/config/ConfigEntry.java @@ -57,6 +57,7 @@ public enum ConfigEntry SERVER_LOGIN_SUBTITLE(String.class, "server.login_title.subtitle"), SERVER_OWNERS(List.class, "server.owners"), SERVER_EXECUTIVES(List.class, "server.executives"), + SERVER_ASSTISTANT_EXECUTIVES(List.class, "server.assistant_executives"), SERVER_MASTER_BUILDER_MANAGEMENT(List.class, "server.master_builder_management"), SERVER_BAN_URL(String.class, "server.ban_url"), SERVER_INDEFBAN_URL(String.class, "server.indefban_url"), diff --git a/src/main/java/me/totalfreedom/totalfreedommod/discord/Discord.java b/src/main/java/me/totalfreedom/totalfreedommod/discord/Discord.java index 211e9a73..05155cec 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/discord/Discord.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/discord/Discord.java @@ -402,6 +402,11 @@ public class Discord extends FreedomService { return; } + + if (message.contains("§")) + { + message = StringUtils.remove(message, "§"); + } if (enabled && !chat_channel_id.isEmpty()) { @@ -422,6 +427,11 @@ public class Discord extends FreedomService { return; } + + if (message.contains("§")) + { + message = StringUtils.remove(message, "§"); + } if (enabled && !chat_channel_id.isEmpty()) { diff --git a/src/main/java/me/totalfreedom/totalfreedommod/fun/ItemFun.java b/src/main/java/me/totalfreedom/totalfreedommod/fun/ItemFun.java index 67a0b86c..55c4ec94 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/fun/ItemFun.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/fun/ItemFun.java @@ -247,6 +247,12 @@ public class ItemFun extends FreedomService { final int RADIUS_HIT = 5; final int STRENGTH = 4; + + if (plugin.lp.CLOWNFISH_TOGGLE.contains(player.getName())) + { + player.sendMessage(ChatColor.GRAY + "An admin has disabled your ability to use clownfish."); + break; + } if (!plugin.sh.isRealItem(plugin.pl.getData(player), ShopItem.CLOWN_FISH, player.getInventory(), plugin.sh.getClownFish())) { diff --git a/src/main/java/me/totalfreedom/totalfreedommod/rank/Title.java b/src/main/java/me/totalfreedom/totalfreedommod/rank/Title.java index ab2eb684..93bd0339 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/rank/Title.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/rank/Title.java @@ -8,8 +8,9 @@ public enum Title implements Displayable MASTER_BUILDER("a", "Master Builder", ChatColor.DARK_AQUA, org.bukkit.ChatColor.DARK_AQUA, "MB", true, true), VERIFIED_ADMIN("a", "Verified Admin", ChatColor.LIGHT_PURPLE, org.bukkit.ChatColor.LIGHT_PURPLE, "VA", false, true), EXECUTIVE("an", "Executive", ChatColor.RED, org.bukkit.ChatColor.RED, "Exec", true, true), + ASSTEXEC("an", "Assistant Executive", ChatColor.RED, org.bukkit.ChatColor.RED, "Asst Exec", true, true), DEVELOPER("a", "Developer", ChatColor.DARK_PURPLE, org.bukkit.ChatColor.DARK_PURPLE, "Dev", true, true), - OWNER("the", "Owner", ChatColor.of("#ff0000"), org.bukkit.ChatColor.DARK_RED, "Owner", true, true); + OWNER("the", "Owner", ChatColor.DARK_RED, org.bukkit.ChatColor.DARK_RED, "Owner", true, true); private final String article; diff --git a/src/main/java/me/totalfreedom/totalfreedommod/shop/Shop.java b/src/main/java/me/totalfreedom/totalfreedommod/shop/Shop.java index d08497c5..b67211dd 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/shop/Shop.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/shop/Shop.java @@ -1,425 +1,425 @@ -package me.totalfreedom.totalfreedommod.shop; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Date; -import java.util.List; -import java.util.Objects; -import me.totalfreedom.totalfreedommod.FreedomService; -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 org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.boss.BarColor; -import org.bukkit.boss.BarStyle; -import org.bukkit.boss.BossBar; -import org.bukkit.enchantments.Enchantment; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.inventory.InventoryClickEvent; -import org.bukkit.inventory.Inventory; -import org.bukkit.inventory.ItemStack; -import org.bukkit.inventory.PlayerInventory; -import org.bukkit.inventory.meta.ItemMeta; -import org.bukkit.scheduler.BukkitRunnable; -import org.bukkit.scheduler.BukkitTask; - -public class Shop extends FreedomService -{ - public final int coinsPerReactionWin = ConfigEntry.SHOP_REACTIONS_COINS_PER_WIN.getInteger(); - public final String prefix = ChatColor.DARK_GRAY + "[" + ChatColor.YELLOW + "Reaction" + ChatColor.DARK_GRAY + "] "; - private final String LOGIN_MESSAGE_GUI_TITLE = ChatColor.DARK_GREEN + ChatColor.BOLD.toString() + "Login Messages"; - public String reactionString = ""; - public Date reactionStartTime; - public BukkitTask countdownTask; - private BukkitTask reactions; - private BossBar countdownBar = null; - - @Override - public void onStart() - { - if (ConfigEntry.SHOP_REACTIONS_ENABLED.getBoolean()) - { - startReactionTimer(); - } - } - - public void startReactionTimer() - { - long interval = ConfigEntry.SHOP_REACTIONS_INTERVAL.getInteger() * 20L; - - reactions = new BukkitRunnable() - { - - @Override - public void run() - { - startReaction(); - } - }.runTaskLater(plugin, interval); - } - - public void forceStartReaction() - { - reactions.cancel(); - startReaction(); - } - - public void startReaction() - { - if (!ConfigEntry.SHOP_ENABLED.getBoolean()) - { - FLog.debug("The shop is not enabled, therefore a reaction did not start."); - return; - } - - reactionString = FUtil.randomAlphanumericString(ConfigEntry.SHOP_REACTIONS_STRING_LENGTH.getInteger()); - - FUtil.bcastMsg(prefix + ChatColor.AQUA + "Enter the code above to win " + ChatColor.GOLD + coinsPerReactionWin + ChatColor.AQUA + " coins!", false); - - reactionStartTime = new Date(); - - countdownBar = server.createBossBar(reactionString, BarColor.GREEN, BarStyle.SOLID); - for (Player player : server.getOnlinePlayers()) - { - countdownBar.addPlayer(player); - } - countdownBar.setVisible(true); - countdownTask = new BukkitRunnable() - { - double seconds = 30; - final double max = seconds; - - @Override - public void run() - { - if ((seconds -= 1) == 0) - { - endReaction(null); - } - else - { - countdownBar.setProgress(seconds / max); - if (!countdownBar.getColor().equals(BarColor.YELLOW) && seconds / max <= 0.25) - { - countdownBar.setColor(BarColor.YELLOW); - } - } - } - }.runTaskTimer(plugin, 0, 20); - } - - public void endReaction(String winner) - { - countdownTask.cancel(); - countdownBar.removeAll(); - countdownBar = null; - reactionString = ""; - - if (winner != null) - { - Date currentTime = new Date(); - long seconds = (currentTime.getTime() - reactionStartTime.getTime()) / 1000; - FUtil.bcastMsg(prefix + ChatColor.GREEN + winner + ChatColor.AQUA + " won in " + seconds + " seconds!", false); - startReactionTimer(); - return; - } - - FUtil.bcastMsg(prefix + ChatColor.RED + "No one reacted fast enough", false); - startReactionTimer(); - } - - @Override - public void onStop() - { - if (ConfigEntry.SHOP_REACTIONS_ENABLED.getBoolean()) - { - reactions.cancel(); - } - } - - public String getShopPrefix() - { - return FUtil.colorize(ConfigEntry.SHOP_PREFIX.getString()); - } - - public String getShopTitle() - { - return FUtil.colorize(ConfigEntry.SHOP_TITLE.getString()); - } - - public Inventory generateShopGUI(PlayerData playerData) - { - Inventory gui = server.createInventory(null, 36, getShopTitle()); - for (int slot = 0; slot < 36; slot++) - { - ItemStack blank = new ItemStack(Material.WHITE_STAINED_GLASS_PANE); - ItemMeta meta = blank.getItemMeta(); - assert meta != null; - meta.setDisplayName(" "); - blank.setItemMeta(meta); - gui.setItem(slot, blank); - } - for (ShopItem shopItem : ShopItem.values()) - { - ItemStack item = shopGUIItem(shopItem, playerData); - gui.setItem(shopItem.getSlot(), item); - } - // Coins - ItemStack coins = new ItemStack(Material.GOLD_NUGGET); - ItemMeta meta = coins.getItemMeta(); - assert meta != null; - meta.setDisplayName(FUtil.colorize("&c&lYou have &e&l" + playerData.getCoins() + "&c&l coins")); - coins.setItemMeta(meta); - gui.setItem(35, coins); - 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(); - assert meta != null; - 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(); - assert meta != null; - 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) - { - return isRealItem(data, shopItem, inventory.getItemInMainHand(), realItem) || isRealItem(data, shopItem, inventory.getItemInOffHand(), realItem); - } - - public boolean isRealItem(PlayerData data, ShopItem shopItem, ItemStack givenItem, ItemStack realItem) - { - if (!data.hasItem(shopItem) || !givenItem.getType().equals(realItem.getType())) - { - return false; - } - - ItemMeta givenMeta = givenItem.getItemMeta(); - ItemMeta realMeta = realItem.getItemMeta(); - - assert givenMeta != null; - assert realMeta != null; - return givenMeta.getDisplayName().equals(realMeta.getDisplayName()) && Objects.equals(givenMeta.getLore(), realMeta.getLore()); - } - - public ItemStack getLightningRod() - { - ItemStack itemStack = new ItemStack(Material.BLAZE_ROD); - ItemMeta itemMeta = itemStack.getItemMeta(); - assert itemMeta != null; - itemMeta.setDisplayName(FUtil.colorize("&bL&3i&bg&3h&bt&3i&bn&3g &b&bR&3o&bd")); - itemMeta.setLore(Arrays.asList(ChatColor.AQUA + "Strike others down with the power of lightning.", ChatColor.RED + ChatColor.ITALIC.toString() + "The classic way to exterminate annoyances.")); - itemMeta.addEnchant(Enchantment.CHANNELING, 1, false); - itemStack.setItemMeta(itemMeta); - return itemStack; - } - - public ItemStack getGrapplingHook() - { - ItemStack itemStack = new ItemStack(Material.FISHING_ROD); - ItemMeta itemMeta = itemStack.getItemMeta(); - assert itemMeta != null; - itemMeta.setDisplayName(ChatColor.YELLOW + "Grappling Hook"); - itemMeta.setLore(Collections.singletonList(ChatColor.GREEN + "be spider-man but ghetto")); - itemStack.setItemMeta(itemMeta); - return itemStack; - } - - public ItemStack getFireBall() - { - ItemStack itemStack = new ItemStack(Material.FIRE_CHARGE); - ItemMeta itemMeta = itemStack.getItemMeta(); - assert itemMeta != null; - itemMeta.setDisplayName(ChatColor.RED + "Fire Ball"); - itemMeta.setLore(Collections.singletonList(ChatColor.GOLD + "Yeet this at people")); - itemStack.setItemMeta(itemMeta); - return itemStack; - } - - public ItemStack getRideablePearl() - { - ItemStack itemStack = new ItemStack(Material.ENDER_PEARL); - ItemMeta itemMeta = itemStack.getItemMeta(); - assert itemMeta != null; - itemMeta.setDisplayName(ChatColor.DARK_PURPLE + "Rideable Ender Pearl"); - itemMeta.setLore(Arrays.asList(ChatColor.LIGHT_PURPLE + "What the title says.", "", ChatColor.WHITE + ChatColor.ITALIC.toString() + "TotalFreedom is not responsible for any injuries", ChatColor.WHITE + ChatColor.ITALIC.toString() + "sustained while using this item.")); - itemMeta.addEnchant(Enchantment.BINDING_CURSE, 1, false); - itemStack.setItemMeta(itemMeta); - return itemStack; - } - - public ItemStack getStackingPotato() - { - ItemStack itemStack = new ItemStack(Material.POTATO); - ItemMeta itemMeta = itemStack.getItemMeta(); - assert itemMeta != null; - itemMeta.setDisplayName(ChatColor.YELLOW + "Stacking Potato"); - itemMeta.setLore(Collections.singletonList(ChatColor.GREEN + "Left click to ride a mob, right click to put a mob on your head.")); - itemStack.setItemMeta(itemMeta); - return itemStack; - } - - public ItemStack getClownFish() - { - ItemStack itemStack = new ItemStack(Material.TROPICAL_FISH); - ItemMeta itemMeta = itemStack.getItemMeta(); - assert itemMeta != null; - itemMeta.setDisplayName(ChatColor.GOLD + "Clown Fish"); - itemMeta.setLore(Collections.singletonList(ChatColor.AQUA + ":clown:")); - itemStack.setItemMeta(itemMeta); - return itemStack; - } - - public boolean canAfford(int price, int coins) - { - return coins >= price; - } - - public int amountNeeded(int price, int coins) - { - return price - coins; - } - - public ItemStack shopGUIItem(ShopItem item, PlayerData data) - { - ItemStack itemStack = new ItemStack(item.getIcon()); - ItemMeta itemMeta = itemStack.getItemMeta(); - assert itemMeta != null; - itemMeta.setDisplayName(item.getColoredName()); - int price = item.getCost(); - int coins = data.getCoins(); - boolean canAfford = canAfford(price, coins); - List lore = new ArrayList<>(); - if (!data.hasItem(item)) - { - lore.add(ChatColor.GOLD + "Price: " + (canAfford ? ChatColor.DARK_GREEN : ChatColor.RED) + price); - if (!canAfford) - { - lore.add(ChatColor.RED + "You can not afford this item!"); - lore.add(ChatColor.RED + "You need " + amountNeeded(price, coins) + " more coins to buy this item."); - } - } - else - { - lore.add(ChatColor.RED + "You already purchased this item."); - } - itemMeta.setLore(lore); - itemStack.setItemMeta(itemMeta); - return itemStack; - } - - @EventHandler(priority = EventPriority.HIGH) - public void onShopGUIClick(InventoryClickEvent event) - { - if (!(event.getWhoClicked() instanceof Player)) - { - return; - } - - Inventory inventory = event.getInventory(); - if (inventory.getSize() != 36 || !event.getView().getTitle().equals(getShopTitle())) - { - return; - } - event.setCancelled(true); - - ShopItem shopItem = getShopItem(event.getSlot()); - if (shopItem == null) - { - return; - } - - Player player = (Player)event.getWhoClicked(); - PlayerData playerData = plugin.pl.getData(player); - int price = shopItem.getCost(); - int coins = playerData.getCoins(); - - if (playerData.hasItem(shopItem) || !canAfford(price, coins)) - { - return; - } - - playerData.giveItem(shopItem); - playerData.setCoins(coins - price); - plugin.pl.save(playerData); - - player.closeInventory(); - - player.sendMessage(getShopPrefix() + " " + ChatColor.GREEN + "Successfully purchased the \"" + shopItem.getColoredName() + ChatColor.GREEN + "\" for " + ChatColor.GOLD + price + ChatColor.GREEN + "!"); - - if (shopItem.getCommand() != null) - { - player.sendMessage(ChatColor.GREEN + "Run " + shopItem.getCommand() + " to get one!"); - } - } - - @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()) - { - if (shopItem.getSlot() == slot) - { - return shopItem; - } - } - return null; - } +package me.totalfreedom.totalfreedommod.shop; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.List; +import java.util.Objects; +import me.totalfreedom.totalfreedommod.FreedomService; +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 org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.boss.BarColor; +import org.bukkit.boss.BarStyle; +import org.bukkit.boss.BossBar; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.scheduler.BukkitRunnable; +import org.bukkit.scheduler.BukkitTask; + +public class Shop extends FreedomService +{ + public final int coinsPerReactionWin = ConfigEntry.SHOP_REACTIONS_COINS_PER_WIN.getInteger(); + public final String prefix = ChatColor.DARK_GRAY + "[" + ChatColor.YELLOW + "Reaction" + ChatColor.DARK_GRAY + "] "; + private final String LOGIN_MESSAGE_GUI_TITLE = ChatColor.DARK_GREEN + ChatColor.BOLD.toString() + "Login Messages"; + public String reactionString = ""; + public Date reactionStartTime; + public BukkitTask countdownTask; + private BukkitTask reactions; + private BossBar countdownBar = null; + + @Override + public void onStart() + { + if (ConfigEntry.SHOP_REACTIONS_ENABLED.getBoolean()) + { + startReactionTimer(); + } + } + + public void startReactionTimer() + { + long interval = ConfigEntry.SHOP_REACTIONS_INTERVAL.getInteger() * 20L; + + reactions = new BukkitRunnable() + { + + @Override + public void run() + { + startReaction(); + } + }.runTaskLater(plugin, interval); + } + + public void forceStartReaction() + { + reactions.cancel(); + startReaction(); + } + + public void startReaction() + { + if (!ConfigEntry.SHOP_ENABLED.getBoolean()) + { + FLog.debug("The shop is not enabled, therefore a reaction did not start."); + return; + } + + reactionString = FUtil.randomAlphanumericString(ConfigEntry.SHOP_REACTIONS_STRING_LENGTH.getInteger()); + + FUtil.bcastMsg(prefix + ChatColor.AQUA + "Enter the code above to win " + ChatColor.GOLD + coinsPerReactionWin + ChatColor.AQUA + " coins!", false); + + reactionStartTime = new Date(); + + countdownBar = server.createBossBar(reactionString, BarColor.GREEN, BarStyle.SOLID); + for (Player player : server.getOnlinePlayers()) + { + countdownBar.addPlayer(player); + } + countdownBar.setVisible(true); + countdownTask = new BukkitRunnable() + { + double seconds = 30; + final double max = seconds; + + @Override + public void run() + { + if ((seconds -= 1) == 0) + { + endReaction(null); + } + else + { + countdownBar.setProgress(seconds / max); + if (!countdownBar.getColor().equals(BarColor.YELLOW) && seconds / max <= 0.25) + { + countdownBar.setColor(BarColor.YELLOW); + } + } + } + }.runTaskTimer(plugin, 0, 20); + } + + public void endReaction(String winner) + { + countdownTask.cancel(); + countdownBar.removeAll(); + countdownBar = null; + reactionString = ""; + + if (winner != null) + { + Date currentTime = new Date(); + long seconds = (currentTime.getTime() - reactionStartTime.getTime()) / 1000; + FUtil.bcastMsg(prefix + ChatColor.GREEN + winner + ChatColor.AQUA + " won in " + seconds + " seconds!", false); + startReactionTimer(); + return; + } + + FUtil.bcastMsg(prefix + ChatColor.RED + "No one reacted fast enough", false); + startReactionTimer(); + } + + @Override + public void onStop() + { + if (ConfigEntry.SHOP_REACTIONS_ENABLED.getBoolean()) + { + reactions.cancel(); + } + } + + public String getShopPrefix() + { + return FUtil.colorize(ConfigEntry.SHOP_PREFIX.getString()); + } + + public String getShopTitle() + { + return FUtil.colorize(ConfigEntry.SHOP_TITLE.getString()); + } + + public Inventory generateShopGUI(PlayerData playerData) + { + Inventory gui = server.createInventory(null, 36, getShopTitle()); + for (int slot = 0; slot < 36; slot++) + { + ItemStack blank = new ItemStack(Material.WHITE_STAINED_GLASS_PANE); + ItemMeta meta = blank.getItemMeta(); + assert meta != null; + meta.setDisplayName(" "); + blank.setItemMeta(meta); + gui.setItem(slot, blank); + } + for (ShopItem shopItem : ShopItem.values()) + { + ItemStack item = shopGUIItem(shopItem, playerData); + gui.setItem(shopItem.getSlot(), item); + } + // Coins + ItemStack coins = new ItemStack(Material.GOLD_NUGGET); + ItemMeta meta = coins.getItemMeta(); + assert meta != null; + meta.setDisplayName(FUtil.colorize("&c&lYou have &e&l" + playerData.getCoins() + "&c&l coins")); + coins.setItemMeta(meta); + gui.setItem(35, coins); + 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(); + assert meta != null; + 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(); + assert meta != null; + 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) + { + return isRealItem(data, shopItem, inventory.getItemInMainHand(), realItem) || isRealItem(data, shopItem, inventory.getItemInOffHand(), realItem); + } + + public boolean isRealItem(PlayerData data, ShopItem shopItem, ItemStack givenItem, ItemStack realItem) + { + if (!data.hasItem(shopItem) || !givenItem.getType().equals(realItem.getType())) + { + return false; + } + + ItemMeta givenMeta = givenItem.getItemMeta(); + ItemMeta realMeta = realItem.getItemMeta(); + + assert givenMeta != null; + assert realMeta != null; + return givenMeta.getDisplayName().equals(realMeta.getDisplayName()) && Objects.equals(givenMeta.getLore(), realMeta.getLore()); + } + + public ItemStack getLightningRod() + { + ItemStack itemStack = new ItemStack(Material.BLAZE_ROD); + ItemMeta itemMeta = itemStack.getItemMeta(); + assert itemMeta != null; + itemMeta.setDisplayName(FUtil.colorize("&bL&3i&bg&3h&bt&3i&bn&3g &b&bR&3o&bd")); + itemMeta.setLore(Arrays.asList(ChatColor.AQUA + "Strike others down with the power of lightning.", ChatColor.RED + ChatColor.ITALIC.toString() + "The classic way to exterminate annoyances.")); + itemMeta.addEnchant(Enchantment.CHANNELING, 1, false); + itemStack.setItemMeta(itemMeta); + return itemStack; + } + + public ItemStack getGrapplingHook() + { + ItemStack itemStack = new ItemStack(Material.FISHING_ROD); + ItemMeta itemMeta = itemStack.getItemMeta(); + assert itemMeta != null; + itemMeta.setDisplayName(ChatColor.YELLOW + "Grappling Hook"); + itemMeta.setLore(Collections.singletonList(ChatColor.GREEN + "be spider-man but ghetto")); + itemStack.setItemMeta(itemMeta); + return itemStack; + } + + public ItemStack getFireBall() + { + ItemStack itemStack = new ItemStack(Material.FIRE_CHARGE); + ItemMeta itemMeta = itemStack.getItemMeta(); + assert itemMeta != null; + itemMeta.setDisplayName(ChatColor.RED + "Fire Ball"); + itemMeta.setLore(Collections.singletonList(ChatColor.GOLD + "Yeet this at people")); + itemStack.setItemMeta(itemMeta); + return itemStack; + } + + public ItemStack getRideablePearl() + { + ItemStack itemStack = new ItemStack(Material.ENDER_PEARL); + ItemMeta itemMeta = itemStack.getItemMeta(); + assert itemMeta != null; + itemMeta.setDisplayName(ChatColor.DARK_PURPLE + "Rideable Ender Pearl"); + itemMeta.setLore(Arrays.asList(ChatColor.LIGHT_PURPLE + "What the title says.", "", ChatColor.WHITE + ChatColor.ITALIC.toString() + "TotalFreedom is not responsible for any injuries", ChatColor.WHITE + ChatColor.ITALIC.toString() + "sustained while using this item.")); + itemMeta.addEnchant(Enchantment.BINDING_CURSE, 1, false); + itemStack.setItemMeta(itemMeta); + return itemStack; + } + + public ItemStack getStackingPotato() + { + ItemStack itemStack = new ItemStack(Material.POTATO); + ItemMeta itemMeta = itemStack.getItemMeta(); + assert itemMeta != null; + itemMeta.setDisplayName(ChatColor.YELLOW + "Stacking Potato"); + itemMeta.setLore(Collections.singletonList(ChatColor.GREEN + "Left click to ride a mob, right click to put a mob on your head.")); + itemStack.setItemMeta(itemMeta); + return itemStack; + } + + public ItemStack getClownFish() + { + ItemStack itemStack = new ItemStack(Material.TROPICAL_FISH); + ItemMeta itemMeta = itemStack.getItemMeta(); + assert itemMeta != null; + itemMeta.setDisplayName(ChatColor.GOLD + "Clown Fish"); + itemMeta.setLore(Collections.singletonList(ChatColor.AQUA + ":clown:")); + itemStack.setItemMeta(itemMeta); + return itemStack; + } + + public boolean canAfford(int price, int coins) + { + return coins >= price; + } + + public int amountNeeded(int price, int coins) + { + return price - coins; + } + + public ItemStack shopGUIItem(ShopItem item, PlayerData data) + { + ItemStack itemStack = new ItemStack(item.getIcon()); + ItemMeta itemMeta = itemStack.getItemMeta(); + assert itemMeta != null; + itemMeta.setDisplayName(item.getColoredName()); + int price = item.getCost(); + int coins = data.getCoins(); + boolean canAfford = canAfford(price, coins); + List lore = new ArrayList<>(); + if (!data.hasItem(item)) + { + lore.add(ChatColor.GOLD + "Price: " + (canAfford ? ChatColor.DARK_GREEN : ChatColor.RED) + price); + if (!canAfford) + { + lore.add(ChatColor.RED + "You can not afford this item!"); + lore.add(ChatColor.RED + "You need " + amountNeeded(price, coins) + " more coins to buy this item."); + } + } + else + { + lore.add(ChatColor.RED + "You already purchased this item."); + } + itemMeta.setLore(lore); + itemStack.setItemMeta(itemMeta); + return itemStack; + } + + @EventHandler(priority = EventPriority.HIGH) + public void onShopGUIClick(InventoryClickEvent event) + { + if (!(event.getWhoClicked() instanceof Player)) + { + return; + } + + Inventory inventory = event.getInventory(); + if (inventory.getSize() != 36 || !event.getView().getTitle().equals(getShopTitle())) + { + return; + } + event.setCancelled(true); + + ShopItem shopItem = getShopItem(event.getSlot()); + if (shopItem == null) + { + return; + } + + Player player = (Player)event.getWhoClicked(); + PlayerData playerData = plugin.pl.getData(player); + int price = shopItem.getCost(); + int coins = playerData.getCoins(); + + if (playerData.hasItem(shopItem) || !canAfford(price, coins)) + { + return; + } + + playerData.giveItem(shopItem); + playerData.setCoins(coins - price); + plugin.pl.save(playerData); + + player.closeInventory(); + + player.sendMessage(getShopPrefix() + " " + ChatColor.GREEN + "Successfully purchased the \"" + shopItem.getColoredName() + ChatColor.GREEN + "\" for " + ChatColor.GOLD + price + ChatColor.GREEN + "!"); + + if (shopItem.getCommand() != null) + { + player.sendMessage(ChatColor.GREEN + "Run " + shopItem.getCommand() + " to get one!"); + } + } + + @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()) + { + if (shopItem.getSlot() == slot) + { + return shopItem; + } + } + return null; + } } \ 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 8b35b208..448e34f5 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java @@ -136,7 +136,7 @@ public class FUtil public static boolean isExecutive(String name) { - return ConfigEntry.SERVER_OWNERS.getStringList().contains(name) || ConfigEntry.SERVER_EXECUTIVES.getStringList().contains(name); + return ConfigEntry.SERVER_OWNERS.getStringList().contains(name) || ConfigEntry.SERVER_EXECUTIVES.getStringList().contains(name) || ConfigEntry.SERVER_ASSTISTANT_EXECUTIVES.getStringList().contains(name); } public static boolean isDeveloper(Player player) diff --git a/src/main/java/me/totalfreedom/totalfreedommod/util/History.java b/src/main/java/me/totalfreedom/totalfreedommod/util/History.java index 3c5125f2..682a4fbd 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/util/History.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/util/History.java @@ -1,114 +1,114 @@ -package me.totalfreedom.totalfreedommod.util; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import java.io.BufferedReader; -import java.io.InputStreamReader; -import java.net.HttpURLConnection; -import java.net.URL; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Arrays; -import java.util.Date; -import java.util.UUID; -import me.totalfreedom.totalfreedommod.TotalFreedomMod; -import org.bukkit.ChatColor; -import org.bukkit.command.CommandSender; -import org.bukkit.scheduler.BukkitRunnable; - -public class History -{ - - public static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - - public static void reportHistory(final CommandSender sender, final String username) - { - new BukkitRunnable() - { - @Override - public void run() - { - UUID uuid = UUIDFetcher.fetch(username); - if (uuid != null) - { - Gson gson = new GsonBuilder().create(); - String compactUuid = uuid.toString().replace("-", ""); - try - { - //UUIDs or playernames actually work with this one - //TODO: fix the stupid api on how it's not working name histories - //URL url = new URL("https://api.ashcon.app/mojang/v2/user/" + compactUuid); - URL url = new URL("https://api.mojang.com/user/profiles/" + compactUuid + "/names"); - HttpURLConnection conn = (HttpURLConnection)url.openConnection(); - //conn.setRequestProperty("User-Agent", ""); - BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); - FName[] oldNames = gson.fromJson(reader, FName[].class); - if (oldNames == null) - { - FSync.playerMsg(sender, ChatColor.RED + "Player not found!"); - return; - } - reader.close(); - conn.disconnect(); - Arrays.sort(oldNames); - printHistory(sender, oldNames); - } - catch (Exception ex) - { - FSync.playerMsg(sender, ChatColor.RED + "Error, see logs for more details."); - FLog.severe(ex); - } - } - else - { - FSync.playerMsg(sender, ChatColor.RED + "Player not found!"); - } - } - }.runTaskAsynchronously(TotalFreedomMod.getPlugin()); - } - - private static void printHistory(CommandSender sender, FName[] oldNames) - { - if (oldNames.length == 1) - { - FSync.playerMsg(sender, ChatColor.GREEN + oldNames[0].getName() + ChatColor.GOLD + " has never changed their name."); - return; - } - FSync.playerMsg(sender, ChatColor.GOLD + "Original name: " + ChatColor.GREEN + oldNames[0].getName()); - for (int i = 1; i < oldNames.length; i++) - { - Date date = new Date(oldNames[i].getChangedToAt()); - String formattedDate = dateFormat.format(date); - FSync.playerMsg(sender, ChatColor.BLUE + formattedDate + ChatColor.GOLD + " changed to " + ChatColor.GREEN + oldNames[i].getName()); - } - } - - private static class FName implements Comparable - { - private final String name; - private final long changedToAt; - - //Added constructor because otherwise there's no way name or changedToAt would have been anything other than null. - public FName(String name, long changedToAt) - { - this.name = name; - this.changedToAt = changedToAt; - } - - @Override - public int compareTo(FName other) - { - return Long.compare(this.changedToAt, other.changedToAt); - } - - public String getName() - { - return name; - } - - public long getChangedToAt() - { - return changedToAt; - } - } +package me.totalfreedom.totalfreedommod.util; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Date; +import java.util.UUID; +import me.totalfreedom.totalfreedommod.TotalFreedomMod; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; +import org.bukkit.scheduler.BukkitRunnable; + +public class History +{ + + public static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public static void reportHistory(final CommandSender sender, final String username) + { + new BukkitRunnable() + { + @Override + public void run() + { + UUID uuid = UUIDFetcher.fetch(username); + if (uuid != null) + { + Gson gson = new GsonBuilder().create(); + String compactUuid = uuid.toString().replace("-", ""); + try + { + //UUIDs or playernames actually work with this one + //TODO: fix the stupid api on how it's not working name histories + //URL url = new URL("https://api.ashcon.app/mojang/v2/user/" + compactUuid); + URL url = new URL("https://api.mojang.com/user/profiles/" + compactUuid + "/names"); + HttpURLConnection conn = (HttpURLConnection)url.openConnection(); + //conn.setRequestProperty("User-Agent", ""); + BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); + FName[] oldNames = gson.fromJson(reader, FName[].class); + if (oldNames == null) + { + FSync.playerMsg(sender, ChatColor.RED + "Player not found!"); + return; + } + reader.close(); + conn.disconnect(); + Arrays.sort(oldNames); + printHistory(sender, oldNames); + } + catch (Exception ex) + { + FSync.playerMsg(sender, ChatColor.RED + "Error, see logs for more details."); + FLog.severe(ex); + } + } + else + { + FSync.playerMsg(sender, ChatColor.RED + "Player not found!"); + } + } + }.runTaskAsynchronously(TotalFreedomMod.getPlugin()); + } + + private static void printHistory(CommandSender sender, FName[] oldNames) + { + if (oldNames.length == 1) + { + FSync.playerMsg(sender, ChatColor.GREEN + oldNames[0].getName() + ChatColor.GOLD + " has never changed their name."); + return; + } + FSync.playerMsg(sender, ChatColor.GOLD + "Original name: " + ChatColor.GREEN + oldNames[0].getName()); + for (int i = 1; i < oldNames.length; i++) + { + Date date = new Date(oldNames[i].getChangedToAt()); + String formattedDate = dateFormat.format(date); + FSync.playerMsg(sender, ChatColor.BLUE + formattedDate + ChatColor.GOLD + " changed to " + ChatColor.GREEN + oldNames[i].getName()); + } + } + + private static class FName implements Comparable + { + private final String name; + private final long changedToAt; + + //Added constructor because otherwise there's no way name or changedToAt would have been anything other than null. + public FName(String name, long changedToAt) + { + this.name = name; + this.changedToAt = changedToAt; + } + + @Override + public int compareTo(FName other) + { + return Long.compare(this.changedToAt, other.changedToAt); + } + + public String getName() + { + return name; + } + + public long getChangedToAt() + { + return changedToAt; + } + } } \ No newline at end of file diff --git a/src/main/java/me/totalfreedom/totalfreedommod/util/UUIDFetcher.java b/src/main/java/me/totalfreedom/totalfreedommod/util/UUIDFetcher.java index 93f49e91..d0b4881f 100644 --- a/src/main/java/me/totalfreedom/totalfreedommod/util/UUIDFetcher.java +++ b/src/main/java/me/totalfreedom/totalfreedommod/util/UUIDFetcher.java @@ -1,68 +1,68 @@ -package me.totalfreedom.totalfreedommod.util; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.UUID; - -// UUIDFetcher retrieves UUIDs from usernames via web requests to Mojang. -public class UUIDFetcher -{ - - private static final String PROFILE_URL = "https://api.mojang.com/profiles/minecraft"; - - public static UUID fetch(String name) - { - try - { - Gson gson = new GsonBuilder().create(); - UUID uuid; - String body = gson.toJson(name); - URL url = new URL(PROFILE_URL); - HttpURLConnection connection = (HttpURLConnection)url.openConnection(); - connection.setRequestMethod("POST"); - connection.setRequestProperty("Content-Type", "application/json"); - connection.setUseCaches(false); - connection.setDoInput(true); - connection.setDoOutput(true); - OutputStream stream = connection.getOutputStream(); - stream.write(body.getBytes()); - stream.flush(); - stream.close(); - FetchedUuid[] id = gson.fromJson( - new InputStreamReader(connection.getInputStream()), - FetchedUuid[].class); - - if (id.length == 0 || id[0].getID() == null) - { - return null; - } - - String idd = id[0].getID(); - uuid = UUID.fromString(idd.substring(0, 8) + "-" + idd.substring(8, 12) - + "-" + idd.substring(12, 16) + "-" + idd.substring(16, 20) + "-" - + idd.substring(20, 32)); - return uuid; - } - catch (IOException ex) - { - FLog.severe(ex); - } - return null; - } - - private static class FetchedUuid - { - - private String id; - - public String getID() - { - return id; - } - } +package me.totalfreedom.totalfreedommod.util; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.UUID; + +// UUIDFetcher retrieves UUIDs from usernames via web requests to Mojang. +public class UUIDFetcher +{ + + private static final String PROFILE_URL = "https://api.mojang.com/profiles/minecraft"; + + public static UUID fetch(String name) + { + try + { + Gson gson = new GsonBuilder().create(); + UUID uuid; + String body = gson.toJson(name); + URL url = new URL(PROFILE_URL); + HttpURLConnection connection = (HttpURLConnection)url.openConnection(); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Content-Type", "application/json"); + connection.setUseCaches(false); + connection.setDoInput(true); + connection.setDoOutput(true); + OutputStream stream = connection.getOutputStream(); + stream.write(body.getBytes()); + stream.flush(); + stream.close(); + FetchedUuid[] id = gson.fromJson( + new InputStreamReader(connection.getInputStream()), + FetchedUuid[].class); + + if (id.length == 0 || id[0].getID() == null) + { + return null; + } + + String idd = id[0].getID(); + uuid = UUID.fromString(idd.substring(0, 8) + "-" + idd.substring(8, 12) + + "-" + idd.substring(12, 16) + "-" + idd.substring(16, 20) + "-" + + idd.substring(20, 32)); + return uuid; + } + catch (IOException ex) + { + FLog.severe(ex); + } + return null; + } + + private static class FetchedUuid + { + + private String id; + + public String getID() + { + return id; + } + } } \ No newline at end of file diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index b5ae79f4..64d30358 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -35,6 +35,9 @@ server: # All players who show up as executive executives: [ ] + + # All players who show up as assistant executive + assistant_executives: [] # All those who can manage the master builder list master_builder_management: [ ]