Jump to content

Recommended Posts

Posted

That is a complicated model so it is hard to easily see what might be wrong. 

 

One thing I think may be wrong is that you might have the array indexes reversed.  Since you put the angles for the cycle all in one row, I think that where you have:

    LeftFemur.rotateAngleX = degToRad(undulationCycle[cycleIndex][0]) ;

    RightFemur.rotateAngleX = degToRad(undulationCycle[cycleIndex][1]) ;

    LeftHumerus.rotateAngleX = degToRad(undulationCycle[cycleIndex][2]) ;

    RightHumerus.rotateAngleX = degToRad(undulationCycle[cycleIndex][3]) ;

 

maybe it should be:

    LeftFemur.rotateAngleX = degToRad(undulationCycle[0][cycleIndex]) ;

    RightFemur.rotateAngleX = degToRad(undulationCycle[1][cycleIndex]) ;

    LeftHumerus.rotateAngleX = degToRad(undulationCycle[2][cycleIndex]) ;

    RightHumerus.rotateAngleX = degToRad(undulationCycle[3][cycleIndex]) ;

 

See I switched around the indexes.

 

If that doesn't help, then I think you have to add more console statements to see if the values are progressing through the array as you expect.

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Posted

Sorry for taking so long to respond, I was trying to fix a memory leak with my packets. But yeah, it's still a little choppy but not as bad now with the new code. Also I'm having trouble toggling the sprinting. Whenever I press the key that tells it to sprint, it sprints but the animation gets stuck sprinting and it seems to be the boolean getting fixed on true

 

Packet

package common.zeroquest.network.imessage;

import io.netty.buffer.ByteBuf;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;

import common.zeroquest.entity.EntityZertumEntity;

public class ZertumSprint implements IMessage{

public int entityId;
  	 public ZertumSprint(){}
 public ZertumSprint(int entityId)
 {
	 this.entityId = entityId;
 } 

    @Override
    public void fromBytes(ByteBuf buf) {
    	entityId = buf.readInt();
    }

    @Override
    public void toBytes(ByteBuf buf) {
        buf.writeInt(this.entityId);
    }


    public static class Handler implements IMessageHandler<ZertumSprint, IMessage> {
      	 public Handler(){}
      	 
	@Override
	public IMessage onMessage(ZertumSprint message, MessageContext ctx) {

		Entity target = ctx.getServerHandler().playerEntity.worldObj.getEntityByID(message.entityId);
        if(!(target instanceof EntityZertumEntity))
        	return null;
        
        EntityZertumEntity dog = (EntityZertumEntity)target;
        if(dog.riddenByEntity != null)
        	dog.setDashing(true);
		return message;
	}
    }
}

 

KeyState

package common.zeroquest.core.handlers;

import java.util.HashMap;

import net.minecraft.client.Minecraft;
import net.minecraft.client.settings.KeyBinding;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraftforge.fml.client.FMLClientHandler;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent.Phase;

import org.lwjgl.input.Keyboard;

import common.zeroquest.ModItems;
import common.zeroquest.entity.EntityJakan;
import common.zeroquest.entity.EntityKortor;
import common.zeroquest.entity.EntityZertumEntity;
import common.zeroquest.network.PacketHandler;
import common.zeroquest.network.imessage.JakanJump;
import common.zeroquest.network.imessage.KortorJump;
import common.zeroquest.network.imessage.SealCommand;
import common.zeroquest.network.imessage.ZertumJump;
import common.zeroquest.network.imessage.ZertumSprint;

/**
* @author ProPercivalalb
**/
public class KeyStateHandler {

    public static final KeyBinding come = new KeyBinding("zeroquest.key.come", Keyboard.KEY_W, "key.categories.zeroquest");
    public static final KeyBinding stay = new KeyBinding("zeroquest.key.stay", Keyboard.KEY_S, "key.categories.zeroquest");
    public static final KeyBinding ok = new KeyBinding("zeroquest.key.ok", Keyboard.KEY_D, "key.categories.zeroquest");
    public static final KeyBinding heel = new KeyBinding("zeroquest.key.heel", Keyboard.KEY_A, "key.categories.zeroquest");
    public static final KeyBinding sprint = new KeyBinding("zeroquest.key.sprint", Keyboard.KEY_Z, "key.categories.zeroquest");
    public static final KeyBinding[] keyBindings = new KeyBinding[] {come, stay, ok, heel, sprint, Minecraft.getMinecraft().gameSettings.keyBindJump};
    
   	private HashMap<KeyBinding, Boolean> keyState = new HashMap<KeyBinding, Boolean>();
    private Minecraft mc = Minecraft.getMinecraft();
    
    
    @SubscribeEvent
    public void keyEvent(ClientTickEvent event) {
    	this.keyTick(event.phase == Phase.END);
    }
    
    private void keyTick(boolean tickEnd) {
    	for(KeyBinding kb : keyBindings) {
        if(kb.isKeyDown()) {
            if (!tickEnd && (!this.keyState.containsKey(kb) || !this.keyState.get(kb))) {
            	this.keyState.put(kb, true);
            	//Key Pressed
            	EntityPlayer player = FMLClientHandler.instance().getClientPlayerEntity();
            	
            	if(kb == mc.gameSettings.keyBindJump) {
            		if(player.ridingEntity instanceof EntityZertumEntity && mc.currentScreen == null) {
            			EntityZertumEntity dog = (EntityZertumEntity)player.ridingEntity;
            			PacketHandler.sendToServer(new ZertumJump(dog.getEntityId()));
            		}
            		
            		else if(player.ridingEntity instanceof EntityJakan && mc.currentScreen == null) {
            			EntityJakan dog = (EntityJakan)player.ridingEntity;
            			PacketHandler.sendToServer(new JakanJump(dog.getEntityId()));
            		}
            		
            		else if(player.ridingEntity instanceof EntityKortor && mc.currentScreen == null) {
            			EntityKortor dog = (EntityKortor)player.ridingEntity;
            			PacketHandler.sendToServer(new KortorJump(dog.getEntityId()));
            		}
            	}
            	else if(kb == sprint) {
            		if(player.ridingEntity instanceof EntityZertumEntity && mc.currentScreen == null) {
            			EntityZertumEntity dog = (EntityZertumEntity)player.ridingEntity;
            			PacketHandler.sendToServer(new ZertumSprint(dog.getEntityId()));
            		}
            	}
            	else if(FMLClientHandler.instance().getClient().inGameHasFocus && player != null && player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() == ModItems.commandSeal) {
            	    int command = -1;
            	   
                	if(kb == come) {
                		command = 1;
                	}
                	else if(kb == stay) {
                		command = 2;
                	}
                	else if(kb == ok) {
                		command = 3;
                	}
                	else if(kb == heel) {
                		command = 4;
                	}

                	if(command != -1)
                		PacketHandler.sendToServer(new SealCommand(command));
               }
            }
            else if(!tickEnd) {
            	//Key Released
            	
            }
        }
        else {
        	this.keyState.put(kb, false);
        }
    	}
    }
}

 

Model

package common.zeroquest.client.renderer.entity.model;

import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.util.MathHelper;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

import org.lwjgl.opengl.GL11;

import common.zeroquest.entity.EntityZertumEntity;

@SideOnly(Side.CLIENT)
public class ModelZertum extends ModelBase
{
  //fields
    ModelRenderer Nose;
    ModelRenderer Ear2;
    ModelRenderer Ear1;
    ModelRenderer Head;
    ModelRenderer LeftHindLeg1;
    ModelRenderer LeftHindLeg2;
    ModelRenderer LeftHindLeg3;
    ModelRenderer RightHindLeg1;
    ModelRenderer RightHindLeg2;
    ModelRenderer RightHindLeg3;
    ModelRenderer Mane1;
    ModelRenderer RightLeg;
    ModelRenderer LeftLeg;
    ModelRenderer Tail1;
    ModelRenderer Tail2;
    ModelRenderer Tail3;
    ModelRenderer Mane2;
    ModelRenderer Torso;
    ModelRenderer Neck;
    ModelRenderer Pad1;
    ModelRenderer Pad2;
    ModelRenderer Pad3;
    ModelRenderer Pad4;
    ModelRenderer PadPart1;
    ModelRenderer PadPart2;
    ModelRenderer Rope1;
    ModelRenderer Metal1;
    ModelRenderer Rope2;
    ModelRenderer Metal2;
    ModelRenderer Seat1;
    ModelRenderer Seat2;
    private float rightFemur = -0.2974289F;
    private float leftFemur = -0.2974289F;
    private float rightTibia = 0.8205006F;
    private float leftTibia = 0.8205006F;
    private float rightMetatarus = -0.5205006F;
    private float leftMetatarus = -0.5205006F;
    private float mane2StartingRotation = -0.34653F;
    private float vertebrae = -0.6015813F;
    
    //Evolved Model\\
    ModelRenderer Throat;
    ModelRenderer UpSection;
    ModelRenderer MidSection;
    ModelRenderer Pelvis;
    ModelRenderer TailPart1;
    ModelRenderer TailPart2;
    ModelRenderer TailPart3;
    ModelRenderer LeftHumerus;
    ModelRenderer LeftRadius;
    ModelRenderer LeftFClawRPart1;
    ModelRenderer LeftFClawRPart2;
    ModelRenderer LeftFClawMPart1;
    ModelRenderer LeftFClawMPart2;
    ModelRenderer LeftFClawLPart1;
    ModelRenderer LeftFClawLPart2;
    ModelRenderer RightHumerus;
    ModelRenderer RightRadius;
    ModelRenderer RightFClawRPart1;
    ModelRenderer RightFClawRPart2;
    ModelRenderer RightFClawMPart1;
    ModelRenderer RightFClawMPart2;
    ModelRenderer RightFClawLPart1;
    ModelRenderer RightFClawLPart2;
    ModelRenderer LeftFemur;
    ModelRenderer LeftTibia;
    ModelRenderer LeftMetatarsus;
    ModelRenderer LeftClawRPart1;
    ModelRenderer LeftClawRPart2;
    ModelRenderer LeftClawLPart1;
    ModelRenderer LeftClawLPart2;
    ModelRenderer LeftClawMPart1;
    ModelRenderer LeftClawMPart2;
    ModelRenderer RightFemur;
    ModelRenderer RightTibia;
    ModelRenderer RightMetatarsus;
    ModelRenderer RightClawRPart1;
    ModelRenderer RightClawRPart2;
    ModelRenderer RightClawMPart1;
    ModelRenderer RightClawMPart2;
    ModelRenderer RightClawLPart1;
    ModelRenderer RightClawLPart2;
    ModelRenderer RightEarPart1;
    ModelRenderer LeftBottomJaw;
    ModelRenderer RightEarPart2;
    ModelRenderer BottomJawPart1;
    ModelRenderer RightEarPart3;
    ModelRenderer BottomJawPart2;
    ModelRenderer LeftEarPart1;
    ModelRenderer BottomJawCenter;
    ModelRenderer LeftEarPart2;
    ModelRenderer LeftTopTeeth;
    ModelRenderer LeftEarPart3;
    ModelRenderer LeftTopJaw;
    ModelRenderer LeftBottomTeeth;
    ModelRenderer RightTopTeeth;
    ModelRenderer RightBottomTeeth;
    ModelRenderer TopJawPart1;
    ModelRenderer TopJawPart2;
    ModelRenderer TopJawCenter;
    ModelRenderer RightTopJaw;
    ModelRenderer RightBottomJaw;
    ModelRenderer EPad1;
    ModelRenderer EPad2;
    ModelRenderer EPad3;
    ModelRenderer EPad4;
    ModelRenderer EPadPart1;
    ModelRenderer EPadPart2;
    ModelRenderer ERope1;
    ModelRenderer EMetal1;
    ModelRenderer ERope2;
    ModelRenderer EMetal2;
    ModelRenderer ESeat1;
    ModelRenderer ESeat2;
    
    // create an animation cycle
    // for movement based animations you need to measure distance moved
    // and perform number of cycles per block distance moved.
    protected double distanceMovedTotal = 0.0D;
    // don't make this too large or animations will be skipped

    protected static final double CYCLES_PER_BLOCK = 1.3D; 
    protected int cycleIndex = 0;
    protected float[][] undulationCycle = new float[][]
    {
        {-32, -27, -22, -18, -15, -12, -9, -6, -3, 0, 3, 6, 
        	9, 12, 15, 18, 22, 27, 32, 27, 22, 18, 15, 
        	12, 9, 6, 3, 0, -3, -6, -9, -12, -15, -18, -22, -27, -32},
        {0, 3, 6, 
            	9, 12, 15, 18, 22, 27, 32, 27, 22, 18, 15, 
            	12, 9, 6, 3, 0, -3, -6, -9, -12, -15, -18, -22, -27, -32},
                {-32, -27, -22, -18, -15, -12, -9, -6, -3, 0, 3, 6, 
                	9, 12, 15, 18, 22, 27, 32, 27, 22, 18, 15, 
                	12, 9, 6, 3, 0, -3, -6, -9, -12, -15, -18, -22, -27, -32},
                    {0, 3, 6, 
                    	9, 12, 15, 18, 22, 27, 32, 27, 22, 18, 15, 
                    	12, 9, 6, 3, 0, -3, -6, -9, -12, -15, -18, -22, -27, -32},
    };
  
