# PackPreSendEvent
Fired before each pack offer reaches the player. Cancelling skips that single pack — other packs in the resolved list still send. Useful for permission gates ("staff-only overlay"), per-player A/B variants, or pack-specific feature flags.
The Paper plugin emits `PaperPackPreSendEvent` as a cancellable Bukkit event extending `BaseEvent`. The Velocity plugin defines `VelocityPackPreSendEvent` for parity but does not currently emit it on the proxy send path.
---
## Source
```java
package gg.lode.paintingapi.api.event;
import org.jetbrains.annotations.NotNull;
import java.util.UUID;
public interface PackPreSendEvent {
@NotNull UUID getPlayerId();
@NotNull String getServerName();
@NotNull String getPackName();
@NotNull String getPackUrl();
@NotNull String getPackHash();
boolean isCancelled();
void setCancelled(boolean cancelled);
}
```
`getServerName()` returns `<proxied>` when Painting-Paper is dispatching a pack list pushed from Velocity.
---
## Related Pages
- [[Painting/API/Events/PackStatusEvent]] — sibling event fired after the offer is acknowledged
- [[Painting/Developers/Overview]] — usage examples