From f6b10e75179c8237cab172d757238d1404273187 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Tue, 22 Jun 2021 16:08:14 +0800 Subject: Fix #568 --- .../shedaniel/rei/fabric/PluginDetectorImpl.java | 27 ++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'fabric/src/main/java') 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

> void loadPlugin(Class pluginClass, Consumer> consumer) { @@ -105,5 +115,22 @@ public class PluginDetectorImpl { @Environment(EnvType.CLIENT) public static void detectClientPlugins() { loadPlugin(REIClientPlugin.class, ((PluginView) PluginManager.getClientInstance())::registerPlugin); + Supplier 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, TooltipComponent>) (lines, component) -> { + try { + method.get().invoke(null, lines, component); + } catch (IllegalAccessException | InvocationTargetException e) { + throw new RuntimeException(e); + } + }, "clientTooltipComponentProvider"); } } -- cgit