Skip to content

Commit 80697c9

Browse files
committed
Previous WIP code
1 parent 2ddcd3b commit 80697c9

File tree

6 files changed

+96
-71
lines changed

6 files changed

+96
-71
lines changed

src/main/java/dev/compactmods/crafting/client/ClientEventHandler.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
package dev.compactmods.crafting.client;
22

3+
import javax.annotation.Nonnull;
34
import com.mojang.blaze3d.vertex.PoseStack;
45
import dev.compactmods.crafting.CompactCrafting;
56
import dev.compactmods.crafting.api.EnumCraftingState;
67
import dev.compactmods.crafting.api.field.IActiveWorldFields;
78
import dev.compactmods.crafting.api.field.IMiniaturizationField;
89
import dev.compactmods.crafting.api.projector.IProjectorRenderInfo;
10+
import dev.compactmods.crafting.api.recipe.IMiniaturizationRecipe;
911
import dev.compactmods.crafting.core.CCCapabilities;
1012
import dev.compactmods.crafting.field.render.CraftingPreviewRenderer;
1113
import net.minecraft.client.Camera;
1214
import net.minecraft.client.Minecraft;
1315
import net.minecraft.client.multiplayer.ClientLevel;
1416
import net.minecraft.client.player.LocalPlayer;
17+
import net.minecraft.client.renderer.LightTexture;
1518
import net.minecraft.client.renderer.MultiBufferSource;
1619
import net.minecraft.client.renderer.texture.OverlayTexture;
1720
import net.minecraft.core.BlockPos;
@@ -50,9 +53,12 @@ public static void onWorldRender(final RenderLevelLastEvent event) {
5053
if (mc.level == null)
5154
return;
5255

53-
mc.player.getCapability(CCCapabilities.TEMP_PROJECTOR_RENDERING)
54-
.ifPresent(render -> render.render(event.getPoseStack()));
56+
doProjectorRender(event, mc);
57+
doFieldPreviewRender(event, mc);
58+
}
5559

60+
@Nonnull
61+
private static void doFieldPreviewRender(RenderLevelLastEvent event, Minecraft mc) {
5662
final Camera mainCamera = mc.gameRenderer.getMainCamera();
5763
final HitResult hitResult = mc.hitResult;
5864

@@ -79,15 +85,22 @@ public static void onWorldRender(final RenderLevelLastEvent event) {
7985
(double) center.getZ()
8086
);
8187

88+
final IMiniaturizationRecipe rec = field.getCurrentRecipe().get();
89+
final int prog = field.getProgress();
90+
8291
CraftingPreviewRenderer.render(
83-
field.getCurrentRecipe().get(), field.getProgress(), stack,
84-
buffers, 15728880, OverlayTexture.NO_OVERLAY
92+
rec, prog, stack,
93+
buffers, LightTexture.FULL_SKY, OverlayTexture.NO_OVERLAY
8594
);
8695

8796
stack.popPose();
8897
});
8998
});
90-
9199
buffers.endBatch();
92100
}
101+
102+
private static void doProjectorRender(RenderLevelLastEvent event, Minecraft mc) {
103+
mc.player.getCapability(CCCapabilities.TEMP_PROJECTOR_RENDERING)
104+
.ifPresent(render -> render.render(event.getPoseStack()));
105+
}
93106
}

src/main/java/dev/compactmods/crafting/client/render/CCRenderTypes.java

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,45 @@
11
package dev.compactmods.crafting.client.render;
22

3-
import java.util.OptionalDouble;
3+
import com.mojang.blaze3d.platform.GlStateManager;
4+
import com.mojang.blaze3d.systems.RenderSystem;
45
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
56
import com.mojang.blaze3d.vertex.VertexFormat;
67
import net.minecraft.client.renderer.RenderStateShard;
78
import net.minecraft.client.renderer.RenderType;
89

