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:
parent
6b51665c42
commit
c4ca8270b9
|
@ -17,6 +17,15 @@
|
||||||
{
|
{
|
||||||
if (d2 == 0.0D)
|
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 @@
|
@@ -576,14 +577,8 @@
|
||||||
{
|
{
|
||||||
BlockPos blockpos = new BlockPos(entity);
|
BlockPos blockpos = new BlockPos(entity);
|
||||||
|
|
|
@ -196,6 +196,12 @@ public class ForgeHooksClient
|
||||||
MinecraftForge.EVENT_BUS.post(fovUpdateEvent);
|
MinecraftForge.EVENT_BUS.post(fovUpdateEvent);
|
||||||
return fovUpdateEvent.newfov;
|
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;
|
private static int skyX, skyZ;
|
||||||
|
|
||||||
|
|
|
@ -7,8 +7,8 @@ import net.minecraftforge.fml.common.eventhandler.Cancelable;
|
||||||
import net.minecraftforge.fml.common.eventhandler.Event;
|
import net.minecraftforge.fml.common.eventhandler.Event;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Event that hooks into EntityRenderer, allowing any feature to customize visual attributes of
|
* Event that hooks into EntityRenderer, allowing any feature to customize visual attributes
|
||||||
* fog the player sees.
|
* the player sees.
|
||||||
*/
|
*/
|
||||||
public abstract class EntityViewRenderEvent extends Event
|
public abstract class EntityViewRenderEvent extends Event
|
||||||
{
|
{
|
||||||
|
@ -94,4 +94,26 @@ public abstract class EntityViewRenderEvent extends Event
|
||||||
this.roll = roll;
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue