mirror of
https://github.com/Creators-of-Create/Create.git
synced 2024-12-26 15:06:42 +01:00
Playtest II
- Fix Dist crash when placing track .. Fix crash when valve ticks while powered by other sources
This commit is contained in:
parent
4360916316
commit
47dc952382
4 changed files with 60 additions and 46 deletions
|
@ -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() {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue