package fr.adrien1106.reframed.client; import fr.adrien1106.reframed.ReFramed; import fr.adrien1106.reframed.client.model.UnbakedAutoRetexturedModel; import fr.adrien1106.reframed.client.model.UnbakedDoubleRetexturedModel; import fr.adrien1106.reframed.client.model.UnbakedJsonRetexturedModel; import fr.adrien1106.reframed.client.model.UnbakedRetexturedModel; import fr.adrien1106.reframed.client.model.apperance.CamoAppearanceManager; import net.fabricmc.fabric.api.renderer.v1.Renderer; import net.fabricmc.fabric.api.renderer.v1.RendererAccess; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.render.model.UnbakedModel; import net.minecraft.client.texture.Sprite; import net.minecraft.client.util.SpriteIdentifier; import net.minecraft.item.ItemConvertible; import net.minecraft.util.Identifier; import org.jetbrains.annotations.NotNull; import java.util.function.Function; public class ReFramedClientHelper { public ReFramedClientHelper(ReFramedModelProvider prov) { this.prov = prov; } private final ReFramedModelProvider prov; public UnbakedRetexturedModel auto(Identifier parent) { return new UnbakedAutoRetexturedModel(parent); } public UnbakedRetexturedModel json(Identifier parent) { return new UnbakedJsonRetexturedModel(parent); } public UnbakedModel autoDouble(Identifier first, Identifier second) { return new UnbakedDoubleRetexturedModel( auto(first), auto(second) ); } public void addReFramedModel(String id, UnbakedModel unbaked) { prov.addReFramedModel(ReFramed.id(id + "_special"), unbaked); } public void assignItemModel(String id, ItemConvertible... item_convertibles) { prov.assignItemModel(ReFramed.id(id + "_special"), item_convertibles); } public CamoAppearanceManager getCamoAppearanceManager(Function spriteLookup) { return prov.getCamoAppearanceManager(spriteLookup); } public @NotNull Renderer getFabricRenderer() { Renderer obj = RendererAccess.INSTANCE.getRenderer(); if(obj != null) return obj; //Welp, not much more we can do, this mod heavily relies on frapi String msg = "A Fabric Rendering API implementation is required to use ReFramed!"; if(!FabricLoader.getInstance().isModLoaded("fabric-renderer-indigo")) msg += "\nI noticed you don't have Indigo installed, which is a part of the complete Fabric API package."; if(FabricLoader.getInstance().isModLoaded("sodium")) msg += "\nI noticed you have Sodium installed - consider also installing Indium to provide a compatible renderer implementation."; throw new NullPointerException(msg); } }