If you want a system that is accurated to the nearest millisecond for checking membership:Code:package org.rs2.model.content;
import java.util.Calendar;
import java.util.GregorianCalendar;
import org.rs2.model.players.Client;
import org.rs2.model.players.PlayerSave;
/**
* A class for handling membership.
* @author Thock321
*
*/
public class MembershipHandler {
/**
* A certain date.
* @author Thock321
*
*/
public static class Date {
/**
* The day.
*/
private int day;
/**
* The month.
*/
private int month;
/**
* The year.
*/
private int year;
/**
* Creates a new date.
* @param day The day.
* @param month The month.
* @param year The year.
*/
public Date(int day, int month, int year) {
if (day > 31 || month > 12 || year > 2012/*joke*/)
throw new IllegalArgumentException();
this.day = day;
this.month = month;
this.year = year;
}
/**
* Gets the day.
* @return The day.
*/
public int getDay() {
return day;
}
/**
* Gets the month.
* @return The month.
*/
public int getMonth() {
return month;
}
/**
* Gets the year.
* @return The year.
*/
public int getYear() {
return year;
}
}
/**
* The Gregorian Calender.
*/
private static Calendar calender = new GregorianCalendar();
/**
* Gets the current date.
* @return The current date.
*/
private static Date getDate() {
return new Date(calender.get(Calendar.DAY_OF_MONTH), calender.get(Calendar.MONTH), calender.get(Calendar.YEAR));
}
/**
* Gives a player membership.
* @param c The player.
* @param months How many months of membership.
*/
public static void giveMembership(Client c, int months) {
if (c.getMembershipStartDate() == null) {
c.setMembershipStartDate(getDate());
c.setMembershipMonths(months);
PlayerSave.saveGame(c);
} else {
c.setMembershipMonths(c.getMembershipMonths + months);
}
}
/**
* Checks the players membership, resetting it if it has expired.
* @param c The player.
*/
public static void checkMembership(Client c) {
if (c.getMembershipStartDate() != null && !isMember(c))
resetMembership(c);
}
/**
* Checks if a player is a member.
* @param c The player.
* @return <code>true</code> if the player is a member, otherwise <code>false</code>.
*/
public static boolean isMember(Client c) {
if (c.getMembershipStartDate() == null)
return false;
int day = c.getMembershipStartDate().getDay();
int month = c.getMembershipStartDate().getMonth() + c.getMembershipMonths();
int year = c.getMembershipStartDate().getYear();
if (month > 12) {
month -= 12;
year++;
}
if (getDate().getYear() < year)
return true;
else if (getDate().getYear() > year)
return false;
else {
if (getDate().getMonth() < month)
return true;
else if (getDate().getMonth() > month)
return false;
else {
if (getDate().getDay() <= day)
return true;
else if (getDate().getDay() > day)
return false;
}
}
}
/**
* Resets a player's membership.
* @param c The player.
*/
public static void resetMembership(Client c) {
if (c.getMembershipStartDate() == null)
return;
c.getMembershipStartDate() = null;
c.getMembershipMonths() = 0;
c.sendMessage("You are no longer a member. To renew your membership, please go to ****.com");
}
}
This is a new version using timestamps. May not be documented.Code:package org.rs2.model.content;
import org.rs2.model.players.Client;
/**
* A class to handle membership. This is more accurate and correct to the nearest millisecond.
* @author Albert's_Computer
*
*/
public class MembershipHandler {
/**
* The amount of milliseconds in a month.
*/
private static final long MILLISECONDS_IN_A_MONTH = 2592000000l;
/**
* Gives a player membership.
* @param c The player.
* @param months How many months of membership.
*/
public static void giveMembership(Client c, int months) {
if (c.getMembershipEndTime() <= 0) {
c.setMembershipEndTime(System.currentTimeMillis() + (months * MILLISECONDS_IN_A_MONTH));
} else {
c.setMembershipStartTime(c.getMembershipEndTime() + System.currentTimeMillis() + (months * MILLISECONDS_IN_A_MONTH));
}
}
/**
* Checks if a player is a member.
* @param c The player.
* @return <code>true</code> if the player is a member, otherwise <code>false</code>.
*/
public static boolean isMember(Client c) {
return (System.currentTimeMillis() - c.getMembershipEndTime() < 0);
}
/**
* Checks the players membership, resetting it if it has expired.
* @param c The player.
*/
public static void checkMembership(Client c) {
if (!isMember(c))
resetMembership(c);
}
/**
* Resets a player's membership.
* @param c The player.
*/
public static void resetMembership(Client c) {
c.setMembershipEndTime(0);
c.sendMessage("You are no longer a member. To renew your membership, please go to ****.com");
}
}
Code:package game.model.player;
import java.sql.Timestamp;
public class MembershipHandler {
/**
* The amount of milliseconds in a month.
*/
private static final long MILLISECONDS_IN_A_MONTH = 2592000000l;
public static void giveMembership(Player player, int months) {
if (player.getMembershipDate() == null) {
player.setMembershipDate(new Timestamp(System.currentTimeMillis() + (MILLISECONDS_IN_A_MONTH * months)));
} else {
player.setMembershipDate(player.getMembershipDate().getTime() + (MILLISECONDS_IN_A_MONTH * months));
}
}
public static boolean isMember(Player player) {
return player.getMembershipDate() != null && player.getMembershipDate().after(new Timestamp(System.currentTimeMillis()));
}
public static void resetMembership(Player player) {
player.setMembershipDate(null);
}
public static void checkMembership(Player player) {
if (!isMember(player))
resetMembership(player);
}
}
