my end of the bargain

This commit is contained in:
Ivan 2021-02-25 16:42:30 -05:00
parent 3b666f1fde
commit 0367d9fd3a
22 changed files with 1221 additions and 1158 deletions

View File

@ -156,7 +156,7 @@
<dependency> <dependency>
<groupId>org.spigotmc</groupId> <groupId>org.spigotmc</groupId>
<artifactId>spigot</artifactId> <artifactId>spigot</artifactId>
<version>1.16.4-R0.1-SNAPSHOT</version> <version>1.16.5-R0.1-SNAPSHOT</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>

View File

@ -30,6 +30,7 @@ public class LoginProcess extends FreedomService
private static boolean lockdownEnabled = false; private static boolean lockdownEnabled = false;
public List<String> TELEPORT_ON_JOIN = new ArrayList<>(); public List<String> TELEPORT_ON_JOIN = new ArrayList<>();
public List<String> CLEAR_ON_JOIN = new ArrayList<>(); public List<String> CLEAR_ON_JOIN = new ArrayList<>();
public List<String> CLOWNFISH_TOGGLE = new ArrayList<>();
public static boolean isLockdownEnabled() public static boolean isLockdownEnabled()
{ {

View File

@ -1,61 +1,61 @@
package me.totalfreedom.totalfreedommod.blocking; package me.totalfreedom.totalfreedommod.blocking;
import me.totalfreedom.totalfreedommod.FreedomService; import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.player.FPlayer; import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.util.FSync; import me.totalfreedom.totalfreedommod.util.FSync;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.BlockPlaceEvent;
public class EditBlocker extends FreedomService public class EditBlocker extends FreedomService
{ {
@Override @Override
public void onStart() public void onStart()
{ {
} }
@Override @Override
public void onStop() public void onStop()
{ {
} }
@EventHandler(priority = EventPriority.LOW) @EventHandler(priority = EventPriority.LOW)
public void onBlockPlace(BlockPlaceEvent event) public void onBlockPlace(BlockPlaceEvent event)
{ {
FPlayer fPlayer = plugin.pl.getPlayerSync(event.getPlayer()); FPlayer fPlayer = plugin.pl.getPlayerSync(event.getPlayer());
if (!fPlayer.isEditBlocked()) if (!fPlayer.isEditBlocked())
{ {
return; return;
} }
if (plugin.al.isAdminSync(event.getPlayer())) if (plugin.al.isAdminSync(event.getPlayer()))
{ {
fPlayer.setEditBlocked(false); fPlayer.setEditBlocked(false);
return; return;
} }
FSync.playerMsg(event.getPlayer(), ChatColor.RED + "Your ability to place blocks has been disabled!"); FSync.playerMsg(event.getPlayer(), ChatColor.RED + "Your ability to place blocks has been disabled!");
event.setCancelled(true); event.setCancelled(true);
} }
@EventHandler(priority = EventPriority.LOW) @EventHandler(priority = EventPriority.LOW)
public void onBlockBreak(BlockBreakEvent event) public void onBlockBreak(BlockBreakEvent event)
{ {
FPlayer fPlayer = plugin.pl.getPlayerSync(event.getPlayer()); FPlayer fPlayer = plugin.pl.getPlayerSync(event.getPlayer());
if (!fPlayer.isEditBlocked()) if (!fPlayer.isEditBlocked())
{ {
return; return;
} }
if (plugin.al.isAdminSync(event.getPlayer())) if (plugin.al.isAdminSync(event.getPlayer()))
{ {
fPlayer.setEditBlocked(false); fPlayer.setEditBlocked(false);
return; return;
} }
FSync.playerMsg(event.getPlayer(), ChatColor.RED + "Your ability to destroy blocks has been disabled!"); FSync.playerMsg(event.getPlayer(), ChatColor.RED + "Your ability to destroy blocks has been disabled!");
event.setCancelled(true); event.setCancelled(true);
} }
} }

View File

@ -6,6 +6,7 @@ import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import me.totalfreedom.totalfreedommod.LoginProcess;
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME) @CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Obtain a clown fish", usage = "/<command>") @CommandParameters(description = "Obtain a clown fish", usage = "/<command>")
@ -15,14 +16,14 @@ public class Command_clownfish extends FreedomCommand
@Override @Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) 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()); playerSender.getInventory().addItem(plugin.sh.getClownFish());
msg("You have been given a Clown Fish", ChatColor.GREEN); msg("You have been given a Clown Fish", ChatColor.GREEN);
} }
else 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; return true;
} }

View File

@ -1,54 +1,54 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.PlayerData; import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.OP, source = SourceType.BOTH) @CommandPermissions(level = Rank.OP, source = SourceType.BOTH)
@CommandParameters(description = "Shows the amount of coins you have or another player has", usage = "/<command> [playername]") @CommandParameters(description = "Shows the amount of coins you have or another player has", usage = "/<command> [playername]")
public class Command_coins extends FreedomCommand public class Command_coins extends FreedomCommand
{ {
@Override @Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
if (!ConfigEntry.SHOP_ENABLED.getBoolean()) if (!ConfigEntry.SHOP_ENABLED.getBoolean())
{ {
msg("The shop is currently disabled!", ChatColor.RED); msg("The shop is currently disabled!", ChatColor.RED);
return true; return true;
} }
Player p; Player p;
final String prefix = FUtil.colorize(ConfigEntry.SHOP_PREFIX.getString() + " "); final String prefix = FUtil.colorize(ConfigEntry.SHOP_PREFIX.getString() + " ");
if (args.length > 0) if (args.length > 0)
{ {
if (getPlayer(args[0]) != null) if (getPlayer(args[0]) != null)
{ {
p = getPlayer(args[0]); p = getPlayer(args[0]);
} }
else else
{ {
msg(PLAYER_NOT_FOUND); msg(PLAYER_NOT_FOUND);
return true; return true;
} }
} }
else else
{ {
if (senderIsConsole) if (senderIsConsole)
{ {
msg(prefix + ChatColor.RED + "You are not a player, use /coins <playername>"); msg(prefix + ChatColor.RED + "You are not a player, use /coins <playername>");
return true; return true;
} }
else else
{ {
p = playerSender; p = playerSender;
} }
} }
PlayerData playerData = plugin.pl.getData(p); 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."); msg(prefix + ChatColor.GREEN + (args.length > 0 ? p.getName() + " has " : "You have ") + ChatColor.RED + playerData.getCoins() + ChatColor.GREEN + " coins.");
return true; return true;
} }
} }

View File

