blob: dad0117f442167be99ab5ad4a2276eacad02064c [file] [log] [blame] [raw]
package mekanism.client;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import mekanism.api.EnumColor;
import mekanism.common.Mekanism;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ChatComponentText;
public final class HolidayManager
{
private static Calendar calendar = Calendar.getInstance();
private static Minecraft mc = Minecraft.getMinecraft();
public static List<Holiday> holidays = new ArrayList<Holiday>();
private static List<Holiday> holidaysNotified = new ArrayList<Holiday>();
public static void init()
{
if(MekanismClient.holidays)
{
holidays.add(new Christmas());
holidays.add(new NewYear());
}
Mekanism.logger.info("Initialized HolidayManager.");
}
public static void check()
{
try {
YearlyDate date = getDate();
for(Holiday holiday : holidays)
{
if(!holidaysNotified.contains(holiday))
{
if(holiday.getDate().equals(date))
{
holiday.onEvent(mc.thePlayer);
holidaysNotified.add(holiday);
}
}
}
} catch(Exception e) {}
}
public static String filterSound(String sound)
{
if(!MekanismClient.holidays)
{
return sound;
}
try {
YearlyDate date = getDate();
for(Holiday holiday : holidays)
{
if(holiday.getDate().equals(date))
{
return holiday.filterSound(sound);
}
}
} catch(Exception e) {}
return sound;
}
private static YearlyDate getDate()
{
return new YearlyDate(calendar.get(Calendar.MONTH)+1, calendar.get(Calendar.DAY_OF_MONTH));
}
public static abstract class Holiday
{
public abstract YearlyDate getDate();
public abstract void onEvent(EntityPlayer player);
public String filterSound(String sound)
{
return sound;
}
}
private static class Christmas extends Holiday
{
private String[] nutcracker = new String[] {"holiday/Nutcracker1.ogg", "holiday/Nutcracker2.ogg", "holiday/Nutcracker3.ogg", "holiday/Nutcracker4.ogg", "holiday/Nutcracker5.ogg"};
@Override
public YearlyDate getDate()
{
return new YearlyDate(12, 25);
}
@Override
public void onEvent(EntityPlayer player)
{
String themedLines = getThemedLines(new EnumColor[] {EnumColor.DARK_GREEN, EnumColor.DARK_RED}, 13);
player.addChatMessage(new ChatComponentText(themedLines + EnumColor.DARK_BLUE + "[Mekanism]" + themedLines));
player.addChatMessage(new ChatComponentText(EnumColor.RED + "Merry Christmas, " + EnumColor.DARK_BLUE + player.getCommandSenderName() + EnumColor.RED + "!"));
player.addChatMessage(new ChatComponentText(EnumColor.RED + "May you have plenty of Christmas cheer"));
player.addChatMessage(new ChatComponentText(EnumColor.RED + "and have a relaxing holiday with your"));
player.addChatMessage(new ChatComponentText(EnumColor.RED + "family :)"));
player.addChatMessage(new ChatComponentText(EnumColor.DARK_GREY + "-aidancbrady"));
player.addChatMessage(new ChatComponentText(themedLines + EnumColor.DARK_BLUE + "[=======]" + themedLines));
}
@Override
public String filterSound(String sound)
{
if(sound.equals("Chamber.ogg"))
{
return nutcracker[0];
}
else if(sound.equals("MetallurgicInfuser.ogg"))
{
return nutcracker[1];
}
else if(sound.equals("PurificationChamber.ogg"))
{
return nutcracker[2];
}
else if(sound.equals("Smelter.ogg"))
{
return nutcracker[3];
}
else if(sound.equals("HeatGenerator.ogg"))
{
return nutcracker[4];
}
return sound;
}
}
private static class NewYear extends Holiday
{
@Override
public YearlyDate getDate()
{
return new YearlyDate(1, 1);
}
@Override
public void onEvent(EntityPlayer player)
{
String themedLines = getThemedLines(new EnumColor[] {EnumColor.WHITE, EnumColor.YELLOW}, 13);
player.addChatMessage(new ChatComponentText(themedLines + EnumColor.DARK_BLUE + "[Mekanism]" + themedLines));
player.addChatMessage(new ChatComponentText(EnumColor.AQUA + "Happy New Year, " + EnumColor.DARK_BLUE + player.getCommandSenderName() + EnumColor.RED + "!"));
player.addChatMessage(new ChatComponentText(EnumColor.AQUA + "Best wishes to you as we enter this"));
player.addChatMessage(new ChatComponentText(EnumColor.AQUA + "new and exciting year of " + calendar.get(Calendar.YEAR) + "! :)"));
player.addChatMessage(new ChatComponentText(EnumColor.DARK_GREY + "-aidancbrady"));
player.addChatMessage(new ChatComponentText(themedLines + EnumColor.DARK_BLUE + "[=======]" + themedLines));
}
}
public static enum Month
{
JANUARY("January"),
FEBRUARY("February"),
MARCH("March"),
APRIL("April"),
MAY("May"),
JUNE("June"),
JULY("July"),
AUGUST("August"),
SEPTEMBER("September"),
OCTOBER("October"),
NOVEMBER("November"),
DECEMBER("December");
private final String name;
private Month(String n)
{
name = n;
}
public String getName()
{
return name;
}
public int month()
{
return ordinal()+1;
}
}
public static class YearlyDate
{
public Month month;
public int day;
public YearlyDate(Month m, int d)
{
month = m;
day = d;
}
public YearlyDate(int m, int d)
{
this(Month.values()[m-1], d);
}
@Override
public boolean equals(Object obj)
{
return obj instanceof YearlyDate && ((YearlyDate)obj).month == month && ((YearlyDate)obj).day == day;
}
@Override
public int hashCode()
{
int code = 1;
code = 31 * code + month.ordinal();
code = 31 * code + day;
return code;
}
}
private static String getThemedLines(EnumColor[] colors, int amount)
{
StringBuilder builder = new StringBuilder();
for(int i = 0; i < amount; i++)
{
builder.append(colors[i%colors.length] + "-");
}
return builder.toString();
}
}