- Add restore method in LimboCache

* Apply it to process that have use of it
- Fix fly & walk speed not get restored
This commit is contained in:
DNx5
2016-07-04 13:21:57 +07:00
parent deffcb3e2b
commit 140275f366
14 changed files with 98 additions and 115 deletions
@@ -115,11 +115,11 @@ public class AsynchronousJoin implements AsynchronousProcess {
return;
}
limboCache.updatePlayerData(player);
final boolean isAuthAvailable = database.isAuthAvailable(name);
if (isAuthAvailable) {
limboCache.addPlayerData(player);
service.setGroup(player, AuthGroupType.NOT_LOGGED_IN);
// Protect inventory
@@ -150,7 +150,9 @@ public class AsynchronousJoin implements AsynchronousProcess {
}
}
} else {
// Not Registered
// Not Registered. Delete old data, load default one.
limboCache.deletePlayerData(player);
limboCache.addPlayerData(player);
// Groups logic
service.setGroup(player, AuthGroupType.UNREGISTERED);
@@ -3,20 +3,16 @@ package fr.xephi.authme.process.login;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import fr.xephi.authme.AuthMe;
import fr.xephi.authme.cache.auth.PlayerAuth;
import fr.xephi.authme.cache.limbo.LimboCache;
import fr.xephi.authme.cache.limbo.PlayerData;
import fr.xephi.authme.datasource.DataSource;
import fr.xephi.authme.events.LoginEvent;
import fr.xephi.authme.events.RestoreInventoryEvent;
import fr.xephi.authme.listener.AuthMePlayerListener;
import fr.xephi.authme.listener.protocollib.ProtocolLibService;
import fr.xephi.authme.permission.AuthGroupType;
import fr.xephi.authme.process.ProcessService;
import fr.xephi.authme.process.SynchronousProcess;
import fr.xephi.authme.settings.properties.HooksSettings;
import fr.xephi.authme.settings.properties.RegistrationSettings;
import fr.xephi.authme.settings.properties.RestrictionSettings;
import fr.xephi.authme.util.BukkitService;
import fr.xephi.authme.util.TeleportationService;
import org.apache.commons.lang.reflect.MethodUtils;
@@ -60,7 +56,8 @@ public class ProcessSyncPlayerLogin implements SynchronousProcess {
@Inject
private TeleportationService teleportationService;
ProcessSyncPlayerLogin() { }
ProcessSyncPlayerLogin() {
}
private void restoreInventory(Player player) {
RestoreInventoryEvent event = new RestoreInventoryEvent(player);
@@ -83,26 +80,12 @@ public class ProcessSyncPlayerLogin implements SynchronousProcess {
public void processPlayerLogin(Player player) {
final String name = player.getName().toLowerCase();
// Limbo contains the State of the Player before /login
final PlayerData limbo = limboCache.getPlayerData(name);
final PlayerAuth auth = dataSource.getAuth(name);
if (limbo != null) {
// Restore Op state and Permission Group
player.setOp(limbo.isOperator());
// Restore primary group
service.setGroup(player, AuthGroupType.LOGGED_IN);
// Restore can-fly state
player.setAllowFlight(limbo.isCanFly());
// Restore speed
if (!service.getProperty(RestrictionSettings.ALLOW_UNAUTHED_MOVEMENT)
&& service.getProperty(RestrictionSettings.REMOVE_SPEED)) {
player.setWalkSpeed(limbo.getWalkSpeed());
player.setFlySpeed(0.2F);
}
teleportationService.teleportOnLogin(player, auth, limbo);
if (limboCache.hasPlayerData(name)) {
limboCache.restoreData(player);
limboCache.deletePlayerData(player);
// do we really need to use location from database for now?
// because LimboCache#restoreData teleport player to last location.
//teleportationService.teleportOnLogin(player, auth, limbo);
if (RESTORE_COLLISIONS && !service.getProperty(KEEP_COLLISIONS_DISABLED)) {
player.setCollidable(true);
}
@@ -110,9 +93,6 @@ public class ProcessSyncPlayerLogin implements SynchronousProcess {
if (service.getProperty(PROTECT_INVENTORY_BEFORE_LOGIN)) {
restoreInventory(player);
}
// Clean up no longer used temporary data
limboCache.deletePlayerData(player);
}
// We can now display the join message (if delayed)
@@ -157,10 +137,10 @@ public class ProcessSyncPlayerLogin implements SynchronousProcess {
}
private void sendTo(Player player) {
if(!service.getProperty(HooksSettings.BUNGEECORD)) {
if (!service.getProperty(HooksSettings.BUNGEECORD)) {
return;
}
if(service.getProperty(HooksSettings.BUNGEECORD_SERVER).isEmpty()) {
if (service.getProperty(HooksSettings.BUNGEECORD_SERVER).isEmpty()) {
return;
}
@@ -171,7 +151,7 @@ public class ProcessSyncPlayerLogin implements SynchronousProcess {
}
private void sendBungeeMessage(Player player) {
if(!service.getProperty(HooksSettings.BUNGEECORD)) {
if (!service.getProperty(HooksSettings.BUNGEECORD)) {
return;
}
@@ -50,7 +50,7 @@ public class AsynchronousLogout implements AsynchronousProcess {
database.updateQuitLoc(auth);
}
limboCache.updatePlayerData(player);
limboCache.addPlayerData(player);
playerCache.removePlayer(name);
database.setUnlogged(name);
syncProcessManager.processSyncPlayerLogout(player);
@@ -45,7 +45,8 @@ public class ProcessSynchronousPlayerLogout implements SynchronousProcess {
@Inject
private SessionManager sessionManager;
ProcessSynchronousPlayerLogout() { }
ProcessSynchronousPlayerLogout() {
}
private void sendBungeeMessage(Player player) {
@@ -82,9 +83,7 @@ public class ProcessSynchronousPlayerLogout implements SynchronousProcess {
private void applyLogoutEffect(Player player) {
// dismount player
if (player.isInsideVehicle() && player.getVehicle() != null) {
player.getVehicle().eject();
}
player.leaveVehicle();
// Apply Blindness effect
final int timeout = service.getProperty(RestrictionSettings.TIMEOUT) * TICKS_PER_SECOND;
@@ -2,12 +2,8 @@ package fr.xephi.authme.process.quit;
import fr.xephi.authme.cache.backup.PlayerDataStorage;
import fr.xephi.authme.cache.limbo.LimboCache;
import fr.xephi.authme.cache.limbo.PlayerData;
import fr.xephi.authme.process.ProcessService;
import fr.xephi.authme.process.SynchronousProcess;
import fr.xephi.authme.settings.properties.RestrictionSettings;
import fr.xephi.authme.util.StringUtils;
import fr.xephi.authme.util.Utils;
import org.bukkit.entity.Player;
import javax.inject.Inject;
@@ -25,27 +21,12 @@ public class ProcessSyncronousPlayerQuit implements SynchronousProcess {
private LimboCache limboCache;
public void processSyncQuit(Player player) {
PlayerData limbo = limboCache.getPlayerData(player.getName().toLowerCase());
if (limbo != null) { // it mean player is not authenticated
// Only delete if we don't need player's last location
if (service.getProperty(RestrictionSettings.TELEPORT_UNAUTHED_TO_SPAWN)) {
limboCache.removePlayerData(player);
} else {
// Restore data if its about to delete PlayerData
if (!StringUtils.isEmpty(limbo.getGroup())) {
Utils.addNormal(player, limbo.getGroup());
}
player.setOp(limbo.isOperator());
player.setAllowFlight(limbo.isCanFly());
player.setWalkSpeed(limbo.getWalkSpeed());
limboCache.deletePlayerData(player);
}
if (limboCache.hasPlayerData(player.getName().toLowerCase())) { // it mean player is not authenticated
limboCache.removeFromCache(player);
} else {
// Write player's location, so we could retrieve it later on player next join
if (service.getProperty(RestrictionSettings.TELEPORT_UNAUTHED_TO_SPAWN)) {
if (!playerDataStorage.hasData(player)) {
playerDataStorage.saveData(player);
}
// Save player's data, so we could retrieve it later on player next join
if (!playerDataStorage.hasData(player)) {
playerDataStorage.saveData(player);
}
}
@@ -5,7 +5,6 @@ import com.google.common.io.ByteStreams;
import fr.xephi.authme.AuthMe;
import fr.xephi.authme.ConsoleLogger;
import fr.xephi.authme.cache.limbo.LimboCache;
import fr.xephi.authme.cache.limbo.PlayerData;
import fr.xephi.authme.events.LoginEvent;
import fr.xephi.authme.events.RestoreInventoryEvent;
import fr.xephi.authme.listener.protocollib.ProtocolLibService;
@@ -20,6 +19,7 @@ import fr.xephi.authme.settings.properties.RegistrationSettings;
import fr.xephi.authme.settings.properties.SecuritySettings;
import fr.xephi.authme.task.PlayerDataTaskManager;
import fr.xephi.authme.util.BukkitService;
import fr.xephi.authme.util.TeleportationService;
import fr.xephi.authme.util.Utils;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
@@ -35,23 +35,21 @@ public class ProcessSyncPasswordRegister implements SynchronousProcess {
@Inject
private AuthMe plugin;
@Inject
private ProcessService service;
@Inject
private BukkitService bukkitService;
@Inject
private ProtocolLibService protocolLibService;
@Inject
private LimboCache limboCache;
@Inject
private PlayerDataTaskManager playerDataTaskManager;
@Inject
private TeleportationService teleportationService;
ProcessSyncPasswordRegister() { }
ProcessSyncPasswordRegister() {
}
private void sendBungeeMessage(Player player) {
@@ -69,7 +67,7 @@ public class ProcessSyncPasswordRegister implements SynchronousProcess {
}
for (String command : service.getProperty(RegistrationSettings.FORCE_REGISTER_COMMANDS_AS_CONSOLE)) {
Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(),
command.replace("%p", player.getName()));
command.replace("%p", player.getName()));
}
}
@@ -93,10 +91,8 @@ public class ProcessSyncPasswordRegister implements SynchronousProcess {
public void processPasswordRegister(Player player) {
final String name = player.getName().toLowerCase();
PlayerData limbo = limboCache.getPlayerData(name);
if (limbo != null) {
Utils.teleportToSpawn(player);
if (limboCache.hasPlayerData(name)) {
teleportationService.teleportOnJoin(player);
if (service.getProperty(PROTECT_INVENTORY_BEFORE_LOGIN)) {
RestoreInventoryEvent event = new RestoreInventoryEvent(player);
bukkitService.callEvent(event);
@@ -104,7 +100,7 @@ public class ProcessSyncPasswordRegister implements SynchronousProcess {
player.updateInventory();
}
}
limboCache.restoreData(player);
limboCache.deletePlayerData(player);
}
@@ -62,6 +62,7 @@ public class AsynchronousUnregister implements AsynchronousProcess {
if (!Settings.getRegisteredGroup.isEmpty()) {
service.setGroup(player, AuthGroupType.UNREGISTERED);
}
limboCache.deletePlayerData(player);
limboCache.addPlayerData(player);
playerDataTaskManager.registerTimeoutTask(player);
playerDataTaskManager.registerMessageTask(name, false);