Was doing some fun coding while working for mbscape, and wrote this. Few people enjoyed it and its rather neat. Few criticism on the code, as i know as it could have been written neater, but it's rather neat as it is.
//Event.java
Code:
package com.rs.game.player.content.revents;
/**
*
* @author Frostbite<Abstract>
* @contact<skype;frostbitersps><email;[email protected]>
*/
public interface Event {
public String getEventName();
public void startEvent();
public void endEvent();
}
//EventConstants.java
Code:
package com.rs.game.player.content.revents;
/**
*
* @author Frostbite<Abstract>
* @contact<skype;frostbitersps><email;[email protected]>
*/
public enum EventConstants {
NULL, STEALING_CREATIONS, BARROWS,
COMBAT, RUNECRAFTING, DUNGEONEERING, MINING, SMITHING, FISHING, COOKING, FIREMAKING, WOODCUTTING, FARMING,
CRAFTING, FLETCHING, AGILITY, HERBLORE
}
//EventManager.java
Code:
package com.rs.game.player.content.revents;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import com.rs.game.player.content.revents.impl.DropIncreaseTask;
import com.rs.game.player.content.revents.impl.ExperienceEventTask;
import com.rs.game.player.content.revents.impl.ExperienceEventWildernessTask;
import com.rs.game.player.content.revents.impl.MinigameTask;
import com.rs.game.player.content.revents.impl.SkillEventTask;
/**
*
* @author Frostbite<Abstract>
* @contact<skype;frostbitersps><email;[email protected]>
*/
public class EventManager implements Serializable {
private static final long serialVersionUID = 8700494964869210199L;
private static Map<EventType, EventConstants> activeEvents = new HashMap<>();
private static Map<EventType, EventTimerTask> handledEvents = new HashMap<>();
/**
* Handled Events
* @initalizes each event
*/
static {
handledEvents.put(EventType.EXPERIENCE_EVENT, new ExperienceEventTask());
handledEvents.put(EventType.EXPERIENCE_EVENT_WILDERNESS, new ExperienceEventWildernessTask());
handledEvents.put(EventType.DROP_INCREASE, new DropIncreaseTask());
handledEvents.put(EventType.MINIGAME_EVENT, new MinigameTask());
handledEvents.put(EventType.SKILL_EVENT, new SkillEventTask());
}
/**
* Returns <Map> Elements @activeEvents
* @return
*/
public static Map<EventType, EventConstants> getActiveEvents() {
return activeEvents;
}
/**
* Returns <Map> Elements @handledEvents
* @return
*/
public static Map<EventType, EventTimerTask> getHandledEvnets() {
return handledEvents;
}
/**
* Adds @Event into <Map>
* @param event
* @return
*/
public static boolean addEvent(EventType event, EventConstants minigame) {
if(eventStarted(event, minigame))
return false;
if(!handledEvents(event))
return false;
activeEvents.put(event, minigame);
return true;
}
/**
* Removes @Event from <Map>
* @param event
* @return
*/
public static boolean removeEvent(EventType event, EventConstants minigame) {
if(!eventStarted(event, minigame))
return false;
if(!handledEvents.containsKey(event))
return false;
activeEvents.remove(event, minigame);
return true;
}
/**
* Checks if <Map> contains @Event
* @param event
* @return
*/
public static boolean eventStarted(EventType event, EventConstants minigame) {
return activeEvents.containsKey(event) && activeEvents.containsValue(minigame);
}
/**
* Checks if <Map> contains @Event
* @param event
* @return
*/
public static boolean eventStarted(EventType event) {
return activeEvents.containsKey(event);
}
/**
* Checks if <Map> contains @HandledEvent
* @param event
* @return
*/
public static boolean handledEvents(EventType event) {
return handledEvents.containsKey(event);
}
}
//EventTimerTask.java
Code:
package com.rs.game.player.content.revents;
import java.util.concurrent.TimeUnit;
/**
*
* @author Frostbite<Abstract>
* @contact<skype;frostbitersps><email;[email protected]>
*/
public interface EventTimerTask {
public int getTime();
public TimeUnit getTimeUnit();
public void initalizeTask();
}
//EventType.java
Code:
package com.rs.game.player.content.revents;
/**
*
* @author Frostbite<Abstract>
* @contact<skype;frostbitersps><email;[email protected]>
*/
public enum EventType {
EXPERIENCE_EVENT(15),
EXPERIENCE_EVENT_WILDERNESS(20),
BOSS_EVENT(20),
MINIGAME_EVENT(30),
DAILY(15),
DROP_INCREASE(15),
SKILL_EVENT(10),
;
public int time;
EventType(int time) {
this.time = time;
}
public int getTime() {
return time;
}
}
//QueueEvent.java
Code:
package com.rs.game.player.content.revents;
import java.util.concurrent.TimeUnit;
import com.rs.cache.loaders.Configs;
import com.rs.cores.CoresManager;
import com.rs.game.World;
import com.rs.game.player.Player;
import com.rs.utils.Utils;
/**
*
* @author Frostbite<Abstract>
* @contact<skype;frostbitersps><email;[email protected]>
*/
public class QueueEvent implements Event {
public EventType event;
public EventConstants minigame;
public QueueEvent(EventType event) {
this.event = event;
}
public QueueEvent(EventType event, EventConstants minigame) {
this.event = event;
this.minigame = minigame;
}
@Override
public String getEventName() {
return Utils.formatString(event.name());
}
@Override
public void startEvent() {
if(EventManager.eventStarted(event, minigame))
return;
EventManager.addEvent(event, minigame);
for (Player world : World.getPlayers()) {
world.getPackets().sendGameMessage("<img=5><col=DE9210>" + getEventName() + " has just started and will last for " + event.getTime() + " minutes!");
}
CoresManager.slowExecutor.schedule(new Runnable() {
@Override
public void run() {
endEvent();
}
}, event.getTime(), (Configs.DEVELOPER_WORLD ? TimeUnit.SECONDS : TimeUnit.MINUTES));
}
@Override
public void endEvent() {
for (Player world : World.getPlayers()) {
world.getPackets().sendGameMessage("<img=5><col=DE9210>" + getEventName() + " has just ended!");
}
EventManager.removeEvent(event, minigame);
}
}
//SkillEvent.java
Code:
package com.rs.game.player.content.revents;
import java.util.concurrent.TimeUnit;
import com.rs.cache.loaders.Configs;
import com.rs.cores.CoresManager;
import com.rs.game.World;
import com.rs.game.player.Player;
import com.rs.utils.Utils;
/**
*
* @author Frostbite<Abstract>
* @contact<skype;frostbitersps><email;[email protected]>
*/
public class SkillEvent implements Event {
public EventType event;
public EventConstants constants;
public SkillEvent(EventType event) {
this.event = event;
}
public SkillEvent(EventType event, EventConstants minigame) {
this.event = event;
this.constants = minigame;
}
@Override
public String getEventName() {
return Utils.formatString(event.name());
}
@Override
public void startEvent() {
if(EventManager.eventStarted(event, constants))
return;
EventManager.addEvent(event, constants);
for (Player world : World.getPlayers()) {
world.getPackets().sendGameMessage("<img=5><col=DE9210>" + getEventName() + " for " + Utils.formatString(constants.name()) + " has just started and will last for " + event.getTime() + " minutes!");
}
CoresManager.slowExecutor.schedule(new Runnable() {
@Override
public void run() {
endEvent();
}
}, event.getTime(), (Configs.DEVELOPER_WORLD ? TimeUnit.SECONDS : TimeUnit.MINUTES));
}
@Override
public void endEvent() {
for (Player world : World.getPlayers()) {
world.getPackets().sendGameMessage("<img=5><col=DE9210>" + getEventName() + " for " + Utils.formatString(constants.name()) + " has just ended!");
}
EventManager.removeEvent(event, constants);
}
}
Here is an example on how you would create a class with the interface of EventTimerTask
Code:
package com.rs.game.player.content.revents.impl;
import java.util.concurrent.TimeUnit;
import com.rs.cores.CoresManager;
import com.rs.game.player.content.revents.EventTimerTask;
import com.rs.game.player.content.revents.EventType;
import com.rs.game.player.content.revents.QueueEvent;
/**
*
* @author Frostbite<Abstract>
* @contact<skype;frostbitersps><email;[email protected]>
*/
public class ExperienceEventTask implements EventTimerTask {
public ExperienceEventTask() {
initalizeTask();
}
@Override
public int getTime() {
return 50;
}
@Override
public TimeUnit getTimeUnit() {
return TimeUnit.MINUTES;
}
@Override
public void initalizeTask() {
CoresManager.slowExecutor.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
new QueueEvent(EventType.EXPERIENCE_EVENT).startEvent();
}
}, getTime(), getTime(), getTimeUnit());
}
}