Skip to content

Instantly share code, notes, and snippets.

@Lanse505
Created July 18, 2022 20:09
Show Gist options
  • Save Lanse505/f56798753fbdc5f6bf0e3c4e9af5b30d to your computer and use it in GitHub Desktop.
Save Lanse505/f56798753fbdc5f6bf0e3c4e9af5b30d to your computer and use it in GitHub Desktop.
java.lang.NullPointerException: Cannot invoke "net.minecraft.client.renderer.ShaderInstance.setSampler(String, Object)" because "p_166879_" is null
at com.mojang.blaze3d.vertex.VertexBuffer._drawWithShader(VertexBuffer.java:128) ~[forge-1.19-41.0.94_mapped_official_1.19.jar%23180!/:?] {re:classloading,pl:runtimedistcleaner:A}
at com.mojang.blaze3d.vertex.VertexBuffer.drawWithShader(VertexBuffer.java:121) ~[forge-1.19-41.0.94_mapped_official_1.19.jar%23180!/:?] {re:classloading,pl:runtimedistcleaner:A}
at com.mojang.blaze3d.vertex.BufferUploader._drawWithShader(BufferUploader.java:33) ~[forge-1.19-41.0.94_mapped_official_1.19.jar%23180!/:?] {re:classloading,pl:runtimedistcleaner:A}
at com.mojang.blaze3d.vertex.BufferUploader.drawWithShader(BufferUploader.java:26) ~[forge-1.19-41.0.94_mapped_official_1.19.jar%23180!/:?] {re:classloading,pl:runtimedistcleaner:A}
at net.minecraft.client.renderer.RenderType.end(RenderType.java:381) ~[forge-1.19-41.0.94_mapped_official_1.19.jar%23180!/:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
at net.minecraft.client.renderer.MultiBufferSource$BufferSource.endBatch(MultiBufferSource.java:96) ~[forge-1.19-41.0.94_mapped_official_1.19.jar%23180!/:?] {re:classloading,pl:runtimedistcleaner:A}
at net.minecraft.client.renderer.MultiBufferSource$BufferSource.getBuffer(MultiBufferSource.java:45) ~[forge-1.19-41.0.94_mapped_official_1.19.jar%23180!/:?] {re:classloading,pl:runtimedistcleaner:A}
at net.minecraft.client.renderer.LevelRenderer.renderLevel(LevelRenderer.java:1316) ~[forge-1.19-41.0.94_mapped_official_1.19.jar%23180!/:?] {re:classloading,pl:runtimedistcleaner:A}
at net.minecraft.client.renderer.GameRenderer.renderLevel(GameRenderer.java:1068) ~[forge-1.19-41.0.94_mapped_official_1.19.jar%23180!/:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
at net.minecraft.client.renderer.GameRenderer.render(GameRenderer.java:840) ~[forge-1.19-41.0.94_mapped_official_1.19.jar%23180!/:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
at net.minecraft.client.Minecraft.runTick(Minecraft.java:1084) ~[forge-1.19-41.0.94_mapped_official_1.19.jar%23180!/:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
at net.minecraft.client.Minecraft.run(Minecraft.java:669) ~[forge-1.19-41.0.94_mapped_official_1.19.jar%23180!/:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
at net.minecraft.client.main.Main.main(Main.java:206) ~[forge-1.19-41.0.94_mapped_official_1.19.jar%23180!/:?] {re:classloading,pl:runtimedistcleaner:A}
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] {}
at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[?:?] {}
at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] {}
at java.lang.reflect.Method.invoke(Method.java:568) ~[?:?] {}
at net.minecraftforge.fml.loading.targets.ForgeClientUserdevLaunchHandler.lambda$launchService$0(ForgeClientUserdevLaunchHandler.java:25) ~[fmlloader-1.19-41.0.94.jar%2394!/:?] {}
at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:30) [modlauncher-10.0.8.jar%23106!/:?] {}
at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:53) [modlauncher-10.0.8.jar%23106!/:?] {}
at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:71) [modlauncher-10.0.8.jar%23106!/:?] {}
at cpw.mods.modlauncher.Launcher.run(Launcher.java:106) [modlauncher-10.0.8.jar%23106!/:?] {}
at cpw.mods.modlauncher.Launcher.main(Launcher.java:77) [modlauncher-10.0.8.jar%23106!/:?] {}
at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:26) [modlauncher-10.0.8.jar%23106!/:?] {}
at cpw.mods.modlauncher.BootstrapLaunchConsumer.accept(BootstrapLaunchConsumer.java:23) [modlauncher-10.0.8.jar%23106!/:?] {}
at cpw.mods.bootstraplauncher.BootstrapLauncher.main(BootstrapLauncher.java:141) [bootstraplauncher-1.1.2.jar:?] {}
package com.hrznstudio.matteroverdrive.client.renderer.tile;
import com.hrznstudio.matteroverdrive.block.tile.BaseStationTile;
import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.blaze3d.vertex.VertexFormat;
import com.mojang.math.Matrix4f;
import com.mojang.math.Vector3f;
import net.minecraft.client.Minecraft;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderStateShard;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderDispatcher;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
import net.minecraft.resources.ResourceLocation;
import java.awt.*;
import java.util.Random;
import static com.hrznstudio.matteroverdrive.util.MOColorUtil.HOLO_COLOR;
import static com.hrznstudio.matteroverdrive.util.MOColorUtil.INVALID_HOLO_COLOR;
import static org.lwjgl.opengl.GL11.GL_ONE;
public class RenderStation<T extends BaseStationTile<T>> implements BlockEntityRenderer<T> {
private static final ResourceLocation glowTexture = new ResourceLocation("matteroverdrive:textures/fx/hologram_beam.png");
private final Random random = new Random();
public static RenderType TYPE = createRenderType();
public static RenderType createRenderType() {
RenderType.CompositeState state = RenderType.CompositeState.builder().setTextureState(new RenderStateShard.TextureStateShard(glowTexture, false, false)).setTransparencyState(new RenderStateShard.TransparencyStateShard("translucent_transparency", () -> {
RenderSystem.enableBlend();
RenderSystem.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE);
}, () -> {
RenderSystem.disableBlend();
RenderSystem.defaultBlendFunc();
})).createCompositeState(true);
return RenderType.create("render_station", DefaultVertexFormat.POSITION_TEX_COLOR, VertexFormat.Mode.TRIANGLE_FAN, 256, false, true, state);
}
public RenderStation(BlockEntityRenderDispatcher rendererDispatcherIn) {
super();
}
private void drawHoloLights(PoseStack stack, MultiBufferSource bufferIn, T tile, double x, double y, double z) {
//float lastLightMapX = OpenGlHelper.lastBrightnessX;
//float lastLightMapY = OpenGlHelper.lastBrightnessY;
//OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f);
RenderSystem.disableCull();
RenderSystem.depthMask(false);
float height = 5.5f * (1f / 16f);
float hologramHeight = 1;
float offset = 2f * (1f / 16f);
float size = 14f * (1f / 16f);
float topSize = 2 - 1;
stack.pushPose();
stack.translate(0, height, 0);
VertexConsumer consumer = bufferIn.getBuffer(TYPE);
Color color;
if (tile.isUsableByPlayer(Minecraft.getInstance().player)) {
color = HOLO_COLOR;
} else {
color = INVALID_HOLO_COLOR;
}
float multiply = 0.5f + (tile.getLevel().getGameTime() % (random.nextInt(70) + 1) == 0 ? (0.05f * random.nextFloat()) : 0.05f);
Matrix4f matrix = stack.last().pose();
consumer.vertex(matrix, offset, 0, offset).uv(1, 1).color(color.getRed() * multiply / 255f, color.getGreen() * multiply / 255f, color.getBlue() * multiply / 255f, 1.0f).endVertex();
consumer.vertex(matrix,-topSize, height + hologramHeight, -topSize).uv(1, 0).color(color.getRed() * multiply / 255f, color.getGreen() * multiply / 255f, color.getBlue() * multiply / 255f, 1.0f).endVertex();
consumer.vertex(matrix,size + topSize, height + hologramHeight, -topSize).uv(0, 0).color(color.getRed() * multiply / 255f, color.getGreen() * multiply / 255f, color.getBlue() * multiply / 255f, 1.0f).endVertex();
consumer.vertex(matrix,size, 0, offset).uv(0, 1).color(color.getRed() * multiply / 255f, color.getGreen() * multiply / 255f, color.getBlue() * multiply / 255f, 1.0f).endVertex();
consumer.vertex(matrix,size, 0, offset).uv(1, 1).color(color.getRed() * multiply / 255f, color.getGreen() * multiply / 255f, color.getBlue() * multiply / 255f, 1.0f).endVertex();
consumer.vertex(matrix,size + topSize, height + hologramHeight, -topSize).uv(1, 0).color(color.getRed() * multiply / 255f, color.getGreen() * multiply / 255f, color.getBlue() * multiply / 255f, 1.0f).endVertex();
consumer.vertex(matrix,size + topSize, height + hologramHeight, 1 + topSize).uv(0, 0).color(color.getRed() * multiply / 255f, color.getGreen() * multiply / 255f, color.getBlue() * multiply / 255f, 1.0f).endVertex();
consumer.vertex(matrix,size, 0, size).uv(0, 1).color(color.getRed() * multiply / 255f, color.getGreen() * multiply / 255f, color.getBlue() * multiply / 255f, 1.0f).endVertex();
consumer.vertex(matrix,size, 0, size).uv(1, 1).color(color.getRed() * multiply / 255f, color.getGreen() * multiply / 255f, color.getBlue() * multiply / 255f, 1.0f).endVertex();
consumer.vertex(matrix,size + topSize, height + hologramHeight, 1 + topSize).uv(1, 0).color(color.getRed() * multiply / 255f, color.getGreen() * multiply / 255f, color.getBlue() * multiply / 255f, 1.0f).endVertex();
consumer.vertex(matrix,-topSize, height + hologramHeight, 1 + topSize).uv(0, 0).color(color.getRed() * multiply / 255f, color.getGreen() * multiply / 255f, color.getBlue() * multiply / 255f, 1.0f).endVertex();
consumer.vertex(matrix,offset, 0, size).uv(0, 1).color(color.getRed() * multiply / 255f, color.getGreen() * multiply / 255f, color.getBlue() * multiply / 255f, 1.0f).endVertex();
consumer.vertex(matrix,offset, 0, size).uv(1, 1).color(color.getRed() * multiply / 255f, color.getGreen() * multiply / 255f, color.getBlue() * multiply / 255f, 1.0f).endVertex();
consumer.vertex(matrix,-topSize, height + hologramHeight, 1 + topSize).uv(1, 0).color(color.getRed() * multiply / 255f, color.getGreen() * multiply / 255f, color.getBlue() * multiply / 255f, 1.0f).endVertex();
consumer.vertex(matrix,-topSize, height + hologramHeight, -topSize).uv(0, 0).color(color.getRed() * multiply / 255f, color.getGreen() * multiply / 255f, color.getBlue() * multiply / 255f, 1.0f).endVertex();
consumer.vertex(matrix,offset, 0, offset).uv(0, 1).color(color.getRed() * multiply / 255f, color.getGreen() * multiply / 255f, color.getBlue() * multiply / 255f, 1.0f).endVertex();
RenderSystem.enableCull();
RenderSystem.depthMask(false);
stack.popPose();
}
public void drawHoloText(PoseStack stack, T tile, double x, double y, double z, float partialTicks) {
LocalPlayer player = Minecraft.getInstance().player;
if (!tile.isUsableByPlayer(player)) {
stack.pushPose();
RenderSystem.enableBlend();
RenderSystem.blendFunc(GL_ONE, GL_ONE);
stack.translate( 0.5, 0.5, 0.5);
stack.mulPose(Vector3f.YP.rotationDegrees(180));
// float playerPosX = (float) Mth.clampedLerp((float) player.xo, (float) player.getX(), partialTicks);
// float playerPosZ = (float) Mth.clampedLerp((float) player.zo, (float) player.getZ(), partialTicks);
// float angle = (float) Math.toDegrees(Math.atan2(playerPosX - (tile.getBlockPos().getX() + 0.5), playerPosZ - (tile.getBlockPos().getZ() + 0.5)) + Math.PI);
stack.mulPose(Vector3f.YP.rotationDegrees(tile.getLevel().getGameTime() % 360));
RenderSystem.disableCull();
stack.mulPose(Vector3f.XP.rotationDegrees(180));
stack.scale(0.02f, 0.02f, 0.02f);
String[] info = "Access Denied".split(" "); //TODO Translate
for (int i = 0; i < info.length; i++) {
int width = Minecraft.getInstance().font.width(info[i]);
stack.pushPose();
stack.translate(-width / 2, -32, 0);
Minecraft.getInstance().font.draw(stack, info[i], 0, i * 10, INVALID_HOLO_COLOR.getRGB());
stack.popPose();
}
RenderSystem.disableBlend();
RenderSystem.enableCull();
stack.popPose();
}
}
public void drawAdditional(PoseStack stack, MultiBufferSource bufferIn, T tile, double x, double y, double z, float partialTicks) {
}
@Override
public void render(T tile, float partialTicks, PoseStack poseStack, MultiBufferSource buffer, int combinedLightIn, int combinedOverlayIn) {
poseStack.pushPose();
drawHoloLights(poseStack, buffer, tile, tile.getBlockPos().getX(), tile.getBlockPos().getY(), tile.getBlockPos().getZ());
drawHoloText(poseStack, tile, tile.getBlockPos().getX(), tile.getBlockPos().getY(), tile.getBlockPos().getZ(), partialTicks);
drawAdditional(poseStack, buffer, tile, tile.getBlockPos().getX(), tile.getBlockPos().getY(), tile.getBlockPos().getZ(), partialTicks);
poseStack.popPose();
}
}
import com.hrznstudio.matteroverdrive.MatterOverdrive;
import com.hrznstudio.matteroverdrive.block.tile.AndroidStationTile;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.math.Vector3f;
import net.minecraft.client.Minecraft;
import net.minecraft.client.model.PlayerModel;
import net.minecraft.client.model.geom.ModelLayers;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.resources.ResourceLocation;
public class RenderAndroidStation extends RenderStation<AndroidStationTile> {
private static final ResourceLocation location = new ResourceLocation(MatterOverdrive.MOD_ID, "textures/entity/android_colorless.png");
public PlayerModel playerModel;
public RenderAndroidStation(BlockEntityRendererProvider.Context rendererContext) {
super(rendererContext.getBlockEntityRenderDispatcher());
playerModel = new PlayerModel(rendererContext.bakeLayer(ModelLayers.PLAYER), false);
playerModel.young = false;
}
@Override
public void drawAdditional(PoseStack stack, MultiBufferSource bufferIn, AndroidStationTile tile, double x, double y, double z, float partialTicks) {
LocalPlayer player = Minecraft.getInstance().player;
if (player != null && tile.isUsableByPlayer(player)) {
stack.pushPose();
stack.translate(0.5, 2, 0.5);
stack.mulPose(Vector3f.XP.rotationDegrees(180));
RenderSystem.disableCull();
RenderSystem.depthMask(false);
// RenderSystem.setShaderColor(ReferenceClient.Colors.HOLO.getRed(), ReferenceClient.Colors.HOLO.getGreen(), ReferenceClient.Colors.HOLO.getBlue(), 1.0f);
// float playerPosX = (float) Mth.clampedLerp((float) player.xo, (float) player.position().x, partialTicks);
// float playerPosZ = (float) Mth.clampedLerp((float) player.zo, (float) player.position().z, partialTicks);
// float angle = (float) Math.toDegrees(Math.atan2(playerPosX - (tile.getBlockPos().getX() + 0.5), playerPosZ - (tile.getBlockPos().getZ() + 0.5)) + Math.PI);
stack.mulPose(Vector3f.YP.rotationDegrees(180));
stack.mulPose(Vector3f.YN.rotationDegrees(tile.getLevel().getGameTime() % 360));
VertexConsumer consumer = bufferIn.getBuffer(TYPE);
float multiply = 0.35f + (tile.getLevel().getGameTime() % (tile.getLevel().random.nextInt(70) + 1) == 0 ? (0.05f * tile.getLevel().random.nextFloat()) : 0.05f);
playerModel.renderToBuffer(stack, consumer ,0, 0, multiply, multiply, multiply, 0.0625F);
RenderSystem.enableCull();
RenderSystem.depthMask(false);
stack.popPose();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment