int bottom = top + height - 2;
// top & left
- drawRect(left, top, right, top + 1, color.getRGB());
- drawRect(left, top, left + 1, bottom, color.getRGB());
+ drawRectangle(left, top, right, top + 1, color);
+ drawRectangle(left, top, left + 1, bottom, color);
Color darker = color.darker();
// bottom left & top right
- drawRect(left, bottom - 2, left + 1, bottom, darker.getRGB());
- drawRect(right - 1, top, right, top + 1, darker.getRGB());
+ drawRectangle(left, bottom - 2, left + 1, bottom, darker);
+ drawRectangle(right - 1, top, right, top + 1, darker);
Color darkest = darker.darker();
// bottom & right
- drawRect(left + 1, bottom - 2, right, bottom, darkest.getRGB());
- drawRect(right - 1, top + 1, right, bottom, darkest.getRGB());
+ drawRectangle(left + 1, bottom - 2, right, bottom, darkest);
+ drawRectangle(right - 1, top + 1, right, bottom, darkest);
+ }
+
+ private void drawRectangle(int left, int top, int right, int bottom, Color color) {
+ drawRect(left, top, right, bottom, color.getRGB());
}
}
package com.irtimaled.bbor.client.gui;
import com.irtimaled.bbor.client.ClientProxy;
+import com.irtimaled.bbor.client.renderers.Renderer;
import com.irtimaled.bbor.common.BoundingBoxType;
import com.irtimaled.bbor.config.ConfigManager;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.IGuiEventListener;
-import net.minecraft.client.renderer.BufferBuilder;
import net.minecraft.client.renderer.OpenGlHelper;
-import net.minecraft.client.renderer.Tessellator;
-import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import org.lwjgl.opengl.GL11;
import java.util.HashSet;
}
private void drawScreen(int top, int bottom) {
- Tessellator tessellator = Tessellator.getInstance();
- BufferBuilder bufferBuilder = tessellator.getBuffer();
this.mc.getTextureManager().bindTexture(Gui.OPTIONS_BACKGROUND);
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_FOG);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
- bufferBuilder.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR);
- bufferBuilder.pos((double) 0, (double) bottom, 0.0D)
- .tex((double) ((float) 0 / 32.0F), (double) ((float) bottom / 32.0F))
- .color(32, 32, 32, 255)
- .endVertex();
- bufferBuilder.pos((double) this.width, (double) bottom, 0.0D)
- .tex((double) ((float) this.width / 32.0F), (double) ((float) bottom / 32.0F))
- .color(32, 32, 32, 255)
- .endVertex();
- bufferBuilder.pos((double) this.width, (double) top, 0.0D)
- .tex((double) ((float) this.width / 32.0F), (double) ((float) top / 32.0F))
- .color(32, 32, 32, 255)
- .endVertex();
- bufferBuilder.pos((double) 0, (double) top, 0.0D)
- .tex((double) ((float) 0 / 32.0F), (double) ((float) top / 32.0F))
- .color(32, 32, 32, 255)
- .endVertex();
- tessellator.draw();
+ Renderer.startTextured()
+ .setColor(32, 32, 32)
+ .setAlpha(255)
+ .addPoint(0, bottom, 0, 0, bottom / 32.0F)
+ .addPoint(this.width, bottom, 0, this.width / 32.0F, bottom / 32.0F)
+ .addPoint(this.width, top, 0, this.width / 32.0F, top / 32.0F)
+ .addPoint(0, top, 0, 0, top / 32.0F)
+ .render();
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glEnable(GL11.GL_BLEND);
GL11.glShadeModel(7425);
GL11.glDisable(GL11.GL_TEXTURE_2D);
- bufferBuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
- bufferBuilder.pos((double) 0, (double) (top + 4), 0.0D)
- .tex(0.0D, 1.0D)
- .color(0, 0, 0, 0)
- .endVertex();
- bufferBuilder.pos((double) this.width, (double) (top + 4), 0.0D)
- .tex(1.0D, 1.0D)
- .color(0, 0, 0, 0)
- .endVertex();
- bufferBuilder.pos((double) this.width, (double) top, 0.0D)
- .tex(1.0D, 0.0D)
- .color(0, 0, 0, 255)
- .endVertex();
- bufferBuilder.pos((double) 0, (double) top, 0.0D)
- .tex(0.0D, 0.0D)
- .color(0, 0, 0, 255)
- .endVertex();
- tessellator.draw();
-
- bufferBuilder.begin(7, DefaultVertexFormats.POSITION_TEX_COLOR);
- bufferBuilder.pos((double) 0, (double) bottom, 0.0D)
- .tex(0.0D, 1.0D)
- .color(0, 0, 0, 255)
- .endVertex();
- bufferBuilder.pos((double) this.width, (double) bottom, 0.0D)
- .tex(1.0D, 1.0D)
- .color(0, 0, 0, 255)
- .endVertex();
- bufferBuilder.pos((double) this.width, (double) (bottom - 4), 0.0D)
- .tex(1.0D, 0.0D)
- .color(0, 0, 0, 0)
- .endVertex();
- bufferBuilder.pos((double) 0, (double) (bottom - 4), 0.0D)
- .tex(0.0D, 0.0D)
- .color(0, 0, 0, 0)
- .endVertex();
- tessellator.draw();
+ Renderer.startTextured()
+ .setAlpha(0)
+ .addPoint(0, top + 4, 0, 0, 1)
+ .addPoint(this.width, top + 4, 0, 1, 1)
+ .setAlpha(255)
+ .addPoint(this.width, top, 0, 1, 0)
+ .addPoint(0, top, 0, 0, 0)
+ .render();
+
+ Renderer.startTextured()
+ .setAlpha(255)
+ .addPoint(0, bottom, 0, 0, 1)
+ .addPoint(this.width, bottom, 0, 1, 1)
+ .setAlpha(0)
+ .addPoint(this.width, bottom - 4, 0, 1, 0)
+ .addPoint(0, bottom - 4, 0, 0, 0)
+ .render();
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glShadeModel(7424);
import com.irtimaled.bbor.common.models.AbstractBoundingBox;
import com.irtimaled.bbor.config.ConfigManager;
-import net.minecraft.client.renderer.BufferBuilder;
-import net.minecraft.client.renderer.Tessellator;
-import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import org.lwjgl.opengl.GL11;
import java.awt.*;
void renderBoundingBox(T boundingBox) {
OffsetBox bb = new OffsetBox(boundingBox.getMinCoords(), boundingBox.getMaxCoords());
- renderCuboid(bb, boundingBox.getColor(), fill());
+ renderCuboid(bb, boundingBox.getColor());
}
- boolean fill() {
- return ConfigManager.fill.get();
- }
-
- void renderLine(OffsetPoint point1, OffsetPoint point2, Color color) {
- int colorR = color.getRed();
- int colorG = color.getGreen();
- int colorB = color.getBlue();
-
- Tessellator tessellator = Tessellator.getInstance();
- BufferBuilder worldRenderer = tessellator.getBuffer();
- worldRenderer.begin(GL11.GL_LINES, worldRenderer.getVertexFormat());
- worldRenderer.pos(point1.getX(), point1.getY(), point1.getZ()).color(colorR, colorG, colorB, 255).endVertex();
- worldRenderer.pos(point2.getX(), point2.getY(), point2.getZ()).color(colorR, colorG, colorB, 255).endVertex();
- tessellator.draw();
- }
- void renderCuboid(OffsetBox bb, Color color, boolean fill) {
- bb = bb.nudge();
+ void renderCuboid(OffsetBox bb, Color color) {
+ Boolean fill = ConfigManager.fill.get();
if (fill) {
renderFilledCuboid(bb, color);
}
private void renderFilledCuboid(OffsetBox bb, Color color) {
GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_FILL);
GL11.glEnable(GL11.GL_BLEND);
- renderCuboid(bb, 30, color);
+ renderCuboid(bb.nudge(), color, 30);
GL11.glDisable(GL11.GL_BLEND);
GL11.glEnable(GL11.GL_POLYGON_OFFSET_LINE);
GL11.glPolygonOffset(-1.f, -1.f);
}
- private void renderUnfilledCuboid(OffsetBox bb, Color color) {
+ void renderUnfilledCuboid(OffsetBox bb, Color color) {
GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_LINE);
- renderCuboid(bb, 255, color);
+ renderCuboid(bb.nudge(), color, 255);
}
- private void renderCuboid(OffsetBox bb, int alphaChannel, Color color) {
- int colorR = color.getRed();
- int colorG = color.getGreen();
- int colorB = color.getBlue();
-
- OffsetPoint min = bb.getMin();
- OffsetPoint max = bb.getMax();
-
- Tessellator tessellator = Tessellator.getInstance();
- BufferBuilder worldRenderer = tessellator.getBuffer();
-
- worldRenderer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR);
- worldRenderer.pos(min.getX(), min.getY(), min.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
- worldRenderer.pos(max.getX(), min.getY(), min.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
- worldRenderer.pos(max.getX(), min.getY(), max.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
- worldRenderer.pos(min.getX(), min.getY(), max.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
-
- if (min.getY() != max.getY()) {
- worldRenderer.pos(min.getX(), max.getY(), min.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
- worldRenderer.pos(max.getX(), max.getY(), min.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
- worldRenderer.pos(max.getX(), max.getY(), max.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
- worldRenderer.pos(min.getX(), max.getY(), max.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
-
- worldRenderer.pos(min.getX(), min.getY(), max.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
- worldRenderer.pos(min.getX(), max.getY(), max.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
- worldRenderer.pos(max.getX(), max.getY(), max.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
- worldRenderer.pos(max.getX(), min.getY(), max.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
-
- worldRenderer.pos(min.getX(), min.getY(), min.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
- worldRenderer.pos(min.getX(), max.getY(), min.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
- worldRenderer.pos(max.getX(), max.getY(), min.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
- worldRenderer.pos(max.getX(), min.getY(), min.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
-
- worldRenderer.pos(min.getX(), min.getY(), min.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
- worldRenderer.pos(min.getX(), min.getY(), max.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
- worldRenderer.pos(min.getX(), max.getY(), max.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
- worldRenderer.pos(min.getX(), max.getY(), min.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
-
- worldRenderer.pos(max.getX(), min.getY(), min.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
- worldRenderer.pos(max.getX(), min.getY(), max.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
- worldRenderer.pos(max.getX(), max.getY(), max.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
- worldRenderer.pos(max.getX(), max.getY(), min.getZ())
- .color(colorR, colorG, colorB, alphaChannel)
- .endVertex();
+ private void renderCuboid(OffsetBox box, Color color, int alpha) {
+ OffsetPoint min = box.getMin();
+ OffsetPoint max = box.getMax();
+
+ double minX = min.getX();
+ double minY = min.getY();
+ double minZ = min.getZ();
+
+ double maxX = max.getX();
+ double maxY = max.getY();
+ double maxZ = max.getZ();
+
+ Renderer renderer = Renderer.startQuads()
+ .setColor(color)
+ .setAlpha(alpha)
+ .addPoint(minX, minY, minZ)
+ .addPoint(maxX, minY, minZ)
+ .addPoint(maxX, minY, maxZ)
+ .addPoint(minX, minY, maxZ);
+
+ if (minY != maxY) {
+ renderer.addPoint(minX, maxY, minZ)
+ .addPoint(maxX, maxY, minZ)
+ .addPoint(maxX, maxY, maxZ)
+ .addPoint(minX, maxY, maxZ)
+
+ .addPoint(minX, minY, maxZ)
+ .addPoint(minX, maxY, maxZ)
+ .addPoint(maxX, maxY, maxZ)
+ .addPoint(maxX, minY, maxZ)
+
+ .addPoint(minX, minY, minZ)
+ .addPoint(minX, maxY, minZ)
+ .addPoint(maxX, maxY, minZ)
+ .addPoint(maxX, minY, minZ)
+
+ .addPoint(minX, minY, minZ)
+ .addPoint(minX, minY, maxZ)
+ .addPoint(minX, maxY, maxZ)
+ .addPoint(minX, maxY, minZ)
+
+ .addPoint(maxX, minY, minZ)
+ .addPoint(maxX, minY, maxZ)
+ .addPoint(maxX, maxY, maxZ)
+ .addPoint(maxX, maxY, minZ);
}
- tessellator.draw();
+ renderer.render();
+
}
}
import com.irtimaled.bbor.common.models.Colors;
import com.irtimaled.bbor.common.models.Coords;
import com.irtimaled.bbor.config.ConfigManager;
+import org.lwjgl.opengl.GL11;
import java.awt.*;
if (ConfigManager.renderMobSpawnerSpawnArea.get()) {
renderBoundingBox(boundingBox);
} else {
- renderCuboid(new OffsetBox(coords, coords), color, fill());
+ renderCuboid(new OffsetBox(coords, coords), color);
}
if (!ConfigManager.renderMobSpawnerActivationLines.get()) return;
double distance = centerPoint.getDistance(playerPos);
if (distance <= 20) {
Color color = distance > 18 ? Color.RED : distance > 16 ? Colors.DARK_ORANGE : Color.GREEN;
- renderLine(centerPoint, playerPos.offset(0, 0.1, 0), color);
+
+ GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_LINE);
+ Renderer.startLines().setColor(color).addPoint(centerPoint).addPoint(playerPos.offset(0, 0.1, 0)).render();
}
}
}
--- /dev/null
+package com.irtimaled.bbor.client.renderers;
+
+import net.minecraft.client.renderer.BufferBuilder;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.client.renderer.vertex.VertexFormat;
+import org.lwjgl.opengl.GL11;
+
+import java.awt.*;
+
+public class Renderer {
+ static Renderer startLines() {
+ return new Renderer(GL11.GL_LINES, DefaultVertexFormats.POSITION_COLOR);
+ }
+
+ static Renderer startQuads() {
+ return new Renderer(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR);
+ }
+
+ static Renderer startPoints() {
+ return new Renderer(GL11.GL_POINTS, DefaultVertexFormats.POSITION_COLOR);
+ }
+
+ public static Renderer startTextured() {
+ return new Renderer(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_COLOR);
+ }
+
+ private Tessellator tessellator;
+ private BufferBuilder bufferBuilder;
+
+ private int red;
+ private int green;
+ private int blue;
+ private int alpha;
+
+ private Renderer(int glMode, VertexFormat vertexFormat) {
+ tessellator = Tessellator.getInstance();
+ bufferBuilder = tessellator.getBuffer();
+ bufferBuilder.begin(glMode, vertexFormat);
+ }
+
+ Renderer setColor(Color color) {
+ return setColor(color.getRed(), color.getGreen(), color.getBlue())
+ .setAlpha(color.getAlpha());
+ }
+
+ public Renderer setColor(int red, int green, int blue) {
+ this.red = red;
+ this.green = green;
+ this.blue = blue;
+ return this;
+ }
+
+ public Renderer setAlpha(int alpha){
+ this.alpha = alpha;
+ return this;
+ }
+
+ Renderer addPoint(OffsetPoint point) {
+ addPoint(point.getX(), point.getY(), point.getZ());
+ return this;
+ }
+
+ Renderer addPoint(double x, double y, double z) {
+ pos(x, y, z);
+ color();
+ end();
+ return this;
+ }
+
+ public Renderer addPoint(double x, double y, double z, double u, double v) {
+ pos(x, y, z);
+ tex(u, v);
+ color();
+ end();
+ return this;
+ }
+
+ public void render() {
+ tessellator.draw();
+ }
+
+ private void pos(double x, double y, double z) {
+ bufferBuilder.pos(x, y, z);
+ }
+
+ private void tex(double u, double v) {
+ bufferBuilder.tex(u,v);
+ }
+
+ private void color() {
+ bufferBuilder.color(red, green, blue, alpha);
+ }
+
+ private void end() {
+ bufferBuilder.endVertex();
+ }
+}
public void render(BoundingBoxSlimeChunk boundingBox) {
OffsetBox bb = new OffsetBox(boundingBox.getMinCoords(), boundingBox.getMaxCoords());
Color color = boundingBox.getColor();
- renderCuboid(bb, color, fill());
+ renderCuboid(bb, color);
double maxY = PlayerCoords.getMaxY(ConfigManager.slimeChunkMaxY.get());
double dY = maxY - 39;
if (dY > 0) {
OffsetPoint min = bb.getMin().offset(0, 38, 0);
OffsetPoint max = bb.getMax().offset(0, dY, 0);
- bb = new OffsetBox(min, max);
- renderCuboid(bb, color, fill());
+ renderCuboid(new OffsetBox(min, max), color);
}
}
}
import com.irtimaled.bbor.common.models.BoundingBoxVillage;
import com.irtimaled.bbor.common.models.Coords;
import com.irtimaled.bbor.config.ConfigManager;
-import net.minecraft.client.renderer.BufferBuilder;
-import net.minecraft.client.renderer.Tessellator;
-import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import org.lwjgl.opengl.GL11;
import java.awt.*;
OffsetBox bb = new OffsetBox(offsetCenter, offsetCenter)
.grow(8, 3, 8);
- renderCuboid(bb, boundingBox.getColor(), false);
+ renderUnfilledCuboid(bb, boundingBox.getColor());
}
private void renderVillageDoors(BoundingBoxVillage boundingBox) {
OffsetPoint center = new OffsetPoint(boundingBox.getCenter())
.offset(boundingBox.getCenterOffsetX(), 0.0, boundingBox.getCenterOffsetZ());
Color color = boundingBox.getColor();
- int colorR = color.getRed();
- int colorG = color.getGreen();
- int colorB = color.getBlue();
GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_LINE);
- Tessellator tessellator = Tessellator.getInstance();
- BufferBuilder worldRenderer = tessellator.getBuffer();
-
- worldRenderer.begin(GL11.GL_LINES, worldRenderer.getVertexFormat());
+ Renderer renderer = Renderer.startLines()
+ .setColor(color);
for (Coords door : boundingBox.getDoors()) {
OffsetPoint point = new OffsetPoint(door).offset(0.5, 0, 0.5);
- worldRenderer.pos(point.getX(), point.getY(), point.getZ()).color(colorR, colorG, colorB, 255).endVertex();
- worldRenderer.pos(center.getX(), center.getY(), center.getZ()).color(colorR, colorG, colorB, 255).endVertex();
+ renderer.addPoint(point)
+ .addPoint(center);
}
- tessellator.draw();
+ renderer.render();
}
private void renderBoundingBoxVillageAsSphere(BoundingBoxVillage boundingBox) {
.offset(boundingBox.getCenterOffsetX(), 0.0, boundingBox.getCenterOffsetZ());
int radius = boundingBox.getRadius();
Color color = boundingBox.getColor();
- renderSphere(center, radius, color);
- }
+ int density = ConfigManager.villageSphereDensity.get();
+ int dotSize = ConfigManager.villageSphereDotSize.get();
- private void renderSphere(OffsetPoint center, double radius, Color color) {
GL11.glEnable(GL11.GL_POINT_SMOOTH);
- GL11.glPointSize(ConfigManager.villageSphereDotSize.get());
-
- Tessellator tessellator = Tessellator.getInstance();
- BufferBuilder worldRenderer = tessellator.getBuffer();
- worldRenderer.begin(GL11.GL_POINTS, DefaultVertexFormats.POSITION_COLOR);
- for (OffsetPoint point : buildPoints(center, radius)) {
- worldRenderer.pos(point.getX(), point.getY(), point.getZ())
- .color(color.getRed(), color.getGreen(), color.getBlue(), 255)
- .endVertex();
- }
- tessellator.draw();
+ GL11.glPointSize(dotSize);
+ Renderer renderer = Renderer.startPoints()
+ .setColor(color);
+ buildPoints(center, (double) radius, density)
+ .forEach(renderer::addPoint);
+ renderer.render();
}
- private Set<OffsetPoint> buildPoints(OffsetPoint center, double radius) {
- int density = ConfigManager.villageSphereDensity.get();
+ private Set<OffsetPoint> buildPoints(OffsetPoint center, double radius, int density) {
int segments = 24 + (density * 8);
Set<OffsetPoint> points = new HashSet<>(segments * segments);
double y = PlayerCoords.getMaxY(ConfigManager.worldSpawnMaxY.get()) + 0.001F;
- OffsetBox bb = new OffsetBox(minCoords.getX(), y, minCoords.getZ(), maxCoords.getX(), y, maxCoords.getZ());
- renderCuboid(bb, color, false);
+ renderUnfilledCuboid(new OffsetBox(minCoords.getX(), y, minCoords.getZ(), maxCoords.getX(), y, maxCoords.getZ()), color);
}
}