Skip to content

Instantly share code, notes, and snippets.

@Daomephsta
Created April 6, 2019 08:43
Show Gist options
  • Save Daomephsta/04d6ef7312cd379dbe1e2214849c2a51 to your computer and use it in GitHub Desktop.
Save Daomephsta/04d6ef7312cd379dbe1e2214849c2a51 to your computer and use it in GitHub Desktop.
package io.github.daomephsta.inscribe.client.guide;
import java.util.*;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import grondag.frex.api.core.*;
import io.github.daomephsta.inscribe.client.InscribeClientInitialiser;
import io.github.daomephsta.inscribe.client.guide.xmlformat.definition.GuideItemAccessMethod;
import io.github.daomephsta.inscribe.common.Inscribe;
import net.fabricmc.fabric.api.client.model.*;
import net.minecraft.block.BlockState;
import net.minecraft.client.render.model.*;
import net.minecraft.client.render.model.json.ModelItemPropertyOverrideList;
import net.minecraft.client.render.model.json.ModelTransformation;
import net.minecraft.client.texture.Sprite;
import net.minecraft.item.ItemStack;
import net.minecraft.resource.ResourceManager;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
public class GuideModel
{
public static final Logger LOGGER = LogManager.getLogger();
public static class Provider implements ModelResourceProvider
{
private static final Identifier GUIDE_MODEL_ID = new Identifier(Inscribe.MOD_ID, "item/guide");
private final ResourceManager resourceManager;
public Provider(ResourceManager resourceManager)
{
this.resourceManager = resourceManager;
}
@Override
public UnbakedModel loadModelResource(Identifier resourceId, ModelProviderContext context)
throws ModelProviderException
{
return resourceId.equals(GUIDE_MODEL_ID) ? new GuideModel.Unbaked() : null;
}
}
public static class Unbaked implements UnbakedModel
{
@Override
public Collection<Identifier> getModelDependencies()
{
return InscribeClientInitialiser.getGuideModels();
}
@Override
public Collection<Identifier> getTextureDependencies(Function<Identifier, UnbakedModel> modelGetter, Set<String> errors)
{
return InscribeClientInitialiser.getGuideModels().stream()
.flatMap(model -> modelGetter.apply(model).getTextureDependencies(modelGetter, errors).stream())
.collect(Collectors.toSet());
}
@Override
public BakedModel bake(ModelLoader modelLoader, Function<Identifier, Sprite> spriteGetter, ModelRotationContainer rotationContainer)
{
Map<Identifier, BakedModel> modelMap = InscribeClientInitialiser.getGuideModels().stream()
.collect(Collectors.toMap(id -> id, id -> modelLoader.bake(id, rotationContainer)));
return new Baked(modelMap);
}
}
public static class Baked implements BakedModel, FabricBakedModel
{
private final Map<Identifier, BakedModel> modelMap;
public Baked(Map<Identifier, BakedModel> modelMap)
{
this.modelMap = modelMap;
}
@Override
public void emitItemQuads(ItemStack stack, Supplier<Random> randomSupplier, RenderContext context)
{
Identifier modelId = ((GuideItemAccessMethod)Inscribe.GUIDE_ITEM.getGuide(stack).getDefinition().getGuideAccess()).getModelId();
BakedModel model = modelMap.get(modelId);
context.fallbackConsumer().accept(model);
}
@Override
public boolean isVanillaAdapter()
{
return false;
}
@Override
public void emitBlockQuads(TerrainBlockView blockView, BlockState state, BlockPos pos, Supplier<Random> randomSupplier, RenderContext context)
{
}
@Override
public List<BakedQuad> getQuads(BlockState var1, Direction var2, Random var3)
{
BakedModel model = modelMap.get(new Identifier("minecraft:item/stick"));
return model.getQuads(var1, var2, var3);
}
@Override
public boolean useAmbientOcclusion()
{
return false;
}
@Override
public boolean hasDepthInGui()
{
return false;
}
@Override
public boolean isBuiltin()
{
return false;
}
@Override
public Sprite getSprite()
{
return null;
}
@Override
public ModelTransformation getTransformation()
{
return ModelTransformation.NONE;
}
@Override
public ModelItemPropertyOverrideList getItemPropertyOverrides()
{
return ModelItemPropertyOverrideList.EMPTY;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment