geforkt von Mirrors/Paper
SPIGOT-5553, #964: Add EntityKnockbackEvent
By: Jishuna <joshl5324@gmail.com>
Dieser Commit ist enthalten in:
Ursprung
f11f3d9479
Commit
cefbe9fb96
@ -0,0 +1,30 @@
|
||||
package org.bukkit.event.entity;
|
||||
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.util.Vector;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* Called when an entity receives knockback from another entity.
|
||||
*/
|
||||
public class EntityKnockbackByEntityEvent extends EntityKnockbackEvent {
|
||||
|
||||
private final Entity source;
|
||||
|
||||
public EntityKnockbackByEntityEvent(@NotNull final LivingEntity entity, @NotNull final Entity source, @NotNull final KnockbackCause cause, final double force, @NotNull final Vector rawKnockback, @NotNull final Vector knockback) {
|
||||
super(entity, cause, force, rawKnockback, knockback);
|
||||
|
||||
this.source = source;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the entity that has caused knockback to the defender.
|
||||
*
|
||||
* @return entity that caused knockback
|
||||
*/
|
||||
@NotNull
|
||||
public Entity getSourceEntity() {
|
||||
return source;
|
||||
}
|
||||
}
|
@ -0,0 +1,153 @@
|
||||
package org.bukkit.event.entity;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
import org.bukkit.attribute.Attribute;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.bukkit.util.Vector;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* Called when a living entity receives knockback.
|
||||
*/
|
||||
public class EntityKnockbackEvent extends EntityEvent implements Cancellable {
|
||||
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
private final KnockbackCause cause;
|
||||
private final double force;
|
||||
private final Vector rawKnockback;
|
||||
private Vector knockback;
|
||||
private boolean cancelled;
|
||||
|
||||
public EntityKnockbackEvent(@NotNull final LivingEntity entity, @NotNull final KnockbackCause cause, final double force, @NotNull final Vector rawKnockback, @NotNull final Vector knockback) {
|
||||
super(entity);
|
||||
|
||||
this.cause = cause;
|
||||
this.force = force;
|
||||
this.rawKnockback = rawKnockback;
|
||||
this.knockback = knockback;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public LivingEntity getEntity() {
|
||||
return (LivingEntity) entity;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the cause of the knockback.
|
||||
*
|
||||
* @return the cause of the knockback
|
||||
*/
|
||||
@NotNull
|
||||
public KnockbackCause getCause() {
|
||||
return cause;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the raw force of the knockback. <br>
|
||||
* This value is based on factors such as the {@link Enchantment#KNOCKBACK}
|
||||
* level of an attacker and the
|
||||
* {@link Attribute#GENERIC_KNOCKBACK_RESISTANCE} of the entity.
|
||||
*
|
||||
* @return the knockback force
|
||||
*/
|
||||
public double getForce() {
|
||||
return force;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the raw knockback force that will be applied to the entity. <br>
|
||||
* This value is read-only, changes made to it <b>will not</b> have any
|
||||
* effect on the final knockback received.
|
||||
*
|
||||
* @return the raw knockback
|
||||
* @see #getFinalKnockback()
|
||||
*/
|
||||
@NotNull
|
||||
public Vector getKnockback() {
|
||||
return rawKnockback.clone();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the force that will be applied to the entity. <br>
|
||||
* In contrast to {@link EntityKnockbackEvent#getKnockback()} this value is
|
||||
* affected by the entities current velocity and whether they are touching
|
||||
* the ground.
|
||||
* <p>
|
||||
* <b>Note:</b> this method returns a copy, changes must be applied with
|
||||
* {@link #setFinalKnockback(Vector)}.
|
||||
*
|
||||
* @return the final knockback
|
||||
*/
|
||||
@NotNull
|
||||
public Vector getFinalKnockback() {
|
||||
return knockback.clone();
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the force that will be applied to the entity.
|
||||
*
|
||||
* @param knockback the force to apply
|
||||
*/
|
||||
@NotNull
|
||||
public void setFinalKnockback(@NotNull Vector knockback) {
|
||||
Preconditions.checkArgument(knockback != null, "Knockback cannot be null");
|
||||
|
||||
this.knockback = knockback;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCancelled() {
|
||||
return cancelled;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setCancelled(boolean cancel) {
|
||||
cancelled = cancel;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
/**
|
||||
* An enum to specify the cause of the knockback.
|
||||
*/
|
||||
public enum KnockbackCause {
|
||||
|
||||
/**
|
||||
* Knockback caused by non-entity damage.
|
||||
*/
|
||||
DAMAGE,
|
||||
/**
|
||||
* Knockback caused by an attacking entity.
|
||||
*/
|
||||
ENTITY_ATTACK,
|
||||
/**
|
||||
* Knockback caused by an explosion.
|
||||
*/
|
||||
EXPLOSION,
|
||||
/**
|
||||
* Knockback caused by the target blocking with a shield.
|
||||
*/
|
||||
SHIELD_BLOCK,
|
||||
/**
|
||||
* Knockback caused by a sweeping attack.
|
||||
*/
|
||||
SWEEP_ATTACK,
|
||||
/**
|
||||
* Knockback with an unknown cause.
|
||||
*/
|
||||
UNKNOWN;
|
||||
}
|
||||
}
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren