mirror of
https://github.com/Minestom/Minestom.git
synced 2025-01-03 23:17:48 +01:00
Added EntityVelocityEvent + minor refactoring
This commit is contained in:
parent
da0df5afe3
commit
aeeb9f08a4
@ -8,7 +8,7 @@ import net.minestom.server.benchmark.BenchmarkManager;
|
|||||||
import net.minestom.server.benchmark.ThreadResult;
|
import net.minestom.server.benchmark.ThreadResult;
|
||||||
import net.minestom.server.entity.*;
|
import net.minestom.server.entity.*;
|
||||||
import net.minestom.server.entity.damage.DamageType;
|
import net.minestom.server.entity.damage.DamageType;
|
||||||
import net.minestom.server.event.entity.AttackEvent;
|
import net.minestom.server.event.entity.EntityAttackEvent;
|
||||||
import net.minestom.server.event.item.ItemDropEvent;
|
import net.minestom.server.event.item.ItemDropEvent;
|
||||||
import net.minestom.server.event.item.ItemUpdateStateEvent;
|
import net.minestom.server.event.item.ItemUpdateStateEvent;
|
||||||
import net.minestom.server.event.item.PickupItemEvent;
|
import net.minestom.server.event.item.PickupItemEvent;
|
||||||
@ -100,7 +100,7 @@ public class PlayerInit {
|
|||||||
|
|
||||||
connectionManager.addPlayerInitialization(player -> {
|
connectionManager.addPlayerInitialization(player -> {
|
||||||
|
|
||||||
player.addEventCallback(AttackEvent.class, event -> {
|
player.addEventCallback(EntityAttackEvent.class, event -> {
|
||||||
Entity entity = event.getTarget();
|
Entity entity = event.getTarget();
|
||||||
if (entity instanceof EntityCreature) {
|
if (entity instanceof EntityCreature) {
|
||||||
EntityCreature creature = (EntityCreature) entity;
|
EntityCreature creature = (EntityCreature) entity;
|
||||||
|
@ -10,6 +10,7 @@ import net.minestom.server.event.Event;
|
|||||||
import net.minestom.server.event.EventCallback;
|
import net.minestom.server.event.EventCallback;
|
||||||
import net.minestom.server.event.entity.EntitySpawnEvent;
|
import net.minestom.server.event.entity.EntitySpawnEvent;
|
||||||
import net.minestom.server.event.entity.EntityTickEvent;
|
import net.minestom.server.event.entity.EntityTickEvent;
|
||||||
|
import net.minestom.server.event.entity.EntityVelocityEvent;
|
||||||
import net.minestom.server.event.handler.EventHandler;
|
import net.minestom.server.event.handler.EventHandler;
|
||||||
import net.minestom.server.instance.Chunk;
|
import net.minestom.server.instance.Chunk;
|
||||||
import net.minestom.server.instance.Instance;
|
import net.minestom.server.instance.Instance;
|
||||||
@ -423,7 +424,10 @@ public abstract class Entity implements Viewable, EventHandler, DataContainer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setVelocity(Vector velocity) {
|
public void setVelocity(Vector velocity) {
|
||||||
this.velocity.copy(velocity);
|
EntityVelocityEvent entityVelocityEvent = new EntityVelocityEvent(this, velocity);
|
||||||
|
callCancellableEvent(EntityVelocityEvent.class, entityVelocityEvent, () -> {
|
||||||
|
this.velocity.copy(entityVelocityEvent.getVelocity());
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setGravity(float gravityDragPerTick) {
|
public void setGravity(float gravityDragPerTick) {
|
||||||
|
@ -3,8 +3,8 @@ package net.minestom.server.entity;
|
|||||||
import net.minestom.server.collision.BoundingBox;
|
import net.minestom.server.collision.BoundingBox;
|
||||||
import net.minestom.server.entity.damage.DamageType;
|
import net.minestom.server.entity.damage.DamageType;
|
||||||
import net.minestom.server.entity.property.Attribute;
|
import net.minestom.server.entity.property.Attribute;
|
||||||
import net.minestom.server.event.entity.DeathEvent;
|
|
||||||
import net.minestom.server.event.entity.EntityDamageEvent;
|
import net.minestom.server.event.entity.EntityDamageEvent;
|
||||||
|
import net.minestom.server.event.entity.EntityDeathEvent;
|
||||||
import net.minestom.server.event.entity.EntityFireEvent;
|
import net.minestom.server.event.entity.EntityFireEvent;
|
||||||
import net.minestom.server.event.item.PickupItemEvent;
|
import net.minestom.server.event.item.PickupItemEvent;
|
||||||
import net.minestom.server.instance.Chunk;
|
import net.minestom.server.instance.Chunk;
|
||||||
@ -146,8 +146,8 @@ public abstract class LivingEntity extends Entity implements EquipmentHandler {
|
|||||||
refreshIsDead(true); // So the entity isn't killed over and over again
|
refreshIsDead(true); // So the entity isn't killed over and over again
|
||||||
triggerStatus((byte) 3); // Start death animation status
|
triggerStatus((byte) 3); // Start death animation status
|
||||||
setHealth(0);
|
setHealth(0);
|
||||||
DeathEvent deathEvent = new DeathEvent();
|
EntityDeathEvent entityDeathEvent = new EntityDeathEvent(this);
|
||||||
callEvent(DeathEvent.class, deathEvent);
|
callEvent(EntityDeathEvent.class, entityDeathEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -166,7 +166,7 @@ public abstract class LivingEntity extends Entity implements EquipmentHandler {
|
|||||||
* @param unit unit used to express the duration
|
* @param unit unit used to express the duration
|
||||||
*/
|
*/
|
||||||
public void setFireForDuration(int duration, TimeUnit unit) {
|
public void setFireForDuration(int duration, TimeUnit unit) {
|
||||||
EntityFireEvent entityFireEvent = new EntityFireEvent(duration, unit);
|
EntityFireEvent entityFireEvent = new EntityFireEvent(this, duration, unit);
|
||||||
callCancellableEvent(EntityFireEvent.class, entityFireEvent, () -> {
|
callCancellableEvent(EntityFireEvent.class, entityFireEvent, () -> {
|
||||||
long fireTime = entityFireEvent.getFireTime(TimeUnit.MILLISECOND);
|
long fireTime = entityFireEvent.getFireTime(TimeUnit.MILLISECOND);
|
||||||
setOnFire(true);
|
setOnFire(true);
|
||||||
|
@ -5,12 +5,18 @@ import net.minestom.server.event.CancellableEvent;
|
|||||||
|
|
||||||
public class AnimationEvent extends CancellableEvent {
|
public class AnimationEvent extends CancellableEvent {
|
||||||
|
|
||||||
|
private Player player;
|
||||||
private Player.Hand hand;
|
private Player.Hand hand;
|
||||||
|
|
||||||
public AnimationEvent(Player.Hand hand) {
|
public AnimationEvent(Player player, Player.Hand hand) {
|
||||||
|
this.player = player;
|
||||||
this.hand = hand;
|
this.hand = hand;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Player getPlayer() {
|
||||||
|
return player;
|
||||||
|
}
|
||||||
|
|
||||||
public Player.Hand getHand() {
|
public Player.Hand getHand() {
|
||||||
return hand;
|
return hand;
|
||||||
}
|
}
|
||||||
|
@ -1,9 +0,0 @@
|
|||||||
package net.minestom.server.event.entity;
|
|
||||||
|
|
||||||
import net.minestom.server.event.Event;
|
|
||||||
|
|
||||||
public class DeathEvent extends Event {
|
|
||||||
|
|
||||||
// TODO cause
|
|
||||||
|
|
||||||
}
|
|
@ -3,14 +3,20 @@ package net.minestom.server.event.entity;
|
|||||||
import net.minestom.server.entity.Entity;
|
import net.minestom.server.entity.Entity;
|
||||||
import net.minestom.server.event.Event;
|
import net.minestom.server.event.Event;
|
||||||
|
|
||||||
public class AttackEvent extends Event {
|
public class EntityAttackEvent extends Event {
|
||||||
|
|
||||||
|
private Entity source;
|
||||||
private Entity target;
|
private Entity target;
|
||||||
|
|
||||||
public AttackEvent(Entity target) {
|
public EntityAttackEvent(Entity source, Entity target) {
|
||||||
|
this.source = source;
|
||||||
this.target = target;
|
this.target = target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Entity getSource() {
|
||||||
|
return source;
|
||||||
|
}
|
||||||
|
|
||||||
public Entity getTarget() {
|
public Entity getTarget() {
|
||||||
return target;
|
return target;
|
||||||
}
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
package net.minestom.server.event.entity;
|
||||||
|
|
||||||
|
import net.minestom.server.entity.Entity;
|
||||||
|
import net.minestom.server.event.Event;
|
||||||
|
|
||||||
|
public class EntityDeathEvent extends Event {
|
||||||
|
|
||||||
|
private Entity entity;
|
||||||
|
// TODO cause
|
||||||
|
|
||||||
|
public EntityDeathEvent(Entity entity) {
|
||||||
|
this.entity = entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Entity getEntity() {
|
||||||
|
return entity;
|
||||||
|
}
|
||||||
|
}
|
@ -1,17 +1,24 @@
|
|||||||
package net.minestom.server.event.entity;
|
package net.minestom.server.event.entity;
|
||||||
|
|
||||||
|
import net.minestom.server.entity.Entity;
|
||||||
import net.minestom.server.event.CancellableEvent;
|
import net.minestom.server.event.CancellableEvent;
|
||||||
import net.minestom.server.utils.time.TimeUnit;
|
import net.minestom.server.utils.time.TimeUnit;
|
||||||
|
|
||||||
public class EntityFireEvent extends CancellableEvent {
|
public class EntityFireEvent extends CancellableEvent {
|
||||||
|
|
||||||
|
private Entity entity;
|
||||||
private int duration;
|
private int duration;
|
||||||
private TimeUnit timeUnit;
|
private TimeUnit timeUnit;
|
||||||
|
|
||||||
public EntityFireEvent(int duration, TimeUnit timeUnit) {
|
public EntityFireEvent(Entity entity, int duration, TimeUnit timeUnit) {
|
||||||
|
this.entity = entity;
|
||||||
setFireTime(duration, timeUnit);
|
setFireTime(duration, timeUnit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Entity getEntity() {
|
||||||
|
return entity;
|
||||||
|
}
|
||||||
|
|
||||||
public long getFireTime(TimeUnit timeUnit) {
|
public long getFireTime(TimeUnit timeUnit) {
|
||||||
switch (timeUnit) {
|
switch (timeUnit) {
|
||||||
case TICK:
|
case TICK:
|
||||||
|
@ -0,0 +1,28 @@
|
|||||||
|
package net.minestom.server.event.entity;
|
||||||
|
|
||||||
|
import net.minestom.server.entity.Entity;
|
||||||
|
import net.minestom.server.event.CancellableEvent;
|
||||||
|
import net.minestom.server.utils.Vector;
|
||||||
|
|
||||||
|
public class EntityVelocityEvent extends CancellableEvent {
|
||||||
|
|
||||||
|
private Entity entity;
|
||||||
|
private Vector velocity;
|
||||||
|
|
||||||
|
public EntityVelocityEvent(Entity entity, Vector velocity) {
|
||||||
|
this.entity = entity;
|
||||||
|
this.velocity = velocity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Entity getEntity() {
|
||||||
|
return entity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Vector getVelocity() {
|
||||||
|
return velocity;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setVelocity(Vector velocity) {
|
||||||
|
this.velocity = velocity;
|
||||||
|
}
|
||||||
|
}
|
@ -1,19 +1,26 @@
|
|||||||
package net.minestom.server.event.item;
|
package net.minestom.server.event.item;
|
||||||
|
|
||||||
|
import net.minestom.server.entity.LivingEntity;
|
||||||
import net.minestom.server.event.Event;
|
import net.minestom.server.event.Event;
|
||||||
import net.minestom.server.item.ItemStack;
|
import net.minestom.server.item.ItemStack;
|
||||||
import net.minestom.server.network.packet.server.play.EntityEquipmentPacket;
|
import net.minestom.server.network.packet.server.play.EntityEquipmentPacket;
|
||||||
|
|
||||||
public class ArmorEquipEvent extends Event {
|
public class ArmorEquipEvent extends Event {
|
||||||
|
|
||||||
|
private LivingEntity livingEntity;
|
||||||
private ItemStack armorItem;
|
private ItemStack armorItem;
|
||||||
private ArmorSlot armorSlot;
|
private ArmorSlot armorSlot;
|
||||||
|
|
||||||
public ArmorEquipEvent(ItemStack armorItem, ArmorSlot armorSlot) {
|
public ArmorEquipEvent(LivingEntity livingEntity, ItemStack armorItem, ArmorSlot armorSlot) {
|
||||||
|
this.livingEntity = livingEntity;
|
||||||
this.armorItem = armorItem;
|
this.armorItem = armorItem;
|
||||||
this.armorSlot = armorSlot;
|
this.armorSlot = armorSlot;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public LivingEntity getEntity() {
|
||||||
|
return livingEntity;
|
||||||
|
}
|
||||||
|
|
||||||
public ItemStack getArmorItem() {
|
public ItemStack getArmorItem() {
|
||||||
return armorItem;
|
return armorItem;
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ import net.minestom.server.network.packet.server.play.EntityAnimationPacket;
|
|||||||
public class AnimationListener {
|
public class AnimationListener {
|
||||||
|
|
||||||
public static void animationListener(ClientAnimationPacket packet, Player player) {
|
public static void animationListener(ClientAnimationPacket packet, Player player) {
|
||||||
AnimationEvent animationEvent = new AnimationEvent(packet.hand);
|
AnimationEvent animationEvent = new AnimationEvent(player, packet.hand);
|
||||||
player.callCancellableEvent(AnimationEvent.class, animationEvent, () -> {
|
player.callCancellableEvent(AnimationEvent.class, animationEvent, () -> {
|
||||||
EntityAnimationPacket entityAnimationPacket = new EntityAnimationPacket();
|
EntityAnimationPacket entityAnimationPacket = new EntityAnimationPacket();
|
||||||
entityAnimationPacket.entityId = player.getEntityId();
|
entityAnimationPacket.entityId = player.getEntityId();
|
||||||
|
@ -3,7 +3,7 @@ package net.minestom.server.listener;
|
|||||||
import net.minestom.server.entity.Entity;
|
import net.minestom.server.entity.Entity;
|
||||||
import net.minestom.server.entity.LivingEntity;
|
import net.minestom.server.entity.LivingEntity;
|
||||||
import net.minestom.server.entity.Player;
|
import net.minestom.server.entity.Player;
|
||||||
import net.minestom.server.event.entity.AttackEvent;
|
import net.minestom.server.event.entity.EntityAttackEvent;
|
||||||
import net.minestom.server.event.player.PlayerInteractEvent;
|
import net.minestom.server.event.player.PlayerInteractEvent;
|
||||||
import net.minestom.server.network.packet.client.play.ClientInteractEntityPacket;
|
import net.minestom.server.network.packet.client.play.ClientInteractEntityPacket;
|
||||||
|
|
||||||
@ -18,8 +18,8 @@ public class UseEntityListener {
|
|||||||
if (entity instanceof LivingEntity && ((LivingEntity) entity).isDead()) // Can't attack dead entities
|
if (entity instanceof LivingEntity && ((LivingEntity) entity).isDead()) // Can't attack dead entities
|
||||||
return;
|
return;
|
||||||
|
|
||||||
AttackEvent attackEvent = new AttackEvent(entity);
|
EntityAttackEvent entityAttackEvent = new EntityAttackEvent(player, entity);
|
||||||
player.callEvent(AttackEvent.class, attackEvent);
|
player.callEvent(EntityAttackEvent.class, entityAttackEvent);
|
||||||
} else if (type == ClientInteractEntityPacket.Type.INTERACT) {
|
} else if (type == ClientInteractEntityPacket.Type.INTERACT) {
|
||||||
PlayerInteractEvent playerInteractEvent = new PlayerInteractEvent(entity, packet.hand);
|
PlayerInteractEvent playerInteractEvent = new PlayerInteractEvent(entity, packet.hand);
|
||||||
player.callEvent(PlayerInteractEvent.class, playerInteractEvent);
|
player.callEvent(PlayerInteractEvent.class, playerInteractEvent);
|
||||||
|
Loading…
Reference in New Issue
Block a user