// Path: scripting/wrapper/nbt/TAG_Base.java
// public abstract class TAG_Base {
// 
// 	protected final NBTBase base;
// 
// 	public TAG_Base(NBTBase base) {
// 		this.base = base;
// 	}
// 	
// 	public abstract TAG_Base copy();
// 	
// 	public String toString() {
// 		return base.toString();
// 	}
// 	
// 	public int hashCode() {
// 		return base.hashCode();
// 	}
// 
// 	public boolean equals(Object obj) {
// 		if (obj instanceof TAG_Base)
// 			return ((TAG_Base)obj).base.equals(base);
// 		return false;
// 	}
// 	
// 	/**
// 	 * Called to create a script visible NBT Tag.
// 	 */
// 	public static TAG_Base createFromNative(NBTBase base) {
// 		if (base instanceof NBTTagByte)
// 			return new TAG_Byte((NBTTagByte)base);
// 		if (base instanceof NBTTagByteArray)
// 			return new TAG_Byte_Array((NBTTagByteArray)base);
// 		if (base instanceof NBTTagCompound)
// 			return new TAG_Compound((NBTTagCompound)base);
// 		if (base instanceof NBTTagDouble)
// 			return new TAG_Double((NBTTagDouble)base);
// 		if (base instanceof NBTTagFloat)
// 			return new TAG_Float((NBTTagFloat)base);
// 		if (base instanceof NBTTagInt)
// 			return new TAG_Int((NBTTagInt)base);
// 		if (base instanceof NBTTagIntArray)
// 			return new TAG_Int_Array((NBTTagIntArray)base);
// 		if (base instanceof NBTTagList)
// 			return new TAG_List((NBTTagList)base);
// 		if (base instanceof NBTTagLong)
// 			return new TAG_Long((NBTTagLong)base);
// 		if (base instanceof NBTTagShort)
// 			return new TAG_Short((NBTTagShort)base);
// 		if (base instanceof NBTTagString)
// 			return new TAG_String((NBTTagString)base);
// 		return null;
// 		
// 	}
// }
// 
// Path: scripting/wrapper/nbt/TAG_List.java
// public class TAG_List extends TAG_Base {
// 
// 	public final NBTTagList list;
// 
// 	public TAG_List() {
// 		super(new NBTTagList());
// 
// 		list = (NBTTagList)base;
// 	}
// 
// 	public TAG_List(NBTTagList list) {
// 		super(list);
// 
// 		this.list = list;
// 	}
// 
// 	public TAG_Base copy() {
// 		return new TAG_List((NBTTagList)list.copy());
// 	}
// 
// 	public void appendTag(TAG_Base tag) {
// 		list.appendTag(tag.base);
// 	}
// 
// 	public TAG_Base removeTag(int index) {
// 		return TAG_Base.createFromNative(list.removeTag(index));
// 	}
// 
// 	//TODO Improve/cache field?
// 	public TAG_Base tagAt(int index) {
// 		List<NBTBase> tagList = ReflectionHelper.getPrivateValue(NBTTagList.class, list, 0);
// 		return TAG_Base.createFromNative(tagList.get(index));
// 	}
// 
// 	public int tagCount() {
// 		return list.tagCount();
// 	}
// 
// 	public static TAG_List newFloatList(float... list) {
//         NBTTagList tagList = new NBTTagList();
//         for (float f : list)
//         	tagList.appendTag(new NBTTagFloat(f));
//         return new TAG_List(tagList);
//     }
// 
// 	public static TAG_List newDoubleList(double... list) {
//         NBTTagList tagList = new NBTTagList();
//         for (double d : list)
//         	tagList.appendTag(new NBTTagDouble(d));
//         return new TAG_List(tagList);
//     }
// 
// 
// }


import org.mozilla.javascript.Context;
import org.mozilla.javascript.Function;
import org.mozilla.javascript.JavaScriptException;
import org.mozilla.javascript.NativeIterator;
import org.mozilla.javascript.ScriptRuntime;
import org.mozilla.javascript.ScriptableObject;
import org.mozilla.javascript.annotations.JSConstructor;
import org.mozilla.javascript.annotations.JSFunction;
import scripting.wrapper.nbt.TAG_Base;
import scripting.wrapper.nbt.TAG_List;
package scripting.wrapper.js;



/**
 * Javascript TAG_List iterator.
 * 
 * Usage: "for (var tag in new TagItr(tagList)) ..."
 * 
 * See {@link scripting.wrapper.js.Range} for more information.
 *
 */
public class TagItr extends ScriptableObject {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	TAG_List list;
	int index;
	
	public TagItr() { }
	
	public TagItr(TAG_List list) {
		this.list = list;
	}
	

	@JSConstructor
	public static Object constructor(Context cx, Object[] args, Function ctorObj, boolean inNewExpr) {
		if (!inNewExpr)
			throw ScriptRuntime.constructError("TagItr Error", "Call constructor using the \"new\" keyword.");
		if (args.length == 1)
			return new TagItr((TAG_List)Context.jsToJava(args[0], TAG_List.class));
		throw ScriptRuntime.constructError("TagItr Error", "Call constructor with a single TAG_List.");
	}
	