910
public class CCRenderTypes extends RenderType {
10-
11-
public static final RenderType LINE_STRIP = create("line_strip",
12-
DefaultVertexFormat.POSITION_COLOR_NORMAL, VertexFormat.Mode.LINE_STRIP, 256, false, false,
13-
RenderType.CompositeState.builder().setShaderState(RENDERTYPE_LINES_SHADER)
14-
.setLineState(new RenderStateShard.LineStateShard(OptionalDouble.of(4f)))
15-
.setLayeringState(VIEW_OFFSET_Z_LAYERING)
16-
.setTransparencyState(TRANSLUCENT_TRANSPARENCY)
17-
.setOutputState(ITEM_ENTITY_TARGET)
18-
.setWriteMaskState(COLOR_DEPTH_WRITE)
19-
.setCullState(NO_CULL)
20-
.createCompositeState(false));
11+
protected static final RenderStateShard.TransparencyStateShard TRANSLUCENT_TRANSPARENCY = new RenderStateShard.TransparencyStateShard("cc_translucent", () -> {
12+
RenderSystem.enableBlend();
13+
RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
14+
}, () -> {
15+
RenderSystem.disableBlend();
16+
RenderSystem.defaultBlendFunc();
17+
});
2118

2219
public static final RenderType FIELD_RENDER_TYPE = create("projection_field",
23-
DefaultVertexFormat.POSITION_COLOR, VertexFormat.Mode.QUADS, 262144, false, true,
20+
DefaultVertexFormat.POSITION_COLOR, VertexFormat.Mode.QUADS, RenderType.MEDIUM_BUFFER_SIZE, false, true,
2421
RenderType.CompositeState.builder()
25-
.setLineState(new LineStateShard(OptionalDouble.of(4f)))
26-
.setLightmapState(LIGHTMAP)
27-
.setShaderState(ShaderStateShard.POSITION_COLOR_SHADER)
28-
.setTextureState(RenderStateShard.NO_TEXTURE)
29-
.setTransparencyState(TRANSLUCENT_TRANSPARENCY)
30-
.setOutputState(TRANSLUCENT_TARGET)
31-
.setCullState(RenderStateShard.NO_CULL)
22+
.setTransparencyState(new TransparencyStateShard("transparent", () -> {
23+
RenderSystem.enableBlend();
24+
RenderSystem.enableDepthTest();
25+
RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
26+
}, () -> {
27+
RenderSystem.disableDepthTest();
28+
RenderSystem.disableBlend();
29+
RenderSystem.defaultBlendFunc();
30+
}))
31+
.setTextureState(NO_TEXTURE)
32+
.setWriteMaskState(RenderStateShard.COLOR_DEPTH_WRITE)
33+
.setOutputState(RenderType.OUTLINE_TARGET)
3234
.createCompositeState(true));
3335

36+
// .setShaderState(RenderStateShard.RENDERTYPE_TRANSLUCENT_SHADER)
37+
// .setWriteMaskState(COLOR_DEPTH_WRITE)
38+
// .setTransparencyState(RenderStateShard.TRANSLUCENT_TRANSPARENCY)
39+
// .setOutputState(OutputStateShard.TRANSLUCENT_TARGET)
40+
// .setCullState(RenderStateShard.NO_CULL)
41+
// .createCompositeState(false));
42+
3443
public static final RenderType PHANTOM = create("phantom", DefaultVertexFormat.BLOCK, VertexFormat.Mode.QUADS, 2097152, true, false, RenderType.CompositeState.builder()
3544
.setShaderState(ShaderStateShard.BLOCK_SHADER)
3645
.setLightmapState(RenderStateShard.LIGHTMAP)

src/main/java/dev/compactmods/crafting/client/render/ClientProjectorRenderInfo.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,17 +58,17 @@ public void render(PoseStack matrixStack) {
5858
Vec3 projectedView = mainCamera.getPosition();
5959
matrixStack.translate(-projectedView.x, -projectedView.y, -projectedView.z);
6060

61-
remainingProjectors.forEach((pos, dir) -> {
61+
for(BlockPos pos : remainingProjectors.keySet()) {
6262
matrixStack.pushPose();
6363
matrixStack.translate(
6464
(double) pos.getX() + 0.05,
6565
(double) pos.getY() + 0.05,
6666
(double) pos.getZ() + 0.05
6767
);
6868

69-
matrixStack.scale(0.9f, 0.9f, 0.9f);
69+
matrixStack.scale(.9f, .9f, .9f);
7070

71-
GhostRenderer.renderTransparentBlock(baseState.setValue(FieldProjectorBlock.FACING, dir), pos, matrixStack, buffers, renderTime);
71+
GhostRenderer.renderTransparentBlock(baseState.setValue(FieldProjectorBlock.FACING, remainingProjectors.get(pos)), pos, matrixStack, buffers, renderTime);
7272
matrixStack.popPose();
7373

7474
for (int y = -1; y > -10; y--) {
@@ -84,10 +84,10 @@ public void render(PoseStack matrixStack) {
8484
);
8585

8686
matrixStack.scale(0.6f, 0.6f, 0.6f);
87-
GhostRenderer.renderTransparentBlock(Blocks.BLACK_STAINED_GLASS.defaultBlockState(), null, matrixStack, buffers, renderTime);
87+
GhostRenderer.renderTransparentBlock(Blocks.BLACK_STAINED_GLASS.defaultBlockState(), realPos, matrixStack, buffers, renderTime);
8888
matrixStack.popPose();
8989
}
90-
});
90+
}
9191

9292
matrixStack.popPose();
9393
buffers.endBatch();

src/main/java/dev/compactmods/crafting/client/render/GhostRenderer.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,19 @@
44
import java.util.Random;
55
import com.mojang.blaze3d.vertex.PoseStack;
66
import com.mojang.blaze3d.vertex.VertexConsumer;
7-
import net.minecraft.world.level.block.state.BlockState;
87
import net.minecraft.client.Minecraft;
9-
import net.minecraft.client.renderer.MultiBufferSource;
10-
import net.minecraft.client.renderer.LightTexture;
118
import net.minecraft.client.color.block.BlockColors;
9+
import net.minecraft.client.renderer.LightTexture;
10+
import net.minecraft.client.renderer.MultiBufferSource;
11+
import net.minecraft.client.renderer.block.BlockRenderDispatcher;
1212
import net.minecraft.client.renderer.block.model.BakedQuad;
13-
import net.minecraft.client.resources.model.BakedModel;
1413
import net.minecraft.client.renderer.texture.OverlayTexture;
15-
import net.minecraft.util.FastColor;
16-
import net.minecraft.core.Direction;
14+
import net.minecraft.client.resources.model.BakedModel;
1715
import net.minecraft.core.BlockPos;
16+
import net.minecraft.core.Direction;
17+
import net.minecraft.util.FastColor;
1818
import net.minecraft.util.Mth;
19+
import net.minecraft.world.level.block.state.BlockState;
1920
import net.minecraftforge.client.model.data.EmptyModelData;
2021

2122
public class GhostRenderer {
@@ -31,7 +32,8 @@ public static void renderTransparentBlock(BlockState state, @Nullable BlockPos p
3132
final float alpha = ticksLeft >= 100 ? 0.9f : 0.9f * Math.max(ticksLeft / 100f, .1f);
3233

3334
VertexConsumer builder = buffer.getBuffer(CCRenderTypes.PHANTOM);
34-
BakedModel model = mc.getBlockRenderer().getBlockModel(state);
35+
final BlockRenderDispatcher dispatcher = mc.getBlockRenderer();
36+
BakedModel model = dispatcher.getBlockModel(state);
3537
if (model != mc.getModelManager().getMissingModel()) {
3638
for(Direction dir : Direction.values())
3739
model.getQuads(state, dir, new Random(42L), EmptyModelData.INSTANCE)
@@ -56,6 +58,6 @@ private static void addQuad(BlockState state, @Nullable BlockPos pos, PoseStack
5658
green,
5759
blue,
5860
trueAlpha,
59-
LightTexture.pack(15, 15), OverlayTexture.NO_OVERLAY);
61+
LightTexture.FULL_SKY, OverlayTexture.NO_OVERLAY);
6062
}
6163
}

src/main/java/dev/compactmods/crafting/field/render/CraftingPreviewRenderer.java

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,20 @@
22

33
import java.util.Optional;
44
import com.mojang.blaze3d.vertex.PoseStack;
5-
import dev.compactmods.crafting.util.BlockSpaceUtil;
6-
import dev.compactmods.crafting.util.MathUtil;
5+
import com.mojang.math.Vector3f;
6+
import dev.compactmods.crafting.api.components.IRecipeBlockComponent;
77
import dev.compactmods.crafting.api.recipe.IMiniaturizationRecipe;
88
import dev.compactmods.crafting.api.recipe.layers.IRecipeLayer;
9-
import net.minecraft.world.level.block.state.BlockState;
9+
import dev.compactmods.crafting.util.BlockSpaceUtil;
10+
import dev.compactmods.crafting.util.MathUtil;
1011
import net.minecraft.client.Minecraft;
11-
import net.minecraft.client.renderer.block.BlockRenderDispatcher;
12+
import net.minecraft.client.renderer.LightTexture;
1213
import net.minecraft.client.renderer.MultiBufferSource;
13-
import net.minecraft.world.phys.AABB;
14+
import net.minecraft.client.renderer.block.BlockRenderDispatcher;
15+
import net.minecraft.client.renderer.texture.OverlayTexture;
1416
import net.minecraft.core.BlockPos;
15-
import com.mojang.math.Vector3f;
17+
import net.minecraft.world.level.block.state.BlockState;
18+
import net.minecraft.world.phys.AABB;
1619
import net.minecraftforge.client.model.data.EmptyModelData;
1720

1821
public class CraftingPreviewRenderer {
@@ -42,7 +45,6 @@ public static void render(IMiniaturizationRecipe recipe, double progress, PoseSt
4245
AABB dimensions = recipe.getDimensions();
4346
stack.translate(-(dimensions.getXsize() / 2), -(dimensions.getYsize() / 2), -(dimensions.getZsize() / 2));
4447

45-
4648
double ySize = recipe.getDimensions().getYsize();
4749

4850
for (int y = 0; y < ySize; y++) {
@@ -60,11 +62,7 @@ public static void render(IMiniaturizationRecipe recipe, double progress, PoseSt
6062
BlockPos zeroedPos = filledPos.below(finalY);
6163
l.getComponentForPosition(zeroedPos)
6264
.flatMap(recipe.getComponents()::getBlock)
63-
.ifPresent(comp -> {
64-
// TODO - Render switching
65-
BlockState state1 = comp.getRenderState();
66-
blockRenderer.renderSingleBlock(state1, stack, buffers, light, overlay, EmptyModelData.INSTANCE);
67-
});
65+
.ifPresent(comp -> renderSingleBlock(stack, buffers, blockRenderer, comp));
6866

6967
stack.popPose();
7068
});
@@ -80,4 +78,12 @@ public static void render(IMiniaturizationRecipe recipe, double progress, PoseSt
8078

8179
stack.popPose();
8280
}
81+
82+
private static void renderSingleBlock(PoseStack stack, MultiBufferSource buffers, BlockRenderDispatcher blockRenderer, IRecipeBlockComponent comp) {
83+
// TODO - Render switching
84+
BlockState state1 = comp.getRenderState();
85+
final Minecraft mc = Minecraft.getInstance();
86+
87+
blockRenderer.renderSingleBlock(state1, stack, buffers, LightTexture.FULL_SKY, OverlayTexture.NO_OVERLAY, EmptyModelData.INSTANCE);
88+
}
8389
}

src/main/java/dev/compactmods/crafting/projector/render/FieldProjectorRenderer.java

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ private void drawFieldFace(FieldProjectorEntity tile, PoseStack mx, MultiBufferS
191191
mx.popPose();
192192
}
193193

194-
VertexConsumer builder = buffers.getBuffer(RenderType.lightning());
194+
VertexConsumer builder = buffers.getBuffer(RenderType.lines());
195195

196196
double expansion = 0.005;
197197
AABB slightlyBiggerBecauseFoxes = fieldBounds
@@ -203,26 +203,21 @@ private void drawFieldFace(FieldProjectorEntity tile, PoseStack mx, MultiBufferS
203203
// North and South projectors render the top and bottom faces
204204
int color = getProjectionColor(EnumProjectorColorType.FIELD);
205205

206-
if(projectorDir == Direction.NORTH) {
207-
for(Direction dir : Direction.values())
208-
CubeRenderHelper.drawCubeFace(builder, mx, slightlyBiggerBecauseFoxes, color, dir);
209-
}
206+
switch (projectorDir) {
207+
case NORTH:
208+
CubeRenderHelper.drawCubeFace(builder, mx, slightlyBiggerBecauseFoxes, color, Direction.UP);
209+
CubeRenderHelper.drawCubeFace(builder, mx, slightlyBiggerBecauseFoxes, color, projectorDir);
210+
break;
210211

211-
// switch (projectorDir) {
212-
// case NORTH:
213-
// CubeRenderHelper.drawCubeFace(builder, mx, slightlyBiggerBecauseFoxes, color, Direction.UP);
214-
// CubeRenderHelper.drawCubeFace(builder, mx, slightlyBiggerBecauseFoxes, color, projectorDir);
215-
// break;
216-
//
217-
// case SOUTH:
218-
// CubeRenderHelper.drawCubeFace(builder, mx, slightlyBiggerBecauseFoxes, color, Direction.DOWN);
219-
// CubeRenderHelper.drawCubeFace(builder, mx, slightlyBiggerBecauseFoxes, color, projectorDir);
220-
// break;
221-
//
222-
// default:
223-
// CubeRenderHelper.drawCubeFace(builder, mx, slightlyBiggerBecauseFoxes, color, projectorDir);
224-
// break;
225-
// }
212+
case SOUTH:
213+
CubeRenderHelper.drawCubeFace(builder, mx, slightlyBiggerBecauseFoxes, color, Direction.DOWN);
214+
CubeRenderHelper.drawCubeFace(builder, mx, slightlyBiggerBecauseFoxes, color, projectorDir);
215+
break;
216+
217+
default:
218+
CubeRenderHelper.drawCubeFace(builder, mx, slightlyBiggerBecauseFoxes, color, projectorDir);
219+
break;
220+
}
226221
}
227222

228223
/**
@@ -232,7 +227,7 @@ private void drawFieldFace(FieldProjectorEntity tile, PoseStack mx, MultiBufferS
232227
private void drawProjectorArcs(FieldProjectorEntity tile, PoseStack mx, MultiBufferSource buffers, AABB fieldBounds, double gameTime) {
233228

234229
try {
235-
VertexConsumer builder = buffers.getBuffer(RenderType.lightning());
230+
VertexConsumer builder = buffers.getBuffer(RenderType.lines());
236231

237232
Direction facing = tile.getProjectorSide();
238233

0 commit comments

Comments
 (0)