Fixed CrazyLogin restore actions

This commit is contained in:
games647
2016-01-27 14:24:00 +01:00
parent e389433138
commit eacbb1ed76

View File

@ -1,8 +1,14 @@
package com.github.games647.fastlogin.bukkit.hooks;
import com.comphenix.protocol.reflect.FuzzyReflection;
import de.st_ddt.crazylogin.CrazyLogin;
import de.st_ddt.crazylogin.data.LoginPlayerData;
import de.st_ddt.crazylogin.databases.CrazyLoginDataDatabase;
import de.st_ddt.crazylogin.listener.PlayerListener;
import de.st_ddt.crazylogin.metadata.Authenticated;
import java.util.logging.Level;
import org.bukkit.entity.Player;
@ -12,6 +18,8 @@ import org.bukkit.entity.Player;
*/
public class CrazyLoginHook implements AuthPlugin {
private final PlayerListener playerListener = getListener();
@Override
public void forceLogin(Player player) {
CrazyLogin crazyLoginPlugin = CrazyLogin.getPlugin();
@ -20,6 +28,27 @@ public class CrazyLoginHook implements AuthPlugin {
if (playerData != null) {
//mark the account as logged in
playerData.setLoggedIn(true);
String ip = player.getAddress().getAddress().getHostAddress();
//this should be done after login to restore the inventory, unhide players, prevent potential memory leaks...
//extracted from: https://github.com/ST-DDT/CrazyLogin/blob/master/src/main/java/de/st_ddt/crazylogin/CrazyLogin.java#L1948
playerData.resetLoginFails();
player.setFireTicks(0);
if (playerListener != null) {
playerListener.removeMovementBlocker(player);
playerListener.disableHidenInventory(player);
playerListener.disableSaveLogin(player);
playerListener.unhidePlayer(player);
}
//loginFailuresPerIP.remove(IP);
//illegalCommandUsesPerIP.remove(IP);
//tempBans.remove(IP);
playerData.addIP(ip);
crazyLoginPlugin.getCrazyDatabase().saveWithoutPassword(playerData);
player.setMetadata("Authenticated", new Authenticated(crazyLoginPlugin, player));
crazyLoginPlugin.unregisterDynamicHooks();
}
}
@ -43,4 +72,18 @@ public class CrazyLoginHook implements AuthPlugin {
crazyDatabase.save(playerData);
}
}
private PlayerListener getListener() {
CrazyLogin pluginInstance = CrazyLogin.getPlugin();
PlayerListener listener;
try {
listener = FuzzyReflection.getFieldValue(pluginInstance, PlayerListener.class, true);
} catch (Exception ex) {
pluginInstance.getLogger().log(Level.SEVERE, "Failed to get the listener instance for auto login", ex);
listener = null;
}
return listener;
}
}