@ -1,69 +1,69 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
@CommandPermissions(level = Rank.SENIOR_ADMIN, source = SourceType.BOTH) @CommandPermissions(level = Rank.SENIOR_ADMIN, source = SourceType.BOTH)
@CommandParameters(description = "Surprise someone.", usage = "/<command> <player>") @CommandParameters(description = "Surprise someone.", usage = "/<command> <player>")
public class Command_explode extends FreedomCommand public class Command_explode extends FreedomCommand
{ {
@Override @Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
if (args.length == 0) if (args.length == 0)
{ {
return false; return false;
} }
final Player player = getPlayer(args[0]); final Player player = getPlayer(args[0]);
if (player == null) if (player == null)
{ {
msg(FreedomCommand.PLAYER_NOT_FOUND); msg(FreedomCommand.PLAYER_NOT_FOUND);
return true; return true;
} }
player.setFlying(false); player.setFlying(false);
player.setVelocity(player.getVelocity().clone().add(new Vector(0, 50, 0))); player.setVelocity(player.getVelocity().clone().add(new Vector(0, 50, 0)));
for (int i = 1; i <= 3; i++) for (int i = 1; i <= 3; i++)
{ {
FUtil.createExplosionOnDelay(player.getLocation(), 2L, i * 10); FUtil.createExplosionOnDelay(player.getLocation(), 2L, i * 10);
} }
new BukkitRunnable() new BukkitRunnable()
{ {
@Override @Override
public void run() public void run()
{ {
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
{ {
player.getWorld().strikeLightning(player.getLocation()); player.getWorld().strikeLightning(player.getLocation());
player.getWorld().createExplosion(player.getLocation(), 4L); player.getWorld().createExplosion(player.getLocation(), 4L);
} }
player.setHealth(0.0); player.setHealth(0.0);
msg("Exploded " + player.getName()); msg("Exploded " + player.getName());
} }
}.runTaskLater(plugin, 40); }.runTaskLater(plugin, 40);
return true; return true;
} }
@Override @Override
public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args) public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args)
{ {
if (args.length == 1 && plugin.al.isAdmin(sender)) if (args.length == 1 && plugin.al.isAdmin(sender))
{ {
return FUtil.getPlayerList(); return FUtil.getPlayerList();
} }
return Collections.emptyList(); return Collections.emptyList();
} }
} }

View File

@ -21,8 +21,13 @@ public class Command_fuckoff extends FreedomCommand
FPlayer player = plugin.pl.getPlayer(playerSender); FPlayer player = plugin.pl.getPlayer(playerSender);
if (args[0].equalsIgnoreCase("off")) if (!args[0].equals("on"))
{ {
player.disableFuckoff();
}
else
{
double radius = 25.0; double radius = 25.0;
if (args.length >= 2) if (args.length >= 2)
{ {
@ -34,14 +39,12 @@ public class Command_fuckoff extends FreedomCommand
{ {
} }
} }
player.setFuckoff(radius); player.setFuckoff(radius);
} }
else
{
player.disableFuckoff();
}
msg("Fuckoff " + (player.isFuckOff() ? ("enabled. Radius: " + player.getFuckoffRadius() + ".") : "disabled.")); msg("Fuckoff " + (player.isFuckOff() ? ("enabled. Radius: " + player.getFuckoffRadius() + ".") : "disabled."));
return true; return true;
} }
} }

View File

@ -1,219 +1,219 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.player.PlayerData; import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.shop.ShopItem; import me.totalfreedom.totalfreedommod.shop.ShopItem;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.SENIOR_ADMIN, source = SourceType.ONLY_CONSOLE) @CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
@CommandParameters(description = "Manage the shop", usage = "/<command> <coins: <add | set | remove> <amount> <player | all> | items: <give | take> <item> <player>", aliases = "ms") @CommandParameters(description = "Manage the shop", usage = "/<command> <coins: <add | set | remove> <amount> <player | all> | items: <give | take> <item> <player>", aliases = "ms")
public class Command_manageshop extends FreedomCommand public class Command_manageshop extends FreedomCommand
{ {
@Override @Override
public boolean run(final CommandSender sender, final Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(final CommandSender sender, final Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
if (!FUtil.isExecutive(sender.getName())) if (!FUtil.isExecutive(sender.getName()))
{ {
return noPerms(); return noPerms();
} }
if (args.length < 2) if (args.length < 2)
{ {
return false; return false;
} }
if (args[0].equals("coins")) if (args[0].equals("coins"))
{ {
if (args.length < 4) if (args.length < 4)
{ {
return false; return false;
} }
switch (args[1]) switch (args[1])
{ {
case "add": case "add":
try try
{ {
int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2]))); int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2])));
if (!args[3].equals("all")) if (!args[3].equals("all"))
{ {
PlayerData playerData = plugin.pl.getData(args[3]); PlayerData playerData = plugin.pl.getData(args[3]);
if (playerData == null) if (playerData == null)
{ {
msg(PLAYER_NOT_FOUND); msg(PLAYER_NOT_FOUND);
return true; return true;
} }
playerData.setCoins(playerData.getCoins() + amount); playerData.setCoins(playerData.getCoins() + amount);
plugin.pl.save(playerData); plugin.pl.save(playerData);
msg("Successfully added " + amount + " coins to " + args[3] + ". Their new balance is " + playerData.getCoins(), ChatColor.GREEN); msg("Successfully added " + amount + " coins to " + args[3] + ". Their new balance is " + playerData.getCoins(), ChatColor.GREEN);
Player player = getPlayer(args[3]); Player player = getPlayer(args[3]);
if (player != null) if (player != null)
{ {
player.sendMessage(ChatColor.GREEN + sender.getName() + " gave you " + amount + " coins. Your new balance is " + playerData.getCoins()); player.sendMessage(ChatColor.GREEN + sender.getName() + " gave you " + amount + " coins. Your new balance is " + playerData.getCoins());
} }
} }
else else
{ {
for (Player player : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
PlayerData playerData = plugin.pl.getData(player); PlayerData playerData = plugin.pl.getData(player);
playerData.setCoins(playerData.getCoins() + amount); playerData.setCoins(playerData.getCoins() + amount);
plugin.pl.save(playerData); plugin.pl.save(playerData);
player.sendMessage(ChatColor.GREEN + sender.getName() + " gave you " + amount + " coins. Your new balance is " + playerData.getCoins()); 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); msg("Successfully added " + amount + " coins to all online players.", ChatColor.GREEN);
} }
return true; return true;
} }
catch (NumberFormatException ex) catch (NumberFormatException ex)
{ {
msg("Invalid number: " + args[2], ChatColor.RED); msg("Invalid number: " + args[2], ChatColor.RED);
return true; return true;
} }
case "remove": case "remove":
try try
{ {
int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2]))); int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2])));
if (!args[3].equals("all")) if (!args[3].equals("all"))
{ {
PlayerData playerData = plugin.pl.getData(args[3]); PlayerData playerData = plugin.pl.getData(args[3]);
if (playerData == null) if (playerData == null)
{ {
msg(PLAYER_NOT_FOUND); msg(PLAYER_NOT_FOUND);
return true; return true;
} }
playerData.setCoins(playerData.getCoins() - amount); playerData.setCoins(playerData.getCoins() - amount);
if (playerData.getCoins() < 0) if (playerData.getCoins() < 0)
{ {
playerData.setCoins(0); playerData.setCoins(0);
} }
plugin.pl.save(playerData); plugin.pl.save(playerData);
msg("Successfully removed " + amount + " coins from " + args[3] + ". Their new balance is " + playerData.getCoins(), ChatColor.GREEN); msg("Successfully removed " + amount + " coins from " + args[3] + ". Their new balance is " + playerData.getCoins(), ChatColor.GREEN);
Player player = getPlayer(args[3]); Player player = getPlayer(args[3]);
if (player != null) if (player != null)
{ {
player.sendMessage(ChatColor.RED + sender.getName() + " took " + amount + " coins from you. Your new balance is " + playerData.getCoins()); player.sendMessage(ChatColor.RED + sender.getName() + " took " + amount + " coins from you. Your new balance is " + playerData.getCoins());
} }
} }
else else
{ {
for (Player player : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
PlayerData playerData = plugin.pl.getData(player); PlayerData playerData = plugin.pl.getData(player);
playerData.setCoins(playerData.getCoins() - amount); playerData.setCoins(playerData.getCoins() - amount);
if (playerData.getCoins() < 0) if (playerData.getCoins() < 0)
{ {
playerData.setCoins(0); playerData.setCoins(0);
} }
plugin.pl.save(playerData); plugin.pl.save(playerData);
player.sendMessage(ChatColor.RED + sender.getName() + " took " + amount + " coins from you. Your new balance is " + playerData.getCoins()); 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); msg("Successfully took " + amount + " coins from all online players.", ChatColor.GREEN);
} }
return true; return true;
} }
catch (NumberFormatException ex) catch (NumberFormatException ex)
{ {
msg("Invalid number: " + args[2], ChatColor.RED); msg("Invalid number: " + args[2], ChatColor.RED);
return true; return true;
} }
case "set": case "set":
try try
{ {
int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2]))); int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2])));
PlayerData playerData = plugin.pl.getData(args[3]); PlayerData playerData = plugin.pl.getData(args[3]);
if (playerData == null) if (playerData == null)
{ {
msg(PLAYER_NOT_FOUND); msg(PLAYER_NOT_FOUND);
return true; return true;
} }
playerData.setCoins(amount); playerData.setCoins(amount);
plugin.pl.save(playerData); plugin.pl.save(playerData);
msg("Successfully set " + args[3] + "'s coins to " + amount, ChatColor.GREEN); msg("Successfully set " + args[3] + "'s coins to " + amount, ChatColor.GREEN);
Player player = getPlayer(args[3]); Player player = getPlayer(args[3]);
if (player != null) if (player != null)
{ {
player.sendMessage(ChatColor.GREEN + sender.getName() + " set your coin balance to " + amount); player.sendMessage(ChatColor.GREEN + sender.getName() + " set your coin balance to " + amount);
} }
return true; return true;
} }
catch (NumberFormatException ex) catch (NumberFormatException ex)
{ {
msg("Invalid number: " + args[2], ChatColor.RED); msg("Invalid number: " + args[2], ChatColor.RED);
return true; return true;
} }
} }
} }
else if (args[0].equals("items")) else if (args[0].equals("items"))
{ {
if (args[1].equals("list")) if (args[1].equals("list"))
{ {
msg("List of all shop items: " + StringUtils.join(ShopItem.values(), ", ")); msg("List of all shop items: " + StringUtils.join(ShopItem.values(), ", "));
return true; return true;
} }
if (args.length < 4) if (args.length < 4)
{ {
return false; return false;
} }
if (args[1].equals("give")) if (args[1].equals("give"))
{ {
ShopItem item = ShopItem.findItem(args[2].toUpperCase()); ShopItem item = ShopItem.findItem(args[2].toUpperCase());
if (item == null) if (item == null)
{ {
msg(args[2] + " is not a valid item.", ChatColor.RED); msg(args[2] + " is not a valid item.", ChatColor.RED);
return true; return true;
} }
PlayerData playerData = plugin.pl.getData(args[3]); PlayerData playerData = plugin.pl.getData(args[3]);
if (playerData == null) if (playerData == null)
{ {
msg(PLAYER_NOT_FOUND); msg(PLAYER_NOT_FOUND);
return true; return true;
} }
playerData.giveItem(item); playerData.giveItem(item);
plugin.pl.save(playerData); plugin.pl.save(playerData);
msg("Successfully gave the " + item.getName() + " to " + args[3], ChatColor.GREEN); msg("Successfully gave the " + item.getName() + " to " + args[3], ChatColor.GREEN);
Player player = getPlayer(args[3]); Player player = getPlayer(args[3]);
if (player != null) if (player != null)
{ {
player.sendMessage(ChatColor.GREEN + sender.getName() + " gave the " + item.getName() + " to you"); player.sendMessage(ChatColor.GREEN + sender.getName() + " gave the " + item.getName() + " to you");
} }
return true; return true;
} }
else if (args[1].equals("take")) else if (args[1].equals("take"))
{ {
ShopItem item = ShopItem.findItem(args[2].toUpperCase()); ShopItem item = ShopItem.findItem(args[2].toUpperCase());
if (item == null) if (item == null)
{ {
msg(args[2] + " is not a valid item.", ChatColor.RED); msg(args[2] + " is not a valid item.", ChatColor.RED);
return true; return true;
} }
PlayerData playerData = plugin.pl.getData(args[3]); PlayerData playerData = plugin.pl.getData(args[3]);
if (playerData == null) if (playerData == null)
{ {
msg(PLAYER_NOT_FOUND); msg(PLAYER_NOT_FOUND);
return true; return true;
} }
playerData.removeItem(item); playerData.removeItem(item);
plugin.pl.save(playerData); plugin.pl.save(playerData);
msg("Successfully took the " + item.getName() + " from " + args[3], ChatColor.GREEN); msg("Successfully took the " + item.getName() + " from " + args[3], ChatColor.GREEN);
Player player = getPlayer(args[3]); Player player = getPlayer(args[3]);
if (player != null) if (player != null)
{ {
player.sendMessage(ChatColor.RED + sender.getName() + " took the " + item.getName() + " from you"); player.sendMessage(ChatColor.RED + sender.getName() + " took the " + item.getName() + " from you");
} }
return true; return true;
} }
} }
return false; return false;
} }
} }

