Added support for unregister events

- Added 4drian3d to plugin.yml authors
- Added ProxyForcedUnregisterEvent and ProxyUnregisterEvent to API
This commit is contained in:
4drian3d 2022-02-13 17:50:12 -05:00
parent e871d555d6
commit 97882d1e31
9 changed files with 91 additions and 26 deletions

View File

@ -7,6 +7,8 @@ import com.velocitypowered.api.event.ResultedEvent.GenericResult;
import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.Player;
import com.velocitypowered.api.proxy.server.RegisteredServer; 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. * Event to be executed just before sending a player to another server after login/registration.
* Here you have the ability to deny the event. * Here you have the ability to deny the event.
@ -24,7 +26,7 @@ public final class PreSendOnLoginEvent implements ResultedEvent<GenericResult> {
* @param actualServer the server on which the player is located * @param actualServer the server on which the player is located
* @param serverToSend the server to which the player will be sent * @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.player = player;
this.actualserver = actualServer; this.actualserver = actualServer;
this.serverToSend = serverToSend; this.serverToSend = serverToSend;
@ -34,7 +36,7 @@ public final class PreSendOnLoginEvent implements ResultedEvent<GenericResult> {
* Obtain the logged player * Obtain the logged player
* @return the player * @return the player
*/ */
public Player getPlayer(){ public @NotNull Player getPlayer(){
return this.player; return this.player;
} }
@ -42,7 +44,7 @@ public final class PreSendOnLoginEvent implements ResultedEvent<GenericResult> {
* Obtain the server on which the player is located * Obtain the server on which the player is located
* @return the actual server of the player * @return the actual server of the player
*/ */
public RegisteredServer getActualServer(){ public @NotNull RegisteredServer getActualServer(){
return this.actualserver; return this.actualserver;
} }
@ -50,7 +52,7 @@ public final class PreSendOnLoginEvent implements ResultedEvent<GenericResult> {
* Obtain the server to which the player will be sent * Obtain the server to which the player will be sent
* @return the server to send the player * @return the server to send the player
*/ */
public RegisteredServer getSendServer(){ public @NotNull RegisteredServer getSendServer(){
return this.serverToSend; return this.serverToSend;
} }
@ -58,7 +60,7 @@ public final class PreSendOnLoginEvent implements ResultedEvent<GenericResult> {
* Get the result of the event * Get the result of the event
*/ */
@Override @Override
public GenericResult getResult() { public @NotNull GenericResult getResult() {
return this.result; return this.result;
} }
@ -67,7 +69,7 @@ public final class PreSendOnLoginEvent implements ResultedEvent<GenericResult> {
* @param newresult the new result * @param newresult the new result
*/ */
@Override @Override
public void setResult(GenericResult newresult) { public void setResult(@NotNull GenericResult newresult) {
this.result = Objects.requireNonNull(newresult); this.result = Objects.requireNonNull(newresult);
} }
} }

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -6,9 +6,11 @@ import java.util.Random;
import com.glyart.authmevelocity.proxy.AuthmeVelocityAPI; import com.glyart.authmevelocity.proxy.AuthmeVelocityAPI;
import com.glyart.authmevelocity.proxy.config.AuthMeConfig; import com.glyart.authmevelocity.proxy.config.AuthMeConfig;
import com.glyart.authmevelocity.proxy.event.PreSendOnLoginEvent; 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.ProxyLoginEvent;
import com.glyart.authmevelocity.proxy.event.ProxyLogoutEvent; import com.glyart.authmevelocity.proxy.event.ProxyLogoutEvent;
import com.glyart.authmevelocity.proxy.event.ProxyRegisterEvent; import com.glyart.authmevelocity.proxy.event.ProxyRegisterEvent;
import com.glyart.authmevelocity.proxy.event.ProxyUnregisterEvent;
import com.google.common.io.ByteArrayDataInput; import com.google.common.io.ByteArrayDataInput;
import com.velocitypowered.api.event.Continuation; import com.velocitypowered.api.event.Continuation;
import com.velocitypowered.api.event.Subscribe; import com.velocitypowered.api.event.Subscribe;
@ -19,6 +21,7 @@ import com.velocitypowered.api.proxy.ServerConnection;
import com.velocitypowered.api.proxy.server.RegisteredServer; import com.velocitypowered.api.proxy.server.RegisteredServer;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.slf4j.Logger; import org.slf4j.Logger;
public class PluginMessageListener { public class PluginMessageListener {
@ -48,27 +51,33 @@ public class PluginMessageListener {
ByteArrayDataInput input = event.dataAsDataStream(); ByteArrayDataInput input = event.dataAsDataStream();
final String sChannel = input.readUTF(); 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){ switch(sChannel){
case "LOGIN" : case "LOGIN" :
if (api.addPlayer(loggedPlayer)){ if (loggedPlayer != null && api.addPlayer(loggedPlayer)){
createServerConnectionRequest(loggedPlayer, proxy, logger, connection); createServerConnectionRequest(loggedPlayer, proxy, logger, connection);
} }
continuation.resume();
break; break;
case "LOGOUT": case "LOGOUT":
if(api.removePlayer(loggedPlayer)){ if(loggedPlayer != null && api.removePlayer(loggedPlayer)){
proxy.getEventManager().fireAndForget(new ProxyLogoutEvent(loggedPlayer)); proxy.getEventManager().fireAndForget(new ProxyLogoutEvent(loggedPlayer));
} }
continuation.resume();
break; break;
case "REGISTER": case "REGISTER":
if(loggedPlayer != null)
proxy.getEventManager().fireAndForget(new ProxyRegisterEvent(loggedPlayer)); proxy.getEventManager().fireAndForget(new ProxyRegisterEvent(loggedPlayer));
continuation.resume();
break; break;
case "UNREGISTER":
default: continuation.resume(); 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){ private void createServerConnectionRequest(Player loggedPlayer, ProxyServer proxy, Logger logger, ServerConnection connection){

View File

@ -3,6 +3,8 @@ package com.glyart.authmevelocity.spigot;
import com.glyart.authmevelocity.spigot.listeners.AuthMeListener; import com.glyart.authmevelocity.spigot.listeners.AuthMeListener;
import com.google.common.io.ByteArrayDataOutput; import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams; import com.google.common.io.ByteStreams;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -14,13 +16,18 @@ public class AuthMeVelocityPlugin extends JavaPlugin {
this.getServer().getMessenger().registerOutgoingPluginChannel(this, CHANNEL); this.getServer().getMessenger().registerOutgoingPluginChannel(this, CHANNEL);
this.getServer().getPluginManager().registerEvents(new AuthMeListener(this), this); 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(); ByteArrayDataOutput out = ByteStreams.newDataOutput();
out.writeUTF(type.toString()); out.writeUTF(type.toString());
out.writeUTF(playername);
if(player == null){
Bukkit.getServer().sendPluginMessage(this, CHANNEL, out.toByteArray());
} else {
player.sendPluginMessage(this, CHANNEL, out.toByteArray()); player.sendPluginMessage(this, CHANNEL, out.toByteArray());
} }
}
} }

View File

@ -1,5 +1,5 @@
package com.glyart.authmevelocity.spigot; package com.glyart.authmevelocity.spigot;
public enum MessageType { public enum MessageType {
LOGIN, REGISTER, LOGOUT LOGIN, REGISTER, LOGOUT, FORCE_UNREGISTER, UNREGISTER;
} }

View File

@ -10,7 +10,7 @@ public class PreSendLoginEvent extends PlayerEvent implements Cancellable {
private static final HandlerList HANDLERS = new HandlerList(); private static final HandlerList HANDLERS = new HandlerList();
private boolean isCancelled = false; private boolean isCancelled = false;
public PreSendLoginEvent(@NotNull final Player player) { public PreSendLoginEvent(@NotNull Player player) {
super(player); super(player);
} }

View File

@ -7,6 +7,8 @@ import com.glyart.authmevelocity.spigot.events.PreSendLoginEvent;
import fr.xephi.authme.events.LoginEvent; import fr.xephi.authme.events.LoginEvent;
import fr.xephi.authme.events.LogoutEvent; import fr.xephi.authme.events.LogoutEvent;
import fr.xephi.authme.events.RegisterEvent; 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.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
@ -21,21 +23,31 @@ public class AuthMeListener implements Listener {
} }
@EventHandler(priority = EventPriority.HIGHEST) @EventHandler(priority = EventPriority.HIGHEST)
public void onLogin(final LoginEvent event) { public void onLogin(LoginEvent event) {
final Player player = event.getPlayer(); final Player player = event.getPlayer();
PreSendLoginEvent preSendLoginEvent = new PreSendLoginEvent(player); PreSendLoginEvent preSendLoginEvent = new PreSendLoginEvent(player);
if(preSendLoginEvent.callEvent()){ if(preSendLoginEvent.callEvent()){
plugin.sendMessageToProxy(player, MessageType.LOGIN); plugin.sendMessageToProxy(player, MessageType.LOGIN, player.getName());
} }
} }
@EventHandler @EventHandler
public void onRegister(RegisterEvent event){ public void onRegister(RegisterEvent event){
plugin.sendMessageToProxy(event.getPlayer(), MessageType.REGISTER); plugin.sendMessageToProxy(event.getPlayer(), MessageType.REGISTER, event.getPlayer().getName());
} }
@EventHandler @EventHandler
public void onLogout(LogoutEvent event){ 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());
} }
} }

View File

@ -1,6 +1,7 @@
name: AuthMeVelocity name: AuthMeVelocity
author: xQuickGlare authors: [xQuickGlare, 4drian3d]
version: ${project.version} version: ${project.version}
main: com.glyart.authmevelocity.spigot.AuthMeVelocityPlugin main: com.glyart.authmevelocity.spigot.AuthMeVelocityPlugin
depend: [AuthMe] depend: [AuthMe]
api-version: 1.15 # pls, dont use outdated versions, use 1.16.5+
api-version: 1.13