13
0
geforkt von Mirrors/Paper

SPIGOT-5553, #964: Add EntityKnockbackEvent

By: Jishuna <joshl5324@gmail.com>
Dieser Commit ist enthalten in:
Bukkit/Spigot 2024-01-27 14:53:36 +11:00
Ursprung f11f3d9479
Commit cefbe9fb96
2 geänderte Dateien mit 183 neuen und 0 gelöschten Zeilen

Datei anzeigen

@ -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;
}
}

Datei anzeigen

@ -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;
}
}