// Path: src/api/java/com/github/atomicblom/shearmadness/api/events/RegisterShearMadnessVariationEvent.java
// @SideOnly(Side.CLIENT)
// public class RegisterShearMadnessVariationEvent extends Event
// {
//     private final IVariationRegistry registry;
// 
//     public RegisterShearMadnessVariationEvent(IVariationRegistry registry) {
// 
//         this.registry = registry;
//     }
// 
//     /**
//      * @return A registry to declare variation against.
//      */
//     public IVariationRegistry getRegistry()
//     {
//         return registry;
//     }
// }
// 
// Path: src/main/java/com/github/atomicblom/shearmadness/api/VariationRegistry.java
// @SideOnly(Side.CLIENT)
// public class VariationRegistry implements IVariationRegistry
// {
//     public static final VariationRegistry INSTANCE = new VariationRegistry();
// 
//     private VariationRegistry() {}
// 
//     private final List<ShearMadnessVariation> variations = new LinkedList<>();
// 
//     private final IModelMaker defaultHandler = new DefaultModelMaker();
// 
//     @Override
//     public void registerVariation(Function<ItemStack, Boolean> handlesVariant, IModelMaker variationModelMaker) {
//         variations.add(new ShearMadnessVariation(handlesVariant, variationModelMaker));
//     }
// 
//     @Override
//     public void registerVariation(Function<ItemStack, Boolean> handlesVariant, QuadrupedTransformDefinition transformDefinition)
//     {
//         variations.add(new ShearMadnessVariation(handlesVariant, new DefaultModelMaker(transformDefinition)));
//     }
// 
//     public IModelMaker getVariationModelMaker(ItemStack itemStack) {
//         IModelMaker handler = null;
//         for (final ShearMadnessVariation variation : variations)
//         {
//             if (variation.canHandleItemStack(itemStack)) {
//                 handler = variation.getVariationModelMaker();
//                 break;
//             }
//         }
//         if (handler == null) {
//             handler = defaultHandler;
//         }
// 
//         return handler;
//     }
// }
// 
// Path: src/main/java/com/github/atomicblom/shearmadness/networking/CheckSheepChiseledRequestMessage.java
// public class CheckSheepChiseledRequestMessage implements IMessage
// {
//     private String sheepUUID = null;
// 
//     @SuppressWarnings("unused")
//     public CheckSheepChiseledRequestMessage() {}
// 
//     public CheckSheepChiseledRequestMessage(Entity sheep)
//     {
//         sheepUUID = sheep.getCachedUniqueIdString();
//     }
// 
//     @Override
//     public void fromBytes(ByteBuf buf)
//     {
//         sheepUUID = ByteBufUtils.readUTF8String(buf);
// 
//     }
// 
//     @Override
//     public void toBytes(ByteBuf buf)
//     {
//         ByteBufUtils.writeUTF8String(buf, sheepUUID);
//     }
// 
//     String getSheepUUID()
//     {
//         return sheepUUID;
//     }
// 
//     @Override
//     public String toString()
//     {
//         return Objects.toStringHelper(this)
//                 .add("sheepUUID", sheepUUID)
//                 .toString();
//     }
// }
// 
// Path: src/integration/java/com/github/atomicblom/shearmadness/variations/CommonReference.java
// public final class CommonReference {
//     public static final String MOD_ID = "shearmadness";
//     public static final String MOD_NAME = "Shear Madness";
//     public static final String VERSION = "@MOD_VERSION@";
// 
//     private CommonReference() {}
// }
// 
// Path: src/main/java/com/github/atomicblom/shearmadness/ShearMadnessMod.java
// public static final SimpleNetworkWrapper CHANNEL = NetworkRegistry.INSTANCE.newSimpleChannel(CommonReference.MOD_ID);


import com.github.atomicblom.shearmadness.api.events.RegisterShearMadnessVariationEvent;
import com.github.atomicblom.shearmadness.api.VariationRegistry;
import com.github.atomicblom.shearmadness.networking.CheckSheepChiseledRequestMessage;
import com.github.atomicblom.shearmadness.variations.CommonReference;
import net.minecraft.entity.Entity;
import net.minecraft.entity.passive.EntitySheep;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.TextureStitchEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import static com.github.atomicblom.shearmadness.ShearMadnessMod.CHANNEL;
package com.github.atomicblom.shearmadness.proxy;



@SuppressWarnings({"MethodMayBeStatic", "unused"})
public class ClientForgeEventProxy extends CommonForgeEventProxy
{
    @Override
    public void fireRegistryEvent() {
        MinecraftForge.EVENT_BUS.post(new RegisterShearMadnessVariationEvent(VariationRegistry.INSTANCE));
        super.fireRegistryEvent();
    }

