@@ -0,0 +1,2152 @@
+package org.cyclops.cyclopscore.client.model;%0A%0Aimport net.minecraft.block.state.IBlockState;%0Aimport net.minecraft.client.renderer.block.model.BakedQuad;%0Aimport net.minecraft.client.renderer.block.model.IBakedModel;%0Aimport net.minecraft.client.renderer.block.model.ItemOverride;%0Aimport net.minecraft.client.renderer.block.model.ItemOverrideList;%0Aimport net.minecraft.entity.EntityLivingBase;%0Aimport net.minecraft.item.ItemStack;%0Aimport net.minecraft.util.EnumFacing;%0Aimport net.minecraft.world.World;%0A%0Aimport java.util.Collections;%0Aimport java.util.List;%0A%0A/**%0A * A dynamic model that can be used for items and blocks.%0A * @author rubensworks%0A */%0Apublic abstract class DynamicItemAndBlockModel extends DynamicBaseModel %7B%0A%0A    private final boolean factory;%0A    private final boolean item;%0A    private final ItemOverrides itemOverrides;%0A%0A    public DynamicItemAndBlockModel(boolean factory, boolean item) %7B%0A        this.factory = factory;%0A        this.item = item;%0A        this.itemOverrides = new ItemOverrides();%0A    %7D%0A%0A    protected boolean isItemStack() %7B%0A        return item;%0A    %7D%0A%0A    @Override%0A    public List%3CBakedQuad%3E getQuads(IBlockState state, EnumFacing side, long rand) %7B%0A        if(factory) %7B%0A            return handleBlockState(state, side, rand).getQuads(state, side, rand);%0A        %7D%0A        return getGeneralQuads();%0A    %7D%0A%0A    public List%3CBakedQuad%3E getGeneralQuads() %7B%0A        return Collections.emptyList();%0A    %7D%0A%0A    public abstract IBakedModel handleBlockState(IBlockState state, EnumFacing side, long rand);%0A    public abstract IBakedModel handleItemState(ItemStack stack, World world, EntityLivingBase entity);%0A%0A    @Override%0A    public ItemOverrideList getOverrides() %7B%0A        return super.getOverrides();%0A    %7D%0A%0A    public class ItemOverrides extends ItemOverrideList %7B%0A%0A        public ItemOverrides() %7B%0A            super(Collections.%3CItemOverride%3EemptyList());%0A        %7D%0A%0A        @Override%0A        public IBakedModel handleItemState(IBakedModel originalModel, ItemStack stack, World world, EntityLivingBase entity) %7B%0A            return DynamicItemAndBlockModel.this.handleItemState(stack, world, entity);%0A        %7D%0A    %7D%0A%0A%7D%0A

Add item and block model abstraction