fabric-rendering-v1-16.2.0+bee81f016f.jar

Download file
    package net.fabricmc.fabric.impl.client.rendering;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.client.rendering.v1.SpecialGuiElementRegistry;
import net.minecraft.class_11233;
import net.minecraft.class_11234;
import net.minecraft.class_11235;
import net.minecraft.class_11236;
import net.minecraft.class_11237;
import net.minecraft.class_11238;
import net.minecraft.class_11239;
import net.minecraft.class_11250;
import net.minecraft.class_11251;
import net.minecraft.class_11252;
import net.minecraft.class_11253;
import net.minecraft.class_11254;
import net.minecraft.class_11255;
import net.minecraft.class_11256;
import net.minecraft.class_11659;
import net.minecraft.class_310;
import net.minecraft.class_4597;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.annotations.VisibleForTesting;

@Environment(EnvType.CLIENT)
public final class SpecialGuiElementRegistryImpl {
   private static final List<SpecialGuiElementRegistry.Factory> FACTORIES = new ArrayList();
   private static final Map<Class<? extends class_11256>, SpecialGuiElementRegistry.Factory> REGISTERED_FACTORIES = new HashMap();
   private static boolean frozen;

   private SpecialGuiElementRegistryImpl() {
   }

   public static void register(SpecialGuiElementRegistry.Factory factory) {
      if (frozen) {
         throw new IllegalStateException("Too late to register, GuiRenderer has already been initialized.");
      } else {
         FACTORIES.add(factory);
      }
   }

   public static void onReady(class_310 client, class_4597.class_4598 immediate, class_11659 orderedRenderCommandQueue, Map<Class<? extends class_11256>, class_11239<?>> specialElementRenderers) {
      frozen = true;
      registerVanillaFactories();
      ContextImpl context = new ContextImpl(client, immediate, orderedRenderCommandQueue);

      for(SpecialGuiElementRegistry.Factory factory : FACTORIES) {
         class_11239<?> elementRenderer = factory.createSpecialRenderer(context);
         specialElementRenderers.put(elementRenderer.method_70903(), elementRenderer);
         REGISTERED_FACTORIES.put(elementRenderer.method_70903(), factory);
      }

   }

   public static <S extends class_11256> @Nullable("null for render states registered outside FAPI") class_11239<S> createNewRenderer(S state, class_310 client, class_4597.class_4598 immediate, class_11659 orderedRenderCommandQueue) {
      SpecialGuiElementRegistry.Factory factory = (SpecialGuiElementRegistry.Factory)REGISTERED_FACTORIES.get(state.getClass());
      return factory == null ? null : factory.createSpecialRenderer(new ContextImpl(client, immediate, orderedRenderCommandQueue));
   }

   private static void registerVanillaFactories() {
      REGISTERED_FACTORIES.put(class_11252.class, (SpecialGuiElementRegistry.Factory)(context) -> new class_11235(context.vertexConsumers(), context.client().method_1561()));
      REGISTERED_FACTORIES.put(class_11255.class, (SpecialGuiElementRegistry.Factory)(context) -> new class_11238(context.vertexConsumers()));
      REGISTERED_FACTORIES.put(class_11251.class, (SpecialGuiElementRegistry.Factory)(context) -> new class_11234(context.vertexConsumers()));
      REGISTERED_FACTORIES.put(class_11250.class, (SpecialGuiElementRegistry.Factory)(context) -> new class_11233(context.vertexConsumers(), context.client().method_72703()));
      REGISTERED_FACTORIES.put(class_11254.class, (SpecialGuiElementRegistry.Factory)(context) -> new class_11237(context.vertexConsumers(), context.client().method_72703()));
      REGISTERED_FACTORIES.put(class_11253.class, (SpecialGuiElementRegistry.Factory)(context) -> new class_11236(context.vertexConsumers()));
   }

   @VisibleForTesting
   public static Collection<Class<? extends class_11256>> getRegisteredFactoryStateClasses() {
      return REGISTERED_FACTORIES.keySet();
   }

   @Environment(EnvType.CLIENT)
   static record ContextImpl(class_310 client, class_4597.class_4598 vertexConsumers, class_11659 orderedRenderCommandQueue) implements SpecialGuiElementRegistry.Context {
   }
}
    
Download file