#pragma once #include "APIHelp.h" #include #include #include #include #include #include #include #include #include #include #include #include extern struct Tag; // NBT Static class NbtStatic : public ScriptClass { public: static Local newTag(const Arguments& args); static Local parseSNBT(const Arguments& args); static Local parseBinaryNBT(const Arguments& args); template static Local getType() { return Number::newNumber((int)T); } }; extern ClassDefine NbtStaticBuilder; // NBT End class EndTag; class NbtEndClass : public ScriptClass { public: std::unique_ptr nbt; bool canDelete = true; explicit NbtEndClass(const Local& scriptObj, std::unique_ptr p); explicit NbtEndClass(std::unique_ptr p); ~NbtEndClass() { if (!canDelete) nbt.release(); } static NbtEndClass* constructor(const Arguments& args); static EndTag* extract(Local v); static Local pack(EndTag* tag, bool noDelete = false); static Local pack(std::unique_ptr tag); Local getType(const Arguments& args); Local set(const Arguments& args); Local get(const Arguments& args); Local toString(const Arguments& args); }; extern ClassDefine NbtEndClassBuilder; // NBT Byte class NbtByteClass : public ScriptClass { public: std::unique_ptr nbt; bool canDelete = true; explicit NbtByteClass(const Local& scriptObj, std::unique_ptr p); explicit NbtByteClass(std::unique_ptr p); ~NbtByteClass() { if (!canDelete) nbt.release(); } static NbtByteClass* constructor(const Arguments& args); static ByteTag* extract(Local v); static Local pack(ByteTag* tag, bool noDelete = false); static Local pack(std::unique_ptr tag); Local getType(const Arguments& args); Local set(const Arguments& args); Local get(const Arguments& args); Local toString(const Arguments& args); }; extern ClassDefine NbtByteClassBuilder; // NBT Short class NbtShortClass : public ScriptClass { public: std::unique_ptr nbt; bool canDelete = true; explicit NbtShortClass(const Local& scriptObj, std::unique_ptr p); explicit NbtShortClass(std::unique_ptr p); ~NbtShortClass() { if (!canDelete) nbt.release(); } static NbtShortClass* constructor(const Arguments& args); static ShortTag* extract(Local v); static Local pack(ShortTag* tag, bool noDelete = false); static Local pack(std::unique_ptr tag); Local getType(const Arguments& args); Local set(const Arguments& args); Local get(const Arguments& args); Local toString(const Arguments& args); }; extern ClassDefine NbtShortClassBuilder; // NBT Int class NbtIntClass : public ScriptClass { public: std::unique_ptr nbt; bool canDelete = true; explicit NbtIntClass(const Local& scriptObj, std::unique_ptr p); explicit NbtIntClass(std::unique_ptr p); ~NbtIntClass() { if (!canDelete) nbt.release(); } static NbtIntClass* constructor(const Arguments& args); static IntTag* extract(Local v); static Local pack(IntTag* tag, bool noDelete = false); static Local pack(std::unique_ptr tag); Local getType(const Arguments& args); Local set(const Arguments& args); Local get(const Arguments& args); Local toString(const Arguments& args); }; extern ClassDefine NbtIntClassBuilder; // NBT Long class NbtLongClass : public ScriptClass { public: std::unique_ptr nbt; bool canDelete = true; explicit NbtLongClass(const Local& scriptObj, std::unique_ptr p); explicit NbtLongClass(std::unique_ptr p); ~NbtLongClass() { if (!canDelete) nbt.release(); } static NbtLongClass* constructor(const Arguments& args); static Int64Tag* extract(Local v); static Local pack(Int64Tag* tag, bool noDelete = false); static Local pack(std::unique_ptr tag); Local getType(const Arguments& args); Local set(const Arguments& args); Local get(const Arguments& args); Local toString(const Arguments& args); }; extern ClassDefine NbtLongClassBuilder; // NBT Float class NbtFloatClass : public ScriptClass { public: std::unique_ptr nbt; bool canDelete = true; explicit NbtFloatClass(const Local& scriptObj, std::unique_ptr p); explicit NbtFloatClass(std::unique_ptr p); ~NbtFloatClass() { if (!canDelete) nbt.release(); } static NbtFloatClass* constructor(const Arguments& args); static FloatTag* extract(Local v); static Local pack(FloatTag* tag, bool noDelete = false); static Local pack(std::unique_ptr tag); Local getType(const Arguments& args); Local set(const Arguments& args); Local get(const Arguments& args); Local toString(const Arguments& args); }; extern ClassDefine NbtFloatClassBuilder; // NBT Double class NbtDoubleClass : public ScriptClass { public: std::unique_ptr nbt; bool canDelete = true; explicit NbtDoubleClass(const Local& scriptObj, std::unique_ptr p); explicit NbtDoubleClass(std::unique_ptr p); ~NbtDoubleClass() { if (!canDelete) nbt.release(); } static NbtDoubleClass* constructor(const Arguments& args); static DoubleTag* extract(Local v); static Local pack(DoubleTag* tag, bool noDelete = false); static Local pack(std::unique_ptr tag); Local getType(const Arguments& args); Local set(const Arguments& args); Local get(const Arguments& args); Local toString(const Arguments& args); }; extern ClassDefine NbtDoubleClassBuilder; // NBT String class NbtStringClass : public ScriptClass { public: std::unique_ptr nbt; bool canDelete = true; explicit NbtStringClass(const Local& scriptObj, std::unique_ptr p); explicit NbtStringClass(std::unique_ptr p); ~NbtStringClass() { if (!canDelete) nbt.release(); } static NbtStringClass* constructor(const Arguments& args); static StringTag* extract(Local v); static Local pack(StringTag* tag, bool noDelete = false); static Local pack(std::unique_ptr tag); Local getType(const Arguments& args); Local set(const Arguments& args); Local get(const Arguments& args); Local toString(const Arguments& args); }; extern ClassDefine NbtStringClassBuilder; // NBT ByteArray class NbtByteArrayClass : public ScriptClass { public: std::unique_ptr nbt; bool canDelete = true; explicit NbtByteArrayClass(const Local& scriptObj, std::unique_ptr p); explicit NbtByteArrayClass(std::unique_ptr p); ~NbtByteArrayClass() { if (!canDelete) nbt.release(); } static NbtByteArrayClass* constructor(const Arguments& args); static ByteArrayTag* extract(Local v); static Local pack(ByteArrayTag* tag, bool noDelete = false); static Local pack(std::unique_ptr tag); Local getType(const Arguments& args); Local set(const Arguments& args); Local get(const Arguments& args); Local toString(const Arguments& args); }; extern ClassDefine NbtByteArrayClassBuilder; // NBT List class NbtListClass : public ScriptClass { public: std::unique_ptr nbt; bool canDelete = true; explicit NbtListClass(const Local& scriptObj, std::unique_ptr p); explicit NbtListClass(std::unique_ptr p); ~NbtListClass() { if (!canDelete) nbt.release(); } static NbtListClass* constructor(const Arguments& args); static ListTag* extract(Local v); static Local pack(ListTag* tag, bool noDelete = false); static Local pack(std::unique_ptr tag); Local getType(const Arguments& args); Local getSize(const Arguments& args); Local getTypeOf(const Arguments& args); Local setEnd(const Arguments& args); Local setByte(const Arguments& args); Local setInt(const Arguments& args); Local setShort(const Arguments& args); Local setLong(const Arguments& args); Local setFloat(const Arguments& args); Local setDouble(const Arguments& args); Local setString(const Arguments& args); Local setByteArray(const Arguments& args); Local setTag(const Arguments& args); Local addTag(const Arguments& args); Local removeTag(const Arguments& args); Local getData(const Arguments& args); Local getTag(const Arguments& args); Local toArray(const Arguments& args); Local toString(const Arguments& args); }; extern ClassDefine NbtListClassBuilder; // NBT Compound class NbtCompoundClass : public ScriptClass { public: std::unique_ptr nbt; bool canDelete = true; explicit NbtCompoundClass(const Local& scriptObj, std::unique_ptr p); explicit NbtCompoundClass(std::unique_ptr p); ~NbtCompoundClass() { if (!canDelete) nbt.release(); } static NbtCompoundClass* constructor(const Arguments& args); static CompoundTag* extract(Local v); static Local pack(CompoundTag* tag, bool noDelete = false); static Local pack(std::unique_ptr tag); Local getType(const Arguments& args); Local getKeys(const Arguments& args); Local getTypeOf(const Arguments& args); Local setEnd(const Arguments& args); Local setByte(const Arguments& args); Local setInt(const Arguments& args); Local setShort(const Arguments& args); Local setLong(const Arguments& args); Local setFloat(const Arguments& args); Local setDouble(const Arguments& args); Local setString(const Arguments& args); Local setByteArray(const Arguments& args); Local setTag(const Arguments& args); Local removeTag(const Arguments& args); Local getData(const Arguments& args); Local getTag(const Arguments& args); Local toObject(const Arguments& args); Local toSNBT(const Arguments& args); Local toBinaryNBT(const Arguments& args); Local toString(const Arguments& args); Local destroy(const Arguments& args); }; extern ClassDefine NbtCompoundClassBuilder; // Helper bool IsNbtClass(Local value); Local Tag2Value(Tag* nbt, bool autoExpansion = false); void NbtCompoundClassAddHelper(CompoundTag* tag, Local& obj); void NbtListClassAddHelper(ListTag* tag, Local& arr);