package net.fabricmc.fabric.api.event.lifecycle.v1;

import net.fabricmc.fabric.api.event.Event;
import net.fabricmc.fabric.api.event.EventFactory;
import net.minecraft.class_3222;
import net.minecraft.class_6860;
import net.minecraft.server.MinecraftServer;

public final class ServerLifecycleEvents {
   public static final Event<ServerStarting> SERVER_STARTING = EventFactory.createArrayBacked(ServerStarting.class, (callbacks) -> (server) -> {
         for(ServerStarting callback : callbacks) {
            callback.onServerStarting(server);
         }

      });
   public static final Event<ServerStarted> SERVER_STARTED = EventFactory.createArrayBacked(ServerStarted.class, (callbacks) -> (server) -> {
         for(ServerStarted callback : callbacks) {
            callback.onServerStarted(server);
         }

      });
   public static final Event<ServerStopping> SERVER_STOPPING = EventFactory.createArrayBacked(ServerStopping.class, (callbacks) -> (server) -> {
         for(ServerStopping callback : callbacks) {
            callback.onServerStopping(server);
         }

      });
   public static final Event<ServerStopped> SERVER_STOPPED = EventFactory.createArrayBacked(ServerStopped.class, (callbacks) -> (server) -> {
         for(ServerStopped callback : callbacks) {
            callback.onServerStopped(server);
         }

      });
   public static final Event<SyncDataPackContents> SYNC_DATA_PACK_CONTENTS = EventFactory.createArrayBacked(SyncDataPackContents.class, (callbacks) -> (player, joined) -> {
         for(SyncDataPackContents callback : callbacks) {
            callback.onSyncDataPackContents(player, joined);
         }

      });
   public static final Event<StartDataPackReload> START_DATA_PACK_RELOAD = EventFactory.createArrayBacked(StartDataPackReload.class, (callbacks) -> (server, serverResourceManager) -> {
         for(StartDataPackReload callback : callbacks) {
            callback.startDataPackReload(server, serverResourceManager);
         }

      });
   public static final Event<EndDataPackReload> END_DATA_PACK_RELOAD = EventFactory.createArrayBacked(EndDataPackReload.class, (callbacks) -> (server, serverResourceManager, success) -> {
         for(EndDataPackReload callback : callbacks) {
            callback.endDataPackReload(server, serverResourceManager, success);
         }

      });
   public static final Event<BeforeSave> BEFORE_SAVE = EventFactory.createArrayBacked(BeforeSave.class, (callbacks) -> (server, flush, force) -> {
         for(BeforeSave callback : callbacks) {
            callback.onBeforeSave(server, flush, force);
         }

      });
   public static final Event<AfterSave> AFTER_SAVE = EventFactory.createArrayBacked(AfterSave.class, (callbacks) -> (server, flush, force) -> {
         for(AfterSave callback : callbacks) {
            callback.onAfterSave(server, flush, force);
         }

      });

   private ServerLifecycleEvents() {
   }

   @FunctionalInterface
   public interface AfterSave {
      void onAfterSave(MinecraftServer var1, boolean var2, boolean var3);
   }

   @FunctionalInterface
   public interface BeforeSave {
      void onBeforeSave(MinecraftServer var1, boolean var2, boolean var3);
   }

   @FunctionalInterface
   public interface EndDataPackReload {
      void endDataPackReload(MinecraftServer var1, class_6860 var2, boolean var3);
   }

   @FunctionalInterface
   public interface ServerStarted {
      void onServerStarted(MinecraftServer var1);
   }

   @FunctionalInterface
   public interface ServerStarting {
      void onServerStarting(MinecraftServer var1);
   }

   @FunctionalInterface
   public interface ServerStopped {
      void onServerStopped(MinecraftServer var1);
   }

   @FunctionalInterface
   public interface ServerStopping {
      void onServerStopping(MinecraftServer var1);
   }

   @FunctionalInterface
   public interface StartDataPackReload {
      void startDataPackReload(MinecraftServer var1, class_6860 var2);
   }

   @FunctionalInterface
   public interface SyncDataPackContents {
      void onSyncDataPackContents(class_3222 var1, boolean var2);
   }
}
