package tc.oc.pgm.events; import javax.annotation.Nullable; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockState; import org.bukkit.entity.Player; import org.bukkit.event.Event; import tc.oc.pgm.match.MatchPlayer; import tc.oc.pgm.match.MatchPlayerState; import static com.google.common.base.Preconditions.checkNotNull; /** * A version of BlockTransformEvent where the block transformation can be * attributed to a player. */ public class PlayerBlockTransformEvent extends BlockTransformEvent { protected final MatchPlayerState player; public PlayerBlockTransformEvent(Event cause, BlockState oldState, BlockState newState, MatchPlayerState player) { super(cause, oldState, newState); this.player = checkNotNull(player); } public PlayerBlockTransformEvent(Event cause, Block oldBlock, Material newMaterial, MatchPlayerState player) { super(cause, oldBlock, newMaterial); this.player = checkNotNull(player); } public MatchPlayerState getPlayerState() { return player; } public @Nullable MatchPlayer getPlayer() { return player.getMatchPlayer(); } @Override public @Nullable Player getActor() { MatchPlayer matchPlayer = getPlayer(); return matchPlayer == null ? null : matchPlayer.getBukkit(); } public static @Nullable MatchPlayerState getPlayerState(BlockTransformEvent event) { return event instanceof PlayerBlockTransformEvent ? ((PlayerBlockTransformEvent) event).getPlayerState() : null; } @Override public String toString() { return this.getClass().getSimpleName() + "{pos=" + this.getOldState().getLocation().toVector() + " oldState=" + this.getOldState().getData() + " newState=" + this.getNewState().getData() + " drops=" + this.getDrops() + " cancelled=" + this.isCancelled() + " player=" + this.getPlayerState() + " cause=" + (this.getCause() == null ? "null" : this.getCause().getEventName()) + "}"; } }