Skip to content

Instantly share code, notes, and snippets.

@zskamljic
Last active December 27, 2022 19:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zskamljic/9ece98aa1cbc48546012b848962c1932 to your computer and use it in GitHub Desktop.
Save zskamljic/9ece98aa1cbc48546012b848962c1932 to your computer and use it in GitHub Desktop.
Guess ghost rendering
@Mod.EventBusSubscriber
public static class EventHandler {
@SubscribeEvent
public static void renderBlockPreview(RenderHighlightEvent.Block event) {
var target = event.getTarget();
var cameraPosition = event.getCamera().getPosition();
var previewPosition = target.getBlockPos().relative(target.getDirection());
var player = Minecraft.getInstance().player;
var itemStack = player.getMainHandItem();
if (!(itemStack.getItem() instanceof BlockItem block)) return;
var poseStack = event.getPoseStack();
poseStack.pushPose();
poseStack.translate(previewPosition.getX() - cameraPosition.x(), previewPosition.getY() - cameraPosition.y(), previewPosition.getZ() - cameraPosition.z());
var renderer = Minecraft.getInstance().getBlockRenderer();
var buffer = event.getMultiBufferSource()
.getBuffer(RenderType.translucent());
buffer.color(1, 1, 1, 0.1f);
var proxyBuffer = new VertexConsumer() {
@Override
public void putBulkData(PoseStack.Pose pPoseEntry, BakedQuad pQuad, float[] pColorMuls, float pRed, float pGreen, float pBlue, int[] pCombinedLights, int pCombinedOverlay, boolean pMulColor) {
putBulkData(pPoseEntry, pQuad, pColorMuls, pRed, pGreen, pBlue, 0.5f, pCombinedLights, pCombinedOverlay, pMulColor);
}
@Override
public VertexConsumer vertex(double pX, double pY, double pZ) {
return buffer.vertex(pX, pY, pZ);
}
@Override
public VertexConsumer color(int pRed, int pGreen, int pBlue, int pAlpha) {
return buffer.color(pRed, pGreen, pBlue, pAlpha);
}
@Override
public VertexConsumer uv(float pU, float pV) {
return buffer.uv(pU, pV);
}
@Override
public VertexConsumer overlayCoords(int pU, int pV) {
return buffer.overlayCoords(pU, pV);
}
@Override
public VertexConsumer uv2(int pU, int pV) {
return buffer.uv2(pU, pV);
}
@Override
public VertexConsumer normal(float pX, float pY, float pZ) {
return buffer.normal(pX, pY, pZ);
}
@Override
public void endVertex() {
buffer.endVertex();
}
@Override
public void defaultColor(int pDefaultR, int pDefaultG, int pDefaultB, int pDefaultA) {
buffer.defaultColor(pDefaultR, pDefaultG, pDefaultB, pDefaultA);
}
@Override
public void unsetDefaultColor() {
buffer.unsetDefaultColor();
}
};
renderer.renderBatched(block.getBlock().defaultBlockState(),
previewPosition,
player.getLevel(),
event.getPoseStack(),
proxyBuffer,
true,
player.getLevel().getRandom()
);
poseStack.popPose();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment