Created
July 18, 2022 20:09
-
-
Save Lanse505/f56798753fbdc5f6bf0e3c4e9af5b30d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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:?] {} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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