// Path: src/main/java/fi/dy/masa/minihud/util/ShapeRenderType.java
// public class ShapeRenderType extends BaseOptionListConfigValue
// {
//     public static final ShapeRenderType FULL_BLOCK = new ShapeRenderType("full_block", "minihud.name.shape_render_type.full_block");
//     public static final ShapeRenderType INNER_EDGE = new ShapeRenderType("inner_edge", "minihud.name.shape_render_type.inner_edge");
//     public static final ShapeRenderType OUTER_EDGE = new ShapeRenderType("outer_edge", "minihud.name.shape_render_type.outer_edge");
// 
//     public static final ImmutableList<ShapeRenderType> VALUES = ImmutableList.of(FULL_BLOCK, INNER_EDGE, OUTER_EDGE);
// 
//     private ShapeRenderType(String name, String translationKey)
//     {
//         super(name, translationKey);
//     }
// }


import java.text.DecimalFormat;
import java.util.HashSet;
import java.util.List;
import javax.annotation.Nullable;
import org.lwjgl.opengl.GL11;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.entity.Entity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import fi.dy.masa.malilib.config.value.BaseOptionListConfigValue;
import fi.dy.masa.malilib.config.value.BlockSnap;
import fi.dy.masa.malilib.render.ShapeRenderUtils;
import fi.dy.masa.malilib.util.EntityUtils;
import fi.dy.masa.malilib.util.JsonUtils;
import fi.dy.masa.malilib.util.StringUtils;
import fi.dy.masa.malilib.util.data.Color4f;
import fi.dy.masa.malilib.util.position.LayerRange;
import fi.dy.masa.minihud.util.ShapeRenderType;
        Vec3d center = JsonUtils.vec3dFromJson(obj, "center");

        if (center != null)
        {
            this.setCenter(center);
        }
    }

    @Override
    public List<String> getWidgetHoverLines()
    {
        List<String> lines = super.getWidgetHoverLines();
        DecimalFormat fmt = new DecimalFormat("#.##");
        Vec3d c = this.center;

        lines.add(StringUtils.translate("minihud.hover.shape.radius", this.getRadius()));
        lines.add(StringUtils.translate("minihud.hover.shape.center", fmt.format(c.x), fmt.format(c.y), fmt.format(c.z)));
        lines.add(StringUtils.translate("minihud.hover.shape.block_snap", this.snap.getDisplayName()));

        if (this.snap != BlockSnap.NONE)
        {
            c = this.effectiveCenter;
            lines.add(StringUtils.translate("minihud.hover.shape.effective_center", fmt.format(c.x), fmt.format(c.y), fmt.format(c.z)));
        }

        return lines;
    }

    protected void renderPositions(HashSet<BlockPos> positions, EnumFacing[] sides, EnumFacing mainAxis, Color4f color, Vec3d cameraPos)
    {
// Path: src/main/java/fi/dy/masa/minihud/util/ShapeRenderType.java
// public class ShapeRenderType extends BaseOptionListConfigValue
// {
//     public static final ShapeRenderType FULL_BLOCK = new ShapeRenderType("full_block", "minihud.name.shape_render_type.full_block");
//     public static final ShapeRenderType INNER_EDGE = new ShapeRenderType("inner_edge", "minihud.name.shape_render_type.inner_edge");
//     public static final ShapeRenderType OUTER_EDGE = new ShapeRenderType("outer_edge", "minihud.name.shape_render_type.outer_edge");
// 
//     public static final ImmutableList<ShapeRenderType> VALUES = ImmutableList.of(FULL_BLOCK, INNER_EDGE, OUTER_EDGE);
// 
//     private ShapeRenderType(String name, String translationKey)
//     {
//         super(name, translationKey);
//     }
// }


// Path: src/main/java/fi/dy/masa/minihud/renderer/shapes/ShapeCircleBase.java
import java.text.DecimalFormat;
import java.util.HashSet;
import java.util.List;
import javax.annotation.Nullable;
import org.lwjgl.opengl.GL11;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.entity.Entity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import fi.dy.masa.malilib.config.value.BaseOptionListConfigValue;
import fi.dy.masa.malilib.config.value.BlockSnap;
import fi.dy.masa.malilib.render.ShapeRenderUtils;
import fi.dy.masa.malilib.util.EntityUtils;
import fi.dy.masa.malilib.util.JsonUtils;
import fi.dy.masa.malilib.util.StringUtils;
import fi.dy.masa.malilib.util.data.Color4f;
import fi.dy.masa.malilib.util.position.LayerRange;
import fi.dy.masa.minihud.util.ShapeRenderType;

        Vec3d center = JsonUtils.vec3dFromJson(obj, "center");

        if (center != null)
        {
            this.setCenter(center);
        }
    }

    @Override
    public List<String> getWidgetHoverLines()
    {
        List<String> lines = super.getWidgetHoverLines();
        DecimalFormat fmt = new DecimalFormat("#.##");
        Vec3d c = this.center;

        lines.add(StringUtils.translate("minihud.hover.shape.radius", this.getRadius()));
        lines.add(StringUtils.translate("minihud.hover.shape.center", fmt.format(c.x), fmt.format(c.y), fmt.format(c.z)));
        lines.add(StringUtils.translate("minihud.hover.shape.block_snap", this.snap.getDisplayName()));

        if (this.snap != BlockSnap.NONE)
        {
            c = this.effectiveCenter;
            lines.add(StringUtils.translate("minihud.hover.shape.effective_center", fmt.format(c.x), fmt.format(c.y), fmt.format(c.z)));
        }

        return lines;
    }

    protected void renderPositions(HashSet<BlockPos> positions, EnumFacing[] sides, EnumFacing mainAxis, Color4f color, Vec3d cameraPos)
    {
        boolean full = this.renderType == ShapeRenderType.FULL_BLOCK;