  public ModelZertum()
  {
  
      textureWidth = 256;
      textureHeight = 128;
    
    Nose = new ModelRenderer(this, 25, 27);
    Nose.addBox(-1.5F, 0F, -3F, 3, 3, 4);
    Nose.setRotationPoint(0F, 2.5F, -15F);
    setRotation(Nose, 0F, 0F, 0F);
    Ear2 = new ModelRenderer(this, 40, 28);
    Ear2.addBox(-1F, -3F, 0F, 2, 3, 1);
    Ear2.setRotationPoint(2F, -0.5F, -10.5F);
    setRotation(Ear2, 0F, 0F, 0F);
    Ear1 = new ModelRenderer(this, 40, 28);
    Ear1.addBox(-1F, -3F, 0F, 2, 3, 1);
    Ear1.setRotationPoint(-2F, -0.5F, -10.5F);
    setRotation(Ear1, 0F, 0F, 0F);
    Head = new ModelRenderer(this, 25, 15);
    Head.addBox(-3F, -0.5F, -14F, 6, 6, 5);
    Head.setRotationPoint(-0.5F, 6F, -3F);
    setRotation(Head, 0F, 0F, 0F);
    LeftHindLeg1 = new ModelRenderer(this, 11, 18);
    LeftHindLeg1.addBox(-1F, 0F, -1F, 2, 5, 3);
    LeftHindLeg1.setRotationPoint(1.5F, 13F, 5F);
    setRotation(LeftHindLeg1, -0.2974289F, 0F, 0F);
    LeftHindLeg2 = new ModelRenderer(this, 3, 44);
    LeftHindLeg2.addBox(-1F, 0F, -1F, 2, 4, 2);
    LeftHindLeg2.setRotationPoint(0F, 4.3F, -0.3F);
    setRotation(LeftHindLeg2, leftTibia, 0F, 0F);
    LeftHindLeg3 = new ModelRenderer(this, 0, 51);
    LeftHindLeg3.addBox(-1F, 0F, -1F, 2, 4, 2);
    LeftHindLeg3.setRotationPoint(0F, 3.55F, 0.2F);
    setRotation(LeftHindLeg3, leftMetatarus, 0F, 0F);
    RightHindLeg1 = new ModelRenderer(this, 11, 31);
    RightHindLeg1.addBox(-1F, 0F, -1F, 2, 5, 3);
    RightHindLeg1.setRotationPoint(-2.5F, 13F, 5F);
    setRotation(RightHindLeg1, -0.2974289F, 0F, 0F);
    RightHindLeg2 = new ModelRenderer(this, 3, 44);
    RightHindLeg2.addBox(-1F, 0F, -1F, 2, 4, 2);
    RightHindLeg2.setRotationPoint(0F, 4.3F, -0.3F);
    setRotation(RightHindLeg2, rightTibia, 0F, 0F);
    RightHindLeg3 = new ModelRenderer(this, 9, 51);
    RightHindLeg3.addBox(-1F, 0F, -1F, 2, 4, 2);
    RightHindLeg3.setRotationPoint(0F, 3.55F, 0.2F);
    setRotation(RightHindLeg3, rightMetatarus, 0F, 0F);
      Mane1 = new ModelRenderer(this, 43, 0);
      Mane1.addBox(-3F, -3F, -3F, 6, 6, 7);
      Mane1.setRotationPoint(-0.5F, 14F, -3F);
      setRotation(Mane1, 1.496439F, 0F, 0F);
      Neck = new ModelRenderer(this, 0, 0);
      Neck.addBox(-2.5F, -12F, -4F, 4, 7, 4);
      Neck.setRotationPoint(0.5F, 0F, 0F);
      setRotation(Neck, -0.6015813F, 0F, 0F);
      Mane2 = new ModelRenderer(this, 18, 0);
      Mane2.addBox(-2.5F, -7F, -3.6F, 5, 6, 7);
      Mane2.setRotationPoint(0F, 0F, 0F);
      setRotation(Mane2, -0.34653F, 0F, 0F);
      RightLeg = new ModelRenderer(this, 0, 30);
      RightLeg.addBox(-1F, 0F, -1F, 2, 10, 2);
      RightLeg.setRotationPoint(-3F, 14F, -4F);
      setRotation(RightLeg, 0F, 0F, 0F);
      LeftLeg = new ModelRenderer(this, 0, 16);
      LeftLeg.addBox(-1F, 0F, -1F, 2, 10, 2);
      LeftLeg.setRotationPoint(2F, 14F, -4F);
      setRotation(LeftLeg, 0F, 0F, 0F);
      Tail1 = new ModelRenderer(this, 91, 0);
      Tail1.addBox(-1.5F, 0F, -1F, 4, 8, 4);
      Tail1.setRotationPoint(-1F, 14.3F, 6F);
      setRotation(Tail1, 1.315962F, 0F, 0F);
      Tail2 = new ModelRenderer(this, 110, 0);
      Tail2.addBox(-1.5F, 0F, -1F, 3, 8, 3);
      Tail2.setRotationPoint(0.5F, 6F, 0.5F);
      setRotation(Tail2, -0.041605F, 0F, 0F);
      Tail3 = new ModelRenderer(this, 110, 13);
      Tail3.addBox(-1F, 0F, -1F, 2, 8, 2);
      Tail3.setRotationPoint(0F, 6.5F, 0.5F);
      setRotation(Tail3, 0.001605F, 0F, 0F);
      Torso = new ModelRenderer(this, 69, 0);
      Torso.addBox(-2.5F, -3F, -3F, 5, 9, 5);
      Torso.setRotationPoint(-0.5F, 12.5F, 1F);
      setRotation(Torso, 1.496439F, 0F, 0F);
      
      //Saddle\\
      Pad1 = new ModelRenderer(this, 110, 32);
      Pad1.addBox(-2F, 0F, 0F, 4, 1, 1);
      Pad1.setRotationPoint(-0.5F, 9.3F, -2.5F);
      setRotation(Pad1, -0.0650564F, 0F, 0F);
      Pad2 = new ModelRenderer(this, 110, 35);
      Pad2.addBox(-3F, 0F, 0F, 6, 1, 2);
      Pad2.setRotationPoint(-0.5F, 9.4F, -1.5F);
      setRotation(Pad2, -0.0743572F, 0F, 0F);
      Pad3 = new ModelRenderer(this, 110, 39);
      Pad3.addBox(-2F, 0F, 0F, 5, 1, 4);
      Pad3.setRotationPoint(-1F, 9.5F, 0.2F);
      setRotation(Pad3, -0.0650564F, 0F, 0F);
      Pad4 = new ModelRenderer(this, 110, 48);
      Pad4.addBox(-1.5F, 0F, 0F, 3, 1, 1);
      Pad4.setRotationPoint(-0.5F, 9.8F, 4.1F);
      setRotation(Pad4, -0.0650564F, 0F, 0F);
      PadPart1 = new ModelRenderer(this, 110, 29);
      PadPart1.addBox(-0.5F, 0F, 0F, 1, 1, 1);
      PadPart1.setRotationPoint(1F, 9.23F, -3.5F);
      setRotation(PadPart1, -0.0650564F, 0F, 0F);
      PadPart2 = new ModelRenderer(this, 110, 29);
      PadPart2.addBox(-0.5F, 0F, 0F, 1, 1, 1);
      PadPart2.setRotationPoint(-2F, 9.2F, -3.5F);
      setRotation(PadPart2, -0.0650564F, 0F, 0F);
      Rope1 = new ModelRenderer(this, 105, 32);
      Rope1.addBox(0F, 0F, -0.5F, 1, 4, 1);
      Rope1.setRotationPoint(1.8F, 9.6F, 0F);
      setRotation(Rope1, 0F, 0F, 0F);
      Metal1 = new ModelRenderer(this, 102, 39);
      Metal1.addBox(0F, 0F, -1F, 1, 1, 2);
      Metal1.setRotationPoint(1.8F, 13.6F, 0F);
      setRotation(Metal1, 0F, 0F, 0F);
      Rope2 = new ModelRenderer(this, 105, 32);
      Rope2.addBox(-1F, 0F, -0.5F, 1, 4, 1);
      Rope2.setRotationPoint(-2.8F, 9.6F, 0F);
      setRotation(Rope2, 0F, 0F, 0F);
      Metal2 = new ModelRenderer(this, 102, 39);
      Metal2.addBox(0F, 0F, -1F, 1, 1, 2);
      Metal2.setRotationPoint(-3.8F, 13.6F, 0F);
      setRotation(Metal2, 0F, 0F, 0F);
      Seat1 = new ModelRenderer(this, 100, 45);
      Seat1.addBox(-1F, 0F, 0F, 2, 1, 1);
      Seat1.setRotationPoint(-0.5F, 8.7F, -1.5F);
      setRotation(Seat1, -0.0650484F, 0F, 0F);
      Seat2 = new ModelRenderer(this, 100, 49);
      Seat2.addBox(-2F, 0F, 0F, 4, 1, 1);
      Seat2.setRotationPoint(-0.5F, 9F, 3.2F);
      setRotation(Seat2, -0.0650484F, 0F, 0F);
      Head.addChild(Nose);
      Head.addChild(Ear1);
      Head.addChild(Ear2);
      LeftHindLeg1.addChild(LeftHindLeg2);
      RightHindLeg1.addChild(RightHindLeg2);
      LeftHindLeg2.addChild(LeftHindLeg3);
      RightHindLeg2.addChild(RightHindLeg3);
      Mane1.addChild(Mane2);
      Mane1.addChild(Neck);
      Tail1.addChild(Tail2);
      Tail2.addChild(Tail3);

      //Ears\\
      RightEarPart1 = new ModelRenderer(this, 18, 60);
      RightEarPart1.addBox(-1F, -1F, -1F, 1, 1, 4);
      RightEarPart1.setRotationPoint(-1.5F, 1.5F, -5F);
      RightEarPart1.setTextureSize(256, 128);
      setRotation(RightEarPart1, 0.0346075F, -0.3346075F, 0F);
      RightEarPart2 = new ModelRenderer(this, 15, 66);
      RightEarPart2.addBox(-1F, -1F, 0F, 2, 2, 6);
      RightEarPart2.setRotationPoint(-0.5F, -0.5F, 0F);
      RightEarPart2.setTextureSize(256, 128);
      setRotation(RightEarPart2, 0.3346075F, -0.0346075F, 0F);
      RightEarPart3 = new ModelRenderer(this, 16, 75);
      RightEarPart3.addBox(-0.5F, -0.5F, 0F, 1, 1, 6);
      RightEarPart3.setRotationPoint(-0.5F, 0F, 4F);
      RightEarPart3.setTextureSize(256, 128);
      setRotation(RightEarPart3, 0.0346075F, 0.4115358F, 0.0743572F);
      LeftEarPart1 = new ModelRenderer(this, 18, 60);
      LeftEarPart1.addBox(-1F, -1F, -1F, 1, 1, 4);
      LeftEarPart1.setRotationPoint(3.5F, 1.5F, -5F);
      LeftEarPart1.setTextureSize(256, 128);
      setRotation(LeftEarPart1, 0.3346075F, 0.3346145F, 0F);
      LeftEarPart2 = new ModelRenderer(this, 15, 66);
      LeftEarPart2.addBox(-1F, -1F, 0F, 2, 2, 6);
      LeftEarPart2.setRotationPoint(-0.5F, -0.5F, 0F);
      LeftEarPart2.setTextureSize(256, 128);
      setRotation(LeftEarPart2, 0.0346075F, 0.0346145F, 0F);
      LeftEarPart3 = new ModelRenderer(this, 16, 75);
      LeftEarPart3.addBox(-0.5F, -0.5F, 0F, 1, 1, 6);
      LeftEarPart3.setRotationPoint(0.5F, 0F, 4F);
      LeftEarPart3.setTextureSize(256, 128);
      setRotation(LeftEarPart3, 0.0346145F, -0.411544F, -0.074351F);
      
        Throat = new ModelRenderer(this, 0, 0);
        Throat.addBox(-2F, -3F, -9F, 6, 5, 6);
        Throat.setRotationPoint(-1F, 7.7F, -11F);
        Throat.setTextureOffset(256, 128);
        setRotation(Throat, -0.2288904F, 0F, 0F);
        UpSection = new ModelRenderer(this, 25, 0);
        UpSection.addBox(-2F, -2.5F, -9F, 7, 7, ;
        UpSection.setRotationPoint(-1.5F, 7F, -6F);
        UpSection.setTextureSize(256, 128);
        setRotation(UpSection, -0.1917118F, 0F, 0F);
        MidSection = new ModelRenderer(this, 56, 0);
        MidSection.addBox(-2F, -2.5F, 0F, 6, 6, 9);
        MidSection.setRotationPoint(-1F, 7.5F, -8F);
        MidSection.setTextureSize(256, 128);
        setRotation(MidSection, -0.0429974F, 0F, 0F);
        Pelvis = new ModelRenderer(this, 87, 0);
        Pelvis.addBox(-2F, -2.5F, 0F, 6, 6, 7);
        Pelvis.setRotationPoint(-1F, 7.8F, 0F);
        Pelvis.setTextureSize(256, 128);
        setRotation(Pelvis, 0F, 0F, 0F);
        TailPart1 = new ModelRenderer(this, 114, 0);
        TailPart1.addBox(-1F, -1F, 0F, 2, 2, 11);
        TailPart1.setRotationPoint(0F, 7F, 6F);
        TailPart1.setTextureOffset(256, 128);
        setRotation(TailPart1, -0.3346075F, 0F, 0F);
        TailPart2 = new ModelRenderer(this, 141, 0);
        TailPart2.addBox(-1F, -1F, 0F, 2, 2, 11);
        TailPart2.setRotationPoint(0F, -0.2F, 10F);
        TailPart2.setTextureSize(256, 128);
        setRotation(TailPart2, -0.3948578F, 0F, 0F);
        TailPart3 = new ModelRenderer(this, 168, 0);
        TailPart3.addBox(-1F, -1F, 0F, 2, 2, 11);
        TailPart3.setRotationPoint(0F, 0F, 10.8F);
        TailPart3.setTextureSize(256, 128);
        setRotation(TailPart3, 0.2974289F, 0F, 0F);
        
        LeftHumerus = new ModelRenderer(this, 39, 16);
        LeftHumerus.addBox(0F, 0F, 0F, 3, 10, 4);
        LeftHumerus.setRotationPoint(1.5F, 4.7F, -12F);
        LeftHumerus.setTextureSize(256, 128);
        setRotation(LeftHumerus, 0.3869765F, 0F, 0F);
        LeftRadius = new ModelRenderer(this, 71, 16);
        LeftRadius.addBox(0F, 0F, 0F, 3, 11, 4);
        LeftRadius.setRotationPoint(0F, 8.0F, 0.45F);
        LeftRadius.setTextureSize(256, 128);
        setRotation(LeftRadius, -0.3869765F, 0F, 0F);
        LeftFClawRPart1 = new ModelRenderer(this, 0, 58);
        LeftFClawRPart1.addBox(-0.5F, 0F, -1F, 1, 1, 1);
        LeftFClawRPart1.setRotationPoint(0F, 9.7F, 0F);
        LeftFClawRPart1.setTextureSize(256, 128);
        setRotation(LeftFClawRPart1, 0F, 0.5159687F, 0F);
        LeftFClawRPart2 = new ModelRenderer(this, 5, 58);
        LeftFClawRPart2.addBox(-0.5F, -1F, -3.4F, 1, 1, 3);
        LeftFClawRPart2.setRotationPoint(0F, 0F, 0F);
        LeftFClawRPart2.setTextureSize(256, 128);
        setRotation(LeftFClawRPart2, 1.16093F, 0.0259717F, 0F);
        LeftFClawMPart1 = new ModelRenderer(this, 0, 58);
        LeftFClawMPart1.addBox(-0.5F, 0F, -1F, 1, 1, 1);
        LeftFClawMPart1.setRotationPoint(1.5F, 9.7F, 0F);
        LeftFClawMPart1.setTextureSize(256, 128);
        setRotation(LeftFClawMPart1, 0F, 0F, 0F);
        LeftFClawMPart2 = new ModelRenderer(this, 5, 58);
        LeftFClawMPart2.addBox(-0.5F, -1F, -3.4F, 1, 1, 3);
        LeftFClawMPart2.setRotationPoint(0F, 0F, 0F);
        LeftFClawMPart2.setTextureSize(256, 128);
        setRotation(LeftFClawMPart2, 1.16093F, 0F, 0F);
        LeftFClawLPart1 = new ModelRenderer(this, 0, 58);
        LeftFClawLPart1.addBox(-0.5F, 0F, -1F, 1, 1, 1);
        LeftFClawLPart1.setRotationPoint(3F, 9.7F, 0F);
        LeftFClawLPart1.setTextureSize(256, 128);
        setRotation(LeftFClawLPart1, 0F, -0.5159717F, 0F);
        LeftFClawLPart2 = new ModelRenderer(this, 5, 58);
        LeftFClawLPart2.addBox(-0.5F, -1F, -3.4F, 1, 1, 3);
        LeftFClawLPart2.setRotationPoint(0F, 0F, 0F);
        LeftFClawLPart2.setTextureSize(256, 128);
        setRotation(LeftFClawLPart2, 1.16093F, -0.0059717F, 0F);
        
        RightHumerus = new ModelRenderer(this, 55, 16);
        RightHumerus.addBox(-3F, 0F, 0F, 3, 10, 4);
        RightHumerus.setRotationPoint(-1.5F, 4.7F, -12F);
        RightHumerus.setTextureSize(256, 128);
        setRotation(RightHumerus, 0.3869765F, 0F, 0F);
        RightRadius = new ModelRenderer(this, 71, 16);
        RightRadius.addBox(-3F, 0F, 0F, 3, 11, 4);
        RightRadius.setRotationPoint(0F, 8.0F, 0.45F);
        RightRadius.setTextureSize(256, 128);
        setRotation(RightRadius, -0.3869765F, 0F, 0F);
        RightFClawRPart1 = new ModelRenderer(this, 0, 58);
        RightFClawRPart1.addBox(-0.5F, 0F, -1F, 1, 1, 1);
        RightFClawRPart1.setRotationPoint(-3F, 9.7F, 0F);
        RightFClawRPart1.setTextureSize(256, 128);
        setRotation(RightFClawRPart1, 0F, 0.5159687F, 0F);
        RightFClawRPart2 = new ModelRenderer(this, 5, 58);
        RightFClawRPart2.addBox(-0.5F, -1F, -3.4F, 1, 1, 3);
        RightFClawRPart2.setRotationPoint(0F, 0F, 0F);
        RightFClawRPart2.setTextureSize(256, 128);
        setRotation(RightFClawRPart2, 1.16093F, 0.0259717F, 0F);
        RightFClawMPart1 = new ModelRenderer(this, 0, 58);
        RightFClawMPart1.addBox(-0.5F, 0F, -1F, 1, 1, 1);
        RightFClawMPart1.setRotationPoint(-1.5F, 9.7F, 0F);
        RightFClawMPart1.setTextureSize(256, 128);
        setRotation(RightFClawMPart1, 0F, 0F, 0F);
        RightFClawMPart2 = new ModelRenderer(this, 5, 58);
        RightFClawMPart2.addBox(-0.5F, -1F, -3.4F, 1, 1, 3);
        RightFClawMPart2.setRotationPoint(0F, 0F, 0F);
        RightFClawMPart2.setTextureSize(256, 128);
        setRotation(RightFClawMPart2, 1.16093F, 0F, 0F);
        RightFClawLPart1 = new ModelRenderer(this, 0, 58);
        RightFClawLPart1.addBox(-0.5F, 0F, -1F, 1, 1, 1);
        RightFClawLPart1.setRotationPoint(0F, 9.7F, 0F);
        RightFClawLPart1.setTextureSize(256, 128);
        setRotation(RightFClawLPart1, 0F, -0.5159717F, 0F);
        RightFClawLPart2 = new ModelRenderer(this, 5, 58);
        RightFClawLPart2.addBox(-0.5F, -1F, -3.4F, 1, 1, 3);
        RightFClawLPart2.setRotationPoint(0F, 0F, 0F);
        RightFClawLPart2.setTextureSize(256, 128);
        setRotation(RightFClawLPart2, 1.16093F, -0.0059717F, 0F);
        
        LeftFemur = new ModelRenderer(this, 19, 16);
        LeftFemur.addBox(0F, 0F, 0F, 3, 8, 6);
        LeftFemur.setRotationPoint(1.5F, 5.7F, 0F);
        LeftFemur.setTextureSize(256, 128);
        setRotation(LeftFemur, 0F, 0F, 0F);
        LeftTibia = new ModelRenderer(this, 0, 31);
        LeftTibia.addBox(0F, 0F, 0F, 3, 3, 9);
        LeftTibia.setRotationPoint(0F, 7.7F, 0F);
        LeftTibia.setTextureSize(256, 128);
        setRotation(LeftTibia, 0F, 0F, 0F);
        LeftMetatarsus = new ModelRenderer(this, 0, 44);
        LeftMetatarsus.addBox(0F, 0F, 0F, 3, 10, 3);
        LeftMetatarsus.setRotationPoint(0F, -0.02F, 8F);
        LeftMetatarsus.setTextureSize(256, 128);
        setRotation(LeftMetatarsus, -0.1289922F, 0F, 0F);
        LeftClawRPart1 = new ModelRenderer(this, 0, 58);
        LeftClawRPart1.addBox(-0.5F, 0F, -1F, 1, 1, 1);
        LeftClawRPart1.setRotationPoint(0F, 9F, 0F);
        LeftClawRPart1.setTextureSize(256, 128);
        setRotation(LeftClawRPart1, 0F, 0.5159687F, 0F);
        LeftClawRPart2 = new ModelRenderer(this, 5, 58);
        LeftClawRPart2.addBox(-0.5F, -1F, -3.4F, 1, 1, 3);
        LeftClawRPart2.setRotationPoint(0F, 0F, 0F);
        LeftClawRPart2.setTextureSize(256, 128);
        setRotation(LeftClawRPart2, 1.16093F, -0.0259717F, 0F);
        LeftClawMPart1 = new ModelRenderer(this, 0, 58);
        LeftClawMPart1.addBox(-0.5F, 0F, -1F, 1, 1, 1);
        LeftClawMPart1.setRotationPoint(1.5F, 9F, 0F);
        LeftClawMPart1.setTextureSize(256, 128);
        setRotation(LeftClawMPart1, 0F, 0F, 0F);
        LeftClawMPart2 = new ModelRenderer(this, 5, 58);
        LeftClawMPart2.addBox(-0.5F, -1F, -3.4F, 1, 1, 3);
        LeftClawMPart2.setRotationPoint(0F, 0F, 0F);
        LeftClawMPart2.setTextureSize(256, 128);
        setRotation(LeftClawMPart2, 1.16093F, 0F, 0F);
        LeftClawLPart1 = new ModelRenderer(this, 0, 58);
        LeftClawLPart1.addBox(-0.5F, 0F, -1F, 1, 1, 1);
        LeftClawLPart1.setRotationPoint(3F, 9F, 0F);
        LeftClawLPart1.setTextureSize(256, 128);
        setRotation(LeftClawLPart1, 0F, -0.5159717F, 0F);
        LeftClawLPart2 = new ModelRenderer(this, 5, 58);
        LeftClawLPart2.addBox(-0.5F, -1F, -3.4F, 1, 1, 3);
        LeftClawLPart2.setRotationPoint(0F, 0F, 0F);
        LeftClawLPart2.setTextureSize(256, 128);
        setRotation(LeftClawLPart2, 1.16093F, 0.0059717F, 0F);
        
        RightFemur = new ModelRenderer(this, 0, 16);
        RightFemur.addBox(-2F, 0F, 0F, 3, 8, 6);
        RightFemur.setRotationPoint(-2.5F, 5.7F, 0F);
        RightFemur.setTextureSize(256, 128);
        setRotation(RightFemur, 0F, 0F, 0F);
        RightTibia = new ModelRenderer(this, 0, 31);
        RightTibia.addBox(-2F, 0F, 0F, 3, 3, 9);
        RightTibia.setRotationPoint(0F, 7.7F, 0F);
        RightTibia.setTextureSize(256, 128);
        setRotation(RightTibia, 0F, 0F, 0F);
        RightMetatarsus = new ModelRenderer(this, 0, 44);
        RightMetatarsus.addBox(-2F, 0F, 0F, 3, 10, 3);
        RightMetatarsus.setRotationPoint(0F, -0.02F, 8F);
        RightMetatarsus.setTextureSize(256, 128);
        setRotation(RightMetatarsus, -0.1289922F, 0F, 0F);
        RightClawRPart1 = new ModelRenderer(this, 0, 58);
        RightClawRPart1.addBox(-0.5F, 0F, -1F, 1, 1, 1);
        RightClawRPart1.setRotationPoint(-2F, 9F, 0F);
        RightClawRPart1.setTextureSize(256, 128);
        setRotation(RightClawRPart1, 0F, 0.5159687F, 0F);
        RightClawRPart2 = new ModelRenderer(this, 5, 58);
        RightClawRPart2.addBox(-0.5F, -1F, -3.4F, 1, 1, 3);
        RightClawRPart2.setRotationPoint(0F, 0F, 0F);
        RightClawRPart2.setTextureSize(256, 128);
        setRotation(RightClawRPart2, 1.16093F, -0.0259717F, 0F);
        RightClawMPart1 = new ModelRenderer(this, 0, 58);
        RightClawMPart1.addBox(-0.5F, 0F, -1F, 1, 1, 1);
        RightClawMPart1.setRotationPoint(-0.5F, 9F, 0F);
        RightClawMPart1.setTextureSize(256, 128);
        setRotation(RightClawMPart1, 0F, 0F, 0F);
        RightClawMPart2 = new ModelRenderer(this, 5, 58);
        RightClawMPart2.addBox(-0.5F, -1F, -3.4F, 1, 1, 3);
        RightClawMPart2.setRotationPoint(0F, 0F, 0F);
        RightClawMPart2.setTextureSize(256, 128);
        setRotation(RightClawMPart2, 1.16093F, 0F, 0F);
        RightClawLPart1 = new ModelRenderer(this, 0, 58);
        RightClawLPart1.addBox(-0.5F, 0F, -1F, 1, 1, 1);
        RightClawLPart1.setRotationPoint(1F, 9F, 0F);
        RightClawLPart1.setTextureSize(256, 128);
        setRotation(RightClawLPart1, 0F, -0.5159717F, 0F);
        RightClawLPart2 = new ModelRenderer(this, 5, 58);
        RightClawLPart2.addBox(-0.5F, -1F, -3.4F, 1, 1, 3);
        RightClawLPart2.setRotationPoint(0F, 0F, 0F);
        RightClawLPart2.setTextureSize(256, 128);
        setRotation(RightClawLPart2, 1.16093F, 0.0059717F, 0F);
        
        //Top Jaw\\
        TopJawCenter = new ModelRenderer(this, 56, 38);
        TopJawCenter.addBox(-0.5F, 0F, -7.4F, 2, 1, ;
        TopJawCenter.setRotationPoint(0.5F, -2.5F, -9F);
        TopJawCenter.setTextureSize(256, 128);
        setRotation(TopJawCenter, 0.2288904F, 0F, 0F);
        LeftTopJaw = new ModelRenderer(this, 39, 50);
        LeftTopJaw.addBox(0F, 0F, -9F, 1, 2, 9);
        LeftTopJaw.setRotationPoint(3F, 0F, 0F);
        LeftTopJaw.setTextureSize(256, 128);
        setRotation(LeftTopJaw, 0F, 0.3346075F, 0F);
        LeftTopTeeth = new ModelRenderer(this, 61, 50);
        LeftTopTeeth.addBox(0.5F, 0F, -9.3F, 0, 1, 5);
        LeftTopTeeth.setRotationPoint(0F, 2F, 0F);
        LeftTopTeeth.setTextureSize(256, 128);
        setRotation(LeftTopTeeth, 0F, -0.0346145F, 0F);
        RightTopJaw = new ModelRenderer(this, 39, 63);
        RightTopJaw.addBox(-1F, 0F, -9F, 1, 2, 9);
        RightTopJaw.setRotationPoint(-2F, 0F, 0F);
        RightTopJaw.setTextureSize(256, 128);
        setRotation(RightTopJaw, 0F, -0.3346075F, 0F);
        RightTopTeeth = new ModelRenderer(this, 61, 50);
        RightTopTeeth.addBox(-0.5F, 0F, -9.3F, 0, 1, 5);
        RightTopTeeth.setRotationPoint(0F, 2F, 0F);
        RightTopTeeth.setTextureSize(256, 128);
        setRotation(RightTopTeeth, 0F, 0.0346075F, 0F);
        TopJawPart1 = new ModelRenderer(this, 38, 40);
        TopJawPart1.addBox(-1F, 0F, -5.7F, 2, 1, 6);
        TopJawPart1.setRotationPoint(-1F, 0F, 0F);
        TopJawPart1.setTextureSize(256, 128);
        setRotation(TopJawPart1, 0F, -0.3346075F, 0F);
        TopJawPart2 = new ModelRenderer(this, 38, 40);
        TopJawPart2.addBox(-1F, 0F, -5.7F, 2, 1, 6);
        TopJawPart2.setRotationPoint(2F, 0F, 0F);
        TopJawPart2.setTextureSize(256, 128);
        setRotation(TopJawPart2, 0F, 0.3346145F, 0F);
        
        //BottomJaw\\
        BottomJawCenter = new ModelRenderer(this, 0, 109);
        BottomJawCenter.addBox(-0.5F, 0F, -7.2F, 2, 1, ;
        BottomJawCenter.setRotationPoint(0.5F, 1.5F, -8F);
        BottomJawCenter.setTextureSize(256, 128);
        setRotation(BottomJawCenter, 0.2288904F, 0F, 0F);
        LeftBottomJaw = new ModelRenderer(this, 0, 84);
        LeftBottomJaw.addBox(0F, 0F, -9F, 1, 2, 9);
        LeftBottomJaw.setRotationPoint(3F, -1.1F, 0F);
        LeftBottomJaw.setTextureSize(256, 128);
        setRotation(LeftBottomJaw, 0F, 0.3346075F, 0F);
        LeftBottomTeeth = new ModelRenderer(this, 21, 93);
        LeftBottomTeeth.addBox(0.5F, 0F, -9.3F, 0, 1, 5);
        LeftBottomTeeth.setRotationPoint(0.5F, -1.2F, 0F);
        LeftBottomTeeth.setTextureSize(256, 128);
        setRotation(LeftBottomTeeth, 0, 0.0346145F, 0F);
        RightBottomJaw = new ModelRenderer(this, 0, 97);
        RightBottomJaw.addBox(-1F, 0F, -9F, 1, 2, 9);
        RightBottomJaw.setRotationPoint(-2F, -1.1F, 0F);
        RightBottomJaw.setTextureSize(256, 128);
        setRotation(RightBottomJaw, 0, -0.3346075F, 0F);
        RightBottomTeeth = new ModelRenderer(this, 21, 93);
        RightBottomTeeth.addBox(-0.5F, 0F, -9.3F, 0, 1, 5);
        RightBottomTeeth.setRotationPoint(-0.5F,-1.2F, 0F);
        RightBottomTeeth.setTextureSize(256, 128);
        setRotation(RightBottomTeeth, 0, -0.0346075F, 0F);
        BottomJawPart1 = new ModelRenderer(this, 21, 84);
        BottomJawPart1.addBox(-1F, 0F, -6.5F, 2, 1, 7);
        BottomJawPart1.setRotationPoint(-1F, 0F, 0F);
        BottomJawPart1.setTextureSize(256, 128);
        setRotation(BottomJawPart1, 0, -0.3346075F, 0F);
        BottomJawPart2 = new ModelRenderer(this, 21, 84);
        BottomJawPart2.addBox(-1F, 0F, -6.5F, 2, 1, 7);
        BottomJawPart2.setRotationPoint(2F, 0F, 0F);
        BottomJawPart2.setTextureSize(256, 128);
        setRotation(BottomJawPart2, 0, 0.3346075F, 0F);
        EPad1 = new ModelRenderer(this, 110, 32);
        EPad1.addBox(-2F, 0F, 0F, 4, 1, 1);
        EPad1.setRotationPoint(0F, 4.5F, -5.5F);
        EPad1.setTextureSize(256, 128);
        setRotation(EPad1, 0F, 0F, 0F);
        EPad2 = new ModelRenderer(this, 110, 35);
        EPad2.addBox(-3F, 0F, 0F, 6, 1, 2);
        EPad2.setRotationPoint(0F, 4.5F, -4.5F);
        EPad2.setTextureSize(256, 128);
        setRotation(EPad2, 0F, 0F, 0F);
        EPad3 = new ModelRenderer(this, 110, 39);
        EPad3.addBox(-2F, 0F, 0F, 5, 1, 4);
        EPad3.setRotationPoint(-0.5F, 4.5F, -2.8F);
        EPad3.setTextureSize(256, 128);
        setRotation(EPad3, 0F, 0F, 0F);
        EPad4 = new ModelRenderer(this, 110, 48);
        EPad4.addBox(-1.5F, 0F, 0F, 3, 1, 1);
        EPad4.setRotationPoint(0F, 4.5F, 1.1F);
        EPad4.setTextureSize(256, 128);
        setRotation(EPad4, 0F, 0F, 0F);
        EPadPart1 = new ModelRenderer(this, 110, 29);
        EPadPart1.addBox(-0.5F, 0F, 0F, 1, 1, 1);
        EPadPart1.setRotationPoint(1.5F, 4.5F, -6.5F);
        EPadPart1.setTextureSize(256, 128);
        setRotation(EPadPart1, 0F, 0F, 0F);
        EPadPart2 = new ModelRenderer(this, 110, 29);
        EPadPart2.addBox(-0.5F, 0F, 0F, 1, 1, 1);
        EPadPart2.setRotationPoint(-1.5F, 4.5F, -6.5F);
        EPadPart2.setTextureSize(256, 128);
        EPadPart2.mirror = true;
        setRotation(EPadPart2, 0F, 0F, 0F);
        ERope1 = new ModelRenderer(this, 105, 32);
        ERope1.addBox(0F, 0F, -0.5F, 1, 6, 1);
        ERope1.setRotationPoint(2.8F, 4.6F, -3F);
        ERope1.setTextureSize(256, 128);
        setRotation(ERope1, 0F, 0F, 0F);
        EMetal1 = new ModelRenderer(this, 102, 41);
        EMetal1.addBox(0F, 0F, -1F, 1, 1, 2);
        EMetal1.setRotationPoint(2.8F, 10.6F, -3F);
        EMetal1.setTextureSize(256, 128);
        setRotation(EMetal1, 0F, 0F, 0F);
        ERope2 = new ModelRenderer(this, 105, 32);
        ERope2.addBox(-1F, 0F, -0.5F, 1, 6, 1);
        ERope2.setRotationPoint(-2.8F, 4.6F, -3F);
        ERope2.setTextureSize(256, 128);
        setRotation(ERope2, 0F, 0F, 0F);
        EMetal2 = new ModelRenderer(this, 102, 41);
        EMetal2.addBox(-1F, 0F, -1F, 1, 1, 2);
        EMetal2.setRotationPoint(-2.8F, 10.6F, -3F);
        EMetal2.setTextureSize(256, 128);
        setRotation(EMetal2, 0F, 0F, 0F);
        ESeat1 = new ModelRenderer(this, 100, 45);
        ESeat1.addBox(-1F, 0F, 0F, 2, 1, 1);
        ESeat1.setRotationPoint(0F, 4F, -4.5F);
        ESeat1.setTextureSize(256, 128);
        setRotation(ESeat1, 0F, 0F, 0F);
        ESeat2 = new ModelRenderer(this, 100, 49);
        ESeat2.addBox(-2F, 0F, 0F, 4, 1, 1);
        ESeat2.setRotationPoint(0F, 4F, 0.2F);
        ESeat2.setTextureSize(256, 128);
        setRotation(ESeat2, 0F, 0F, 0F);
        
        //Head\\
        this.Throat.addChild(TopJawCenter);
        this.Throat.addChild(BottomJawCenter);
        this.TopJawCenter.addChild(LeftEarPart1);
        this.TopJawCenter.addChild(RightEarPart1);
        this.TopJawCenter.addChild(TopJawPart1);
        this.TopJawCenter.addChild(TopJawPart2);
        this.TopJawCenter.addChild(LeftTopJaw);
        this.TopJawCenter.addChild(RightTopJaw);
        this.LeftTopJaw.addChild(LeftTopTeeth);
        this.RightTopJaw.addChild(RightTopTeeth);
        this.LeftEarPart1.addChild(LeftEarPart2);
        this.LeftEarPart2.addChild(LeftEarPart3);
        this.BottomJawCenter.addChild(BottomJawPart1);
        this.BottomJawCenter.addChild(BottomJawPart2);
        this.BottomJawCenter.addChild(LeftBottomJaw);
        this.BottomJawCenter.addChild(RightBottomJaw);
        this.LeftBottomJaw.addChild(LeftBottomTeeth);
        this.RightBottomJaw.addChild(RightBottomTeeth);
        this.RightEarPart1.addChild(RightEarPart2);
        this.RightEarPart2.addChild(RightEarPart3);
        
        //Front Legs\\
        this.LeftHumerus.addChild(LeftRadius);
        this.LeftRadius.addChild(LeftFClawLPart1);
        this.LeftRadius.addChild(LeftFClawMPart1);
        this.LeftRadius.addChild(LeftFClawRPart1);
        this.LeftFClawLPart1.addChild(LeftFClawLPart2);
        this.LeftFClawMPart1.addChild(LeftFClawMPart2);
        this.LeftFClawRPart1.addChild(LeftFClawRPart2);
        this.RightHumerus.addChild(RightRadius);
        this.RightRadius.addChild(RightFClawLPart1);
        this.RightRadius.addChild(RightFClawMPart1);
        this.RightRadius.addChild(RightFClawRPart1);
        this.RightFClawLPart1.addChild(RightFClawLPart2);
        this.RightFClawMPart1.addChild(RightFClawMPart2);
        this.RightFClawRPart1.addChild(RightFClawRPart2);
        
        //Back Legs\\\
        this.LeftFemur.addChild(LeftTibia);
        this.LeftTibia.addChild(LeftMetatarsus);
        this.LeftMetatarsus.addChild(LeftClawLPart1);
        this.LeftMetatarsus.addChild(LeftClawMPart1);
        this.LeftMetatarsus.addChild(LeftClawRPart1);
        this.LeftClawLPart1.addChild(LeftClawLPart2);
        this.LeftClawMPart1.addChild(LeftClawMPart2);
        this.LeftClawRPart1.addChild(LeftClawRPart2);
        this.RightFemur.addChild(RightTibia);
        this.RightTibia.addChild(RightMetatarsus);
        this.RightMetatarsus.addChild(RightClawLPart1);
        this.RightMetatarsus.addChild(RightClawMPart1);
        this.RightMetatarsus.addChild(RightClawRPart1);
        this.RightClawLPart1.addChild(RightClawLPart2);
        this.RightClawMPart1.addChild(RightClawMPart2);
        this.RightClawRPart1.addChild(RightClawRPart2);
        
        //Tail\\
        this.TailPart1.addChild(TailPart2);
        this.TailPart2.addChild(TailPart3);
  }
  
  @Override
  public void render(Entity par1Entity, float par2, float par3, float par4, float par5, float par6, float par7)
  {
      EntityZertumEntity entityzertum = (EntityZertumEntity)par1Entity;
      boolean flag = entityzertum.isSaddled();
      super.render(par1Entity, par2, par3, par4, par5, par6, par7);
      this.setRotationAngles(par2, par3, par4, par5, par6, par7, par1Entity);
      if(!entityzertum.hasEvolved()){
    	  if (this.isChild)
      {
          float f6 = 2.0F;
          GL11.glPushMatrix();
          GL11.glTranslatef(0.0F, 5.0F * par7, 6.0F * par7);
          Head.render(par7);
          GL11.glPopMatrix();
          GL11.glPushMatrix();
          GL11.glScalef(1.0F / f6, 1.0F / f6, 1.0F / f6);
          GL11.glTranslatef(0.0F, 24.0F * par7, 0.0F);
          LeftHindLeg1.render(par7);
          RightHindLeg1.render(par7);
          Mane1.render(par7);
          RightLeg.render(par7);
          LeftLeg.render(par7);
          Tail1.render(par7);
          Torso.render(par7);
          GL11.glPopMatrix();
      }
      else
      {
          GL11.glPushMatrix();
          GL11.glScalef(1.5F, 1.5F, 1.5F);
          GL11.glTranslatef(0.0F, -0.5F, 0.0F);
          Head.render(par7);
          LeftHindLeg1.render(par7);
          RightHindLeg1.render(par7);
          Mane1.render(par7);
          RightLeg.render(par7);
          LeftLeg.render(par7);
          Tail1.render(par7);
          Torso.render(par7);
          GL11.glPopMatrix();
          
          if(flag){
              GL11.glPushMatrix();
              GL11.glScalef(1.5F, 1.5F, 1.5F);
              GL11.glTranslatef(0.0F, -0.5F, 0.0F);
        	  Pad1.render(par7);
        	  Pad2.render(par7);
        	  Pad3.render(par7);
        	  Pad4.render(par7);
        	  PadPart1.render(par7);
        	  PadPart2.render(par7);
        	  Rope1.render(par7);
        	  Metal1.render(par7);
        	  Rope2.render(par7);
        	  Metal2.render(par7);
        	  Seat1.render(par7);
        	  Seat2.render(par7);
              GL11.glPopMatrix();
          }
      }
      }else if(entityzertum.hasEvolved()){
    	    if (this.isChild)
    	    {
    	        float f6 = 2.0F;
    	        GL11.glPushMatrix();
    	        GL11.glTranslatef(0.0F, 5.0F * par7, 6.0F * par7);
    	        Throat.render(par7);
    	        GL11.glPopMatrix();
    	        GL11.glPushMatrix();
    	        GL11.glScalef(1.0F / f6, 1.0F / f6, 1.0F / f6);
    	        GL11.glTranslatef(0.0F, 24.0F * par7, 0.0F);
    	        UpSection.render(par7);
    	        MidSection.render(par7);
    	        Pelvis.render(par7);
    	        TailPart1.render(par7);
    	        LeftHumerus.render(par7);
    	        RightHumerus.render(par7);
    	        LeftFemur.render(par7);
    	        RightFemur.render(par7);
    	        GL11.glPopMatrix();
    	    }
    	    else
    	    {
    	        Throat.render(par7);
    	        UpSection.render(par7);
    	        MidSection.render(par7);
    	        Pelvis.render(par7);
    	        TailPart1.render(par7);
    	        LeftHumerus.render(par7);
    	        RightHumerus.render(par7);
    	        LeftFemur.render(par7);
    	        RightFemur.render(par7);
    	    }
    	    
    	    if(flag){
    	  	  EPad1.render(par7);
    	  	  EPad2.render(par7);
    	  	  EPad3.render(par7);
    	  	  EPad4.render(par7);
    	  	  EPadPart1.render(par7);
    	  	  EPadPart2.render(par7);
    	  	  ERope1.render(par7);
    	  	  EMetal1.render(par7);
    	  	  ERope2.render(par7);
    	  	  EMetal2.render(par7);
    	  	  ESeat1.render(par7);
    	  	  ESeat2.render(par7);
    	    }
      }
  }
  
  /**
   * Used for easily adding entity-dependent animations. The second and third float params here are the same second
   * and third as in the setRotationAngles method.
   */
  @Override
  public void setLivingAnimations(EntityLivingBase par1EntityLivingBase, float par2, float par3, float par4)
  {
  EntityZertumEntity entityzertum = (EntityZertumEntity)par1EntityLivingBase;
      float f11 = entityzertum.func_110201_q(par4);
      
      if (entityzertum.isAngry())
      {
          this.Ear1.rotateAngleX = -0.5948578F;
          this.Ear2.rotateAngleX = -0.5948578F;
      }else if (entityzertum.getHealth() <=10){
          this.Ear1.rotateAngleX = -0.9948578F;
          this.Ear2.rotateAngleX = -0.9948578F;
      }else{
          this.Ear1.rotateAngleX = 0.0F;
          this.Ear2.rotateAngleX = 0.0F;
      }
      if(!entityzertum.hasEvolved()){
      if (entityzertum.isSitting()) //TODO
      {
    	  LeftHindLeg1.setRotationPoint(1.5F, 18F, 5F);
    	  LeftHindLeg1.rotateAngleX = -2.082003F;
          LeftHindLeg2.setRotationPoint(0F, 4F, 1.2F);
          LeftHindLeg2.rotateAngleX = 2.6205006F;
          LeftHindLeg3.setRotationPoint(0F, 3.55F, 0.2F);
          LeftHindLeg3.rotateAngleX = -0.5205006F;
          RightHindLeg1.setRotationPoint(-2.5F, 18F, 5F);
          RightHindLeg1.rotateAngleX = -2.082003F;
          RightHindLeg2.setRotationPoint(0F, 4F, 1.2F);
          RightHindLeg2.rotateAngleX = 2.6205006F;
          RightHindLeg3.setRotationPoint(0F, 3.55F, 0.2F);
          RightHindLeg3.rotateAngleX = -0.5205006F;
          Torso.setRotationPoint(-0.5F, 14F, 1F);
          Torso.rotateAngleX = 0.9759358F;
          Tail1.setRotationPoint(-1F, 18.5F, 5F);
          Tail1.rotateAngleX = 1.167248F;
          Tail2.rotateAngleX = 0.315962F;
          Tail3.rotateAngleX = 0.23333F;
          
          //Saddle\\
          Pad1.setRotationPoint(-0.5F, 9.7F, -1.5F);
          setRotation(Pad1, -0.288128F, 0F, 0F);
          Pad2.setRotationPoint(-0.5F, 10F, -0.5F);
          setRotation(Pad2, -0.3346075F, 0F, 0F);
          Pad3.setRotationPoint(-1F, 10.7F, 1.4F);
          setRotation(Pad3, -0.5855569F, 0F, 0F);
          Pad4.setRotationPoint(-0.5F, 12.9F, 4.7F);
          setRotation(Pad4, -0.5948648F, 0F, 0F);
          PadPart1.setRotationPoint(1F, 9.6F, -2.4F);
          setRotation(PadPart1, -0.3624853F, 0F, 0F);
          PadPart2.setRotationPoint(-2F, 9.6F, -2.4F);
          setRotation(PadPart2, -0.3624874F, 0F, 0F);
          Rope1.setRotationPoint(1.8F, 10.6F, 1F);
          setRotation(Rope1, -0.3346075F, 0F, 0F);
          Metal1.setRotationPoint(1.8F, 14.2F, -0.3F);
          setRotation(Metal1, -0.3346145F, 0F, 0F);
          Rope2.setRotationPoint(-2.8F, 10.6F, 1F);
          setRotation(Rope2, -0.3346145F, 0F, 0F);
          Metal2.setRotationPoint(-3.8F, 13.6F, 0F);
          setRotation(Metal2, -0.3346145F, 0F, 0F);
          Seat1.setRotationPoint(-0.5F, 11.6F, 4.3F);
          setRotation(Seat1, -0.5483867F, 0F, 0F);
          Seat2.setRotationPoint(-0.5F, 8.9F, -1.2F);
          setRotation(Seat2, -0.2881364F, 0F, 0F);
    	  
      }
      else
      {
    	LeftHindLeg1.setRotationPoint(1.5F, 13F, 5F);
    	LeftHindLeg1.rotateAngleX = -0.2974289F;
    	LeftHindLeg2.setRotationPoint(0F, 4.3F, -0.3F);
    	LeftHindLeg2.rotateAngleX = leftTibia;
    	LeftHindLeg3.setRotationPoint(0F, 3.55F, 0.2F);
    	LeftHindLeg3.rotateAngleX = leftMetatarus;
    	RightHindLeg1.setRotationPoint(-2.5F, 13F, 5F);
    	RightHindLeg1.rotateAngleX = -0.2974289F;
    	RightHindLeg2.setRotationPoint(0F, 4.3F, -0.3F);
    	RightHindLeg2.rotateAngleX =  rightTibia;
    	RightHindLeg3.setRotationPoint(0F, 3.55F, 0.2F);
    	RightHindLeg3.rotateAngleX = rightMetatarus;
    	Torso.setRotationPoint(-0.5F, 12.5F, 1F);
    	Torso.rotateAngleX = 1.496439F;
        Tail1.setRotationPoint(-1F, 14.3F, 6F);
        Tail1.rotateAngleX = 1.315962F;
        Tail2.setRotationPoint(0.5F, 6F, 0.5F);
        Tail2.rotateAngleX = -0.041605F;
        Tail3.setRotationPoint(0F, 6.5F, 0.5F);
        Tail3.rotateAngleX = 0.001605F;
        //Saddle\\ TODO
        Pad1.setRotationPoint(-0.5F, 9.3F, -2.5F);
        setRotation(Pad1, -0.0650564F, 0F, 0F);
        Pad2.setRotationPoint(-0.5F, 9.4F, -1.5F);
        setRotation(Pad2, -0.0743572F, 0F, 0F);
        Pad3.setRotationPoint(-1F, 9.5F, 0.2F);
        setRotation(Pad3, -0.0650564F, 0F, 0F);
        Pad4.setRotationPoint(-0.5F, 9.8F, 4.1F);
        setRotation(Pad4, -0.0650564F, 0F, 0F);
        PadPart1.setRotationPoint(1F, 9.23F, -3.5F);
        setRotation(PadPart1, -0.0650564F, 0F, 0F);
        PadPart2.setRotationPoint(-2F, 9.2F, -3.5F);
        setRotation(PadPart2, -0.0650564F, 0F, 0F);
        Rope1.setRotationPoint(1.8F, 9.6F, 0F);
        setRotation(Rope1, 0F, 0F, 0F);
        Metal1.setRotationPoint(1.8F, 13.6F, 0F);
        setRotation(Metal1, 0F, 0F, 0F);
        Rope2.setRotationPoint(-2.8F, 9.6F, 0F);
        setRotation(Rope2, 0F, 0F, 0F);
        Metal2.setRotationPoint(-3.8F, 13.6F, 0F);
        setRotation(Metal2, 0F, 0F, 0F);
        Seat1.setRotationPoint(-0.5F, 8.7F, -1.5F);
        setRotation(Seat1, -0.0650484F, 0F, 0F);
        Seat2.setRotationPoint(-0.5F, 9F, 3.2F);
        setRotation(Seat2, -0.0650484F, 0F, 0F);
    	
          this.RightHindLeg1.rotateAngleX = rightFemur + MathHelper.cos(par2 * 0.4662F) * 1.4F * par3;
          this.LeftHindLeg1.rotateAngleX = leftFemur + MathHelper.cos(par2 * 0.4662F + (float)Math.PI) * 1.4F * par3;
          this.RightLeg.rotateAngleX = MathHelper.cos(par2 * 0.4662F + (float)Math.PI) * 1.4F * par3;
          this.LeftLeg.rotateAngleX = MathHelper.cos(par2 * 0.4662F) * 1.4F * par3;
      }
      }else if(entityzertum.hasEvolved()){
          if (entityzertum.isSitting()) //TODO
          {
              MidSection.setRotationPoint(-1F, 7.5F, -8F);
              setRotation(MidSection, -0.3032477F, 0F, 0F);
              Pelvis.setRotationPoint(-1F, 9.8F, -1F);
              setRotation(Pelvis, -0.2974289F, 0F, 0F);
              TailPart1.setRotationPoint(0F, 11F, 6F);
              setRotation(TailPart1, -0.3346075F, 0F, 0F);
              TailPart2.setRotationPoint(0F, -0.2F, 10F);
              setRotation(TailPart2, -0.3948578F, 0F, 0F);  
              TailPart3.setRotationPoint(0F, 0F, 10.8F);
              setRotation(TailPart3, 0.2974289F, 0F, 0F);
              
              LeftFemur.setRotationPoint(1.5F, 6.7F, 0F);
              LeftFemur.rotateAngleX = -0.3892433F;
              LeftTibia.setRotationPoint(0F, 7.5F, -0.2F);
              setRotation(LeftTibia, 0.3892433F, 0F, 0F);
              LeftMetatarsus.setRotationPoint(0F, 0F, 7.5F);
              setRotation(LeftMetatarsus, -0.1289922F, 0F, 0F);
              LeftClawRPart1.setRotationPoint(0F, 8.5F, 0F);
              setRotation(LeftClawRPart1, 0F, 0.5159687F, 0F);
              LeftClawRPart2.setRotationPoint(0F, 0F, 0F);
              setRotation(LeftClawRPart2, 1.16093F, -0.0259717F, 0F);
              LeftClawMPart1.setRotationPoint(1.5F, 8.5F, 0F);
              setRotation(LeftClawMPart1, 0F, 0F, 0F);
              LeftClawMPart2.setRotationPoint(0F, 0F, 0F);
              setRotation(LeftClawMPart2, 1.16093F, 0F, 0F);
              LeftClawLPart1.setRotationPoint(3F, 8.5F, 0F);
              setRotation(LeftClawLPart1, 0F, -0.5159717F, 0F);
              LeftClawLPart2.setRotationPoint(0F, 0F, 0F);
              setRotation(LeftClawLPart2, 1.16093F, 0.0059717F, 0F);
              
              RightFemur.setRotationPoint(-2.5F, 6.7F, 0F);
              RightFemur.rotateAngleX = -0.3892433F;
              RightTibia.setRotationPoint(0F, 7.5F, -0.2F);
              setRotation(RightTibia, 0.3892433F, 0F, 0F);
              RightMetatarsus.setRotationPoint(0F, 0F, 7.5F);
              setRotation(RightMetatarsus, -0.1289922F, 0F, 0F);
              RightClawRPart1.setRotationPoint(-2F, 8.5F, 0F);
              setRotation(RightClawRPart1, 0F, 0.5159687F, 0F);
              RightClawRPart2.setRotationPoint(0F, 0F, 0F);
              setRotation(RightClawRPart2, 1.16093F, -0.0259717F, 0F);
              RightClawMPart1.setRotationPoint(-0.5F, 8.5F, 0F);
              setRotation(RightClawMPart1, 0F, 0F, 0F);
              RightClawMPart2.setRotationPoint(0F, 0F, 0F);
              setRotation(RightClawMPart2, 1.16093F, 0F, 0F);
              RightClawLPart1.setRotationPoint(1F, 8.5F, 0F);
              setRotation(RightClawLPart1, 0F, -0.5159717F, 0F);
              RightClawLPart2.setRotationPoint(0F, 0F, 0F);
              setRotation(RightClawLPart2, 1.16093F, 0.0059717F, 0F);
              EPad1.setRotationPoint(0F, 4.7F, -5.5F);
              setRotation(EPad1, -0.2230717F, 0F, 0F);
              EPad2.setRotationPoint(0F, 5F, -4.5F);
              setRotation(EPad2, -0.2230717F, 0F, 0F);
              EPad3.setRotationPoint(-0.5F, 5.4F, -2.8F);
              setRotation(EPad3, -0.3346075F, 0F, 0F);
              EPad4.setRotationPoint(0F, 6.7F, 0.8F);
              setRotation(EPad4, -0.3346075F, 0F, 0F);
              EPadPart1.setRotationPoint(1.5F, 4.5F, -6.5F);
              setRotation(EPadPart1, -0.2230717F, 0F, 0F);
              EPadPart2.setRotationPoint(-1.5F, 4.5F, -6.5F);
              setRotation(EPadPart2, -0.2230717F, 0F, 0F);
              ERope1.setRotationPoint(2.8F, 5.6F, -3F);
              setRotation(ERope1, 0F, 0F, 0F);
              EMetal1.setRotationPoint(2.8F, 11.6F, -3F);
              setRotation(EMetal1, 0F, 0F, 0F);
              ERope2.setRotationPoint(-2.8F, 5.6F, -3F);
              setRotation(ERope2, 0F, 0F, 0F);
              EMetal2.setRotationPoint(-2.8F, 11.6F, -3F);
              setRotation(EMetal2, 0F, 0F, 0F);
              ESeat1.setRotationPoint(0F, 4.4F, -4.5F);
              setRotation(ESeat1, -0.2230717F, 0F, 0F);
              ESeat2.setRotationPoint(0F, 5.9F, 0.2F);
              setRotation(ESeat2, -0.3346075F, 0F, 0F);
          }else{
              MidSection.setRotationPoint(-1F, 7.5F, -8F);
              setRotation(MidSection, -0.0429974F, 0F, 0F);
              Pelvis.setRotationPoint(-1F, 7.8F, 0F);
              setRotation(Pelvis, 0F, 0F, 0F);
              TailPart1.setRotationPoint(0F, 7F, 6F);
              setRotation(TailPart1, -0.3346075F, 0F, 0F);
              TailPart2.setRotationPoint(0F, -0.2F, 10F);
              setRotation(TailPart2, -0.3948578F, 0F, 0F);
              TailPart3.setRotationPoint(0F, 0F, 10.8F);
              setRotation(TailPart3, 0.2974289F, 0F, 0F);
              LeftFemur.setRotationPoint(1.5F, 5.7F, 0F);
              setRotation(LeftFemur, 0F, 0F, 0F);
              LeftTibia.setRotationPoint(0F, 7.7F, 0F);
              setRotation(LeftTibia, 0F, 0F, 0F);
              LeftMetatarsus.setRotationPoint(0F, -0.02F, 8F);
              setRotation(LeftMetatarsus, -0.1289922F, 0F, 0F);
              LeftClawRPart1.setRotationPoint(0F, 9F, 0F);
              setRotation(LeftClawRPart1, 0F, 0.5159687F, 0F);
              LeftClawRPart2.setRotationPoint(0F, 0F, 0F);
              setRotation(LeftClawRPart2, 1.16093F, -0.0259717F, 0F);
              LeftClawMPart1.setRotationPoint(1.5F, 9F, 0F);
              setRotation(LeftClawMPart1, 0F, 0F, 0F);
              LeftClawMPart2.setRotationPoint(0F, 0F, 0F);
              setRotation(LeftClawMPart2, 1.16093F, 0F, 0F);
              LeftClawLPart1.setRotationPoint(3F, 9F, 0F);
              setRotation(LeftClawLPart1, 0F, -0.5159717F, 0F);
              LeftClawLPart2.setRotationPoint(0F, 0F, 0F);
              setRotation(LeftClawLPart2, 1.16093F, 0.0059717F, 0F);
              RightFemur.setRotationPoint(-2.5F, 5.7F, 0F);
              RightFemur.rotateAngleX = 0F;
              RightTibia.setRotationPoint(0F, 7.7F, 0F);
              setRotation(RightTibia, 0F, 0F, 0F);
              RightMetatarsus.setRotationPoint(0F, -0.02F, 8F);
              setRotation(RightMetatarsus, -0.1289922F, 0F, 0F);
              RightClawRPart1.setRotationPoint(-2F, 9F, 0F);
              setRotation(RightClawRPart1, 0F, 0.5159687F, 0F);
              RightClawRPart2.setRotationPoint(0F, 0F, 0F);
              setRotation(RightClawRPart2, 1.16093F, -0.0259717F, 0F);
              RightClawMPart1.setRotationPoint(-0.5F, 9F, 0F);
              setRotation(RightClawMPart1, 0F, 0F, 0F);
              RightClawMPart2.setRotationPoint(0F, 0F, 0F);
              setRotation(RightClawMPart2, 1.16093F, 0F, 0F);
              RightClawLPart1.setRotationPoint(1F, 9F, 0F);
              setRotation(RightClawLPart1, 0F, -0.5159717F, 0F);
              RightClawLPart2.setRotationPoint(0F, 0F, 0F);
              setRotation(RightClawLPart2, 1.16093F, 0.0059717F, 0F);
              //Saddle\\
              EPad1.setRotationPoint(0F, 4.5F, -5.5F);
              setRotation(EPad1, 0F, 0F, 0F);
              EPad2.setRotationPoint(0F, 4.5F, -4.5F);
              setRotation(EPad2, 0F, 0F, 0F);
              EPad3.setRotationPoint(-0.5F, 4.5F, -2.8F);
              setRotation(EPad3, 0F, 0F, 0F);
              EPad4.setRotationPoint(0F, 4.5F, 1.1F);
              setRotation(EPad4, 0F, 0F, 0F);
              EPadPart1.setRotationPoint(1.5F, 4.5F, -6.5F);
              setRotation(EPadPart1, 0F, 0F, 0F);
              EPadPart2.setRotationPoint(-1.5F, 4.5F, -6.5F);
              setRotation(EPadPart2, 0F, 0F, 0F);
              ERope1.setRotationPoint(2.8F, 4.6F, -3F);
              setRotation(ERope1, 0F, 0F, 0F);
              EMetal1.setRotationPoint(2.8F, 10.6F, -3F);
              setRotation(EMetal1, 0F, 0F, 0F);
              ERope2.setRotationPoint(-2.8F, 4.6F, -3F);
              setRotation(ERope2, 0F, 0F, 0F);
              EMetal2.setRotationPoint(-2.8F, 10.6F, -3F);
              setRotation(EMetal2, 0F, 0F, 0F);
              ESeat1.setRotationPoint(0F, 4F, -4.5F);
              setRotation(ESeat1, 0F, 0F, 0F);
              ESeat2.setRotationPoint(0F, 4F, 0.2F);
              setRotation(ESeat2, 0F, 0F, 0F);
              
              System.out.println("Is Dashing = " + entityzertum.isDashing());
              
              if(entityzertum.isDashing()){
                  updateDistanceMovedTotal(par1EntityLivingBase);
                  cycleIndex = (int) ((getDistanceMovedTotal(par1EntityLivingBase)*CYCLES_PER_BLOCK)%undulationCycle.length);
                  //System.out.println("ModelZertum setRotationAngles(), distanceMoved ="+getDistanceMovedTotal(par7Entity)+", cycleIndex ="+cycleIndex);
                  LeftFemur.rotateAngleX = degToRad(undulationCycle[0][cycleIndex]) ;
                  RightFemur.rotateAngleX = degToRad(undulationCycle[1][cycleIndex]) ;
                  LeftHumerus.rotateAngleX = degToRad(undulationCycle[2][cycleIndex]) ;
                  RightHumerus.rotateAngleX = degToRad(undulationCycle[3][cycleIndex]) ;
              }else{
                  this.RightHumerus.rotateAngleX = 0.3869765F + MathHelper.cos(par2 * 0.4962F) * 0.5F * par3;
                  this.LeftHumerus.rotateAngleX = 0.3869765F + MathHelper.cos(par2 * 0.3962F + (float)Math.PI) * 0.5F * par3;
                  this.RightFemur.rotateAngleX = MathHelper.cos(par2 * 0.4062F) * 0.5F * par3;
                  this.LeftFemur.rotateAngleX =  MathHelper.cos(par2 * 0.3362F + (float)Math.PI) * 0.5F * par3;
              }
          }
      }
  
      this.Head.rotateAngleZ = entityzertum.getInterestedAngle(par4) + entityzertum.getShakeAngle(par4, 0.0F);
      this.Mane1.rotateAngleZ = entityzertum.getShakeAngle(par4, -0.08F);
      this.Torso.rotateAngleZ = entityzertum.getShakeAngle(par4, -0.16F);
      this.Tail1.rotateAngleZ = entityzertum.getShakeAngle(par4, -0.32F);
      
      this.TopJawCenter.rotateAngleX = 0.2288904F - 0.45707964F * f11;
      this.BottomJawCenter.rotateAngleX = 0.2288904F + 0.45707964F * f11;
  }
  
  
  private void setRotation(ModelRenderer model, float x, float y, float z)
  {
    model.rotateAngleX = x;
    model.rotateAngleY = y;
    model.rotateAngleZ = z;
  }
  
  @Override
  public void setRotationAngles(float par1, float par2, float par3, float par4, float par5, float par6, Entity par7Entity)
  {
    super.setRotationAngles(par1, par2, par3, par4, par5, par6, par7Entity);
    this.Head.rotateAngleX = par5 / (280F / (float)Math.PI);
    this.Head.rotateAngleY = par4 / (180F / (float)Math.PI);
    this.Neck.rotateAngleX = vertebrae + par5 / (280F / (float)Math.PI);
    this.Mane2.rotateAngleX = mane2StartingRotation + par5 / (280F / (float)Math.PI);
    this.Mane1.rotateAngleY = par4 / (180F / (float)Math.PI);
  }
  
  protected void updateDistanceMovedTotal(Entity parEntity) 
  {
      distanceMovedTotal += parEntity.getDistance(parEntity.prevPosX, parEntity.prevPosY, parEntity.prevPosZ);
  }
      
  protected double getDistanceMovedTotal(Entity parEntity) 
  {
      return (distanceMovedTotal);
  }
  
  protected float degToRad(float degrees)
  {
      return degrees * (float)Math.PI / 180 ;
  }
}

 

Entity File

package common.zeroquest.entity;

import java.util.HashMap;
import java.util.Map;

import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.EntityAIAttackOnCollide;
import net.minecraft.entity.ai.EntityAIHurtByTarget;
import net.minecraft.entity.ai.EntityAILeapAtTarget;
import net.minecraft.entity.ai.EntityAILookIdle;
import net.minecraft.entity.ai.EntityAIMate;
import net.minecraft.entity.ai.EntityAISit;
import net.minecraft.entity.ai.EntityAISwimming;
import net.minecraft.entity.ai.EntityAIWander;
import net.minecraft.entity.ai.EntityAIWatchClosest;
import net.minecraft.entity.monster.EntityCreeper;
import net.minecraft.entity.monster.EntityGhast;
import net.minecraft.entity.monster.EntityZombie;
import net.minecraft.entity.passive.EntityAnimal;
import net.minecraft.entity.passive.EntityHorse;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityArrow;
import net.minecraft.init.Items;
import net.minecraft.item.EnumDyeColor;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBow;
import net.minecraft.item.ItemFood;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemSword;
import net.minecraft.item.ItemTool;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.pathfinding.PathNavigateGround;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.BlockPos;
import net.minecraft.util.DamageSource;
import net.minecraft.util.EnumParticleTypes;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import common.zeroquest.ModAchievements;
import common.zeroquest.ModItems;
import common.zeroquest.entity.ai.EntityAIFetchBone;
import common.zeroquest.entity.ai.EntityAIFollowOwner;
import common.zeroquest.entity.ai.EntityAIModeAttackTarget;
import common.zeroquest.entity.ai.EntityAIOwnerHurtByTarget;
import common.zeroquest.entity.ai.EntityAIOwnerHurtTarget;
import common.zeroquest.entity.ai.EntityAIRoundUp;
import common.zeroquest.entity.ai.EntityCustomAIBeg;
import common.zeroquest.entity.util.CoordUtil;
import common.zeroquest.entity.util.LevelUtil;
import common.zeroquest.entity.util.ModeUtil;
import common.zeroquest.entity.util.TalentHelper;
import common.zeroquest.entity.util.TalentUtil;
import common.zeroquest.inventory.InventoryPack;
import common.zeroquest.lib.Constants;
import common.zeroquest.lib.Sound;


public abstract class EntityZertumEntity extends EntityCustomTameable
{   
    public float headRotationCourse;
    public float headRotationCourseOld;
    public boolean isWet;
    public boolean isShaking;
    public float timeWolfIsShaking;
    public float prevTimeWolfIsShaking;
    private int hungerTick;
   	private int prevHungerTick;
    private int healingTick;
    private int prevHealingTick;
    private int regenerationTick;
    private int prevRegenerationTick;
    public TalentUtil talents;
    public LevelUtil levels;
    public ModeUtil mode;
    public CoordUtil coords;
    public Map<String, Object> objects;
    private boolean hasBone;
    
    private float mouthOpenness;
    private float prevMouthOpenness;
    public int field_110278_bp;
    public int field_110279_bq;
    private String field_110286_bQ;
    private int openMouthCounter;
    
    public static final double maxHealth = 25;
    public static final double attackDamage = 6;
    public static final double speed = 0.30000001192092896;
    public static final double maxHealthTamed = 35;
    public static final double attackDamageTamed = 8;
    public static final double maxHealthBaby = 10;
    public static final double attackDamageBaby = 2;
    public static final double maxHealthEvo = 25;
    public static final double attackDamageEvo = 6;
    public static final double speedEvo = 0.30000001192092896;
    
    protected EntityAILeapAtTarget aiLeap = new EntityAILeapAtTarget(this, 0.4F);
    public EntityAIWatchClosest aiStareAtPlayer = new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F);
    public EntityAIWatchClosest aiGlareAtCreeper = new EntityAIWatchClosest(this, EntityCreeper.class, this.talents.getLevel("creeperspotter") * 6);    
    public EntityAIFetchBone aiFetchBone;
    
    // data value IDs TODO
    /**DO NOT CHANGE!**/
    public static final int INDEX_TAME = 16;
    public static final int INDEX_COLLAR = 19;
    public static final int INDEX_SADDLE = 20;
    public static final int INDEX_EVOLVE = 25;
    public static final int INDEX_MOUTH = 29;
    public static final int INDEX_DASH = 30;

    public EntityZertumEntity(World worldIn)
    {
        super(worldIn);
        this.objects = new HashMap<String, Object>();
        this.setSize(0.6F, 1.5F);
        ((PathNavigateGround)this.getNavigator()).func_179690_a(true);
        this.tasks.addTask(1, new EntityAISwimming(this));
        this.tasks.addTask(2, this.aiSit);
        this.tasks.addTask(3, this.aiLeap);
        this.tasks.addTask(4, new EntityAIAttackOnCollide(this, 1.0D, true));
        this.tasks.addTask(5, new EntityAIFollowOwner(this, 1.0D, 10.0F, 2.0F));
        this.tasks.addTask(6, this.aiFetchBone = new EntityAIFetchBone(this, 1.0D, 0.5F, 20.0F));
        this.tasks.addTask(7, new EntityAIMate(this, 1.0D));
        this.tasks.addTask(8, new EntityAIWander(this, 1.0D));
        this.tasks.addTask(9, new EntityCustomAIBeg(this, 8.0F));
        this.tasks.addTask(10, aiStareAtPlayer);
        this.tasks.addTask(10, new EntityAILookIdle(this));
        this.targetTasks.addTask(1, new EntityAIOwnerHurtByTarget(this));
        this.targetTasks.addTask(2, new EntityAIOwnerHurtTarget(this));
        this.targetTasks.addTask(3, new EntityAIModeAttackTarget(this));
        this.targetTasks.addTask(4, new EntityAIHurtByTarget(this, true));
        this.setTamed(false);
        this.setEvolved(false);
        this.inventory = new InventoryPack(this);
        this.targetTasks.addTask(6, new EntityAIRoundUp(this, EntityAnimal.class, 0, false));
        TalentHelper.onClassCreation(this);
    }

    @Override
    protected void applyEntityAttributes()
    {
        super.applyEntityAttributes();
        this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxHealth);
        this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(attackDamage);
        this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(speed);
        this.updateEntityAttributes();
    }
    public void updateEntityAttributes() {
        if (this.isTamed())
        {
            this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxHealthTamed + this.effectiveLevel());
            this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(attackDamageTamed);
            if(this.isDashing()){
                this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(speed + 0.2);
            }
        }
        else if (this.isChild())
        {
            this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxHealthBaby);
            this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(attackDamageBaby);
        }
        else if(this.hasEvolved()){
            this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(maxHealthEvo);
            this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(attackDamageEvo);
            this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(speedEvo);
            if(this.isDashing()){
                this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(speedEvo + 0.2);
            }
        }
    }
    
    /**
    * Sets the active target the Task system uses for tracking
    */
    @Override
    public void setAttackTarget(EntityLivingBase p_70624_1_)
    {
    	super.setAttackTarget(p_70624_1_);
    	if (p_70624_1_ == null)
    	{
    		this.setAngry(false);
    	}
    	else if (!this.isTamed())
    	{
    		this.setAngry(true);
    	}
    }
    
    @Override
    public String getName() {
    	String name = this.getDogName();
    	if(name != "")
    		return name;
    	return super.getName();
    }
    
    @Override
    @SideOnly(Side.CLIENT)
    public boolean getAlwaysRenderNameTagForRender() {
        return true;
    }

    @Override
    protected void entityInit()
    {
        super.entityInit();
        this.talents = new TalentUtil(this);
        this.levels = new LevelUtil(this);
        this.mode = new ModeUtil(this);
        this.coords = new CoordUtil(this);
        
        this.dataWatcher.addObject(INDEX_COLLAR, new Byte((byte)EnumDyeColor.RED.getMetadata())); //Collar
        this.dataWatcher.addObject(INDEX_SADDLE, Byte.valueOf((byte)0)); //Saddle
        this.dataWatcher.addObject(21, new String("")); //Dog Name
        this.dataWatcher.addObject(22, new String("")); //Talent Data
        this.dataWatcher.addObject(23, new Integer(60)); //Dog Hunger
        this.dataWatcher.addObject(24, new String("0:0")); //Level Data
        this.dataWatcher.addObject(INDEX_EVOLVE, Byte.valueOf((byte)0)); //Evolution
        this.dataWatcher.addObject(26, new Integer(0)); //Obey Others
        this.dataWatcher.addObject(27, new Integer(0)); //Dog Mode
        this.dataWatcher.addObject(28, "-1:-1:-1:-1:-1:-1"); //Dog Mode
        this.dataWatcher.addObject(INDEX_MOUTH, Integer.valueOf(0)); //Mouth
        this.dataWatcher.addObject(INDEX_DASH, Byte.valueOf((byte)0)); //Dash
    }

    @Override
    public void writeEntityToNBT(NBTTagCompound tagCompound)
    {
        super.writeEntityToNBT(tagCompound);
        tagCompound.setBoolean("Angry", this.isAngry());
        tagCompound.setByte("CollarColor", (byte)this.getCollarColor().getDyeDamage());
        tagCompound.setBoolean("Saddle", this.isSaddled());
        tagCompound.setBoolean("Evolve", this.hasEvolved());
        tagCompound.setBoolean("Dash", this.isDashing());
        
        tagCompound.setString("version", Constants.version);
        tagCompound.setString("dogName", this.getDogName());
        tagCompound.setInteger("dogHunger", this.getDogHunger());
        tagCompound.setBoolean("willObey", this.willObeyOthers());
        
        this.talents.writeTalentsToNBT(tagCompound);
        this.levels.writeTalentsToNBT(tagCompound);
        this.mode.writeToNBT(tagCompound);
        this.coords.writeToNBT(tagCompound);
        TalentHelper.writeToNBT(this, tagCompound);
    }

    @Override
    public void readEntityFromNBT(NBTTagCompound tagCompound)
    {
        super.readEntityFromNBT(tagCompound);
        this.setAngry(tagCompound.getBoolean("Angry"));
        this.setSaddled(tagCompound.getBoolean("Saddle"));
        this.setEvolved(tagCompound.getBoolean("Evolve"));
        this.setDashing(tagCompound.getBoolean("Dash"));

        if (tagCompound.hasKey("CollarColor", 99))
        {
            this.setCollarColor(EnumDyeColor.byDyeDamage(tagCompound.getByte("CollarColor")));
        }
        
        String lastVersion = tagCompound.getString("version");
        this.setDogName(tagCompound.getString("dogName"));
        this.setDogHunger(tagCompound.getInteger("dogHunger"));
        this.setWillObeyOthers(tagCompound.getBoolean("willObey"));
        
        this.talents.readTalentsFromNBT(tagCompound);
        this.levels.readTalentsFromNBT(tagCompound);
        this.mode.readFromNBT(tagCompound);
        this.coords.readFromNBT(tagCompound);
        TalentHelper.readFromNBT(this, tagCompound);
    }
    
    @Override
    protected void playStepSound(BlockPos p_180429_1_, Block p_180429_2_)
    {
        this.playSound("mob.wolf.step", 0.15F, 1.0F);
    }

    /**
     * Returns the sound this mob makes while it's alive.
     */
    @Override
    protected String getLivingSound()
    {
    	this.openMouth();
    	String sound = TalentHelper.getLivingSound(this);
    	if(!"".equals(sound))
    		return sound;
    	
        return this.isAngry() ? "mob.wolf.growl" : this.wantToHowl ? Sound.ZertumHowl : (this.rand.nextInt(3) == 0 ? 
        			(this.isTamed() && this.getHealth() <= 10.0F ? "mob.wolf.whine"
        					: "mob.wolf.panting")
        					: "mob.wolf.bark");
    }

    /**
     * Returns the sound this mob makes when it is hurt.
     */
    @Override
    protected String getHurtSound()
    {
    	this.openMouth();
        return "mob.wolf.hurt";
    }

    /**
     * Returns the sound this mob makes on death.
     */
    @Override
    protected String getDeathSound()
    {
    	this.openMouth();
        return "mob.wolf.death";
    }
    
    /**
     * Returns the volume for the sounds this mob makes.
     */
    @Override
