Skip to content

Commit

Permalink
Added the TimerManager.
Browse files Browse the repository at this point in the history
Adde two events fired when a timer starts and ends.

Related to #30.
  • Loading branch information
AmauryCarrade committed Sep 2, 2014
1 parent ec88403 commit cb90dcb
Show file tree
Hide file tree
Showing 6 changed files with 220 additions and 2 deletions.
10 changes: 10 additions & 0 deletions src/main/java/me/azenet/UHPlugin/UHPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ public final class UHPlugin extends JavaPlugin {
private UHBorderManager borderManager = null;
private UHRecipeManager recipeManager = null;
private UHTeamChatManager teamChatManager = null;
private UHTimerManager timerManager = null;

private UHFreezer freezer = null;

Expand Down Expand Up @@ -69,6 +70,7 @@ public void onEnable() {
borderManager = new UHBorderManager(this);
recipeManager = new UHRecipeManager(this);
teamChatManager = new UHTeamChatManager(this);
timerManager = new UHTimerManager();

freezer = new UHFreezer(this);

Expand Down Expand Up @@ -172,6 +174,14 @@ public UHTeamChatManager getTeamChatManager() {
return teamChatManager;
}

/**
* Returns the timer manager.
* @return
*/
public UHTimerManager getTimerManager() {
return timerManager;
}

/**
* Returns the freezer.
*
Expand Down
31 changes: 29 additions & 2 deletions src/main/java/me/azenet/UHPlugin/UHTimer.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
package me.azenet.UHPlugin;

import me.azenet.UHPlugin.events.TimerEndsEvent;
import me.azenet.UHPlugin.events.TimerStartsEvent;

import org.apache.commons.lang.Validate;
import org.bukkit.Bukkit;


/**
Expand Down Expand Up @@ -60,18 +64,31 @@ public void start() {

// Lower than 100 because else the counter text is longer than 16 characters.
this.displayHoursInTimer = (this.hoursLeft != 0 && this.hoursLeft < 100);

Bukkit.getServer().getPluginManager().callEvent(new TimerStartsEvent(this));
}

/**
* Stops this timer.
*/
public void stop() {
stop(false);
}

/**
* Stops this timer.
*
* @param ended If true, the timer was stopped because the timer was up.
*/
private void stop(boolean wasUp) {
this.running = false;
this.startTime = 0l;

this.hoursLeft = 0;
this.minutesLeft = 0;
this.secondsLeft = 0;

Bukkit.getServer().getPluginManager().callEvent(new TimerEndsEvent(this, wasUp));
}

/**
Expand All @@ -84,8 +101,8 @@ public void update() {

double durationInMinutes = Math.floor(this.duration / 60);

if(diffMinutes >= durationInMinutes) {
stop();
if(diffMinutes >= durationInMinutes) {
stop(true);
}
else {
if(displayHoursInTimer) {
Expand Down Expand Up @@ -216,4 +233,14 @@ public Boolean isPaused() {
public Boolean getDisplayHoursInTimer() {
return displayHoursInTimer;
}



public boolean equals(Object other) {
if(!(other instanceof UHTimer)) {
return false;
}

return ((UHTimer) other).getName().equals(this.getName());
}
}
79 changes: 79 additions & 0 deletions src/main/java/me/azenet/UHPlugin/UHTimerManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package me.azenet.UHPlugin;

import java.util.HashMap;
import java.util.Map;

public class UHTimerManager {

private Map<String,UHTimer> timers = new HashMap<String,UHTimer>();
private UHTimer mainTimer = null;

// Cached list of the running timers
private Map<String,UHTimer> runningTimers = new HashMap<String,UHTimer>();

public UHTimerManager() {

}

/**
* Registers the main timer, used to display the episodes countdown.
*
* @param timer The timer.
*/
protected void registerMainTimer(UHTimer timer) {
this.mainTimer = timer;
timer.setRegistered(true);
}

/**
* Returns the main timer, used to display the episodes countdown.
*
* @return The main timer.
*/
public UHTimer getMainTimer() {
return this.mainTimer;
}

/**
* Registers a timer.
*
* @param timer The timer to register.
* @throws IllegalArgumentException if a timer with the same name is already registered.
*/
public void registerTimer(UHTimer timer) {
if(timers.get(timer.getName()) != null) {
throw new IllegalArgumentException("A timer with the name " + timer.getName() + " is already registered.");
}

timers.put(timer.getName(), timer);

timer.setRegistered(true);
}

/**
* Unregisters a timer.
* <p>
* If the timer was not registered, nothing is done.
*
* @param timer The timer to unregister.
*/
public void unregisterTimer(UHTimer timer) {
timers.remove(timer);
runningTimers.remove(timer);

timer.setRegistered(false);
}

/**
* Updates the internal list of started timers.
*/
public void updateStartedTimersList() {
runningTimers = new HashMap<String,UHTimer>();

for(UHTimer timer : timers.values()) {
if(timer.isRunning()) {
runningTimers.put(timer.getName(), timer);
}
}
}
}
52 changes: 52 additions & 0 deletions src/main/java/me/azenet/UHPlugin/events/TimerEndsEvent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package me.azenet.UHPlugin.events;

import me.azenet.UHPlugin.UHTimer;

import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;

/**
* This event is fired when a timer ends.
*
* @author Amaury Carrade
*/
public final class TimerEndsEvent extends Event {

private static final HandlerList handlers = new HandlerList();

private UHTimer timer;
private Boolean timerWasUp = false;


public TimerEndsEvent(UHTimer timer, Boolean timerUp) {
this.timer = timer;

this.timerWasUp = timerUp;
}

/**
* Returns the timer.
*
* @return the timer.
*/
public UHTimer getTimer() {
return timer;
}

/**
* Returns true if the timer was stopped because it was up.
*
* @return true if the timer was stopped because it was up.
*/
public boolean wasTimerUp() {
return timerWasUp;
}

public HandlerList getHandlers() {
return handlers;
}

public static HandlerList getHandlerList() {
return handlers;
}
}
37 changes: 37 additions & 0 deletions src/main/java/me/azenet/UHPlugin/events/TimerStartsEvent.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package me.azenet.UHPlugin.events;

import me.azenet.UHPlugin.UHTimer;

import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;

/**
* This event is fired when a timer ends.
*
* @author Amaury Carrade
*/
public final class TimerStartsEvent extends Event {
private static final HandlerList handlers = new HandlerList();
private UHTimer timer;

public TimerStartsEvent(UHTimer timer) {
this.timer = timer;
}

/**
* Returns the timer.
*
* @return
*/
public UHTimer getTimer() {
return timer;
}

public HandlerList getHandlers() {
return handlers;
}

public static HandlerList getHandlerList() {
return handlers;
}
}
13 changes: 13 additions & 0 deletions src/main/java/me/azenet/UHPlugin/listeners/UHGameListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@

import me.azenet.UHPlugin.UHPlugin;
import me.azenet.UHPlugin.UHTeam;
import me.azenet.UHPlugin.events.TimerEndsEvent;
import me.azenet.UHPlugin.events.TimerStartsEvent;
import me.azenet.UHPlugin.i18n.I18n;

import org.bukkit.Bukkit;
Expand Down Expand Up @@ -373,4 +375,15 @@ else if(p.getTeamChatManager().isOtherTeamChatEnabled(ev.getPlayer())) {
}
}
}


@EventHandler
public void onTimerEnds(TimerEndsEvent ev) {
p.getTimerManager().updateStartedTimersList();
}

@EventHandler
public void onTimerStarts(TimerStartsEvent ev) {
p.getTimerManager().updateStartedTimersList();
}
}

0 comments on commit cb90dcb

Please sign in to comment.