From 29b0f5448d4cacecbfce21ef275c32b42d6d32e9 Mon Sep 17 00:00:00 2001 From: Arne Dalhuisen <59421074+Bloepiloepi@users.noreply.github.com> Date: Tue, 11 May 2021 14:10:45 +0200 Subject: [PATCH 1/6] Moved EquipmentSlot out of equipment packet --- .../minestom/server/entity/EquipmentSlot.java | 49 +++++++++++++++++++ .../minestom/server/entity/LivingEntity.java | 12 ++--- .../net/minestom/server/entity/Player.java | 2 +- .../type/decoration/EntityArmorStand.java | 18 +++---- .../server/inventory/EquipmentHandler.java | 13 ++--- .../server/inventory/PlayerInventory.java | 10 ++-- .../server/play/EntityEquipmentPacket.java | 37 +++----------- .../readwritepackets/ReadWritePackets.java | 3 +- 8 files changed, 83 insertions(+), 61 deletions(-) create mode 100644 src/main/java/net/minestom/server/entity/EquipmentSlot.java diff --git a/src/main/java/net/minestom/server/entity/EquipmentSlot.java b/src/main/java/net/minestom/server/entity/EquipmentSlot.java new file mode 100644 index 000000000..c269bfcaf --- /dev/null +++ b/src/main/java/net/minestom/server/entity/EquipmentSlot.java @@ -0,0 +1,49 @@ +package net.minestom.server.entity; + +import net.minestom.server.event.item.ArmorEquipEvent; +import net.minestom.server.item.attribute.AttributeSlot; +import org.jetbrains.annotations.NotNull; + +public enum EquipmentSlot { + MAIN_HAND, + OFF_HAND, + BOOTS, + LEGGINGS, + CHESTPLATE, + HELMET; + + @NotNull + public static EquipmentSlot fromArmorSlot(ArmorEquipEvent.ArmorSlot armorSlot) { + switch (armorSlot) { + case HELMET: + return HELMET; + case CHESTPLATE: + return CHESTPLATE; + case LEGGINGS: + return LEGGINGS; + case BOOTS: + return BOOTS; + } + throw new IllegalStateException("Something weird happened"); + } + + @NotNull + public static EquipmentSlot fromAttributeSlot(AttributeSlot attributeSlot) { + switch (attributeSlot) { + case MAINHAND: + return MAIN_HAND; + case OFFHAND: + return OFF_HAND; + case FEET: + return BOOTS; + case LEGS: + return LEGGINGS; + case CHEST: + return CHESTPLATE; + case HEAD: + return HELMET; + } + throw new IllegalStateException("Something weird happened"); + } + +} diff --git a/src/main/java/net/minestom/server/entity/LivingEntity.java b/src/main/java/net/minestom/server/entity/LivingEntity.java index 1c9a27c7b..a7f99c053 100644 --- a/src/main/java/net/minestom/server/entity/LivingEntity.java +++ b/src/main/java/net/minestom/server/entity/LivingEntity.java @@ -128,7 +128,7 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setItemInMainHand(@NotNull ItemStack itemStack) { this.mainHandItem = itemStack; - syncEquipment(EntityEquipmentPacket.Slot.MAIN_HAND); + syncEquipment(EquipmentSlot.MAIN_HAND); } @NotNull @@ -140,7 +140,7 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setItemInOffHand(@NotNull ItemStack itemStack) { this.offHandItem = itemStack; - syncEquipment(EntityEquipmentPacket.Slot.OFF_HAND); + syncEquipment(EquipmentSlot.OFF_HAND); } @NotNull @@ -152,7 +152,7 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setHelmet(@NotNull ItemStack itemStack) { this.helmet = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.HELMET); - syncEquipment(EntityEquipmentPacket.Slot.HELMET); + syncEquipment(EquipmentSlot.HELMET); } @NotNull @@ -164,7 +164,7 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setChestplate(@NotNull ItemStack itemStack) { this.chestplate = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.CHESTPLATE); - syncEquipment(EntityEquipmentPacket.Slot.CHESTPLATE); + syncEquipment(EquipmentSlot.CHESTPLATE); } @NotNull @@ -176,7 +176,7 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setLeggings(@NotNull ItemStack itemStack) { this.leggings = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.LEGGINGS); - syncEquipment(EntityEquipmentPacket.Slot.LEGGINGS); + syncEquipment(EquipmentSlot.LEGGINGS); } @NotNull @@ -188,7 +188,7 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setBoots(@NotNull ItemStack itemStack) { this.boots = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.BOOTS); - syncEquipment(EntityEquipmentPacket.Slot.BOOTS); + syncEquipment(EquipmentSlot.BOOTS); } private ItemStack getEquipmentItem(@NotNull ItemStack itemStack, @NotNull ArmorEquipEvent.ArmorSlot armorSlot) { diff --git a/src/main/java/net/minestom/server/entity/Player.java b/src/main/java/net/minestom/server/entity/Player.java index 8a7ecad0c..282bdea57 100644 --- a/src/main/java/net/minestom/server/entity/Player.java +++ b/src/main/java/net/minestom/server/entity/Player.java @@ -2256,7 +2256,7 @@ public class Player extends LivingEntity implements CommandSender, Localizable, */ public void refreshHeldSlot(byte slot) { this.heldSlot = slot; - syncEquipment(EntityEquipmentPacket.Slot.MAIN_HAND); + syncEquipment(EquipmentSlot.MAIN_HAND); refreshEating(null); } 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 89a600d02..a89decefc 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 @@ -1,13 +1,9 @@ package net.minestom.server.entity.type.decoration; -import net.minestom.server.entity.EntityType; -import net.minestom.server.entity.Metadata; -import net.minestom.server.entity.ObjectEntity; -import net.minestom.server.entity.Player; +import net.minestom.server.entity.*; import net.minestom.server.event.item.ArmorEquipEvent; import net.minestom.server.inventory.EquipmentHandler; import net.minestom.server.item.ItemStack; -import net.minestom.server.network.packet.server.play.EntityEquipmentPacket; import net.minestom.server.utils.Position; import net.minestom.server.utils.Vector; import net.minestom.server.utils.binary.BitmaskUtil; @@ -74,7 +70,7 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setItemInMainHand(@NotNull ItemStack itemStack) { this.mainHandItem = itemStack; - syncEquipment(EntityEquipmentPacket.Slot.MAIN_HAND); + syncEquipment(EquipmentSlot.MAIN_HAND); } @NotNull @@ -86,7 +82,7 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setItemInOffHand(@NotNull ItemStack itemStack) { this.offHandItem = itemStack; - syncEquipment(EntityEquipmentPacket.Slot.OFF_HAND); + syncEquipment(EquipmentSlot.OFF_HAND); } @NotNull @@ -98,7 +94,7 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setHelmet(@NotNull ItemStack itemStack) { this.helmet = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.HELMET); - syncEquipment(EntityEquipmentPacket.Slot.HELMET); + syncEquipment(EquipmentSlot.HELMET); } @NotNull @@ -110,7 +106,7 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setChestplate(@NotNull ItemStack itemStack) { this.chestplate = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.CHESTPLATE); - syncEquipment(EntityEquipmentPacket.Slot.CHESTPLATE); + syncEquipment(EquipmentSlot.CHESTPLATE); } @NotNull @@ -122,7 +118,7 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setLeggings(@NotNull ItemStack itemStack) { this.leggings = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.LEGGINGS); - syncEquipment(EntityEquipmentPacket.Slot.LEGGINGS); + syncEquipment(EquipmentSlot.LEGGINGS); } @NotNull @@ -134,7 +130,7 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setBoots(@NotNull ItemStack itemStack) { this.boots = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.BOOTS); - syncEquipment(EntityEquipmentPacket.Slot.BOOTS); + syncEquipment(EquipmentSlot.BOOTS); } public boolean isSmall() { diff --git a/src/main/java/net/minestom/server/inventory/EquipmentHandler.java b/src/main/java/net/minestom/server/inventory/EquipmentHandler.java index e515112aa..8d6562132 100644 --- a/src/main/java/net/minestom/server/inventory/EquipmentHandler.java +++ b/src/main/java/net/minestom/server/inventory/EquipmentHandler.java @@ -1,6 +1,7 @@ package net.minestom.server.inventory; import net.minestom.server.entity.Entity; +import net.minestom.server.entity.EquipmentSlot; import net.minestom.server.entity.Player; import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.server.play.EntityEquipmentPacket; @@ -139,7 +140,7 @@ public interface EquipmentHandler { * @param slot the equipment to get the item from * @return the equipment {@link ItemStack} */ - default @NotNull ItemStack getEquipment(@NotNull EntityEquipmentPacket.Slot slot) { + default @NotNull ItemStack getEquipment(@NotNull EquipmentSlot slot) { switch (slot) { case MAIN_HAND: return getItemInMainHand(); @@ -157,7 +158,7 @@ public interface EquipmentHandler { throw new IllegalStateException("Something weird happened"); } - default void setEquipment(@NotNull EntityEquipmentPacket.Slot slot, @NotNull ItemStack itemStack) { + default void setEquipment(@NotNull EquipmentSlot slot, @NotNull ItemStack itemStack) { switch (slot) { case MAIN_HAND: setItemInMainHand(itemStack); @@ -187,7 +188,7 @@ public interface EquipmentHandler { * * @param slot the slot of the equipment */ - default void syncEquipment(@NotNull EntityEquipmentPacket.Slot slot) { + default void syncEquipment(@NotNull EquipmentSlot slot) { Check.stateCondition(!(this instanceof Entity), "Only accessible for Entity"); Entity entity = (Entity) this; @@ -196,7 +197,7 @@ public interface EquipmentHandler { EntityEquipmentPacket entityEquipmentPacket = new EntityEquipmentPacket(); entityEquipmentPacket.entityId = entity.getEntityId(); - entityEquipmentPacket.slots = new EntityEquipmentPacket.Slot[]{slot}; + entityEquipmentPacket.slots = new EquipmentSlot[]{slot}; entityEquipmentPacket.itemStacks = new ItemStack[]{itemStack}; entity.sendPacketToViewers(entityEquipmentPacket); @@ -213,12 +214,12 @@ public interface EquipmentHandler { final Entity entity = (Entity) this; - final EntityEquipmentPacket.Slot[] slots = EntityEquipmentPacket.Slot.values(); + final EquipmentSlot[] slots = EquipmentSlot.values(); List itemStacks = new ArrayList<>(slots.length); // Fill items - for (EntityEquipmentPacket.Slot slot : slots) { + for (EquipmentSlot slot : slots) { final ItemStack equipment = getEquipment(slot); itemStacks.add(equipment); } diff --git a/src/main/java/net/minestom/server/inventory/PlayerInventory.java b/src/main/java/net/minestom/server/inventory/PlayerInventory.java index 840850d5b..12f9bfc7a 100644 --- a/src/main/java/net/minestom/server/inventory/PlayerInventory.java +++ b/src/main/java/net/minestom/server/inventory/PlayerInventory.java @@ -1,12 +1,12 @@ package net.minestom.server.inventory; +import net.minestom.server.entity.EquipmentSlot; import net.minestom.server.entity.Player; import net.minestom.server.event.item.ArmorEquipEvent; import net.minestom.server.inventory.click.ClickType; import net.minestom.server.inventory.click.InventoryClickResult; import net.minestom.server.inventory.condition.InventoryCondition; import net.minestom.server.item.ItemStack; -import net.minestom.server.network.packet.server.play.EntityEquipmentPacket; import net.minestom.server.network.packet.server.play.SetSlotPacket; import net.minestom.server.network.packet.server.play.WindowItemsPacket; import net.minestom.server.utils.MathUtils; @@ -170,12 +170,12 @@ public class PlayerInventory extends AbstractInventory implements EquipmentHandl "The slot {0} does not exist for player", slot); Check.notNull(itemStack, "The ItemStack cannot be null, you can set air instead"); - EntityEquipmentPacket.Slot equipmentSlot; + EquipmentSlot equipmentSlot; if (slot == player.getHeldSlot()) { - equipmentSlot = EntityEquipmentPacket.Slot.MAIN_HAND; + equipmentSlot = EquipmentSlot.MAIN_HAND; } else if (slot == OFFHAND_SLOT) { - equipmentSlot = EntityEquipmentPacket.Slot.OFF_HAND; + equipmentSlot = EquipmentSlot.OFF_HAND; } else { ArmorEquipEvent armorEquipEvent = null; @@ -191,7 +191,7 @@ public class PlayerInventory extends AbstractInventory implements EquipmentHandl if (armorEquipEvent != null) { ArmorEquipEvent.ArmorSlot armorSlot = armorEquipEvent.getArmorSlot(); - equipmentSlot = EntityEquipmentPacket.Slot.fromArmorSlot(armorSlot); + equipmentSlot = EquipmentSlot.fromArmorSlot(armorSlot); player.callEvent(ArmorEquipEvent.class, armorEquipEvent); itemStack = armorEquipEvent.getArmorItem(); } else { diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityEquipmentPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityEquipmentPacket.java index a2e92abdd..5707fba40 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityEquipmentPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityEquipmentPacket.java @@ -1,6 +1,6 @@ package net.minestom.server.network.packet.server.play; -import net.minestom.server.event.item.ArmorEquipEvent; +import net.minestom.server.entity.EquipmentSlot; import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.server.ServerPacket; import net.minestom.server.network.packet.server.ServerPacketIdentifier; @@ -14,7 +14,7 @@ import java.util.List; public class EntityEquipmentPacket implements ServerPacket { public int entityId; - public Slot[] slots; + public EquipmentSlot[] slots; public ItemStack[] itemStacks; public EntityEquipmentPacket() { @@ -33,7 +33,7 @@ public class EntityEquipmentPacket implements ServerPacket { } for (int i = 0; i < slots.length; i++) { - final Slot slot = slots[i]; + final EquipmentSlot slot = slots[i]; final ItemStack itemStack = itemStacks[i]; final boolean last = i == slots.length - 1; @@ -52,17 +52,17 @@ public class EntityEquipmentPacket implements ServerPacket { entityId = reader.readVarInt(); boolean hasRemaining = true; - List slots = new LinkedList<>(); + List slots = new LinkedList<>(); List stacks = new LinkedList<>(); while (hasRemaining) { byte slotEnum = reader.readByte(); hasRemaining = (slotEnum & 0x80) == 0x80; - slots.add(Slot.values()[slotEnum & 0x7F]); + slots.add(EquipmentSlot.values()[slotEnum & 0x7F]); stacks.add(reader.readItemStack()); } - this.slots = slots.toArray(new Slot[0]); + this.slots = slots.toArray(new EquipmentSlot[0]); this.itemStacks = stacks.toArray(new ItemStack[0]); } @@ -71,29 +71,4 @@ public class EntityEquipmentPacket implements ServerPacket { return ServerPacketIdentifier.ENTITY_EQUIPMENT; } - public enum Slot { - MAIN_HAND, - OFF_HAND, - BOOTS, - LEGGINGS, - CHESTPLATE, - HELMET; - - @NotNull - public static Slot fromArmorSlot(ArmorEquipEvent.ArmorSlot armorSlot) { - switch (armorSlot) { - case HELMET: - return HELMET; - case CHESTPLATE: - return CHESTPLATE; - case LEGGINGS: - return LEGGINGS; - case BOOTS: - return BOOTS; - } - throw new IllegalStateException("Something weird happened"); - } - - } - } diff --git a/src/test/java/readwritepackets/ReadWritePackets.java b/src/test/java/readwritepackets/ReadWritePackets.java index 5f28d8152..30d6ace81 100644 --- a/src/test/java/readwritepackets/ReadWritePackets.java +++ b/src/test/java/readwritepackets/ReadWritePackets.java @@ -2,6 +2,7 @@ package readwritepackets; import com.google.common.reflect.ClassPath; import net.minestom.server.MinecraftServer; +import net.minestom.server.entity.EquipmentSlot; import net.minestom.server.item.ItemStack; import net.minestom.server.network.packet.client.ClientPacket; import net.minestom.server.network.packet.server.ServerPacket; @@ -67,7 +68,7 @@ public class ReadWritePackets { // requires at least one slot and one item EntityEquipmentPacket p = new EntityEquipmentPacket(); p.itemStacks = new ItemStack[]{ItemStack.AIR}; - p.slots = new EntityEquipmentPacket.Slot[]{EntityEquipmentPacket.Slot.MAIN_HAND}; + p.slots = new EquipmentSlot[]{EquipmentSlot.MAIN_HAND}; packet = (T) p; } else { packet = (T) constructor.newInstance(); From 92d97c624f9f64b37f1f747c8be9d893c4aa9b4e Mon Sep 17 00:00:00 2001 From: Arne Dalhuisen <59421074+Bloepiloepi@users.noreply.github.com> Date: Tue, 11 May 2021 14:12:19 +0200 Subject: [PATCH 2/6] Added isHand and isArmor to EquipmentSlot --- .../java/net/minestom/server/entity/EquipmentSlot.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/net/minestom/server/entity/EquipmentSlot.java b/src/main/java/net/minestom/server/entity/EquipmentSlot.java index c269bfcaf..6002e181e 100644 --- a/src/main/java/net/minestom/server/entity/EquipmentSlot.java +++ b/src/main/java/net/minestom/server/entity/EquipmentSlot.java @@ -12,6 +12,14 @@ public enum EquipmentSlot { CHESTPLATE, HELMET; + public boolean isHand() { + return this == MAIN_HAND || this == OFF_HAND; + } + + public boolean isArmor() { + return !isHand(); + } + @NotNull public static EquipmentSlot fromArmorSlot(ArmorEquipEvent.ArmorSlot armorSlot) { switch (armorSlot) { From 77ef5f7d4287605503da0ad24bb72f27242487d5 Mon Sep 17 00:00:00 2001 From: Arne Dalhuisen <59421074+Bloepiloepi@users.noreply.github.com> Date: Tue, 11 May 2021 14:45:14 +0200 Subject: [PATCH 3/6] Made EntityEquipEvent, replacing ArmorEquipEvent --- .../minestom/server/entity/EquipmentSlot.java | 17 +-------- .../minestom/server/entity/LivingEntity.java | 22 ++++++------ .../type/decoration/EntityArmorStand.java | 22 ++++++------ ...rEquipEvent.java => EntityEquipEvent.java} | 20 ++++------- .../server/inventory/PlayerInventory.java | 36 ++++++++----------- 5 files changed, 45 insertions(+), 72 deletions(-) rename src/main/java/net/minestom/server/event/item/{ArmorEquipEvent.java => EntityEquipEvent.java} (61%) diff --git a/src/main/java/net/minestom/server/entity/EquipmentSlot.java b/src/main/java/net/minestom/server/entity/EquipmentSlot.java index 6002e181e..27a7cf02d 100644 --- a/src/main/java/net/minestom/server/entity/EquipmentSlot.java +++ b/src/main/java/net/minestom/server/entity/EquipmentSlot.java @@ -1,6 +1,6 @@ package net.minestom.server.entity; -import net.minestom.server.event.item.ArmorEquipEvent; +import net.minestom.server.event.item.EntityEquipEvent; import net.minestom.server.item.attribute.AttributeSlot; import org.jetbrains.annotations.NotNull; @@ -20,21 +20,6 @@ public enum EquipmentSlot { return !isHand(); } - @NotNull - public static EquipmentSlot fromArmorSlot(ArmorEquipEvent.ArmorSlot armorSlot) { - switch (armorSlot) { - case HELMET: - return HELMET; - case CHESTPLATE: - return CHESTPLATE; - case LEGGINGS: - return LEGGINGS; - case BOOTS: - return BOOTS; - } - throw new IllegalStateException("Something weird happened"); - } - @NotNull public static EquipmentSlot fromAttributeSlot(AttributeSlot attributeSlot) { switch (attributeSlot) { diff --git a/src/main/java/net/minestom/server/entity/LivingEntity.java b/src/main/java/net/minestom/server/entity/LivingEntity.java index a7f99c053..37ac9a77f 100644 --- a/src/main/java/net/minestom/server/entity/LivingEntity.java +++ b/src/main/java/net/minestom/server/entity/LivingEntity.java @@ -10,7 +10,7 @@ import net.minestom.server.entity.metadata.LivingEntityMeta; 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.item.ArmorEquipEvent; +import net.minestom.server.event.item.EntityEquipEvent; import net.minestom.server.event.item.PickupItemEvent; import net.minestom.server.instance.Chunk; import net.minestom.server.instance.block.Block; @@ -127,7 +127,7 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setItemInMainHand(@NotNull ItemStack itemStack) { - this.mainHandItem = itemStack; + this.mainHandItem = getEquipmentItem(itemStack, EquipmentSlot.MAIN_HAND); syncEquipment(EquipmentSlot.MAIN_HAND); } @@ -139,7 +139,7 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setItemInOffHand(@NotNull ItemStack itemStack) { - this.offHandItem = itemStack; + this.offHandItem = getEquipmentItem(itemStack, EquipmentSlot.OFF_HAND); syncEquipment(EquipmentSlot.OFF_HAND); } @@ -151,7 +151,7 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setHelmet(@NotNull ItemStack itemStack) { - this.helmet = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.HELMET); + this.helmet = getEquipmentItem(itemStack, EquipmentSlot.HELMET); syncEquipment(EquipmentSlot.HELMET); } @@ -163,7 +163,7 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setChestplate(@NotNull ItemStack itemStack) { - this.chestplate = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.CHESTPLATE); + this.chestplate = getEquipmentItem(itemStack, EquipmentSlot.CHESTPLATE); syncEquipment(EquipmentSlot.CHESTPLATE); } @@ -175,7 +175,7 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setLeggings(@NotNull ItemStack itemStack) { - this.leggings = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.LEGGINGS); + this.leggings = getEquipmentItem(itemStack, EquipmentSlot.LEGGINGS); syncEquipment(EquipmentSlot.LEGGINGS); } @@ -187,14 +187,14 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setBoots(@NotNull ItemStack itemStack) { - this.boots = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.BOOTS); + this.boots = getEquipmentItem(itemStack, EquipmentSlot.BOOTS); syncEquipment(EquipmentSlot.BOOTS); } - private ItemStack getEquipmentItem(@NotNull ItemStack itemStack, @NotNull ArmorEquipEvent.ArmorSlot armorSlot) { - ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(this, itemStack, armorSlot); - callEvent(ArmorEquipEvent.class, armorEquipEvent); - return armorEquipEvent.getArmorItem(); + private ItemStack getEquipmentItem(@NotNull ItemStack itemStack, @NotNull EquipmentSlot slot) { + EntityEquipEvent entityEquipEvent = new EntityEquipEvent(this, itemStack, slot); + callEvent(EntityEquipEvent.class, entityEquipEvent); + return entityEquipEvent.getArmorItem(); } @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 a89decefc..c36c6ffc9 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 @@ -1,7 +1,7 @@ package net.minestom.server.entity.type.decoration; import net.minestom.server.entity.*; -import net.minestom.server.event.item.ArmorEquipEvent; +import net.minestom.server.event.item.EntityEquipEvent; import net.minestom.server.inventory.EquipmentHandler; import net.minestom.server.item.ItemStack; import net.minestom.server.utils.Position; @@ -69,7 +69,7 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setItemInMainHand(@NotNull ItemStack itemStack) { - this.mainHandItem = itemStack; + this.mainHandItem = getEquipmentItem(itemStack, EquipmentSlot.MAIN_HAND); syncEquipment(EquipmentSlot.MAIN_HAND); } @@ -81,7 +81,7 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setItemInOffHand(@NotNull ItemStack itemStack) { - this.offHandItem = itemStack; + this.offHandItem = getEquipmentItem(itemStack, EquipmentSlot.OFF_HAND); syncEquipment(EquipmentSlot.OFF_HAND); } @@ -93,7 +93,7 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setHelmet(@NotNull ItemStack itemStack) { - this.helmet = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.HELMET); + this.helmet = getEquipmentItem(itemStack, EquipmentSlot.HELMET); syncEquipment(EquipmentSlot.HELMET); } @@ -105,7 +105,7 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setChestplate(@NotNull ItemStack itemStack) { - this.chestplate = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.CHESTPLATE); + this.chestplate = getEquipmentItem(itemStack, EquipmentSlot.CHESTPLATE); syncEquipment(EquipmentSlot.CHESTPLATE); } @@ -117,7 +117,7 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setLeggings(@NotNull ItemStack itemStack) { - this.leggings = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.LEGGINGS); + this.leggings = getEquipmentItem(itemStack, EquipmentSlot.LEGGINGS); syncEquipment(EquipmentSlot.LEGGINGS); } @@ -129,7 +129,7 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setBoots(@NotNull ItemStack itemStack) { - this.boots = getEquipmentItem(itemStack, ArmorEquipEvent.ArmorSlot.BOOTS); + this.boots = getEquipmentItem(itemStack, EquipmentSlot.BOOTS); syncEquipment(EquipmentSlot.BOOTS); } @@ -235,9 +235,9 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { // Equipments - private ItemStack getEquipmentItem(@NotNull ItemStack itemStack, @NotNull ArmorEquipEvent.ArmorSlot armorSlot) { - ArmorEquipEvent armorEquipEvent = new ArmorEquipEvent(this, itemStack, armorSlot); - callEvent(ArmorEquipEvent.class, armorEquipEvent); - return armorEquipEvent.getArmorItem(); + private ItemStack getEquipmentItem(@NotNull ItemStack itemStack, @NotNull EquipmentSlot slot) { + EntityEquipEvent entityEquipEvent = new EntityEquipEvent(this, itemStack, slot); + callEvent(EntityEquipEvent.class, entityEquipEvent); + return entityEquipEvent.getArmorItem(); } } diff --git a/src/main/java/net/minestom/server/event/item/ArmorEquipEvent.java b/src/main/java/net/minestom/server/event/item/EntityEquipEvent.java similarity index 61% rename from src/main/java/net/minestom/server/event/item/ArmorEquipEvent.java rename to src/main/java/net/minestom/server/event/item/EntityEquipEvent.java index f54ba4d32..fc2f2e72e 100644 --- a/src/main/java/net/minestom/server/event/item/ArmorEquipEvent.java +++ b/src/main/java/net/minestom/server/event/item/EntityEquipEvent.java @@ -1,20 +1,21 @@ package net.minestom.server.event.item; import net.minestom.server.entity.Entity; +import net.minestom.server.entity.EquipmentSlot; import net.minestom.server.event.Event; import net.minestom.server.item.ItemStack; import org.jetbrains.annotations.NotNull; -public class ArmorEquipEvent extends Event { +public class EntityEquipEvent extends Event { private final Entity entity; private ItemStack armorItem; - private final ArmorSlot armorSlot; + private final EquipmentSlot slot; - public ArmorEquipEvent(@NotNull Entity entity, @NotNull ItemStack armorItem, @NotNull ArmorSlot armorSlot) { + public EntityEquipEvent(@NotNull Entity entity, @NotNull ItemStack armorItem, @NotNull EquipmentSlot slot) { this.entity = entity; this.armorItem = armorItem; - this.armorSlot = armorSlot; + this.slot = slot; } @NotNull @@ -32,14 +33,7 @@ public class ArmorEquipEvent extends Event { } @NotNull - public ArmorSlot getArmorSlot() { - return armorSlot; - } - - public enum ArmorSlot { - HELMET, - CHESTPLATE, - LEGGINGS, - BOOTS + public EquipmentSlot getSlot() { + return slot; } } diff --git a/src/main/java/net/minestom/server/inventory/PlayerInventory.java b/src/main/java/net/minestom/server/inventory/PlayerInventory.java index 12f9bfc7a..59ee59ae8 100644 --- a/src/main/java/net/minestom/server/inventory/PlayerInventory.java +++ b/src/main/java/net/minestom/server/inventory/PlayerInventory.java @@ -2,7 +2,7 @@ package net.minestom.server.inventory; import net.minestom.server.entity.EquipmentSlot; import net.minestom.server.entity.Player; -import net.minestom.server.event.item.ArmorEquipEvent; +import net.minestom.server.event.item.EntityEquipEvent; import net.minestom.server.inventory.click.ClickType; import net.minestom.server.inventory.click.InventoryClickResult; import net.minestom.server.inventory.condition.InventoryCondition; @@ -170,33 +170,27 @@ public class PlayerInventory extends AbstractInventory implements EquipmentHandl "The slot {0} does not exist for player", slot); Check.notNull(itemStack, "The ItemStack cannot be null, you can set air instead"); - EquipmentSlot equipmentSlot; + EquipmentSlot equipmentSlot = null; if (slot == player.getHeldSlot()) { equipmentSlot = EquipmentSlot.MAIN_HAND; } else if (slot == OFFHAND_SLOT) { equipmentSlot = EquipmentSlot.OFF_HAND; - } else { - ArmorEquipEvent armorEquipEvent = null; + } else if (slot == HELMET_SLOT) { + equipmentSlot = EquipmentSlot.HELMET; + } else if (slot == CHESTPLATE_SLOT) { + equipmentSlot = EquipmentSlot.CHESTPLATE; + } else if (slot == LEGGINGS_SLOT) { + equipmentSlot = EquipmentSlot.LEGGINGS; + } else if (slot == BOOTS_SLOT) { + equipmentSlot = EquipmentSlot.BOOTS; + } - if (slot == HELMET_SLOT) { - armorEquipEvent = new ArmorEquipEvent(player, itemStack, ArmorEquipEvent.ArmorSlot.HELMET); - } else if (slot == CHESTPLATE_SLOT) { - armorEquipEvent = new ArmorEquipEvent(player, itemStack, ArmorEquipEvent.ArmorSlot.CHESTPLATE); - } else if (slot == LEGGINGS_SLOT) { - armorEquipEvent = new ArmorEquipEvent(player, itemStack, ArmorEquipEvent.ArmorSlot.LEGGINGS); - } else if (slot == BOOTS_SLOT) { - armorEquipEvent = new ArmorEquipEvent(player, itemStack, ArmorEquipEvent.ArmorSlot.BOOTS); - } + if (equipmentSlot != null) { + EntityEquipEvent entityEquipEvent = new EntityEquipEvent(player, itemStack, equipmentSlot); - if (armorEquipEvent != null) { - ArmorEquipEvent.ArmorSlot armorSlot = armorEquipEvent.getArmorSlot(); - equipmentSlot = EquipmentSlot.fromArmorSlot(armorSlot); - player.callEvent(ArmorEquipEvent.class, armorEquipEvent); - itemStack = armorEquipEvent.getArmorItem(); - } else { - equipmentSlot = null; - } + player.callEvent(EntityEquipEvent.class, entityEquipEvent); + itemStack = entityEquipEvent.getArmorItem(); } this.itemStacks[slot] = itemStack; From ed010ff110e015ee793f59af2bfac56660b07e53 Mon Sep 17 00:00:00 2001 From: Arne Dalhuisen <59421074+Bloepiloepi@users.noreply.github.com> Date: Tue, 11 May 2021 14:48:52 +0200 Subject: [PATCH 4/6] Renamed armorItem to equippedItem in EntityEquipEvent --- .../net/minestom/server/entity/LivingEntity.java | 2 +- .../entity/type/decoration/EntityArmorStand.java | 2 +- .../server/event/item/EntityEquipEvent.java | 14 +++++++------- .../minestom/server/inventory/PlayerInventory.java | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/minestom/server/entity/LivingEntity.java b/src/main/java/net/minestom/server/entity/LivingEntity.java index 37ac9a77f..f03e0849b 100644 --- a/src/main/java/net/minestom/server/entity/LivingEntity.java +++ b/src/main/java/net/minestom/server/entity/LivingEntity.java @@ -194,7 +194,7 @@ public class LivingEntity extends Entity implements EquipmentHandler { private ItemStack getEquipmentItem(@NotNull ItemStack itemStack, @NotNull EquipmentSlot slot) { EntityEquipEvent entityEquipEvent = new EntityEquipEvent(this, itemStack, slot); callEvent(EntityEquipEvent.class, entityEquipEvent); - return entityEquipEvent.getArmorItem(); + return 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 c36c6ffc9..121146e7b 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 @@ -238,6 +238,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.getArmorItem(); + return 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 fc2f2e72e..501273eaf 100644 --- a/src/main/java/net/minestom/server/event/item/EntityEquipEvent.java +++ b/src/main/java/net/minestom/server/event/item/EntityEquipEvent.java @@ -9,12 +9,12 @@ import org.jetbrains.annotations.NotNull; public class EntityEquipEvent extends Event { private final Entity entity; - private ItemStack armorItem; + private ItemStack equippedItem; private final EquipmentSlot slot; - public EntityEquipEvent(@NotNull Entity entity, @NotNull ItemStack armorItem, @NotNull EquipmentSlot slot) { + public EntityEquipEvent(@NotNull Entity entity, @NotNull ItemStack equippedItem, @NotNull EquipmentSlot slot) { this.entity = entity; - this.armorItem = armorItem; + this.equippedItem = equippedItem; this.slot = slot; } @@ -24,12 +24,12 @@ public class EntityEquipEvent extends Event { } @NotNull - public ItemStack getArmorItem() { - return armorItem; + public ItemStack getEquippedItem() { + return equippedItem; } - public void setArmorItem(@NotNull ItemStack armorItem) { - this.armorItem = armorItem; + public void setEquippedItem(@NotNull ItemStack armorItem) { + this.equippedItem = armorItem; } @NotNull diff --git a/src/main/java/net/minestom/server/inventory/PlayerInventory.java b/src/main/java/net/minestom/server/inventory/PlayerInventory.java index 59ee59ae8..a4723b8fd 100644 --- a/src/main/java/net/minestom/server/inventory/PlayerInventory.java +++ b/src/main/java/net/minestom/server/inventory/PlayerInventory.java @@ -190,7 +190,7 @@ public class PlayerInventory extends AbstractInventory implements EquipmentHandl EntityEquipEvent entityEquipEvent = new EntityEquipEvent(player, itemStack, equipmentSlot); player.callEvent(EntityEquipEvent.class, entityEquipEvent); - itemStack = entityEquipEvent.getArmorItem(); + itemStack = entityEquipEvent.getEquippedItem(); } this.itemStacks[slot] = itemStack; 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 5/6] 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; From 00278881eeecd23e478d25c990717899a2006f56 Mon Sep 17 00:00:00 2001 From: Arne Dalhuisen <59421074+Bloepiloepi@users.noreply.github.com> Date: Tue, 11 May 2021 20:11:56 +0200 Subject: [PATCH 6/6] Revert "Made EntityEquipEvent cancellable" This reverts commit d72fb72e --- .../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, 28 insertions(+), 82 deletions(-) diff --git a/src/main/java/net/minestom/server/entity/EquipmentSlot.java b/src/main/java/net/minestom/server/entity/EquipmentSlot.java index 7a3b70708..27a7cf02d 100644 --- a/src/main/java/net/minestom/server/entity/EquipmentSlot.java +++ b/src/main/java/net/minestom/server/entity/EquipmentSlot.java @@ -1,5 +1,6 @@ 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 22ddef528..f03e0849b 100644 --- a/src/main/java/net/minestom/server/entity/LivingEntity.java +++ b/src/main/java/net/minestom/server/entity/LivingEntity.java @@ -127,11 +127,8 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setItemInMainHand(@NotNull ItemStack itemStack) { - itemStack = getEquipmentItem(itemStack, EquipmentSlot.MAIN_HAND); - if (itemStack != null) { - this.mainHandItem = itemStack; - syncEquipment(EquipmentSlot.MAIN_HAND); - } + this.mainHandItem = getEquipmentItem(itemStack, EquipmentSlot.MAIN_HAND); + syncEquipment(EquipmentSlot.MAIN_HAND); } @NotNull @@ -142,11 +139,8 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setItemInOffHand(@NotNull ItemStack itemStack) { - itemStack = getEquipmentItem(itemStack, EquipmentSlot.OFF_HAND); - if (itemStack != null) { - this.offHandItem = itemStack; - syncEquipment(EquipmentSlot.OFF_HAND); - } + this.offHandItem = getEquipmentItem(itemStack, EquipmentSlot.OFF_HAND); + syncEquipment(EquipmentSlot.OFF_HAND); } @NotNull @@ -157,11 +151,8 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setHelmet(@NotNull ItemStack itemStack) { - itemStack = getEquipmentItem(itemStack, EquipmentSlot.HELMET); - if (itemStack != null) { - this.helmet = itemStack; - syncEquipment(EquipmentSlot.HELMET); - } + this.helmet = getEquipmentItem(itemStack, EquipmentSlot.HELMET); + syncEquipment(EquipmentSlot.HELMET); } @NotNull @@ -172,11 +163,8 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setChestplate(@NotNull ItemStack itemStack) { - itemStack = getEquipmentItem(itemStack, EquipmentSlot.CHESTPLATE); - if (itemStack != null) { - this.chestplate = itemStack; - syncEquipment(EquipmentSlot.CHESTPLATE); - } + this.chestplate = getEquipmentItem(itemStack, EquipmentSlot.CHESTPLATE); + syncEquipment(EquipmentSlot.CHESTPLATE); } @NotNull @@ -187,11 +175,8 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setLeggings(@NotNull ItemStack itemStack) { - itemStack = getEquipmentItem(itemStack, EquipmentSlot.LEGGINGS); - if (itemStack != null) { - this.leggings = itemStack; - syncEquipment(EquipmentSlot.LEGGINGS); - } + this.leggings = getEquipmentItem(itemStack, EquipmentSlot.LEGGINGS); + syncEquipment(EquipmentSlot.LEGGINGS); } @NotNull @@ -202,17 +187,14 @@ public class LivingEntity extends Entity implements EquipmentHandler { @Override public void setBoots(@NotNull ItemStack itemStack) { - itemStack = getEquipmentItem(itemStack, EquipmentSlot.BOOTS); - if (itemStack != null) { - this.boots = itemStack; - syncEquipment(EquipmentSlot.BOOTS); - } + this.boots = getEquipmentItem(itemStack, EquipmentSlot.BOOTS); + 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.isCancelled() ? null : entityEquipEvent.getEquippedItem(); + return 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 4e3a1074f..121146e7b 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,11 +69,8 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setItemInMainHand(@NotNull ItemStack itemStack) { - itemStack = getEquipmentItem(itemStack, EquipmentSlot.MAIN_HAND); - if (itemStack != null) { - this.mainHandItem = itemStack; - syncEquipment(EquipmentSlot.MAIN_HAND); - } + this.mainHandItem = getEquipmentItem(itemStack, EquipmentSlot.MAIN_HAND); + syncEquipment(EquipmentSlot.MAIN_HAND); } @NotNull @@ -84,11 +81,8 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setItemInOffHand(@NotNull ItemStack itemStack) { - itemStack = getEquipmentItem(itemStack, EquipmentSlot.OFF_HAND); - if (itemStack != null) { - this.offHandItem = itemStack; - syncEquipment(EquipmentSlot.OFF_HAND); - } + this.offHandItem = getEquipmentItem(itemStack, EquipmentSlot.OFF_HAND); + syncEquipment(EquipmentSlot.OFF_HAND); } @NotNull @@ -99,11 +93,8 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setHelmet(@NotNull ItemStack itemStack) { - itemStack = getEquipmentItem(itemStack, EquipmentSlot.HELMET); - if (itemStack != null) { - this.helmet = itemStack; - syncEquipment(EquipmentSlot.HELMET); - } + this.helmet = getEquipmentItem(itemStack, EquipmentSlot.HELMET); + syncEquipment(EquipmentSlot.HELMET); } @NotNull @@ -114,11 +105,8 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setChestplate(@NotNull ItemStack itemStack) { - itemStack = getEquipmentItem(itemStack, EquipmentSlot.CHESTPLATE); - if (itemStack != null) { - this.chestplate = itemStack; - syncEquipment(EquipmentSlot.CHESTPLATE); - } + this.chestplate = getEquipmentItem(itemStack, EquipmentSlot.CHESTPLATE); + syncEquipment(EquipmentSlot.CHESTPLATE); } @NotNull @@ -129,11 +117,8 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setLeggings(@NotNull ItemStack itemStack) { - itemStack = getEquipmentItem(itemStack, EquipmentSlot.LEGGINGS); - if (itemStack != null) { - this.leggings = itemStack; - syncEquipment(EquipmentSlot.LEGGINGS); - } + this.leggings = getEquipmentItem(itemStack, EquipmentSlot.LEGGINGS); + syncEquipment(EquipmentSlot.LEGGINGS); } @NotNull @@ -144,11 +129,8 @@ public class EntityArmorStand extends ObjectEntity implements EquipmentHandler { @Override public void setBoots(@NotNull ItemStack itemStack) { - itemStack = getEquipmentItem(itemStack, EquipmentSlot.BOOTS); - if (itemStack != null) { - this.boots = itemStack; - syncEquipment(EquipmentSlot.BOOTS); - } + this.boots = getEquipmentItem(itemStack, EquipmentSlot.BOOTS); + syncEquipment(EquipmentSlot.BOOTS); } public boolean isSmall() { @@ -256,6 +238,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.isCancelled() ? null : entityEquipEvent.getEquippedItem(); + return 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 98f4ae3ca..501273eaf 100644 --- a/src/main/java/net/minestom/server/event/item/EntityEquipEvent.java +++ b/src/main/java/net/minestom/server/event/item/EntityEquipEvent.java @@ -2,19 +2,16 @@ 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 implements CancellableEvent { +public class EntityEquipEvent extends Event { 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; @@ -39,14 +36,4 @@ public class EntityEquipEvent extends Event implements CancellableEvent { 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 d095bfab3..a4723b8fd 100644 --- a/src/main/java/net/minestom/server/inventory/PlayerInventory.java +++ b/src/main/java/net/minestom/server/inventory/PlayerInventory.java @@ -186,17 +186,11 @@ 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;