public float getSoundVolume()
    {
        return 0.5F;
    }

    /**
     * Get number of ticks, at least during which the living entity will be silent.
     */
@Override
    public int getTalkInterval() {
    	if((Boolean)this.objects.get("canseecreeper") == true){
    		return 40;
    	}else if(this.wantToHowl){
    		return 150;
	}else if(this.getHealth() <=10){
    		return 20;
    	}else{
    		return 200;
    	}
    }
    
    /**
     * Returns the item ID for the item the mob drops on death.
     */
@Override
    protected void dropFewItems(boolean par1, int par2)
    {
        rare = rand.nextInt(20);
            {
                if (this.isBurning())
                {
                    this.dropItem(ModItems.zertumMeatCooked, 1);
                }
                else if (rare <= 12)
                {
                    this.dropItem(ModItems.zertumMeatRaw, 1);
                }
                if(rare <= 6 && !this.isTamed())
                {
                	this.dropItem(ModItems.nileGrain, 1);
                }
                if (this.isSaddled())
                {
                    this.dropItem(Items.saddle, 1);
                }
                else
                {
                	
                }
                
            }
        }

    /**
     * Called frequently so the entity can update its state every tick as required. For example, zombies and skeletons
     * use this to react to sunlight and start to burn.
     */
@Override
    public void onLivingUpdate() //TODO
    {
        super.onLivingUpdate();
        if (isServer() && this.isWet && !this.isShaking && !this.hasPath() && this.onGround)
        {
            this.isShaking = true;
            this.timeWolfIsShaking = 0.0F;
            this.prevTimeWolfIsShaking = 0.0F;
            this.worldObj.setEntityState(this, (byte);
        }
        
        if(Constants.IS_HUNGER_ON) {
        	this.prevHungerTick = this.hungerTick;
        	
        if (this.riddenByEntity == null && !this.isSitting() /*&& !this.mode.isMode(EnumMode.WANDERING) && !this.level.isDireDog() || worldObj.getWorldInfo().getWorldTime() % 2L == 0L */)
        	this.hungerTick += 1;
        
        this.hungerTick += TalentHelper.onHungerTick(this, this.hungerTick - this.prevHungerTick);
        
        if (this.hungerTick > 400) {
            this.setDogHunger(this.getDogHunger() - 1);
            this.hungerTick -= 400;
        }
        }
        
        if(Constants.DEF_HEALING == true && !this.isChild() && this.getHealth() <=10 && this.isTamed())
        {
        	this.addPotionEffect(new PotionEffect(Potion.regeneration.id, 200));
        }
        
        if(this.getHealth() != 1) {
        this.prevHealingTick = this.healingTick;
        this.healingTick += this.nourishment();
        
        if (this.healingTick >= 6000) {
            if (this.getHealth() < this.getMaxHealth())
            	this.setHealth(this.getHealth() + 1);
            
            this.healingTick = 0;
        }
        }
        
        if(this.getDogHunger() == 0 && this.worldObj.getWorldInfo().getWorldTime() % 100L == 0L && this.getHealth() > 1) {
            this.attackEntityFrom(DamageSource.generic, 1);
            //this.fleeingTick = 0;
        }

        if (isServer() && this.getAttackTarget() == null && this.isAngry())
        {
            this.setAngry(false);
        }
        
        if(Constants.DEF_HOWL == true){
        	if (this.worldObj.isDaytime() && isServer()) //TODO
        	{
            	wantToHowl = false;
        	}
        	else if(isServer() && (this.isChild() || this.isChild()))
        	{
            	wantToHowl = true;
            }
        }
        
        TalentHelper.onLivingUpdate(this);
    }

    /**
     * Called to update the entity's position/logic.
     */
@Override
    public void onUpdate()
    {
        super.onUpdate();
        if (this.openMouthCounter > 0 && ++this.openMouthCounter > 30) //TODO
        {
            this.openMouthCounter = 0;
            this.setHorseWatchableBoolean(128, false);
        }
        
        this.prevMouthOpenness = this.mouthOpenness;

        if (this.getHorseWatchableBoolean(128))
        {
            this.mouthOpenness += (1.0F - this.mouthOpenness) * 0.7F + 0.05F;

            if (this.mouthOpenness > 1.0F)
            {
                this.mouthOpenness = 1.0F;
            }
        }
        else
        {
            this.mouthOpenness += (0.0F - this.mouthOpenness) * 0.7F - 0.05F;

            if (this.mouthOpenness < 0.0F)
            {
                this.mouthOpenness = 0.0F;
            }
        }
        this.headRotationCourseOld = this.headRotationCourse;

        if (this.func_70922_bv())
        {
            this.headRotationCourse += (1.0F - this.headRotationCourse) * 0.4F;
        }
        else
        {
            this.headRotationCourse += (0.0F - this.headRotationCourse) * 0.4F;
        }

        if (this.isWet())
        {
            this.isWet = true;
            this.isShaking = false;
            this.timeWolfIsShaking = 0.0F;
            this.prevTimeWolfIsShaking = 0.0F;
        }
        else if ((this.isWet || this.isShaking) && this.isShaking)
        {
            if (this.timeWolfIsShaking == 0.0F)
            {
                this.playSound("mob.wolf.shake", this.getSoundVolume(), (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F);
            }

            this.prevTimeWolfIsShaking = this.timeWolfIsShaking;
            this.timeWolfIsShaking += 0.05F;

            if (this.prevTimeWolfIsShaking >= 2.0F)
            {
            	if(this.rand.nextInt(15) < this.talents.getLevel("fishing") * 2) {
                    if(this.rand.nextInt(15) < this.talents.getLevel("fire") * 2 && this instanceof EntityRedZertum) {
                    	if(!this.worldObj.isRemote) {
                    		dropItem(Items.cooked_fish, 1);
                    	}
                    }
                    else {
                    	if(!this.worldObj.isRemote) {
                    		dropItem(Items.fish, 1);
                    	}
                    }
            	}
                this.isWet = false;
                this.isShaking = false;
                this.prevTimeWolfIsShaking = 0.0F;
                this.timeWolfIsShaking = 0.0F;
            }

            if (this.timeWolfIsShaking > 0.4F)
            {
                float f = (float)this.getEntityBoundingBox().minY;
                int i = (int)(MathHelper.sin((this.timeWolfIsShaking - 0.4F) * (float)Math.PI) * 7.0F);

                for (int j = 0; j < i; ++j)
                {
                    float f1 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width * 0.5F;
                    float f2 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width * 0.5F;
                    this.worldObj.spawnParticle(EnumParticleTypes.WATER_SPLASH, this.posX + (double)f1, (double)(f + 0.8F), this.posZ + (double)f2, this.motionX, this.motionY, this.motionZ, new int[0]);
            	}
            }
        }
        if(this.isTamed()) {
    		EntityPlayer player = (EntityPlayer)this.getOwner();
    		
    		if(player != null) {
    			float distanceToOwner = player.getDistanceToEntity(this);

                if (distanceToOwner <= 2F && this.hasBone()) {
                	if(!this.worldObj.isRemote) {
                		this.entityDropItem(new ItemStack(ModItems.toy, 1, 1), 0.0F);
                	}
                	
                    this.setHasBone(false);
                }
    		}
    	}
        
        TalentHelper.onUpdate(this);
    }

    @Override
    public void moveEntityWithHeading(float strafe, float forward) {
        if (this.riddenByEntity instanceof EntityPlayer) {
            this.prevRotationYaw = this.rotationYaw = this.riddenByEntity.rotationYaw;
            this.rotationPitch = this.riddenByEntity.rotationPitch * 0.5F;
            this.setRotation(this.rotationYaw, this.rotationPitch);
            this.rotationYawHead = this.renderYawOffset = this.rotationYaw;
            strafe = ((EntityPlayer)this.riddenByEntity).moveStrafing * 0.5F;
            forward = ((EntityPlayer)this.riddenByEntity).moveForward;

            if (forward <= 0.0F)
                forward *= 0.25F;

            if (this.onGround) {
                if (forward > 0.0F) {
                    float f2 = MathHelper.sin(this.rotationYaw * (float)Math.PI / 180.0F);
                    float f3 = MathHelper.cos(this.rotationYaw * (float)Math.PI / 180.0F);
                    this.motionX += (double)(-0.4F * f2 * 0.15F); // May change
                    this.motionZ += (double)(0.4F * f3 * 0.15F);
                }
            }

            this.stepHeight = 1.0F;
            this.jumpMovementFactor = this.getAIMoveSpeed() * 0.2F;

            if (!this.worldObj.isRemote)  {
                this.setAIMoveSpeed((float)this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getAttributeValue() / 4);
                super.moveEntityWithHeading(strafe, forward);
            }

            if (this.onGround) {
                //this.jumpPower = 0.0F;
               // this.setHorseJumping(false);
            }

            this.prevLimbSwingAmount = this.limbSwingAmount;
            double d0 = this.posX - this.prevPosX;
            double d1 = this.posZ - this.prevPosZ;
            float f4 = MathHelper.sqrt_double(d0 * d0 + d1 * d1) * 4.0F;

            if (f4 > 1.0F)
                f4 = 1.0F;

            this.limbSwingAmount += (f4 - this.limbSwingAmount) * 0.4F;
            this.limbSwing += this.limbSwingAmount;
        }
        else {
            this.stepHeight = 0.5F;
            this.jumpMovementFactor = 0.02F;
            super.moveEntityWithHeading(strafe, forward);
        }
    }
    
    @Override
    public float getAIMoveSpeed() {
    	double speed = this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getAttributeValue();
    	
    	speed += TalentHelper.addToMoveSpeed(this);
    	
    	if((!(this.getAttackTarget() instanceof EntityZertumEntity) && !(this.getAttackTarget() instanceof EntityPlayer)) || this.riddenByEntity instanceof EntityPlayer)
    		if (this.levels.getLevel() == 110 && this.hasEvolved())
    			speed += 1.0D;
    	
    	if(this.riddenByEntity instanceof EntityPlayer)
    		speed /= 4;
    	
        return (float)speed;
    }
    
    @Override
    public void fall(float distance, float damageMultiplier)
    {
        if (distance > 1.0F)
        {
            this.playSound("game.neutral.hurt.fall.small", 0.4F, 1.0F);
        }

        int i = MathHelper.ceiling_float_int(((distance * 0.5F - 3.0F) - TalentHelper.fallProtection(this)) * damageMultiplier);

        if (i > 0 && !TalentHelper.isImmuneToFalls(this))
        {
            this.attackEntityFrom(DamageSource.fall, (float)i);

            if (this.riddenByEntity != null)
            {
                this.riddenByEntity.attackEntityFrom(DamageSource.fall, (float)i);
            }

            Block block = this.worldObj.getBlockState(new BlockPos(this.posX, this.posY - 0.2D - (double)this.prevRotationYaw, this.posZ)).getBlock();

            if (block.getMaterial() != Material.air && !this.isSilent())
            {
                Block.SoundType soundtype = block.stepSound;
                this.worldObj.playSoundAtEntity(this, soundtype.getStepSound(), soundtype.getVolume() * 0.5F, soundtype.getFrequency() * 0.75F);
            }
        }
    }
    
    @SideOnly(Side.CLIENT)
    public boolean isWolfWet()
    {
        return this.isWet;
    }

    @SideOnly(Side.CLIENT)
    public float getShadingWhileWet(float p_70915_1_)
    {
        return 0.75F + (this.prevTimeWolfIsShaking + (this.timeWolfIsShaking - this.prevTimeWolfIsShaking) * p_70915_1_) / 2.0F * 0.25F;
    }

    @SideOnly(Side.CLIENT)
    public float getShakeAngle(float p_70923_1_, float p_70923_2_)
    {
        float f2 = (this.prevTimeWolfIsShaking + (this.timeWolfIsShaking - this.prevTimeWolfIsShaking) * p_70923_1_ + p_70923_2_) / 1.8F;

        if (f2 < 0.0F)
        {
            f2 = 0.0F;
        }
        else if (f2 > 1.0F)
        {
            f2 = 1.0F;
        }

        return MathHelper.sin(f2 * (float)Math.PI) * MathHelper.sin(f2 * (float)Math.PI * 11.0F) * 0.15F * (float)Math.PI;
    }

    @SideOnly(Side.CLIENT)
    public float getInterestedAngle(float p_70917_1_)
    {
        return (this.headRotationCourseOld + (this.headRotationCourse - this.headRotationCourseOld) * p_70917_1_) * 0.15F * (float)Math.PI;
    }

    public float getEyeHeight()
    {
        return this.height * 0.8F;
    }

    public int getVerticalFaceSpeed()
    {
        return this.isSitting() ? 20 : super.getVerticalFaceSpeed();
    }
    
    @Override
    public boolean attackEntityFrom(DamageSource damageSource, float damage) {
        if (this.isEntityInvulnerable(damageSource))
            return false;
        else {
        	if(!TalentHelper.attackEntityFrom(this, damageSource, damage))
        		return false;
        	
            Entity entity = damageSource.getEntity();
            this.aiSit.setSitting(false);

            if (entity != null && !(entity instanceof EntityPlayer) && !(entity instanceof EntityArrow))
                damage = (damage + 1.0F) / 2.0F;

            return super.attackEntityFrom(damageSource, damage);
        }
    }

    @Override
    public boolean attackEntityAsMob(Entity entity) {
    	if(!TalentHelper.shouldDamageMob(this, entity))
    		return false;
    	
    	int damage = (int)(4 + (this.effectiveLevel() + this.getEntityAttribute(SharedMonsterAttributes.attackDamage).getBaseValue()) / 2);
        damage = TalentHelper.attackEntityAsMob(this, entity, damage);
        
        if (entity instanceof EntityZombie)
            ((EntityZombie)entity).setAttackTarget(this);
        
        return entity.attackEntityFrom(DamageSource.causeMobDamage(this), (float)damage);
    }
    
    /**
     * Called when the mob's health reaches 0.
     */
    @Override //TODO
    public void onDeath(DamageSource par1DamageSource)
    {
        super.onDeath(par1DamageSource);

        if (par1DamageSource.getEntity() instanceof EntityPlayer)
        {
            EntityPlayer entityplayer = (EntityPlayer)par1DamageSource.getEntity();
            {
                entityplayer.triggerAchievement(ModAchievements.ZertKill);
                this.dropChestItems();
                
            }
        }
    }
    
    protected boolean isMovementBlocked() {
    	return this.isPlayerSleeping() || this.ridingEntity != null || this.riddenByEntity instanceof EntityPlayer || super.isMovementBlocked();
    	}

    @Override
    public double getYOffset() {
        return this.ridingEntity instanceof EntityPlayer ? 0.5D : 0.0D;
    }
    
    @Override
    public boolean isPotionApplicable(PotionEffect potionEffect) {
        if (this.getHealth() <= 1)
            return false;

        if(!TalentHelper.isPostionApplicable(this, potionEffect))
        	return false;

        return true;
    }
    
    @Override
    public void setFire(int amount) {
    	if(TalentHelper.setFire(this, amount))
    		super.setFire(amount);
    }
    
    public int foodValue(ItemStack stack) {
    	if(stack == null || stack.getItem() == null)
    		return 0;
    	
    	int foodValue = 0;
    	
    	Item item = stack.getItem();
    	
        if(stack.getItem() != Items.rotten_flesh && item instanceof ItemFood) {
            ItemFood itemfood = (ItemFood)item;

            if (itemfood.isWolfsFavoriteMeat())
            	foodValue = 40;
        }
        
        foodValue = TalentHelper.changeFoodValue(this, stack, foodValue);

        return foodValue;
    }
    
    public int masterOrder() {
    	int order = 0;
        EntityPlayer player = (EntityPlayer)this.getOwner();

        if (player != null) {
        	
            float distanceAway = player.getDistanceToEntity(this);
            ItemStack itemstack = player.inventory.getCurrentItem();

            if (itemstack != null && (itemstack.getItem() instanceof ItemTool) && distanceAway <= 20F)
                order = 1;

            if (itemstack != null && ((itemstack.getItem() instanceof ItemSword) || (itemstack.getItem() instanceof ItemBow)))
                order = 2;

            if (itemstack != null && itemstack.getItem() == Items.wheat)
                order = 3;
        }

        return order;
    }
    
    @Override
    public boolean isPlayerSleeping() {
        return false;
    }
    
    @Override
    public boolean canBreatheUnderwater() {
        return TalentHelper.canBreatheUnderwater(this);
    }
    
    public boolean canInteract(EntityPlayer player) {
    	return this.isOwner(player) || this.willObeyOthers();
    }
    
    public int nourishment() {
        int amount = 0;

        if (this.getDogHunger() > 0) {
            amount = 40 + 4 * (this.effectiveLevel() + 1);

            if (isSitting() && this.talents.getLevel("rapidregen") == 5) {
                amount += 20 + 2 * (this.effectiveLevel() + 1);
            }

            if (!this.isSitting()) {
                amount *= 5 + this.talents.getLevel("rapidregen");
                amount /= 10;
            }
        }

        return amount;
    }
    
    public int effectiveLevel() {
        return (this.levels.getLevel()) / 2;
    }
    
    public String getDogName() {
        return this.dataWatcher.getWatchableObjectString(21);
    }
    
    public void setDogName(String var1) {
       this.dataWatcher.updateObject(21, var1);
    }
    
    public void setWillObeyOthers(boolean flag) {
    	this.dataWatcher.updateObject(26, flag ? 1 : 0);
    }
    
    public boolean willObeyOthers() {
    	return this.dataWatcher.getWatchableObjectInt(26) != 0;
    }
    
    public int points() {
        return this.levels.getLevel() + (this.getGrowingAge() < 0 ? 0 : 20);
    }

    public int spendablePoints() {
        return this.points() - this.usedPoints();
    }
    
    public int usedPoints() {
	return TalentHelper.getUsedPoints(this);
    }
    
    public int deductive(int par1) {
        byte byte0 = 0;
        switch(par1) {
        case 1: return 1;
	case 2: return 2;
        case 3: return 4;
        case 4: return 6;
        case 5: return 8;
        default: return 0;
        }
    }
    
    public int getDogHunger() {
	return this.dataWatcher.getWatchableObjectInt(23);
}
    
    public void setDogHunger(int par1) {
    	this.dataWatcher.updateObject(23, MathHelper.clamp_int(par1, 0, 100));
    }
    
    @Override
    public boolean func_142018_a(EntityLivingBase entityToAttack, EntityLivingBase owner) {
    	if(TalentHelper.canAttackEntity(this, entityToAttack))
    		return true;
    	
        if (!(entityToAttack instanceof EntityCreeper) && !(entityToAttack instanceof EntityGhast)) {
            if (entityToAttack instanceof EntityZertumEntity) {
            	EntityZertumEntity entityDog = (EntityZertumEntity)entityToAttack;

                if (entityDog.isTamed() && entityDog.getOwner() == owner)
                    return false;
            }

            return entityToAttack instanceof EntityPlayer && owner instanceof EntityPlayer && !((EntityPlayer)owner).canAttackPlayer((EntityPlayer)entityToAttack) ? false : !(entityToAttack instanceof EntityHorse) || !((EntityHorse)entityToAttack).isTame();
        }
        else {
            return false;
        }
    }
    
    @Override
    public boolean canAttackClass(Class p_70686_1_) {
    	if(TalentHelper.canAttackClass(this, p_70686_1_))
    		return true;
    	
        return super.canAttackClass(p_70686_1_);
    }
    
    public void setHasBone(boolean hasBone) {
    	this.hasBone = hasBone;
    }
    
    public boolean hasBone() {
    	return this.hasBone;
    }
    
    /**
     * Gets the pitch of living sounds in living entities.
     */
    @Override
    protected float getPitch() {
    	if(!this.isChild())
    		return super.getSoundPitch();
    	else{
    		return super.getSoundPitch() * 1;
    		}
    	}
    
    @SideOnly(Side.CLIENT)
    public void handleHealthUpdate(byte p_70103_1_)
    {
        if (p_70103_1_ == 
        {
            this.isShaking = true;
            this.timeWolfIsShaking = 0.0F;
            this.prevTimeWolfIsShaking = 0.0F;
        }
        else
        {
            super.handleHealthUpdate(p_70103_1_);
        }
    }

    /**
     * Checks if the parameter is an item which this animal can be fed to breed it (wheat, carrots or seeds depending on
     * the animal type)
     */
    public boolean isBreedingItem(ItemStack itemstack)
    {
    	return itemstack == null ? false : itemstack.getItem() == ModItems.dogTreat;
    }

    public int getMaxSpawnedInChunk()
    {
        return 8;
    }

    public boolean isAngry()
    {
        return (this.dataWatcher.getWatchableObjectByte(INDEX_TAME) & 2) != 0;
    }

    public void setAngry(boolean p_70916_1_)
    {
        byte b0 = this.dataWatcher.getWatchableObjectByte(INDEX_TAME);

        if (p_70916_1_)
        {
            this.dataWatcher.updateObject(INDEX_TAME, Byte.valueOf((byte)(b0 | 2)));
        }
        else
        {
            this.dataWatcher.updateObject(INDEX_TAME, Byte.valueOf((byte)(b0 & -3)));
        }
    }

    public EnumDyeColor getCollarColor()
    {
        return EnumDyeColor.byDyeDamage(this.dataWatcher.getWatchableObjectByte(INDEX_COLLAR) & 15);
    }

    public void setCollarColor(EnumDyeColor collarcolor)
    {
        this.dataWatcher.updateObject(INDEX_COLLAR, Byte.valueOf((byte)(collarcolor.getDyeDamage() & 15)));
    }
    
    public boolean isSaddled()
    {
        return (this.dataWatcher.getWatchableObjectByte(INDEX_SADDLE) & 1) != 0;
    }
    
    

    public void setSaddled(boolean p_70900_1_)
    {
        if (p_70900_1_)
        {
            this.dataWatcher.updateObject(INDEX_SADDLE, Byte.valueOf((byte)1));
        }
        else
        {
            this.dataWatcher.updateObject(INDEX_SADDLE, Byte.valueOf((byte)0));
        }
    } 
    
    public boolean hasEvolved() //TODO
    {
        return (this.dataWatcher.getWatchableObjectByte(INDEX_EVOLVE) & 1) != 0;
    }
    
    

    public void setEvolved(boolean p_70900_1_)
    {
        if (p_70900_1_)
        {
            this.dataWatcher.updateObject(INDEX_EVOLVE, Byte.valueOf((byte)1));
        }
        else
        {
            this.dataWatcher.updateObject(INDEX_EVOLVE, Byte.valueOf((byte)0));
        }
    }
    
    private boolean getHorseWatchableBoolean(int p_110233_1_) //TODO
    {
        return (this.dataWatcher.getWatchableObjectInt(INDEX_MOUTH) & p_110233_1_) != 0;
    }

    private void setHorseWatchableBoolean(int p_110208_1_, boolean p_110208_2_)
    {
        int j = this.dataWatcher.getWatchableObjectInt(INDEX_MOUTH);

        if (p_110208_2_)
        {
            this.dataWatcher.updateObject(INDEX_MOUTH, Integer.valueOf(j | p_110208_1_));
        }
        else
        {
            this.dataWatcher.updateObject(INDEX_MOUTH, Integer.valueOf(j & ~p_110208_1_));
        }
    }
    
    @SideOnly(Side.CLIENT)
    public float func_110201_q(float p_110201_1_)
    {
        return this.prevMouthOpenness + (this.mouthOpenness - this.prevMouthOpenness) * p_110201_1_;
    }
    
    public void openMouth()
    {
        if (isServer())
        {
            this.openMouthCounter = 1;
            this.setHorseWatchableBoolean(128, true);
        }
    }
    
    public boolean isDashing() //TODO
    {
        return (this.dataWatcher.getWatchableObjectByte(INDEX_DASH) & 1) != 0;
    }
    
    

    public void setDashing(boolean p_70900_1_)
    {
        if (p_70900_1_)
        {
            this.dataWatcher.updateObject(INDEX_DASH, Byte.valueOf((byte)1));
        }
        else
        {
            this.dataWatcher.updateObject(INDEX_DASH, Byte.valueOf((byte)0));
        }
    }

    /**
     * Determines if an entity can be despawned, used on idle far away entities
     */
    protected boolean canDespawn()
    {
        return !this.isTamed() && this.ticksExisted > 2400;
    }
    
    public boolean allowLeashing()
    {
        return !this.isAngry() && super.allowLeashing();
    }
}

Main Developer and Owner of Zero Quest

Visit the Wiki for more information

If I helped anyone, please give me a applaud and a thank you!

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • I am trying to make an attack animation works for this entity, I have followed tutorials on youtube, looked into Geckolib's documentation but I can't find why it isn't working. The walking animation works, the mob recognizes the player and attack them. The model and animations were made in Blockbench.   public class RedSlimeEntity extends TensuraTamableEntity implements IAnimatable { private final AnimationFactory factory = GeckoLibUtil.createFactory(this); private boolean swinging; private long lastAttackTime; public RedSlimeEntity(EntityType<? extends RedSlimeEntity> type, Level worldIn) { super(type, worldIn); this.xpReward = 20; } public static AttributeSupplier.Builder createAttributes() { AttributeSupplier.Builder builder = Mob.createMobAttributes(); builder = builder.add(Attributes.MOVEMENT_SPEED, 0.1); builder = builder.add(Attributes.MAX_HEALTH, 50); builder = builder.add(Attributes.ARMOR, 0); builder = builder.add(Attributes.ATTACK_DAMAGE, 25); builder = builder.add(Attributes.FOLLOW_RANGE, 16); return builder; } public static void init() { } @Override protected void registerGoals() { this.goalSelector.addGoal(3, new FloatGoal(this)); this.goalSelector.addGoal(1, new RedSlimeAttackGoal(this, 1.2D, false)); this.goalSelector.addGoal(4, new WaterAvoidingRandomStrollGoal(this, 1.0D)); this.goalSelector.addGoal(5, new RandomLookAroundGoal(this)); this.goalSelector.addGoal(2, new RedSlimeAttackGoal.StopNearPlayerGoal(this, 1)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); } private <E extends IAnimatable> PlayState predicate(AnimationEvent<E> event) { if (event.isMoving()) { event.getController().setAnimation(new AnimationBuilder().addAnimation("animation.model.walk", true)); return PlayState.CONTINUE; } event.getController().setAnimation(new AnimationBuilder().addAnimation("animation.model.idle", true)); return PlayState.CONTINUE; } private <E extends IAnimatable> PlayState attackPredicate(AnimationEvent<E> event) { if (this.swinging && event.getController().getAnimationState() == AnimationState.Stopped) { event.getController().setAnimation(new AnimationBuilder().addAnimation("animation.model.attack", false)); this.swinging = false; return PlayState.CONTINUE; } return PlayState.STOP; } @Override public void swing(InteractionHand hand, boolean updateSelf) { super.swing(hand, updateSelf); this.swinging = true; } @Override public void registerControllers(AnimationData data) { data.addAnimationController(new AnimationController<>(this, "controller", 0, this::predicate)); data.addAnimationController(new AnimationController<>(this, "attackController", 0, this::attackPredicate)); } @Override public AnimationFactory getFactory() { return factory; } class RedSlimeAttackGoal extends MeleeAttackGoal { private final RedSlimeEntity entity; public RedSlimeAttackGoal(RedSlimeEntity entity, double speedModifier, boolean longMemory) { super(entity, speedModifier, longMemory); this.entity = entity; if (this.mob.getTarget() != null && this.mob.getTarget().isAlive()) { long currentTime = this.entity.level.getGameTime(); if (!this.entity.swinging && currentTime - this.entity.lastAttackTime > 20) { // 20 ticks = 1 second this.entity.swinging = true; this.entity.lastAttackTime = currentTime; } } } protected double getAttackReach(LivingEntity target) { return this.mob.getBbWidth() * 2.0F * this.mob.getBbWidth() * 2.0F + target.getBbWidth(); } @Override protected void checkAndPerformAttack(LivingEntity target, double distToEnt) { double reach = this.getAttackReach(target); if (distToEnt <= reach && this.getTicksUntilNextAttack() <= 0) { this.resetAttackCooldown(); this.entity.swinging = true; this.mob.doHurtTarget(target); } } public static class StopNearPlayerGoal extends Goal { private final Mob mob; private final double stopDistance; public StopNearPlayerGoal(Mob mob, double stopDistance) { this.mob = mob; this.stopDistance = stopDistance; } @Override public boolean canUse() { Player nearestPlayer = this.mob.level.getNearestPlayer(this.mob, stopDistance); if (nearestPlayer != null) { double distanceSquared = this.mob.distanceToSqr(nearestPlayer); return distanceSquared < (stopDistance * stopDistance); } return false; } @Override public void tick() { // Stop movement this.mob.getNavigation().stop(); } @Override public boolean canContinueToUse() { Player nearestPlayer = this.mob.level.getNearestPlayer(this.mob, stopDistance); if (nearestPlayer != null) { double distanceSquared = this.mob.distanceToSqr(nearestPlayer); return distanceSquared < (stopDistance * stopDistance); } return false; } } @Override public void tick() { super.tick(); if (this.mob.getTarget() != null && this.mob.getTarget().isAlive()) { if (!this.entity.swinging) { this.entity.swinging = true; } } } } @Override public @Nullable AgeableMob getBreedOffspring(ServerLevel serverLevel, AgeableMob ageableMob) { return null; } @Override public int getRemainingPersistentAngerTime() { return 0; } @Override public void setRemainingPersistentAngerTime(int i) { } @Override public @Nullable UUID getPersistentAngerTarget() { return null; } @Override public void setPersistentAngerTarget(@Nullable UUID uuid) { } @Override public void startPersistentAngerTimer() { } protected void playStepSound(BlockPos pos, BlockState blockIn) { this.playSound(SoundEvents.SLIME_SQUISH, 0.15F, 1.0F); } protected SoundEvent getAmbientSound() { return SoundEvents.SLIME_SQUISH; } protected SoundEvent getHurtSound(DamageSource damageSourceIn) { return SoundEvents.SLIME_HURT; } protected SoundEvent getDeathSound() { return SoundEvents.SLIME_DEATH; } protected float getSoundVolume() { return 0.2F; } }  
    • CAN ANYBODY HELP ME? JVM info: Oracle Corporation - 1.8.0_431 - 25.431-b10 java.net.preferIPv4Stack=true Current Time: 15/01/2025 17:45:17 Host: files.minecraftforge.net [104.21.58.163, 172.67.161.211] Host: maven.minecraftforge.net [172.67.161.211, 104.21.58.163] Host: libraries.minecraft.net [127.0.0.1] Host: launchermeta.mojang.com [127.0.0.1] Host: piston-meta.mojang.com [127.0.0.1] Host: sessionserver.mojang.com [127.0.0.1] Host: authserver.mojang.com [Unknown] Error checking https://launchermeta.mojang.com/: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target Data kindly mirrored by CreeperHost at https://www.creeperhost.net/ Considering minecraft server jar Downloading libraries Found 1 additional library directories Considering library cpw.mods:securejarhandler:2.1.10   Downloading library from https://maven.creeperhost.net/cpw/mods/securejarhandler/2.1.10/securejarhandler-2.1.10.jar     Download completed: Checksum validated. Considering library org.ow2.asm:asm:9.7.1   Downloading library from https://maven.creeperhost.net/org/ow2/asm/asm/9.7.1/asm-9.7.1.jar     Download completed: Checksum validated. Considering library org.ow2.asm:asm-commons:9.7.1   Downloading library from https://maven.creeperhost.net/org/ow2/asm/asm-commons/9.7.1/asm-commons-9.7.1.jar     Download completed: Checksum validated. Considering library org.ow2.asm:asm-tree:9.7.1   Downloading library from https://maven.creeperhost.net/org/ow2/asm/asm-tree/9.7.1/asm-tree-9.7.1.jar     Download completed: Checksum validated. Considering library org.ow2.asm:asm-util:9.7.1   Downloading library from https://maven.creeperhost.net/org/ow2/asm/asm-util/9.7.1/asm-util-9.7.1.jar     Download completed: Checksum validated. Considering library org.ow2.asm:asm-analysis:9.7.1   Downloading library from https://maven.creeperhost.net/org/ow2/asm/asm-analysis/9.7.1/asm-analysis-9.7.1.jar     Download completed: Checksum validated. Considering library net.minecraftforge:accesstransformers:8.0.4   Downloading library from https://maven.creeperhost.net/net/minecraftforge/accesstransformers/8.0.4/accesstransformers-8.0.4.jar     Download completed: Checksum validated. Considering library org.antlr:antlr4-runtime:4.9.1   Downloading library from https://maven.creeperhost.net/org/antlr/antlr4-runtime/4.9.1/antlr4-runtime-4.9.1.jar     Download completed: Checksum validated. Considering library net.minecraftforge:eventbus:6.0.5   Downloading library from https://maven.creeperhost.net/net/minecraftforge/eventbus/6.0.5/eventbus-6.0.5.jar     Download completed: Checksum validated. Considering library net.minecraftforge:forgespi:7.0.1   Downloading library from https://maven.creeperhost.net/net/minecraftforge/forgespi/7.0.1/forgespi-7.0.1.jar     Download completed: Checksum validated. Considering library net.minecraftforge:coremods:5.2.1   Downloading library from https://maven.creeperhost.net/net/minecraftforge/coremods/5.2.1/coremods-5.2.1.jar     Download completed: Checksum validated. Considering library cpw.mods:modlauncher:10.0.9   Downloading library from https://maven.creeperhost.net/cpw/mods/modlauncher/10.0.9/modlauncher-10.0.9.jar     Download completed: Checksum validated. Considering library net.minecraftforge:unsafe:0.2.0   Downloading library from https://maven.creeperhost.net/net/minecraftforge/unsafe/0.2.0/unsafe-0.2.0.jar     Download completed: Checksum validated. Considering library net.minecraftforge:mergetool:1.1.5:api   Downloading library from https://maven.creeperhost.net/net/minecraftforge/mergetool/1.1.5/mergetool-1.1.5-api.jar     Download completed: Checksum validated. Considering library com.electronwill.night-config:core:3.6.4   Downloading library from https://maven.creeperhost.net/com/electronwill/night-config/core/3.6.4/core-3.6.4.jar     Download completed: Checksum validated. Considering library com.electronwill.night-config:toml:3.6.4   Downloading library from https://maven.creeperhost.net/com/electronwill/night-config/toml/3.6.4/toml-3.6.4.jar     Download completed: Checksum validated. Considering library org.apache.maven:maven-artifact:3.8.5   Downloading library from https://maven.creeperhost.net/org/apache/maven/maven-artifact/3.8.5/maven-artifact-3.8.5.jar     Download completed: Checksum validated. Considering library net.jodah:typetools:0.6.3   Downloading library from https://maven.creeperhost.net/net/jodah/typetools/0.6.3/typetools-0.6.3.jar     Download completed: Checksum validated. Considering library net.minecrell:terminalconsoleappender:1.2.0   Downloading library from https://maven.creeperhost.net/net/minecrell/terminalconsoleappender/1.2.0/terminalconsoleappender-1.2.0.jar     Download completed: Checksum validated. Considering library org.jline:jline-reader:3.12.1   Downloading library from https://maven.creeperhost.net/org/jline/jline-reader/3.12.1/jline-reader-3.12.1.jar     Download completed: Checksum validated. Considering library org.jline:jline-terminal:3.12.1   Downloading library from https://maven.creeperhost.net/org/jline/jline-terminal/3.12.1/jline-terminal-3.12.1.jar     Download completed: Checksum validated. Considering library org.spongepowered:mixin:0.8.5   Downloading library from https://maven.creeperhost.net/org/spongepowered/mixin/0.8.5/mixin-0.8.5.jar     Download completed: Checksum validated. Considering library org.openjdk.nashorn:nashorn-core:15.4   Downloading library from https://maven.creeperhost.net/org/openjdk/nashorn/nashorn-core/15.4/nashorn-core-15.4.jar     Download completed: Checksum validated. Considering library net.minecraftforge:JarJarSelector:0.3.19   Downloading library from https://maven.creeperhost.net/net/minecraftforge/JarJarSelector/0.3.19/JarJarSelector-0.3.19.jar     Download completed: Checksum validated. Considering library net.minecraftforge:JarJarMetadata:0.3.19   Downloading library from https://maven.creeperhost.net/net/minecraftforge/JarJarMetadata/0.3.19/JarJarMetadata-0.3.19.jar     Download completed: Checksum validated. Considering library cpw.mods:bootstraplauncher:1.1.2   Downloading library from https://maven.creeperhost.net/cpw/mods/bootstraplauncher/1.1.2/bootstraplauncher-1.1.2.jar     Download completed: Checksum validated. Considering library net.minecraftforge:JarJarFileSystems:0.3.19   Downloading library from https://maven.creeperhost.net/net/minecraftforge/JarJarFileSystems/0.3.19/JarJarFileSystems-0.3.19.jar     Download completed: Checksum validated. Considering library net.minecraftforge:fmlloader:1.20.1-47.3.12   Downloading library from https://maven.creeperhost.net/net/minecraftforge/fmlloader/1.20.1-47.3.12/fmlloader-1.20.1-47.3.12.jar     Download completed: Checksum validated. Considering library net.minecraftforge:fmlearlydisplay:1.20.1-47.3.12   Downloading library from https://maven.creeperhost.net/net/minecraftforge/fmlearlydisplay/1.20.1-47.3.12/fmlearlydisplay-1.20.1-47.3.12.jar     Download completed: Checksum validated. Considering library com.github.jponge:lzma-java:1.3   Downloading library from https://maven.creeperhost.net/com/github/jponge/lzma-java/1.3/lzma-java-1.3.jar     Download completed: Checksum validated. Considering library com.google.code.findbugs:jsr305:3.0.2   Downloading library from https://libraries.minecraft.net/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar Failed to establish connection to https://libraries.minecraft.net/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar  Host: libraries.minecraft.net [127.0.0.1] javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target     at sun.security.ssl.Alert.createSSLException(Unknown Source)     at sun.security.ssl.TransportContext.fatal(Unknown Source)     at sun.security.ssl.TransportContext.fatal(Unknown Source)     at sun.security.ssl.TransportContext.fatal(Unknown Source)     at sun.security.ssl.CertificateMessage$T13CertificateConsumer.checkServerCerts(Unknown Source)     at sun.security.ssl.CertificateMessage$T13CertificateConsumer.onConsumeCertificate(Unknown Source)     at sun.security.ssl.CertificateMessage$T13CertificateConsumer.consume(Unknown Source)     at sun.security.ssl.SSLHandshake.consume(Unknown Source)     at sun.security.ssl.HandshakeContext.dispatch(Unknown Source)     at sun.security.ssl.HandshakeContext.dispatch(Unknown Source)     at sun.security.ssl.TransportContext.dispatch(Unknown Source)     at sun.security.ssl.SSLTransport.decode(Unknown Source)     at sun.security.ssl.SSLSocketImpl.decode(Unknown Source)     at sun.security.ssl.SSLSocketImpl.readHandshakeRecord(Unknown Source)     at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)     at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)     at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)     at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)     at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)     at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)     at java.net.HttpURLConnection.getResponseCode(Unknown Source)     at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(Unknown Source)     at net.minecraftforge.installer.DownloadUtils.getConnection(DownloadUtils.java:240)     at net.minecraftforge.installer.DownloadUtils.download(DownloadUtils.java:174)     at net.minecraftforge.installer.DownloadUtils.download(DownloadUtils.java:164)     at net.minecraftforge.installer.DownloadUtils.downloadLibrary(DownloadUtils.java:149)     at net.minecraftforge.installer.actions.Action.downloadLibraries(Action.java:73)     at net.minecraftforge.installer.actions.ServerInstall.run(ServerInstall.java:72)     at net.minecraftforge.installer.InstallerPanel.run(InstallerPanel.java:271)     at net.minecraftforge.installer.SimpleInstaller.launchGui(SimpleInstaller.java:182)     at net.minecraftforge.installer.SimpleInstaller.main(SimpleInstaller.java:154) Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target     at sun.security.validator.PKIXValidator.doBuild(Unknown Source)     at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)     at sun.security.validator.Validator.validate(Unknown Source)     at sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source)     at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source)     at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)     ... 27 more Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target     at sun.security.provider.certpath.SunCertPathBuilder.build(Unknown Source)     at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)     at java.security.cert.CertPathBuilder.build(Unknown Source)     ... 33 more Considering library com.google.code.gson:gson:2.10.1   Downloading library from https://libraries.minecraft.net/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar Failed to establish connection to https://libraries.minecraft.net/com/google/code/gson/gson/2.10.1/gson-2.10.1.jar  Host: libraries.minecraft.net [127.0.0.1] javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target     at sun.security.ssl.Alert.createSSLException(Unknown Source)     at sun.security.ssl.TransportContext.fatal(Unknown Source)     at sun.security.ssl.TransportContext.fatal(Unknown Source)     at sun.security.ssl.TransportContext.fatal(Unknown Source)     at sun.security.ssl.CertificateMessage$T13CertificateConsumer.checkServerCerts(Unknown Source)     at sun.security.ssl.CertificateMessage$T13CertificateConsumer.onConsumeCertificate(Unknown Source)     at sun.security.ssl.CertificateMessage$T13CertificateConsumer.consume(Unknown Source)     at sun.security.ssl.SSLHandshake.consume(Unknown Source)     at sun.security.ssl.HandshakeContext.dispatch(Unknown Source)     at sun.security.ssl.HandshakeContext.dispatch(Unknown Source)     at sun.security.ssl.TransportContext.dispatch(Unknown Source)     at sun.security.ssl.SSLTransport.decode(Unknown Source)     at sun.security.ssl.SSLSocketImpl.decode(Unknown Source)     at sun.security.ssl.SSLSocketImpl.readHandshakeRecord(Unknown Source)     at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)     at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)     at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)     at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)     at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)     at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)     at java.net.HttpURLConnection.getResponseCode(Unknown Source)     at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(Unknown Source)     at net.minecraftforge.installer.DownloadUtils.getConnection(DownloadUtils.java:240)     at net.minecraftforge.installer.DownloadUtils.download(DownloadUtils.java:174)     at net.minecraftforge.installer.DownloadUtils.download(DownloadUtils.java:164)     at net.minecraftforge.installer.DownloadUtils.downloadLibrary(DownloadUtils.java:149)     at net.minecraftforge.installer.actions.Action.downloadLibraries(Action.java:73)     at net.minecraftforge.installer.actions.ServerInstall.run(ServerInstall.java:72)     at net.minecraftforge.installer.InstallerPanel.run(InstallerPanel.java:271)     at net.minecraftforge.installer.SimpleInstaller.launchGui(SimpleInstaller.java:182)     at net.minecraftforge.installer.SimpleInstaller.main(SimpleInstaller.java:154) Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target     at sun.security.validator.PKIXValidator.doBuild(Unknown Source)     at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)     at sun.security.validator.Validator.validate(Unknown Source)     at sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source)     at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source)     at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)     ... 27 more Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target     at sun.security.provider.certpath.SunCertPathBuilder.build(Unknown Source)     at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)     at java.security.cert.CertPathBuilder.build(Unknown Source)     ... 33 more Considering library com.google.errorprone:error_prone_annotations:2.1.3   Downloading library from https://maven.creeperhost.net/com/google/errorprone/error_prone_annotations/2.1.3/error_prone_annotations-2.1.3.jar     Download completed: Checksum validated. Considering library com.google.guava:guava:25.1-jre   Downloading library from https://maven.creeperhost.net/com/google/guava/guava/25.1-jre/guava-25.1-jre.jar     Download completed: Checksum validated. Considering library com.google.j2objc:j2objc-annotations:1.1   Downloading library from https://maven.creeperhost.net/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.jar     Download completed: Checksum validated. Considering library com.nothome:javaxdelta:2.0.1   Downloading library from https://maven.creeperhost.net/com/nothome/javaxdelta/2.0.1/javaxdelta-2.0.1.jar     Download completed: Checksum validated. Considering library commons-io:commons-io:2.4   Downloading library from https://libraries.minecraft.net/commons-io/commons-io/2.4/commons-io-2.4.jar Failed to establish connection to https://libraries.minecraft.net/commons-io/commons-io/2.4/commons-io-2.4.jar  Host: libraries.minecraft.net [127.0.0.1] javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target     at sun.security.ssl.Alert.createSSLException(Unknown Source)     at sun.security.ssl.TransportContext.fatal(Unknown Source)     at sun.security.ssl.TransportContext.fatal(Unknown Source)     at sun.security.ssl.TransportContext.fatal(Unknown Source)     at sun.security.ssl.CertificateMessage$T13CertificateConsumer.checkServerCerts(Unknown Source)     at sun.security.ssl.CertificateMessage$T13CertificateConsumer.onConsumeCertificate(Unknown Source)     at sun.security.ssl.CertificateMessage$T13CertificateConsumer.consume(Unknown Source)     at sun.security.ssl.SSLHandshake.consume(Unknown Source)     at sun.security.ssl.HandshakeContext.dispatch(Unknown Source)     at sun.security.ssl.HandshakeContext.dispatch(Unknown Source)     at sun.security.ssl.TransportContext.dispatch(Unknown Source)     at sun.security.ssl.SSLTransport.decode(Unknown Source)     at sun.security.ssl.SSLSocketImpl.decode(Unknown Source)     at sun.security.ssl.SSLSocketImpl.readHandshakeRecord(Unknown Source)     at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)     at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)     at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)     at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)     at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)     at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)     at java.net.HttpURLConnection.getResponseCode(Unknown Source)     at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(Unknown Source)     at net.minecraftforge.installer.DownloadUtils.getConnection(DownloadUtils.java:240)     at net.minecraftforge.installer.DownloadUtils.download(DownloadUtils.java:174)     at net.minecraftforge.installer.DownloadUtils.download(DownloadUtils.java:164)     at net.minecraftforge.installer.DownloadUtils.downloadLibrary(DownloadUtils.java:149)     at net.minecraftforge.installer.actions.Action.downloadLibraries(Action.java:73)     at net.minecraftforge.installer.actions.ServerInstall.run(ServerInstall.java:72)     at net.minecraftforge.installer.InstallerPanel.run(InstallerPanel.java:271)     at net.minecraftforge.installer.SimpleInstaller.launchGui(SimpleInstaller.java:182)     at net.minecraftforge.installer.SimpleInstaller.main(SimpleInstaller.java:154) Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target     at sun.security.validator.PKIXValidator.doBuild(Unknown Source)     at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)     at sun.security.validator.Validator.validate(Unknown Source)     at sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source)     at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source)     at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)     ... 27 more Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target     at sun.security.provider.certpath.SunCertPathBuilder.build(Unknown Source)     at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)     at java.security.cert.CertPathBuilder.build(Unknown Source)     ... 33 more Considering library de.oceanlabs.mcp:mcp_config:1.20.1-20230612.114412@zip   Downloading library from https://maven.creeperhost.net/de/oceanlabs/mcp/mcp_config/1.20.1-20230612.114412/mcp_config-1.20.1-20230612.114412.zip     Download completed: Checksum validated. Considering library de.siegmar:fastcsv:2.2.2   Downloading library from https://maven.creeperhost.net/de/siegmar/fastcsv/2.2.2/fastcsv-2.2.2.jar     Download completed: Checksum validated. Considering library net.minecraftforge:ForgeAutoRenamingTool:0.1.22:all   Downloading library from https://maven.creeperhost.net/net/minecraftforge/ForgeAutoRenamingTool/0.1.22/ForgeAutoRenamingTool-0.1.22-all.jar     Download completed: Checksum validated. Considering library net.minecraftforge:binarypatcher:1.1.1   Downloading library from https://maven.creeperhost.net/net/minecraftforge/binarypatcher/1.1.1/binarypatcher-1.1.1.jar     Download completed: Checksum validated. Considering library net.minecraftforge:fmlcore:1.20.1-47.3.12   Downloading library from https://maven.creeperhost.net/net/minecraftforge/fmlcore/1.20.1-47.3.12/fmlcore-1.20.1-47.3.12.jar     Download completed: Checksum validated. Considering library net.minecraftforge:fmlearlydisplay:1.20.1-47.3.12   File exists: Checksum validated. Considering library net.minecraftforge:fmlloader:1.20.1-47.3.12   File exists: Checksum validated. Considering library net.minecraftforge:forge:1.20.1-47.3.12:universal   Downloading library from https://maven.creeperhost.net/net/minecraftforge/forge/1.20.1-47.3.12/forge-1.20.1-47.3.12-universal.jar     Download completed: Checksum validated. Considering library net.minecraftforge:installertools:1.4.1   Downloading library from https://maven.creeperhost.net/net/minecraftforge/installertools/1.4.1/installertools-1.4.1.jar     Download completed: Checksum validated. Considering library net.minecraftforge:jarsplitter:1.1.4   Downloading library from https://maven.creeperhost.net/net/minecraftforge/jarsplitter/1.1.4/jarsplitter-1.1.4.jar     Download completed: Checksum validated. Considering library net.minecraftforge:javafmllanguage:1.20.1-47.3.12   Downloading library from https://maven.creeperhost.net/net/minecraftforge/javafmllanguage/1.20.1-47.3.12/javafmllanguage-1.20.1-47.3.12.jar     Download completed: Checksum validated. Considering library net.minecraftforge:lowcodelanguage:1.20.1-47.3.12   Downloading library from https://maven.creeperhost.net/net/minecraftforge/lowcodelanguage/1.20.1-47.3.12/lowcodelanguage-1.20.1-47.3.12.jar     Download completed: Checksum validated. Considering library net.minecraftforge:mclanguage:1.20.1-47.3.12   Downloading library from https://maven.creeperhost.net/net/minecraftforge/mclanguage/1.20.1-47.3.12/mclanguage-1.20.1-47.3.12.jar     Download completed: Checksum validated. Considering library net.minecraftforge:srgutils:0.4.3   Downloading library from https://maven.creeperhost.net/net/minecraftforge/srgutils/0.4.3/srgutils-0.4.3.jar     Download completed: Checksum validated. Considering library net.minecraftforge:srgutils:0.4.9   Downloading library from https://maven.creeperhost.net/net/minecraftforge/srgutils/0.4.9/srgutils-0.4.9.jar     Download completed: Checksum validated. Considering library net.minecraftforge:srgutils:0.5.6   Downloading library from https://maven.creeperhost.net/net/minecraftforge/srgutils/0.5.6/srgutils-0.5.6.jar     Download completed: Checksum validated. Considering library net.sf.jopt-simple:jopt-simple:5.0.4   Downloading library from https://libraries.minecraft.net/net/sf/jopt-simple/jopt-simple/5.0.4/jopt-simple-5.0.4.jar Failed to establish connection to https://libraries.minecraft.net/net/sf/jopt-simple/jopt-simple/5.0.4/jopt-simple-5.0.4.jar  Host: libraries.minecraft.net [127.0.0.1] javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target     at sun.security.ssl.Alert.createSSLException(Unknown Source)     at sun.security.ssl.TransportContext.fatal(Unknown Source)     at sun.security.ssl.TransportContext.fatal(Unknown Source)     at sun.security.ssl.TransportContext.fatal(Unknown Source)     at sun.security.ssl.CertificateMessage$T13CertificateConsumer.checkServerCerts(Unknown Source)     at sun.security.ssl.CertificateMessage$T13CertificateConsumer.onConsumeCertificate(Unknown Source)     at sun.security.ssl.CertificateMessage$T13CertificateConsumer.consume(Unknown Source)     at sun.security.ssl.SSLHandshake.consume(Unknown Source)     at sun.security.ssl.HandshakeContext.dispatch(Unknown Source)     at sun.security.ssl.HandshakeContext.dispatch(Unknown Source)     at sun.security.ssl.TransportContext.dispatch(Unknown Source)     at sun.security.ssl.SSLTransport.decode(Unknown Source)     at sun.security.ssl.SSLSocketImpl.decode(Unknown Source)     at sun.security.ssl.SSLSocketImpl.readHandshakeRecord(Unknown Source)     at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)     at sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)     at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)     at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)     at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)     at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)     at java.net.HttpURLConnection.getResponseCode(Unknown Source)     at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(Unknown Source)     at net.minecraftforge.installer.DownloadUtils.getConnection(DownloadUtils.java:240)     at net.minecraftforge.installer.DownloadUtils.download(DownloadUtils.java:174)     at net.minecraftforge.installer.DownloadUtils.download(DownloadUtils.java:164)     at net.minecraftforge.installer.DownloadUtils.downloadLibrary(DownloadUtils.java:149)     at net.minecraftforge.installer.actions.Action.downloadLibraries(Action.java:73)     at net.minecraftforge.installer.actions.ServerInstall.run(ServerInstall.java:72)     at net.minecraftforge.installer.InstallerPanel.run(InstallerPanel.java:271)     at net.minecraftforge.installer.SimpleInstaller.launchGui(SimpleInstaller.java:182)     at net.minecraftforge.installer.SimpleInstaller.main(SimpleInstaller.java:154) Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target     at sun.security.validator.PKIXValidator.doBuild(Unknown Source)     at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)     at sun.security.validator.Validator.validate(Unknown Source)     at sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source)     at sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source)     at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)     ... 27 more Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target     at sun.security.provider.certpath.SunCertPathBuilder.build(Unknown Source)     at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)     at java.security.cert.CertPathBuilder.build(Unknown Source)     ... 33 more Considering library net.sf.jopt-simple:jopt-simple:6.0-alpha-3   Downloading library from https://maven.creeperhost.net/net/sf/jopt-simple/jopt-simple/6.0-alpha-3/jopt-simple-6.0-alpha-3.jar     Download completed: Checksum validated. Considering library org.checkerframework:checker-qual:2.0.0   Downloading library from https://maven.creeperhost.net/org/checkerframework/checker-qual/2.0.0/checker-qual-2.0.0.jar     Download completed: Checksum validated. Considering library org.codehaus.mojo:animal-sniffer-annotations:1.14   Downloading library from https://maven.creeperhost.net/org/codehaus/mojo/animal-sniffer-annotations/1.14/animal-sniffer-annotations-1.14.jar     Download completed: Checksum validated. Considering library org.ow2.asm:asm-analysis:9.2   Downloading library from https://maven.creeperhost.net/org/ow2/asm/asm-analysis/9.2/asm-analysis-9.2.jar     Download completed: Checksum validated. Considering library org.ow2.asm:asm-commons:9.2   Downloading library from https://maven.creeperhost.net/org/ow2/asm/asm-commons/9.2/asm-commons-9.2.jar     Download completed: Checksum validated. Considering library org.ow2.asm:asm-commons:9.6   Downloading library from https://maven.creeperhost.net/org/ow2/asm/asm-commons/9.6/asm-commons-9.6.jar     Download completed: Checksum validated. Considering library org.ow2.asm:asm-tree:9.2   Downloading library from https://maven.creeperhost.net/org/ow2/asm/asm-tree/9.2/asm-tree-9.2.jar     Download completed: Checksum validated. Considering library org.ow2.asm:asm-tree:9.6   Downloading library from https://maven.creeperhost.net/org/ow2/asm/asm-tree/9.6/asm-tree-9.6.jar     Download completed: Checksum validated. Considering library org.ow2.asm:asm:9.2   Downloading library from https://maven.creeperhost.net/org/ow2/asm/asm/9.2/asm-9.2.jar     Download completed: Checksum validated. Considering library org.ow2.asm:asm:9.6   Downloading library from https://maven.creeperhost.net/org/ow2/asm/asm/9.6/asm-9.6.jar     Download completed: Checksum validated. Considering library trove:trove:1.0.2   Downloading library from https://maven.creeperhost.net/trove/trove/1.0.2/trove-1.0.2.jar     Download completed: Checksum validated. These libraries failed to download. Try again. com.google.code.findbugs:jsr305:3.0.2 com.google.code.gson:gson:2.10.1 commons-io:commons-io:2.4 net.sf.jopt-simple:jopt-simple:5.0.4 There was an error during installation  
    • Maybe some kind of bug with Pixelmon - something with Raids   Report it to the Creators
    • Did you make changes at the paper-global.yml file?   If not, delete this file and restart the server
    • My friends and I are playing a modified version of BMC4 and we're noticing stuff like passive mobs. (I think) like creatures/animals from Alex mobs, naturalist, let's do nature and even vanilla MC (sheep, cow, pigs, chickens, horses, donkeys) don't really spawn in, unlike the sea creatures and hostile monsters spawn in just fine and normal numbers. Here is a mod list from a crash report: https://pastebin.ubuntu.com/p/K9vJxxx6n4/ Just a quick copy and paste of the mod list from an unrelated crash report If anything please let me know if I should post pics of the mods from my mods folder I want to know how to increase their spawn rate/amount and if there are any mods that are causing the scarce appearances of these mobs
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.