- Pass boolean (is registered) value and determine internally which message key (email registration vs. regular) to use in the message task
113 lines
3.9 KiB
Java
113 lines
3.9 KiB
Java
package fr.xephi.authme.task;
|
|
|
|
import fr.xephi.authme.ConsoleLogger;
|
|
import fr.xephi.authme.cache.auth.PlayerCache;
|
|
import fr.xephi.authme.cache.limbo.LimboCache;
|
|
import fr.xephi.authme.cache.limbo.LimboPlayer;
|
|
import fr.xephi.authme.output.MessageKey;
|
|
import fr.xephi.authme.output.Messages;
|
|
import fr.xephi.authme.settings.NewSetting;
|
|
import fr.xephi.authme.settings.properties.RegistrationSettings;
|
|
import fr.xephi.authme.settings.properties.RestrictionSettings;
|
|
import fr.xephi.authme.util.BukkitService;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.scheduler.BukkitTask;
|
|
|
|
import javax.inject.Inject;
|
|
|
|
import static fr.xephi.authme.util.BukkitService.TICKS_PER_SECOND;
|
|
|
|
/**
|
|
* Registers tasks associated with a LimboPlayer.
|
|
*/
|
|
public class LimboPlayerTaskManager {
|
|
|
|
@Inject
|
|
private Messages messages;
|
|
|
|
@Inject
|
|
private NewSetting settings;
|
|
|
|
@Inject
|
|
private BukkitService bukkitService;
|
|
|
|
@Inject
|
|
private LimboCache limboCache;
|
|
|
|
@Inject
|
|
private PlayerCache playerCache;
|
|
|
|
LimboPlayerTaskManager() { }
|
|
|
|
|
|
/**
|
|
* Registers a {@link MessageTask} for the given player name.
|
|
*
|
|
* @param name the name of the player to schedule a repeating message task for
|
|
* @param isRegistered whether the name is registered or not
|
|
* (false shows "please register", true shows "please log in")
|
|
*/
|
|
public void registerMessageTask(String name, boolean isRegistered) {
|
|
final int interval = settings.getProperty(RegistrationSettings.MESSAGE_INTERVAL);
|
|
final MessageKey key = getMessageKey(isRegistered);
|
|
if (interval > 0) {
|
|
final LimboPlayer limboPlayer = limboCache.getLimboPlayer(name);
|
|
if (limboPlayer == null) {
|
|
ConsoleLogger.info("LimboPlayer for '" + name + "' is not available");
|
|
} else {
|
|
cancelTask(limboPlayer.getMessageTask());
|
|
BukkitTask messageTask = bukkitService.runTask(new MessageTask(name, messages.retrieve(key),
|
|
interval, bukkitService, limboCache, playerCache));
|
|
limboPlayer.setMessageTask(messageTask);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Registers a {@link TimeoutTask} for the given player according to the configuration.
|
|
*
|
|
* @param player the player to register a timeout task for
|
|
*/
|
|
public void registerTimeoutTask(Player player) {
|
|
final int timeout = settings.getProperty(RestrictionSettings.TIMEOUT) * TICKS_PER_SECOND;
|
|
if (timeout > 0) {
|
|
final LimboPlayer limboPlayer = limboCache.getLimboPlayer(player.getName());
|
|
if (limboPlayer == null) {
|
|
ConsoleLogger.info("LimboPlayer for '" + player.getName() + "' is not available");
|
|
} else {
|
|
cancelTask(limboPlayer.getTimeoutTask());
|
|
String message = messages.retrieveSingle(MessageKey.LOGIN_TIMEOUT_ERROR);
|
|
BukkitTask task = bukkitService.runTaskLater(new TimeoutTask(player, message, playerCache), timeout);
|
|
limboPlayer.setTimeoutTask(task);
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Returns the appropriate message key according to the registration status and settings.
|
|
*
|
|
* @param isRegistered whether or not the username is registered
|
|
* @return the message key to display to the user
|
|
*/
|
|
private MessageKey getMessageKey(boolean isRegistered) {
|
|
if (isRegistered) {
|
|
return MessageKey.LOGIN_MESSAGE;
|
|
} else {
|
|
return settings.getProperty(RegistrationSettings.USE_EMAIL_REGISTRATION)
|
|
? MessageKey.REGISTER_EMAIL_MESSAGE
|
|
: MessageKey.REGISTER_MESSAGE;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Null-safe method to cancel a potentially existing task.
|
|
*
|
|
* @param task the task to cancel (or null)
|
|
*/
|
|
private static void cancelTask(BukkitTask task) {
|
|
if (task != null) {
|
|
task.cancel();
|
|
}
|
|
}
|
|
}
|