    @SubscribeEvent
    public void onEntityJoinWorldEvent(EntityJoinWorldEvent event)
    {
        final Entity entity = event.getEntity();
        if (entity instanceof EntitySheep)
        {
// Path: src/api/java/com/github/atomicblom/shearmadness/api/events/RegisterShearMadnessVariationEvent.java
// @SideOnly(Side.CLIENT)
// public class RegisterShearMadnessVariationEvent extends Event
// {
//     private final IVariationRegistry registry;
// 
//     public RegisterShearMadnessVariationEvent(IVariationRegistry registry) {
// 
//         this.registry = registry;
//     }
// 
//     /**
//      * @return A registry to declare variation against.
//      */
//     public IVariationRegistry getRegistry()
//     {
//         return registry;
//     }
// }
// 
// Path: src/main/java/com/github/atomicblom/shearmadness/api/VariationRegistry.java
// @SideOnly(Side.CLIENT)
// public class VariationRegistry implements IVariationRegistry
// {
//     public static final VariationRegistry INSTANCE = new VariationRegistry();
// 
//     private VariationRegistry() {}
// 
//     private final List<ShearMadnessVariation> variations = new LinkedList<>();
// 
//     private final IModelMaker defaultHandler = new DefaultModelMaker();
// 
//     @Override
//     public void registerVariation(Function<ItemStack, Boolean> handlesVariant, IModelMaker variationModelMaker) {
//         variations.add(new ShearMadnessVariation(handlesVariant, variationModelMaker));
//     }
// 
//     @Override
//     public void registerVariation(Function<ItemStack, Boolean> handlesVariant, QuadrupedTransformDefinition transformDefinition)
//     {
//         variations.add(new ShearMadnessVariation(handlesVariant, new DefaultModelMaker(transformDefinition)));
//     }
// 
//     public IModelMaker getVariationModelMaker(ItemStack itemStack) {
//         IModelMaker handler = null;
//         for (final ShearMadnessVariation variation : variations)
//         {
//             if (variation.canHandleItemStack(itemStack)) {
//                 handler = variation.getVariationModelMaker();
//                 break;
//             }
//         }
//         if (handler == null) {
//             handler = defaultHandler;
//         }
// 
//         return handler;
//     }
// }
// 
// Path: src/main/java/com/github/atomicblom/shearmadness/networking/CheckSheepChiseledRequestMessage.java
// public class CheckSheepChiseledRequestMessage implements IMessage
// {
//     private String sheepUUID = null;
// 
//     @SuppressWarnings("unused")
//     public CheckSheepChiseledRequestMessage() {}
// 
//     public CheckSheepChiseledRequestMessage(Entity sheep)
//     {
//         sheepUUID = sheep.getCachedUniqueIdString();
//     }
// 
//     @Override
//     public void fromBytes(ByteBuf buf)
//     {
//         sheepUUID = ByteBufUtils.readUTF8String(buf);
// 
//     }
// 
//     @Override
//     public void toBytes(ByteBuf buf)
//     {
//         ByteBufUtils.writeUTF8String(buf, sheepUUID);
//     }
// 
//     String getSheepUUID()
//     {
//         return sheepUUID;
//     }
// 
//     @Override
//     public String toString()
//     {
//         return Objects.toStringHelper(this)
//                 .add("sheepUUID", sheepUUID)
//                 .toString();
//     }
// }
// 
// Path: src/integration/java/com/github/atomicblom/shearmadness/variations/CommonReference.java
// public final class CommonReference {
//     public static final String MOD_ID = "shearmadness";
//     public static final String MOD_NAME = "Shear Madness";
//     public static final String VERSION = "@MOD_VERSION@";
// 
//     private CommonReference() {}
// }
// 
// Path: src/main/java/com/github/atomicblom/shearmadness/ShearMadnessMod.java
// public static final SimpleNetworkWrapper CHANNEL = NetworkRegistry.INSTANCE.newSimpleChannel(CommonReference.MOD_ID);


// Path: src/main/java/com/github/atomicblom/shearmadness/proxy/ClientForgeEventProxy.java
import com.github.atomicblom.shearmadness.api.events.RegisterShearMadnessVariationEvent;
import com.github.atomicblom.shearmadness.api.VariationRegistry;
import com.github.atomicblom.shearmadness.networking.CheckSheepChiseledRequestMessage;
import com.github.atomicblom.shearmadness.variations.CommonReference;
import net.minecraft.entity.Entity;
import net.minecraft.entity.passive.EntitySheep;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.TextureStitchEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.entity.EntityJoinWorldEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import static com.github.atomicblom.shearmadness.ShearMadnessMod.CHANNEL;

package com.github.atomicblom.shearmadness.proxy;



@SuppressWarnings({"MethodMayBeStatic", "unused"})
public class ClientForgeEventProxy extends CommonForgeEventProxy
{
    @Override
    public void fireRegistryEvent() {
        MinecraftForge.EVENT_BUS.post(new RegisterShearMadnessVariationEvent(VariationRegistry.INSTANCE));
        super.fireRegistryEvent();
    }

    @SubscribeEvent
    public void onEntityJoinWorldEvent(EntityJoinWorldEvent event)
    {
        final Entity entity = event.getEntity();
        if (entity instanceof EntitySheep)
        {
            CHANNEL.sendToServer(new CheckSheepChiseledRequestMessage(entity));