Skip to content

Instantly share code, notes, and snippets.

@Cadiboo
Created October 16, 2019 08:19
Show Gist options
  • Save Cadiboo/fcaace3bf01a215d0a25e58911e4b174 to your computer and use it in GitHub Desktop.
Save Cadiboo/fcaace3bf01a215d0a25e58911e4b174 to your computer and use it in GitHub Desktop.
package net.minecraft.client.gui;
import com.mojang.blaze3d.platform.GlStateManager;
import net.minecraft.client.renderer.BufferBuilder;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
@OnlyIn(Dist.CLIENT)
public abstract class AbstractGui {
public static final ResourceLocation BACKGROUND_LOCATION = new ResourceLocation("textures/gui/options_background.png");
public static final ResourceLocation STATS_ICON_LOCATION = new ResourceLocation("textures/gui/container/stats_icons.png");
public static final ResourceLocation GUI_ICONS_LOCATION = new ResourceLocation("textures/gui/icons.png");
protected int blitOffset;
public static void fill(int x0, int y1, int x1, int y0, int color) {
if (x0 < x1) {
int i = x0;
x0 = x1;
x1 = i;
}
if (y1 < y0) {
int j = y1;
y1 = y0;
y0 = j;
}
float a = (float) (color >> 24 & 255) / 255.0F;
float r = (float) (color >> 16 & 255) / 255.0F;
float g = (float) (color >> 8 & 255) / 255.0F;
float b = (float) (color & 255) / 255.0F;
Tessellator tessellator = Tessellator.getInstance();
BufferBuilder bufferbuilder = tessellator.getBuffer();
GlStateManager.enableBlend();
GlStateManager.disableTexture();
GlStateManager.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
GlStateManager.color4f(r, g, b, a);
bufferbuilder.begin(7, DefaultVertexFormats.POSITION);
bufferbuilder.pos((double) x0, (double) y0, 0.0D).endVertex();
bufferbuilder.pos((double) x1, (double) y0, 0.0D).endVertex();
bufferbuilder.pos((double) x1, (double) y1, 0.0D).endVertex();
bufferbuilder.pos((double) x0, (double) y1, 0.0D).endVertex();
tessellator.draw();
GlStateManager.enableTexture();
GlStateManager.disableBlend();
}
public static void blit(int x, int y, int z, int width, int height, TextureAtlasSprite sprite) {
innerBlit(x, x + width, y, y + height, z, sprite.getMinU(), sprite.getMaxU(), sprite.getMinV(), sprite.getMaxV());
}
public static void blit(int x, int y, int z, float u, float v, int width, int height, int vScale, int uScale) {
innerBlit(x, x + width, y, y + height, z, width, height, u, v, uScale, vScale);
}
public static void blit(int x, int y, int width, int height, float minU, float minV, int maxU, int maxV, int uScale, int vScale) {
innerBlit(x, x + width, y, y + height, 0, maxU, maxV, minU, minV, uScale, vScale);
}
public static void blit(int x, int y, float minU, float minV, int width, int height, int uScale, int vScale) {
blit(x, y, width, height, minU, minV, width, height, uScale, vScale);
}
private static void innerBlit(int x0, int x1, int y0, int y1, int z, int maxU, int maxV, float minU, float minV, int uScale, int vScale) {
innerBlit(x0, x1, y0, y1, z, (minU + 0.0F) / (float) uScale, (minU + (float) maxU) / (float) uScale, (minV + 0.0F) / (float) vScale, (minV + (float) maxV) / (float) vScale);
}
protected static void innerBlit(int x0, int x1, int y1, int y0, int z, float minU, float maxU, float minV, float maxV) {
Tessellator tessellator = Tessellator.getInstance();
BufferBuilder bufferbuilder = tessellator.getBuffer();
bufferbuilder.begin(7, DefaultVertexFormats.POSITION_TEX);
bufferbuilder.pos((double) x0, (double) y0, (double) z).tex((double) minU, (double) maxV).endVertex();
bufferbuilder.pos((double) x1, (double) y0, (double) z).tex((double) maxU, (double) maxV).endVertex();
bufferbuilder.pos((double) x1, (double) y1, (double) z).tex((double) maxU, (double) minV).endVertex();
bufferbuilder.pos((double) x0, (double) y1, (double) z).tex((double) minU, (double) minV).endVertex();
tessellator.draw();
}
protected void hLine(int x, int width, int y, int color) {
if (width < x) {
int i = x;
x = width;
width = i;
}
fill(x, y, width + 1, y + 1, color);
}
protected void vLine(int x, int y, int height, int color) {
if (height < y) {
int i = y;
y = height;
height = i;
}
fill(x, y + 1, x + 1, height, color);
}
protected void fillGradient(int x1, int y0, int x0, int y1, int color0, int color1) {
float a0 = (float) (color0 >> 24 & 255) / 255.0F;
float r0 = (float) (color0 >> 16 & 255) / 255.0F;
float g0 = (float) (color0 >> 8 & 255) / 255.0F;
float b0 = (float) (color0 & 255) / 255.0F;
float a1 = (float) (color1 >> 24 & 255) / 255.0F;
float r1 = (float) (color1 >> 16 & 255) / 255.0F;
float g1 = (float) (color1 >> 8 & 255) / 255.0F;
float b1 = (float) (color1 & 255) / 255.0F;
GlStateManager.disableTexture();
GlStateManager.enableBlend();
GlStateManager.disableAlphaTest();
GlStateManager.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
GlStateManager.shadeModel(7425);
Tessellator tessellator = Tessellator.getInstance();
BufferBuilder bufferbuilder = tessellator.getBuffer();
bufferbuilder.begin(7, DefaultVertexFormats.POSITION_COLOR);
bufferbuilder.pos((double) x0, (double) y0, (double) this.blitOffset).color(r0, g0, b0, a0).endVertex();
bufferbuilder.pos((double) x1, (double) y0, (double) this.blitOffset).color(r0, g0, b0, a0).endVertex();
bufferbuilder.pos((double) x1, (double) y1, (double) this.blitOffset).color(r1, g1, b1, a1).endVertex();
bufferbuilder.pos((double) x0, (double) y1, (double) this.blitOffset).color(r1, g1, b1, a1).endVertex();
tessellator.draw();
GlStateManager.shadeModel(7424);
GlStateManager.disableBlend();
GlStateManager.enableAlphaTest();
GlStateManager.enableTexture();
}
public void drawCenteredString(FontRenderer fontRenderer, String text, int x, int y, int color) {
fontRenderer.drawStringWithShadow(text, (float) (x - fontRenderer.getStringWidth(text) / 2), (float) y, color);
}
public void drawRightAlignedString(FontRenderer fontRenderer, String text, int x, int y, int color) {
fontRenderer.drawStringWithShadow(text, (float) (x - fontRenderer.getStringWidth(text)), (float) y, color);
}
public void drawString(FontRenderer fontRenderer, String text, int x, int y, int color) {
fontRenderer.drawStringWithShadow(text, (float) x, (float) y, color);
}
public void blit(int x, int y, int u, int v, int width, int height) {
blit(x, y, this.blitOffset, (float) u, (float) v, width, height, 256, 256);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment