From e44566121ed5cef11142d48eef397b9efb823593 Mon Sep 17 00:00:00 2001 From: sylv256 Date: Wed, 23 Sep 2026 04:21:55 -0400 Subject: [PATCH] refactor(26.1): `MendermanDataGenerator` multiver --- ...anDataGenerator_TagsProvider_Multiver.java | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 fabric/src/datagen/java/lgbt/greenhouse/menderman/datagen/MendermanDataGenerator_TagsProvider_Multiver.java diff --git a/fabric/src/datagen/java/lgbt/greenhouse/menderman/datagen/MendermanDataGenerator_TagsProvider_Multiver.java b/fabric/src/datagen/java/lgbt/greenhouse/menderman/datagen/MendermanDataGenerator_TagsProvider_Multiver.java new file mode 100644 index 0000000..ae08a6d --- /dev/null +++ b/fabric/src/datagen/java/lgbt/greenhouse/menderman/datagen/MendermanDataGenerator_TagsProvider_Multiver.java @@ -0,0 +1,44 @@ +package lgbt.greenhouse.menderman.datagen; + +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; + +import net.minecraft.data.tags.TagAppender; +import net.minecraft.tags.TagKey; + +import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagsProvider; + +final class MendermanDataGenerator_TagsProvider_Multiver { + // MHs for fast non-reflective access + private static final MethodHandle unbound$FabricTagsProvider$builder; + private final MethodHandle FabricTagsProvider$builder; + + static { + try { + MethodHandles.Lookup lookup = MethodHandles.privateLookupIn(FabricTagsProvider.FabricIntrinsicHolderTagsProvider.class, MethodHandles.lookup()); + + unbound$FabricTagsProvider$builder = lookup + .findVirtual( + FabricTagsProvider.FabricIntrinsicHolderTagsProvider.class, + "valueLookupBuilder", + MethodType.methodType(TagAppender.class, TagKey.class) + ); + } catch (NoSuchMethodException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + + MendermanDataGenerator_TagsProvider_Multiver(FabricTagsProvider.FabricIntrinsicHolderTagsProvider provider) { + FabricTagsProvider$builder = unbound$FabricTagsProvider$builder.bindTo(provider); + } + + @SuppressWarnings("unchecked") // checked in parameters + public TagAppender builder(TagKey tag) { + try { + return (TagAppender) FabricTagsProvider$builder.invokeExact(tag); + } catch (Throwable e) { + throw new RuntimeException(e); + } + } +} -- 2.51.2