Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Featured Replies

Posted

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();
}
}
}

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.

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/

  • Author

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

When I try it I get field not accessible errors. I'm really not sure how your reflection code is working. Is the field private for you? I'm not strong on reflection but I really, really though you have to set a public field to accessible before you can set it...

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

  • Author

hmm it works correctly for me, the field is private for me. This is the first time im using reflection, and for some reason it works just fine, no errors on my end that I can see

  • Author

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]

  • Author

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();
}

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...

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.