diff --git a/patches/minecraft/net/minecraft/client/gui/components/toasts/ToastComponent.java.patch b/patches/minecraft/net/minecraft/client/gui/components/toasts/ToastComponent.java.patch new file mode 100644 index 0000000000..1c28e1f2a8 --- /dev/null +++ b/patches/minecraft/net/minecraft/client/gui/components/toasts/ToastComponent.java.patch @@ -0,0 +1,10 @@ +--- a/net/minecraft/client/gui/components/toasts/ToastComponent.java ++++ b/net/minecraft/client/gui/components/toasts/ToastComponent.java +@@ -103,6 +_,7 @@ + } + + public void m_94922_(Toast p_94923_) { ++ if (net.minecraftforge.client.ForgeHooksClient.onToastAdd(p_94923_)) return; + this.f_94916_.add(p_94923_); + } + diff --git a/src/main/java/net/minecraftforge/client/ForgeHooksClient.java b/src/main/java/net/minecraftforge/client/ForgeHooksClient.java index 1fe9a5f2a1..84a9025975 100755 --- a/src/main/java/net/minecraftforge/client/ForgeHooksClient.java +++ b/src/main/java/net/minecraftforge/client/ForgeHooksClient.java @@ -27,6 +27,7 @@ import net.minecraft.client.color.item.ItemColors; import net.minecraft.client.gui.Font; import net.minecraft.client.gui.GuiComponent; import net.minecraft.client.gui.components.LerpingBossEvent; +import net.minecraft.client.gui.components.toasts.Toast; import net.minecraft.client.gui.screens.ConfirmScreen; import net.minecraft.client.gui.screens.Screen; import net.minecraft.client.gui.screens.TitleScreen; @@ -128,6 +129,7 @@ import net.minecraftforge.client.event.RenderTooltipEvent; import net.minecraftforge.client.event.ScreenEvent; import net.minecraftforge.client.event.ScreenshotEvent; import net.minecraftforge.client.event.TextureStitchEvent; +import net.minecraftforge.client.event.ToastAddEvent; import net.minecraftforge.client.event.ViewportEvent; import net.minecraftforge.client.event.sound.PlaySoundEvent; import net.minecraftforge.client.extensions.common.IClientFluidTypeExtensions; @@ -1098,6 +1100,11 @@ public class ForgeHooksClient return event; } + public static boolean onToastAdd(Toast toast) + { + return MinecraftForge.EVENT_BUS.post(new ToastAddEvent(toast)); + } + public static boolean isBlockInSolidLayer(BlockState state) { var model = Minecraft.getInstance().getBlockRenderer().getBlockModel(state); diff --git a/src/main/java/net/minecraftforge/client/event/ToastAddEvent.java b/src/main/java/net/minecraftforge/client/event/ToastAddEvent.java new file mode 100644 index 0000000000..d562f1a599 --- /dev/null +++ b/src/main/java/net/minecraftforge/client/event/ToastAddEvent.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) Forge Development LLC and contributors + * SPDX-License-Identifier: LGPL-2.1-only + */ + +package net.minecraftforge.client.event; + +import net.minecraft.client.gui.components.toasts.Toast; +import net.minecraftforge.common.MinecraftForge; +import net.minecraftforge.eventbus.api.Cancelable; +import net.minecraftforge.eventbus.api.Event; +import net.minecraftforge.fml.LogicalSide; + +/** + * Fired when the client queues a {@link Toast} message to be shown onscreen. + * Toasts are small popups that appear on the top right of the screen, for certain actions such as unlocking Advancements and Recipes. + * + *

This event is {@linkplain Cancelable cancellable}, and does not {@linkplain HasResult have a result}. + * Cancelling the event stops the toast from being queued, which means it never renders.

+ * + *

This event is fired on the {@linkplain MinecraftForge#EVENT_BUS main Forge event bus}, + * only on the {@linkplain LogicalSide#CLIENT logical client}.

+ */ +@Cancelable +public class ToastAddEvent extends Event +{ + private final Toast toast; + + public ToastAddEvent(Toast toast) + { + this.toast = toast; + } + + public Toast getToast() + { + return toast; + } +}