From cc95e9f5efe8805fe2f42e33dee808589ba4ce8e Mon Sep 17 00:00:00 2001 From: Bukkit/Spigot Date: Wed, 28 Mar 2012 01:41:33 -0400 Subject: [PATCH] [Bleeding] Removing the last metadata item for a key now sets hasMetadata(key) to false. Addresses BUKKIT-1380 By: rmichela --- .../main/java/org/bukkit/metadata/MetadataStoreBase.java | 3 +++ .../test/java/org/bukkit/metadata/MetadataStoreTest.java | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/paper-api/src/main/java/org/bukkit/metadata/MetadataStoreBase.java b/paper-api/src/main/java/org/bukkit/metadata/MetadataStoreBase.java index 3a40ae7d09..9bbe364706 100644 --- a/paper-api/src/main/java/org/bukkit/metadata/MetadataStoreBase.java +++ b/paper-api/src/main/java/org/bukkit/metadata/MetadataStoreBase.java @@ -86,6 +86,9 @@ public abstract class MetadataStoreBase { for (int i = 0; i < metadataList.size(); i++) { if (metadataList.get(i).getOwningPlugin().equals(owningPlugin)) { metadataList.remove(i); + if (metadataList.isEmpty()) { + metadataMap.remove(key); + } } } } diff --git a/paper-api/src/test/java/org/bukkit/metadata/MetadataStoreTest.java b/paper-api/src/test/java/org/bukkit/metadata/MetadataStoreTest.java index f35d5be486..30f0368645 100644 --- a/paper-api/src/test/java/org/bukkit/metadata/MetadataStoreTest.java +++ b/paper-api/src/test/java/org/bukkit/metadata/MetadataStoreTest.java @@ -96,6 +96,15 @@ public class MetadataStoreTest { assertEquals(20, subject.getMetadata("subject", "key").get(0).value()); } + @Test + public void testMetadataRemoveLast() { + subject.setMetadata("subject", "key", new FixedMetadataValue(pluginX, 10)); + subject.removeMetadata("subject", "key", pluginX); + + assertFalse(subject.hasMetadata("subject", "key")); + assertEquals(0, subject.getMetadata("subject", "key").size()); + } + @Test public void testMetadataRemoveForNonExistingPlugin() { subject.setMetadata("subject", "key", new FixedMetadataValue(pluginX, 10));