Jump to content

[1.12] Render what entity sees on screen


Spaceboy Ross

Recommended Posts

You would need to create a framebuffer, set it up correctly, bind a render texture to it, bind it as the active framebuffer and pretty much mimic the entire rendering of the game but with the Minecraft.renderViewEntity being the entity of your choice.

Then you would retrieve your texture, bind it and render a quad with it.

This is theoretical, I have never done anything like that and don't even know if this is possible. Look at minecraft's shaders, they might offer an insight at the issue.

Edit: If you simply want to change what the player sees on the screen(read: not add another texture on to of player's view) then you simply need to change Minecraft.renderViewEntity to the entity you wish to view the world from. However this was raised in an another topic and I believe the author of that topic had some frustrum culling issues with this approach.

Edited by V0idWa1k3r
Link to comment
Share on other sites

Yeah, pretty sure you'd have to do everything that the RenderGlobal class does but you'd set the camera and related frustum to be at the other entity position and in the direction it is looking. You could pretty much copy the code but that might not actually be easy because there is probably a lot of private stuff and concurrent modification issues you'd have to work through.

 

I know some people have implemented mirrors that use a similar idea in mods so maybe there is some tutorial or open source code that can give you ideas.

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Link to comment
Share on other sites

6 minutes ago, jabelar said:

You could pretty much copy the code but that might not actually be easy because there is probably a lot of private stuff and concurrent modification issues you'd have to work through.

I actually don't think it's too challenging. As long as you change the renderViewEntity you can just do the same the game does when it renders everything. And it doesn't do much - it just calls a couple of public methods here and there.

I also don't think CMEs are going to be a thing. CME happens when a collection is modified while it is iterated. That shouldn't happen when the game simply renders the scene twice.

Link to comment
Share on other sites

A snippet of what? Setting the renderViewEntity? Creating a framebuffer? Rendering everything all over again?

Setting the renderViewEntity:

Minecraft.getMinecraft().setRenderViewEntity(yourEntity)

Creating a framebuffer(somewhat of a pseudo-code as I don't know if Minecraft allows using framebuffers directly like that(it might bind it's own framebuffer somewhere else) but I think for your purpose something like this should suffice - so don't use this code directly, it is meant to be an example)

int rbo = GL30.glGenRenderbuffers(); // Should be a field
GL30.glBindRenderbuffer(GL30.GL_RENDERBUFFER, rbo);
GL30.glRenderbufferStorage(GL30.GL_RENDERBUFFER, GL30.GL_DEPTH24_STENCIL8, texWidth, texHeight);
int fbo = GL30.glGenFramebuffers(); // Should be a field
GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER, fbo);
GL30.glFramebufferTexture2D(GL30.GL_FRAMEBUFFER, GL30.GL_COLOR_ATTACHMENT0, GL11.GL_TEXTURE_2D, tex, 0);
GL30.glFramebufferRenderbuffer(GL30.GL_FRAMEBUFFER, GL30.GL_DEPTH_STENCIL_ATTACHMENT, GL30.GL_DEPTH24_STENCIL8, rbo);

 

But I think the minecraft-way of doing framebuffers is in the net.minecraft.client.shader.Framebuffer class. However I have never used it and as such you need to figure it out yourself but I would imagine it's not too hard. Seems like it largely does the same my example code does but instead uses OpenGlHelper which is the correct way of doing it I suppose since it accounts for extensions.

Rendering everything:

Minecraft mc = Minecraft.getMinecraft();
FMLCommonHandler.instance().onRenderTickStart(mc.getRenderPartialTicks());
mc.entityRenderer.updateCameraAndRender(mc.getRenderPartialTicks(), System.nanoTime());
FMLCommonHandler.instance().onRenderTickEnd(mc.getRenderPartialTicks());

Note that you will have to handle the case of the game being paused and supplying renderPartialTicksPaused from the game's timer to the updateCameraAndRender method and for that you will need refiection.

 

