diff --git a/src/main/java/com/gmail/nossr50/commands/McmmoCommand.java b/src/main/java/com/gmail/nossr50/commands/McmmoCommand.java index bb15db26c..373639e0b 100644 --- a/src/main/java/com/gmail/nossr50/commands/McmmoCommand.java +++ b/src/main/java/com/gmail/nossr50/commands/McmmoCommand.java @@ -9,6 +9,7 @@ import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.commands.party.PartySubcommandType; import com.gmail.nossr50.config.Config; import com.gmail.nossr50.locale.LocaleLoader; +import com.gmail.nossr50.util.HolidayManager; import com.gmail.nossr50.util.Permissions; public class McmmoCommand implements CommandExecutor { @@ -31,6 +32,7 @@ public class McmmoCommand implements CommandExecutor { } sender.sendMessage(LocaleLoader.getString("MOTD.Version", mcMMO.p.getDescription().getVersion())); + HolidayManager.anniversaryCheck(sender); return true; case 1: diff --git a/src/main/java/com/gmail/nossr50/util/HolidayManager.java b/src/main/java/com/gmail/nossr50/util/HolidayManager.java index 61eda995f..a847b9282 100644 --- a/src/main/java/com/gmail/nossr50/util/HolidayManager.java +++ b/src/main/java/com/gmail/nossr50/util/HolidayManager.java @@ -7,10 +7,13 @@ import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; +import java.util.Collections; import java.util.Date; import java.util.GregorianCalendar; import java.util.List; +import java.util.Random; import org.bukkit.ChatColor; import org.bukkit.Color; @@ -26,6 +29,7 @@ import com.gmail.nossr50.mcMMO; public final class HolidayManager { public static ArrayList hasCelebrated; + private static final Random rand = new Random(); private HolidayManager() {} @@ -78,34 +82,82 @@ public final class HolidayManager { // This gets called from /mcmmo command public static void anniversaryCheck(final CommandSender sender) { - if (sender instanceof Player) { - GregorianCalendar anniversaryStart = new GregorianCalendar(2013, Calendar.FEBRUARY, 3); - GregorianCalendar anniversaryEnd = new GregorianCalendar(2013, Calendar.FEBRUARY, 6); - GregorianCalendar day = new GregorianCalendar(); + GregorianCalendar anniversaryStart = new GregorianCalendar(2014, Calendar.FEBRUARY, 3); + GregorianCalendar anniversaryEnd = new GregorianCalendar(2014, Calendar.FEBRUARY, 6); + GregorianCalendar day = new GregorianCalendar(); - if (hasCelebrated == null) { - createAnniversaryFile(); - } + if (hasCelebrated == null) { + createAnniversaryFile(); + } - if (hasCelebrated.contains(sender.getName())) { - return; - } - - if (getDateRange(day.getTime(), anniversaryStart.getTime(), anniversaryEnd.getTime())) { - sender.sendMessage(ChatColor.BLUE + "Happy 2 Year Anniversary! In honor of all of"); - sender.sendMessage(ChatColor.BLUE + "nossr50's work and all the devs, here's a firework show!"); + if (hasCelebrated.contains(sender.getName())) { + return; + } + if (getDateRange(day.getTime(), anniversaryStart.getTime(), anniversaryEnd.getTime())) { + sender.sendMessage(ChatColor.BLUE + "Happy 3 Year Anniversary! In honor of all of"); + sender.sendMessage(ChatColor.BLUE + "nossr50's work and all the devs, here's a firework show!"); + if (sender instanceof Player) { final int firework_amount = 10; for (int i = 0; i < firework_amount; i++) { - int delay = (int) (Math.random() * 3) + 4; + int delay = (int) (rand.nextDouble() * 3 * 20) + 4; mcMMO.p.getServer().getScheduler().runTaskLater(mcMMO.p, new Runnable() { @Override public void run() { spawnFireworks((Player) sender); } - }, 20 * delay); + }, delay); } - hasCelebrated.add(sender.getName()); } + else { + /* + * Credit: http://www.geocities.com/spunk1111/ + * (good luck finding that in 3 years heh) + * .''. . *''* :_\/_: . + * :_\/_: _\(/_ .:.*_\/_* : /\ : .'.:.'. + * .''.: /\ : /)\ ':'* /\ * : '..'. -=:o:=- + * :_\/_:'.:::. ' *''* * '.\'/.'_\(/_ '.':'.' + * : /\ : ::::: *_\/_* -= o =- /)\ ' + * '..' ':::' * /\ * .'/.\'. ' * + * * *..* : * + * * * * + * * * * + */ + + /* + * Color map + * AAAA D GGGG JJJJJJ K + * AAAAAA DDDDD EEEGGGGGG JJJJJJ KKKKKKK + * BBBBAAAAAA DDD EEEGGGGGG I JJJJJ KKKKKKK + * BBBBBBACCCCC D FFFF G IIIIIIIHHHHH KKKKKKK + * BBBBBB CCCCC FFFFFF IIIIIII HHH K + * BBBB CCCCC FFFFFF IIIIIII H k + * b FFFF I k + * b i k + * b i k + */ + String colorA = chatcolorchoose(); + String colorB = chatcolorchoose(); + String colorC = chatcolorchoose(); + String colorD = chatcolorchoose(); + String colorE = chatcolorchoose(); + String colorF = chatcolorchoose(); + String colorG = chatcolorchoose(); + String colorH = chatcolorchoose(); + String colorI = chatcolorchoose(); + String colorJ = chatcolorchoose(); + String colorK = chatcolorchoose(); + Object[] colorParams = new Object[] { colorA, colorB, colorC, colorD, colorE, colorF, colorG, colorH, colorI, colorJ, colorK }; + sender.sendMessage(String.format(" %1$s.''. %4$s. %7$s*''* %10$s:_\\/_: %11$s.", colorParams)); + sender.sendMessage(String.format(" %1$s:_\\/_: %4$s_\\(/_ %5$s.:.%7$s*_\\/_* %10$s: /\\ : %11$s.'.:.'.", colorParams)); + sender.sendMessage(String.format(" %2$s.''.%1$s: /\\ : %4$s/)\\ %5$s':'%7$s* /\\ * %9$s: %10$s'..'. %11$s-=:o:=-", colorParams)); + sender.sendMessage(String.format("%2$s:_\\/_:%1$s'%3$s.:::. %4$s' %6$s*''* %7$s* %9$s'.\\'/.'%8$s_\\(/_ %11$s'.':'.'", colorParams)); + sender.sendMessage(String.format("%2$s: /\\ : %3$s::::: %6$s*_\\/_* %9$s-= o =-%8$s /)\\ %11$s'", colorParams)); + sender.sendMessage(String.format(" %2$s'..' %3$s':::' %6$s* /\\ * %9$s.'/.\\'. %8$s' %11$s*", colorParams)); + sender.sendMessage(String.format(" %2$s* %6$s*..* %9$s: %11$s*", colorParams)); + sender.sendMessage(String.format(" %2$s* %9$s* %11$s*", colorParams)); + sender.sendMessage(String.format(" %2$s* %9$s* %11$s*", colorParams)); + } + hasCelebrated.add(sender.getName()); } } @@ -114,8 +166,10 @@ public final class HolidayManager { } private static void spawnFireworks(Player player) { - int power = (int) (Math.random() * 3) + 1; - int type = (int) (Math.random() * 5) + 1; + int power = (int) (rand.nextDouble() * 3) + 1; + int type = (int) (rand.nextDouble() * 5) + 1; + double varX = rand.nextGaussian() * 3; + double varZ = rand.nextGaussian() * 3; Type typen; switch (type) { @@ -139,9 +193,9 @@ public final class HolidayManager { typen = Type.BALL; } - Firework fireworks = (Firework) player.getWorld().spawnEntity(player.getLocation(), EntityType.FIREWORK); + Firework fireworks = (Firework) player.getWorld().spawnEntity(player.getLocation().add(varX, 0, varZ), EntityType.FIREWORK); FireworkMeta fireworkmeta = fireworks.getFireworkMeta(); - FireworkEffect effect = FireworkEffect.builder().flicker(Misc.getRandom().nextBoolean()).withColor(colorchoose()).withFade(colorchoose()).with(typen).trail(Misc.getRandom().nextBoolean()).build(); + FireworkEffect effect = FireworkEffect.builder().flicker(rand.nextBoolean()).withColor(colorchoose()).withFade(colorchoose()).with(typen).trail(rand.nextBoolean()).build(); fireworkmeta.addEffect(effect); fireworkmeta.setPower(power); fireworks.setFireworkMeta(fireworkmeta); @@ -149,33 +203,54 @@ public final class HolidayManager { private static List colorchoose() { // Thanks Zomis and Tejpbit for the help with this function! + Collections.shuffle(allcolors, rand); - int numberofcolors = Misc.getRandom().nextInt(17) + 1; + int numberofcolors = rand.nextInt(allcolors.size()); + List choosencolors = allcolors.subList(0, numberofcolors); - List allcolors = new ArrayList(); - allcolors.add(Color.AQUA); - allcolors.add(Color.BLACK); - allcolors.add(Color.BLUE); - allcolors.add(Color.FUCHSIA); - allcolors.add(Color.GRAY); - allcolors.add(Color.GREEN); - allcolors.add(Color.LIME); - allcolors.add(Color.MAROON); - allcolors.add(Color.NAVY); - allcolors.add(Color.OLIVE); - allcolors.add(Color.ORANGE); - allcolors.add(Color.PURPLE); - allcolors.add(Color.RED); - allcolors.add(Color.SILVER); - allcolors.add(Color.TEAL); - allcolors.add(Color.WHITE); - allcolors.add(Color.YELLOW); + return new ArrayList(choosencolors); // don't let caller modify allcolors + } - List choosencolors = new ArrayList(); - - for (int i = 0; i < numberofcolors; i++) { - choosencolors.add(allcolors.remove(Misc.getRandom().nextInt(allcolors.size()))); + private static String chatcolorchoose() { + StringBuilder ret = new StringBuilder(allchatcolors.get(rand.nextInt(allchatcolors.size())).toString()); + for (int i = 0; i < chatFormats.length; i++) { + if (rand.nextInt(4) == 0) { + ret.append(chatFormats[i]); + } } - return choosencolors; + return ret.toString(); + } + + private static final List allcolors; + private static final List allchatcolors; + private static final ChatColor[] chatFormats = new ChatColor[] { ChatColor.BOLD, ChatColor.ITALIC, ChatColor.UNDERLINE, ChatColor.STRIKETHROUGH }; + + static { + allcolors = Arrays.asList( + Color.AQUA, + Color.BLACK, + Color.BLUE, + Color.FUCHSIA, + Color.GRAY, + Color.GREEN, + Color.LIME, + Color.MAROON, + Color.NAVY, + Color.OLIVE, + Color.ORANGE, + Color.PURPLE, + Color.RED, + Color.SILVER, + Color.TEAL, + Color.WHITE, + Color.YELLOW + ); + allchatcolors = new ArrayList(16); + for (ChatColor c : ChatColor.values()) { + if (c.isColor()) { + allchatcolors.add(c); + } + } + Collections.shuffle(allchatcolors, rand); } }