From 39ce5d3a8ab15140d51a186670f8d31f18d31fae Mon Sep 17 00:00:00 2001 From: Nathan Wolf Date: Wed, 26 Sep 2018 18:09:13 -0700 Subject: SPIGOT-4399: ItemMeta.equals broken with AttributeModifiers Fix equality check in AttributeModifier Add hashCode method to AttributeModifier This is necessary for contains() checks in ItemMeta to function properly --- src/main/java/org/bukkit/attribute/AttributeModifier.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/bukkit/attribute/AttributeModifier.java b/src/main/java/org/bukkit/attribute/AttributeModifier.java index a3a69ffa..2bc9878f 100644 --- a/src/main/java/org/bukkit/attribute/AttributeModifier.java +++ b/src/main/java/org/bukkit/attribute/AttributeModifier.java @@ -2,6 +2,7 @@ package org.bukkit.attribute; import java.util.HashMap; import java.util.Map; +import java.util.Objects; import java.util.UUID; import org.apache.commons.lang.Validate; import org.bukkit.configuration.serialization.ConfigurationSerializable; @@ -103,10 +104,21 @@ public class AttributeModifier implements ConfigurationSerializable { return false; } AttributeModifier mod = (AttributeModifier) other; - boolean slots = (this.slot != null ? (this.slot == mod.slot) : mod.slot != null); + boolean slots = (this.slot != null ? (this.slot == mod.slot) : mod.slot == null); return this.uuid.equals(mod.uuid) && this.name.equals(mod.name) && this.amount == mod.amount && this.operation == mod.operation && slots; } + @Override + public int hashCode() { + int hash = 5; + hash = 17 * hash + Objects.hashCode(this.uuid); + hash = 17 * hash + Objects.hashCode(this.name); + hash = 17 * hash + (int) (Double.doubleToLongBits(this.amount) ^ (Double.doubleToLongBits(this.amount) >>> 32)); + hash = 17 * hash + Objects.hashCode(this.operation); + hash = 17 * hash + Objects.hashCode(this.slot); + return hash; + } + @Override public String toString() { return "AttributeModifier{" -- cgit v1.2.3