Add ServerResourcePackRemoveEvent (#1379)

* Add ServerResourcePackRemoveEvent

* Add nonnull check

* Fix indentation

* Fix import code style
This commit is contained in:
Rubén
2024-07-12 04:02:00 -06:00
committed by GitHub
parent 6073f698e2
commit d5e7fa5b84
3 changed files with 119 additions and 8 deletions

View File

@@ -29,6 +29,7 @@ import com.velocitypowered.api.event.connection.PreTransferEvent;
import com.velocitypowered.api.event.player.CookieRequestEvent;
import com.velocitypowered.api.event.player.CookieStoreEvent;
import com.velocitypowered.api.event.player.PlayerResourcePackStatusEvent;
import com.velocitypowered.api.event.player.ServerResourcePackRemoveEvent;
import com.velocitypowered.api.event.player.ServerResourcePackSendEvent;
import com.velocitypowered.api.event.proxy.ProxyPingEvent;
import com.velocitypowered.api.network.ProtocolVersion;
@@ -258,14 +259,26 @@ public class BackendPlaySessionHandler implements MinecraftSessionHandler {
@Override
public boolean handle(RemoveResourcePackPacket packet) {
final ConnectedPlayer player = serverConn.getPlayer();
final ResourcePackHandler handler = player.resourcePackHandler();
if (packet.getId() != null) {
handler.remove(packet.getId());
} else {
handler.clearAppliedResourcePacks();
}
playerConnection.write(packet);
final ServerResourcePackRemoveEvent event = new ServerResourcePackRemoveEvent(
packet.getId(), this.serverConn);
server.getEventManager().fire(event).thenAcceptAsync(serverResourcePackRemoveEvent -> {
if (playerConnection.isClosed()) {
return;
}
if (serverResourcePackRemoveEvent.getResult().isAllowed()) {
final ConnectedPlayer player = serverConn.getPlayer();
final ResourcePackHandler handler = player.resourcePackHandler();
if (packet.getId() != null) {
handler.remove(packet.getId());
} else {
handler.clearAppliedResourcePacks();
}
playerConnection.write(packet);
}
}, playerConnection.eventLoop()).exceptionally((ex) -> {
logger.error("Exception while handling resource pack remove for {}", playerConnection, ex);
return null;
});
return true;
}

View File

@@ -21,6 +21,7 @@ import com.velocitypowered.api.event.connection.PreTransferEvent;
import com.velocitypowered.api.event.player.CookieRequestEvent;
import com.velocitypowered.api.event.player.CookieStoreEvent;
import com.velocitypowered.api.event.player.PlayerResourcePackStatusEvent;
import com.velocitypowered.api.event.player.ServerResourcePackRemoveEvent;
import com.velocitypowered.api.event.player.ServerResourcePackSendEvent;
import com.velocitypowered.api.network.ProtocolVersion;
import com.velocitypowered.api.proxy.player.ResourcePackInfo;
@@ -30,6 +31,7 @@ import com.velocitypowered.proxy.connection.MinecraftSessionHandler;
import com.velocitypowered.proxy.connection.client.ClientConfigSessionHandler;
import com.velocitypowered.proxy.connection.client.ConnectedPlayer;
import com.velocitypowered.proxy.connection.player.resourcepack.VelocityResourcePackInfo;
import com.velocitypowered.proxy.connection.player.resourcepack.handler.ResourcePackHandler;
import com.velocitypowered.proxy.connection.util.ConnectionMessages;
import com.velocitypowered.proxy.connection.util.ConnectionRequestResults;
import com.velocitypowered.proxy.connection.util.ConnectionRequestResults.Impl;
@@ -41,6 +43,7 @@ import com.velocitypowered.proxy.protocol.packet.ClientboundStoreCookiePacket;
import com.velocitypowered.proxy.protocol.packet.DisconnectPacket;
import com.velocitypowered.proxy.protocol.packet.KeepAlivePacket;
import com.velocitypowered.proxy.protocol.packet.PluginMessagePacket;
import com.velocitypowered.proxy.protocol.packet.RemoveResourcePackPacket;
import com.velocitypowered.proxy.protocol.packet.ResourcePackRequestPacket;
import com.velocitypowered.proxy.protocol.packet.ResourcePackResponsePacket;
import com.velocitypowered.proxy.protocol.packet.TransferPacket;
@@ -192,6 +195,33 @@ public class ConfigSessionHandler implements MinecraftSessionHandler {
return true;
}
@Override
public boolean handle(RemoveResourcePackPacket packet) {
final MinecraftConnection playerConnection = this.serverConn.getPlayer().getConnection();
final ServerResourcePackRemoveEvent event = new ServerResourcePackRemoveEvent(
packet.getId(), this.serverConn);
server.getEventManager().fire(event).thenAcceptAsync(serverResourcePackRemoveEvent -> {
if (playerConnection.isClosed()) {
return;
}
if (serverResourcePackRemoveEvent.getResult().isAllowed()) {
final ConnectedPlayer player = serverConn.getPlayer();
final ResourcePackHandler handler = player.resourcePackHandler();
if (packet.getId() != null) {
handler.remove(packet.getId());
} else {
handler.clearAppliedResourcePacks();
}
playerConnection.write(packet);
}
}, playerConnection.eventLoop()).exceptionally((ex) -> {
logger.error("Exception while handling resource pack remove for {}", playerConnection, ex);
return null;
});
return true;
}
@Override
public boolean handle(FinishedUpdatePacket packet) {
final MinecraftConnection smc = serverConn.ensureConnected();