View File

@ -1,23 +1,23 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.History; import me.totalfreedom.totalfreedommod.util.History;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.OP, source = SourceType.BOTH) @CommandPermissions(level = Rank.OP, source = SourceType.BOTH)
@CommandParameters(description = "Check the name history of a specified player.", usage = "/<command> <username>", aliases = "nh") @CommandParameters(description = "Check the name history of a specified player.", usage = "/<command> <username>", aliases = "nh")
public class Command_namehistory extends FreedomCommand public class Command_namehistory extends FreedomCommand
{ {
@Override @Override
public boolean run(final CommandSender sender, final Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(final CommandSender sender, final Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
if (args.length != 1) if (args.length != 1)
{ {
return false; return false;
} }
History.reportHistory(sender, args[0]); History.reportHistory(sender, args[0]);
return true; return true;
} }
} }

View File

@ -1,62 +1,62 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Particle; import org.bukkit.Particle;
import org.bukkit.Sound; import org.bukkit.Sound;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.SENIOR_ADMIN, source = SourceType.BOTH) @CommandPermissions(level = Rank.SENIOR_ADMIN, source = SourceType.BOTH)
@CommandParameters(description = "Sends a guardian particle effect with an enderman scream to the specified player.", usage = "/<command> <player>") @CommandParameters(description = "Sends a guardian particle effect with an enderman scream to the specified player.", usage = "/<command> <player>")
public class Command_scare extends FreedomCommand public class Command_scare extends FreedomCommand
{ {
@Override @Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
if (!FUtil.isPaper()) if (!FUtil.isPaper())
{ {
msg("This command won't work without Paper!", ChatColor.RED); msg("This command won't work without Paper!", ChatColor.RED);
return true; return true;
} }
if (args.length == 0) if (args.length == 0)
{ {
return false; return false;
} }
final Player player = getPlayer(args[0]); final Player player = getPlayer(args[0]);
if (player == null) if (player == null)
{ {
msg(FreedomCommand.PLAYER_NOT_FOUND); msg(FreedomCommand.PLAYER_NOT_FOUND);
return true; return true;
} }
msg("Scared " + player.getName()); msg("Scared " + player.getName());
player.sendMessage(ChatColor.RED + "ZING"); player.sendMessage(ChatColor.RED + "ZING");
player.spawnParticle(Particle.MOB_APPEARANCE, player.getLocation(), 4); player.spawnParticle(Particle.MOB_APPEARANCE, player.getLocation(), 4);
for (int i = 0; i < 10; ++i) for (int i = 0; i < 10; ++i)
{ {
player.playSound(player.getLocation(), Sound.ENTITY_ENDERMAN_SCREAM, 1, 0); player.playSound(player.getLocation(), Sound.ENTITY_ENDERMAN_SCREAM, 1, 0);
} }
return true; return true;
} }
@Override @Override
public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args) public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args)
{ {
if (args.length == 1 && plugin.al.isAdmin(sender)) if (args.length == 1 && plugin.al.isAdmin(sender))
{ {
return FUtil.getPlayerList(); return FUtil.getPlayerList();
} }
return Collections.emptyList(); return Collections.emptyList();
} }
} }

View File

@ -1,28 +1,28 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.OP, source = SourceType.BOTH) @CommandPermissions(level = Rank.OP, source = SourceType.BOTH)
@CommandParameters(description = "Check the status of the server, including opped players, admins, etc.", usage = "/<command>", aliases = "ss") @CommandParameters(description = "Check the status of the server, including opped players, admins, etc.", usage = "/<command>", aliases = "ss")
public class Command_serverstats extends FreedomCommand public class Command_serverstats extends FreedomCommand
{ {
@Override @Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) 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("-==" + ConfigEntry.SERVER_NAME.getString() + " server stats==-", ChatColor.GOLD);
msg("Total opped players: " + server.getOperators().size(), ChatColor.RED); msg("Total opped players: " + server.getOperators().size(), ChatColor.RED);
msg("Total admins: " + plugin.al.getAllAdmins().size() + " (" + plugin.al.getActiveAdmins().size() + " active)", ChatColor.BLUE); msg("Total admins: " + plugin.al.getAllAdmins().size() + " (" + plugin.al.getActiveAdmins().size() + " active)", ChatColor.BLUE);
int bans = plugin.im.getIndefBans().size(); int bans = plugin.im.getIndefBans().size();
int nameBans = plugin.im.getNameBanCount(); int nameBans = plugin.im.getNameBanCount();
int uuidBans = plugin.im.getUuidBanCount(); int uuidBans = plugin.im.getUuidBanCount();
int ipBans = plugin.im.getIpBanCount(); int ipBans = plugin.im.getIpBanCount();
msg("Total indefinite ban entries: " + bans + " (" + nameBans + " name bans, " + uuidBans + " UUID bans, and " + ipBans + " IP bans)", ChatColor.GREEN); msg("Total indefinite ban entries: " + bans + " (" + nameBans + " name bans, " + uuidBans + " UUID bans, and " + ipBans + " IP bans)", ChatColor.GREEN);
return true; return true;
} }
} }

View File

@ -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 = "/<command> <player>", 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;
}
}

View File

@ -1,34 +1,34 @@
package me.totalfreedom.totalfreedommod.command; package me.totalfreedom.totalfreedommod.command;
import java.util.List; import java.util.List;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.OP, source = SourceType.BOTH) @CommandPermissions(level = Rank.OP, source = SourceType.BOTH)
@CommandParameters(description = "Information on how to vote", usage = "/<command>") @CommandParameters(description = "Information on how to vote", usage = "/<command>")
public class Command_vote extends FreedomCommand public class Command_vote extends FreedomCommand
{ {
@Override @Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole) public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{ {
List<String> voteInfo = ConfigEntry.VOTING_INFO.getStringList(); List<String> voteInfo = ConfigEntry.VOTING_INFO.getStringList();
if (voteInfo.isEmpty()) if (voteInfo.isEmpty())
{ {
msg("The voting information section of the config.yml file has not been configured.", ChatColor.RED); msg("The voting information section of the config.yml file has not been configured.", ChatColor.RED);
} }
else else
{ {
msg(FUtil.colorize(StringUtils.join(voteInfo, "\n"))); msg(FUtil.colorize(StringUtils.join(voteInfo, "\n")));
} }
return true; return true;
} }
} }

View File

@ -57,6 +57,7 @@ public enum ConfigEntry
SERVER_LOGIN_SUBTITLE(String.class, "server.login_title.subtitle"), SERVER_LOGIN_SUBTITLE(String.class, "server.login_title.subtitle"),
SERVER_OWNERS(List.class, "server.owners"), SERVER_OWNERS(List.class, "server.owners"),
SERVER_EXECUTIVES(List.class, "server.executives"), 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_MASTER_BUILDER_MANAGEMENT(List.class, "server.master_builder_management"),
SERVER_BAN_URL(String.class, "server.ban_url"), SERVER_BAN_URL(String.class, "server.ban_url"),
SERVER_INDEFBAN_URL(String.class, "server.indefban_url"), SERVER_INDEFBAN_URL(String.class, "server.indefban_url"),

View File

