Iterable
The IterableAnnotation can be applied to a class to allow ZS Iterating over it.
There are three kinds of IterableAnnotations:
@IterableSimple
(needs to implementIterable
)@IterableList
(needs to implementList
)@IterableMap
(needs to implementMap
)
Example
@ZenClass("crafttweaker.oredict.IOreDict")@IterableSimple("crafttweaker.oredict.IOreDictEntry")@ZenRegisterpublic interface IOreDict extends Iterable<IOreDictEntry> {
@ZenMemberGetter @ZenOperator(OperatorType.INDEXGET) @ZenMethod IOreDictEntry get(String name);
@ZenGetter("entries") List<IOreDictEntry> getEntries();
@ZenOperator(OperatorType.CONTAINS) @ZenMethod boolean contains(String name);}
@Override public Iterator<IOreDictEntry> iterator() { return Arrays.asList(OreDictionary.getOreNames()) .stream() .map(CraftTweakerMC::getOreDict) .iterator();
}
How would that be useable in ZS?
for oreDictEntry in oreDict { print(oreDictEntry.name);}
What Classes can be annotated || Additional Info
You can annotate all classes that implement the required interface.
You need to provide a String value that refers to the Iterated ZenScript’s class name.