Skip to content

Commit 0ce2b80

Browse files
committed
Rendering updates - basic semitransparent face for projection field
1 parent 901b2f8 commit 0ce2b80

File tree

4 files changed

+63
-64
lines changed

4 files changed

+63
-64
lines changed

src/main/java/com/robotgryphon/compactcrafting/CompactCrafting.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,7 @@ public CompactCrafting() {
4747
MinecraftForge.EVENT_BUS.register(this);
4848

4949
MinecraftForge.EVENT_BUS.register(RenderTickCounter.class);
50-
51-
modBus.addListener(ClientSetup::init);
52-
modBus.addListener(ClientSetup::registerSpecialModels);
50+
MinecraftForge.EVENT_BUS.register(ClientSetup.class);
5351

5452

5553
Registration.init();

src/main/java/com/robotgryphon/compactcrafting/client/ClientSetup.java

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,32 +4,24 @@
44
import com.robotgryphon.compactcrafting.client.render.FieldProjectorRenderer;
55
import com.robotgryphon.compactcrafting.core.Constants;
66
import com.robotgryphon.compactcrafting.core.Registration;
7-
import net.minecraft.util.ResourceLocation;
87
import net.minecraftforge.api.distmarker.Dist;
9-
import net.minecraftforge.client.event.ClientChatReceivedEvent;
108
import net.minecraftforge.client.event.ModelRegistryEvent;
119
import net.minecraftforge.client.model.ModelLoader;
10+
import net.minecraftforge.eventbus.api.SubscribeEvent;
1211
import net.minecraftforge.fml.client.registry.ClientRegistry;
13-
import net.minecraftforge.fml.client.registry.RenderingRegistry;
1412
import net.minecraftforge.fml.common.Mod;
1513
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
1614

1715
@Mod.EventBusSubscriber(modid = CompactCrafting.MOD_ID, value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD)
1816
public class ClientSetup {
1917

18+
@SubscribeEvent
2019
public static void init(final FMLClientSetupEvent event) {
21-
//ScreenManager.registerFactory(Registration.FIRSTBLOCK_CONTAINER.get(), FirstBlockScreen::new);
22-
// ModelLoaderRegistry.registerLoader(new ResourceLocation(MyTutorial.MODID, "fancyloader"), new FancyModelLoader());
23-
// MagicRenderer.register();
24-
25-
// RenderTypeLookup.setRenderLayer(Registration.COMPLEX_MULTIPART.get(), RenderType.getTranslucent());
26-
// RenderTypeLookup.setRenderLayer(Registration.FANCYBLOCK.get(), (RenderType) -> true);
27-
2820
ClientRegistry.bindTileEntityRenderer(Registration.FIELD_PROJECTOR_TILE.get(), FieldProjectorRenderer::new);
2921
}
3022

23+
@SubscribeEvent
3124
public static void registerSpecialModels(final ModelRegistryEvent registryEvent) {
3225
ModelLoader.addSpecialModel(Constants.FIELD_DISH_RL);
3326
}
34-
3527
}

src/main/java/com/robotgryphon/compactcrafting/client/render/FieldProjectorRenderer.java

Lines changed: 22 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,22 @@
77
import com.robotgryphon.compactcrafting.core.Constants;
88
import net.minecraft.block.BlockState;
99
import net.minecraft.client.Minecraft;
10-
import net.minecraft.client.renderer.Atlases;
11-
import net.minecraft.client.renderer.BlockRendererDispatcher;
12-
import net.minecraft.client.renderer.IRenderTypeBuffer;
13-
import net.minecraft.client.renderer.RenderType;
10+
import net.minecraft.client.renderer.*;
1411
import net.minecraft.client.renderer.model.IBakedModel;
1512
import net.minecraft.client.renderer.model.ModelManager;
1613
import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
1714
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
1815
import net.minecraft.util.Direction;
1916
import net.minecraft.util.math.AxisAlignedBB;
20-
import net.minecraft.util.math.vector.Matrix4f;
2117
import net.minecraft.util.math.vector.Vector3d;
2218
import net.minecraft.util.math.vector.Vector3f;
2319
import net.minecraftforge.client.model.ModelDataManager;
2420
import net.minecraftforge.client.model.data.IModelData;
2521

2622
import java.awt.*;
2723

24+
import static net.minecraft.client.renderer.RenderType.makeType;
25+
2826
public class FieldProjectorRenderer extends TileEntityRenderer<FieldProjectorTile> {
2927

3028
enum RotationSpeed {
@@ -45,16 +43,8 @@ public int getSpeed() {
4543

4644
private IBakedModel bakedModelCached;
4745

48-
// RenderType t = RenderType.makeType("my_type", DefaultVertexFormats.POSITION_COLOR, 7, 256,
49-
// false, true, RenderType.State.getBuilder()
50-
// .transparency(TRANSLUCENT_TRANSPARENCY)
51-
// .writeMask(COLOR_DEPTH_WRITE)
52-
// .build(false));
53-
5446
public FieldProjectorRenderer(TileEntityRendererDispatcher rendererDispatcherIn) {
5547
super(rendererDispatcherIn);
56-
57-
5848
}
5949

6050
@Override
@@ -79,21 +69,11 @@ private IBakedModel getModel() {
7969
return bakedModelCached;
8070
}
8171

82-
/**
83-
* Draw a coloured line from a starting vertex to an end vertex
84-
*
85-
* @param matrixPos the current transformation matrix
86-
* @param renderBuffer the vertex builder used to draw the line
87-
* @param startVertex
88-
* @param endVertex
89-
*/
90-
private static void drawLine(Matrix4f matrixPos, IVertexBuilder renderBuffer, Color color,
91-
Vector3d startVertex, Vector3d endVertex) {
92-
renderBuffer.pos(matrixPos, (float) startVertex.x, (float) startVertex.y, (float) startVertex.z)
93-
.color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()) // there is also a version for floats (0 -> 1)
94-
.endVertex();
95-
renderBuffer.pos(matrixPos, (float) endVertex.getX(), (float) endVertex.getY(), (float) endVertex.getZ())
96-
.color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()) // there is also a version for floats (0 -> 1)
72+
private void addColoredVertex(IVertexBuilder renderer, MatrixStack stack, Color color, Vector3f position) {
73+
renderer.pos(stack.getLast().getMatrix(), position.getX(), position.getY(), position.getZ())
74+
.color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha())
75+
.lightmap(0, 240)
76+
.normal(1, 0, 0)
9777
.endVertex();
9878
}
9979

@@ -138,33 +118,25 @@ private void renderDish(FieldProjectorTile te, MatrixStack mx, IRenderTypeBuffer
138118
private void renderFaces(MatrixStack mx, IRenderTypeBuffer buffer, AxisAlignedBB cube, double extraLength) {
139119

140120
try {
141-
IVertexBuilder lines = buffer.getBuffer(RenderType.getLines());
142-
143-
//region color and vertex positions
144-
int color = 0xFF6A00;
145-
float cR = (color >> 16 & 255) / 255.0f;
146-
float cG = (color >> 8 & 255) / 255.0f;
147-
float cB = (color & 255) / 255.0f;
148-
float cA = 0.15f;
149-
150-
double x1 = cube.minX;
151-
double x2 = cube.maxX;
152-
double y1 = cube.minY;
153-
double y2 = cube.maxY;
154-
double z1 = cube.minZ;
155-
double z2 = cube.maxZ;
156-
double radius = (cube.maxY - cube.minY) / 2;
157-
158-
double y4 = cube.maxY - radius + 0.3d;
159-
//endregion
121+
IVertexBuilder builder = buffer.getBuffer(RenderTypesExtensions.PROJECTION_FIELD_RENDERTYPE);
122+
123+
int color = 0x88FF6A00;
124+
Color fieldColor = new Color(color, true);
160125

161126
// Draw the faces
162127
Vector3d start = new Vector3d(cube.minX, cube.minY, cube.minZ);
163128
Vector3d end = new Vector3d(cube.maxX, cube.maxY, cube.maxZ);
129+
130+
addColoredVertex(builder, mx, fieldColor, new Vector3f(0, 0, .5f));
131+
addColoredVertex(builder, mx, fieldColor, new Vector3f(1, 0, .5f));
132+
addColoredVertex(builder, mx, fieldColor, new Vector3f(1, 1, .5f));
133+
addColoredVertex(builder, mx, fieldColor, new Vector3f(0, 1, .5f));
164134

165-
drawLine(mx.getLast().getMatrix(), lines, Color.orange, start, end);
135+
addColoredVertex(builder, mx, fieldColor, new Vector3f(0, 1, .5f));
136+
addColoredVertex(builder, mx, fieldColor, new Vector3f(1, 1, .5f));
137+
addColoredVertex(builder, mx, fieldColor, new Vector3f(1, 0, .5f));
138+
addColoredVertex(builder, mx, fieldColor, new Vector3f(0, 0, .5f));
166139

167-
// lines.pos(x1, y2, z1).color(cR, cG, cB, cA).endVertex();
168140
// lines.pos(x2, y2, z1).color(cR, cG, cB, cA).endVertex();
169141
// lines.pos(x2, y1, z1).color(cR, cG, cB, cA).endVertex();
170142
// lines.pos(x1, y1, z2).color(cR, cG, cB, cA).endVertex();
@@ -178,7 +150,7 @@ private void renderFaces(MatrixStack mx, IRenderTypeBuffer buffer, AxisAlignedBB
178150
// lines.pos(x1, y1, z2).color(cR, cG, cB, cA).endVertex();
179151
// lines.pos(x1, y2, z1).color(cR, cG, cB, cA).endVertex();
180152
// lines.pos(x1, y2, z2).color(cR, cG, cB, cA).endVertex();
181-
// lines.pos(x2, y2, z2).color(cR, cG, cB, cA).endVertex();
153+
// lines.pos(x2, y2, z2).color(cR, cG, cB, cA).endVertex();w
182154
// lines.pos(x2, y2, z1).color(cR, cG, cB, cA).endVertex();
183155
//
184156
// lines.pos(x1, y1, z1).color(cR, cG, cB, cA).endVertex();
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.robotgryphon.compactcrafting.client.render;
2+
3+
import com.mojang.blaze3d.platform.GlStateManager;
4+
import com.mojang.blaze3d.systems.RenderSystem;
5+
import net.minecraft.client.renderer.RenderState;
6+
import net.minecraft.client.renderer.RenderType;
7+
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
8+
import net.minecraft.client.renderer.vertex.VertexFormat;
9+
import org.lwjgl.opengl.GL11;
10+
11+
public class RenderTypesExtensions extends RenderType {
12+
// Dummy
13+
public RenderTypesExtensions(String name, VertexFormat format, int p_i225992_3_, int p_i225992_4_, boolean p_i225992_5_, boolean p_i225992_6_, Runnable runnablePre, Runnable runnablePost) {
14+
super(name, format, p_i225992_3_, p_i225992_4_, p_i225992_5_, p_i225992_6_, runnablePre, runnablePost);
15+
}
16+
17+
/**
18+
* Sets up a transparency state based on original GL calls from Compact Machines. (1.12.x)
19+
*/
20+
protected static final RenderState.TransparencyState PROJECTION_TRANSPARENCY = new RenderState.TransparencyState("projection_field_transparency", () -> {
21+
RenderSystem.enableBlend();
22+
RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
23+
}, () -> {
24+
RenderSystem.disableBlend();
25+
RenderSystem.defaultBlendFunc();
26+
});
27+
28+
public static final RenderType PROJECTION_FIELD_RENDERTYPE = makeType("projection_field",
29+
DefaultVertexFormats.POSITION_COLOR, GL11.GL_QUADS, 256,
30+
RenderType.State.getBuilder()
31+
.transparency(PROJECTION_TRANSPARENCY)
32+
.target(RenderState.MAIN_TARGET)
33+
.cull(RenderState.CULL_ENABLED)
34+
.writeMask(COLOR_WRITE)
35+
.depthTest(DepthTestState.DEPTH_LEQUAL) // Default, but let's make sure it stays that way
36+
.build(false));
37+
}

0 commit comments

Comments
 (0)