From 85be4be3950fc0a5ce9677733af655da697d3bd6 Mon Sep 17 00:00:00 2001 From: simibubi <31564874+simibubi@users.noreply.github.com> Date: Tue, 27 Jul 2021 15:25:25 +0200 Subject: [PATCH] OK Goggle - Press/Spout placement offset no longer activates when clicking the side of a block - Press/Spout placement offset no longer activates on invalid belt slopes - Block-items without innate fluid handling no longer require sneaking to be placed next to item drains - The Goggle overlay can now be activated by external add-ons - The Goggle overlay default colour now has less opacity - The Goggle overlay now fades in over a couple ticks --- log.txt | 39 +++++++++++++ .../components/AssemblyOperatorBlockItem.java | 8 ++- .../fluids/actors/ItemDrainBlock.java | 7 +++ .../goggles/GoggleOverlayRenderer.java | 57 ++++++++++++++++--- 4 files changed, 101 insertions(+), 10 deletions(-) create mode 100644 log.txt diff --git a/log.txt b/log.txt new file mode 100644 index 000000000..ce8856c74 --- /dev/null +++ b/log.txt @@ -0,0 +1,39 @@ + +- Bump minimum required Forge version to 36.2.0 +- Fixed backtank not rendering on all players +- Added config options that allow some more customization of the goggle overlay +- Fixed crash when simultaneously converting and destroying a Peculiar Bell +- Fixed Stockpile Switch not updating its signal when the inventory it's watching is moved +- Fixed Potato Cannon projectiles being able to move players in creative mode +- Fixed Lectern Controller not rendering buttons when being used by a different player +- Create now uses the milk fluid introduced by Forge +- Fixed mixer and press not checking for recipes once more after completing +- Fixed incorrect damage displayed in the tooltip of potato cannons +- Allow registering custom effect handlers for open ended pipes +- Fixed capitalization in English subtitles +- Now skipping item-drain JEI integration with missing item outputs +- Goggles icon no longer renders when menu button is set invisible +- Fixed missing blaze burner in JEI's display of heated compacting recipes +- Added support for custom namespaces in ponder +- Make ponder files use Minecraft's resource system +- Allow easily registering and generating ponder lang for any namespace +- Create now partially uses the Official Mappings provided by Mojang +- Fixed upright items rendered on depots +- Fixed invalid textures on Potato cannon model +- Mechanical Arms remember their targets when placed by Schematicannon +- Mechanical Arms will now rotate/mirror their targets when rotated/mirrored in a schematic or contraption +- Added milling recipes for beetroots and sea pickles +- Press/Spout placement offset no longer activates when clicking the side of a block +- Press/Spout placement offset no longer activates on invalid belt slopes +- Block-items without innate fluid handling no longer require sneaking to be placed next to item drains +- The Goggle overlay can now be activated by external add-ons +- The Goggle overlay default colour now has less opacity +- The Goggle overlay now fades in over a couple ticks + + +Updates to zh_cn.json by Water-Moon +Updates to ja_jp.json by CKenJa +Updates to ru_ru.json by pgkrol & Hanqnero +Updates to ko_kr.json by qkrehf2 & Red1854th +Updates to zh_tw.json by simba-fs + diff --git a/src/main/java/com/simibubi/create/content/contraptions/components/AssemblyOperatorBlockItem.java b/src/main/java/com/simibubi/create/content/contraptions/components/AssemblyOperatorBlockItem.java index 1a4e5d1b8..b39595fb7 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/components/AssemblyOperatorBlockItem.java +++ b/src/main/java/com/simibubi/create/content/contraptions/components/AssemblyOperatorBlockItem.java @@ -1,6 +1,8 @@ package com.simibubi.create.content.contraptions.components; import com.simibubi.create.AllBlocks; +import com.simibubi.create.content.contraptions.relays.belt.BeltBlock; +import com.simibubi.create.content.contraptions.relays.belt.BeltSlope; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -25,7 +27,7 @@ public class AssemblyOperatorBlockItem extends BlockItem { .getOpposite()); BlockState placedOnState = context.getLevel() .getBlockState(placedOnPos); - if (operatesOn(placedOnState)) { + if (operatesOn(placedOnState) && context.getClickedFace() == Direction.UP) { if (context.getLevel() .getBlockState(placedOnPos.above(2)) .getMaterial() @@ -44,7 +46,9 @@ public class AssemblyOperatorBlockItem extends BlockItem { } protected boolean operatesOn(BlockState placedOnState) { - return AllBlocks.BASIN.has(placedOnState) || AllBlocks.BELT.has(placedOnState) || AllBlocks.DEPOT.has(placedOnState) || AllBlocks.WEIGHTED_EJECTOR.has(placedOnState); + if (AllBlocks.BELT.has(placedOnState)) + return placedOnState.getValue(BeltBlock.SLOPE) == BeltSlope.HORIZONTAL; + return AllBlocks.BASIN.has(placedOnState) || AllBlocks.DEPOT.has(placedOnState) || AllBlocks.WEIGHTED_EJECTOR.has(placedOnState); } } diff --git a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainBlock.java b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainBlock.java index b8ce936c3..4a31fd084 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainBlock.java +++ b/src/main/java/com/simibubi/create/content/contraptions/fluids/actors/ItemDrainBlock.java @@ -12,6 +12,7 @@ import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.inventory.InventoryHelper; +import net.minecraft.item.BlockItem; import net.minecraft.item.ItemStack; import net.minecraft.pathfinding.PathType; import net.minecraft.tileentity.TileEntity; @@ -24,6 +25,7 @@ import net.minecraft.util.math.shapes.ISelectionContext; import net.minecraft.util.math.shapes.VoxelShape; import net.minecraft.world.IBlockReader; import net.minecraft.world.World; +import net.minecraftforge.fluids.capability.CapabilityFluidHandler; public class ItemDrainBlock extends Block implements IWrenchable, ITE { @@ -36,6 +38,11 @@ public class ItemDrainBlock extends Block implements IWrenchable, ITE { if (!heldItem.isEmpty()) { te.internalTank.allowInsertion(); diff --git a/src/main/java/com/simibubi/create/content/contraptions/goggles/GoggleOverlayRenderer.java b/src/main/java/com/simibubi/create/content/contraptions/goggles/GoggleOverlayRenderer.java index fa20ce412..6c7a9cf35 100644 --- a/src/main/java/com/simibubi/create/content/contraptions/goggles/GoggleOverlayRenderer.java +++ b/src/main/java/com/simibubi/create/content/contraptions/goggles/GoggleOverlayRenderer.java @@ -1,8 +1,10 @@ package com.simibubi.create.content.contraptions.goggles; import java.util.ArrayList; +import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.function.Supplier; import com.mojang.blaze3d.matrix.MatrixStack; import com.simibubi.create.AllBlocks; @@ -12,9 +14,11 @@ import com.simibubi.create.content.contraptions.components.structureMovement.IDi import com.simibubi.create.content.contraptions.components.structureMovement.piston.MechanicalPistonBlock; import com.simibubi.create.content.contraptions.components.structureMovement.piston.PistonExtensionPoleBlock; import com.simibubi.create.foundation.config.AllConfigs; +import com.simibubi.create.foundation.config.CClient; import com.simibubi.create.foundation.gui.GuiGameElement; import com.simibubi.create.foundation.gui.Theme; import com.simibubi.create.foundation.tileEntity.behaviour.ValueBox; +import com.simibubi.create.foundation.utility.ColorHelper; import com.simibubi.create.foundation.utility.Iterate; import com.simibubi.create.foundation.utility.Lang; import com.simibubi.create.foundation.utility.outliner.Outline; @@ -31,6 +35,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.Direction; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockRayTraceResult; +import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.RayTraceResult; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.ITextProperties; @@ -39,14 +44,21 @@ import net.minecraftforge.fml.client.gui.GuiUtils; public class GoggleOverlayRenderer { + private static final List> customGogglePredicates = new LinkedList<>(); private static final Map outlines = CreateClient.OUTLINER.getOutlines(); + + public static int hoverTicks = 0; + public static BlockPos lastHovered = null; public static void renderOverlay(MatrixStack ms, IRenderTypeBuffer buffer, int light, int overlay, float partialTicks) { RayTraceResult objectMouseOver = Minecraft.getInstance().hitResult; - if (!(objectMouseOver instanceof BlockRayTraceResult)) + if (!(objectMouseOver instanceof BlockRayTraceResult)) { + lastHovered = null; + hoverTicks = 0; return; + } for (OutlineEntry entry : outlines.values()) { if (!entry.isAlive()) @@ -62,8 +74,16 @@ public class GoggleOverlayRenderer { BlockPos pos = result.getBlockPos(); ItemStack headSlot = mc.player.getItemBySlot(EquipmentSlotType.HEAD); TileEntity te = world.getBlockEntity(pos); + + if (lastHovered == null || lastHovered.equals(pos)) + hoverTicks++; + else + hoverTicks = 0; + lastHovered = pos; boolean wearingGoggles = AllItems.GOGGLES.isIn(headSlot); + for (Supplier supplier : customGogglePredicates) + wearingGoggles |= supplier.get(); boolean hasGoggleInformation = te instanceof IHaveGoggleInformation; boolean hasHoveringInformation = te instanceof IHaveHoveringInformation; @@ -150,18 +170,31 @@ public class GoggleOverlayRenderer { tooltipHeight += 2; // gap between title lines and next lines } - int posX = tooltipScreen.width / 2 + AllConfigs.CLIENT.overlayOffsetX.get(); - int posY = tooltipScreen.height / 2 + AllConfigs.CLIENT.overlayOffsetY.get(); + CClient cfg = AllConfigs.CLIENT; + int posX = tooltipScreen.width / 2 + cfg.overlayOffsetX.get(); + int posY = tooltipScreen.height / 2 + cfg.overlayOffsetY.get(); posX = Math.min(posX, tooltipScreen.width - tooltipTextWidth - 20); posY = Math.min(posY, tooltipScreen.height - tooltipHeight - 20); - Boolean useCustom = AllConfigs.CLIENT.overlayCustomColor.get(); - int colorBackground = useCustom ? AllConfigs.CLIENT.overlayBackgroundColor.get() : Theme.i(Theme.Key.VANILLA_TOOLTIP_BACKGROUND); - int colorBorderTop = useCustom ? AllConfigs.CLIENT.overlayBorderColorTop.get() : Theme.i(Theme.Key.VANILLA_TOOLTIP_BORDER, true); - int colorBorderBot = useCustom ? AllConfigs.CLIENT.overlayBorderColorBot.get() : Theme.i(Theme.Key.VANILLA_TOOLTIP_BORDER, false); - GuiUtils.drawHoveringText(ms, tooltip, posX, posY, tooltipScreen.width, tooltipScreen.height, -1, colorBackground, colorBorderTop, colorBorderBot, mc.font); + float fade = MathHelper.clamp((hoverTicks + partialTicks) / 12f, 0, 1); + Boolean useCustom = cfg.overlayCustomColor.get(); + int colorBackground = useCustom ? cfg.overlayBackgroundColor.get() + : ColorHelper.applyAlpha(Theme.i(Theme.Key.VANILLA_TOOLTIP_BACKGROUND), .75f); + int colorBorderTop = + useCustom ? cfg.overlayBorderColorTop.get() : Theme.i(Theme.Key.VANILLA_TOOLTIP_BORDER, true); + int colorBorderBot = + useCustom ? cfg.overlayBorderColorBot.get() : Theme.i(Theme.Key.VANILLA_TOOLTIP_BORDER, false); + if (fade < 1) { + ms.translate((1 - fade) * Math.signum(cfg.overlayOffsetX.get() + .5f) * 4, 0, 0); + colorBackground = ColorHelper.applyAlpha(colorBackground, fade); + colorBorderTop = ColorHelper.applyAlpha(colorBorderTop, fade); + colorBorderBot = ColorHelper.applyAlpha(colorBorderBot, fade); + } + + GuiUtils.drawHoveringText(ms, tooltip, posX, posY, tooltipScreen.width, tooltipScreen.height, -1, + colorBackground, colorBorderTop, colorBorderBot, mc.font); ItemStack item = AllItems.GOGGLES.asStack(); GuiGameElement.of(item) @@ -170,6 +203,14 @@ public class GoggleOverlayRenderer { ms.popPose(); } + /** + * Use this method to add custom entry points to the goggle overay, e.g. custom + * armor, handheld alternatives, etc. + */ + public static void registerCustomGoggleCondition(Supplier condition) { + customGogglePredicates.add(condition); + } + public static final class TooltipScreen extends Screen { public TooltipScreen(ITextComponent p_i51108_1_) { super(p_i51108_1_);