@ -402,6 +402,11 @@ public class Discord extends FreedomService
{ {
return; return;
} }
if (message.contains("§"))
{
message = StringUtils.remove(message, "§");
}
if (enabled && !chat_channel_id.isEmpty()) if (enabled && !chat_channel_id.isEmpty())
{ {
@ -422,6 +427,11 @@ public class Discord extends FreedomService
{ {
return; return;
} }
if (message.contains("§"))
{
message = StringUtils.remove(message, "§");
}
if (enabled && !chat_channel_id.isEmpty()) if (enabled && !chat_channel_id.isEmpty())
{ {

View File

@ -13,6 +13,7 @@ import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.player.PlayerData; import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.shop.ShopItem; import me.totalfreedom.totalfreedommod.shop.ShopItem;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import me.totalfreedom.totalfreedommod.LoginProcess;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Color; import org.bukkit.Color;
import org.bukkit.FireworkEffect; import org.bukkit.FireworkEffect;
@ -247,6 +248,12 @@ public class ItemFun extends FreedomService
{ {
final int RADIUS_HIT = 5; final int RADIUS_HIT = 5;
final int STRENGTH = 4; 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())) if (!plugin.sh.isRealItem(plugin.pl.getData(player), ShopItem.CLOWN_FISH, player.getInventory(), plugin.sh.getClownFish()))
{ {

View File

@ -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), 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), 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), 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), 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; private final String article;

View File

@ -1,425 +1,425 @@
package me.totalfreedom.totalfreedommod.shop; package me.totalfreedom.totalfreedommod.shop;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import me.totalfreedom.totalfreedommod.FreedomService; import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.PlayerData; import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.util.FLog; import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.boss.BarColor; import org.bukkit.boss.BarColor;
import org.bukkit.boss.BarStyle; import org.bukkit.boss.BarStyle;
import org.bukkit.boss.BossBar; import org.bukkit.boss.BossBar;
import org.bukkit.enchantments.Enchantment; import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.inventory.Inventory; import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory; import org.bukkit.inventory.PlayerInventory;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask; import org.bukkit.scheduler.BukkitTask;
public class Shop extends FreedomService public class Shop extends FreedomService
{ {
public final int coinsPerReactionWin = ConfigEntry.SHOP_REACTIONS_COINS_PER_WIN.getInteger(); public final int coinsPerReactionWin = ConfigEntry.SHOP_REACTIONS_COINS_PER_WIN.getInteger();
public final String prefix = ChatColor.DARK_GRAY + "[" + ChatColor.YELLOW + "Reaction" + ChatColor.DARK_GRAY + "] "; 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"; private final String LOGIN_MESSAGE_GUI_TITLE = ChatColor.DARK_GREEN + ChatColor.BOLD.toString() + "Login Messages";
public String reactionString = ""; public String reactionString = "";
public Date reactionStartTime; public Date reactionStartTime;
public BukkitTask countdownTask; public BukkitTask countdownTask;
private BukkitTask reactions; private BukkitTask reactions;
private BossBar countdownBar = null; private BossBar countdownBar = null;
@Override @Override
public void onStart() public void onStart()
{ {
if (ConfigEntry.SHOP_REACTIONS_ENABLED.getBoolean()) if (ConfigEntry.SHOP_REACTIONS_ENABLED.getBoolean())
{ {
startReactionTimer(); startReactionTimer();
} }
} }
public void startReactionTimer() public void startReactionTimer()
{ {
long interval = ConfigEntry.SHOP_REACTIONS_INTERVAL.getInteger() * 20L; long interval = ConfigEntry.SHOP_REACTIONS_INTERVAL.getInteger() * 20L;
reactions = new BukkitRunnable() reactions = new BukkitRunnable()
{ {
@Override @Override
public void run() public void run()
{ {
startReaction(); startReaction();
} }
}.runTaskLater(plugin, interval); }.runTaskLater(plugin, interval);
} }
public void forceStartReaction() public void forceStartReaction()
{ {
reactions.cancel(); reactions.cancel();
startReaction(); startReaction();
} }
public void startReaction() public void startReaction()
{ {
if (!ConfigEntry.SHOP_ENABLED.getBoolean()) if (!ConfigEntry.SHOP_ENABLED.getBoolean())
{ {
FLog.debug("The shop is not enabled, therefore a reaction did not start."); FLog.debug("The shop is not enabled, therefore a reaction did not start.");
return; return;
} }
reactionString = FUtil.randomAlphanumericString(ConfigEntry.SHOP_REACTIONS_STRING_LENGTH.getInteger()); 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); FUtil.bcastMsg(prefix + ChatColor.AQUA + "Enter the code above to win " + ChatColor.GOLD + coinsPerReactionWin + ChatColor.AQUA + " coins!", false);
reactionStartTime = new Date(); reactionStartTime = new Date();
countdownBar = server.createBossBar(reactionString, BarColor.GREEN, BarStyle.SOLID); countdownBar = server.createBossBar(reactionString, BarColor.GREEN, BarStyle.SOLID);
for (Player player : server.getOnlinePlayers()) for (Player player : server.getOnlinePlayers())
{ {
countdownBar.addPlayer(player); countdownBar.addPlayer(player);
} }
countdownBar.setVisible(true); countdownBar.setVisible(true);
countdownTask = new BukkitRunnable() countdownTask = new BukkitRunnable()
{ {
double seconds = 30; double seconds = 30;
final double max = seconds; final double max = seconds;
@Override @Override
public void run() public void run()
{ {
if ((seconds -= 1) == 0) if ((seconds -= 1) == 0)
{ {
endReaction(null); endReaction(null);
} }
else else
{ {
countdownBar.setProgress(seconds / max); countdownBar.setProgress(seconds / max);
if (!countdownBar.getColor().equals(BarColor.YELLOW) && seconds / max <= 0.25) if (!countdownBar.getColor().equals(BarColor.YELLOW) && seconds / max <= 0.25)
{ {
countdownBar.setColor(BarColor.YELLOW); countdownBar.setColor(BarColor.YELLOW);
} }
} }
} }
}.runTaskTimer(plugin, 0, 20); }.runTaskTimer(plugin, 0, 20);
} }
public void endReaction(String winner) public void endReaction(String winner)
{ {
countdownTask.cancel(); countdownTask.cancel();
countdownBar.removeAll(); countdownBar.removeAll();
countdownBar = null; countdownBar = null;
reactionString = ""; reactionString = "";
if (winner != null) if (winner != null)
{ {
Date currentTime = new Date(); Date currentTime = new Date();
long seconds = (currentTime.getTime() - reactionStartTime.getTime()) / 1000; long seconds = (currentTime.getTime() - reactionStartTime.getTime()) / 1000;
FUtil.bcastMsg(prefix + ChatColor.GREEN + winner + ChatColor.AQUA + " won in " + seconds + " seconds!", false); FUtil.bcastMsg(prefix + ChatColor.GREEN + winner + ChatColor.AQUA + " won in " + seconds + " seconds!", false);
startReactionTimer(); startReactionTimer();
return; return;
} }
FUtil.bcastMsg(prefix + ChatColor.RED + "No one reacted fast enough", false); FUtil.bcastMsg(prefix + ChatColor.RED + "No one reacted fast enough", false);
startReactionTimer(); startReactionTimer();
} }
@Override @Override
public void onStop() public void onStop()
{ {
if (ConfigEntry.SHOP_REACTIONS_ENABLED.getBoolean()) if (ConfigEntry.SHOP_REACTIONS_ENABLED.getBoolean())
{ {
reactions.cancel(); reactions.cancel();
} }
} }
public String getShopPrefix() public String getShopPrefix()
{ {
return FUtil.colorize(ConfigEntry.SHOP_PREFIX.getString()); return FUtil.colorize(ConfigEntry.SHOP_PREFIX.getString());
} }
public String getShopTitle() public String getShopTitle()
{ {
return FUtil.colorize(ConfigEntry.SHOP_TITLE.getString()); return FUtil.colorize(ConfigEntry.SHOP_TITLE.getString());
} }
public Inventory generateShopGUI(PlayerData playerData) public Inventory generateShopGUI(PlayerData playerData)
{ {
Inventory gui = server.createInventory(null, 36, getShopTitle()); Inventory gui = server.createInventory(null, 36, getShopTitle());
for (int slot = 0; slot < 36; slot++) for (int slot = 0; slot < 36; slot++)
{ {
ItemStack blank = new ItemStack(Material.WHITE_STAINED_GLASS_PANE); ItemStack blank = new ItemStack(Material.WHITE_STAINED_GLASS_PANE);
ItemMeta meta = blank.getItemMeta(); ItemMeta meta = blank.getItemMeta();
assert meta != null; assert meta != null;
meta.setDisplayName(" "); meta.setDisplayName(" ");
blank.setItemMeta(meta); blank.setItemMeta(meta);
gui.setItem(slot, blank); gui.setItem(slot, blank);
} }
for (ShopItem shopItem : ShopItem.values()) for (ShopItem shopItem : ShopItem.values())
{ {
ItemStack item = shopGUIItem(shopItem, playerData); ItemStack item = shopGUIItem(shopItem, playerData);
gui.setItem(shopItem.getSlot(), item); gui.setItem(shopItem.getSlot(), item);
} }
// Coins // Coins
ItemStack coins = new ItemStack(Material.GOLD_NUGGET); ItemStack coins = new ItemStack(Material.GOLD_NUGGET);
ItemMeta meta = coins.getItemMeta(); ItemMeta meta = coins.getItemMeta();
assert meta != null; assert meta != null;
meta.setDisplayName(FUtil.colorize("&c&lYou have &e&l" + playerData.getCoins() + "&c&l coins")); meta.setDisplayName(FUtil.colorize("&c&lYou have &e&l" + playerData.getCoins() + "&c&l coins"));
coins.setItemMeta(meta); coins.setItemMeta(meta);
gui.setItem(35, coins); gui.setItem(35, coins);
return gui; return gui;
} }
public Inventory generateLoginMessageGUI(Player player) public Inventory generateLoginMessageGUI(Player player)
{ {
Inventory gui = server.createInventory(null, 36, LOGIN_MESSAGE_GUI_TITLE); Inventory gui = server.createInventory(null, 36, LOGIN_MESSAGE_GUI_TITLE);
int slot = 0; int slot = 0;
for (String loginMessage : ConfigEntry.SHOP_LOGIN_MESSAGES.getStringList()) for (String loginMessage : ConfigEntry.SHOP_LOGIN_MESSAGES.getStringList())
{ {
ItemStack icon = new ItemStack(Material.NAME_TAG); ItemStack icon = new ItemStack(Material.NAME_TAG);
ItemMeta meta = icon.getItemMeta(); ItemMeta meta = icon.getItemMeta();
assert meta != null; assert meta != null;
meta.setDisplayName(FUtil.colorize(plugin.rm.craftLoginMessage(player, loginMessage))); meta.setDisplayName(FUtil.colorize(plugin.rm.craftLoginMessage(player, loginMessage)));
icon.setItemMeta(meta); icon.setItemMeta(meta);
gui.setItem(slot, icon); gui.setItem(slot, icon);
slot++; slot++;
} }
ItemStack clear = new ItemStack(Material.BARRIER); ItemStack clear = new ItemStack(Material.BARRIER);
ItemMeta meta = clear.getItemMeta(); ItemMeta meta = clear.getItemMeta();
assert meta != null; assert meta != null;
meta.setDisplayName(ChatColor.RED + "Clear login message"); meta.setDisplayName(ChatColor.RED + "Clear login message");
clear.setItemMeta(meta); clear.setItemMeta(meta);
gui.setItem(35, clear); gui.setItem(35, clear);
return gui; return gui;
} }
public boolean isRealItem(PlayerData data, ShopItem shopItem, PlayerInventory inventory, ItemStack realItem) public boolean isRealItem(PlayerData data, ShopItem shopItem, PlayerInventory inventory, ItemStack realItem)
{ {
return isRealItem(data, shopItem, inventory.getItemInMainHand(), realItem) || isRealItem(data, shopItem, inventory.getItemInOffHand(), 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) public boolean isRealItem(PlayerData data, ShopItem shopItem, ItemStack givenItem, ItemStack realItem)
{ {
if (!data.hasItem(shopItem) || !givenItem.getType().equals(realItem.getType())) if (!data.hasItem(shopItem) || !givenItem.getType().equals(realItem.getType()))
{ {
return false; return false;
} }
ItemMeta givenMeta = givenItem.getItemMeta(); ItemMeta givenMeta = givenItem.getItemMeta();
ItemMeta realMeta = realItem.getItemMeta(); ItemMeta realMeta = realItem.getItemMeta();
assert givenMeta != null; assert givenMeta != null;
assert realMeta != null; assert realMeta != null;
return givenMeta.getDisplayName().equals(realMeta.getDisplayName()) && Objects.equals(givenMeta.getLore(), realMeta.getLore()); return givenMeta.getDisplayName().equals(realMeta.getDisplayName()) && Objects.equals(givenMeta.getLore(), realMeta.getLore());
} }
public ItemStack getLightningRod() public ItemStack getLightningRod()
{ {
ItemStack itemStack = new ItemStack(Material.BLAZE_ROD); ItemStack itemStack = new ItemStack(Material.BLAZE_ROD);
ItemMeta itemMeta = itemStack.getItemMeta(); ItemMeta itemMeta = itemStack.getItemMeta();
assert itemMeta != null; assert itemMeta != null;
itemMeta.setDisplayName(FUtil.colorize("&bL&3i&bg&3h&bt&3i&bn&3g &b&bR&3o&bd")); 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.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); itemMeta.addEnchant(Enchantment.CHANNELING, 1, false);
itemStack.setItemMeta(itemMeta); itemStack.setItemMeta(itemMeta);
return itemStack; return itemStack;
} }
public ItemStack getGrapplingHook() public ItemStack getGrapplingHook()
{ {
ItemStack itemStack = new ItemStack(Material.FISHING_ROD); ItemStack itemStack = new ItemStack(Material.FISHING_ROD);
ItemMeta itemMeta = itemStack.getItemMeta(); ItemMeta itemMeta = itemStack.getItemMeta();
assert itemMeta != null; assert itemMeta != null;
itemMeta.setDisplayName(ChatColor.YELLOW + "Grappling Hook"); itemMeta.setDisplayName(ChatColor.YELLOW + "Grappling Hook");
itemMeta.setLore(Collections.singletonList(ChatColor.GREEN + "be spider-man but ghetto")); itemMeta.setLore(Collections.singletonList(ChatColor.GREEN + "be spider-man but ghetto"));
itemStack.setItemMeta(itemMeta); itemStack.setItemMeta(itemMeta);
return itemStack; return itemStack;
} }
public ItemStack getFireBall() public ItemStack getFireBall()
{ {
ItemStack itemStack = new ItemStack(Material.FIRE_CHARGE); ItemStack itemStack = new ItemStack(Material.FIRE_CHARGE);
ItemMeta itemMeta = itemStack.getItemMeta(); ItemMeta itemMeta = itemStack.getItemMeta();
assert itemMeta != null; assert itemMeta != null;
itemMeta.setDisplayName(ChatColor.RED + "Fire Ball"); itemMeta.setDisplayName(ChatColor.RED + "Fire Ball");
itemMeta.setLore(Collections.singletonList(ChatColor.GOLD + "Yeet this at people")); itemMeta.setLore(Collections.singletonList(ChatColor.GOLD + "Yeet this at people"));
itemStack.setItemMeta(itemMeta); itemStack.setItemMeta(itemMeta);
return itemStack; return itemStack;
} }
public ItemStack getRideablePearl() public ItemStack getRideablePearl()
{ {
ItemStack itemStack = new ItemStack(Material.ENDER_PEARL); ItemStack itemStack = new ItemStack(Material.ENDER_PEARL);
ItemMeta itemMeta = itemStack.getItemMeta(); ItemMeta itemMeta = itemStack.getItemMeta();
assert itemMeta != null; assert itemMeta != null;
itemMeta.setDisplayName(ChatColor.DARK_PURPLE + "Rideable Ender Pearl"); 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.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); itemMeta.addEnchant(Enchantment.BINDING_CURSE, 1, false);
itemStack.setItemMeta(itemMeta); itemStack.setItemMeta(itemMeta);
return itemStack; return itemStack;
} }
public ItemStack getStackingPotato() public ItemStack getStackingPotato()
{ {
ItemStack itemStack = new ItemStack(Material.POTATO); ItemStack itemStack = new ItemStack(Material.POTATO);
ItemMeta itemMeta = itemStack.getItemMeta(); ItemMeta itemMeta = itemStack.getItemMeta();
assert itemMeta != null; assert itemMeta != null;
itemMeta.setDisplayName(ChatColor.YELLOW + "Stacking Potato"); 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.")); itemMeta.setLore(Collections.singletonList(ChatColor.GREEN + "Left click to ride a mob, right click to put a mob on your head."));
itemStack.setItemMeta(itemMeta); itemStack.setItemMeta(itemMeta);
return itemStack; return itemStack;
} }
public ItemStack getClownFish() public ItemStack getClownFish()
{ {
ItemStack itemStack = new ItemStack(Material.TROPICAL_FISH); ItemStack itemStack = new ItemStack(Material.TROPICAL_FISH);
ItemMeta itemMeta = itemStack.getItemMeta(); ItemMeta itemMeta = itemStack.getItemMeta();
assert itemMeta != null; assert itemMeta != null;
itemMeta.setDisplayName(ChatColor.GOLD + "Clown Fish"); itemMeta.setDisplayName(ChatColor.GOLD + "Clown Fish");
itemMeta.setLore(Collections.singletonList(ChatColor.AQUA + ":clown:")); itemMeta.setLore(Collections.singletonList(ChatColor.AQUA + ":clown:"));
itemStack.setItemMeta(itemMeta); itemStack.setItemMeta(itemMeta);
return itemStack; return itemStack;
} }
public boolean canAfford(int price, int coins) public boolean canAfford(int price, int coins)
{ {
return coins >= price; return coins >= price;
} }
public int amountNeeded(int price, int coins) public int amountNeeded(int price, int coins)
{ {
return price - coins; return price - coins;
} }
public ItemStack shopGUIItem(ShopItem item, PlayerData data) public ItemStack shopGUIItem(ShopItem item, PlayerData data)
{ {
ItemStack itemStack = new ItemStack(item.getIcon()); ItemStack itemStack = new ItemStack(item.getIcon());
ItemMeta itemMeta = itemStack.getItemMeta(); ItemMeta itemMeta = itemStack.getItemMeta();
assert itemMeta != null; assert itemMeta != null;
itemMeta.setDisplayName(item.getColoredName()); itemMeta.setDisplayName(item.getColoredName());
int price = item.getCost(); int price = item.getCost();
int coins = data.getCoins(); int coins = data.getCoins();
boolean canAfford = canAfford(price, coins); boolean canAfford = canAfford(price, coins);
List<String> lore = new ArrayList<>(); List<String> lore = new ArrayList<>();
if (!data.hasItem(item)) if (!data.hasItem(item))
{ {
lore.add(ChatColor.GOLD + "Price: " + (canAfford ? ChatColor.DARK_GREEN : ChatColor.RED) + price); lore.add(ChatColor.GOLD + "Price: " + (canAfford ? ChatColor.DARK_GREEN : ChatColor.RED) + price);
if (!canAfford) if (!canAfford)
{ {
lore.add(ChatColor.RED + "You can not afford this item!"); 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."); lore.add(ChatColor.RED + "You need " + amountNeeded(price, coins) + " more coins to buy this item.");
} }
} }
else else
{ {
lore.add(ChatColor.RED + "You already purchased this item."); lore.add(ChatColor.RED + "You already purchased this item.");
} }
itemMeta.setLore(lore); itemMeta.setLore(lore);
itemStack.setItemMeta(itemMeta); itemStack.setItemMeta(itemMeta);
return itemStack; return itemStack;
} }
@EventHandler(priority = EventPriority.HIGH) @EventHandler(priority = EventPriority.HIGH)
public void onShopGUIClick(InventoryClickEvent event) public void onShopGUIClick(InventoryClickEvent event)
{ {
if (!(event.getWhoClicked() instanceof Player)) if (!(event.getWhoClicked() instanceof Player))
{ {
return; return;
} }
Inventory inventory = event.getInventory(); Inventory inventory = event.getInventory();
if (inventory.getSize() != 36 || !event.getView().getTitle().equals(getShopTitle())) if (inventory.getSize() != 36 || !event.getView().getTitle().equals(getShopTitle()))
{ {
return; return;
} }
event.setCancelled(true); event.setCancelled(true);
ShopItem shopItem = getShopItem(event.getSlot()); ShopItem shopItem = getShopItem(event.getSlot());
if (shopItem == null) if (shopItem == null)
{ {
return; return;
} }
Player player = (Player)event.getWhoClicked(); Player player = (Player)event.getWhoClicked();
PlayerData playerData = plugin.pl.getData(player); PlayerData playerData = plugin.pl.getData(player);
int price = shopItem.getCost(); int price = shopItem.getCost();
int coins = playerData.getCoins(); int coins = playerData.getCoins();
if (playerData.hasItem(shopItem) || !canAfford(price, coins)) if (playerData.hasItem(shopItem) || !canAfford(price, coins))
{ {
return; return;
} }
playerData.giveItem(shopItem); playerData.giveItem(shopItem);
playerData.setCoins(coins - price); playerData.setCoins(coins - price);
plugin.pl.save(playerData); plugin.pl.save(playerData);
player.closeInventory(); player.closeInventory();
player.sendMessage(getShopPrefix() + " " + ChatColor.GREEN + "Successfully purchased the \"" + shopItem.getColoredName() + ChatColor.GREEN + "\" for " + ChatColor.GOLD + price + ChatColor.GREEN + "!"); player.sendMessage(getShopPrefix() + " " + ChatColor.GREEN + "Successfully purchased the \"" + shopItem.getColoredName() + ChatColor.GREEN + "\" for " + ChatColor.GOLD + price + ChatColor.GREEN + "!");
if (shopItem.getCommand() != null) if (shopItem.getCommand() != null)
{ {
player.sendMessage(ChatColor.GREEN + "Run " + shopItem.getCommand() + " to get one!"); player.sendMessage(ChatColor.GREEN + "Run " + shopItem.getCommand() + " to get one!");
} }
} }
@EventHandler(priority = EventPriority.HIGH) @EventHandler(priority = EventPriority.HIGH)
public void onLoginMessageGUIClick(InventoryClickEvent event) public void onLoginMessageGUIClick(InventoryClickEvent event)
{ {
if (!(event.getWhoClicked() instanceof Player)) if (!(event.getWhoClicked() instanceof Player))
{ {
return; return;
} }
Inventory inventory = event.getInventory(); Inventory inventory = event.getInventory();
if (inventory.getSize() != 36 || !event.getView().getTitle().equals(LOGIN_MESSAGE_GUI_TITLE)) if (inventory.getSize() != 36 || !event.getView().getTitle().equals(LOGIN_MESSAGE_GUI_TITLE))
{ {
return; return;
} }
event.setCancelled(true); event.setCancelled(true);
int slot = event.getSlot(); int slot = event.getSlot();
Player player = (Player)event.getWhoClicked(); Player player = (Player)event.getWhoClicked();
PlayerData data = plugin.pl.getData(player); PlayerData data = plugin.pl.getData(player);
if (slot == 35) if (slot == 35)
{ {
data.setLoginMessage(null); data.setLoginMessage(null);
plugin.pl.save(data); plugin.pl.save(data);
player.sendMessage(ChatColor.GREEN + "Removed your login message"); player.sendMessage(ChatColor.GREEN + "Removed your login message");
} }
else else
{ {
String message = ConfigEntry.SHOP_LOGIN_MESSAGES.getStringList().get(slot); String message = ConfigEntry.SHOP_LOGIN_MESSAGES.getStringList().get(slot);
data.setLoginMessage(message); data.setLoginMessage(message);
plugin.pl.save(data); plugin.pl.save(data);
player.sendMessage(ChatColor.GREEN + "Your login message is now the following:\n" + plugin.rm.craftLoginMessage(player, message)); player.sendMessage(ChatColor.GREEN + "Your login message is now the following:\n" + plugin.rm.craftLoginMessage(player, message));
} }
player.closeInventory(); player.closeInventory();
} }
public ShopItem getShopItem(int slot) public ShopItem getShopItem(int slot)
{ {
for (ShopItem shopItem : ShopItem.values()) for (ShopItem shopItem : ShopItem.values())
{ {
if (shopItem.getSlot() == slot) if (shopItem.getSlot() == slot)
{ {
return shopItem; return shopItem;
} }
} }
return null; return null;
} }
} }

View File

@ -136,7 +136,7 @@ public class FUtil
public static boolean isExecutive(String name) 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) public static boolean isDeveloper(Player player)

