diff --git a/src/com/massivecraft/massivecore/collections/BackstringEnumSet.java b/src/com/massivecraft/massivecore/collections/BackstringEnumSet.java index ed230679..57583fb9 100644 --- a/src/com/massivecraft/massivecore/collections/BackstringEnumSet.java +++ b/src/com/massivecraft/massivecore/collections/BackstringEnumSet.java @@ -67,5 +67,11 @@ public class BackstringEnumSet> extends BackstringSet return t.toString(); } + + @Override + public Map getStringToTypeMap() + { + return this.name2enum; + } } diff --git a/src/com/massivecraft/massivecore/collections/BackstringIterator.java b/src/com/massivecraft/massivecore/collections/BackstringIterator.java index fc3609b7..a156bd53 100644 --- a/src/com/massivecraft/massivecore/collections/BackstringIterator.java +++ b/src/com/massivecraft/massivecore/collections/BackstringIterator.java @@ -2,6 +2,7 @@ package com.massivecraft.massivecore.collections; import java.util.Iterator; +@Deprecated public class BackstringIterator implements Iterator { // -------------------------------------------- // diff --git a/src/com/massivecraft/massivecore/collections/BackstringSet.java b/src/com/massivecraft/massivecore/collections/BackstringSet.java index a58cfff5..93b78a35 100644 --- a/src/com/massivecraft/massivecore/collections/BackstringSet.java +++ b/src/com/massivecraft/massivecore/collections/BackstringSet.java @@ -1,10 +1,13 @@ package com.massivecraft.massivecore.collections; import java.util.AbstractSet; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; import java.util.Set; public abstract class BackstringSet extends AbstractSet @@ -23,6 +26,8 @@ public abstract class BackstringSet extends AbstractSet public abstract T convertFromString(String string); public abstract String convertToString(Object t); + public abstract Map getStringToTypeMap(); + // -------------------------------------------- // // CONSTRUCT // -------------------------------------------- // @@ -55,7 +60,21 @@ public abstract class BackstringSet extends AbstractSet @Override public Iterator iterator() { - return new BackstringIterator(this.stringSet.iterator(), this); + // Create + List ret = new ArrayList<>(); + + // Get our conversion map + Map typeMap = this.getStringToTypeMap(); + + // Fill + for (String key: this.getStringSet()) + { + T value = typeMap.get(key); + if (value != null) ret.add(value); + } + + // Return + return ret.iterator(); } @Override diff --git a/src/com/massivecraft/massivecore/command/type/RegistryType.java b/src/com/massivecraft/massivecore/command/type/RegistryType.java index 952bd07a..183b5891 100644 --- a/src/com/massivecraft/massivecore/command/type/RegistryType.java +++ b/src/com/massivecraft/massivecore/command/type/RegistryType.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import com.massivecraft.massivecore.collections.BackstringEnumSet; import com.massivecraft.massivecore.collections.ExceptionSet; import com.massivecraft.massivecore.collections.MassiveList; import com.massivecraft.massivecore.collections.MassiveMap; @@ -17,6 +18,7 @@ import com.massivecraft.massivecore.command.type.combined.TypeDataPotionEffect; import com.massivecraft.massivecore.command.type.combined.TypeEntry; import com.massivecraft.massivecore.command.type.combined.TypePotionEffectWrap; import com.massivecraft.massivecore.command.type.combined.TypeSoundEffect; +import com.massivecraft.massivecore.command.type.container.TypeBackStringEnumSet; import com.massivecraft.massivecore.command.type.container.TypeExceptionSet; import com.massivecraft.massivecore.command.type.container.TypeList; import com.massivecraft.massivecore.command.type.container.TypeMap; @@ -129,6 +131,12 @@ public class RegistryType Class fieldClass = field == null ? null : field.getType(); List> innerTypes; + if (ReflectionUtil.isRawTypeAssignableFromAny(BackstringEnumSet.class, fieldType, fieldClass)) + { + innerTypes = getInnerTypes(field, fieldType, 1); + return TypeBackStringEnumSet.get((Type)innerTypes.get(0)); + } + if (ReflectionUtil.isRawTypeAssignableFromAny(List.class, fieldType, fieldClass)) { innerTypes = getInnerTypes(field, fieldType, 1); diff --git a/src/com/massivecraft/massivecore/command/type/container/TypeBackStringEnumSet.java b/src/com/massivecraft/massivecore/command/type/container/TypeBackStringEnumSet.java new file mode 100644 index 00000000..5b8b135d --- /dev/null +++ b/src/com/massivecraft/massivecore/command/type/container/TypeBackStringEnumSet.java @@ -0,0 +1,41 @@ +package com.massivecraft.massivecore.command.type.container; + +import com.massivecraft.massivecore.collections.BackstringEnumSet; +import com.massivecraft.massivecore.command.type.Type; + +import java.util.Set; + +public class TypeBackStringEnumSet> extends TypeContainer, E> +{ + // -------------------------------------------- // + // FIELDS + // -------------------------------------------- // + + private Class innerTypeClass; + + // -------------------------------------------- // + // CONSTRUCT + // -------------------------------------------- // + + public static > TypeBackStringEnumSet get(Type innerType) + { + return new TypeBackStringEnumSet(innerType); + } + + public TypeBackStringEnumSet(Type innerType) + { + super(BackstringEnumSet.class, innerType); + this.innerTypeClass = innerType.getClazz(); + } + + // -------------------------------------------- // + // OVERRIDE + // -------------------------------------------- // + + @Override + public BackstringEnumSet createNewInstance() + { + return new BackstringEnumSet((Class) innerTypeClass); + } + +}