// Path: src/main/java/de/johni0702/minecraft/gui/utils/Event.java
// public class Event<T> {
//     public static <T> Event<T> create(Function<List<T>, T> invokerFactory) {
//         return new Event<>(invokerFactory);
//     }
// 
//     private T invoker;
//     private Function<List<T>, T> invokerFactory;
//     private List<T> listeners = new ArrayList<>();
// 
//     private Event(Function<List<T>, T> invokerFactory) {
//         this.invokerFactory = invokerFactory;
//         update();
//     }
// 
//     void register(T listener) {
//         listeners.add(listener);
//         update();
//     }
// 
//     void unregister(T listener) {
//         listeners.remove(listener);
//         update();
//     }
// 
//     private void update() {
//         invoker = invokerFactory.apply(new ArrayList<>(listeners));
//     }
// 
//     public T invoker() {
//         return invoker;
//     }
// }


import de.johni0702.minecraft.gui.utils.Event;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.AbstractButtonWidget;
import java.util.Collection;
package de.johni0702.minecraft.gui.versions.callbacks;



public interface InitScreenCallback {
    Event<InitScreenCallback> EVENT = Event.create((listeners) ->
            (screen, buttons) -> {
                for (InitScreenCallback listener : listeners) {
                    listener.initScreen(screen, buttons);
                }
            }
    );

    void initScreen(Screen screen, Collection<AbstractButtonWidget> buttons);

    interface Pre {
// Path: src/main/java/de/johni0702/minecraft/gui/utils/Event.java
// public class Event<T> {
//     public static <T> Event<T> create(Function<List<T>, T> invokerFactory) {
//         return new Event<>(invokerFactory);
//     }
// 
//     private T invoker;
//     private Function<List<T>, T> invokerFactory;
//     private List<T> listeners = new ArrayList<>();
// 
//     private Event(Function<List<T>, T> invokerFactory) {
//         this.invokerFactory = invokerFactory;
//         update();
//     }
// 
//     void register(T listener) {
//         listeners.add(listener);
//         update();
//     }
// 
//     void unregister(T listener) {
//         listeners.remove(listener);
//         update();
//     }
// 
//     private void update() {
//         invoker = invokerFactory.apply(new ArrayList<>(listeners));
//     }
// 
//     public T invoker() {
//         return invoker;
//     }
// }


// Path: src/main/java/de/johni0702/minecraft/gui/versions/callbacks/InitScreenCallback.java
import de.johni0702.minecraft.gui.utils.Event;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.gui.widget.AbstractButtonWidget;
import java.util.Collection;

package de.johni0702.minecraft.gui.versions.callbacks;



public interface InitScreenCallback {
    Event<InitScreenCallback> EVENT = Event.create((listeners) ->
            (screen, buttons) -> {
                for (InitScreenCallback listener : listeners) {
                    listener.initScreen(screen, buttons);
                }
            }
    );

    void initScreen(Screen screen, Collection<AbstractButtonWidget> buttons);

    interface Pre {
        Event<InitScreenCallback.Pre> EVENT = Event.create((listeners) ->