View File

@ -1,114 +1,114 @@
package me.totalfreedom.totalfreedommod.util; package me.totalfreedom.totalfreedommod.util;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date; import java.util.Date;
import java.util.UUID; import java.util.UUID;
import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
public class History public class History
{ {
public static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public static void reportHistory(final CommandSender sender, final String username) public static void reportHistory(final CommandSender sender, final String username)
{ {
new BukkitRunnable() new BukkitRunnable()
{ {
@Override @Override
public void run() public void run()
{ {
UUID uuid = UUIDFetcher.fetch(username); UUID uuid = UUIDFetcher.fetch(username);
if (uuid != null) if (uuid != null)
{ {
Gson gson = new GsonBuilder().create(); Gson gson = new GsonBuilder().create();
String compactUuid = uuid.toString().replace("-", ""); String compactUuid = uuid.toString().replace("-", "");
try try
{ {
//UUIDs or playernames actually work with this one //UUIDs or playernames actually work with this one
//TODO: fix the stupid api on how it's not working name histories //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.ashcon.app/mojang/v2/user/" + compactUuid);
URL url = new URL("https://api.mojang.com/user/profiles/" + compactUuid + "/names"); URL url = new URL("https://api.mojang.com/user/profiles/" + compactUuid + "/names");
HttpURLConnection conn = (HttpURLConnection)url.openConnection(); HttpURLConnection conn = (HttpURLConnection)url.openConnection();
//conn.setRequestProperty("User-Agent", ""); //conn.setRequestProperty("User-Agent", "");
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
FName[] oldNames = gson.fromJson(reader, FName[].class); FName[] oldNames = gson.fromJson(reader, FName[].class);
if (oldNames == null) if (oldNames == null)
{ {
FSync.playerMsg(sender, ChatColor.RED + "Player not found!"); FSync.playerMsg(sender, ChatColor.RED + "Player not found!");
return; return;
} }
reader.close(); reader.close();
conn.disconnect(); conn.disconnect();
Arrays.sort(oldNames); Arrays.sort(oldNames);
printHistory(sender, oldNames); printHistory(sender, oldNames);
} }
catch (Exception ex) catch (Exception ex)
{ {
FSync.playerMsg(sender, ChatColor.RED + "Error, see logs for more details."); FSync.playerMsg(sender, ChatColor.RED + "Error, see logs for more details.");
FLog.severe(ex); FLog.severe(ex);
} }
} }
else else
{ {
FSync.playerMsg(sender, ChatColor.RED + "Player not found!"); FSync.playerMsg(sender, ChatColor.RED + "Player not found!");
} }
} }
}.runTaskAsynchronously(TotalFreedomMod.getPlugin()); }.runTaskAsynchronously(TotalFreedomMod.getPlugin());
} }
private static void printHistory(CommandSender sender, FName[] oldNames) private static void printHistory(CommandSender sender, FName[] oldNames)
{ {
if (oldNames.length == 1) if (oldNames.length == 1)
{ {
FSync.playerMsg(sender, ChatColor.GREEN + oldNames[0].getName() + ChatColor.GOLD + " has never changed their name."); FSync.playerMsg(sender, ChatColor.GREEN + oldNames[0].getName() + ChatColor.GOLD + " has never changed their name.");
return; return;
} }
FSync.playerMsg(sender, ChatColor.GOLD + "Original name: " + ChatColor.GREEN + oldNames[0].getName()); FSync.playerMsg(sender, ChatColor.GOLD + "Original name: " + ChatColor.GREEN + oldNames[0].getName());
for (int i = 1; i < oldNames.length; i++) for (int i = 1; i < oldNames.length; i++)
{ {
Date date = new Date(oldNames[i].getChangedToAt()); Date date = new Date(oldNames[i].getChangedToAt());
String formattedDate = dateFormat.format(date); String formattedDate = dateFormat.format(date);
FSync.playerMsg(sender, ChatColor.BLUE + formattedDate + ChatColor.GOLD + " changed to " + ChatColor.GREEN + oldNames[i].getName()); FSync.playerMsg(sender, ChatColor.BLUE + formattedDate + ChatColor.GOLD + " changed to " + ChatColor.GREEN + oldNames[i].getName());
} }
} }
private static class FName implements Comparable<FName> private static class FName implements Comparable<FName>
{ {
private final String name; private final String name;
private final long changedToAt; private final long changedToAt;
//Added constructor because otherwise there's no way name or changedToAt would have been anything other than null. //Added constructor because otherwise there's no way name or changedToAt would have been anything other than null.
public FName(String name, long changedToAt) public FName(String name, long changedToAt)
{ {
this.name = name; this.name = name;
this.changedToAt = changedToAt; this.changedToAt = changedToAt;
} }
@Override @Override
public int compareTo(FName other) public int compareTo(FName other)
{ {
return Long.compare(this.changedToAt, other.changedToAt); return Long.compare(this.changedToAt, other.changedToAt);
} }
public String getName() public String getName()
{ {
return name; return name;
} }
public long getChangedToAt() public long getChangedToAt()
{ {
return changedToAt; return changedToAt;
} }
} }
} }

