Posted December 15, 20186 yr So i have a rideable dragon, with its camera extended using EntityViewRenderEvent.CameraSetup, problem is, it pass through blocks and maybe exploited to find caves below. SO I need a horse or pig EntityViewRenderEvent.CameraSetup to figure out how they dont pass through blocks. @SubscribeEvent public void thirdPersonCameraFix(EntityViewRenderEvent.CameraSetup event) { EntityPlayer player = Minecraft.getMinecraft().player; if(player.getRidingEntity() instanceof EntityTameableDragon) { float scale = MathX.clamp(((EntityTameableDragon) player.getRidingEntity()).getScale(), 0.1f, 1f); if(Minecraft.getMinecraft().gameSettings.thirdPersonView == 1) { GL11.glTranslated(0F , -1.4F, -10.8 * scale); } if(Minecraft.getMinecraft().gameSettings.thirdPersonView == 2) { GL11.glTranslated(0F , -0.8F, 10.8 * scale); } } else if(player.getRidingEntity() instanceof EntityCarriage) { if(Minecraft.getMinecraft().gameSettings.thirdPersonView == 1) { GL11.glTranslated(0F , -0.8F, -10.8); } if(Minecraft.getMinecraft().gameSettings.thirdPersonView == 2) { GL11.glTranslated(0F , -0.8F, 10.8); } } }
December 15, 20186 yr 27 minutes ago, TheRPGAdventurer said: SO I need a horse or pig EntityViewRenderEvent.CameraSetup to figure out how they dont pass through blocks. You are out of luck as they don't utilize one. The camera(and it's behaviour) doesn't change when you are riding a pig/horse. 28 minutes ago, TheRPGAdventurer said: GL11.glTranslated(0F , -1.4F, -10.8 * scale); Don't use GL11 directly, use GlStateManager.
December 16, 20186 yr Author when riding a horse and you look down it zooms in if its close to a block, hile mine just passes through it revealing air blocks below
December 16, 20186 yr Horse uses the default camera. Camera colliding with blocks and adjusting it's position is a behaviour of the default camera. Edit: to clarify and potentially make this topic smaller - cameras are not a feature of OpenGL, neither are collision. Minecraft processes the camera on the CPU, then adjusts the view matrix according to the new position. You are just directly manipulating the GL view matrix, which obviously doesn't care about collisions or anything. You need to implement an algorithm that would adjust the transformations made to the view matrix based on the collisions of the camera. You would probably want to simply raytrace the blocks along the [desired camera pos] - [player's eyes] vector. Raytracing should return a hit vector - that's your position and your transformation. Edited December 16, 20186 yr by V0idWa1k3r
December 16, 20186 yr Author 2 hours ago, V0idWa1k3r said: You need to implement an algorithm that would adjust the transformations made to the view matrix based on the collisions of the camera. You would probably want to simply raytrace the blocks along the [desired camera pos] - [player's eyes] vector. Raytracing should return a hit vector - that's your position and your transformation. Exactly the reason here i need the vanilla camera
February 3, 20196 yr On 12/16/2018 at 9:00 AM, V0idWa1k3r said: You need to implement an algorithm that would adjust the transformations made to the view matrix based on the collisions of the camera. You would probably want to simply raytrace the blocks along the [desired camera pos] - [player's eyes] vector. Raytracing should return a hit vector - that's your position and your transformation. You are already using the correct event, you just need to implement this logic.
February 3, 20196 yr Author I mean the raytracing one, player eyes is getLook() right? or getEyeHeight?
February 3, 20196 yr Author @SubscribeEvent public void thirdPersonCameraFix(EntityViewRenderEvent.CameraSetup event) { EntityPlayer player = Minecraft.getMinecraft().player; Vec3d vec = player.rayTrace(10, player.ticksExisted).hitVec; Vec3d distToBlock = player.getLook(player.ticksExisted).subtract(vec); if(player.getRidingEntity() instanceof EntityTameableDragon) { float scale = MathX.clamp(((EntityTameableDragon) player.getRidingEntity()).getScale(), 0.1f, 1f); if(Minecraft.getMinecraft().gameSettings.thirdPersonView == 1) { GlStateManager.translate(0F - vec.x, -1.7F - vec.y, -DragonMountsConfig.ThirdPersonZoom * scale - vec.z); } if(Minecraft.getMinecraft().gameSettings.thirdPersonView == 2) { GlStateManager.translate(0F - vec.x, -1.8F - vec.y, DragonMountsConfig.ThirdPersonZoom * scale - vec.z); } } else if(player.getRidingEntity() instanceof EntityCarriage) { if(Minecraft.getMinecraft().gameSettings.thirdPersonView == 1) { GlStateManager.translate(0F - vec.x, -1.8F - vec.y, -10.8 - vec.z); } if(Minecraft.getMinecraft().gameSettings.thirdPersonView == 2) { GlStateManager.translate(0F - vec.x, -1.8F - vec.y, 10.8 - vec.z); } } } } How's this
February 7, 20196 yr Author [player's eyes] what the heck is this, raytracing gives me a hitVec vector field, yet subtracting it with the desired pos doesnt do anything
February 8, 20196 yr It gives you a normalised vector IIRC About Me Spoiler My Discord - Cadiboo#8887 My Website - Cadiboo.github.io My Mods - Cadiboo.github.io/projects My Tutorials - Cadiboo.github.io/tutorials Versions below 1.14.4 are no longer supported on this forum. Use the latest version to receive support. When asking support remember to include all relevant log files (logs are found in .minecraft/logs/), code if applicable and screenshots if possible. Only download mods from trusted sites like CurseForge (minecraft.curseforge.com). A list of bad sites can be found here, with more information available at stopmodreposts.org Edit your own signature at www.minecraftforge.net/forum/settings/signature/ (Make sure to check its compatibility with the Dark Theme)
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.