public static void drawRoundedRect(MatrixStack matrixStack, float x, float y, float width, float height, Vector4f radius, Color c1, Color c2, Color c3, Color c4) {
double d = Math.PI;
matrixStack.push();
RenderSystem.enableBlend();
RenderSystem.defaultBlendFunc();
GL11.glLineWidth(0.1f);
RenderSystem.setShader(GameRenderer::getPositionColorProgram);
BufferBuilder buffer = Tessellator.getInstance().begin(VertexFormat.DrawMode.TRIANGLE_FAN, VertexFormats.POSITION_COLOR);
for (int i = 0; i < 90; i++) {
buffer.vertex(matrixStack.peek().getPositionMatrix(), (float) (x + radius.x() + Math.sin(i * d / 180) * radius.x() * -1), (float) (y + radius.x() + Math.cos(i * d / 180) * radius.x() * -1), 0).color((float) c1.getRed() / 255, (float) c1.getGreen() / 255, (float) c1.getBlue() / 255, (float) c1.getAlpha() / 255);
}
for (int i = 90; i < 180; i++) {
buffer.vertex(matrixStack.peek().getPositionMatrix(), (float) (x + radius.w() + Math.sin(i * d / 180) * radius.w() * -1), (float) (y + height - radius.w() + Math.cos(i * d / 180) * radius.w() * -1), 0).color((float) c3.getRed() / 255, (float) c3.getGreen() / 255, (float) c3.getBlue() / 255, (float) c3.getAlpha() / 255);
}
for (int i = 0; i < 90; i++) {
buffer.vertex(matrixStack.peek().getPositionMatrix(), (float) (x + width - radius.z() + Math.sin(i * d / 180) * radius.z()), (float) (y + height - radius.z() + Math.cos(i * d / 180) * radius.z()), 0).color((float) c4.getRed() / 255, (float) c4.getGreen() / 255, (float) c4.getBlue() / 255, (float) c4.getAlpha() / 255);
}
for (int i = 90; i < 180; i++) {
buffer.vertex(matrixStack.peek().getPositionMatrix(), (float) (x + width - radius.y() + Math.sin(i * d / 180) * radius.y()), (float) (y + radius.y() + Math.cos(i * d / 180) * radius.y()), 0).color((float) c2.getRed() / 255, (float) c2.getGreen() / 255, (float) c2.getBlue() / 255, (float) c2.getAlpha() / 255);
}
BufferRenderer.drawWithGlobalProgram(buffer.end());
RenderSystem.setShaderColor(1, 1, 1, 1);
RenderSystem.disableBlend();
matrixStack.pop();
}