Jump to content

[1.7.10] Changing the camera - how to change zoom [solved] (please critique)


Thornack

Recommended Posts

I have written the following class, its a custom keybinding class that I use to zoom the players camera in. Thought Id share, to help promote figuring out cool things that may be useful to people. Not sure how good it is, please critique it if you can see anything to critique.

 

 

public class KeyZoomIn extends KeyBinding
{
public KeyZoomIn()
{
  super("key.keyZoomIn", Keyboard.KEY_Z, "key.categories.yourmod");
}

Minecraft mc;
double zoom = 1; //default zoom is 1

@SubscribeEvent
public void keyDown(InputEvent.KeyInputEvent event)
{
Keyboard.enableRepeatEvents(true);
if(Keyboard.isRepeatEvent()){
  if (isPressed())  { 
 double currentZoom = zoom+= 0.02;	//seems to be fairly smooth and not too slow  
  this.cameraZoom(currentZoom);
  System.out.println(currentZoom);
}} 

else if (!isPressed() && zoom >=1)  { 
zoom = 1; //default zoom is 1
  this.cameraZoom(zoom);
}
}

public void cameraZoom(double zoomValue){

EntityRenderer entRenderer = Minecraft.getMinecraft().entityRenderer;
try {
	entRenderer.getClass().getField("cameraZoom").set(entRenderer, zoomValue);
	System.out.println();
} catch (IllegalArgumentException e) {
	e.printStackTrace();
} catch (IllegalAccessException e) {
	e.printStackTrace();
} catch (NoSuchFieldException e) {
	e.printStackTrace();
} catch (SecurityException e) {
	e.printStackTrace();
}
}
}

Link to comment
Share on other sites

There is better way with FOVUpdateEvent(it could be slightly wrong name), you can use it for zooming.

I. Stellarium for Minecraft: Configurable Universe for Minecraft! (WIP)

II. Stellar Sky, Better Star Rendering&Sky Utility mod, had separated from Stellarium.

Link to comment
Share on other sites

It's good you're exploring reflection. I don't use reflection often, but I'm surprised if your code works as posted. Don't you need to use getDeclaredField() instead of getField() if you're trying to access a private field? Also, I thought you'd need to set it to accessible before you got or set the value...

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

Link to comment
Share on other sites

Haha nope the code works as posted you need to register the keybinding using

 

in client proxy

public void registerKeyBindings()
  {
    MinecraftForge.EVENT_BUS.register(this);
    KeyZoomIn key1 = new KeyZoomIn();
    ClientRegistry.registerKeyBinding(key1);
    FMLCommonHandler.instance().bus().register(key1);
}

 

and overright that same method in common proxy and correctly pass it to your main mod file but other than that it works just fine. Not sure why like I said it was my first attempt using reflections

Link to comment
Share on other sites

This is the class with the imports - it works as is for me i use Eclipse as an IDE and my forge version is

 

forge\1.7.10-10.13.2.1230\forgeSrc-1.7.10-10.13.2.1230.jar

import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.EntityRenderer;
import net.minecraft.client.settings.KeyBinding;
import net.minecraft.entity.player.EntityPlayer;

import org.lwjgl.input.Keyboard;

import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.InputEvent;

public class KeyZoomIn extends KeyBinding
{
public KeyZoomIn()
{
  super("key.keyZoomIn", Keyboard.KEY_Z, "key.categories.custommod");
}

Minecraft mc;
double zoom;

@SubscribeEvent
public void keyDown(InputEvent.KeyInputEvent event)
{
Keyboard.enableRepeatEvents(true);
if(Keyboard.isRepeatEvent()){
  if (isPressed())  { 
 double currentZoom = zoom += 0.005;	  
  this.cameraZoom(currentZoom);
 System.out.println(currentZoom);
}} else if (!isPressed() && zoom !=1)  { 
zoom = 1;
  this.cameraZoom(zoom);
}
}

public void cameraZoom(double zoomValue){

EntityRenderer entRenderer = Minecraft.getMinecraft().entityRenderer;
try {
	entRenderer.getClass().getDeclaredField("cameraZoom").set(entRenderer, zoomValue);
} catch (IllegalArgumentException e) {
	e.printStackTrace();
} catch (IllegalAccessException e) {
	e.printStackTrace();
} catch (NoSuchFieldException e) {
	e.printStackTrace();
} catch (SecurityException e) {
	e.printStackTrace();
}
}
}
[code]

