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

import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.event.Event;
import net.fabricmc.fabric.api.event.EventFactory;
import net.minecraft.class_310;
import net.minecraft.class_638;

@Environment(EnvType.CLIENT)
public final class ClientTickEvents {
   public static final Event<StartTick> START_CLIENT_TICK = EventFactory.createArrayBacked(StartTick.class, (callbacks) -> (client) -> {
         for(StartTick event : callbacks) {
            event.onStartTick(client);
         }

      });
   public static final Event<EndTick> END_CLIENT_TICK = EventFactory.createArrayBacked(EndTick.class, (callbacks) -> (client) -> {
         for(EndTick event : callbacks) {
            event.onEndTick(client);
         }

      });
   public static final Event<StartWorldTick> START_WORLD_TICK = EventFactory.createArrayBacked(StartWorldTick.class, (callbacks) -> (world) -> {
         for(StartWorldTick callback : callbacks) {
            callback.onStartTick(world);
         }

      });
   public static final Event<EndWorldTick> END_WORLD_TICK = EventFactory.createArrayBacked(EndWorldTick.class, (callbacks) -> (world) -> {
         for(EndWorldTick callback : callbacks) {
            callback.onEndTick(world);
         }

      });

   private ClientTickEvents() {
   }

   @FunctionalInterface
   @Environment(EnvType.CLIENT)
   public interface EndTick {
      void onEndTick(class_310 var1);
   }

   @FunctionalInterface
   @Environment(EnvType.CLIENT)
   public interface EndWorldTick {
      void onEndTick(class_638 var1);
   }

   @FunctionalInterface
   @Environment(EnvType.CLIENT)
   public interface StartTick {
      void onStartTick(class_310 var1);
   }

   @FunctionalInterface
   @Environment(EnvType.CLIENT)
   public interface StartWorldTick {
      void onStartTick(class_638 var1);
   }
}
