// Path: src/main/java/com/openmodloader/core/event/GuiEvent.java
// public abstract class GuiEvent<T extends GuiScreen> implements IEvent {
//     protected final T gui;
// 
//     public GuiEvent(T gui) {
//         this.gui = gui;
//     }
// 
//     public T getGui() {
//         return gui;
//     }
// 
//     public static class Open<T extends GuiScreen> extends GuiEvent<T> {
//         public Open(T gui) {
//             super(gui);
//         }
// 
//         @Override
//         public IEventTarget<?> makeTarget() {
//             return target(gui.getClass());
//         }
// 
//         public static <T extends GuiScreen> IEventTarget<Open<T>> target(Class<T> target) {
//             return GenericEventTarget.of(Open.class, target);
//         }
// 
//         public static <T extends GuiScreen> IEventTarget<Open<T>> target() {
//             return GenericEventTarget.of(Open.class, GuiScreen.class);
//         }
//     }
// 
//     public static class Draw<T extends GuiScreen> extends GuiEvent<T> {
//         protected final TextRenderer textRenderer;
// 
//         public Draw(T gui, TextRenderer textRenderer) {
//             super(gui);
//             this.textRenderer = textRenderer;
//         }
// 
//         public TextRenderer getTextRenderer() {
//             return textRenderer;
//         }
// 
//         @Override
//         public IEventTarget<?> makeTarget() {
//             return target(gui.getClass());
//         }
// 
//         public static <T extends GuiScreen> IEventTarget<Draw<T>> target(Class<T> target) {
//             return GenericEventTarget.of(Draw.class, target);
//         }
// 
//         public static <T extends GuiScreen> IEventTarget<Draw<T>> target() {
//             return GenericEventTarget.of(Draw.class, GuiScreen.class);
//         }
//     }
// }
// 
// Path: src/main/java/com/openmodloader/loader/OpenModLoader.java
// public final class OpenModLoader {
//     public static final Version VERSION = Version.valueOf("1.0.0");
// 
//     private static Logger LOGGER = LogManager.getFormatterLogger(OpenModLoader.class);
// 
//     private final ImmutableList<IModReporter> modReporters;
//     private final ImmutableMap<String, ILanguageAdapter> languageAdapters;
// 
//     private static OpenModLoader instance;
//     private static IGameContext context;
// 
//     private IEventDispatcher eventDispatcher = VoidEventDispatcher.INSTANCE;
// 
//     private ModContext installedModContext;
//     private ModContext modContext;
// 
//     OpenModLoader(ImmutableList<IModReporter> modReporters, ImmutableMap<String, ILanguageAdapter> languageAdapters) {
//         this.modReporters = modReporters;
//         this.languageAdapters = languageAdapters;
//     }
// 
//     public static void offerContext(IGameContext context) {
//         if (OpenModLoader.context != null) {
//             throw new IllegalStateException("OmlContext has already been initialized");
//         }
//         OpenModLoader.context = context;
//     }
// 
//     public static void offerInstance(OpenModLoader instance) {
//         if (OpenModLoader.instance != null) {
//             throw new IllegalStateException("OpenModLoader has already been initialized!");
//         }
//         OpenModLoader.instance = instance;
//     }
// 
//     public static OpenModLoader get() {
//         if (instance == null) {
//             throw new IllegalStateException("OpenModLoader not yet initialized!");
//         }
//         return instance;
//     }
// 
//     public static IGameContext getContext() {
//         return context;
//     }
// 
//     public IEventDispatcher getEventDispatcher() {
//         return eventDispatcher;
//     }
// 
//     @Nullable
//     public ModContext getInstalledModContext() {
//         return installedModContext;
//     }
// 
//     @Nullable
//     public ModContext getModContext() {
//         return modContext;
//     }
// 
//     public void initialize() {
//         offerInstance(this);
// 
//         Collection<ModCandidate> installedCandidates = collectModCandidates();
//         LOGGER.info("Collected {} mod candidates", installedCandidates.size());
// 
//         List<Mod> installedMods = installedCandidates.stream()
//                 .map(ModCandidate::construct)
//                 .collect(Collectors.toList());
// 
//         List<Mod> globalMods = installedMods.stream()
//                 .filter(Mod::isGlobal)
//                 .collect(Collectors.toList());
// 
//         installedModContext = new ModContext(installedMods);
//         modContext = new ModContext(globalMods);
// 
//         eventDispatcher = modContext.buildEventDispatcher();
// 
//         for (Registry<?> registry : Registry.REGISTRIES) {
//             if (registry instanceof IdRegistry) {
//                 initializeRegistry((IdRegistry<?>) registry);
//             }
//         }
//     }
// 
//     private Collection<ModCandidate> collectModCandidates() {
//         ModReportCollector reportCollector = new ModReportCollector();
//         ModConstructor constructor = new ModConstructor(this.languageAdapters);
// 
//         for (IModReporter reporter : modReporters) {
//             reporter.apply(reportCollector, constructor);
//         }
// 
//         return reportCollector.getCandidates();
//     }
// 
//     private <T> void initializeRegistry(IdRegistry<T> registry) {
//         for (IRegistrationConfig config : installedModContext.getRegistrationConfigs()) {
//             config.registerEntries(registry);
//         }
//     }
// }


