From f542116452de0e4c0a304546e0fbc1b5ab0bd974 Mon Sep 17 00:00:00 2001 From: Sakura Date: Sun, 17 May 2026 20:08:10 +0300 Subject: [PATCH 1/5] commit --- .../com/gregtechceu/gtceu/client/ClientEventListener.java | 3 +++ .../com/gregtechceu/gtceu/common/CommonEventListener.java | 2 ++ .../java/com/gregtechceu/gtceu/config/ConfigHolder.java | 6 ++++++ 3 files changed, 11 insertions(+) diff --git a/src/main/java/com/gregtechceu/gtceu/client/ClientEventListener.java b/src/main/java/com/gregtechceu/gtceu/client/ClientEventListener.java index fd7ab140609..51fa97c04c3 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/ClientEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/client/ClientEventListener.java @@ -11,6 +11,7 @@ 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; @@ -88,6 +89,8 @@ public static void onPlayerRender(RenderPlayerEvent.Pre event) { @SubscribeEvent public static void updateFOV(ComputeFovModifierEvent event) { + if (!ConfigHolder.INSTANCE.client.blockFovChange) return; + Player player = event.getPlayer(); AttributeInstance moveSpeed = player.getAttribute(Attributes.MOVEMENT_SPEED); 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..7cde6eca5e7 100644 --- a/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java +++ b/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java @@ -814,6 +814,9 @@ 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." }) + public boolean blockSpeedChange = true; } public static class ClientConfigs { @@ -869,6 +872,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) From f7c2d321f4f28d4c613975b330aa3925fd2acdef Mon Sep 17 00:00:00 2001 From: Sakura Date: Sun, 17 May 2026 20:33:56 +0300 Subject: [PATCH 2/5] fix and lang --- src/generated/resources/assets/gtceu/lang/en_ud.json | 2 ++ src/generated/resources/assets/gtceu/lang/en_us.json | 2 ++ .../com/gregtechceu/gtceu/client/ClientEventListener.java | 5 ++--- 3 files changed, 6 insertions(+), 3 deletions(-) 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 51fa97c04c3..e0cc017f0f0 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/ClientEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/client/ClientEventListener.java @@ -89,8 +89,6 @@ public static void onPlayerRender(RenderPlayerEvent.Pre event) { @SubscribeEvent public static void updateFOV(ComputeFovModifierEvent event) { - if (!ConfigHolder.INSTANCE.client.blockFovChange) return; - Player player = event.getPlayer(); AttributeInstance moveSpeed = player.getAttribute(Attributes.MOVEMENT_SPEED); @@ -99,7 +97,8 @@ public static void updateFOV(ComputeFovModifierEvent event) { float multi = 1; var state = player.level().getBlockState(player.getOnPos()); - if (state.is(CustomTags.VERY_FAST_WALKABLE_BLOCKS)) multi /= 1.2F; + if (!ConfigHolder.INSTANCE.client.blockFovChange) multi /= 1.3F; + else if (state.is(CustomTags.VERY_FAST_WALKABLE_BLOCKS)) multi /= 1.2F; multi = (float) Mth.lerp(Minecraft.getInstance().options.fovEffectScale().get(), 1.0F, multi); event.setNewFovModifier(event.getNewFovModifier() * multi); From df425d2576095a9b463019630f3365230058efac Mon Sep 17 00:00:00 2001 From: Sakura Date: Sun, 17 May 2026 21:06:30 +0300 Subject: [PATCH 3/5] sync --- src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java b/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java index 7cde6eca5e7..402d967343c 100644 --- a/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java +++ b/src/main/java/com/gregtechceu/gtceu/config/ConfigHolder.java @@ -816,6 +816,7 @@ public static class GameplayConfigs { "raw.githubusercontent.com" }; @Configurable @Configurable.Comment({ "Whether or not speed-modifying blocks should change player's speed." }) + @Configurable.Synchronized public boolean blockSpeedChange = true; } From a0c254838a4fc4ca64011d6df9d364bd088a5e11 Mon Sep 17 00:00:00 2001 From: Sakura Date: Mon, 18 May 2026 01:32:44 +0300 Subject: [PATCH 4/5] improvement --- .../gtceu/client/ClientEventListener.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/client/ClientEventListener.java b/src/main/java/com/gregtechceu/gtceu/client/ClientEventListener.java index e0cc017f0f0..1b6b4e34eb0 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/ClientEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/client/ClientEventListener.java @@ -93,15 +93,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 (!ConfigHolder.INSTANCE.client.blockFovChange) multi /= 1.3F; - else 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) { @@ -113,7 +119,7 @@ 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(); } From aab72207941651e40513bfd277059a606f02d7dd Mon Sep 17 00:00:00 2001 From: Sakura Date: Wed, 20 May 2026 15:53:08 +0300 Subject: [PATCH 5/5] spotless --- .../com/gregtechceu/gtceu/client/ClientEventListener.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/gregtechceu/gtceu/client/ClientEventListener.java b/src/main/java/com/gregtechceu/gtceu/client/ClientEventListener.java index 1b6b4e34eb0..b0d86aa9b8a 100644 --- a/src/main/java/com/gregtechceu/gtceu/client/ClientEventListener.java +++ b/src/main/java/com/gregtechceu/gtceu/client/ClientEventListener.java @@ -14,14 +14,12 @@ 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; @@ -119,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 || !ConfigHolder.INSTANCE.client.blockFovChange) continue; + if (mod.getId() == BlockAttributes.BLOCK_SPEED_BOOST || !ConfigHolder.INSTANCE.client.blockFovChange) + continue; applied += base * mod.getAmount(); }