mirror of
https://github.com/AuthMe/AuthMeReloaded.git
synced 2024-11-03 09:10:01 +01:00
#1218 Add onLogout to commands.yml
This commit is contained in:
parent
1c46c92b4e
commit
5c6af0330e
@ -1,8 +1,8 @@
|
||||
package fr.xephi.authme.process;
|
||||
|
||||
import fr.xephi.authme.process.login.ProcessSyncPlayerLogin;
|
||||
import fr.xephi.authme.process.logout.ProcessSynchronousPlayerLogout;
|
||||
import fr.xephi.authme.process.quit.ProcessSyncronousPlayerQuit;
|
||||
import fr.xephi.authme.process.logout.ProcessSyncPlayerLogout;
|
||||
import fr.xephi.authme.process.quit.ProcessSyncPlayerQuit;
|
||||
import fr.xephi.authme.process.register.ProcessSyncEmailRegister;
|
||||
import fr.xephi.authme.process.register.ProcessSyncPasswordRegister;
|
||||
import fr.xephi.authme.service.BukkitService;
|
||||
@ -30,29 +30,29 @@ public class SyncProcessManager {
|
||||
@Inject
|
||||
private ProcessSyncPlayerLogin processSyncPlayerLogin;
|
||||
@Inject
|
||||
private ProcessSynchronousPlayerLogout processSynchronousPlayerLogout;
|
||||
private ProcessSyncPlayerLogout processSyncPlayerLogout;
|
||||
@Inject
|
||||
private ProcessSyncronousPlayerQuit processSyncronousPlayerQuit;
|
||||
private ProcessSyncPlayerQuit processSyncPlayerQuit;
|
||||
|
||||
|
||||
public void processSyncEmailRegister(final Player player) {
|
||||
public void processSyncEmailRegister(Player player) {
|
||||
runTask(() -> processSyncEmailRegister.processEmailRegister(player));
|
||||
}
|
||||
|
||||
public void processSyncPasswordRegister(final Player player) {
|
||||
public void processSyncPasswordRegister(Player player) {
|
||||
runTask(() -> processSyncPasswordRegister.processPasswordRegister(player));
|
||||
}
|
||||
|
||||
public void processSyncPlayerLogout(final Player player) {
|
||||
runTask(() -> processSynchronousPlayerLogout.processSyncLogout(player));
|
||||
public void processSyncPlayerLogout(Player player) {
|
||||
runTask(() -> processSyncPlayerLogout.processSyncLogout(player));
|
||||
}
|
||||
|
||||
public void processSyncPlayerLogin(final Player player) {
|
||||
public void processSyncPlayerLogin(Player player) {
|
||||
runTask(() -> processSyncPlayerLogin.processPlayerLogin(player));
|
||||
}
|
||||
|
||||
public void processSyncPlayerQuit(final Player player) {
|
||||
runTask(() -> processSyncronousPlayerQuit.processSyncQuit(player));
|
||||
public void processSyncPlayerQuit(Player player, boolean wasLoggedIn) {
|
||||
runTask(() -> processSyncPlayerQuit.processSyncQuit(player, wasLoggedIn));
|
||||
}
|
||||
|
||||
private void runTask(Runnable runnable) {
|
||||
|
@ -10,6 +10,7 @@ import fr.xephi.authme.process.SynchronousProcess;
|
||||
import fr.xephi.authme.service.BukkitService;
|
||||
import fr.xephi.authme.service.CommonService;
|
||||
import fr.xephi.authme.service.TeleportationService;
|
||||
import fr.xephi.authme.settings.commandconfig.CommandManager;
|
||||
import fr.xephi.authme.settings.properties.RegistrationSettings;
|
||||
import fr.xephi.authme.settings.properties.RestrictionSettings;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -21,7 +22,7 @@ import javax.inject.Inject;
|
||||
import static fr.xephi.authme.service.BukkitService.TICKS_PER_SECOND;
|
||||
|
||||
|
||||
public class ProcessSynchronousPlayerLogout implements SynchronousProcess {
|
||||
public class ProcessSyncPlayerLogout implements SynchronousProcess {
|
||||
|
||||
@Inject
|
||||
private CommonService service;
|
||||
@ -41,9 +42,17 @@ public class ProcessSynchronousPlayerLogout implements SynchronousProcess {
|
||||
@Inject
|
||||
private TeleportationService teleportationService;
|
||||
|
||||
ProcessSynchronousPlayerLogout() {
|
||||
@Inject
|
||||
private CommandManager commandManager;
|
||||
|
||||
ProcessSyncPlayerLogout() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes a player which has been logged out.
|
||||
*
|
||||
* @param player the player logging out
|
||||
*/
|
||||
public void processSyncLogout(Player player) {
|
||||
final String name = player.getName().toLowerCase();
|
||||
|
||||
@ -53,6 +62,7 @@ public class ProcessSynchronousPlayerLogout implements SynchronousProcess {
|
||||
}
|
||||
|
||||
applyLogoutEffect(player);
|
||||
commandManager.runCommandsOnLogout(player);
|
||||
|
||||
// Player is now logout... Time to fire event !
|
||||
bukkitService.callEvent(new LogoutEvent(player));
|
@ -18,6 +18,9 @@ import org.bukkit.entity.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
/**
|
||||
* Async process called when a player quits the server.
|
||||
*/
|
||||
public class AsynchronousQuit implements AsynchronousProcess {
|
||||
|
||||
@Inject
|
||||
@ -47,14 +50,19 @@ public class AsynchronousQuit implements AsynchronousProcess {
|
||||
AsynchronousQuit() {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Processes that the given player has quit the server.
|
||||
*
|
||||
* @param player the player who left
|
||||
*/
|
||||
public void processQuit(Player player) {
|
||||
if (player == null || validationService.isUnrestricted(player.getName())) {
|
||||
return;
|
||||
}
|
||||
final String name = player.getName().toLowerCase();
|
||||
final boolean wasLoggedIn = playerCache.isAuthenticated(name);
|
||||
|
||||
if (playerCache.isAuthenticated(name)) {
|
||||
if (wasLoggedIn) {
|
||||
if (service.getProperty(RestrictionSettings.SAVE_QUIT_LOCATION)) {
|
||||
Location loc = spawnLoader.getPlayerLocationOrSpawn(player);
|
||||
PlayerAuth auth = PlayerAuth.builder()
|
||||
@ -82,7 +90,7 @@ public class AsynchronousQuit implements AsynchronousProcess {
|
||||
database.setUnlogged(name);
|
||||
|
||||
if (plugin.isEnabled()) {
|
||||
syncProcessManager.processSyncPlayerQuit(player);
|
||||
syncProcessManager.processSyncPlayerQuit(player, wasLoggedIn);
|
||||
}
|
||||
// remove player from cache
|
||||
if (database instanceof CacheDataSource) {
|
||||
|
@ -0,0 +1,33 @@
|
||||
package fr.xephi.authme.process.quit;
|
||||
|
||||
import fr.xephi.authme.data.limbo.LimboService;
|
||||
import fr.xephi.authme.process.SynchronousProcess;
|
||||
import fr.xephi.authme.settings.commandconfig.CommandManager;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
|
||||
public class ProcessSyncPlayerQuit implements SynchronousProcess {
|
||||
|
||||
@Inject
|
||||
private LimboService limboService;
|
||||
|
||||
@Inject
|
||||
private CommandManager commandManager;
|
||||
|
||||
/**
|
||||
* Processes a player having quit.
|
||||
*
|
||||
* @param player the player that left
|
||||
* @param wasLoggedIn true if the player was logged in when leaving, false otherwise
|
||||
*/
|
||||
public void processSyncQuit(Player player, boolean wasLoggedIn) {
|
||||
if (wasLoggedIn) {
|
||||
commandManager.runCommandsOnLogout(player);
|
||||
} else {
|
||||
limboService.restoreData(player);
|
||||
}
|
||||
player.leaveVehicle();
|
||||
}
|
||||
}
|
@ -1,19 +0,0 @@
|
||||
package fr.xephi.authme.process.quit;
|
||||
|
||||
import fr.xephi.authme.data.limbo.LimboService;
|
||||
import fr.xephi.authme.process.SynchronousProcess;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
|
||||
public class ProcessSyncronousPlayerQuit implements SynchronousProcess {
|
||||
|
||||
@Inject
|
||||
private LimboService limboService;
|
||||
|
||||
public void processSyncQuit(Player player) {
|
||||
limboService.restoreData(player);
|
||||
player.leaveVehicle();
|
||||
}
|
||||
}
|
@ -15,6 +15,7 @@ public class CommandConfig {
|
||||
private Map<String, Command> onSessionLogin = new LinkedHashMap<>();
|
||||
private Map<String, Command> onRegister = new LinkedHashMap<>();
|
||||
private Map<String, Command> onUnregister = new LinkedHashMap<>();
|
||||
private Map<String, Command> onLogout = new LinkedHashMap<>();
|
||||
|
||||
public Map<String, Command> getOnJoin() {
|
||||
return onJoin;
|
||||
@ -55,4 +56,12 @@ public class CommandConfig {
|
||||
public void setOnUnregister(Map<String, Command> onUnregister) {
|
||||
this.onUnregister = onUnregister;
|
||||
}
|
||||
|
||||
public Map<String, Command> getOnLogout() {
|
||||
return onLogout;
|
||||
}
|
||||
|
||||
public void setOnLogout(Map<String, Command> onLogout) {
|
||||
this.onLogout = onLogout;
|
||||
}
|
||||
}
|
||||
|
@ -36,6 +36,7 @@ public class CommandManager implements Reloadable {
|
||||
private WrappedTagReplacer<Command, Player> onSessionLoginCommands;
|
||||
private WrappedTagReplacer<Command, Player> onRegisterCommands;
|
||||
private WrappedTagReplacer<Command, Player> onUnregisterCommands;
|
||||
private WrappedTagReplacer<Command, Player> onLogoutCommands;
|
||||
|
||||
@Inject
|
||||
CommandManager(@DataFolder File dataFolder, BukkitService bukkitService, GeoIpService geoIpService,
|
||||
@ -93,6 +94,15 @@ public class CommandManager implements Reloadable {
|
||||
executeCommands(player, onUnregisterCommands.getAdaptedItems(player));
|
||||
}
|
||||
|
||||
/**
|
||||
* Runs the configured commands for when a player logs out (by command or by quitting the server).
|
||||
*
|
||||
* @param player the player that is no longer logged in
|
||||
*/
|
||||
public void runCommandsOnLogout(Player player) {
|
||||
executeCommands(player, onLogoutCommands.getAdaptedItems(player));
|
||||
}
|
||||
|
||||
private void executeCommands(Player player, List<Command> commands) {
|
||||
for (Command command : commands) {
|
||||
final String execution = command.getCommand();
|
||||
@ -117,6 +127,7 @@ public class CommandManager implements Reloadable {
|
||||
onSessionLoginCommands = newReplacer(commandConfig.getOnSessionLogin());
|
||||
onRegisterCommands = newReplacer(commandConfig.getOnRegister());
|
||||
onUnregisterCommands = newReplacer(commandConfig.getOnUnregister());
|
||||
onLogoutCommands = newReplacer(commandConfig.getOnLogout());
|
||||
}
|
||||
|
||||
private WrappedTagReplacer<Command, Player> newReplacer(Map<String, Command> commands) {
|
||||
|
@ -48,13 +48,19 @@ public final class CommandSettingsHolder implements SettingsHolder {
|
||||
" command: 'broadcast %p has joined, welcome back!'",
|
||||
" executor: CONSOLE",
|
||||
"",
|
||||
"Supported command events: onLogin, onSessionLogin, onJoin, onRegister, onUnregister"
|
||||
"Supported command events: onLogin, onSessionLogin, onJoin, onLogout, onRegister, onUnregister"
|
||||
};
|
||||
Map<String, String[]> commentMap = new HashMap<>();
|
||||
commentMap.put("", comments);
|
||||
commentMap.put("onUnregister", new String[]{
|
||||
"Commands to run whenever a player is unregistered (by himself, or by an admin)"
|
||||
});
|
||||
commentMap.put("onLogout", new String[]{
|
||||
"These commands are called whenever a logged in player uses /logout or quits.",
|
||||
"The commands are not run if a player that was not logged in quits the server.",
|
||||
"Note: if your server crashes, these commands won't be run, so don't rely on them to undo",
|
||||
"'onLogin' commands that would be dangerous for non-logged in players to have!"
|
||||
});
|
||||
return commentMap;
|
||||
}
|
||||
|
||||
|
@ -24,10 +24,15 @@
|
||||
# command: 'broadcast %p has joined, welcome back!'
|
||||
# executor: CONSOLE
|
||||
#
|
||||
# Supported command events: onLogin, onSessionLogin, onJoin, onRegister, onUnregister
|
||||
# Supported command events: onLogin, onSessionLogin, onJoin, onLogout, onRegister, onUnregister
|
||||
onJoin: {}
|
||||
onLogin: {}
|
||||
onSessionLogin: {}
|
||||
# These commands are called whenever a logged in player uses /logout or quits.
|
||||
# The commands are not run if a player that was not logged in quits the server.
|
||||
# Note: if your server crashes, these commands won't be run, so don't rely on them to undo
|
||||
# 'onLogin' commands that would be dangerous for non-logged in players to have!
|
||||
onLogout: {}
|
||||
onRegister: {}
|
||||
onSessionLogin: {}
|
||||
# Commands to run whenever a player is unregistered (by himself, or by an admin)
|
||||
onUnregister: {}
|
@ -150,6 +150,21 @@ public class CommandManagerTest {
|
||||
verifyNoMoreInteractions(bukkitService);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldExecuteCommandOnLogout() {
|
||||
// given
|
||||
copyJarFileAsCommandsYml(TEST_FILES_FOLDER + "commands.complete.yml");
|
||||
initManager();
|
||||
|
||||
// when
|
||||
manager.runCommandsOnLogout(player);
|
||||
|
||||
// then
|
||||
verify(bukkitService).dispatchConsoleCommand("broadcast Bobby (127.0.0.3) logged out");
|
||||
verifyNoMoreInteractions(bukkitService);
|
||||
verifyZeroInteractions(geoIpService);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldExecuteCommandsOnRegisterWithIncompleteConfig() {
|
||||
// given
|
||||
|
@ -25,3 +25,7 @@ onSessionLogin:
|
||||
welcome:
|
||||
command: 'msg %p Session login!'
|
||||
executor: CONSOLE
|
||||
onLogout:
|
||||
announce:
|
||||
command: 'broadcast %p (%ip) logged out'
|
||||
executor: CONSOLE
|
||||
|
Loading…
Reference in New Issue
Block a user