// Path: src/main/java/com/corwinjv/mobtotems/MobTotems.java
// @Mod(modid = Reference.MOD_ID, name = Reference.MOD_NAME, version = Reference.MOD_VERSION, guiFactory = Reference.GUI_FACTORY_CLASS,
//         dependencies = "before:guideapi")
// public class MobTotems {
//     @Mod.Instance
//     public static MobTotems instance;
// 
//     @SidedProxy(clientSide = Reference.CLIENT_SIDE_PROXY_CLASS, serverSide = Reference.SERVER_SIDE_PROXY_CLASS)
//     public static CommonProxy proxy;
// 
//     private static MobTotemsComponent mobTotemsComponent;
// 
//     @Mod.EventHandler
//     public void preInit(FMLPreInitializationEvent event) {
// //        //Dagger 2 implementation
// //        mobTotemsComponent = proxy.initializeDagger(instance);
// 
//         // Network & Messages
//         Network.init();
//         NetworkRegistry.INSTANCE.registerGuiHandler(instance, new OfferingBoxGuiHandler());
// 
//         // Config
//         ConfigurationHandler.Init(event.getSuggestedConfigurationFile());
//         MinecraftForge.EVENT_BUS.register(new ConfigurationHandler());
// 
//         // Helper stuff
//         TotemHelper.init();
//         MinecraftForge.EVENT_BUS.register(new CreeperLogic.CreeperTotemEntityJoinWorldEvent());
//         MinecraftForge.EVENT_BUS.register(new CowLogic.CowTotemEntityJoinWorldEvent());
//         MinecraftForge.EVENT_BUS.register(new EnderLogic.EnderTotemEnderTeleportEvent());
// 
//         // Blocks
//         ModBlocks.init();
// 
//         // Items
//         ModItems.init();
// 
//         // Entities
//         ModEntities.init();
//         ModEntities.registerEntities(instance);
//         proxy.registerEntityRenders();
// 
//         // Keybinds
//         proxy.registerKeys();
//     }
// 
//     public static MobTotemsComponent component() {
//         return mobTotemsComponent;
//     }
// 
//     @Mod.EventHandler
//     public void init(FMLInitializationEvent event) {
//         proxy.registerRenders();
//     }
// 
//     @Mod.EventHandler
//     public void postInit(FMLPostInitializationEvent event) {
//         proxy.registerGui();
//         proxy.registerParticleRenderer();
//     }
// }
// 
// Path: src/main/java/com/corwinjv/mobtotems/particles/ModParticles.java
// public class ModParticles {
//     public static final int WOLF_IDLE_SMOKE = 0;
//     public static final int WOLF_ENTRANCE_SMOKE = 1;
//     public static final int WOLF_EXIT_SMOKE = 2;
// 
//     @SideOnly(Side.CLIENT)
//     public static class Factory implements IParticleFactory {
//         @Nullable
//         public Particle createParticle(int particleID, @Nonnull World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) {
//             Particle ret = null;
// 
//             switch (particleID) {
//                 case WOLF_IDLE_SMOKE: {
//                     ret = new WolfIdleParticle(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn);
//                     break;
//                 }
//                 default: {
//                     FMLLog.log(Level.ERROR, "Unknown particleId: " + particleID);
//                     break;
//                 }
//             }
// 
//             return ret;
//         }
//     }
// }


