package tc.oc.pgm.destroyable; import javax.annotation.Nonnull; import javax.annotation.Nullable; import org.bukkit.block.Block; import org.bukkit.block.BlockState; import com.google.common.base.Preconditions; import tc.oc.pgm.match.ParticipantState; /** * Provides additional information about why a {@link Destroyable} was damaged. */ public class DestroyableHealthChange { private final @Nonnull BlockState oldState; private final @Nonnull BlockState newState; private final @Nullable ParticipantState playerCause; private final int healthChange; /** * Creates an instance of the class. * * @param oldState State the destroyed block was in before broken * @param playerCause Player most responsible for the damage */ public DestroyableHealthChange(@Nonnull BlockState oldState, @Nonnull BlockState newState, @Nullable ParticipantState playerCause, int healthChange) { Preconditions.checkNotNull(oldState, "old block state"); this.oldState = oldState; this.newState = newState; this.playerCause = playerCause; this.healthChange = healthChange; } /** * Gets the block that was damaged. * * @return Damaged block */ public @Nonnull Block getBlock() { return this.oldState.getBlock(); } /** * Gets the state of the block before being damaged. * * @return Old block state */ public @Nonnull BlockState getOldState() { return this.oldState; } /** * Gets the state of the block after being damaged. * * @return Old block state */ public @Nonnull BlockState getNewState() { return this.newState; } /** * Gets the player responsible for the damage. * * @return Player responsible for the damage or null if none exists */ public @Nullable ParticipantState getPlayerCause() { return this.playerCause; } public int getHealthChange() { return healthChange; } }