Link to comment
Share on other sites

in Client Proxy

public void registerKeyBindings()
  {
MinecraftForge.EVENT_BUS.register(this);
    KeyZoomIn key2 = new KeyZoomIn();
    ClientRegistry.registerKeyBinding(key2);
    FMLCommonHandler.instance().bus().register(key2);
}

 

in common proxy

/* Overriden in ClientProxy*/
public void registerKeyBindings() {}


/*preInit() is called from PokeWorlds.java, and is responsible for registering all
 * 	Items and Entities. You should register the following here: creative tabs, items, 
 *  entities, blocks, tile entities, and mobs.
 *  
 */
public void preInit(){
registerKeyBindings();
}

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

    • me and my friends kinda just threw mods together and ive been trying to fix it for 2 hours but cant figure out the problem it works and starts to load but then crashes after loading "DISPATCHING CONSTRUCT" https://mclo.gs/Ai8dxTa
    • So I've been making this custom modpack for a while now, I accidentally updated everything and now it wont even start the game past the launch screen. I'm sure there's a mod I need to remove or turn off--but I'm not sure which or if there is something else going on. As time has gone on (I'm not sure if this is related) but the framerates have been dropping into the single digits. I'm not sure what to do anymore except possibly start over... I've pasted the crash log it gave me below--I can't find what's causing it. Help please? https://mclo.gs/Bml06zJ
    • Hi, if you still want to see all player's commands, you can also use a plugin like Stalker Plugin for example ( see https://hangar.papermc.io/StalkerPlugin/Stalker ) with /stalk <player> you can directly see a player's commands or /stalkall you will see all player's commands (in game)
    • HOW I FOUND FAVOR IN THE HANDS OF SACLUX COMPTECH SPECIALST.    I was a victim of a phishing scam and lost 3.5 BTC to thieves. I had been investing in Bitcoin for a while and had a significant amount stored in my wallet. One day, I received an email that looked like it was from my wallet provider, asking me to log in and update my account information. I didn't think twice and entered my login credentials. Little did I know, the email was from scammers who had created a fake website that looked identical to my wallet provider's site. They stole my login credentials and drained my wallet. I was devastated. I had invested a lot of money and time into Bitcoin, and it was all gone in an instant. I tried to contact my wallet provider, but they couldn't help me recover my stolen Bitcoins. I also reported the incident to the authorities, but they couldn't do much to help. It was a hard lesson learned until I came across a testimony of a woman about how she got her stolen investment recovered by a hacker called SACLUX COMPTECH SPECIALST, I searched the name on Google and got their contact and contacted them, behold they got my stolen money back within  2 hours. Thanks to SACLUX COMPTECH SPECIALST for their great job. I invite you to visit their website at http:sacluxcomptechspecialst.com/ to learn more about their services. 
    • HOW I FOUND FAVOR IN THE HANDS OF SACLUX COMPTECH SPECIALST.    I was a victim of a phishing scam and lost 3.5 BTC to thieves. I had been investing in Bitcoin for a while and had a significant amount stored in my wallet. One day, I received an email that looked like it was from my wallet provider, asking me to log in and update my account information. I didn't think twice and entered my login credentials. Little did I know, the email was from scammers who had created a fake website that looked identical to my wallet provider's site. They stole my login credentials and drained my wallet. I was devastated. I had invested a lot of money and time into Bitcoin, and it was all gone in an instant. I tried to contact my wallet provider, but they couldn't help me recover my stolen Bitcoins. I also reported the incident to the authorities, but they couldn't do much to help. It was a hard lesson learned until I came across a testimony of a woman about how she got her stolen investment recovered by a hacker called SACLUX COMPTECH SPECIALST, I searched the name on Google and got their contact and contacted them, behold they got my stolen money back within  2 hours. Thanks to SACLUX COMPTECH SPECIALST for their great job. I invite you to visit their website at http:sacluxcomptechspecialst.com/ to learn more about their services. 
  • Topics

×
×
  • Create New...

Important Information

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