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)
|
||||
{
|
||||
@@ -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);
|
||||
|
|
|
@ -197,6 +197,12 @@ public class ForgeHooksClient
|
|||
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 boolean skyInit;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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