# 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