diff --git a/src/main/java/com/simibubi/create/CreateClient.java b/src/main/java/com/simibubi/create/CreateClient.java index d14e4548c..b4c0d9d51 100644 --- a/src/main/java/com/simibubi/create/CreateClient.java +++ b/src/main/java/com/simibubi/create/CreateClient.java @@ -16,7 +16,7 @@ import com.simibubi.create.content.curiosities.weapons.PotatoCannonRenderHandler import com.simibubi.create.content.curiosities.zapper.ZapperRenderHandler; import com.simibubi.create.content.logistics.item.LinkedControllerClientHandler; import com.simibubi.create.content.logistics.trains.GlobalRailwayManager; -import com.simibubi.create.content.logistics.trains.track.TrackPlacement; +import com.simibubi.create.content.logistics.trains.track.TrackPlacementOverlay; import com.simibubi.create.content.schematics.ClientSchematicLoader; import com.simibubi.create.content.schematics.client.SchematicAndQuillHandler; import com.simibubi.create.content.schematics.client.SchematicHandler; @@ -110,7 +110,7 @@ public class CreateClient { OverlayRegistry.registerOverlayAbove(ForgeIngameGui.HOTBAR_ELEMENT, "Create's Schematics", SCHEMATIC_HANDLER.getOverlayRenderer()); OverlayRegistry.registerOverlayAbove(ForgeIngameGui.HOTBAR_ELEMENT, "Create's Toolboxes", ToolboxHandlerClient.OVERLAY); OverlayRegistry.registerOverlayAbove(ForgeIngameGui.HOTBAR_ELEMENT, "Create's Value Settings", VALUE_SETTINGS_HANDLER); - OverlayRegistry.registerOverlayAbove(ForgeIngameGui.HOTBAR_ELEMENT, "Create's Track Placement", TrackPlacement.OVERLAY); + OverlayRegistry.registerOverlayAbove(ForgeIngameGui.HOTBAR_ELEMENT, "Create's Track Placement", TrackPlacementOverlay.OVERLAY); } public static void invalidateRenderers() { diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/crank/ValveHandleBlockEntity.java b/src/main/java/com/simibubi/create/content/contraptions/components/crank/ValveHandleBlockEntity.java index 9058fdcfc..34c083f59 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/crank/ValveHandleBlockEntity.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/crank/ValveHandleBlockEntity.java @@ -86,7 +86,7 @@ public class ValveHandleBlockEntity extends HandCrankBlockEntity { super.tick(); if (inUse == 0 && cooldown > 0) cooldown--; - independentAngle = getIndependentAngle(0); + independentAngle = level.isClientSide() ? getIndependentAngle(0) : 0; } @Override diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/track/TrackPlacement.java b/src/main/java/com/simibubi/create/content/logistics/trains/track/TrackPlacement.java index 8e852252f..42238f8b3 100644 --- a/src/main/java/com/simibubi/create/content/logistics/trains/track/TrackPlacement.java +++ b/src/main/java/com/simibubi/create/content/logistics/trains/track/TrackPlacement.java @@ -6,8 +6,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import com.mojang.blaze3d.platform.Window; -import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.create.AllBlocks; import com.simibubi.create.AllSpecialTextures; import com.simibubi.create.CreateClient; @@ -18,7 +16,6 @@ import com.simibubi.create.foundation.block.ProperWaterloggedBlock; import com.simibubi.create.foundation.config.AllConfigs; import com.simibubi.create.foundation.utility.AngleHelper; import com.simibubi.create.foundation.utility.Color; -import com.simibubi.create.foundation.utility.Components; import com.simibubi.create.foundation.utility.Couple; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Lang; @@ -29,7 +26,6 @@ import com.simibubi.create.foundation.utility.animation.LerpedFloat.Chaser; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.Gui; import net.minecraft.client.player.LocalPlayer; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; @@ -38,7 +34,6 @@ import net.minecraft.core.Direction.AxisDirection; import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.nbt.Tag; -import net.minecraft.network.chat.MutableComponent; import net.minecraft.util.Mth; import net.minecraft.world.InteractionHand; import net.minecraft.world.entity.player.Inventory; @@ -46,7 +41,6 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.UseOnContext; -import net.minecraft.world.level.GameType; import net.minecraft.world.level.Level; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.EntityBlock; @@ -58,9 +52,6 @@ import net.minecraft.world.phys.HitResult.Type; import net.minecraft.world.phys.Vec3; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; -import net.minecraftforge.client.gui.ForgeIngameGui; -import net.minecraftforge.client.gui.IIngameOverlay; -import net.minecraftforge.fml.util.ObfuscationReflectionHelper; import net.minecraftforge.items.ItemHandlerHelper; public class TrackPlacement { @@ -775,38 +766,4 @@ public class TrackPlacement { .colored(color); } - @OnlyIn(Dist.CLIENT) - public static final IIngameOverlay OVERLAY = TrackPlacement::renderOverlay; - - @OnlyIn(Dist.CLIENT) - public static void renderOverlay(ForgeIngameGui gui, PoseStack poseStack, float partialTicks, int width, - int height) { - Minecraft mc = Minecraft.getInstance(); - if (mc.options.hideGui || mc.gameMode.getPlayerMode() == GameType.SPECTATOR) - return; - if (hoveringPos == null) - return; - if (cached == null || cached.curve == null || !cached.valid) - return; - if (extraTipWarmup < 4) - return; - - if (ObfuscationReflectionHelper.getPrivateValue(Gui.class, gui, - "toolHighlightTimer") instanceof Integer toolHighlightTimer && toolHighlightTimer > 0) - return; - - boolean active = mc.options.keySprint.isDown(); - MutableComponent text = Lang.translateDirect("track.hold_for_smooth_curve", Components.keybind("key.sprint") - .withStyle(active ? ChatFormatting.WHITE : ChatFormatting.GRAY)); - - Window window = mc.getWindow(); - int x = (window.getGuiScaledWidth() - gui.getFont() - .width(text)) / 2; - int y = window.getGuiScaledHeight() - 61; - Color color = new Color(0x4ADB4A).setAlpha(Mth.clamp((extraTipWarmup - 4) / 3f, 0.1f, 1)); - gui.getFont() - .draw(poseStack, text, x, y, color.getRGB()); - - } - } diff --git a/src/main/java/com/simibubi/create/content/logistics/trains/track/TrackPlacementOverlay.java b/src/main/java/com/simibubi/create/content/logistics/trains/track/TrackPlacementOverlay.java new file mode 100644 index 000000000..9ec4abb48 --- /dev/null +++ b/src/main/java/com/simibubi/create/content/logistics/trains/track/TrackPlacementOverlay.java @@ -0,0 +1,57 @@ +package com.simibubi.create.content.logistics.trains.track; + +import com.mojang.blaze3d.platform.Window; +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.create.foundation.utility.Color; +import com.simibubi.create.foundation.utility.Components; +import com.simibubi.create.foundation.utility.Lang; + +import net.minecraft.ChatFormatting; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.Gui; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.util.Mth; +import net.minecraft.world.level.GameType; +import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraftforge.client.gui.ForgeIngameGui; +import net.minecraftforge.client.gui.IIngameOverlay; +import net.minecraftforge.fml.util.ObfuscationReflectionHelper; + +public class TrackPlacementOverlay { + + @OnlyIn(Dist.CLIENT) + public static final IIngameOverlay OVERLAY = TrackPlacementOverlay::renderOverlay; + + @OnlyIn(Dist.CLIENT) + public static void renderOverlay(ForgeIngameGui gui, PoseStack poseStack, float partialTicks, int width, + int height) { + Minecraft mc = Minecraft.getInstance(); + if (mc.options.hideGui || mc.gameMode.getPlayerMode() == GameType.SPECTATOR) + return; + if (TrackPlacement.hoveringPos == null) + return; + if (TrackPlacement.cached == null || TrackPlacement.cached.curve == null || !TrackPlacement.cached.valid) + return; + if (TrackPlacement.extraTipWarmup < 4) + return; + + if (ObfuscationReflectionHelper.getPrivateValue(Gui.class, gui, + "toolHighlightTimer") instanceof Integer toolHighlightTimer && toolHighlightTimer > 0) + return; + + boolean active = mc.options.keySprint.isDown(); + MutableComponent text = Lang.translateDirect("track.hold_for_smooth_curve", Components.keybind("key.sprint") + .withStyle(active ? ChatFormatting.WHITE : ChatFormatting.GRAY)); + + Window window = mc.getWindow(); + int x = (window.getGuiScaledWidth() - gui.getFont() + .width(text)) / 2; + int y = window.getGuiScaledHeight() - 61; + Color color = new Color(0x4ADB4A).setAlpha(Mth.clamp((TrackPlacement.extraTipWarmup - 4) / 3f, 0.1f, 1)); + gui.getFont() + .draw(poseStack, text, x, y, color.getRGB()); + + } + +}