package joshie.progression;
import com.google.common.collect.ImmutableList;
import joshie.progression.api.criteria.ICriteria;
import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.ItemModelMesher;
import net.minecraft.client.renderer.block.model.*;
import net.minecraft.client.renderer.color.IItemColor;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumFacing;
import net.minecraft.world.World;
import net.minecraftforge.client.event.ModelBakeEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import java.util.List;
import static joshie.progression.ItemProgression.getCriteriaFromStack;
public class ItemProgressionRenderer implements IBakedModel {
@SubscribeEvent
public void onCookery(ModelBakeEvent event) {
event.getModelRegistry().putObject(PClientProxy.criteria, this);
}
/** Redundant crap below :/ **/
public List<BakedQuad> getQuads(IBlockState state, EnumFacing side, long rand) {
return null;
}
@Override
public boolean isAmbientOcclusion() {
return false;
}
@Override
public boolean isGui3d() {
return false;
}
@Override
public boolean isBuiltInRenderer() {
return false;
}
@Override
public TextureAtlasSprite getParticleTexture() {
return null;
}
@Override
public ItemCameraTransforms getItemCameraTransforms() {
return null;
}
@Override
public ItemOverrideList getOverrides() {
return ProgressionOverride.INSTANCE;
}
protected static class ProgressionOverride extends ItemOverrideList implements IItemColor {
public static ProgressionOverride INSTANCE = new ProgressionOverride();
private ItemStack broken = new ItemStack(Items.BOOK);
private ItemModelMesher mesher;
public ProgressionOverride() {
super(ImmutableList.<ItemOverride>of());
}
@Override
public int getColorFromItemstack(ItemStack stack, int tintIndex) {
ICriteria criteria = getCriteriaFromStack(stack, true);
if (criteria != null) {
return Minecraft.getMinecraft().getItemColors().getColorFromItemstack(criteria.getIcon(), tintIndex);
}
return 16777215;
}
@Override
public IBakedModel handleItemState(IBakedModel originalModel, ItemStack stack, World world, EntityLivingBase entity) {
if (mesher == null) mesher = Minecraft.getMinecraft().getRenderItem().getItemModelMesher();
ICriteria criteria = getCriteriaFromStack(stack, true);
if (criteria != null && criteria.getIcon().getItem() != stack.getItem() && criteria.getIcon().getItem() != Progression.item) {
return mesher.getItemModel(criteria.getIcon());
}
return mesher.getItemModel(broken);
}
}
}