From d72fb72e74ad7af34e88406890f14a790f1b9aef Mon Sep 17 00:00:00 2001 From: Arne Dalhuisen <59421074+Bloepiloepi@users.noreply.github.com> Date: Tue, 11 May 2021 17:05:16 +0200 Subject: [PATCH] Made EntityEquipEvent cancellable --- .../minestom/server/entity/EquipmentSlot.java | 1 - .../minestom/server/entity/LivingEntity.java | 44 +++++++++++++------ .../type/decoration/EntityArmorStand.java | 44 +++++++++++++------ .../server/event/item/EntityEquipEvent.java | 15 ++++++- .../server/inventory/PlayerInventory.java | 6 +++ 5 files changed, 82 insertions(+), 28 deletions(-) diff --git a/src/main/java/net/minestom/server/entity/EquipmentSlot.java b/src/main/java/net/minestom/server/entity/EquipmentSlot.java index 27a7cf02d..7a3b70708 100644 --- a/src/main/java/net/minestom/server/entity/EquipmentSlot.java +++ b/src/main/java/net/minestom/server/entity/EquipmentSlot.java @@ -1,6 +1,5 @@ package net.minestom.server.entity; -import net.minestom.server.event.item.EntityEquipEvent; import net.minestom.server.item.attribute.AttributeSlot; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/net/minestom/server/entity/LivingEntity.java b/src/main/java/net/minestom/server/entity/LivingEntity.java index f03e0849b..22ddef528 100644 --- a/src/main/java/net/minestom/server/entity/LivingEntity.java +++ b/src/main/java/net/minestom/server/entity/LivingEntity.java @@ -127,8 +127,11 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setItemInMainHand(@NotNull ItemStack itemStack) { - this.mainHandItem = getEquipmentItem(itemStack, EquipmentSlot.MAIN_HAND); - syncEquipment(EquipmentSlot.MAIN_HAND); + itemStack = getEquipmentItem(itemStack, EquipmentSlot.MAIN_HAND); + if (itemStack != null) { + this.mainHandItem = itemStack; + syncEquipment(EquipmentSlot.MAIN_HAND); + } } @NotNull @@ -139,8 +142,11 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setItemInOffHand(@NotNull ItemStack itemStack) { - this.offHandItem = getEquipmentItem(itemStack, EquipmentSlot.OFF_HAND); - syncEquipment(EquipmentSlot.OFF_HAND); + itemStack = getEquipmentItem(itemStack, EquipmentSlot.OFF_HAND); + if (itemStack != null) { + this.offHandItem = itemStack; + syncEquipment(EquipmentSlot.OFF_HAND); + } } @NotNull @@ -151,8 +157,11 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setHelmet(@NotNull ItemStack itemStack) { - this.helmet = getEquipmentItem(itemStack, EquipmentSlot.HELMET); - syncEquipment(EquipmentSlot.HELMET); + itemStack = getEquipmentItem(itemStack, EquipmentSlot.HELMET); + if (itemStack != null) { + this.helmet = itemStack; + syncEquipment(EquipmentSlot.HELMET); + } } @NotNull @@ -163,8 +172,11 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setChestplate(@NotNull ItemStack itemStack) { - this.chestplate = getEquipmentItem(itemStack, EquipmentSlot.CHESTPLATE); - syncEquipment(EquipmentSlot.CHESTPLATE); + itemStack = getEquipmentItem(itemStack, EquipmentSlot.CHESTPLATE); + if (itemStack != null) { + this.chestplate = itemStack; + syncEquipment(EquipmentSlot.CHESTPLATE); + } } @NotNull @@ -175,8 +187,11 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setLeggings(@NotNull ItemStack itemStack) { - this.leggings = getEquipmentItem(itemStack, EquipmentSlot.LEGGINGS); - syncEquipment(EquipmentSlot.LEGGINGS); + itemStack = getEquipmentItem(itemStack, EquipmentSlot.LEGGINGS); + if (itemStack != null) { + this.leggings = itemStack; + syncEquipment(EquipmentSlot.LEGGINGS); + } } @NotNull @@ -187,14 +202,17 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setBoots(@NotNull ItemStack itemStack) { - this.boots = getEquipmentItem(itemStack, EquipmentSlot.BOOTS); - syncEquipment(EquipmentSlot.BOOTS); + itemStack = getEquipmentItem(itemStack, EquipmentSlot.BOOTS); + if (itemStack != null) { + this.boots = itemStack; + syncEquipment(EquipmentSlot.BOOTS); + } } private ItemStack getEquipmentItem(@NotNull ItemStack itemStack, @NotNull EquipmentSlot slot) { EntityEquipEvent entityEquipEvent = new EntityEquipEvent(this, itemStack, slot); callEvent(EntityEquipEvent.class, entityEquipEvent); - return entityEquipEvent.getEquippedItem(); + return entityEquipEvent.isCancelled() ? null : entityEquipEvent.getEquippedItem(); } @Override diff --git a/src/main/java/net/minestom/server/entity/type/decoration/EntityArmorStand.java b/src/main/java/net/minestom/server/entity/type/decoration/EntityArmorStand.java index 121146e7b..4e3a1074f 100644 --- a/src/main/java/net/minestom/server/entity/type/decoration/EntityArmorStand.java +++ b/src/main/java/net/minestom/server/entity/type/decoration/EntityArmorStand.java @@ -69,8 +69,11 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setItemInMainHand(@NotNull ItemStack itemStack) { - this.mainHandItem = getEquipmentItem(itemStack, EquipmentSlot.MAIN_HAND); - syncEquipment(EquipmentSlot.MAIN_HAND); + itemStack = getEquipmentItem(itemStack, EquipmentSlot.MAIN_HAND); + if (itemStack != null) { + this.mainHandItem = itemStack; + syncEquipment(EquipmentSlot.MAIN_HAND); + } } @NotNull @@ -81,8 +84,11 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setItemInOffHand(@NotNull ItemStack itemStack) { - this.offHandItem = getEquipmentItem(itemStack, EquipmentSlot.OFF_HAND); - syncEquipment(EquipmentSlot.OFF_HAND); + itemStack = getEquipmentItem(itemStack, EquipmentSlot.OFF_HAND); + if (itemStack != null) { + this.offHandItem = itemStack; + syncEquipment(EquipmentSlot.OFF_HAND); + } } @NotNull @@ -93,8 +99,11 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setHelmet(@NotNull ItemStack itemStack) { - this.helmet = getEquipmentItem(itemStack, EquipmentSlot.HELMET); - syncEquipment(EquipmentSlot.HELMET); + itemStack = getEquipmentItem(itemStack, EquipmentSlot.HELMET); + if (itemStack != null) { + this.helmet = itemStack; + syncEquipment(EquipmentSlot.HELMET); + } } @NotNull @@ -105,8 +114,11 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setChestplate(@NotNull ItemStack itemStack) { - this.chestplate = getEquipmentItem(itemStack, EquipmentSlot.CHESTPLATE); - syncEquipment(EquipmentSlot.CHESTPLATE); + itemStack = getEquipmentItem(itemStack, EquipmentSlot.CHESTPLATE); + if (itemStack != null) { + this.chestplate = itemStack; + syncEquipment(EquipmentSlot.CHESTPLATE); + } } @NotNull @@ -117,8 +129,11 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setLeggings(@NotNull ItemStack itemStack) { - this.leggings = getEquipmentItem(itemStack, EquipmentSlot.LEGGINGS); - syncEquipment(EquipmentSlot.LEGGINGS); + itemStack = getEquipmentItem(itemStack, EquipmentSlot.LEGGINGS); + if (itemStack != null) { + this.leggings = itemStack; + syncEquipment(EquipmentSlot.LEGGINGS); + } } @NotNull @@ -129,8 +144,11 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setBoots(@NotNull ItemStack itemStack) { - this.boots = getEquipmentItem(itemStack, EquipmentSlot.BOOTS); - syncEquipment(EquipmentSlot.BOOTS); + itemStack = getEquipmentItem(itemStack, EquipmentSlot.BOOTS); + if (itemStack != null) { + this.boots = itemStack; + syncEquipment(EquipmentSlot.BOOTS); + } } public boolean isSmall() { @@ -238,6 +256,6 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { private ItemStack getEquipmentItem(@NotNull ItemStack itemStack, @NotNull EquipmentSlot slot) { EntityEquipEvent entityEquipEvent = new EntityEquipEvent(this, itemStack, slot); callEvent(EntityEquipEvent.class, entityEquipEvent); - return entityEquipEvent.getEquippedItem(); + return entityEquipEvent.isCancelled() ? null : entityEquipEvent.getEquippedItem(); } } diff --git a/src/main/java/net/minestom/server/event/item/EntityEquipEvent.java b/src/main/java/net/minestom/server/event/item/EntityEquipEvent.java index 501273eaf..98f4ae3ca 100644 --- a/src/main/java/net/minestom/server/event/item/EntityEquipEvent.java +++ b/src/main/java/net/minestom/server/event/item/EntityEquipEvent.java @@ -2,16 +2,19 @@ package net.minestom.server.event.item; import net.minestom.server.entity.Entity; import net.minestom.server.entity.EquipmentSlot; +import net.minestom.server.event.CancellableEvent; import net.minestom.server.event.Event; import net.minestom.server.item.ItemStack; import org.jetbrains.annotations.NotNull; -public class EntityEquipEvent extends Event { +public class EntityEquipEvent extends Event implements CancellableEvent { private final Entity entity; private ItemStack equippedItem; private final EquipmentSlot slot; + private boolean cancelled; + public EntityEquipEvent(@NotNull Entity entity, @NotNull ItemStack equippedItem, @NotNull EquipmentSlot slot) { this.entity = entity; this.equippedItem = equippedItem; @@ -36,4 +39,14 @@ public class EntityEquipEvent extends Event { public EquipmentSlot getSlot() { return slot; } + + @Override + public boolean isCancelled() { + return cancelled; + } + + @Override + public void setCancelled(boolean cancel) { + this.cancelled = cancel; + } } diff --git a/src/main/java/net/minestom/server/inventory/PlayerInventory.java b/src/main/java/net/minestom/server/inventory/PlayerInventory.java index a4723b8fd..d095bfab3 100644 --- a/src/main/java/net/minestom/server/inventory/PlayerInventory.java +++ b/src/main/java/net/minestom/server/inventory/PlayerInventory.java @@ -186,11 +186,17 @@ public class PlayerInventory extends AbstractInventory implements EquipmentHandl equipmentSlot = EquipmentSlot.BOOTS; } + boolean cancel = false; if (equipmentSlot != null) { EntityEquipEvent entityEquipEvent = new EntityEquipEvent(player, itemStack, equipmentSlot); player.callEvent(EntityEquipEvent.class, entityEquipEvent); itemStack = entityEquipEvent.getEquippedItem(); + cancel = entityEquipEvent.isCancelled(); + } + + if (cancel) { + return; } this.itemStacks[slot] = itemStack;