diff --git a/common/src/main/java/dev/architectury/event/events/client/ClientTooltipEvent.java b/common/src/main/java/dev/architectury/event/events/client/ClientTooltipEvent.java index 4fd0999c..80a91cc2 100644 --- a/common/src/main/java/dev/architectury/event/events/client/ClientTooltipEvent.java +++ b/common/src/main/java/dev/architectury/event/events/client/ClientTooltipEvent.java @@ -52,7 +52,7 @@ public interface ClientTooltipEvent { /** * @see RenderModifyColor#renderTooltip(GuiGraphics, int, int, ColorContext) */ - // Event RENDER_MODIFY_COLOR = EventFactory.createLoop(); + Event RENDER_MODIFY_COLOR = EventFactory.createLoop(); static AdditionalContexts additionalContexts() { return TooltipAdditionalContextsImpl.get(); diff --git a/common/src/main/java/dev/architectury/impl/TooltipEventColorContextImpl.java b/common/src/main/java/dev/architectury/impl/TooltipEventColorContextImpl.java index 009b7dfd..7de4c76f 100644 --- a/common/src/main/java/dev/architectury/impl/TooltipEventColorContextImpl.java +++ b/common/src/main/java/dev/architectury/impl/TooltipEventColorContextImpl.java @@ -24,6 +24,7 @@ import org.jetbrains.annotations.ApiStatus; @ApiStatus.Internal public class TooltipEventColorContextImpl implements ClientTooltipEvent.ColorContext { + public static final ThreadLocal CONTEXT = ThreadLocal.withInitial(TooltipEventColorContextImpl::new); private int backgroundColor; private int outlineGradientTopColor; private int outlineGradientBottomColor; diff --git a/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinGuiGraphics.java b/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinGuiGraphics.java index bc76ce3d..afbcafef 100644 --- a/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinGuiGraphics.java +++ b/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinGuiGraphics.java @@ -40,8 +40,6 @@ import java.util.List; public abstract class MixinGuiGraphics { @Unique private static ThreadLocal tooltipPositionContext = ThreadLocal.withInitial(TooltipEventPositionContextImpl::new); - @Unique - private static ThreadLocal tooltipColorContext = ThreadLocal.withInitial(TooltipEventColorContextImpl::new); @Inject(method = "renderTooltip(Lnet/minecraft/client/gui/Font;Lnet/minecraft/world/item/ItemStack;II)V", at = @At("HEAD")) private void preRenderTooltipItem(Font font, ItemStack stack, int x, int y, CallbackInfo ci) { @@ -56,14 +54,14 @@ public abstract class MixinGuiGraphics { @Inject(method = "renderTooltipInternal", at = @At("HEAD"), cancellable = true) private void renderTooltip(Font font, List list, int x, int y, ClientTooltipPositioner positioner, CallbackInfo ci) { if (!list.isEmpty()) { - var colorContext = tooltipColorContext.get(); + var colorContext = TooltipEventColorContextImpl.CONTEXT.get(); colorContext.reset(); var positionContext = tooltipPositionContext.get(); positionContext.reset(x, y); if (ClientTooltipEvent.RENDER_PRE.invoker().renderTooltip((GuiGraphics) (Object) this, list, x, y).isFalse()) { ci.cancel(); } else { - // ClientTooltipEvent.RENDER_MODIFY_COLOR.invoker().renderTooltip((GuiGraphics) (Object) this, x, y, colorContext); + ClientTooltipEvent.RENDER_MODIFY_COLOR.invoker().renderTooltip((GuiGraphics) (Object) this, x, y, colorContext); ClientTooltipEvent.RENDER_MODIFY_POSITION.invoker().renderTooltip((GuiGraphics) (Object) this, positionContext); } } @@ -80,19 +78,4 @@ public abstract class MixinGuiGraphics { private int modifyTooltipY(int original) { return tooltipPositionContext.get().getTooltipY(); } - -// @ModifyConstant(method = "renderTooltipInternal(Lnet/minecraft/client/gui/Font;Ljava/util/List;IILnet/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipPositioner;)V", constant = @Constant(intValue = 0xf0100010)) -// private int modifyTooltipBackgroundColor(int original) { -// return tooltipColorContext.get().getBackgroundColor(); -// } -// -// @ModifyConstant(method = "renderTooltipInternal(Lnet/minecraft/client/gui/Font;Ljava/util/List;IILnet/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipPositioner;)V", constant = @Constant(intValue = 0x505000ff)) -// private int modifyTooltipOutlineGradientTopColor(int original) { -// return tooltipColorContext.get().getOutlineGradientTopColor(); -// } -// -// @ModifyConstant(method = "renderTooltipInternal(Lnet/minecraft/client/gui/Font;Ljava/util/List;IILnet/minecraft/client/gui/screens/inventory/tooltip/ClientTooltipPositioner;)V", constant = @Constant(intValue = 0x5028007f)) -// private int modifyTooltipOutlineGradientBottomColor(int original) { -// return tooltipColorContext.get().getOutlineGradientBottomColor(); -// } } diff --git a/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinTooltipRenderUtil.java b/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinTooltipRenderUtil.java new file mode 100644 index 00000000..cfd04602 --- /dev/null +++ b/fabric/src/main/java/dev/architectury/mixin/fabric/client/MixinTooltipRenderUtil.java @@ -0,0 +1,44 @@ +/* + * This file is part of architectury. + * Copyright (C) 2020, 2021, 2022 architectury + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package dev.architectury.mixin.fabric.client; + +import dev.architectury.impl.TooltipEventColorContextImpl; +import net.minecraft.client.gui.screens.inventory.tooltip.TooltipRenderUtil; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.Constant; +import org.spongepowered.asm.mixin.injection.ModifyConstant; + +@Mixin(TooltipRenderUtil.class) +public abstract class MixinTooltipRenderUtil { + @ModifyConstant(method = "renderTooltipBackground", constant = @Constant(intValue = 0xf0100010)) + private static int modifyTooltipBackgroundColor(int original) { + return TooltipEventColorContextImpl.CONTEXT.get().getBackgroundColor(); + } + + @ModifyConstant(method = "renderTooltipBackground", constant = @Constant(intValue = 0x505000ff)) + private static int modifyTooltipOutlineGradientTopColor(int original) { + return TooltipEventColorContextImpl.CONTEXT.get().getOutlineGradientTopColor(); + } + + @ModifyConstant(method = "renderTooltipBackground", constant = @Constant(intValue = 0x5028007f)) + private static int modifyTooltipOutlineGradientBottomColor(int original) { + return TooltipEventColorContextImpl.CONTEXT.get().getOutlineGradientBottomColor(); + } +} diff --git a/fabric/src/main/resources/architectury.mixins.json b/fabric/src/main/resources/architectury.mixins.json index 882e4f80..f8688e50 100644 --- a/fabric/src/main/resources/architectury.mixins.json +++ b/fabric/src/main/resources/architectury.mixins.json @@ -20,6 +20,7 @@ "client.MixinMouseHandler", "client.MixinMultiPlayerGameMode", "client.MixinScreen", + "client.MixinTooltipRenderUtil" ], "mixins": [ "BiomeAccessor", diff --git a/forge/src/main/java/dev/architectury/event/forge/EventHandlerImplClient.java b/forge/src/main/java/dev/architectury/event/forge/EventHandlerImplClient.java index c9345d25..97edb06a 100644 --- a/forge/src/main/java/dev/architectury/event/forge/EventHandlerImplClient.java +++ b/forge/src/main/java/dev/architectury/event/forge/EventHandlerImplClient.java @@ -172,7 +172,6 @@ public class EventHandlerImplClient { ClientRecipeUpdateEvent.EVENT.invoker().update(event.getRecipeManager()); } - private static final ThreadLocal tooltipColorContext = ThreadLocal.withInitial(TooltipEventColorContextImpl::new); private static final ThreadLocal tooltipPositionContext = ThreadLocal.withInitial(TooltipEventPositionContextImpl::new); @SubscribeEvent(priority = EventPriority.HIGH) @@ -202,12 +201,12 @@ public class EventHandlerImplClient { ClientTooltipEvent.additionalContexts().setItem(event.getItemStack()); try { - TooltipEventColorContextImpl colorContext = tooltipColorContext.get(); + TooltipEventColorContextImpl colorContext = TooltipEventColorContextImpl.CONTEXT.get(); colorContext.reset(); colorContext.setBackgroundColor(event.getBackgroundStart()); colorContext.setOutlineGradientTopColor(event.getBorderStart()); colorContext.setOutlineGradientBottomColor(event.getBorderEnd()); - // ClientTooltipEvent.RENDER_MODIFY_COLOR.invoker().renderTooltip(graphics, event.getX(), event.getY(), colorContext); + ClientTooltipEvent.RENDER_MODIFY_COLOR.invoker().renderTooltip(graphics, event.getX(), event.getY(), colorContext); event.setBackground(colorContext.getBackgroundColor()); event.setBorderEnd(colorContext.getOutlineGradientBottomColor()); event.setBorderStart(colorContext.getOutlineGradientTopColor()); diff --git a/gradle.properties b/gradle.properties index 4729a204..14a0bc9b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ artifact_type=release archives_base_name=architectury archives_base_name_snapshot=architectury-snapshot -base_version=9.0 +base_version=9.1 maven_group=dev.architectury fabric_loader_version=0.14.21 diff --git a/testmod-common/src/main/java/dev/architectury/test/events/DebugEvents.java b/testmod-common/src/main/java/dev/architectury/test/events/DebugEvents.java index ad347247..4a36ef71 100644 --- a/testmod-common/src/main/java/dev/architectury/test/events/DebugEvents.java +++ b/testmod-common/src/main/java/dev/architectury/test/events/DebugEvents.java @@ -350,6 +350,11 @@ public class DebugEvents { TestMod.SINK.accept("Screen has been changed to " + toSimpleName(screen)); return CompoundEventResult.pass(); }); + ClientTooltipEvent.RENDER_MODIFY_COLOR.register((matrices, x, y, context) -> { + context.setBackgroundColor(0xf0ffeded); + context.setOutlineGradientTopColor(0xf0ff5c5c); + context.setOutlineGradientBottomColor(0xf0f74d4d); + }); } private static String chunkPos(int x, int z) {