Added EntityViewRenderEvent#FOVModifier

Enables mods to modify raw FOV directly.
Avoids modifier limit from FOVUpdateEvent.
Aware of blocks which are needed for fov change related with materials.
This commit is contained in:
Abastro 2016-02-16 22:52:41 +09:00
parent 6b51665c42
commit c4ca8270b9
4 changed files with 65 additions and 2 deletions

View File

@ -17,6 +17,15 @@
{
if (d2 == 0.0D)
{
@@ -512,7 +513,7 @@
f = f * 60.0F / 70.0F;
}
- return f;
+ return net.minecraftforge.client.ForgeHooksClient.getFOVModifier(this, entity, block, p_78481_1_, f);
}
}
@@ -576,14 +577,8 @@
{
BlockPos blockpos = new BlockPos(entity);

View File

@ -196,6 +196,12 @@ public class ForgeHooksClient
MinecraftForge.EVENT_BUS.post(fovUpdateEvent);
return fovUpdateEvent.newfov;
}
public static float getFOVModifier(EntityRenderer renderer, Entity entity, Block block, double renderPartialTicks, float fov) {
EntityViewRenderEvent.FOVModifier event = new EntityViewRenderEvent.FOVModifier(renderer, entity, block, renderPartialTicks, fov);
MinecraftForge.EVENT_BUS.post(event);
return event.getFOV();
}
private static int skyX, skyZ;

View File

@ -7,8 +7,8 @@ import net.minecraftforge.fml.common.eventhandler.Cancelable;
import net.minecraftforge.fml.common.eventhandler.Event;
/**
* Event that hooks into EntityRenderer, allowing any feature to customize visual attributes of
* fog the player sees.
* Event that hooks into EntityRenderer, allowing any feature to customize visual attributes
* the player sees.
*/
public abstract class EntityViewRenderEvent extends Event
{
@ -94,4 +94,26 @@ public abstract class EntityViewRenderEvent extends Event
this.roll = roll;
}
}
/**
* Event that allows mods to alter the raw FOV itself.
* This directly affects to the FOV without being modified.
* */
public static class FOVModifier extends EntityViewRenderEvent
{
private float fov;
public FOVModifier(EntityRenderer renderer, Entity entity, Block block, double renderPartialTicks, float fov) {
super(renderer, entity, block, renderPartialTicks);
this.setFOV(fov);
}
public float getFOV() {
return fov;
}
public void setFOV(float fov) {
this.fov = fov;
}
}
}

View File

@ -0,0 +1,26 @@
package net.minecraftforge.test;
import net.minecraft.block.material.Material;
import net.minecraftforge.client.event.EntityViewRenderEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
/** Simple mod to test fov modifier. */
@Mod(modid="fovmodifiertest", name="FOV Modifier Test", version="0.0.0")
public class FOVModifierTest {
@EventHandler
public void init(FMLInitializationEvent event)
{
MinecraftForge.EVENT_BUS.register(this);
}
@SubscribeEvent
public void getFOVModifier(EntityViewRenderEvent.FOVModifier event) {
if(event.block.getMaterial() == Material.water)
event.setFOV(event.getFOV() / 60.0f * 50.0f);
}
}