	@JSFunction
// Path: scripting/wrapper/nbt/TAG_Base.java
// public abstract class TAG_Base {
// 
// 	protected final NBTBase base;
// 
// 	public TAG_Base(NBTBase base) {
// 		this.base = base;
// 	}
// 	
// 	public abstract TAG_Base copy();
// 	
// 	public String toString() {
// 		return base.toString();
// 	}
// 	
// 	public int hashCode() {
// 		return base.hashCode();
// 	}
// 
// 	public boolean equals(Object obj) {
// 		if (obj instanceof TAG_Base)
// 			return ((TAG_Base)obj).base.equals(base);
// 		return false;
// 	}
// 	
// 	/**
// 	 * Called to create a script visible NBT Tag.
// 	 */
// 	public static TAG_Base createFromNative(NBTBase base) {
// 		if (base instanceof NBTTagByte)
// 			return new TAG_Byte((NBTTagByte)base);
// 		if (base instanceof NBTTagByteArray)
// 			return new TAG_Byte_Array((NBTTagByteArray)base);
// 		if (base instanceof NBTTagCompound)
// 			return new TAG_Compound((NBTTagCompound)base);
// 		if (base instanceof NBTTagDouble)
// 			return new TAG_Double((NBTTagDouble)base);
// 		if (base instanceof NBTTagFloat)
// 			return new TAG_Float((NBTTagFloat)base);
// 		if (base instanceof NBTTagInt)
// 			return new TAG_Int((NBTTagInt)base);
// 		if (base instanceof NBTTagIntArray)
// 			return new TAG_Int_Array((NBTTagIntArray)base);
// 		if (base instanceof NBTTagList)
// 			return new TAG_List((NBTTagList)base);
// 		if (base instanceof NBTTagLong)
// 			return new TAG_Long((NBTTagLong)base);
// 		if (base instanceof NBTTagShort)
// 			return new TAG_Short((NBTTagShort)base);
// 		if (base instanceof NBTTagString)
// 			return new TAG_String((NBTTagString)base);
// 		return null;
// 		
// 	}
// }
// 
// Path: scripting/wrapper/nbt/TAG_List.java
// public class TAG_List extends TAG_Base {
// 
// 	public final NBTTagList list;
// 
// 	public TAG_List() {
// 		super(new NBTTagList());
// 
// 		list = (NBTTagList)base;
// 	}
// 
// 	public TAG_List(NBTTagList list) {
// 		super(list);
// 
// 		this.list = list;
// 	}
// 
// 	public TAG_Base copy() {
// 		return new TAG_List((NBTTagList)list.copy());
// 	}
// 
// 	public void appendTag(TAG_Base tag) {
// 		list.appendTag(tag.base);
// 	}
// 
// 	public TAG_Base removeTag(int index) {
// 		return TAG_Base.createFromNative(list.removeTag(index));
// 	}
// 
// 	//TODO Improve/cache field?
// 	public TAG_Base tagAt(int index) {
// 		List<NBTBase> tagList = ReflectionHelper.getPrivateValue(NBTTagList.class, list, 0);
// 		return TAG_Base.createFromNative(tagList.get(index));
// 	}
// 
// 	public int tagCount() {
// 		return list.tagCount();
// 	}
// 
// 	public static TAG_List newFloatList(float... list) {
//         NBTTagList tagList = new NBTTagList();
//         for (float f : list)
//         	tagList.appendTag(new NBTTagFloat(f));
//         return new TAG_List(tagList);
//     }
// 
// 	public static TAG_List newDoubleList(double... list) {
//         NBTTagList tagList = new NBTTagList();
//         for (double d : list)
//         	tagList.appendTag(new NBTTagDouble(d));
//         return new TAG_List(tagList);
//     }
// 
// 
// }


// Path: scripting/wrapper/js/TagItr.java
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Function;
import org.mozilla.javascript.JavaScriptException;
import org.mozilla.javascript.NativeIterator;
import org.mozilla.javascript.ScriptRuntime;
import org.mozilla.javascript.ScriptableObject;
import org.mozilla.javascript.annotations.JSConstructor;
import org.mozilla.javascript.annotations.JSFunction;
import scripting.wrapper.nbt.TAG_Base;
import scripting.wrapper.nbt.TAG_List;

package scripting.wrapper.js;



/**
 * Javascript TAG_List iterator.
 * 
 * Usage: "for (var tag in new TagItr(tagList)) ..."
 * 
 * See {@link scripting.wrapper.js.Range} for more information.
 *
 */
public class TagItr extends ScriptableObject {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	TAG_List list;
	int index;
	
	public TagItr() { }
	
	public TagItr(TAG_List list) {
		this.list = list;
	}
	

	@JSConstructor
	public static Object constructor(Context cx, Object[] args, Function ctorObj, boolean inNewExpr) {
		if (!inNewExpr)
			throw ScriptRuntime.constructError("TagItr Error", "Call constructor using the \"new\" keyword.");
		if (args.length == 1)
			return new TagItr((TAG_List)Context.jsToJava(args[0], TAG_List.class));
		throw ScriptRuntime.constructError("TagItr Error", "Call constructor with a single TAG_List.");
	}
	
	@JSFunction
	public TAG_Base next() {