Playtest II

- Fix Dist crash when placing track
.. Fix crash when valve ticks while powered by other sources
This commit is contained in:
simibubi 2023-04-09 18:31:42 +02:00
parent 4360916316
commit 47dc952382
4 changed files with 60 additions and 46 deletions

View file

@ -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() {

View file

@ -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

View file

@ -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());
}
}

View file

@ -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());
}
}