90 lines
3.2 KiB
Java
90 lines
3.2 KiB
Java
package fr.xephi.authme.service.velocity;
|
|
|
|
import com.google.common.io.ByteArrayDataInput;
|
|
import com.google.common.io.ByteStreams;
|
|
import fr.xephi.authme.AuthMe;
|
|
import fr.xephi.authme.ConsoleLogger;
|
|
import fr.xephi.authme.data.ProxySessionManager;
|
|
import fr.xephi.authme.initialization.SettingsDependent;
|
|
import fr.xephi.authme.output.ConsoleLoggerFactory;
|
|
import fr.xephi.authme.process.Management;
|
|
import fr.xephi.authme.service.BukkitService;
|
|
import fr.xephi.authme.settings.Settings;
|
|
import fr.xephi.authme.settings.properties.HooksSettings;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.plugin.messaging.Messenger;
|
|
import org.bukkit.plugin.messaging.PluginMessageListener;
|
|
|
|
import javax.inject.Inject;
|
|
|
|
public class VelocityReceiver implements PluginMessageListener, SettingsDependent {
|
|
|
|
private final ConsoleLogger logger = ConsoleLoggerFactory.get(VelocityReceiver.class);
|
|
|
|
private final AuthMe plugin;
|
|
private final BukkitService bukkitService;
|
|
private final ProxySessionManager proxySessionManager;
|
|
private final Management management;
|
|
|
|
private boolean isEnabled;
|
|
|
|
@Inject
|
|
VelocityReceiver(AuthMe plugin, BukkitService bukkitService, ProxySessionManager proxySessionManager,
|
|
Management management, Settings settings) {
|
|
this.plugin = plugin;
|
|
this.bukkitService = bukkitService;
|
|
this.proxySessionManager = proxySessionManager;
|
|
this.management = management;
|
|
reload(settings);
|
|
}
|
|
|
|
@Override
|
|
public void reload(Settings settings) {
|
|
this.isEnabled = settings.getProperty(HooksSettings.VELOCITY);
|
|
if (this.isEnabled) {
|
|
final Messenger messenger = plugin.getServer().getMessenger();
|
|
if (!messenger.isIncomingChannelRegistered(plugin, "authmevelocity:main")) {
|
|
messenger.registerIncomingPluginChannel(plugin, "authmevelocity:main", this);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
public void onPluginMessageReceived(String channel, Player player, byte[] bytes) {
|
|
if (!isEnabled) {
|
|
return;
|
|
}
|
|
|
|
if (channel.equals("authmevelocity:main")) {
|
|
final ByteArrayDataInput in = ByteStreams.newDataInput(bytes);
|
|
|
|
final String data = in.readUTF();
|
|
final String username = in.readUTF();
|
|
processData(username, data);
|
|
logger.debug("PluginMessage | AuthMeVelocity identifier processed");
|
|
}
|
|
}
|
|
|
|
private void processData(String username, String data) {
|
|
if (VMessageType.LOGIN.toString().equals(data)) {
|
|
performLogin(username);
|
|
}
|
|
}
|
|
|
|
private void performLogin(String name) {
|
|
Player player = bukkitService.getPlayerExact(name);
|
|
if (player != null && player.isOnline()) {
|
|
management.forceLogin(player, true);
|
|
logger.info("The user " + player.getName() + " has been automatically logged in, "
|
|
+ "as requested via plugin messaging.");
|
|
} else {
|
|
proxySessionManager.processProxySessionMessage(name);
|
|
logger.info("The user " + name + " should be automatically logged in, "
|
|
+ "as requested via plugin messaging but has not been detected, nickname has been"
|
|
+ " added to autologin queue.");
|
|
}
|
|
}
|
|
|
|
}
|