package net.minecraft.core;

import com.bergerkiller.generated.net.minecraft.core.Vector3fHandle;

class Vector3f {
#if version >= 1.21.5
    public float getX:x();
    public float getY:y();
    public float getZ:z();
#else
    public float getX();
    public float getY();
    public float getZ();
#endif

    public org.bukkit.util.Vector toBukkit() {
#if version >= 1.21.5
        return new org.bukkit.util.Vector(instance.x(), instance.y(), instance.z());
#else
        return new org.bukkit.util.Vector(instance.getX(), instance.getY(), instance.getZ());
#endif
    }

    public (Vector3fHandle) Vector3f(float x, float y, float z);

    <code>
    public static Vector3fHandle fromBukkit(org.bukkit.util.Vector vector) {
        return createHandle(fromBukkitRaw(vector));
    }
    </code>

    public static Object fromBukkitRaw(org.bukkit.util.Vector vector) {
#if exists net.minecraft.core.Vector3f public static Vector3f createWithoutValidityChecks(float x, float y, float z);
        // paper optimization
        return net.minecraft.core.Vector3f.createWithoutValidityChecks((float)vector.getX(),
                                                                       (float)vector.getY(),
                                                                       (float)vector.getZ());
#elseif version >= 1.12 && version < 1.21.5
        Object v3 = com.bergerkiller.generated.net.minecraft.core.Vector3fHandle.T.newInstanceNull();
        #require net.minecraft.core.Vector3f protected final float x;
        #require net.minecraft.core.Vector3f protected final float y;
        #require net.minecraft.core.Vector3f protected final float z;
        v3#x = (float)vector.getX();
        v3#y = (float)vector.getY();
        v3#z = (float)vector.getZ();
        return v3;
#else
        return new Vector3f((float) vector.getX(), (float) vector.getY(), (float) vector.getZ());
#endif
    }
}
