diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/forge_registry_lambda/RegistryObjectMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/forge_registry_lambda/RegistryObjectMixin.java new file mode 100644 index 00000000..ff40d1f4 --- /dev/null +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/perf/forge_registry_lambda/RegistryObjectMixin.java @@ -0,0 +1,30 @@ +package org.embeddedt.modernfix.forge.mixin.perf.forge_registry_lambda; + +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.fml.RegistryObject; +import net.minecraftforge.registries.IForgeRegistryEntry; +import org.jetbrains.annotations.Nullable; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + +@Mixin(value = RegistryObject.class, remap = false) +public class RegistryObjectMixin> { + @Shadow private @Nullable T value; + + @Shadow @Final private ResourceLocation name; + + /** + * @author embeddedt + * @reason avoid lambda allocation on every call + */ + @Overwrite + public T get() { + T ret = this.value; + if(ret == null) { + throw new NullPointerException("Registry Object not present: " + this.name); + } + return ret; + } +}