import com.corwinjv.mobtotems.MobTotems;
import com.corwinjv.mobtotems.particles.ModParticles;
import net.minecraft.client.Minecraft;
import net.minecraft.client.particle.IParticleFactory;
import net.minecraft.client.particle.Particle;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.*;
import net.minecraft.entity.monster.EntityMob;
import net.minecraft.entity.passive.EntityWolf;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
        }

        if (getEntityWorld().isRemote) {
            spawnParticles();
        }
    }

    @SuppressWarnings("unchecked")
    @Override
    protected void initEntityAI() {
        this.aiSit = new EntityAISit(this);
        this.tasks.addTask(1, new EntityAISwimming(this));
        this.tasks.addTask(3, new EntityAILeapAtTarget(this, 0.4F));
        this.tasks.addTask(4, new EntityAIAttackMelee(this, 1.0D, true));
        this.tasks.addTask(5, new EntityAIFollowOwner(this, 1.0D, 10.0F, 2.0F));
        this.tasks.addTask(7, new EntityAIWander(this, 1.0D));
        this.targetTasks.addTask(1, new EntityAIOwnerHurtByTarget(this));
        this.targetTasks.addTask(2, new EntityAIOwnerHurtTarget(this));
        this.targetTasks.addTask(3, new EntityAIHurtByTarget(this, true));
        this.targetTasks.addTask(5, new EntityAINearestAttackableTarget(this, EntityMob.class, false));
    }

    @Override
    protected void applyEntityAttributes() {
        super.applyEntityAttributes();
        this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(4.0D);
    }

    @SideOnly(Side.CLIENT)
    private void spawnParticles() {
// Path: src/main/java/com/corwinjv/mobtotems/MobTotems.java
// @Mod(modid = Reference.MOD_ID, name = Reference.MOD_NAME, version = Reference.MOD_VERSION, guiFactory = Reference.GUI_FACTORY_CLASS,
//         dependencies = "before:guideapi")
// public class MobTotems {
//     @Mod.Instance
//     public static MobTotems instance;
// 
//     @SidedProxy(clientSide = Reference.CLIENT_SIDE_PROXY_CLASS, serverSide = Reference.SERVER_SIDE_PROXY_CLASS)
//     public static CommonProxy proxy;
// 
//     private static MobTotemsComponent mobTotemsComponent;
// 
//     @Mod.EventHandler
//     public void preInit(FMLPreInitializationEvent event) {
// //        //Dagger 2 implementation
// //        mobTotemsComponent = proxy.initializeDagger(instance);
// 
//         // Network & Messages
//         Network.init();
//         NetworkRegistry.INSTANCE.registerGuiHandler(instance, new OfferingBoxGuiHandler());
// 
//         // Config
//         ConfigurationHandler.Init(event.getSuggestedConfigurationFile());
//         MinecraftForge.EVENT_BUS.register(new ConfigurationHandler());
// 
//         // Helper stuff
//         TotemHelper.init();
//         MinecraftForge.EVENT_BUS.register(new CreeperLogic.CreeperTotemEntityJoinWorldEvent());
//         MinecraftForge.EVENT_BUS.register(new CowLogic.CowTotemEntityJoinWorldEvent());
//         MinecraftForge.EVENT_BUS.register(new EnderLogic.EnderTotemEnderTeleportEvent());
// 
//         // Blocks
//         ModBlocks.init();
// 
//         // Items
//         ModItems.init();
// 
//         // Entities
//         ModEntities.init();
//         ModEntities.registerEntities(instance);
//         proxy.registerEntityRenders();
// 
//         // Keybinds
//         proxy.registerKeys();
//     }
// 
//     public static MobTotemsComponent component() {
//         return mobTotemsComponent;
//     }
// 
//     @Mod.EventHandler
//     public void init(FMLInitializationEvent event) {
//         proxy.registerRenders();
//     }
// 
//     @Mod.EventHandler
//     public void postInit(FMLPostInitializationEvent event) {
//         proxy.registerGui();
//         proxy.registerParticleRenderer();
//     }
// }
// 
// Path: src/main/java/com/corwinjv/mobtotems/particles/ModParticles.java
// public class ModParticles {
//     public static final int WOLF_IDLE_SMOKE = 0;
//     public static final int WOLF_ENTRANCE_SMOKE = 1;
//     public static final int WOLF_EXIT_SMOKE = 2;
// 
//     @SideOnly(Side.CLIENT)
//     public static class Factory implements IParticleFactory {
//         @Nullable
//         public Particle createParticle(int particleID, @Nonnull World worldIn, double xCoordIn, double yCoordIn, double zCoordIn, double xSpeedIn, double ySpeedIn, double zSpeedIn, int... p_178902_15_) {
//             Particle ret = null;
// 
//             switch (particleID) {
//                 case WOLF_IDLE_SMOKE: {
//                     ret = new WolfIdleParticle(worldIn, xCoordIn, yCoordIn, zCoordIn, xSpeedIn, ySpeedIn, zSpeedIn);
//                     break;
//                 }
//                 default: {
//                     FMLLog.log(Level.ERROR, "Unknown particleId: " + particleID);
//                     break;
//                 }
//             }
// 
//             return ret;
//         }
//     }
// }


// Path: src/main/java/com/corwinjv/mobtotems/entities/EntitySpiritWolf.java
import com.corwinjv.mobtotems.MobTotems;
import com.corwinjv.mobtotems.particles.ModParticles;
import net.minecraft.client.Minecraft;
import net.minecraft.client.particle.IParticleFactory;
import net.minecraft.client.particle.Particle;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.*;
import net.minecraft.entity.monster.EntityMob;
import net.minecraft.entity.passive.EntityWolf;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

        }

        if (getEntityWorld().isRemote) {
            spawnParticles();
        }
    }

    @SuppressWarnings("unchecked")
    @Override
    protected void initEntityAI() {
        this.aiSit = new EntityAISit(this);
        this.tasks.addTask(1, new EntityAISwimming(this));
        this.tasks.addTask(3, new EntityAILeapAtTarget(this, 0.4F));
        this.tasks.addTask(4, new EntityAIAttackMelee(this, 1.0D, true));
        this.tasks.addTask(5, new EntityAIFollowOwner(this, 1.0D, 10.0F, 2.0F));
        this.tasks.addTask(7, new EntityAIWander(this, 1.0D));
        this.targetTasks.addTask(1, new EntityAIOwnerHurtByTarget(this));
        this.targetTasks.addTask(2, new EntityAIOwnerHurtTarget(this));
        this.targetTasks.addTask(3, new EntityAIHurtByTarget(this, true));
        this.targetTasks.addTask(5, new EntityAINearestAttackableTarget(this, EntityMob.class, false));
    }

    @Override
    protected void applyEntityAttributes() {
        super.applyEntityAttributes();
        this.getEntityAttribute(SharedMonsterAttributes.ATTACK_DAMAGE).setBaseValue(4.0D);
    }

    @SideOnly(Side.CLIENT)
    private void spawnParticles() {
        IParticleFactory particleFactory = new ModParticles.Factory();