fabric-rendering-v1-16.2.0+bee81f016f.jar

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

import java.util.ArrayList;
import java.util.List;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import net.minecraft.class_11239;
import net.minecraft.class_11256;
import net.minecraft.class_11659;
import net.minecraft.class_310;
import net.minecraft.class_4597;

@Environment(EnvType.CLIENT)
public final class SpecialGuiElementRendererPool<T extends class_11256> implements AutoCloseable {
   private int index = 0;
   private final List<class_11239<T>> renderers = new ArrayList();

   public void newFrame() {
      this.index = 0;
   }

   public class_11239<T> substitute(class_11239<T> original, T elementState, class_310 client, class_4597.class_4598 immediate, class_11659 orderedRenderCommandQueue) {
      int index = this.index++;
      if (index == 0) {
         return original;
      } else if (index <= this.renderers.size()) {
         return (class_11239)this.renderers.get(index - 1);
      } else {
         class_11239<T> newRenderer = SpecialGuiElementRegistryImpl.<T>createNewRenderer(elementState, client, immediate, orderedRenderCommandQueue);
         if (newRenderer == null) {
            return original;
         } else {
            this.renderers.add(newRenderer);
            return newRenderer;
         }
      }
   }

   public void cleanUpUnusedRenderers() {
      int firstUnusedIndex = Math.max(0, this.index - 1);
      if (firstUnusedIndex < this.renderers.size()) {
         for(int i = firstUnusedIndex; i < this.renderers.size(); ++i) {
            ((class_11239)this.renderers.get(i)).close();
         }

         this.renderers.subList(firstUnusedIndex, this.renderers.size()).clear();
      }
   }

   public void close() {
      this.renderers.forEach(class_11239::close);
      this.index = 0;
      this.renderers.clear();
   }
}
    
Download file