diff --git a/proxy/src/main/java/com/glyart/authmevelocity/proxy/event/PreSendOnLoginEvent.java b/proxy/src/main/java/com/glyart/authmevelocity/proxy/event/PreSendOnLoginEvent.java index 41672e8..90521e2 100644 --- a/proxy/src/main/java/com/glyart/authmevelocity/proxy/event/PreSendOnLoginEvent.java +++ b/proxy/src/main/java/com/glyart/authmevelocity/proxy/event/PreSendOnLoginEvent.java @@ -7,6 +7,8 @@ import com.velocitypowered.api.event.ResultedEvent.GenericResult; import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.server.RegisteredServer; +import org.jetbrains.annotations.NotNull; + /** * Event to be executed just before sending a player to another server after login/registration. * Here you have the ability to deny the event. @@ -24,7 +26,7 @@ public final class PreSendOnLoginEvent implements ResultedEvent { * @param actualServer the server on which the player is located * @param serverToSend the server to which the player will be sent */ - public PreSendOnLoginEvent(Player player, RegisteredServer actualServer, RegisteredServer serverToSend){ + public PreSendOnLoginEvent(@NotNull Player player, @NotNull RegisteredServer actualServer, @NotNull RegisteredServer serverToSend){ this.player = player; this.actualserver = actualServer; this.serverToSend = serverToSend; @@ -34,7 +36,7 @@ public final class PreSendOnLoginEvent implements ResultedEvent { * Obtain the logged player * @return the player */ - public Player getPlayer(){ + public @NotNull Player getPlayer(){ return this.player; } @@ -42,7 +44,7 @@ public final class PreSendOnLoginEvent implements ResultedEvent { * Obtain the server on which the player is located * @return the actual server of the player */ - public RegisteredServer getActualServer(){ + public @NotNull RegisteredServer getActualServer(){ return this.actualserver; } @@ -50,7 +52,7 @@ public final class PreSendOnLoginEvent implements ResultedEvent { * Obtain the server to which the player will be sent * @return the server to send the player */ - public RegisteredServer getSendServer(){ + public @NotNull RegisteredServer getSendServer(){ return this.serverToSend; } @@ -58,7 +60,7 @@ public final class PreSendOnLoginEvent implements ResultedEvent { * Get the result of the event */ @Override - public GenericResult getResult() { + public @NotNull GenericResult getResult() { return this.result; } @@ -67,7 +69,7 @@ public final class PreSendOnLoginEvent implements ResultedEvent { * @param newresult the new result */ @Override - public void setResult(GenericResult newresult) { + public void setResult(@NotNull GenericResult newresult) { this.result = Objects.requireNonNull(newresult); } } diff --git a/proxy/src/main/java/com/glyart/authmevelocity/proxy/event/ProxyForcedUnregisterEvent.java b/proxy/src/main/java/com/glyart/authmevelocity/proxy/event/ProxyForcedUnregisterEvent.java new file mode 100644 index 0000000..6ac6c9f --- /dev/null +++ b/proxy/src/main/java/com/glyart/authmevelocity/proxy/event/ProxyForcedUnregisterEvent.java @@ -0,0 +1,17 @@ +package com.glyart.authmevelocity.proxy.event; + +import com.velocitypowered.api.proxy.Player; + +import org.jetbrains.annotations.Nullable; + +public class ProxyForcedUnregisterEvent { + private final Player player; + + public ProxyForcedUnregisterEvent(@Nullable Player player){ + this.player = player; + } + + public @Nullable Player getPlayer(){ + return this.player; + } +} diff --git a/proxy/src/main/java/com/glyart/authmevelocity/proxy/event/ProxyUnregisterEvent.java b/proxy/src/main/java/com/glyart/authmevelocity/proxy/event/ProxyUnregisterEvent.java new file mode 100644 index 0000000..beede3a --- /dev/null +++ b/proxy/src/main/java/com/glyart/authmevelocity/proxy/event/ProxyUnregisterEvent.java @@ -0,0 +1,17 @@ +package com.glyart.authmevelocity.proxy.event; + +import com.velocitypowered.api.proxy.Player; + +import org.jetbrains.annotations.NotNull; + +public class ProxyUnregisterEvent { + private final Player player; + + public ProxyUnregisterEvent(@NotNull Player player){ + this.player = player; + } + + public @NotNull Player getPlayer(){ + return this.player; + } +} diff --git a/proxy/src/main/java/com/glyart/authmevelocity/proxy/listener/PluginMessageListener.java b/proxy/src/main/java/com/glyart/authmevelocity/proxy/listener/PluginMessageListener.java index 9761e2c..e3f48ef 100644 --- a/proxy/src/main/java/com/glyart/authmevelocity/proxy/listener/PluginMessageListener.java +++ b/proxy/src/main/java/com/glyart/authmevelocity/proxy/listener/PluginMessageListener.java @@ -6,9 +6,11 @@ import java.util.Random; import com.glyart.authmevelocity.proxy.AuthmeVelocityAPI; import com.glyart.authmevelocity.proxy.config.AuthMeConfig; import com.glyart.authmevelocity.proxy.event.PreSendOnLoginEvent; +import com.glyart.authmevelocity.proxy.event.ProxyForcedUnregisterEvent; import com.glyart.authmevelocity.proxy.event.ProxyLoginEvent; import com.glyart.authmevelocity.proxy.event.ProxyLogoutEvent; import com.glyart.authmevelocity.proxy.event.ProxyRegisterEvent; +import com.glyart.authmevelocity.proxy.event.ProxyUnregisterEvent; import com.google.common.io.ByteArrayDataInput; import com.velocitypowered.api.event.Continuation; import com.velocitypowered.api.event.Subscribe; @@ -19,6 +21,7 @@ import com.velocitypowered.api.proxy.ServerConnection; import com.velocitypowered.api.proxy.server.RegisteredServer; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; public class PluginMessageListener { @@ -48,27 +51,33 @@ public class PluginMessageListener { ByteArrayDataInput input = event.dataAsDataStream(); final String sChannel = input.readUTF(); - final Player loggedPlayer = connection.getPlayer(); + final String playername = input.readUTF(); + final @Nullable Player loggedPlayer = proxy.getPlayer(playername).orElse(null); switch(sChannel){ case "LOGIN" : - if (api.addPlayer(loggedPlayer)){ + if (loggedPlayer != null && api.addPlayer(loggedPlayer)){ createServerConnectionRequest(loggedPlayer, proxy, logger, connection); } - continuation.resume(); break; case "LOGOUT": - if(api.removePlayer(loggedPlayer)){ + if(loggedPlayer != null && api.removePlayer(loggedPlayer)){ proxy.getEventManager().fireAndForget(new ProxyLogoutEvent(loggedPlayer)); } - continuation.resume(); break; case "REGISTER": - proxy.getEventManager().fireAndForget(new ProxyRegisterEvent(loggedPlayer)); - continuation.resume(); + if(loggedPlayer != null) + proxy.getEventManager().fireAndForget(new ProxyRegisterEvent(loggedPlayer)); break; - - default: continuation.resume(); + case "UNREGISTER": + if(loggedPlayer != null) + proxy.getEventManager().fireAndForget(new ProxyUnregisterEvent(loggedPlayer)); + break; + case "FORCE_UNREGISTER": + proxy.getEventManager().fireAndForget(new ProxyForcedUnregisterEvent(loggedPlayer)); + break; + default: break; } + continuation.resume(); } private void createServerConnectionRequest(Player loggedPlayer, ProxyServer proxy, Logger logger, ServerConnection connection){ diff --git a/spigot/src/main/java/com/glyart/authmevelocity/spigot/AuthMeVelocityPlugin.java b/spigot/src/main/java/com/glyart/authmevelocity/spigot/AuthMeVelocityPlugin.java index 325413a..1b1bb27 100644 --- a/spigot/src/main/java/com/glyart/authmevelocity/spigot/AuthMeVelocityPlugin.java +++ b/spigot/src/main/java/com/glyart/authmevelocity/spigot/AuthMeVelocityPlugin.java @@ -3,6 +3,8 @@ package com.glyart.authmevelocity.spigot; import com.glyart.authmevelocity.spigot.listeners.AuthMeListener; import com.google.common.io.ByteArrayDataOutput; import com.google.common.io.ByteStreams; + +import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import org.jetbrains.annotations.NotNull; @@ -14,13 +16,18 @@ public class AuthMeVelocityPlugin extends JavaPlugin { this.getServer().getMessenger().registerOutgoingPluginChannel(this, CHANNEL); this.getServer().getPluginManager().registerEvents(new AuthMeListener(this), this); - this.getLogger().info("AuthMeVelocity enabled."); + this.getSLF4JLogger().info("AuthMeVelocity enabled"); } - public void sendMessageToProxy(@NotNull final Player player, MessageType type) { + public void sendMessageToProxy(final Player player, @NotNull MessageType type, @NotNull String playername) { ByteArrayDataOutput out = ByteStreams.newDataOutput(); out.writeUTF(type.toString()); + out.writeUTF(playername); - player.sendPluginMessage(this, CHANNEL, out.toByteArray()); + if(player == null){ + Bukkit.getServer().sendPluginMessage(this, CHANNEL, out.toByteArray()); + } else { + player.sendPluginMessage(this, CHANNEL, out.toByteArray()); + } } } diff --git a/spigot/src/main/java/com/glyart/authmevelocity/spigot/MessageType.java b/spigot/src/main/java/com/glyart/authmevelocity/spigot/MessageType.java index 46455ee..52c054d 100644 --- a/spigot/src/main/java/com/glyart/authmevelocity/spigot/MessageType.java +++ b/spigot/src/main/java/com/glyart/authmevelocity/spigot/MessageType.java @@ -1,5 +1,5 @@ package com.glyart.authmevelocity.spigot; public enum MessageType { - LOGIN, REGISTER, LOGOUT + LOGIN, REGISTER, LOGOUT, FORCE_UNREGISTER, UNREGISTER; } diff --git a/spigot/src/main/java/com/glyart/authmevelocity/spigot/events/PreSendLoginEvent.java b/spigot/src/main/java/com/glyart/authmevelocity/spigot/events/PreSendLoginEvent.java index 6af7daa..d993897 100644 --- a/spigot/src/main/java/com/glyart/authmevelocity/spigot/events/PreSendLoginEvent.java +++ b/spigot/src/main/java/com/glyart/authmevelocity/spigot/events/PreSendLoginEvent.java @@ -10,7 +10,7 @@ public class PreSendLoginEvent extends PlayerEvent implements Cancellable { private static final HandlerList HANDLERS = new HandlerList(); private boolean isCancelled = false; - public PreSendLoginEvent(@NotNull final Player player) { + public PreSendLoginEvent(@NotNull Player player) { super(player); } diff --git a/spigot/src/main/java/com/glyart/authmevelocity/spigot/listeners/AuthMeListener.java b/spigot/src/main/java/com/glyart/authmevelocity/spigot/listeners/AuthMeListener.java index 67188c7..96cfa31 100644 --- a/spigot/src/main/java/com/glyart/authmevelocity/spigot/listeners/AuthMeListener.java +++ b/spigot/src/main/java/com/glyart/authmevelocity/spigot/listeners/AuthMeListener.java @@ -7,6 +7,8 @@ import com.glyart.authmevelocity.spigot.events.PreSendLoginEvent; import fr.xephi.authme.events.LoginEvent; import fr.xephi.authme.events.LogoutEvent; import fr.xephi.authme.events.RegisterEvent; +import fr.xephi.authme.events.UnregisterByAdminEvent; +import fr.xephi.authme.events.UnregisterByPlayerEvent; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -21,21 +23,31 @@ public class AuthMeListener implements Listener { } @EventHandler(priority = EventPriority.HIGHEST) - public void onLogin(final LoginEvent event) { + public void onLogin(LoginEvent event) { final Player player = event.getPlayer(); PreSendLoginEvent preSendLoginEvent = new PreSendLoginEvent(player); if(preSendLoginEvent.callEvent()){ - plugin.sendMessageToProxy(player, MessageType.LOGIN); + plugin.sendMessageToProxy(player, MessageType.LOGIN, player.getName()); } } @EventHandler public void onRegister(RegisterEvent event){ - plugin.sendMessageToProxy(event.getPlayer(), MessageType.REGISTER); + plugin.sendMessageToProxy(event.getPlayer(), MessageType.REGISTER, event.getPlayer().getName()); } @EventHandler public void onLogout(LogoutEvent event){ - plugin.sendMessageToProxy(event.getPlayer(), MessageType.LOGOUT); + plugin.sendMessageToProxy(event.getPlayer(), MessageType.LOGOUT, event.getPlayer().getName()); + } + + @EventHandler + public void onUnRegister(UnregisterByPlayerEvent event){ + plugin.sendMessageToProxy(event.getPlayer(), MessageType.UNREGISTER, event.getPlayer().getName()); + } + + @EventHandler + public void onAdminUnRegister(UnregisterByAdminEvent event){ + plugin.sendMessageToProxy(event.getPlayer(), MessageType.FORCE_UNREGISTER, event.getPlayerName()); } } diff --git a/spigot/src/main/resources/plugin.yml b/spigot/src/main/resources/plugin.yml index aea4eb3..db26376 100644 --- a/spigot/src/main/resources/plugin.yml +++ b/spigot/src/main/resources/plugin.yml @@ -1,6 +1,7 @@ name: AuthMeVelocity -author: xQuickGlare +authors: [xQuickGlare, 4drian3d] version: ${project.version} main: com.glyart.authmevelocity.spigot.AuthMeVelocityPlugin depend: [AuthMe] -api-version: 1.15 \ No newline at end of file +# pls, dont use outdated versions, use 1.16.5+ +api-version: 1.13 \ No newline at end of file