001/*
002 * Trident - A Multithreaded Server Alternative
003 * Copyright 2014 The TridentSDK Team
004 *
005 * Licensed under the Apache License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * You may obtain a copy of the License at
008 *
009 *    http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018package net.tridentsdk.event.entity;
019
020import net.tridentsdk.entity.Entity;
021import net.tridentsdk.entity.LivingEntity;
022
023/**
024 * This event occurs when an entity is damaged, should only apply to living entities specifically
025 *
026 * @author The TridentSDK Team
027 * @since 0.3-alpha-DP
028 */
029public class EntityDamageEvent extends EntityEvent {
030    private final Cause cause;
031    private boolean cancelled;
032    private double damage;
033
034    /**
035     * @param entity the entity associated with this event
036     * @param damage the amount of damage dealt to the player
037     */
038
039    public EntityDamageEvent(Entity entity, double damage, Cause cause) {
040        super(entity);
041        this.setDamage(damage);
042        this.cause = cause;
043    }
044
045    public Cause cause() {
046        return this.cause;
047    }
048
049    /**
050     * @return return the amount of damage dealt
051     */
052
053    public double damage() {
054        return this.damage;
055    }
056
057    /**
058     * Change the damage value dealt
059     *
060     * @param damage the amount of damage dealt
061     */
062
063    public void setDamage(double damage) {
064        this.damage = damage;
065    }
066
067    @Override
068    public LivingEntity entity() {
069        return (LivingEntity) super.entity();
070    }
071
072    @Override
073    public boolean isIgnored() {
074        return cancelled;
075    }
076
077    @Override
078    public void cancel(boolean cancelled) {
079        this.cancelled = cancelled;
080    }
081
082    /**
083     * The cause of a damage event
084     *
085     * @author The TridentSDK Team
086     * @since 0.3-alpha-DP
087     */
088    public enum Cause {
089        STARVATION,
090        FIRE,
091        FALL,
092        EXPLOSION,
093        HIT,
094        ENDER_PEARL,
095        PROJECTILE,
096        LIGHTNING,
097        DROWNING,
098        SUFFOCATION,
099        ANVIL,
100        CONTACT,
101        LAVA,
102        POISON,
103        WITHER,
104        VOID
105    }
106}