diff options
Diffstat (limited to 'fabric/src/main/java')
| -rw-r--r-- | fabric/src/main/java/me/shedaniel/rei/fabric/PluginDetectorImpl.java | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/fabric/src/main/java/me/shedaniel/rei/fabric/PluginDetectorImpl.java b/fabric/src/main/java/me/shedaniel/rei/fabric/PluginDetectorImpl.java index 88b373072..410b31e21 100644 --- a/fabric/src/main/java/me/shedaniel/rei/fabric/PluginDetectorImpl.java +++ b/fabric/src/main/java/me/shedaniel/rei/fabric/PluginDetectorImpl.java @@ -23,18 +23,28 @@ package me.shedaniel.rei.fabric; +import com.google.common.base.Suppliers; import com.google.common.collect.Iterables; import me.shedaniel.rei.RoughlyEnoughItemsInitializer; import me.shedaniel.rei.RoughlyEnoughItemsState; import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.common.plugins.*; +import me.shedaniel.rei.impl.ClientInternals; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.entrypoint.EntrypointContainer; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent; +import net.minecraft.world.inventory.tooltip.TooltipComponent; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.Collection; +import java.util.List; +import java.util.function.BiConsumer; import java.util.function.Consumer; +import java.util.function.Supplier; public class PluginDetectorImpl { private static <P extends REIPlugin<?>> void loadPlugin(Class<? extends P> pluginClass, Consumer<? super REIPluginProvider<P>> consumer) { @@ -105,5 +115,22 @@ public class PluginDetectorImpl { @Environment(EnvType.CLIENT) public static void detectClientPlugins() { loadPlugin(REIClientPlugin.class, ((PluginView<REIClientPlugin>) PluginManager.getClientInstance())::registerPlugin); + Supplier<Method> method = Suppliers.memoize(() -> { + String methodName = FabricLoader.getInstance().getMappingResolver().mapMethodName("intermediary", "net.minecraft.class_437", "method_32635", "(Ljava/util/List;Lnet/minecraft/class_5632;)V"); + try { + Method declaredMethod = Screen.class.getDeclaredMethod(methodName, List.class, TooltipComponent.class); + if (declaredMethod != null) declaredMethod.setAccessible(true); + return declaredMethod; + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } + }); + ClientInternals.attachInstance((BiConsumer<List<ClientTooltipComponent>, TooltipComponent>) (lines, component) -> { + try { + method.get().invoke(null, lines, component); + } catch (IllegalAccessException | InvocationTargetException e) { + throw new RuntimeException(e); + } + }, "clientTooltipComponentProvider"); } } |
