summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/bukkit/metadata/MetadataStoreBase.java3
-rw-r--r--src/test/java/org/bukkit/metadata/MetadataStoreTest.java9
2 files changed, 12 insertions, 0 deletions
diff --git a/src/main/java/org/bukkit/metadata/MetadataStoreBase.java b/src/main/java/org/bukkit/metadata/MetadataStoreBase.java
index 3a40ae7d..9bbe3647 100644
--- a/src/main/java/org/bukkit/metadata/MetadataStoreBase.java
+++ b/src/main/java/org/bukkit/metadata/MetadataStoreBase.java
@@ -86,6 +86,9 @@ public abstract class MetadataStoreBase<T> {
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/src/test/java/org/bukkit/metadata/MetadataStoreTest.java b/src/test/java/org/bukkit/metadata/MetadataStoreTest.java
index f35d5be4..30f03686 100644
--- a/src/test/java/org/bukkit/metadata/MetadataStoreTest.java
+++ b/src/test/java/org/bukkit/metadata/MetadataStoreTest.java
@@ -97,6 +97,15 @@ public class MetadataStoreTest {
}
@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));
subject.removeMetadata("subject", "key", pluginY);