import com.openmodloader.core.event.GuiEvent;
import com.openmodloader.loader.OpenModLoader;
import me.modmuss50.fusion.api.Mixin;
import me.modmuss50.fusion.api.Rewrite;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.render.text.TextRenderer;
package com.openmodloader.loader.mixin;


@Mixin(GuiScreen.class)
public abstract class MixinGuiScreen {
    protected TextRenderer textRenderer;

    @Rewrite(behavior = Rewrite.Behavior.END)
    public void draw(int mouseX, int mouseY, float aFloat3) {
// Path: src/main/java/com/openmodloader/core/event/GuiEvent.java
// public abstract class GuiEvent<T extends GuiScreen> implements IEvent {
//     protected final T gui;
// 
//     public GuiEvent(T gui) {
//         this.gui = gui;
//     }
// 
//     public T getGui() {
//         return gui;
//     }
// 
//     public static class Open<T extends GuiScreen> extends GuiEvent<T> {
//         public Open(T gui) {
//             super(gui);
//         }
// 
//         @Override
//         public IEventTarget<?> makeTarget() {
//             return target(gui.getClass());
//         }
// 
//         public static <T extends GuiScreen> IEventTarget<Open<T>> target(Class<T> target) {
//             return GenericEventTarget.of(Open.class, target);
//         }
// 
//         public static <T extends GuiScreen> IEventTarget<Open<T>> target() {
//             return GenericEventTarget.of(Open.class, GuiScreen.class);
//         }
//     }
// 
//     public static class Draw<T extends GuiScreen> extends GuiEvent<T> {
//         protected final TextRenderer textRenderer;
// 
//         public Draw(T gui, TextRenderer textRenderer) {
//             super(gui);
//             this.textRenderer = textRenderer;
//         }
// 
//         public TextRenderer getTextRenderer() {
//             return textRenderer;
//         }
// 
//         @Override
//         public IEventTarget<?> makeTarget() {
//             return target(gui.getClass());
//         }
// 
//         public static <T extends GuiScreen> IEventTarget<Draw<T>> target(Class<T> target) {
//             return GenericEventTarget.of(Draw.class, target);
//         }
// 
//         public static <T extends GuiScreen> IEventTarget<Draw<T>> target() {
//             return GenericEventTarget.of(Draw.class, GuiScreen.class);
//         }
//     }
// }
// 
// Path: src/main/java/com/openmodloader/loader/OpenModLoader.java
// public final class OpenModLoader {
//     public static final Version VERSION = Version.valueOf("1.0.0");
// 
//     private static Logger LOGGER = LogManager.getFormatterLogger(OpenModLoader.class);
// 
//     private final ImmutableList<IModReporter> modReporters;
//     private final ImmutableMap<String, ILanguageAdapter> languageAdapters;
// 
//     private static OpenModLoader instance;
//     private static IGameContext context;
// 
//     private IEventDispatcher eventDispatcher = VoidEventDispatcher.INSTANCE;
// 
//     private ModContext installedModContext;
//     private ModContext modContext;
// 
//     OpenModLoader(ImmutableList<IModReporter> modReporters, ImmutableMap<String, ILanguageAdapter> languageAdapters) {
//         this.modReporters = modReporters;
//         this.languageAdapters = languageAdapters;
//     }
// 
//     public static void offerContext(IGameContext context) {
//         if (OpenModLoader.context != null) {
//             throw new IllegalStateException("OmlContext has already been initialized");
//         }
//         OpenModLoader.context = context;
//     }
// 
//     public static void offerInstance(OpenModLoader instance) {
//         if (OpenModLoader.instance != null) {
//             throw new IllegalStateException("OpenModLoader has already been initialized!");
//         }
//         OpenModLoader.instance = instance;
//     }
// 
//     public static OpenModLoader get() {
//         if (instance == null) {
//             throw new IllegalStateException("OpenModLoader not yet initialized!");
//         }
//         return instance;
//     }
// 
//     public static IGameContext getContext() {
//         return context;
//     }
// 
//     public IEventDispatcher getEventDispatcher() {
//         return eventDispatcher;
//     }
// 
//     @Nullable
//     public ModContext getInstalledModContext() {
//         return installedModContext;
//     }
// 
//     @Nullable
//     public ModContext getModContext() {
//         return modContext;
//     }
// 
//     public void initialize() {
//         offerInstance(this);
// 
//         Collection<ModCandidate> installedCandidates = collectModCandidates();
//         LOGGER.info("Collected {} mod candidates", installedCandidates.size());
// 
//         List<Mod> installedMods = installedCandidates.stream()
//                 .map(ModCandidate::construct)
//                 .collect(Collectors.toList());
// 
//         List<Mod> globalMods = installedMods.stream()
//                 .filter(Mod::isGlobal)
//                 .collect(Collectors.toList());
// 
//         installedModContext = new ModContext(installedMods);
//         modContext = new ModContext(globalMods);
// 
//         eventDispatcher = modContext.buildEventDispatcher();
// 
//         for (Registry<?> registry : Registry.REGISTRIES) {
//             if (registry instanceof IdRegistry) {
//                 initializeRegistry((IdRegistry<?>) registry);
//             }
//         }
//     }
// 
//     private Collection<ModCandidate> collectModCandidates() {
//         ModReportCollector reportCollector = new ModReportCollector();
//         ModConstructor constructor = new ModConstructor(this.languageAdapters);
// 
//         for (IModReporter reporter : modReporters) {
//             reporter.apply(reportCollector, constructor);
//         }
// 
//         return reportCollector.getCandidates();
//     }
// 
//     private <T> void initializeRegistry(IdRegistry<T> registry) {
//         for (IRegistrationConfig config : installedModContext.getRegistrationConfigs()) {
//             config.registerEntries(registry);
//         }
//     }
// }


// Path: src/main/java/com/openmodloader/loader/mixin/MixinGuiScreen.java
import com.openmodloader.core.event.GuiEvent;
import com.openmodloader.loader.OpenModLoader;
import me.modmuss50.fusion.api.Mixin;
import me.modmuss50.fusion.api.Rewrite;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.render.text.TextRenderer;

package com.openmodloader.loader.mixin;


@Mixin(GuiScreen.class)
public abstract class MixinGuiScreen {
    protected TextRenderer textRenderer;

    @Rewrite(behavior = Rewrite.Behavior.END)
    public void draw(int mouseX, int mouseY, float aFloat3) {
        GuiScreen screen = (GuiScreen) (Object) this;