diff --git a/src/generated/resources/assets/gtceu/lang/en_ud.json b/src/generated/resources/assets/gtceu/lang/en_ud.json index 0d9e0086a6a..d987ec27c6c 100644 --- a/src/generated/resources/assets/gtceu/lang/en_ud.json +++ b/src/generated/resources/assets/gtceu/lang/en_ud.json @@ -1765,6 +1765,8 @@ "config.gtceu.option.batchDuration": "uoıʇɐɹnᗡɥɔʇɐq", "config.gtceu.option.bedrockOreDistance": "ǝɔuɐʇsıᗡǝɹOʞɔoɹpǝq", "config.gtceu.option.bedrockOreDropTagPrefix": "xıɟǝɹԀbɐ⟘doɹᗡǝɹOʞɔoɹpǝq", + "config.gtceu.option.blockFovChange": "ǝbuɐɥƆʌoℲʞɔoןq", + "config.gtceu.option.blockSpeedChange": "ǝbuɐɥƆpǝǝdSʞɔoןq", "config.gtceu.option.borderColor": "ɹoןoƆɹǝpɹoq", "config.gtceu.option.bronzeBoilerHeatSpeed": "pǝǝdSʇɐǝHɹǝןıoᗺǝzuoɹq", "config.gtceu.option.bronzeBoilerMaxTemperature": "ǝɹnʇɐɹǝdɯǝ⟘xɐWɹǝןıoᗺǝzuoɹq", diff --git a/src/generated/resources/assets/gtceu/lang/en_us.json b/src/generated/resources/assets/gtceu/lang/en_us.json index 67ddba4f02e..5c738ba65cb 100644 --- a/src/generated/resources/assets/gtceu/lang/en_us.json +++ b/src/generated/resources/assets/gtceu/lang/en_us.json @@ -1765,6 +1765,8 @@ "config.gtceu.option.batchDuration": "batchDuration", "config.gtceu.option.bedrockOreDistance": "bedrockOreDistance", "config.gtceu.option.bedrockOreDropTagPrefix": "bedrockOreDropTagPrefix", + "config.gtceu.option.blockFovChange": "blockFovChange", + "config.gtceu.option.blockSpeedChange": "blockSpeedChange", "config.gtceu.option.borderColor": "borderColor", "config.gtceu.option.bronzeBoilerHeatSpeed": "bronzeBoilerHeatSpeed", "config.gtceu.option.bronzeBoilerMaxTemperature": "bronzeBoilerMaxTemperature", diff --git a/src/main/java/com/gregtechceu/gtceu/client/ClientEventListener.java b/src/main/java/com/gregtechceu/gtceu/client/ClientEventListener.java index fd7ab140609..b0d86aa9b8a 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/ClientEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/client/ClientEventListener.java @@ -11,16 +11,15 @@ import com.gregtechceu.gtceu.client.renderer.cover.FacadeCoverRenderer; import com.gregtechceu.gtceu.client.util.TooltipHelper; import com.gregtechceu.gtceu.common.commands.GTClientCommands; +import com.gregtechceu.gtceu.config.ConfigHolder; import com.gregtechceu.gtceu.core.mixins.client.AbstractClientPlayerAccessor; import com.gregtechceu.gtceu.core.mixins.client.PlayerInfoAccessor; -import com.gregtechceu.gtceu.data.recipe.CustomTags; import com.gregtechceu.gtceu.integration.map.ClientCacheManager; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.core.BlockPos; import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.Mth; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.ai.attributes.AttributeInstance; import net.minecraft.world.entity.ai.attributes.AttributeModifier; @@ -92,14 +91,21 @@ public static void updateFOV(ComputeFovModifierEvent event) { AttributeInstance moveSpeed = player.getAttribute(Attributes.MOVEMENT_SPEED); if (moveSpeed == null || moveSpeed.getModifier(BlockAttributes.BLOCK_SPEED_BOOST) == null) return; + boolean flying = player.getAbilities().flying; + float originalFov = flying ? 1.1F : 1.0F; + float walkSpeed = player.getAbilities().getWalkingSpeed(); - float multi = 1; - var state = player.level().getBlockState(player.getOnPos()); + originalFov *= ((float) moveSpeed.getBaseValue() / walkSpeed + 1.0F) / 2.0F; + if (walkSpeed == 0.0F || Float.isNaN(originalFov) || + Float.isInfinite(originalFov)) { + return; + } - if (state.is(CustomTags.VERY_FAST_WALKABLE_BLOCKS)) multi /= 1.2F; + float newFov = flying ? 1.1F : 1.0F; + newFov *= ((float) getValueWithoutWalkingBoost(moveSpeed) / walkSpeed + 1.0F) / + 2.0F; - multi = (float) Mth.lerp(Minecraft.getInstance().options.fovEffectScale().get(), 1.0F, multi); - event.setNewFovModifier(event.getNewFovModifier() * multi); + event.setNewFovModifier(originalFov / newFov); } private static double getValueWithoutWalkingBoost(AttributeInstance attrib) { @@ -111,7 +117,8 @@ private static double getValueWithoutWalkingBoost(AttributeInstance attrib) { double applied = base; for (AttributeModifier mod : attrib.getModifiers(AttributeModifier.Operation.MULTIPLY_BASE)) { - if (mod.getId() == BlockAttributes.BLOCK_SPEED_BOOST) continue; + if (mod.getId() == BlockAttributes.BLOCK_SPEED_BOOST || !ConfigHolder.INSTANCE.client.blockFovChange) + continue; applied += base * mod.getAmount(); } diff --git a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java index aa13751d7bd..13d197c3215 100644 --- a/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/common/CommonEventListener.java @@ -390,6 +390,8 @@ public static void onEntityLivingFallEvent(LivingFallEvent event) { public static void playerTickEvent(TickEvent.PlayerTickEvent event) { Player player = event.player; if (event.phase == TickEvent.Phase.START && !player.level().isClientSide) { + if (!ConfigHolder.INSTANCE.gameplay.blockSpeedChange) return; + var speedAttrib = player.getAttribute(Attributes.MOVEMENT_SPEED); if (speedAttrib == null) return; var speedMod = speedAttrib.getModifier(BlockAttributes.BLOCK_SPEED_BOOST); diff --git a/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java b/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java index 8e617deda31..402d967343c 100644 --- a/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java +++ b/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java @@ -814,6 +814,10 @@ public static class GameplayConfigs { @Configurable.Comment({ "List of domains that are allowed in the image module" }) public String[] allowedImageDomains = new String[] { "imgur.com", "discord.com", "github.com", "raw.githubusercontent.com" }; + @Configurable + @Configurable.Comment({ "Whether or not speed-modifying blocks should change player's speed." }) + @Configurable.Synchronized + public boolean blockSpeedChange = true; } public static class ClientConfigs { @@ -869,6 +873,9 @@ public static class ClientConfigs { public Renderers renderer = new Renderers(); @Configurable public TankItemFluidPreview tankItemFluidPreview = new TankItemFluidPreview(); + @Configurable + @Configurable.Comment({ "Whether or not speed-modifying blocks should change player's FOV." }) + public boolean blockFovChange = true; public int getDefaultPaintingColor() { // OR with full alpha to differentiate from a machine that's painted white (map color 0xffffff)