#pragma once #include "APIHelp.h" #include #include class BlockSource; ///////////////////// Enum ////////////////////// extern ClassDefine DamageCauseEnumBuilder; //////////////////// Classes //////////////////// class IntPos : public IntVec4, public ScriptClass { public: explicit IntPos(const Local& scriptObj) : ScriptClass(scriptObj) { } static IntPos* create(const Arguments& args); static Local newPos(int x, int y, int z, int dim = -1); static Local newPos(const BlockPos& b, int dim = -1); static Local newPos(const BlockPos* b, int dim = -1); static Local newPos(const BlockPos* b, BlockSource* bs); static Local newPos(const IntVec4& v); static IntPos* extractPos(Local v); Local getX() { return Number::newNumber(x); } Local getY() { return Number::newNumber(y); } Local getZ() { return Number::newNumber(z); } Local getDim(); Local getDimId() { return Number::newNumber(dim); } void setX(const Local& value) { x = value.asNumber().toInt64(); } void setY(const Local& value) { y = value.asNumber().toInt64(); } void setZ(const Local& value) { z = value.asNumber().toInt64(); } void setDimId(const Local& value) { dim = value.asNumber().toInt32(); } Local toString(); }; extern ClassDefine IntPosBuilder; class FloatPos : public FloatVec4, public ScriptClass { public: explicit FloatPos(const Local& scriptObj) : ScriptClass(scriptObj) { } static FloatPos* create(const Arguments& args); static Local newPos(double x, double y, double z, int dim = -1); static Local newPos(const Vec3& v, int dim = -1); static Local newPos(const FloatVec4& v); static FloatPos* extractPos(Local v); Local getX() { return Number::newNumber(x); } Local getY() { return Number::newNumber(y); } Local getZ() { return Number::newNumber(z); } Local getDim(); Local getDimId() { return Number::newNumber(dim); } Local toString(); void setX(const Local& value) { x = value.asNumber().toInt64(); } void setY(const Local& value) { y = value.asNumber().toInt64(); } void setZ(const Local& value) { z = value.asNumber().toInt64(); } void setDimId(const Local& value) { dim = value.asNumber().toInt32(); } }; extern ClassDefine FloatPosBuilder; class DirectionAngle : public ScriptClass { public: double pitch = 0, yaw = 0; explicit DirectionAngle(const Local& scriptObj) : ScriptClass(scriptObj) { } static DirectionAngle* create(const Arguments& args); static Local newAngle(float pitch, float yaw); Local getPitch() { return Number::newNumber(pitch); } Local getYaw() { return Number::newNumber(yaw); } void setPitch(const Local& value) { pitch = value.asNumber().toDouble(); } void setYaw(const Local& value) { yaw = value.asNumber().toDouble(); } Local toString(); Local toFacing(); }; extern ClassDefine DirectionAngleBuilder;