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.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<GenericResult> {
* @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<GenericResult> {
* 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<GenericResult> {
* 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<GenericResult> {
* 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<GenericResult> {
* 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<GenericResult> {
* @param newresult the new result
*/
@Override
public void setResult(GenericResult newresult) {
public void setResult(@NotNull GenericResult 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.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){

View File

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

View File

@ -1,5 +1,5 @@
package com.glyart.authmevelocity.spigot;
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 boolean isCancelled = false;
public PreSendLoginEvent(@NotNull final Player player) {
public PreSendLoginEvent(@NotNull Player 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.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());
}
}

View File

@ -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
# pls, dont use outdated versions, use 1.16.5+
api-version: 1.13