Browse Source

add underwater fov options

TheIllusiveC4 6 years ago
parent
commit
21e3246cf6

+ 1 - 0
docs/CHANGELOG.md

@@ -7,6 +7,7 @@ This project uses MCVERSION-MAJORMOD.MAJORAPI.MINOR.PATCH.
 ## [Unreleased]
 ### Added
 - Minimum FoV modifier value configuration option
+- Underwater FoV options
 ### Changed
 - Released bottom limits on maximum value configuration option
 

+ 21 - 0
src/main/java/c4/customfov/core/ConfigHandler.java

@@ -27,6 +27,10 @@ public class ConfigHandler {
     @Comment("Configure speed FoV settings")
     public static final Speed speed = new Speed();
 
+    @Name("Underwater")
+    @Comment("Configure underwater FoV settings")
+    public static final Underwater underwater = new Underwater();
+
     public static class Flying {
 
         @Name("Modifier")
@@ -106,6 +110,23 @@ public class ConfigHandler {
         }
     }
 
+    public static class Underwater {
+
+        @Name("Modifier")
+        @Comment("The modifier to multiply by the original FoV modifier")
+        public double modifier = 1.0D;
+
+        @Name("Maximum Value")
+        @Comment("The maximum FoV underwater modifier value")
+        @RangeDouble(min = -Double.MAX_VALUE)
+        public double maxValue = 10.0D;
+
+        @Name("Minimum Value")
+        @Comment("The minimum FoV underwater modifier value")
+        @RangeDouble(min = -Double.MAX_VALUE)
+        public double minValue = -10.0D;
+    }
+
     @Mod.EventBusSubscriber(modid = CustomFoV.MODID)
     private static class ConfigEventHandler {
 

+ 17 - 0
src/main/java/c4/customfov/core/EventHandlerClient.java

@@ -1,11 +1,15 @@
 package c4.customfov.core;
 
+import net.minecraft.block.material.Material;
+import net.minecraft.block.state.IBlockState;
 import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.ActiveRenderInfo;
 import net.minecraft.entity.SharedMonsterAttributes;
 import net.minecraft.entity.ai.attributes.IAttributeInstance;
 import net.minecraft.entity.player.EntityPlayer;
 import net.minecraft.init.Items;
 import net.minecraft.util.math.MathHelper;
+import net.minecraftforge.client.event.EntityViewRenderEvent;
 import net.minecraftforge.client.event.FOVUpdateEvent;
 import net.minecraftforge.fml.common.eventhandler.EventPriority;
 import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
@@ -17,6 +21,19 @@ public class EventHandlerClient {
         evt.setNewfov(getNewFovModifier());
     }
 
+    @SubscribeEvent(priority = EventPriority.HIGHEST)
+    public void onFoVModifier(EntityViewRenderEvent.FOVModifier evt) {
+        IBlockState iblockstate = ActiveRenderInfo.getBlockStateAtEntityViewpoint(Minecraft.getMinecraft().world, evt.getEntity(),
+                (float)evt.getRenderPartialTicks());
+
+        if (iblockstate.getMaterial() == Material.WATER) {
+            float originalModifier = 60.0F / 70.0F;
+            evt.setFOV(evt.getFOV() / originalModifier * getConfiguredValue(originalModifier,
+                    ConfigHandler.underwater.modifier, ConfigHandler.underwater.maxValue,
+                    ConfigHandler.underwater.minValue));
+        }
+    }
+
     private float getNewFovModifier() {
         EntityPlayer player = Minecraft.getMinecraft().player;
         float modifier = 1.0F;

+ 10 - 1
src/main/resources/assets/customfov/lang/en_us.lang

@@ -41,4 +41,13 @@ customfov.general.speed.effects.modifier.tooltip=The modifier to multiply by the
 customfov.general.speed.effects.maxvalue=Max Value
 customfov.general.speed.effects.maxvalue.tooltip=The maximum FoV effects modifier value
 customfov.general.speed.effects.minvalue=Min Value
-customfov.general.speed.effects.minvalue.tooltip=The minimum FoV effects modifier value
+customfov.general.speed.effects.minvalue.tooltip=The minimum FoV effects modifier value
+
+customfov.general.underwater=Underwater
+customfov.general.underwater.tooltip=Configure underwater FoV settings
+customfov.general.underwater.modifier=Modifier
+customfov.general.underwater.modifier.tooltip=The modifier to multiply by the original FoV modifier
+customfov.general.underwater.maxvalue=Max Value
+customfov.general.underwater.maxvalue.tooltip=The maximum FoV underwater modifier value
+customfov.general.underwater.minvalue=Min Value
+customfov.general.underwater.minvalue.tooltip=The minimum FoV underwater modifier value