Skip to content

Instantly share code, notes, and snippets.

@marchermans
Created September 25, 2020 15:40
Show Gist options
  • Save marchermans/3d633eaf5315d02b4239adc31bf7dd9d to your computer and use it in GitHub Desktop.
Save marchermans/3d633eaf5315d02b4239adc31bf7dd9d to your computer and use it in GitHub Desktop.
package mod.chiselsandbits.render.chiseledblock.tesr;
import com.mojang.blaze3d.matrix.MatrixStack;
import com.mojang.blaze3d.vertex.IVertexBuilder;
import mod.chiselsandbits.chiseledblock.TileEntityBlockChiseled;
import mod.chiselsandbits.chiseledblock.TileEntityBlockChiseledTESR;
import mod.chiselsandbits.chiseledblock.data.VoxelNeighborRenderTracker;
import mod.chiselsandbits.render.chiseledblock.ChiselRenderType;
import mod.chiselsandbits.render.chiseledblock.ChiseledBlockBaked;
import mod.chiselsandbits.render.chiseledblock.ChiseledBlockSmartModel;
import mod.chiselsandbits.utils.ChuckRenderCacheWrapper;
import net.minecraft.block.BlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.BlockRendererDispatcher;
import net.minecraft.client.renderer.IRenderTypeBuffer;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.RenderTypeLookup;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import java.util.EnumSet;
import java.util.Objects;
public class ChiseledBlockTESR extends TileEntityRenderer<TileEntityBlockChiseled>
{
private final BlockRendererDispatcher blockRenderer = Minecraft.getInstance().getBlockRendererDispatcher();
public ChiseledBlockTESR(final TileEntityRendererDispatcher rendererDispatcherIn)
{
super(rendererDispatcherIn);
}
@Override
public void render(
final TileEntityBlockChiseled tileEntityIn,
final float partialTicks,
final MatrixStack matrixStackIn,
final IRenderTypeBuffer bufferIn,
final int combinedLightIn,
final int combinedOverlayIn)
{
renderModel(
tileEntityIn,
RenderType.getSolid(),
bufferIn,
matrixStackIn,
combinedOverlayIn
);
}
private void renderModel(
final TileEntityBlockChiseled tx,
final RenderType renderType,
final IRenderTypeBuffer renderTypeBuffer,
final MatrixStack matrixStack,
final int combinedOverlayIn
) {
if (!tx.isRemoved() )
{
final BlockState estate = Objects.requireNonNull(tx.getWorld()).getBlockState(tx.getPos());
final EnumSet<ChiselRenderType> chiselRenderTypesToRender = renderType == RenderType.getTranslucent() ? EnumSet.of( ChiselRenderType.TRANSLUCENT ) : EnumSet.complementOf( EnumSet.of( ChiselRenderType.TRANSLUCENT ) );
for ( final ChiselRenderType chiselRenderType : chiselRenderTypesToRender )
{
final IVertexBuilder buffer = renderTypeBuffer.getBuffer(renderType);
final ChiseledBlockBaked model = ChiseledBlockSmartModel.getCachedModel( tx, chiselRenderType );
if ( !model.isEmpty() )
{
blockRenderer.getBlockModelRenderer().renderModel( tx.getWorld(),
model, estate, tx.getPos(), matrixStack, buffer, true, tx.getWorld().getRandom(), tx.getWorld().getRandom().nextLong(),
combinedOverlayIn, tx.getModelData());
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment