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
This commit is contained in:
parent
eea9778840
commit
85be4be395
4 changed files with 101 additions and 10 deletions
39
log.txt
Normal file
39
log.txt
Normal file
|
@ -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
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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<ItemDrainTileEntity> {
|
||||
|
||||
|
@ -36,6 +38,11 @@ public class ItemDrainBlock extends Block implements IWrenchable, ITE<ItemDrainT
|
|||
BlockRayTraceResult hit) {
|
||||
ItemStack heldItem = player.getItemInHand(handIn);
|
||||
|
||||
if (heldItem.getItem() instanceof BlockItem
|
||||
&& !heldItem.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY)
|
||||
.isPresent())
|
||||
return ActionResultType.PASS;
|
||||
|
||||
return onTileEntityUse(worldIn, pos, te -> {
|
||||
if (!heldItem.isEmpty()) {
|
||||
te.internalTank.allowInsertion();
|
||||
|
|
|
@ -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<Supplier<Boolean>> customGogglePredicates = new LinkedList<>();
|
||||
private static final Map<Object, OutlineEntry> 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())
|
||||
|
@ -63,7 +75,15 @@ public class GoggleOverlayRenderer {
|
|||
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<Boolean> 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<Boolean> condition) {
|
||||
customGogglePredicates.add(condition);
|
||||
}
|
||||
|
||||
public static final class TooltipScreen extends Screen {
|
||||
public TooltipScreen(ITextComponent p_i51108_1_) {
|
||||
super(p_i51108_1_);
|
||||
|
|
Loading…
Reference in a new issue