But you still haven't told us whether you even need all this framebuffer stuff. Do you just want to render the game from a different perspective or do you actually want to render a quad on the screen that shows what another entity is seeing?

Edited by V0idWa1k3r
Link to comment
Share on other sites

17 minutes ago, Spaceboy Ross said:

see what the entity sees on the screen.

This statement is ambiguous. Do you mean see as in see through the eyes of the entity(read: see the game from a different perspective) or see as in see a picture of the entity's vision on your HUD? If it's the former then you do not need the framebuffers, you simply need to change the renderViewEntity although I've heard that it is not quite that simple and causes frustrum culling issues.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • I have tried downloading forge and installing mods on my own, and it lead to crashes on start up. I have tried installing mods through curseforge to the same effect. I tried virtually every installation of forge that's available for 1.21, from forge 51.0.1-51.0.24. Either the game crashes when trying to load mods, or the game does not read the mods in my mod folder and runs like it was vanilla. I do not know what is causing the game to fail to recognize the mods. I installed forge from curseforge, and added the mods directly from cursed forge, and all of the mods are 1.21 compatible. in spite of that, it is still failing to load mods. what else could I do to get this fixed? the error loading the mods is "Error loading mods, 2 errors have occurred during loading" with each saying "Invalid mod file found." here is the crash log:   Time: 2024-07-15 13:18:49 Description: Mod loading error has occurred java.lang.Exception: Mod Loading has failed     at TRANSFORMER/[email protected]/net.minecraftforge.logging.CrashReportExtender.dumpModLoadingCrashReport(CrashReportExtender.java:49) ~[forge-1.21-51.0.24-universal.jar:?] {re:classloading}     at TRANSFORMER/[email protected]/net.minecraftforge.client.loading.ClientModLoader.completeModLoading(ClientModLoader.java:119) ~[forge-1.21-51.0.24-universal.jar:?] {re:classloading,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.Minecraft.lambda$new$7(Minecraft.java:616) ~[forge-1.21-51.0.24-client.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.Util.ifElse(Util.java:513) ~[forge-1.21-51.0.24-client.jar:?] {re:classloading}     at TRANSFORMER/[email protected]/net.minecraft.client.Minecraft.lambda$new$8(Minecraft.java:609) ~[forge-1.21-51.0.24-client.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraftforge.client.loading.ForgeLoadingOverlay.render(ForgeLoadingOverlay.java:146) ~[forge-1.21-51.0.24-universal.jar:?] {re:classloading}     at TRANSFORMER/[email protected]/net.minecraft.client.renderer.GameRenderer.render(GameRenderer.java:879) ~[forge-1.21-51.0.24-client.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.Minecraft.runTick(Minecraft.java:1180) ~[forge-1.21-51.0.24-client.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.Minecraft.run(Minecraft.java:795) ~[forge-1.21-51.0.24-client.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.main.Main.main(Main.java:228) ~[forge-1.21-51.0.24-client.jar:?] {re:classloading,pl:runtimedistcleaner:A}     at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[?:?] {}     at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[?:?] {}     at SECURE-BOOTSTRAP/[email protected]/net.minecraftforge.fml.loading.targets.CommonLaunchHandler.runTarget(CommonLaunchHandler.java:91) ~[fmlloader-1.21-51.0.24.jar!/:?] {}     at SECURE-BOOTSTRAP/[email protected]/net.minecraftforge.fml.loading.targets.CommonLaunchHandler.lambda$makeService$0(CommonLaunchHandler.java:75) ~[fmlloader-1.21-51.0.24.jar!/:?] {}     at SECURE-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:77) [modlauncher-10.2.1.jar!/:?] {}     at SECURE-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:97) [modlauncher-10.2.1.jar!/:?] {}     at SECURE-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.Launcher.run(Launcher.java:116) [modlauncher-10.2.1.jar!/:?] {}     at SECURE-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.Launcher.main(Launcher.java:75) [modlauncher-10.2.1.jar!/:?] {}     at SECURE-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.BootstrapEntry.main(BootstrapEntry.java:17) [modlauncher-10.2.1.jar!/:?] {}     at [email protected]/net.minecraftforge.bootstrap.Bootstrap.moduleMain(Bootstrap.java:188) [bootstrap-2.1.3.jar!/:?] {}     at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[?:?] {}     at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[?:?] {}     at net.minecraftforge.bootstrap.Bootstrap.bootstrapMain(Bootstrap.java:133) [bootstrap-2.1.3.jar:2.1.3] {}     at net.minecraftforge.bootstrap.Bootstrap.start(Bootstrap.java:53) [bootstrap-2.1.3.jar:2.1.3] {}     at net.minecraftforge.bootstrap.ForgeBootstrap.main(ForgeBootstrap.java:19) [bootstrap-2.1.3.jar:2.1.3] {} A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Thread: Render thread Suspected Mods: NONE Stacktrace:     at TRANSFORMER/[email protected]/net.minecraftforge.logging.CrashReportExtender.lambda$dumpModLoadingCrashReport$7(CrashReportExtender.java:52) ~[forge-1.21-51.0.24-universal.jar!/:?] {re:classloading} -- NO MOD INFO AVAILABLE -- Details:     Mod File: NO FILE INFO     Failure message: Invalid mod file found C:\Users\Danny\curseforge\minecraft\Instances\Magic - modded\mods\mahoutsukai-1.21.0-v1.35.2.jar     Mod Version: NO MOD INFO AVAILABLE     Mod Issue URL: NOT PROVIDED     Exception message: MISSING EXCEPTION MESSAGE Stacktrace:     at TRANSFORMER/[email protected]/net.minecraftforge.logging.CrashReportExtender.lambda$dumpModLoadingCrashReport$7(CrashReportExtender.java:52) ~[forge-1.21-51.0.24-universal.jar:?] {re:classloading}     at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) ~[?:?] {}     at TRANSFORMER/[email protected]/net.minecraftforge.logging.CrashReportExtender.dumpModLoadingCrashReport(CrashReportExtender.java:50) ~[forge-1.21-51.0.24-universal.jar:?] {re:classloading}     at TRANSFORMER/[email protected]/net.minecraftforge.client.loading.ClientModLoader.completeModLoading(ClientModLoader.java:119) ~[forge-1.21-51.0.24-universal.jar:?] {re:classloading,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.Minecraft.lambda$new$7(Minecraft.java:616) ~[forge-1.21-51.0.24-client.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.Util.ifElse(Util.java:513) ~[forge-1.21-51.0.24-client.jar:?] {re:classloading}     at TRANSFORMER/[email protected]/net.minecraft.client.Minecraft.lambda$new$8(Minecraft.java:609) ~[forge-1.21-51.0.24-client.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraftforge.client.loading.ForgeLoadingOverlay.render(ForgeLoadingOverlay.java:146) ~[forge-1.21-51.0.24-universal.jar:?] {re:classloading}     at TRANSFORMER/[email protected]/net.minecraft.client.renderer.GameRenderer.render(GameRenderer.java:879) ~[forge-1.21-51.0.24-client.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.Minecraft.runTick(Minecraft.java:1180) ~[forge-1.21-51.0.24-client.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.Minecraft.run(Minecraft.java:795) ~[forge-1.21-51.0.24-client.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}     at TRANSFORMER/[email protected]/net.minecraft.client.main.Main.main(Main.java:228) ~[forge-1.21-51.0.24-client.jar:?] {re:classloading,pl:runtimedistcleaner:A}     at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[?:?] {}     at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[?:?] {}     at SECURE-BOOTSTRAP/[email protected]/net.minecraftforge.fml.loading.targets.CommonLaunchHandler.runTarget(CommonLaunchHandler.java:91) ~[fmlloader-1.21-51.0.24.jar!/:?] {}     at SECURE-BOOTSTRAP/[email protected]/net.minecraftforge.fml.loading.targets.CommonLaunchHandler.lambda$makeService$0(CommonLaunchHandler.java:75) ~[fmlloader-1.21-51.0.24.jar!/:?] {}     at SECURE-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:77) [modlauncher-10.2.1.jar!/:?] {}     at SECURE-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:97) [modlauncher-10.2.1.jar!/:?] {}     at SECURE-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.Launcher.run(Launcher.java:116) [modlauncher-10.2.1.jar!/:?] {}     at SECURE-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.Launcher.main(Launcher.java:75) [modlauncher-10.2.1.jar!/:?] {}     at SECURE-BOOTSTRAP/[email protected]/cpw.mods.modlauncher.BootstrapEntry.main(BootstrapEntry.java:17) [modlauncher-10.2.1.jar!/:?] {}     at [email protected]/net.minecraftforge.bootstrap.Bootstrap.moduleMain(Bootstrap.java:188) [bootstrap-2.1.3.jar!/:?] {}     at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[?:?] {}     at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[?:?] {}     at net.minecraftforge.bootstrap.Bootstrap.bootstrapMain(Bootstrap.java:133) [bootstrap-2.1.3.jar:2.1.3] {}     at net.minecraftforge.bootstrap.Bootstrap.start(Bootstrap.java:53) [bootstrap-2.1.3.jar:2.1.3] {}     at net.minecraftforge.bootstrap.ForgeBootstrap.main(ForgeBootstrap.java:19) [bootstrap-2.1.3.jar:2.1.3] {} -- NO MOD INFO AVAILABLE -- Details:     Mod File: NO FILE INFO     Failure message: Invalid mod file found C:\Users\Danny\curseforge\minecraft\Instances\Magic - modded\mods\waystones-neoforge-1.21-21.0.8.jar     Mod Version: NO MOD INFO AVAILABLE     Mod Issue URL: NOT PROVIDED     Exception message: MISSING EXCEPTION MESSAGE -- System Details -- Details:     Minecraft Version: 1.21     Minecraft Version ID: 1.21     Operating System: Windows 10 (amd64) version 10.0     Java Version: 21.0.3, Microsoft     Java VM Version: OpenJDK 64-Bit Server VM (mixed mode), Microsoft     Memory: 350197760 bytes (333 MiB) / 650117120 bytes (620 MiB) up to 4294967296 bytes (4096 MiB)     CPUs: 32     Processor Vendor: GenuineIntel     Processor Name: 13th Gen Intel(R) Core(TM) i9-13900K     Identifier: Intel64 Family 6 Model 183 Stepping 1     Microarchitecture: Raptor Lake     Frequency (GHz): 3.00     Number of physical packages: 1     Number of physical CPUs: 24     Number of logical CPUs: 32     Graphics card #0 name: NVIDIA GeForce GTX 1080 Ti     Graphics card #0 vendor: NVIDIA     Graphics card #0 VRAM (MiB): 11264.00     Graphics card #0 deviceId: VideoController1     Graphics card #0 versionInfo: 32.0.15.5612     Memory slot #0 capacity (MiB): 8192.00     Memory slot #0 clockSpeed (GHz): 3.20     Memory slot #0 type: DDR4     Memory slot #1 capacity (MiB): 8192.00     Memory slot #1 clockSpeed (GHz): 3.20     Memory slot #1 type: DDR4     Memory slot #2 capacity (MiB): 8192.00     Memory slot #2 clockSpeed (GHz): 3.20     Memory slot #2 type: DDR4     Memory slot #3 capacity (MiB): 8192.00     Memory slot #3 clockSpeed (GHz): 3.20     Memory slot #3 type: DDR4     Virtual memory max (MiB): 37441.13     Virtual memory used (MiB): 15153.36     Swap memory total (MiB): 4864.00     Swap memory used (MiB): 0.00     Space in storage for jna.tmpdir (MiB): available: 147541.50, total: 475918.38     Space in storage for org.lwjgl.system.SharedLibraryExtractPath (MiB): available: 147541.50, total: 475918.38     Space in storage for io.netty.native.workdir (MiB): available: 147541.50, total: 475918.38     Space in storage for java.io.tmpdir (MiB): available: 147541.50, total: 475918.38     Space in storage for workdir (MiB): available: 147541.50, total: 475918.38     JVM Flags: 4 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xss1M -Xmx4096m -Xms256m     ModLauncher: 10.2.1     ModLauncher launch target: forge_client     ModLauncher naming: mcp     ModLauncher services:          / slf4jfixer PLUGINSERVICE          / runtimedistcleaner PLUGINSERVICE          / runtime_enum_extender PLUGINSERVICE          / object_holder_definalize PLUGINSERVICE          / capability_token_subclass PLUGINSERVICE          / accesstransformer PLUGINSERVICE          / eventbus PLUGINSERVICE          / mixin PLUGINSERVICE          / fml TRANSFORMATIONSERVICE          / mixin TRANSFORMATIONSERVICE      FML Language Providers:          lowcodefml@51         [email protected]         [email protected]     Mod List:          forge-1.21-51.0.24-client.jar                     |Minecraft                     |minecraft                     |1.21                |NONE      |Manifest: NOSIGNATURE         forge-1.21-51.0.24-universal.jar                  |Forge                         |forge                         |51.0.24             |NONE      |Manifest: NOSIGNATURE
    • Re-add these one by one until you find the one causing this issue
    • i think removing all those helped, but i do need most of those mods.
    • I mean is it possible to do that? Like an Event so you can write what happens when a Player/Entity is hearing a Sound.
    • I'm trying to install a 1.16.4 forge server but when I run 'forge-1.16.4-35.1.37.jar' with start.bat 'java -Xmx2048M -Xms2048M -jar forge-1.16.4-35.1.37.jar nogui ' it freezes and gives me this error.  [10:38:39] [main/INFO] [cp.mo.mo.Launcher/MODLAUNCHER]: ModLauncher running: args [--gameDir, ., --launchTarget, fmlserver, --fml.forgeVersion, 35.1.37, --fml.mcpVersion, 20201102.104115, --fml.mcVersion, 1.16.4, --fml.forgeGroup, net.minecraftforge, nogui] [10:38:39] [main/INFO] [cp.mo.mo.Launcher/MODLAUNCHER]: ModLauncher 8.0.9+86+master.3cf110c starting: java version 22.0.1 by Oracle Corporation Exception in thread "main" java.lang.IllegalAccessError: class cpw.mods.modlauncher.SecureJarHandler (in unnamed module @0x78b1cc93) cannot access class sun.security.util.ManifestEntryVerifier (in module java.base) because module java.base does not export sun.security.util to unnamed module @0x78b1cc93         at cpw.mods.modlauncher.SecureJarHandler.lambda$static$1(SecureJarHandler.java:41)         at cpw.mods.modlauncher.api.LamdbaExceptionUtils.uncheck(LamdbaExceptionUtils.java:95)         at cpw.mods.modlauncher.SecureJarHandler.<clinit>(SecureJarHandler.java:41)         at cpw.mods.modlauncher.Launcher.lambda$new$6(Launcher.java:55)         at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1710)         at cpw.mods.modlauncher.api.TypesafeMap.computeIfAbsent(TypesafeMap.java:52)         at cpw.mods.modlauncher.api.TypesafeMap.computeIfAbsent(TypesafeMap.java:47)         at cpw.mods.modlauncher.Environment.computePropertyIfAbsent(Environment.java:62)         at cpw.mods.modlauncher.Launcher.<init>(Launcher.java:55)         at cpw.mods.modlauncher.Launcher.main(Launcher.java:66)         at net.minecraftforge.server.ServerMain$Runner.runLauncher(ServerMain.java:63)         at net.minecraftforge.server.ServerMain$Runner.access$100(ServerMain.java:60)         at net.minecraftforge.server.ServerMain.main(ServerMain.java:57) When I run the same bat file aimed at the vanilla server jar, it runs fine but vanilla and not forge. I have no idea what this error code is telling me and would appreciate some help with starting this server.  
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.