diff --git a/paper-api/src/main/java/org/bukkit/inventory/EquipmentSlot.java b/paper-api/src/main/java/org/bukkit/inventory/EquipmentSlot.java index 5642d8af60..c1c69ba4c3 100644 --- a/paper-api/src/main/java/org/bukkit/inventory/EquipmentSlot.java +++ b/paper-api/src/main/java/org/bukkit/inventory/EquipmentSlot.java @@ -33,4 +33,42 @@ public enum EquipmentSlot { public EquipmentSlotGroup getGroup() { return group.get(); } + // Paper start + /** + * Checks whether this equipment slot is a hand: + * either {@link #HAND} or {@link #OFF_HAND} + * + * @return whether this is a hand slot + */ + public boolean isHand() { + return this == HAND || this == OFF_HAND; + } + + /** + * Gets the opposite hand + * + * @return the opposite hand + * @throws IllegalArgumentException if this equipment slot is not a hand + * @see #isHand() + */ + public @NotNull EquipmentSlot getOppositeHand() { + return switch (this) { + case HAND -> OFF_HAND; + case OFF_HAND -> HAND; + default -> throw new IllegalArgumentException("Unable to determine an opposite hand for equipment slot: " + name()); + }; + } + + /** + * Checks whether this equipment slot + * is one of the armor slots: + * {@link #HEAD}, {@link #CHEST}, + * {@link #LEGS}, {@link #FEET}, or {@link #BODY} + * + * @return whether this is an armor slot + */ + public boolean isArmor() { + return this == HEAD || this == CHEST || this == LEGS || this == FEET || this == BODY; + } + // Paper end }