View File

@ -1,68 +1,68 @@
package me.totalfreedom.totalfreedommod.util; package me.totalfreedom.totalfreedommod.util;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.google.gson.GsonBuilder; import com.google.gson.GsonBuilder;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.io.OutputStream; import java.io.OutputStream;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.util.UUID; import java.util.UUID;
// UUIDFetcher retrieves UUIDs from usernames via web requests to Mojang. // UUIDFetcher retrieves UUIDs from usernames via web requests to Mojang.
public class UUIDFetcher public class UUIDFetcher
{ {
private static final String PROFILE_URL = "https://api.mojang.com/profiles/minecraft"; private static final String PROFILE_URL = "https://api.mojang.com/profiles/minecraft";
public static UUID fetch(String name) public static UUID fetch(String name)
{ {
try try
{ {
Gson gson = new GsonBuilder().create(); Gson gson = new GsonBuilder().create();
UUID uuid; UUID uuid;
String body = gson.toJson(name); String body = gson.toJson(name);
URL url = new URL(PROFILE_URL); URL url = new URL(PROFILE_URL);
HttpURLConnection connection = (HttpURLConnection)url.openConnection(); HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("POST"); connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/json"); connection.setRequestProperty("Content-Type", "application/json");
connection.setUseCaches(false); connection.setUseCaches(false);
connection.setDoInput(true); connection.setDoInput(true);
connection.setDoOutput(true); connection.setDoOutput(true);
OutputStream stream = connection.getOutputStream(); OutputStream stream = connection.getOutputStream();
stream.write(body.getBytes()); stream.write(body.getBytes());
stream.flush(); stream.flush();
stream.close(); stream.close();
FetchedUuid[] id = gson.fromJson( FetchedUuid[] id = gson.fromJson(
new InputStreamReader(connection.getInputStream()), new InputStreamReader(connection.getInputStream()),
FetchedUuid[].class); FetchedUuid[].class);
if (id.length == 0 || id[0].getID() == null) if (id.length == 0 || id[0].getID() == null)
{ {
return null; return null;
} }
String idd = id[0].getID(); String idd = id[0].getID();
uuid = UUID.fromString(idd.substring(0, 8) + "-" + idd.substring(8, 12) uuid = UUID.fromString(idd.substring(0, 8) + "-" + idd.substring(8, 12)
+ "-" + idd.substring(12, 16) + "-" + idd.substring(16, 20) + "-" + "-" + idd.substring(12, 16) + "-" + idd.substring(16, 20) + "-"
+ idd.substring(20, 32)); + idd.substring(20, 32));
return uuid; return uuid;
} }
catch (IOException ex) catch (IOException ex)
{ {
FLog.severe(ex); FLog.severe(ex);
} }
return null; return null;
} }
private static class FetchedUuid private static class FetchedUuid
{ {
private String id; private String id;
public String getID() public String getID()
{ {
return id; return id;
} }
} }
} }

View File

@ -35,6 +35,9 @@ server:
# All players who show up as executive # All players who show up as executive
executives: [ ] executives: [ ]
# All players who show up as assistant executive
assistant_executives: []
# All those who can manage the master builder list # All those who can manage the master builder list
master_builder_management: [ ] master_builder_management: [ ]