diff --git a/TotalFreedomMod.iml b/TotalFreedomMod.iml
index 13f64d00..2b8dccab 100644
--- a/TotalFreedomMod.iml
+++ b/TotalFreedomMod.iml
@@ -47,80 +47,42 @@
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
@@ -150,18 +112,16 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/me/totalfreedom/totalfreedommod/AntiNuke.java b/src/main/java/me/totalfreedom/totalfreedommod/AntiNuke.java
index c32d5bd4..a25334d9 100644
--- a/src/main/java/me/totalfreedom/totalfreedommod/AntiNuke.java
+++ b/src/main/java/me/totalfreedom/totalfreedommod/AntiNuke.java
@@ -43,7 +43,8 @@ public class AntiNuke extends FreedomService
if (fPlayer.incrementAndGetBlockDestroyCount() > ConfigEntry.NUKE_MONITOR_COUNT_BREAK.getInteger())
{
FUtil.bcastMsg(player.getName() + " is breaking blocks too fast!", ChatColor.RED);
- plugin.ae.autoEject(player, "You are breaking blocks too fast. Nukers are not permitted on this server.");
+ //plugin.ae.autoEject(player, "You are breaking blocks too fast. Nukers are not permitted on this server.");
+ player.kickPlayer(ChatColor.RED + "You are breaking blocks too fast. Nukers are not permitted on this server.");
fPlayer.resetBlockDestroyCount();
@@ -66,7 +67,8 @@ public class AntiNuke extends FreedomService
if (fPlayer.incrementAndGetBlockPlaceCount() > ConfigEntry.NUKE_MONITOR_COUNT_PLACE.getInteger())
{
FUtil.bcastMsg(player.getName() + " is placing blocks too fast!", ChatColor.RED);
- plugin.ae.autoEject(player, "You are placing blocks too fast.");
+ //plugin.ae.autoEject(player, "You are placing blocks too fast.");
+ player.kickPlayer(ChatColor.RED + "You are placing blocks too fast.");
fPlayer.resetBlockPlaceCount();
diff --git a/src/main/java/me/totalfreedom/totalfreedommod/TotalFreedomMod.java b/src/main/java/me/totalfreedom/totalfreedommod/TotalFreedomMod.java
index fcb4913f..f48d8e58 100644
--- a/src/main/java/me/totalfreedom/totalfreedommod/TotalFreedomMod.java
+++ b/src/main/java/me/totalfreedom/totalfreedommod/TotalFreedomMod.java
@@ -34,6 +34,7 @@ import me.totalfreedom.totalfreedommod.fun.Jumppads;
import me.totalfreedom.totalfreedommod.fun.Landminer;
import me.totalfreedom.totalfreedommod.fun.MP44;
import me.totalfreedom.totalfreedommod.fun.MobStacker;
+import me.totalfreedom.totalfreedommod.fun.RealTimer;
import me.totalfreedom.totalfreedommod.fun.Trailer;
import me.totalfreedom.totalfreedommod.httpd.HTTPDaemon;
import me.totalfreedom.totalfreedommod.masterbuilder.MasterBuilder;
@@ -127,6 +128,7 @@ public class TotalFreedomMod extends AeroPlugin
public SignBlocker snp;
public PlayerVerification pv;
public EntityWiper ew;
+ public RealTimer rt;
//public HubWorldRestrictions hwr;
//
// Bridges
@@ -240,6 +242,7 @@ public class TotalFreedomMod extends AeroPlugin
mp = services.registerService(MP44.class);
jp = services.registerService(Jumppads.class);
tr = services.registerService(Trailer.class);
+ rt = services.registerService(RealTimer.class);
// HTTPD
hd = services.registerService(HTTPDaemon.class);
diff --git a/src/main/java/me/totalfreedom/totalfreedommod/blocking/BlockBlocker.java b/src/main/java/me/totalfreedom/totalfreedommod/blocking/BlockBlocker.java
index f7f9ae9d..8fefaab1 100644
--- a/src/main/java/me/totalfreedom/totalfreedommod/blocking/BlockBlocker.java
+++ b/src/main/java/me/totalfreedom/totalfreedommod/blocking/BlockBlocker.java
@@ -1,16 +1,18 @@
package me.totalfreedom.totalfreedommod.blocking;
+import java.util.List;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
+import me.totalfreedom.totalfreedommod.util.Groups;
import org.bukkit.ChatColor;
import org.bukkit.Material;
+import org.bukkit.block.Banner;
import org.bukkit.block.Block;
-import org.bukkit.block.Chest;
-import org.bukkit.block.ShulkerBox;
import org.bukkit.block.Skull;
+import org.bukkit.block.banner.Pattern;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@@ -177,5 +179,19 @@ public class BlockBlocker extends FreedomService
}
}
+ if (Groups.BANNERS.contains(event.getBlockPlaced().getType()))
+ {
+ Banner banner = (Banner) event.getBlockPlaced().getState();
+ List patterns = banner.getPatterns();
+ Banner handBanner = (Banner) (((Block) event.getItemInHand()).getState());
+ List handPatterns = banner.getPatterns();
+ if (patterns.size() >= 2)
+ {
+ banner.setPatterns(patterns.subList(0, 2));
+ handBanner.setPatterns(handPatterns.subList(0, 2));
+ player.sendMessage(ChatColor.GRAY + "Your banner had too many patterns on it, so some were removed.");
+ }
+ }
+
}
}
diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_gtfo.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_gtfo.java
index 2132a6fe..2d10256d 100644
--- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_gtfo.java
+++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_gtfo.java
@@ -19,6 +19,8 @@ import org.bukkit.Location;
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.SUPER_ADMIN, source = SourceType.BOTH, blockHostConsole = true)
@CommandParameters(description = "Bans a player", usage = "/ [reason] [-nrb]", aliases = "ban")
@@ -82,6 +84,7 @@ public class Command_gtfo extends FreedomCommand
String reason = null;
Boolean cancelRollback = false;
+ Boolean epicFail = false;
if (args.length >= 2)
{
if (args[args.length - 1].equalsIgnoreCase("-nrb"))
@@ -92,6 +95,14 @@ public class Command_gtfo extends FreedomCommand
reason = StringUtils.join(ArrayUtils.subarray(args, 1, args.length - 1), " ");
}
}
+ if (args[args.length - 1].equalsIgnoreCase("-ef"))
+ {
+ epicFail = true;
+ if (args.length >= 3)
+ {
+ reason = StringUtils.join(ArrayUtils.subarray(args, 1, args.length - 1), " ");
+ }
+ }
else
{
reason = StringUtils.join(ArrayUtils.subarray(args, 1, args.length), " ");
@@ -121,6 +132,26 @@ public class Command_gtfo extends FreedomCommand
}
}
+ if (epicFail)
+ {
+ for (int i = 0; i < 25; i++)
+ {
+ player.setVelocity(player.getVelocity().clone().add(new Vector(0, 50, 0)));
+ new BukkitRunnable()
+ {
+ public void run()
+ {
+ for (int i = 0; i < 8; i++)
+ {
+ player.getWorld().strikeLightning(player.getLocation());
+ //FUtil.
+ }
+ }
+ }.runTaskLater(plugin, 2L * 20L);
+ }
+ return true;
+ }
+
if (player != null)
{
FUtil.bcastMsg(player.getName() + " has been a VERY naughty, naughty boy.", ChatColor.RED);
diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_realtime.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_realtime.java
new file mode 100644
index 00000000..71150c4d
--- /dev/null
+++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_realtime.java
@@ -0,0 +1,64 @@
+package me.totalfreedom.totalfreedommod.command;
+
+import me.totalfreedom.totalfreedommod.playerverification.VPlayer;
+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;
+
+@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
+@CommandParameters(description = "Sync your time up with the real world time.", usage = "/ | off>", aliases = "rt")
+public class Command_realtime extends FreedomCommand
+{
+ @Override
+ public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
+ {
+ VPlayer player = plugin.pv.getVerificationPlayer(playerSender);
+ if (args.length == 0 || args.length > 2)
+ {
+ return false;
+ }
+ if (args.length == 2)
+ {
+ if (args[0].equalsIgnoreCase("on"))
+ {
+ int tz;
+ try
+ {
+ tz = Integer.parseInt(args[1]);
+ }
+ catch (NumberFormatException ex)
+ {
+ msg("Invalid UTC offset.");
+ return true;
+ }
+ if (FUtil.timeZoneOutOfBounds(tz))
+ {
+ msg("Invalid UTC offset.");
+ return true;
+ }
+ player.setUtcOffset(tz);
+ player.setRealTime(true);
+ plugin.rt.enable(playerSender);
+ plugin.pv.save();
+ msg("Your in-game time is now synced with real time.");
+ return true;
+ }
+ }
+ if (args[0].equalsIgnoreCase("off"))
+ {
+ if (!player.isRealTime())
+ {
+ msg("You aren't on real time.");
+ return true;
+ }
+ player.setRealTime(false);
+ msg("Your in-game time is no longer synced with real time.");
+ plugin.rt.disable(playerSender);
+ plugin.pv.save();
+ return true;
+ }
+ return true;
+ }
+}
diff --git a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_shop.java b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_shop.java
index e0cee9b5..23223e7d 100644
--- a/src/main/java/me/totalfreedom/totalfreedommod/command/Command_shop.java
+++ b/src/main/java/me/totalfreedom/totalfreedommod/command/Command_shop.java
@@ -6,7 +6,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
-import java.util.TimerTask;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.shop.ShopData;
@@ -19,6 +18,7 @@ import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
+import org.bukkit.scheduler.BukkitRunnable;
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Access the shop", usage = "/ | action | list>")
@@ -57,7 +57,7 @@ public class Command_shop extends FreedomCommand
sd.setCoins(sd.getCoins() + 100);
plugin.sh.save(sd);
msg(prefix + ChatColor.GREEN + "You received your 100 coins!");
- cooldown(86400, args[0]);
+ cooldown(86400, sender, args[0]);
return true;
}
case "search":
@@ -67,7 +67,7 @@ public class Command_shop extends FreedomCommand
sd.setCoins(sd.getCoins() + amount);
plugin.sh.save(sd);
msg(prefix + ChatColor.AQUA + location + ChatColor.GREEN + " - Found " + ChatColor.RED + amount + ChatColor.GREEN + " coins!");
- cooldown(30, args[0]);
+ cooldown(30, sender, args[0]);
return true;
}
case "list":
@@ -80,11 +80,16 @@ public class Command_shop extends FreedomCommand
}
return true;
}
- default:
- {
- return false;
- }
}
+ Player player = getPlayer(args[0]);
+ if (player == null)
+ {
+ msg(PLAYER_NOT_FOUND);
+ return true;
+ }
+ ShopData psd = plugin.sh.getData(player);
+ msg(prefix + ChatColor.AQUA + player.getName() + ChatColor.GREEN + "'s balance: " + ChatColor.RED + psd.getCoins());
+ return true;
}
if (args.length != 2)
{
@@ -150,17 +155,17 @@ public class Command_shop extends FreedomCommand
}
}
- private void cooldown(int seconds, String feature)
+ private void cooldown(int seconds, CommandSender sender, String feature)
{
featureCooldown.put(sender, feature);
- FreedomCommandExecutor.timer.schedule(new TimerTask()
+ new BukkitRunnable()
{
@Override
public void run()
{
featureCooldown.remove(sender);
}
- }, seconds * 1000);
+ }.runTaskLater(plugin, seconds * 20);
}
}
diff --git a/src/main/java/me/totalfreedom/totalfreedommod/fun/ItemFun.java b/src/main/java/me/totalfreedom/totalfreedommod/fun/ItemFun.java
index 8e88b76e..d84d0d01 100644
--- a/src/main/java/me/totalfreedom/totalfreedommod/fun/ItemFun.java
+++ b/src/main/java/me/totalfreedom/totalfreedommod/fun/ItemFun.java
@@ -21,6 +21,8 @@ import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Entity;
+import org.bukkit.entity.EntityType;
+import org.bukkit.entity.Fireball;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.Location;
import org.bukkit.Material;
@@ -45,29 +47,28 @@ public class ItemFun extends FreedomService
private final Random random = new Random();
- private static final String COOLDOWN_MESSAGE = ChatColor.RED + "You're on cooldown for this item.";
+ private static final String COOLDOWN_MESSAGE = ChatColor.RED + "You're on cooldown for this feature.";
- private final Timer timer = new Timer();
- private final Map cooldownTracker = new HashMap<>();
+ private final Map cooldownTracker = new HashMap<>();
private final Map orientationTracker = new HashMap<>();
- private void cooldown(Player player, Material material, int seconds)
+ private void cooldown(Player player, String feature, int seconds)
{
- cooldownTracker.put(player, material);
- timer.schedule(new TimerTask()
+ cooldownTracker.put(player, feature);
+ new BukkitRunnable()
{
@Override
public void run()
{
cooldownTracker.remove(player);
}
- }, seconds * 1000);
+ }.runTaskLater(plugin, seconds * 20);
}
- public boolean onCooldown(Player player, Material material)
+ public boolean onCooldown(Player player, String feature)
{
- return cooldownTracker.containsKey(player) && cooldownTracker.containsValue(material);
+ return cooldownTracker.containsKey(player) && cooldownTracker.containsValue(feature);
}
public ItemFun(TotalFreedomMod plugin)
@@ -319,7 +320,7 @@ public class ItemFun extends FreedomService
case NETHER_STAR:
{
- if (onCooldown(player, Material.NETHER_STAR))
+ if (onCooldown(player, "nether_star"))
{
FUtil.playerMsg(player, COOLDOWN_MESSAGE);
break;
@@ -340,27 +341,66 @@ public class ItemFun extends FreedomService
{
player.getWorld().strikeLightning(targetBlock.getLocation());
}
+
+ boolean superior = FUtil.random(1, 100) == 50;
Player rplayer = FUtil.getRandomPlayer();
- FUtil.bcastMsg("Thor's Star has granted " + rplayer.getName() + " an " + ChatColor.YELLOW + "Electrical Diamond Sword" + ChatColor.RED + "!", ChatColor.RED);
ShopData psd = plugin.sh.getData(rplayer);
String key = FUtil.generateKey(8);
psd.giveRawItem(key);
plugin.sh.save(psd);
- FUtil.give(rplayer, Material.DIAMOND_SWORD, "&eElectrical Diamond Sword", 1, "&7RMB - Strike lightning", ChatColor.DARK_GRAY + key);
- cooldown(player, Material.NETHER_STAR, 600);
+ if (superior)
+ {
+ for (int i = 0; i < 25; i++)
+ {
+ rplayer.getWorld().strikeLightning(rplayer.getLocation());
+ }
+ FUtil.bcastMsg("THOR'S STAR HAS GRANTED " + rplayer.getName().toUpperCase() + " A " + ChatColor.GOLD + "SUPERIOR SWORD" + ChatColor.RED + "!!!!", ChatColor.RED);
+ FUtil.give(rplayer, Material.GOLDEN_SWORD, "&6Superior Sword", 1, "&7RMB - Shoot fireball", ChatColor.DARK_GRAY + key);
+ }
+ else
+ {
+ FUtil.bcastMsg("Thor's Star has granted " + rplayer.getName() + " an " + ChatColor.YELLOW + "Electrical Diamond Sword" + ChatColor.RED + "!", ChatColor.RED);
+ FUtil.give(rplayer, Material.DIAMOND_SWORD, "&eElectrical Diamond Sword", 1, "&7RMB - Strike lightning", ChatColor.DARK_GRAY + key);
+ }
+ cooldown(player, "nether_star", 600);
break;
}
case DIAMOND_SWORD:
{
+ if (onCooldown(player, "eds"))
+ {
+ FUtil.playerMsg(player, COOLDOWN_MESSAGE);
+ break;
+ }
+
ShopData sd = plugin.sh.getData(player);
ItemStack stack = player.getInventory().getItemInMainHand();
if (sd.validate(stack, "Electrical Diamond Sword"))
{
player.getWorld().strikeLightning(player.getTargetBlock(null, 20).getLocation());
+ cooldown(player, "eds", 60);
}
break;
}
+
+ case GOLDEN_SWORD:
+ {
+ if (onCooldown(player, "ss"))
+ {
+ FUtil.playerMsg(player, COOLDOWN_MESSAGE);
+ break;
+ }
+
+ ShopData sd = plugin.sh.getData(player);
+ ItemStack stack = player.getInventory().getItemInMainHand();
+ if (sd.validate(stack, "Superior Sword"))
+ {
+ Entity fireball = player.getWorld().spawnEntity(player.getLocation(), EntityType.FIREBALL);
+ fireball.setVelocity(player.getLocation().getDirection());
+ cooldown(player, "ss", 60);
+ }
+ }
}
}
diff --git a/src/main/java/me/totalfreedom/totalfreedommod/fun/RealTimer.java b/src/main/java/me/totalfreedom/totalfreedommod/fun/RealTimer.java
new file mode 100644
index 00000000..ea7d042f
--- /dev/null
+++ b/src/main/java/me/totalfreedom/totalfreedommod/fun/RealTimer.java
@@ -0,0 +1,71 @@
+package me.totalfreedom.totalfreedommod.fun;
+
+import java.util.HashMap;
+import java.util.Map;
+import me.totalfreedom.totalfreedommod.FreedomService;
+import me.totalfreedom.totalfreedommod.TotalFreedomMod;
+import me.totalfreedom.totalfreedommod.playerverification.VPlayer;
+import me.totalfreedom.totalfreedommod.util.FUtil;
+import org.bukkit.entity.Player;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.EventPriority;
+import org.bukkit.event.player.PlayerJoinEvent;
+import org.bukkit.event.player.PlayerQuitEvent;
+import org.bukkit.scheduler.BukkitRunnable;
+import org.bukkit.scheduler.BukkitTask;
+
+public class RealTimer extends FreedomService
+{
+ public RealTimer(TotalFreedomMod plugin)
+ {
+ super(plugin);
+ }
+
+ private Map tasks = new HashMap<>();
+
+ @Override
+ protected void onStart()
+ {
+ }
+
+ @Override
+ protected void onStop()
+ {
+ }
+
+ @EventHandler(priority = EventPriority.MONITOR)
+ public void onPlayerJoin(PlayerJoinEvent event)
+ {
+ enable(event.getPlayer());
+ }
+
+ @EventHandler(priority = EventPriority.MONITOR)
+ public void onPlayerQuit(PlayerQuitEvent event)
+ {
+ disable(event.getPlayer());
+ }
+
+ public void enable(Player player)
+ {
+ VPlayer vPlayer = plugin.pv.getVerificationPlayer(player);
+ if (vPlayer.isRealTime())
+ {
+ tasks.put(player, new BukkitRunnable()
+ {
+ @Override
+ public void run()
+ {
+ player.setPlayerTime(FUtil.getTimeInTicks(vPlayer.getUtcOffset()), false);
+ }
+ }.runTaskTimer(plugin, 0L, 20));
+ }
+ }
+
+ public void disable(Player player)
+ {
+ if (!tasks.containsKey(player))
+ return;
+ tasks.get(player).cancel();
+ tasks.remove(player);
+ }
+}
diff --git a/src/main/java/me/totalfreedom/totalfreedommod/playerverification/VPlayer.java b/src/main/java/me/totalfreedom/totalfreedommod/playerverification/VPlayer.java
index f0a6c74a..f28b0b1d 100644
--- a/src/main/java/me/totalfreedom/totalfreedommod/playerverification/VPlayer.java
+++ b/src/main/java/me/totalfreedom/totalfreedommod/playerverification/VPlayer.java
@@ -41,6 +41,12 @@ public class VPlayer implements ConfigLoadable, ConfigSavable, Validatable
@Getter
@Setter
private ChatColor color = null;
+ @Getter
+ @Setter
+ private int utcOffset = 0;
+ @Getter
+ @Setter
+ private boolean realTime = false;
public VPlayer(String name)
{
@@ -64,6 +70,8 @@ public class VPlayer implements ConfigLoadable, ConfigSavable, Validatable
clearChatOptOut = cs.getBoolean("clearChatOptOut", false);
rideMode = cs.getString("rideMode", rideMode);
color = ChatColor.getByChar(String.valueOf(cs.get("color")));
+ utcOffset = cs.getInt("utcOffset", 0);
+ realTime = cs.getBoolean("realTime", false);
}
@Override
@@ -78,6 +86,8 @@ public class VPlayer implements ConfigLoadable, ConfigSavable, Validatable
cs.set("clearChatOptOut", clearChatOptOut);
cs.set("rideMode", rideMode);
cs.set("color", color == null ? null : color.getChar());
+ cs.set("utcOffset", utcOffset);
+ cs.set("realTime", realTime);
}
public List getIps()
diff --git a/src/main/java/me/totalfreedom/totalfreedommod/shop/ShopData.java b/src/main/java/me/totalfreedom/totalfreedommod/shop/ShopData.java
index 0a0e5368..8adf6321 100644
--- a/src/main/java/me/totalfreedom/totalfreedommod/shop/ShopData.java
+++ b/src/main/java/me/totalfreedom/totalfreedommod/shop/ShopData.java
@@ -100,7 +100,15 @@ public class ShopData implements ConfigLoadable, ConfigSavable, Validatable
{
for (String i : items)
{
- int id = Integer.valueOf(i.substring(0, 1));
+ int id;
+ try
+ {
+ id = Integer.valueOf(i.substring(0, 1));
+ }
+ catch (NumberFormatException ex)
+ {
+ continue;
+ }
if (item.ordinal() == id)
{
return true;
diff --git a/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java b/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java
index efe296ac..83731ea7 100644
--- a/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java
+++ b/src/main/java/me/totalfreedom/totalfreedommod/util/FUtil.java
@@ -18,6 +18,7 @@ import java.util.Locale;
import java.util.Map;
import java.util.Random;
import java.util.Set;
+import java.util.TimeZone;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
@@ -27,6 +28,7 @@ import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
+import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Entity;
@@ -61,6 +63,7 @@ public class FUtil
ChatColor.LIGHT_PURPLE);
private static Iterator CHAT_COLOR_ITERATOR;
private static String CHARACTER_STRING = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
+ private static Map TIMEZONE_LOOKUP = new HashMap<>();
static
{
@@ -68,6 +71,24 @@ public class FUtil
{
CHAT_COLOR_NAMES.put(chatColor.name().toLowerCase().replace("_", ""), chatColor);
}
+
+ for (int i = -12; i <= 12; i++)
+ {
+ String sec = String.valueOf(i).replace("-", "");
+ if (i > -10 && i < 10)
+ {
+ sec = "0" + sec;
+ }
+ if (i >= 0)
+ {
+ sec = "+" + sec;
+ }
+ else
+ {
+ sec = "-" + sec;
+ }
+ TIMEZONE_LOOKUP.put(i, "GMT" + sec + ":00");
+ }
}
public static void cancel(BukkitTask task)
@@ -529,4 +550,37 @@ public class FUtil
List players = new ArrayList<>(Bukkit.getOnlinePlayers());
return players.get(random(0, players.size() - 1));
}
+
+ // convert the current time
+ public static int getTimeInTicks(int tz)
+ {
+ if (timeZoneOutOfBounds(tz))
+ {
+ return -1;
+ }
+ Calendar date = Calendar.getInstance(TimeZone.getTimeZone(TIMEZONE_LOOKUP.get(tz)));
+ int res = 0;
+ for (int i = 0; i < date.get(Calendar.HOUR_OF_DAY) - 6; i++) // oh yeah i don't know why this is 6 hours ahead
+ {
+ res += 1000;
+ }
+ int addExtra = 0; // we're adding extra to account for repeating decimals
+ for (int i = 0; i < date.get(Calendar.MINUTE); i++)
+ {
+ res += 16;
+ addExtra++;
+ if (addExtra == 3)
+ {
+ res += 1;
+ addExtra = 0;
+ }
+ }
+ // this is the best it can be. trust me.
+ return res;
+ }
+
+ public static boolean timeZoneOutOfBounds(int tz)
+ {
+ return tz < -12 || tz > 12;
+ }
}