Jump to content

Recommended Posts

Posted

Oh guys! I got a question, is it possible to transfer a SketchUp model to Minecraft? Blender is a pretty complicated program but I am familar with SketchUp (as I have used it to create models to 3D print).

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!

Posted

Yea, it was hard to make it flaweless indeed, but you can still use the idea.

I got an example for an way to make the animation smooth:

 

https://github.com/N247S/mechanical_crafting_table/blob/master/src/main/java/mechanical_crafting_table/client/render/MechanicalCraftingTableRenderer.java

 

Basicly I set points of movements(like in MCAnimator) and than I calc the movement which is needed in every tick and set it every Tick.

(It might be a bit hard to read)

Projects:

Discontinued:

- N2ConfigAPI

- Meachanical Crafting Table

 

Latest:

- CollectionUtils

 

Coöperations:

- InGameConfigManager

  • 1 month later...
Posted

I had some luck with MCAnimator by changing the instances of ArrayList<E> in AnimTickHandler to CopyOnWriteArrayList<E> - this seems to stop the concurrent modfication exception issues for me.

Posted

I had some luck with MCAnimator by changing the instances of ArrayList<E> in AnimTickHandler to CopyOnWriteArrayList<E> - this seems to stop the concurrent modfication exception issues for me.

 

Hey, is it possible to make a walking animation kick on when my entity moves around and stop when the entity stops moving?

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!

Posted

Sure, Jabelar gives an perfect example in his animation tutorial(cant find a link that fast, though google should do fine :P).

 

Basically you can check the entity's previous pos and current pos to determine if an entity has moved, how fast, which direction etc.. So go crazy on that stuff if you want.

Projects:

Discontinued:

- N2ConfigAPI

- Meachanical Crafting Table

 

Latest:

- CollectionUtils

 

Coöperations:

- InGameConfigManager

Posted

Alright.. I'm having issues activating my animations, they're not turning on.

 

ModelBase

package net.novaviper.zeroquest.client.model;

import java.util.HashMap;

import org.lwjgl.opengl.GL11;

import net.minecraft.client.model.ModelBase;
import net.minecraft.entity.Entity;
import net.novaviper.zeroquest.client.MCAClientLibrary.MCAModelRenderer;
import net.novaviper.zeroquest.common.entity.EntityZertumEntity;
import net.novaviper.zeroquest.common.mca.MCAVersionChecker;
import net.novaviper.zeroquest.common.mca.animation.AnimationHandler;
import net.novaviper.zeroquest.common.mca.math.*;

public class ModelZertumStage1 extends ModelBase {
public final int MCA_MIN_REQUESTED_VERSION = 5;
public HashMap<String, MCAModelRenderer> parts = new HashMap<String, MCAModelRenderer>();

MCAModelRenderer leftHindLeg1;
MCAModelRenderer rightHindLeg1;
MCAModelRenderer rightLeg;
MCAModelRenderer leftLeg;
MCAModelRenderer torso;
MCAModelRenderer pad3;
MCAModelRenderer leftHindLeg2;
MCAModelRenderer rightHindLeg2;
MCAModelRenderer mane1;
MCAModelRenderer tail1;
MCAModelRenderer pad2;
MCAModelRenderer seat2;
MCAModelRenderer pad4;
MCAModelRenderer leftHindLeg3;
MCAModelRenderer rightHindLeg3;
MCAModelRenderer mane2;
MCAModelRenderer tail2;
MCAModelRenderer pad1;
MCAModelRenderer seat1;
MCAModelRenderer rope1;
MCAModelRenderer rope2;
MCAModelRenderer neck;
MCAModelRenderer tail3;
MCAModelRenderer padPart1;
MCAModelRenderer padPart2;
MCAModelRenderer metal1;
MCAModelRenderer metal2;
MCAModelRenderer head;
MCAModelRenderer nose;
MCAModelRenderer ear1;
MCAModelRenderer ear2;

public ModelZertumStage1() {
	MCAVersionChecker.checkForLibraryVersion(getClass(), MCA_MIN_REQUESTED_VERSION);

	textureWidth = 128;
	textureHeight = 64;

	leftHindLeg1 = new MCAModelRenderer(this, "LeftHindLeg1", 11, 18);
	leftHindLeg1.mirror = false;
	leftHindLeg1.addBox(-1.0F, -5.0F, -2.0F, 2, 5, 3);
	leftHindLeg1.setInitialRotationPoint(1.5F, -11.0F, -3.0F);
	leftHindLeg1.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(-0.14816688F, 0.0F, 0.0F, 0.98896235F)).transpose());
	leftHindLeg1.setTextureSize(128, 64);
	parts.put(leftHindLeg1.boxName, leftHindLeg1);

	rightHindLeg1 = new MCAModelRenderer(this, "RightHindLeg1", 11, 31);
	rightHindLeg1.mirror = false;
	rightHindLeg1.addBox(-1.0F, -5.0F, -2.0F, 2, 5, 3);
	rightHindLeg1.setInitialRotationPoint(-2.5F, -11.0F, -3.0F);
	rightHindLeg1.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(-0.14816688F, 0.0F, 0.0F, 0.98896235F)).transpose());
	rightHindLeg1.setTextureSize(128, 64);
	parts.put(rightHindLeg1.boxName, rightHindLeg1);

	rightLeg = new MCAModelRenderer(this, "RightLeg", 0, 30);
	rightLeg.mirror = false;
	rightLeg.addBox(-1.0F, -10.0F, -1.0F, 2, 10, 2);
	rightLeg.setInitialRotationPoint(-3.0F, -12.0F, 6.0F);
	rightLeg.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(0.0F, 0.0F, 0.0F, 1.0F)).transpose());
	rightLeg.setTextureSize(128, 64);
	parts.put(rightLeg.boxName, rightLeg);

	leftLeg = new MCAModelRenderer(this, "LeftLeg", 0, 16);
	leftLeg.mirror = false;
	leftLeg.addBox(-1.0F, -10.0F, -1.0F, 2, 10, 2);
	leftLeg.setInitialRotationPoint(2.0F, -12.0F, 6.0F);
	leftLeg.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(0.0F, 0.0F, 0.0F, 1.0F)).transpose());
	leftLeg.setTextureSize(128, 64);
	parts.put(leftLeg.boxName, leftLeg);

	torso = new MCAModelRenderer(this, "Torso", 69, 0);
	torso.mirror = false;
	torso.addBox(-2.5F, -6.0F, -2.0F, 5, 9, 5);
	torso.setInitialRotationPoint(-0.5F, -10.5F, 1.0F);
	torso.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(0.6803349F, 0.0F, 0.0F, 0.73290133F)).transpose());
	torso.setTextureSize(128, 64);
	parts.put(torso.boxName, torso);

	pad3 = new MCAModelRenderer(this, "Pad3", 110, 39);
	pad3.mirror = false;
	pad3.addBox(-2.0F, -1.0F, -4.0F, 5, 1, 4);
	pad3.setInitialRotationPoint(-1.0F, -7.5F, 1.8F);
	pad3.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(-0.03252245F, 0.0F, 0.0F, 0.999471F)).transpose());
	pad3.setTextureSize(128, 64);
	parts.put(pad3.boxName, pad3);

	leftHindLeg2 = new MCAModelRenderer(this, "LeftHindLeg2", 3, 44);
	leftHindLeg2.mirror = false;
	leftHindLeg2.addBox(-1.0F, -4.0F, -1.0F, 2, 4, 2);
	leftHindLeg2.setInitialRotationPoint(0.0F, -4.3F, 0.2F);
	leftHindLeg2.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(0.39073113F, 0.0F, 0.0F, 0.92050487F)).transpose());
	leftHindLeg2.setTextureSize(128, 64);
	parts.put(leftHindLeg2.boxName, leftHindLeg2);
	leftHindLeg1.addChild(leftHindLeg2);

	rightHindLeg2 = new MCAModelRenderer(this, "RightHindLeg2", 3, 44);
	rightHindLeg2.mirror = false;
	rightHindLeg2.addBox(-1.0F, -4.0F, -1.0F, 2, 4, 2);
	rightHindLeg2.setInitialRotationPoint(0.0F, -4.3F, 0.2F);
	rightHindLeg2.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(0.39073113F, 0.0F, 0.0F, 0.92050487F)).transpose());
	rightHindLeg2.setTextureSize(128, 64);
	parts.put(rightHindLeg2.boxName, rightHindLeg2);
	rightHindLeg1.addChild(rightHindLeg2);

	mane1 = new MCAModelRenderer(this, "Mane1", 43, 0);
	mane1.mirror = false;
	mane1.addBox(-3.0F, -3.0F, -4.0F, 6, 6, 7);
	mane1.setInitialRotationPoint(0.0F, 4.0F, 1.5F);
	mane1.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(0.043619387F, 0.0F, 0.0F, 0.99904823F)).transpose());
	mane1.setTextureSize(128, 64);
	parts.put(mane1.boxName, mane1);
	torso.addChild(mane1);

	tail1 = new MCAModelRenderer(this, "Tail1", 91, 0);
	tail1.mirror = false;
	tail1.addBox(-1.5F, -8.0F, -2.0F, 4, 8, 4);
	tail1.setInitialRotationPoint(-0.5F, -5.3F, 0.5F);
	tail1.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(-0.0784591F, 0.0F, 0.0F, 0.9969173F)).transpose());
	tail1.setTextureSize(128, 64);
	parts.put(tail1.boxName, tail1);
	torso.addChild(tail1);

	pad2 = new MCAModelRenderer(this, "Pad2", 110, 35);
	pad2.mirror = false;
	pad2.addBox(-3.0F, -1.0F, -2.0F, 6, 1, 2);
	pad2.setInitialRotationPoint(0.5F, 0.0F, 1.7F);
	pad2.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(0.008726535F, 0.0F, 0.0F, 0.9999619F)).transpose());
	pad2.setTextureSize(128, 64);
	parts.put(pad2.boxName, pad2);
	pad3.addChild(pad2);

	seat2 = new MCAModelRenderer(this, "Seat2", 100, 49);
	seat2.mirror = false;
	seat2.addBox(-2.0F, -1.0F, -1.0F, 4, 1, 1);
	seat2.setInitialRotationPoint(0.5F, 0.7F, -3.0F);
	seat2.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(0.0F, 0.0F, 0.0F, 1.0F)).transpose());
	seat2.setTextureSize(128, 64);
	parts.put(seat2.boxName, seat2);
	pad3.addChild(seat2);

	pad4 = new MCAModelRenderer(this, "Pad4", 110, 48);
	pad4.mirror = false;
	pad4.addBox(-1.5F, -1.0F, -1.0F, 3, 1, 1);
	pad4.setInitialRotationPoint(0.5F, 0.0F, -4.0F);
	pad4.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(-0.03252245F, 0.0F, 0.0F, 0.999471F)).transpose());
	pad4.setTextureSize(128, 64);
	parts.put(pad4.boxName, pad4);
	pad3.addChild(pad4);

	leftHindLeg3 = new MCAModelRenderer(this, "LeftHindLeg3", 0, 51);
	leftHindLeg3.mirror = false;
	leftHindLeg3.addBox(-1.0F, -4.0F, -1.0F, 2, 4, 2);
	leftHindLeg3.setInitialRotationPoint(0.0F, -3.5F, -0.2F);
	leftHindLeg3.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(-0.25038F, 0.0F, 0.0F, 0.96814764F)).transpose());
	leftHindLeg3.setTextureSize(128, 64);
	parts.put(leftHindLeg3.boxName, leftHindLeg3);
	leftHindLeg2.addChild(leftHindLeg3);

	rightHindLeg3 = new MCAModelRenderer(this, "RightHindLeg3", 9, 51);
	rightHindLeg3.mirror = false;
	rightHindLeg3.addBox(-1.0F, -4.0F, -1.0F, 2, 4, 2);
	rightHindLeg3.setInitialRotationPoint(0.0F, -3.5F, -0.2F);
	rightHindLeg3.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(-0.25038F, 0.0F, 0.0F, 0.96814764F)).transpose());
	rightHindLeg3.setTextureSize(128, 64);
	parts.put(rightHindLeg3.boxName, rightHindLeg3);
	rightHindLeg2.addChild(rightHindLeg3);

	mane2 = new MCAModelRenderer(this, "Mane2", 18, 0);
	mane2.mirror = false;
	mane2.addBox(-2.5F, 1.0F, -3.4F, 5, 6, 7);
	mane2.setInitialRotationPoint(-0.5F, 0.0F, 0.0F);
	mane2.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(-0.1478094F, 0.0F, 0.0F, 0.9890159F)).transpose());
	mane2.setTextureSize(128, 64);
	parts.put(mane2.boxName, mane2);
	mane1.addChild(mane2);

	tail2 = new MCAModelRenderer(this, "Tail2", 110, 0);
	tail2.mirror = false;
	tail2.addBox(-1.5F, -8.0F, -1.5F, 3, 8, 3);
	tail2.setInitialRotationPoint(0.5F, -6.299999F, 0.0F);
	tail2.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(-0.043619387F, 0.0F, 0.0F, 0.99904823F)).transpose());
	tail2.setTextureSize(128, 64);
	parts.put(tail2.boxName, tail2);
	tail1.addChild(tail2);

	pad1 = new MCAModelRenderer(this, "Pad1", 110, 32);
	pad1.mirror = false;
	pad1.addBox(-2.0F, -1.0F, -1.0F, 4, 1, 1);
	pad1.setInitialRotationPoint(0.0F, 0.0F, 1.0F);
	pad1.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(0.02617695F, 0.0F, 0.0F, 0.99965733F)).transpose());
	pad1.setTextureSize(128, 64);
	parts.put(pad1.boxName, pad1);
	pad2.addChild(pad1);

	seat1 = new MCAModelRenderer(this, "Seat1", 100, 45);
	seat1.mirror = false;
	seat1.addBox(-1.0F, -1.0F, -1.0F, 2, 1, 1);
	seat1.setInitialRotationPoint(0.0F, 0.5F, 0.0F);
	seat1.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(0.008726535F, 0.0F, 0.0F, 0.9999619F)).transpose());
	seat1.setTextureSize(128, 64);
	parts.put(seat1.boxName, seat1);
	pad2.addChild(seat1);

	rope1 = new MCAModelRenderer(this, "Rope1", 105, 32);
	rope1.mirror = false;
	rope1.addBox(0.0F, -4.0F, -0.5F, 1, 4, 1);
	rope1.setInitialRotationPoint(2.5F, -0.39999998F, -1.0F);
	rope1.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(0.02617695F, 0.0F, 0.0F, 0.99965733F)).transpose());
	rope1.setTextureSize(128, 64);
	parts.put(rope1.boxName, rope1);
	pad2.addChild(rope1);

	rope2 = new MCAModelRenderer(this, "Rope2", 105, 32);
	rope2.mirror = false;
	rope2.addBox(-1.0F, -4.0F, -0.5F, 1, 4, 1);
	rope2.setInitialRotationPoint(-2.5F, -0.4F, -1.0F);
	rope2.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(0.02617695F, 0.0F, 0.0F, 0.99965733F)).transpose());
	rope2.setTextureSize(128, 64);
	parts.put(rope2.boxName, rope2);
	pad2.addChild(rope2);

	neck = new MCAModelRenderer(this, "Neck", 0, 0);
	neck.mirror = false;
	neck.addBox(-2.0F, 0.0F, -2.0F, 4, 7, 4);
	neck.setInitialRotationPoint(0.0F, 6.0F, 0.0F);
	neck.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(-0.11320321F, 0.0F, 0.0F, 0.9935719F)).transpose());
	neck.setTextureSize(128, 64);
	parts.put(neck.boxName, neck);
	mane2.addChild(neck);

	tail3 = new MCAModelRenderer(this, "Tail3", 110, 13);
	tail3.mirror = false;
	tail3.addBox(-1.0F, -8.0F, -1.0F, 2, 8, 2);
	tail3.setInitialRotationPoint(0.0F, -7.0F, 0.0F);
	tail3.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(-0.008726535F, 0.0F, 0.0F, 0.9999619F)).transpose());
	tail3.setTextureSize(128, 64);
	parts.put(tail3.boxName, tail3);
	tail2.addChild(tail3);

	padPart1 = new MCAModelRenderer(this, "PadPart1", 110, 29);
	padPart1.mirror = false;
	padPart1.addBox(-0.5F, -1.0F, -1.0F, 1, 1, 1);
	padPart1.setInitialRotationPoint(1.5F, 0.0F, 1.0F);
	padPart1.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(-0.03252245F, 0.0F, 0.0F, 0.999471F)).transpose());
	padPart1.setTextureSize(128, 64);
	parts.put(padPart1.boxName, padPart1);
	pad1.addChild(padPart1);

	padPart2 = new MCAModelRenderer(this, "PadPart2", 110, 29);
	padPart2.mirror = false;
	padPart2.addBox(-0.5F, -1.0F, -1.0F, 1, 1, 1);
	padPart2.setInitialRotationPoint(-1.5F, 0.0F, 1.0F);
	padPart2.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(-0.03252245F, 0.0F, 0.0F, 0.999471F)).transpose());
	padPart2.setTextureSize(128, 64);
	parts.put(padPart2.boxName, padPart2);
	pad1.addChild(padPart2);

	metal1 = new MCAModelRenderer(this, "Metal1", 102, 39);
	metal1.mirror = false;
	metal1.addBox(0.0F, -1.0F, -1.0F, 1, 1, 2);
	metal1.setInitialRotationPoint(0.01F, -4.0F, 0.0F);
	metal1.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(0.0F, 0.0F, 0.0F, 1.0F)).transpose());
	metal1.setTextureSize(128, 64);
	parts.put(metal1.boxName, metal1);
	rope1.addChild(metal1);

	metal2 = new MCAModelRenderer(this, "Metal2", 102, 39);
	metal2.mirror = false;
	metal2.addBox(-1.0F, -1.0F, -1.0F, 1, 1, 2);
	metal2.setInitialRotationPoint(-0.01F, -4.0F, 0.0F);
	metal2.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(0.0F, 0.0F, 0.0F, 1.0F)).transpose());
	metal2.setTextureSize(128, 64);
	parts.put(metal2.boxName, metal2);
	rope2.addChild(metal2);

	head = new MCAModelRenderer(this, "Head", 25, 15);
	head.mirror = false;
	head.addBox(-2.5F, -3.0F, 0.0F, 6, 6, 5);
	head.setInitialRotationPoint(-0.5F, 6.0F, -0.5F);
	head.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(-0.5F, 0.0F, 0.0F, 0.8660254F)).transpose());
	head.setTextureSize(128, 64);
	parts.put(head.boxName, head);
	neck.addChild(head);

	nose = new MCAModelRenderer(this, "Nose", 25, 27);
	nose.mirror = false;
	nose.addBox(-1.5F, -3.0F, -1.0F, 3, 3, 4);
	nose.setInitialRotationPoint(0.5F, 0.0F, 5.0F);
	nose.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(0.0F, 0.0F, 0.0F, 1.0F)).transpose());
	nose.setTextureSize(128, 64);
	parts.put(nose.boxName, nose);
	head.addChild(nose);

	ear1 = new MCAModelRenderer(this, "Ear1", 40, 28);
	ear1.mirror = false;
	ear1.addBox(-1.0F, 0.0F, -1.0F, 2, 3, 1);
	ear1.setInitialRotationPoint(-1.5F, 3.0F, 1.0F);
	ear1.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(0.0F, 0.0F, 0.0F, 1.0F)).transpose());
	ear1.setTextureSize(128, 64);
	parts.put(ear1.boxName, ear1);
	head.addChild(ear1);

	ear2 = new MCAModelRenderer(this, "Ear2", 40, 28);
	ear2.mirror = false;
	ear2.addBox(-1.0F, 0.0F, -1.0F, 2, 3, 1);
	ear2.setInitialRotationPoint(2.5F, 3.0F, 1.0F);
	ear2.setInitialRotationMatrix(new Matrix4f().set(new Quaternion(0.0F, 0.0F, 0.0F, 1.0F)).transpose());
	ear2.setTextureSize(128, 64);
	parts.put(ear2.boxName, ear2);
	head.addChild(ear2);

}

@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();

	// Render every non-child part
	if (this.isChild) {
		float f6 = 2.0F;
		GL11.glPushMatrix();
		GL11.glScalef(1.0F / f6, 1.0F / f6, 1.0F / f6);
		GL11.glTranslatef(0.0F, 6.9F * par7, 0.0F);
		leftHindLeg1.render(par7);
		rightHindLeg1.render(par7);
		rightLeg.render(par7);
		leftLeg.render(par7);
		torso.render(par7);
		GL11.glPopMatrix();
	}
	else {
		GL11.glPushMatrix();
		GL11.glScalef(1.5F, 1.5F, 1.5F);
		GL11.glTranslatef(0.0F, 1.05F, 0.0F);
		leftHindLeg1.render(par7);
		rightHindLeg1.render(par7);
		rightLeg.render(par7);
		leftLeg.render(par7);
		torso.render(par7);
		if (flag) {
			pad3.render(par7);
		}
		GL11.glPopMatrix();
	}

	AnimationHandler.performAnimationInModel(parts, entityzertum);
}

@Override
public void setRotationAngles(float par1, float par2, float par3, float par4, float par5, float par6, Entity par7Entity) {}

public MCAModelRenderer getModelRendererFromName(String name) {
	return parts.get(name);
}
}

 

AnimationHandlerEntity

package net.novaviper.zeroquest.common.animations.zertum;

import java.util.HashMap;

import net.novaviper.zeroquest.common.mca.IMCAnimatedEntity;
import net.novaviper.zeroquest.common.mca.animation.AnimationHandler;
import net.novaviper.zeroquest.common.mca.animation.Channel;

public class AnimationHandlerZertum extends AnimationHandler {
/** Map with all the animations. */
public static HashMap<String, Channel> animChannels = new HashMap<String, Channel>();
static {
	animChannels.put("idle", new IdleZertum("idle", 5.0F, 10, Channel.LOOP));
	animChannels.put("walk", new WalkZertum("walk", 10.0F, 11, Channel.LOOP));
	animChannels.put("ridden", new RiddenZertum("ridden", 10.0F, 11, Channel.LOOP));
	animChannels.put("sit", new SitZertum("sit", 5.0F, 5, Channel.LINEAR));
	animChannels.put("standup", new StandupZertum("standup", 5.0F, 5, Channel.LINEAR));
	animChannels.put("dying", new DyingZertum("dying", 5.0F, 5, Channel.LINEAR));
	animChannels.put("dyingheal", new ReviveZertum("revive", 5.0F, 5, Channel.LINEAR));
	animChannels.put("begging", new ZertumBegging("begging", 5.0F, 5, Channel.LINEAR));
	animChannels.put("angry", new AngryZertum("angry", 5.0F, 5, Channel.LINEAR));
	animChannels.put("notangry", new NotAngryZertum("notangry", 5.0F, 5, Channel.LINEAR));
	animChannels.put("leap", new LeapZertum("leap", 5.0F, 10, Channel.LINEAR));
}

public AnimationHandlerZertum(IMCAnimatedEntity entity) {
	super(entity);
}

@Override
public void activateAnimation(String name, float startingFrame) {
	super.activateAnimation(animChannels, name, startingFrame);
}

@Override
public void stopAnimation(String name) {
	super.stopAnimation(animChannels, name);
}

@Override
public void fireAnimationEventClientSide(Channel anim, float prevFrame, float frame) {}

@Override
public void fireAnimationEventServerSide(Channel anim, float prevFrame, float frame) {}
}

 

Angry Animation

package net.novaviper.zeroquest.common.animations.zertum;

import net.novaviper.zeroquest.common.mca.animation.Channel;
import net.novaviper.zeroquest.common.mca.animation.KeyFrame;
import net.novaviper.zeroquest.common.mca.math.Quaternion;
import net.novaviper.zeroquest.common.mca.math.Vector3f;

public class AngryZertum extends Channel {
public AngryZertum(String _name, float _fps, int _totalFrames, byte _mode) {
	super(_name, _fps, _totalFrames, _mode);
}

@Override
protected void initializeAllFrames() {
	KeyFrame frame0 = new KeyFrame();
	frame0.modelRenderersRotations.put("Tail2", new Quaternion(-0.043619387F, 0.0F, 0.0F, 0.99904823F));
	frame0.modelRenderersRotations.put("Mane2", new Quaternion(-0.1478094F, 0.0F, 0.0F, 0.9890159F));
	frame0.modelRenderersRotations.put("Mane1", new Quaternion(0.043619387F, 0.0F, 0.0F, 0.99904823F));
	frame0.modelRenderersRotations.put("Tail3", new Quaternion(-0.008726535F, 0.0F, 0.0F, 0.9999619F));
	frame0.modelRenderersRotations.put("Head", new Quaternion(-0.5F, 0.0F, 0.0F, 0.8660254F));
	frame0.modelRenderersRotations.put("Ear1", new Quaternion(0.0F, 0.0F, 0.0F, 1.0F));
	frame0.modelRenderersRotations.put("Neck", new Quaternion(-0.11320321F, 0.0F, 0.0F, 0.9935719F));
	frame0.modelRenderersRotations.put("Tail1", new Quaternion(-0.0784591F, 0.0F, 0.0F, 0.9969173F));
	frame0.modelRenderersRotations.put("Ear2", new Quaternion(0.0F, 0.0F, 0.0F, 1.0F));
	frame0.modelRenderersTranslations.put("Tail2", new Vector3f(0.5F, -6.299999F, 0.0F));
	frame0.modelRenderersTranslations.put("Mane2", new Vector3f(-0.5F, 0.0F, 0.0F));
	frame0.modelRenderersTranslations.put("Mane1", new Vector3f(0.0F, 4.0F, 1.5F));
	frame0.modelRenderersTranslations.put("Tail3", new Vector3f(0.0F, -7.0F, 0.0F));
	frame0.modelRenderersTranslations.put("Head", new Vector3f(-0.5F, 6.0F, -0.5F));
	frame0.modelRenderersTranslations.put("Ear1", new Vector3f(-1.5F, 3.0F, 1.0F));
	frame0.modelRenderersTranslations.put("Neck", new Vector3f(0.0F, 6.0F, 0.0F));
	frame0.modelRenderersTranslations.put("Tail1", new Vector3f(-0.5F, -5.3F, 0.5F));
	frame0.modelRenderersTranslations.put("Ear2", new Vector3f(2.5F, 3.0F, 1.0F));
	keyFrames.put(0, frame0);

	KeyFrame frame4 = new KeyFrame();
	frame4.modelRenderersRotations.put("Tail2", new Quaternion(0.084547415F, 0.0F, 0.0F, 0.9964194F));
	frame4.modelRenderersRotations.put("Mane2", new Quaternion(-0.050592944F, 0.0F, 0.0F, 0.99871933F));
	frame4.modelRenderersRotations.put("Mane1", new Quaternion(0.050592944F, 0.0F, 0.0F, 0.99871933F));
	frame4.modelRenderersRotations.put("Tail3", new Quaternion(0.1010563F, 0.0F, 0.0F, 0.99488074F));
	frame4.modelRenderersRotations.put("Head", new Quaternion(-0.63876784F, 0.0F, 0.0F, 0.7693996F));
	frame4.modelRenderersRotations.put("Ear1", new Quaternion(-0.3632512F, 0.0F, 0.0F, 0.9316912F));
	frame4.modelRenderersRotations.put("Neck", new Quaternion(-0.084547415F, 0.0F, 0.0F, 0.9964194F));
	frame4.modelRenderersRotations.put("Tail1", new Quaternion(0.13485092F, 0.0F, 0.0F, 0.9908659F));
	frame4.modelRenderersRotations.put("Ear2", new Quaternion(-0.3632512F, 0.0F, 0.0F, 0.9316912F));
	frame4.modelRenderersTranslations.put("Tail2", new Vector3f(0.5F, -6.299999F, 0.0F));
	frame4.modelRenderersTranslations.put("Mane2", new Vector3f(-0.5F, 0.0F, 0.0F));
	frame4.modelRenderersTranslations.put("Mane1", new Vector3f(0.0F, 4.0F, 1.5F));
	frame4.modelRenderersTranslations.put("Tail3", new Vector3f(0.0F, -7.0F, 0.0F));
	frame4.modelRenderersTranslations.put("Head", new Vector3f(-0.5F, 6.0F, -0.5F));
	frame4.modelRenderersTranslations.put("Ear1", new Vector3f(-1.5F, 3.0F, 1.0F));
	frame4.modelRenderersTranslations.put("Neck", new Vector3f(0.0F, 6.0F, 0.0F));
	frame4.modelRenderersTranslations.put("Tail1", new Vector3f(-0.5F, -5.3F, 0.5F));
	frame4.modelRenderersTranslations.put("Ear2", new Vector3f(2.5F, 3.0F, 1.0F));
	keyFrames.put(4, frame4);

}
}

 

EntityClass

package net.novaviper.zeroquest.common.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.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.PotionEffect;
import net.minecraft.util.BlockPos;
import net.minecraft.util.DamageSource;
import net.minecraft.util.EnumChatFormatting;
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 net.novaviper.zeroquest.ModAchievements;
import net.novaviper.zeroquest.ModItems;
import net.novaviper.zeroquest.client.model.ModelZertumStage2;
import net.novaviper.zeroquest.client.model.ModelZertumStage3;
import net.novaviper.zeroquest.common.animations.zertum.AnimationHandlerZertum;
import net.novaviper.zeroquest.common.api.ZeroQuestAPI;
import net.novaviper.zeroquest.common.container.InventoryPack;
import net.novaviper.zeroquest.common.entity.ai.EntityAIBeg;
import net.novaviper.zeroquest.common.entity.ai.EntityAIFetchToy;
import net.novaviper.zeroquest.common.entity.ai.EntityAIFollowOwner;
import net.novaviper.zeroquest.common.entity.ai.EntityAIModeAttackTarget;
import net.novaviper.zeroquest.common.entity.ai.EntityAIOwnerHurtByTarget;
import net.novaviper.zeroquest.common.entity.ai.EntityAIOwnerHurtTarget;
import net.novaviper.zeroquest.common.entity.ai.EntityAIRoundUp;
import net.novaviper.zeroquest.common.entity.creature.EntityDarkZertum;
import net.novaviper.zeroquest.common.entity.creature.EntityDestroZertum;
import net.novaviper.zeroquest.common.entity.creature.EntityForisZertum;
import net.novaviper.zeroquest.common.entity.creature.EntityIceZertum;
import net.novaviper.zeroquest.common.entity.creature.EntityMetalZertum;
import net.novaviper.zeroquest.common.entity.creature.EntityRedZertum;
import net.novaviper.zeroquest.common.entity.creature.EntityZertum;
import net.novaviper.zeroquest.common.entity.util.LevelUtil;
import net.novaviper.zeroquest.common.entity.util.ModeUtil;
import net.novaviper.zeroquest.common.entity.util.ModeUtil.EnumMode;
import net.novaviper.zeroquest.common.entity.util.TalentHelper;
import net.novaviper.zeroquest.common.entity.util.TalentUtil;
import net.novaviper.zeroquest.common.helper.ChatHelper;
import net.novaviper.zeroquest.common.lib.Constants;
import net.novaviper.zeroquest.common.lib.DataValues;
import net.novaviper.zeroquest.common.lib.Sound;
import net.novaviper.zeroquest.common.mca.IMCAnimatedEntity;
import net.novaviper.zeroquest.common.mca.animation.AnimationHandler;

public abstract class EntityZertumEntity extends EntityCustomTameable implements IMCAnimatedEntity {

protected AnimationHandler animHandler = new AnimationHandlerZertum(this);
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 EntityAIFetchToy aiFetchBone;

private float timeDogBegging;
private float prevTimeDogBegging;
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 Map<String, Object> objects;
private boolean hasToy;
private float timeWolfIsHappy;
private float prevTimeWolfIsHappy;
private boolean isWolfHappy;
public boolean hiyaMaster;
private float mouthOpenness;
private float prevMouthOpenness;
private int openMouthCounter;

public EntityZertumEntity(World worldIn) {
	super(worldIn);
	this.objects = new HashMap<String, Object>();
	((PathNavigateGround) this.getNavigator()).setAvoidsWater(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 EntityAIFetchToy(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 EntityAIBeg(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.setFinalStage(false);
	this.inventory = new InventoryPack(this);
	this.targetTasks.addTask(6, new EntityAIRoundUp(this, EntityAnimal.class, 0, false));
	TalentHelper.onClassCreation(this);

	if (!this.hasEvolved() && !this.inFinalStage()) {
		this.setSize(0.6F, 1.5F);
	}
	else if (this.hasEvolved() && this.inFinalStage()) {
		this.setSize(2F, 3F);
	}
}

@Override
public void applyEntityAttributes() {
	super.applyEntityAttributes();
	this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.30000001192092896);
	this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(this.wildHealth());
	this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(this.wildDamage());
	this.updateEntityAttributes();
}

public void updateEntityAttributes() {
	if (this.isTamed()) {
		if (!this.isChild() && !this.hasEvolved() && !this.inFinalStage()) {
			this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(this.tamedHealth() + this.effectiveLevel());
			this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(this.tamedDamage());
		}
		else if (!this.isChild() && this.hasEvolved() && !this.inFinalStage()) {
			this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(this.evoHealth() + this.effectiveLevel());
			this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(this.tamedDamage());
		}
		else if (!this.isChild() && this.hasEvolved() && this.inFinalStage()) {
			this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(this.finalEvoHealth() + this.effectiveLevel());
			this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(this.finalEvoDamage());
		}
		else {
			this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(this.babyHealth());
			this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(this.babyDamage());
		}
	}
	else {
		if (this.isChild()) {
			this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(this.babyHealth());
			this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(this.babyDamage());
		}
	}
}

@Override
public void setTamed(boolean p_70903_1_) {
	super.setTamed(p_70903_1_);
	this.updateEntityAttributes();
}

public double tamedHealth() {
	if (this instanceof EntityZertum || this instanceof EntityRedZertum) {
		return 35;
	}
	else if (this instanceof EntityMetalZertum || this instanceof EntityIceZertum || this instanceof EntityForisZertum || this instanceof EntityDestroZertum || this instanceof EntityDarkZertum) {
		return 40;
	}
	return 0;
}

public double tamedDamage() {
	if (this instanceof EntityZertum || this instanceof EntityRedZertum || this instanceof EntityMetalZertum || this instanceof EntityIceZertum || this instanceof EntityForisZertum) {
		return 8;
	}
	else if (this instanceof EntityDestroZertum) {
		return 10;
	}
	else if (this instanceof EntityDarkZertum) {
		return 12;
	}
	return 0;
}

public double evoHealth() {
	if (this instanceof EntityZertum || this instanceof EntityRedZertum || this instanceof EntityIceZertum) {
		return 45;
	}
	else if (this instanceof EntityMetalZertum || this instanceof EntityForisZertum || this instanceof EntityDestroZertum) {
		return 50;
	}
	else if (this instanceof EntityDarkZertum) {
		return 60;
	}
	return 0;
}

public double finalEvoHealth() {
	if (this instanceof EntityZertum || this instanceof EntityRedZertum || this instanceof EntityIceZertum) {
		return 55;
	}
	else if (this instanceof EntityMetalZertum || this instanceof EntityForisZertum || this instanceof EntityDestroZertum) {
		return 60;
	}
	else if (this instanceof EntityDarkZertum) {
		return 70;
	}
	return 0;
}

public double finalEvoDamage() {
	if (this instanceof EntityZertum || this instanceof EntityRedZertum || this instanceof EntityMetalZertum || this instanceof EntityIceZertum || this instanceof EntityForisZertum) {
		return 12;
	}
	else if (this instanceof EntityDestroZertum) {
		return 18;
	}
	else if (this instanceof EntityDarkZertum) {
		return 22;
	}
	return 0;
}

public double wildHealth() {
	if (this instanceof EntityZertum || this instanceof EntityRedZertum || this instanceof EntityForisZertum) {
		return 25;
	}
	else if (this instanceof EntityMetalZertum || this instanceof EntityDestroZertum || this instanceof EntityDarkZertum) {
		return 30;
	}
	else if (this instanceof EntityIceZertum) {
		return 35;
	}
	return 0;
}

public double wildDamage() {
	if (this instanceof EntityZertum || this instanceof EntityRedZertum || this instanceof EntityMetalZertum || this instanceof EntityIceZertum || this instanceof EntityForisZertum) {
		return 6;
	}
	else if (this instanceof EntityDestroZertum) {
		return 8;
	}
	else if (this instanceof EntityDarkZertum) {
		return 10;
	}
	return 0;
}

public double babyHealth() {
	return 11;
}

public double babyDamage() {
	if (this instanceof EntityZertum || this instanceof EntityRedZertum || this instanceof EntityMetalZertum) {
		return 2;
	}
	else if (this instanceof EntityIceZertum || this instanceof EntityForisZertum || this instanceof EntityDarkZertum) {
		return 4;
	}
	else if (this instanceof EntityDestroZertum) {
		return 3;
	}
	return 0;
}

/**
 * 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 getCommandSenderName() {
	String name = this.getPetName();
	if (name != "" && this.isTamed()) {
		return name;
	}
	else {
		return super.getCommandSenderName();
	}
}

@Override
@SideOnly(Side.CLIENT)
public boolean getAlwaysRenderNameTagForRender() {
	return true;
}

//@formatter:off
@Override
protected void entityInit() {
	super.entityInit();
	this.talents = new TalentUtil(this);
	this.levels = new LevelUtil(this);
	this.mode = new ModeUtil(this);
	this.dataWatcher.addObject(DataValues.ownerName, new String("")); //Owner Name
	this.dataWatcher.addObject(DataValues.ownerID, new String("")); //Owner Id
	this.dataWatcher.addObject(DataValues.collarCollar, new Byte((byte) EnumDyeColor.RED.getMetadata())); //Collar
	this.dataWatcher.addObject(DataValues.dogName, new String("")); //Dog Name
	this.dataWatcher.addObject(DataValues.talentData, new String("")); //Talent Data
	this.dataWatcher.addObject(DataValues.hungerTicks, new Integer(Constants.hungerTicks)); //Dog Hunger
	this.dataWatcher.addObject(DataValues.levelData, new String("0:0")); //Level Data
	this.dataWatcher.addObject(DataValues.evolve, Byte.valueOf((byte)0)); //Evolution
	this.dataWatcher.addObject(DataValues.obeyOthers, new Integer(0)); //Obey Others
	this.dataWatcher.addObject(DataValues.zertumMode, new Integer(0)); //Zertum Mode
	this.dataWatcher.addObject(DataValues.mouth, Integer.valueOf(0)); //Mouth
	this.dataWatcher.addObject(DataValues.beg, new Byte((byte) 0)); //Begging
}
//@formatter:on
@Override
public AnimationHandler getAnimationHandler() {
	return animHandler;
}

@Override
public void writeEntityToNBT(NBTTagCompound tagCompound) {
	super.writeEntityToNBT(tagCompound);
	tagCompound.setString("ownerId", this.getOwnerID());
	tagCompound.setString("ownerName", this.getOwnerName());
	tagCompound.setByte("collarColor", (byte) this.getCollarColor().getDyeDamage());
	tagCompound.setBoolean("evolve", this.hasEvolved());
	tagCompound.setBoolean("finalEvolve", this.inFinalStage());
	tagCompound.setString("version", Constants.version);
	tagCompound.setString("dogName", this.getPetName());
	tagCompound.setInteger("dogHunger", this.getZertumHunger());
	tagCompound.setBoolean("willObey", this.willObeyOthers());
	tagCompound.setBoolean("dogBeg", this.isBegging());

	this.talents.writeTalentsToNBT(tagCompound);
	this.levels.writeTalentsToNBT(tagCompound);
	this.mode.writeToNBT(tagCompound);
	TalentHelper.writeToNBT(this, tagCompound);
}

@Override
public void readEntityFromNBT(NBTTagCompound tagCompound) {
	super.readEntityFromNBT(tagCompound);
	this.saveOwnerName(tagCompound.getString("ownerName"));
	this.saveOwnerID(tagCompound.getString("ownerId"));
	this.setEvolved(tagCompound.getBoolean("evolve"));
	this.setFinalStage(tagCompound.getBoolean("finalEvolve"));

	if (tagCompound.hasKey("collarColor", 99)) {
		this.setCollarColor(EnumDyeColor.byDyeDamage(tagCompound.getByte("collarColor")));
	}

	String lastVersion = tagCompound.getString("version");
	this.setPetName(tagCompound.getString("dogName"));
	this.setZertumHunger(tagCompound.getInteger("dogHunger"));
	this.setWillObeyOthers(tagCompound.getBoolean("willObey"));
	this.setBegging(tagCompound.getBoolean("dogBeg"));
	this.talents.readTalentsFromNBT(tagCompound);
	this.levels.readTalentsFromNBT(tagCompound);
	this.mode.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;
	}

	// if(!this.inFinalStage()){
	return this.isAngry() ? "mob.wolf.growl" : this.wantToHowl ? Sound.ZertumHowl
			: (this.rand.nextInt(3) == 0
			? (this.isTamed() && this.getHealth() <= Constants.lowHP ? "mob.wolf.whine"
					: "mob.wolf.panting") : "mob.wolf.bark");
	/* }else{ return Sound.; } */
}

/**
 * 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 1F;
}

/**
 * Gets the pitch of living sounds in living entities.
 */
@Override
public float getPitch() {
	if (!this.isChild()) {
		return super.getSoundPitch();
	}
	else {
		return super.getSoundPitch() * 1;
	}
}

/**
 * Get number of ticks, at least during which the living entity will be
 * silent.
 */
@Override
public int getTalkInterval() {
	int ticks = TalentHelper.getTalkInterval(this);
	if (ticks != 0) {
		return ticks;
	}
	else if (this.wantToHowl) {
		return 150;
	}
	else if (this.getHealth() <= Constants.lowHP) {
		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 instanceof EntityDarkZertum)) {
			this.dropItem(ModItems.nileGrain, 1);
		}
		if (rare <= 6 && !this.isTamed() && (this instanceof EntityDarkZertum)) {
			this.dropItem(ModItems.darkGrain, 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() // NAV: Living Updates
{
	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.DEF_IS_HUNGER_ON) {
		this.prevHungerTick = this.hungerTick;

		if (this.riddenByEntity == null && !this.isSitting()) {
			this.hungerTick += 1;
		}

		this.hungerTick += TalentHelper.onHungerTick(this, this.hungerTick - this.prevHungerTick);

		if (this.hungerTick > 400) {
			this.setZertumHunger(this.getZertumHunger() - 1);
			this.hungerTick -= 400;
		}
	}

	if (this.getHealth() != Constants.lowHP) {
		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.getZertumHunger() == 0 && this.worldObj.getWorldInfo().getWorldTime() % 100L == 0L && this.getHealth() > Constants.lowHP) {
		this.attackEntityFrom(DamageSource.generic, 1);
	}

	if (isServer() && (this.getAttackTarget() == null || this.getAttackTarget().isDead) && this.isAngry()) {
		this.setAngry(false);
	}

	if (this.isAngry()) {
		this.getAnimationHandler().activateAnimation("angry", 0);
	}

	if (this.getHealth() <= Constants.lowHP && !this.getAnimationHandler().isAnimationActive("dying")) {
		this.getAnimationHandler().activateAnimation("dying", 0);
	}
	else if (this.getHealth() == 11 && !this.getAnimationHandler().isAnimationActive("dyingheal")) {
		this.getAnimationHandler().activateAnimation("dyingheal", 0);
	}

	if (Constants.DEF_HOWL == true) {
		if (this.isServer()) {
			if (this.worldObj.isDaytime() && this.isChild()) {
				wantToHowl = false;
			}
			else if (!this.isChild()) {
				wantToHowl = true;
			}
		}
	}
	TalentHelper.onLivingUpdate(this);
}

/**
 * Called to update the entity's position/logic.
 */
@Override
public void onUpdate() {
	super.onUpdate();
	this.prevTimeDogBegging = this.timeDogBegging;

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

	if (this.openMouthCounter > 0 && ++this.openMouthCounter > 30) {
		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.isBegging()) {
		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("flamingelemental") * 2 && this instanceof EntityRedZertum) {
					if (isServer()) {
						dropItem(Items.cooked_fish, 1);
					}
				}
				else {
					if (isServer()) {
						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 + f1, f + 0.8F, this.posZ + f2, this.motionX, this.motionY, this.motionZ, new int[0]);
			}
		}
	}

	if (this.rand.nextInt(200) == 0 && this.hasEvolved()) {
		this.hiyaMaster = true;
	}

	if (((this.isBegging()) || (this.hiyaMaster)) && (!this.isWolfHappy) && this.hasEvolved()) {
		this.isWolfHappy = true;
		this.timeWolfIsHappy = 0.0F;
		this.prevTimeWolfIsHappy = 0.0F;
	}
	else {
		hiyaMaster = false;
	}
	if (this.isWolfHappy) {
		if (this.timeWolfIsHappy % 1.0F == 0.0F) {
			if (!(this instanceof EntityMetalZertum)) {
				this.openMouth();

				this.worldObj.playSoundAtEntity(this, "mob.wolf.panting", this.getSoundVolume(), (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F);
			}
			else if (this instanceof EntityMetalZertum) {
				this.openMouth();
				this.worldObj.playSoundAtEntity(this, Sound.MetalZertumPant, this.getSoundVolume(), (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F);
			}
		}
		this.prevTimeWolfIsHappy = this.timeWolfIsHappy;
		this.timeWolfIsHappy += 0.05F;
		if (this.prevTimeWolfIsHappy >= 8.0F) {
			this.isWolfHappy = false;
			this.prevTimeWolfIsHappy = 0.0F;
			this.timeWolfIsHappy = 0.0F;
		}
	}

	if (this.isTamed()) {
		EntityPlayer player = (EntityPlayer) this.getOwner();

		if (player != null) {
			float distanceToOwner = player.getDistanceToEntity(this);

			if (distanceToOwner <= 2F && this.hasToy()) {
				if (isServer()) {
					this.entityDropItem(new ItemStack(ModItems.toy, 1, 1), 0.0F);
				}
				this.setHasToy(false);
			}
		}
	}

	TalentHelper.onUpdate(this);
}

public float getWagAngle(float f, float f1) {
	float f2 = (this.prevTimeWolfIsHappy + (this.timeWolfIsHappy - this.prevTimeWolfIsHappy) * f + f1) / 2.0F;
	if (f2 < 0.0F) {
		f2 = 0.0F;
	}
	else if (f2 > 2.0F) {
		f2 %= 2.0F;
	}
	return MathHelper.sin(f2 * (float) Math.PI * 5.0F) * 0.3F * (float) Math.PI;
}

@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 += -0.4F * f2 * 0.15F; // May change
				this.motionZ += 0.4F * f3 * 0.15F;
			}
		}

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

		if (isServer()) {
			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() == Constants.stage2Level && this.hasEvolved()) {
			speed += 0.3D;
		}
		else if (this.hasEvolved() && this.levels.getLevel() != Constants.stage2Level) {
			speed += 0.3D;
		}
	}

	if (this.riddenByEntity instanceof EntityPlayer) {
		speed /= 4;
	}

	return (float) speed;
}

public float getAIAttackDamage() {
	double damage = this.getEntityAttribute(SharedMonsterAttributes.attackDamage).getAttributeValue();
	damage += TalentHelper.addToAttackDamage(this);

	if ((!(this.getAttackTarget() instanceof EntityZertumEntity) && !(this.getAttackTarget() instanceof EntityPlayer))) {
		if (this.levels.getLevel() == Constants.stage2Level && this.hasEvolved() && !this.inFinalStage()) {
			damage += 1.0D;
		}
		else if (this.levels.getLevel() == Constants.maxLevel && this.hasEvolved() && this.inFinalStage()) {
			damage += 3.0D;
		}
	}
	return (float) damage;
}

@Override
public void fall(float distance, float damageMultiplier) {
	if (distance > 1.0F) {
		if (!this.inFinalStage()) {
			this.playSound("game.neutral.hurt.fall.small", 0.4F, 1.0F);
		}
		else {
			this.playSound(Sound.Land, 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.inFinalStage()) {
		this.attackEntityFrom(DamageSource.fall, i);

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

		Block block = this.worldObj.getBlockState(new BlockPos(this.posX, this.posY - 0.2D - 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);
		}
	}
	else if (i > 3 && !TalentHelper.isImmuneToFalls(this) && this.inFinalStage()) {
		this.attackEntityFrom(DamageSource.fall, i);

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

		Block block = this.worldObj.getBlockState(new BlockPos(this.posX, this.posY - 0.2D - 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 partialTickTime) {
	return (this.prevTimeDogBegging + (this.timeDogBegging - this.prevTimeDogBegging) * partialTickTime) * 0.15F * (float) Math.PI;
}

@Override
public float getEyeHeight() { // NAV
	return this.height;
}

@Override
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.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), damage);
}

/**
 * Called when the mob's health reaches 0.
 */
@Override
public void onDeath(DamageSource par1DamageSource) {
	super.onDeath(par1DamageSource);

	if (par1DamageSource.getEntity() instanceof EntityPlayer) {
		EntityPlayer entityplayer = (EntityPlayer) par1DamageSource.getEntity();
		{
			entityplayer.triggerAchievement(ModAchievements.ZertKill);
			this.dropChestItems();

		}
	}
}

@Override
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() <= Constants.lowHP) {
		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() { // NAV: Master Order
	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;
		}

		if (itemstack != null && itemstack.getItem() == Items.bone) {
			order = 4;
		}
	}

	return order;
}

@Override
public boolean canBreatheUnderwater() {
	return TalentHelper.canBreatheUnderwater(this);
}

@Override
public boolean canInteract(EntityPlayer player) {
	return this.isOwner(player) || this.willObeyOthers();
}

public int nourishment() {
	int amount = 0;

	if (this.getZertumHunger() > 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()) / 10;
}

public String getPetName() {
	return this.dataWatcher.getWatchableObjectString(DataValues.dogName);
}

public void setPetName(String var1) {
	this.dataWatcher.updateObject(DataValues.dogName, var1);
}

public void setWillObeyOthers(boolean flag) {
	this.dataWatcher.updateObject(DataValues.obeyOthers, flag ? 1 : 0);
}

public boolean willObeyOthers() {
	return this.dataWatcher.getWatchableObjectInt(DataValues.obeyOthers) != 0;
}

public int points() {
	return this.levels.getLevel() + (this.getGrowingAge() < 0 ? 0 : Constants.startingPoints);
}

public int spendablePoints() {
	return this.points() - this.usedPoints();
}

public int usedPoints() {
	return TalentHelper.getUsedPoints(this);
}

public int getZertumHunger() {
	return this.dataWatcher.getWatchableObjectInt(DataValues.hungerTicks);
}

public void setZertumHunger(int par1) {
	this.dataWatcher.updateObject(DataValues.hungerTicks, MathHelper.clamp_int(par1, 0, Constants.hungerTicks));
}

@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 entityZertum = (EntityZertumEntity) entityToAttack;

			if (entityZertum.isTamed() && entityZertum.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 setHasToy(boolean hasToy) {
	this.hasToy = hasToy;
}

public boolean hasToy() {
	return this.hasToy;
}

@Override
@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)
 */
@Override
public boolean isBreedingItem(ItemStack stack) {
	return stack != null && ZeroQuestAPI.breedList.containsItem(stack);
}

@Override
public int getMaxSpawnedInChunk() {
	return 8;
}

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

public void setCollarColor(EnumDyeColor collarcolor) {
	this.dataWatcher.updateObject(DataValues.collarCollar, Byte.valueOf((byte) (collarcolor.getDyeDamage() & 15)));
}

private boolean getHorseWatchableBoolean(int p_110233_1_) {
	return (this.dataWatcher.getWatchableObjectInt(DataValues.mouth) & p_110233_1_) != 0;
}

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

	if (p_110208_2_) {
		this.dataWatcher.updateObject(DataValues.mouth, Integer.valueOf(j | p_110208_1_));
	}
	else {
		this.dataWatcher.updateObject(DataValues.mouth, Integer.valueOf(j & ~p_110208_1_));
	}
}

@SideOnly(Side.CLIENT)
public float getMouthOpennessAngle(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);
	}
}

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

@Override
public boolean allowLeashing() {
	return !this.isAngry() && super.allowLeashing();
}

public void setBegging(boolean flag) {
	this.dataWatcher.updateObject(DataValues.beg, Byte.valueOf((byte) (flag ? 1 : 0)));
}

public boolean isBegging() {
	return this.dataWatcher.getWatchableObjectByte(DataValues.beg) == 1;
}

public boolean hasEvolved() {
	return (this.dataWatcher.getWatchableObjectByte(DataValues.evolve) & 4) != 0;
}

public void setEvolved(boolean evolved) {
	byte b0 = this.dataWatcher.getWatchableObjectByte(DataValues.evolve);

	if (evolved) {
		this.dataWatcher.updateObject(DataValues.evolve, Byte.valueOf((byte) (b0 | 4)));
	}
	else {
		this.dataWatcher.updateObject(DataValues.evolve, Byte.valueOf((byte) (b0 & -5)));
	}
	this.updateEntityAttributes();
}

public boolean inFinalStage() {
	return (this.dataWatcher.getWatchableObjectByte(DataValues.evolve) & 2) != 0;
}

public void setFinalStage(boolean finalStage) {
	byte b0 = this.dataWatcher.getWatchableObjectByte(DataValues.evolve);

	if (finalStage) {
		this.dataWatcher.updateObject(DataValues.evolve, Byte.valueOf((byte) (b0 | 2)));
	}
	else {
		this.dataWatcher.updateObject(DataValues.evolve, Byte.valueOf((byte) (b0 & -3)));
	}
	this.updateEntityAttributes();
}

public String getOwnerName() {
	return this.dataWatcher.getWatchableObjectString(DataValues.ownerName);
}

public void saveOwnerName(String name) {
	this.dataWatcher.updateObject(DataValues.ownerName, name);
}

public String getOwnerID() {
	return this.dataWatcher.getWatchableObjectString(DataValues.ownerID);
}

public void saveOwnerID(String id) {
	this.dataWatcher.updateObject(DataValues.ownerID, id);
}

/** Custom Zertum Taming Code */
@Override
public void tamedFor(EntityPlayer player, boolean successful) {
	if (successful) {
		this.setTamed(true);
		this.updateEntityAttributes();
		this.navigator.clearPathEntity();
		this.setAttackTarget((EntityLivingBase) null);
		this.aiSit.setSitting(false);
		this.setOwnerId(player.getUniqueID().toString());
		this.playTameEffect(true);
		this.worldObj.setEntityState(this, (byte) 7);
		this.saveOwnerName(player.getDisplayNameString());
		this.saveOwnerID(player.getUniqueID().toString());
		player.triggerAchievement(ModAchievements.ZertTame);
		//@formatter:off
		//System.out.println("ID: " + zertum.getOwnerID() + ", Name: " + zertum.getOwnerName());
		//@formatter:on
	}
	else {
		this.playTameEffect(false);
		this.worldObj.setEntityState(this, (byte) 6);
	}
}

public void unTame() {
	this.setTamed(false);
	this.setEvolved(false);
	this.setFinalStage(false);
	this.navigator.clearPathEntity();
	this.setSitting(false);
	this.talents.resetTalents();
	this.levels.resetLevel();
	this.setOwnerId("");
	this.saveOwnerName("");
	this.saveOwnerID("");
	this.setPetName("");
	this.setWillObeyOthers(false);
	this.mode.setMode(EnumMode.DOCILE);
	this.updateEntityAttributes();
}

public void evolveOnClient(EntityPlayer player) {
	this.setEvolved(true);
	this.worldObj.playBroadcastSound(1013, new BlockPos(this), 0);
	this.updateEntityAttributes();
	this.setHealth(this.getMaxHealth());
	player.addChatMessage(ChatHelper.getChatComponent(EnumChatFormatting.GREEN + this.getPetName() + " has been evolved!"));
}

public void evolveOnServer(EntityZertumEntity entity, EntityPlayer player) {
	entity.setEvolved(true);
	entity.worldObj.playBroadcastSound(1013, new BlockPos(entity), 0);
	this.updateEntityAttributes();
	entity.setHealth(entity.getMaxHealth());
	player.addChatMessage(ChatHelper.getChatComponent(EnumChatFormatting.GREEN + entity.getPetName() + " has been evolved!"));
}

public void finaEvolveOnClient(EntityPlayer player) {
	this.setFinalStage(true);
	this.worldObj.playBroadcastSound(1013, new BlockPos(this), 0);
	this.updateEntityAttributes();
	this.setHealth(this.getMaxHealth());
	player.addChatMessage(ChatHelper.getChatComponent(EnumChatFormatting.GREEN + this.getPetName() + " has been evolved to the final stage!"));
}

public void finaEvolveOnServer(EntityZertumEntity entity, EntityPlayer player) {
	entity.setFinalStage(true);
	entity.worldObj.playBroadcastSound(1013, new BlockPos(entity), 0);
	this.updateEntityAttributes();
	entity.setHealth(entity.getMaxHealth());
	player.addChatMessage(ChatHelper.getChatComponent(EnumChatFormatting.GREEN + entity.getPetName() + " has been evolved to the final stage!"));
}

public void devolveOnServer(EntityZertumEntity entity, EntityPlayer player) {
	if (entity.hasEvolved() && !entity.inFinalStage()) {
		entity.setEvolved(false);
	}
	else if (entity.hasEvolved() && entity.inFinalStage()) {
		entity.setFinalStage(false);
	}
	entity.worldObj.playBroadcastSound(1013, new BlockPos(entity), 0);
	this.updateEntityAttributes();
	entity.setHealth(entity.getMaxHealth());
	player.addChatMessage(ChatHelper.getChatComponent(EnumChatFormatting.DARK_RED + entity.getPetName() + " has been devolved!"));
}

public String genderPronoun() {
	if (this.getGender() == true) {
		return "him";
	}
	else {
		return "her";
	}
}

public String genderSubject() {
	if (this.getGender() == true) {
		return "he";
	}
	else {
		return "she";
	}
}

public void doNotOwnMessage(EntityZertumEntity zertum, EntityPlayer player) {
	player.addChatMessage(ChatHelper.getChatComponent(EnumChatFormatting.RED + "You do not own " + zertum.getPetName() + " and " + zertum.getOwnerName() + " doesn't allow " + zertum.genderPronoun() + EnumChatFormatting.RED + " to" + EnumChatFormatting.RED + " obey" + EnumChatFormatting.RED + "non-owners!"));
}
}

 

Renderer

package net.novaviper.zeroquest.client.render.entity.zertum;

import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.WorldRenderer;
import net.minecraft.client.renderer.entity.RenderLiving;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import net.novaviper.zeroquest.client.model.ModelZertumStage2;
import net.novaviper.zeroquest.client.model.ModelZertumStage3;
import net.novaviper.zeroquest.client.render.entity.layers.LayersZertum;
import net.novaviper.zeroquest.common.entity.creature.EntityZertum;
import net.novaviper.zeroquest.common.util.ResourceReference;

import org.lwjgl.opengl.GL11;

@SideOnly(Side.CLIENT)
public class RenderZertum extends RenderLiving {

private final ModelBase model1, model2, model3;

public RenderZertum(RenderManager render, ModelBase base, float par1) {
	super(render, base, par1);
	this.addLayer(new LayersZertum(this));
	model1 = base;
	model2 = new ModelZertumStage2();
	model3 = new ModelZertumStage3();
}

public void func_177135_a(EntityZertum entity, double par1, double par2, double par3, float par4, float par5) {
	if (entity.isWolfWet()) {
		float f2 = entity.getBrightness(par5) * entity.getShadingWhileWet(par5);
		GlStateManager.color(f2, f2, f2);
	}

	super.doRender(entity, par1, par2, par3, par4, par5);
}

@Override
public void doRender(Entity _entity, double posX, double posY, double posZ, float var8, float var9) {
	EntityZertum entity = (EntityZertum) _entity;
	GL11.glPushMatrix();
	GL11.glDisable(GL11.GL_CULL_FACE);
	super.doRender(_entity, posX, posY, posZ, var8, var9);
	GL11.glEnable(GL11.GL_CULL_FACE);
	GL11.glPopMatrix();
}

@Override
protected void preRenderCallback(EntityLivingBase entityliving, float f) {
	GL11.glRotatef(180F, 0, 1F, 0F);
	GL11.glRotatef(180F, 0, 0, 1F);
	GL11.glTranslatef(0, 2f, 0);
}

protected ResourceLocation getEntityTexture(EntityZertum entity) {
	if (!entity.hasEvolved()) {
		if (entity.isTamed()) {
			return ResourceReference.getZTameSkins("");
		}
		else if (entity.isAngry()) {
			return ResourceReference.getZAngrySkins("");
		}
		else if (!entity.isTamed() && !entity.isAngry()) {
			return ResourceReference.getZWildSkins("");
		}
	}
	else if (entity.hasEvolved()) {
		if (!entity.inFinalStage()) {
			return ResourceReference.getZEvoSkins("");
		}
		else if (entity.inFinalStage()) {
			return ResourceReference.getZFinalSkins("");
		}
	}
	return null;
}

@Override
public void doRender(EntityLiving entity, double par1, double par2, double par3, float par4, float par5) {
	EntityZertum zertum = (EntityZertum) entity;
	if (!zertum.hasEvolved() && !zertum.inFinalStage()) {
		this.mainModel = model1;
	}
	else if (zertum.hasEvolved() && !zertum.inFinalStage()) {
		this.mainModel = model2;
	}
	else if (zertum.hasEvolved() && zertum.inFinalStage()) {
		this.mainModel = model3;
	}

	this.func_177135_a((EntityZertum) entity, par1, par2, par3, par4, par5);
}

@Override
public void doRender(EntityLivingBase entity, double par1, double par2, double par3, float par4, float par5) {
	this.func_177135_a((EntityZertum) entity, par1, par2, par3, par4, par5);
}

@Override
protected ResourceLocation getEntityTexture(Entity p_110775_1_) {
	return this.getEntityTexture((EntityZertum) p_110775_1_);
}

@Override
public void passSpecialRender(EntityLivingBase entityLivingBase, double par1, double par2, double par3) {
	EntityZertum dog = (EntityZertum) entityLivingBase;

	if (!dog.getPetName().isEmpty()) {
		super.passSpecialRender(entityLivingBase, par1, par2, par3);
	}
}

@Override
protected void renderOffsetLivingLabel(Entity entity, double x, double y, double z, String displayName, float scale, double distanceFromPlayer) {
	super.renderOffsetLivingLabel(entity, x, y, z, displayName, scale, distanceFromPlayer);

	EntityZertum dog = (EntityZertum) entity;

	if (distanceFromPlayer < 100.0D) {

		y += this.getFontRendererFromRenderManager().FONT_HEIGHT * 1.15F * 0.016666668F * 0.7F;

		String tip = dog.mode.getMode().getTip();

		String label = String.format("%s[%d]", tip, dog.getZertumHunger());

		if (dog.isPlayerSleeping()) {
			this.renderLivingLabel(dog, label, x, y - 0.5D, z, 64, 0.7F);
		}
		else {
			this.renderLivingLabel(dog, label, x, y, z, 64, 0.7F);
		}
	}

	if (distanceFromPlayer < 100.0D) {
		y += this.getFontRendererFromRenderManager().FONT_HEIGHT * 1.15F * 0.016666668F * 0.5F;

		if (this.renderManager.livingPlayer.isSneaking()) {
			EntityLivingBase owner = dog.getOwnerEntity();
			if (owner != null) {
				this.renderLivingLabel(dog, owner.getDisplayName().getUnformattedText(), x, y, z, 5, 0.5F);
			}
			else {
				this.renderLivingLabel(dog, dog.getOwnerName(), x, y, z, 5, 0.5F);
			}
		}
	}
}

protected void renderLivingLabel(Entity p_147906_1_, String p_147906_2_, double p_147906_3_, double p_147906_5_, double p_147906_7_, int p_147906_9_, float scale) {
	double d3 = p_147906_1_.getDistanceSqToEntity(this.renderManager.livingPlayer);

	if (d3 <= p_147906_9_ * p_147906_9_) {
		FontRenderer fontrenderer = this.getFontRendererFromRenderManager();
		float f1 = 0.016666668F * scale;
		GlStateManager.pushMatrix();
		GlStateManager.translate((float) p_147906_3_ + 0.0F, (float) p_147906_5_ + p_147906_1_.height + 0.5F, (float) p_147906_7_);
		GL11.glNormal3f(0.0F, 1.0F, 0.0F);
		GlStateManager.rotate(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F);
		GlStateManager.rotate(this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F);
		GlStateManager.scale(-f1, -f1, f1);
		GlStateManager.disableLighting();
		GlStateManager.depthMask(false);
		GlStateManager.disableDepth();
		GlStateManager.enableBlend();
		GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0);
		Tessellator tessellator = Tessellator.getInstance();
		WorldRenderer worldrenderer = tessellator.getWorldRenderer();
		byte b0 = 0;

		if (p_147906_2_.equals("deadmau5")) {
			b0 = -10;
		}

		GlStateManager.disableTexture2D();
		worldrenderer.startDrawingQuads();
		int j = fontrenderer.getStringWidth(p_147906_2_) / 2;
		worldrenderer.setColorRGBA_F(0.0F, 0.0F, 0.0F, 0.25F);
		worldrenderer.addVertex(-j - 1, -1 + b0, 0.0D);
		worldrenderer.addVertex(-j - 1, 8 + b0, 0.0D);
		worldrenderer.addVertex(j + 1, 8 + b0, 0.0D);
		worldrenderer.addVertex(j + 1, -1 + b0, 0.0D);
		tessellator.draw();
		GlStateManager.enableTexture2D();
		fontrenderer.drawString(p_147906_2_, -fontrenderer.getStringWidth(p_147906_2_) / 2, b0, 553648127);
		GlStateManager.enableDepth();
		GlStateManager.depthMask(true);
		fontrenderer.drawString(p_147906_2_, -fontrenderer.getStringWidth(p_147906_2_) / 2, b0, -1);
		GlStateManager.enableLighting();
		GlStateManager.disableBlend();
		GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
		GlStateManager.popMatrix();
	}
}

}

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!

Posted

Hey guys, I got my animations to work but I want the entity to stay at the end of the animation until I activate another one. Also, I have an angry animation that doesn't trigger immediately when the entity is angry at another one.

 

Animation event

	@Override
public void onUpdate() {
	super.onUpdate();

	boolean isDying = false;
	boolean isAngry = false;
	if (this.isAngry() && !this.isTamed()) {
		this.getAnimationHandler().activateAnimation("angry", 0);
		isAngry = true;
	}
	else if (isAngry == true && !this.isAngry() && !this.isTamed()) {
		this.getAnimationHandler().activateAnimation("notangry", 0);
		isAngry = false;
	}

	if (this.getHealth() <= Constants.lowHP) {
		this.getAnimationHandler().activateAnimation("dying", 0);
		isDying = true;
	}
	else if (isDying == true) {
		this.getAnimationHandler().activateAnimation("dyingheal", 0);
		isDying = false;
	}
}

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

    • You are using create 6.0.6 So one or more create addons are not compatible with it Remove all Create addons and test it again If this works, add the addons one by one If not, add the new crash-report       Add crash-reports with sites like https://mclo.gs/  
    • This is the main problem area, however I've already updated my graphics drivers [09:55:10] [main/WARN]: Mod file C:\Users\raypr\curseforge\minecraft\Install\libraries\net\minecraftforge\fmlcore\1.20.1-47.4.0\fmlcore-1.20.1-47.4.0.jar is missing mods.toml file [09:55:10] [main/WARN]: Mod file C:\Users\raypr\curseforge\minecraft\Install\libraries\net\minecraftforge\javafmllanguage\1.20.1-47.4.0\javafmllanguage-1.20.1-47.4.0.jar is missing mods.toml file [09:55:10] [main/WARN]: Mod file C:\Users\raypr\curseforge\minecraft\Install\libraries\net\minecraftforge\lowcodelanguage\1.20.1-47.4.0\lowcodelanguage-1.20.1-47.4.0.jar is missing mods.toml file [09:55:10] [main/WARN]: Mod file C:\Users\raypr\curseforge\minecraft\Install\libraries\net\minecraftforge\mclanguage\1.20.1-47.4.0\mclanguage-1.20.1-47.4.0.jar is missing mods.toml file
    • [09:55:08] [main/INFO]: ModLauncher running: args [--username, RayPry, --version, forge-47.4.0, --gameDir, C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ, --assetsDir, C:\Users\raypr\curseforge\minecraft\Install\assets, --assetIndex, 5, --uuid, fbb29d2614504f7d9b01434af9f7bb0e, --accessToken, ????????, --clientId, NTdlYmZmNTUtODY2ZC00NGZkLTg2NzEtZTkxMThmNmY1NmM3, --xuid, 2535429034718815, --userType, msa, --versionType, release, --width, 1024, --height, 768, --quickPlayPath, C:\Users\raypr\curseforge\minecraft\Install\quickPlay\java\1758030906375.json, --launchTarget, forgeclient, --fml.forgeVersion, 47.4.0, --fml.mcVersion, 1.20.1, --fml.forgeGroup, net.minecraftforge, --fml.mcpVersion, 20230612.114412] [09:55:08] [main/INFO]: ModLauncher 10.0.9+10.0.9+main.dcd20f30 starting: java version 17.0.15 by Microsoft; OS Windows 11 arch amd64 version 10.0 [09:55:09] [main/INFO]: Loading ImmediateWindowProvider fmlearlywindow [09:55:09] [main/INFO]: Trying GL version 4.6 [09:55:10] [main/INFO]: Requested GL version 4.6 got version 4.6 [09:55:10] [main/INFO]: SpongePowered MIXIN Subsystem Version=0.8.5 Source=union:/C:/Users/raypr/curseforge/minecraft/Install/libraries/org/spongepowered/mixin/0.8.5/mixin-0.8.5.jar%23100!/ Service=ModLauncher Env=CLIENT [09:55:10] [pool-2-thread-1/INFO]: GL info: NVIDIA GeForce RTX 3050 Laptop GPU/PCIe/SSE2 GL version 4.6.0 NVIDIA 581.29, NVIDIA Corporation [09:55:10] [main/INFO]: Found mod file additional_recipes-1.5.0-forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file AE2 Tools Complement 1.20.1-1.0.4.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file alexscaves-2.0.2.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file alloyed-1.20.1-c6.0.0-v2.0.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file Applied-Mekanistics-1.4.2.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file appliede-0.14.3.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file appliedenergistics2-forge-15.4.8.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file AppliedFlux-1.20-1.3.2-forge.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file appliedschematicannon-1.0.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file appliedsorting-forge-1.20.1-v1.0.0.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file architectury-9.2.14-forge.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file badpackets-forge-0.4.3.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file balm-forge-1.20.1-7.3.35-all.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file biomancy-forge-1.20.1-2.8.19.0.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file Botania-1.20.1-450-FORGE.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file botarium-forge-1.20.1-2.3.4.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file caelus-forge-3.2.0+1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file cbabo V1.1 forge.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file citadel-2.6.2-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file cloth-config-11.1.136-forge.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file cofh_core-1.20.1-11.0.2.56.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file compressed_create_recipes-1.2.4.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file configuration-forge-1.20.1-3.1.0.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file copycats-3.0.2+mc.1.20.1-forge.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file cratestuff-0.1.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file Create Encased-1.20.1-1.7.2-fix1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file Create Quality of Life-1.20.1-1.6.0.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create-1.20.1-6.0.6.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file Create-DnDesire-1.20.1-0.1b.Release-Early-Dev.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create-metalwork-1.20.1-1.0.11-forge.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create-mob-spawners-1.20.1-3.1.0.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create-new-age-forge-1.20.1-1.1.4.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create-stuff-additions1.20.1_v2.1.0.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_alexscaves_compat-1.5.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_cardboarded_conveynience-1.20.1-0.0.3.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_connected-1.1.7-mc1.20.1-all.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_easy_structures-0.2-forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_enchantment_industry-1.3.3-for-create-6.0.6.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_factory_logistics-1.20.1-1.4.6.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_jetpack-forge-4.4.2.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_jetpack_curios-1.2.0-forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_kart-2.3.0-forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_logistics-1.20.1-0.0.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_ltab-3.0.0.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_mecanical_extruder-1.20.1-1.6.11-6.0.6.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_mechanical_chicken-1.20.1-1.1.5-6.0.2.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_misc_and_things_ 1.20.1_4.0A.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_mobile_packages-1.20.1-0.5.5.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_netherless-1.20.1-1.3.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_optical-0.3.0.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_oxidized-0.1.2.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_power_loader-2.0.3-mc1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_recycle_1.0.2_forge_1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_rustic_structures-1.0.0-forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_sabers-1.20.1-1.3.0.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_security-0.1.2-forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_structures_arise-162.35.34-forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_ultimate_factory-2.1.0-forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_waystones_recipes-1.0.1.b.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file create_wt-forge-1.20.1-1.0.7.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createaddition-1.20.1-1.3.2.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createair-1.0.5.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createappliedkinetics-1.5.1-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createbb-1.20.1-3.2.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createchunkloading-1.6.0-forge.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createcobblestone-1.4.5+forge-1.20.1-106.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createcompounds-1.0.0.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createcontraptionterminals-1.20-1.2.0.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createdieselgenerators-1.20.1-1.3.5.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createenchantablemachinery-3.4.1+mc1.20.1-forge.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createenderlink-1.4.0+mc1.20.1-forge.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createendertransmission-2.1.0-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createfiltersanywhere-1.5.0-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createlowheated-forge-1.20.1-6.0.6-4.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createmetallurgy-0.0.7-HF-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createnewbeg-0.1.0-1.20.1-c6.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createnuclear-1.3.0-forge.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createoreexcavation-1.20-1.6.4.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createrailwaysnavigator-forge-1.20.1-beta-0.8.4-C6.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createsifter-1.20.1-1.8.6-6.0.6.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createstockbridge-1.20-0.1.5.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file CreateTankDefenses v0.80.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createteleporters2.3-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createultimine-1.20.1-forge-1.1.2.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file createutilities-0.3.2+1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file Crystal-Clear-2.1-Beta-forge.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file curios-forge-5.14.1+1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file delivery_director-1.0.1-all.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file design_decor-0.4.0b-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file dynamicvillage-v0.4-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file easy_applied_energestics_start-8.0-forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file edible_stuff-2.1.0-forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file embeddium-0.3.31+mc1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file extendedgears-2.1.1-1.20.1-0.5.1.f-forge.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file extra_gauges-1.1.2-all.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file FarmersDelight-1.20.1-1.2.9.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file framework-forge-1.20.1-0.7.15.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file ftb-library-forge-2001.2.10.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file ftb-quests-forge-2001.4.14.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file ftb-teams-forge-2001.3.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file ftb-ultimine-forge-2001.1.7.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file fusion-1.2.11a-forge-mc1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file garnished-2.1.2+1.20.1-neoforged.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file geckolib-forge-1.20.1-4.7.4.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file Glodium-1.20-1.5-forge.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file guideme-20.1.12.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file irons_spellbooks-1.20.1-3.4.0.11.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file kotlinforforge-4.11.0-all.jar of type LIBRARY with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file kubejs-create-forge-2001.3.0-build.8.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file kubejs-forge-2001.6.5-build.16.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file mechanical_botany-1.0.5+1.20.1-neoforged.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file Mekanism-1.20.1-10.4.16.80.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file molten_metals-1.20.1-0.1.4-forge.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file molten_vents-1.20.1-2.0.9.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file moonlight-1.20-2.16.10-forge.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file nocube's_create_compact_exp_1.0.4_forge_1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file Patchouli-1.20.1-84.1-FORGE.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file pattern_schematics-1.2.3+forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file petrolpark-1.20.1-1.4.11.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file petrolsparts-1.20.1-1.2.3-all.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file player-animation-lib-forge-1.0.2-rc1+1.20.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file ProjectE-1.20.1-PE1.0.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file PuzzlesLib-v8.1.33-1.20.1-Forge.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file rechiseled-1.1.6-forge-mc1.20.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file rechiseledcreate-1.0.2b-forge-mc1.20.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file resourcefulconfig-forge-1.20.1-2.1.3.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file resourcefullib-forge-1.20.1-2.1.29.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file rhino-forge-2001.2.3-build.10.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file ritchiesprojectilelib-2.1.0+mc.1.20.1-forge.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file sebastrnlib-4.0.0.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file SmartBrainLib-forge-1.20.1-1.15.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file smartcrafter-0.2.0.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file sophisticatedcore-1.20.1-1.2.89.1147.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file sophisticatedstorage-1.20.1-1.4.4.1286.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file Steam_Rails-1.6.7+forge-mc1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file steampowered-1.20.1-3.0.2.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file supermartijn642configlib-1.1.8-forge-mc1.20.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file supermartijn642corelib-1.1.18-forge-mc1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file ThinAir-v8.1.7-1.20.1-Forge.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file timeclock-3.0.0-forge-1.20.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file toms_storage-1.20-1.7.1.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file tools_complement-1.20.1-4.0.0.25.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file vintageimprovements-1.20.1-0.2.0.3.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/INFO]: Found mod file waystones-forge-1.20.1-14.1.17.jar of type MOD with provider {mods folder locator at C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods} [09:55:10] [main/WARN]: Mod file C:\Users\raypr\curseforge\minecraft\Install\libraries\net\minecraftforge\fmlcore\1.20.1-47.4.0\fmlcore-1.20.1-47.4.0.jar is missing mods.toml file [09:55:10] [main/WARN]: Mod file C:\Users\raypr\curseforge\minecraft\Install\libraries\net\minecraftforge\javafmllanguage\1.20.1-47.4.0\javafmllanguage-1.20.1-47.4.0.jar is missing mods.toml file [09:55:10] [main/WARN]: Mod file C:\Users\raypr\curseforge\minecraft\Install\libraries\net\minecraftforge\lowcodelanguage\1.20.1-47.4.0\lowcodelanguage-1.20.1-47.4.0.jar is missing mods.toml file [09:55:10] [main/WARN]: Mod file C:\Users\raypr\curseforge\minecraft\Install\libraries\net\minecraftforge\mclanguage\1.20.1-47.4.0\mclanguage-1.20.1-47.4.0.jar is missing mods.toml file [09:55:10] [main/INFO]: Found mod file fmlcore-1.20.1-47.4.0.jar of type LIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@344426bf [09:55:10] [main/INFO]: Found mod file javafmllanguage-1.20.1-47.4.0.jar of type LANGPROVIDER with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@344426bf [09:55:10] [main/INFO]: Found mod file lowcodelanguage-1.20.1-47.4.0.jar of type LANGPROVIDER with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@344426bf [09:55:10] [main/INFO]: Found mod file mclanguage-1.20.1-47.4.0.jar of type LANGPROVIDER with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@344426bf [09:55:10] [main/INFO]: Found mod file client-1.20.1-20230612.114412-srg.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@344426bf [09:55:10] [main/INFO]: Found mod file forge-1.20.1-47.4.0-universal.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.MinecraftLocator@344426bf [09:55:11] [main/WARN]: Attempted to select a dependency jar for JarJar which was passed in as source: architectury. Using Mod File: C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ\mods\architectury-9.2.14-forge.jar [09:55:11] [main/INFO]: Found 18 dependencies adding them to mods collection [09:55:11] [main/INFO]: Found mod file dragonlib-forge-1.20.1-2.2.24.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@2b03d52f [09:55:11] [main/INFO]: Found mod file kuma-api-forge-20.1.11+1.20.1.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@2b03d52f [09:55:11] [main/INFO]: Found mod file yabn-1.0.3.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@2b03d52f [09:55:11] [main/INFO]: Found mod file kfflang-4.11.0.jar of type LANGPROVIDER with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@2b03d52f [09:55:11] [main/INFO]: Found mod file Ponder-Forge-1.20.1-1.0.80.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@2b03d52f [09:55:11] [main/INFO]: Found mod file Registrate-MC1.20-1.3.3.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@2b03d52f [09:55:11] [main/INFO]: Found mod file conditional-mixin-forge-0.6.4.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@2b03d52f [09:55:11] [main/INFO]: Found mod file flightlib-forge-2.1.0.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@2b03d52f [09:55:11] [main/INFO]: Found mod file mclib-20.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@2b03d52f [09:55:11] [main/INFO]: Found mod file puzzlesaccessapi-forge-20.1.1.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@2b03d52f [09:55:11] [main/INFO]: Found mod file mixinextras-forge-0.5.0-rc.4.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@2b03d52f [09:55:11] [main/INFO]: Found mod file kfflib-4.11.0.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@2b03d52f [09:55:11] [main/INFO]: Found mod file kffmod-4.11.0.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@2b03d52f [09:55:11] [main/INFO]: Found mod file create_factory_abstractions-1.20.1-1.4.6.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@2b03d52f [09:55:11] [main/INFO]: Found mod file flywheel-forge-1.20.1-1.0.4.jar of type MOD with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@2b03d52f [09:55:11] [main/INFO]: Found mod file bytecodecs-1.0.2.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@2b03d52f [09:55:11] [main/INFO]: Found mod file h2-mvstore-2.3.232.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@2b03d52f [09:55:11] [main/INFO]: Found mod file MixinExtras-0.5.0-rc.4.jar of type GAMELIBRARY with provider net.minecraftforge.fml.loading.moddiscovery.JarInJarDependencyLocator@2b03d52f [09:55:13] [main/INFO]: Compatibility level set to JAVA_17 [09:55:13] [main/INFO]: Launching target 'forgeclient' with arguments [--version, forge-47.4.0, --gameDir, C:\Users\raypr\curseforge\minecraft\Instances\BRKN SCPT GNZ, --assetsDir, C:\Users\raypr\curseforge\minecraft\Install\assets, --uuid, fbb29d2614504f7d9b01434af9f7bb0e, --username, RayPry, --assetIndex, 5, --accessToken, ????????, --clientId, NTdlYmZmNTUtODY2ZC00NGZkLTg2NzEtZTkxMThmNmY1NmM3, --xuid, 2535429034718815, --userType, msa, --versionType, release, --width, 1024, --height, 768, --quickPlayPath, C:\Users\raypr\curseforge\minecraft\Install\quickPlay\java\1758030906375.json] [09:55:13] [main/WARN]: Reference map 'mixins.create_security.refmap.json' for mixins.create_security.json could not be read. If this is a development environment you can ignore this message [09:55:13] [main/INFO]: Loaded configuration file for Embeddium: 199 options available, 0 override(s) found [09:55:13] [main/INFO]: Searching for graphics cards... [09:55:14] [main/INFO]: Found graphics card: GraphicsAdapterInfo[vendor=UNKNOWN, name=Meta Virtual Monitor, version=DriverVersion=17.12.55.198] [09:55:14] [main/INFO]: Found graphics card: GraphicsAdapterInfo[vendor=NVIDIA, name=NVIDIA GeForce RTX 3050 Laptop GPU, version=DriverVersion=32.0.15.8129] [09:55:14] [main/INFO]: Found graphics card: GraphicsAdapterInfo[vendor=INTEL, name=Intel(R) UHD Graphics, version=DriverVersion=31.0.101.4502] [09:55:14] [main/WARN]: Embeddium has applied one or more workarounds to prevent crashes or other issues on your system: [NVIDIA_THREADED_OPTIMIZATIONS] [09:55:14] [main/WARN]: This is not necessarily an issue, but it may result in certain features or optimizations being disabled. You can sometimes fix these issues by upgrading your graphics driver. [09:55:14] [main/WARN]: Reference map 'createcobblestone-common-refmap.json' for createcobblestone-common.mixins.json could not be read. If this is a development environment you can ignore this message [09:55:14] [main/WARN]: Reference map 'tfmg.refmap.json' for design_decor.mixins.json could not be read. If this is a development environment you can ignore this message [09:55:14] [main/WARN]: Reference map 'createappliedkinetics.refmap.json' for createappliedkinetics.mixins.json could not be read. If this is a development environment you can ignore this message [09:55:14] [main/WARN]: Reference map 'puzzlesaccessapi.common.refmap.json' for puzzlesaccessapi.common.mixins.json could not be read. If this is a development environment you can ignore this message [09:55:14] [main/WARN]: Reference map 'molten_metals-common-refmap.json' for molten_metals-common.mixins.json could not be read. If this is a development environment you can ignore this message [09:55:14] [main/WARN]: Reference map 'steampowered.refmap.json' for steampowered.mixins.json could not be read. If this is a development environment you can ignore this message [09:55:14] [main/WARN]: Reference map 'createcompounds.refmap.json' for createcompounds.mixins.json could not be read. If this is a development environment you can ignore this message [09:55:14] [main/WARN]: Reference map 'pattern_schematics-common-refmap.json' for pattern_schematics.common.mixins.json could not be read. If this is a development environment you can ignore this message [09:55:14] [main/INFO]: Loading 154 mods:     - additional_recipes 1.0.0     - ae2 15.4.8     - ae2_tools 1.0.4     - alexscaves 2.0.2     - alloyed 2.0+1.20.1     - appflux 1.20-1.3.2-forge     - appliede 0.14.3     - appliedschematicannon 1.0.1     - appliedsorting 1.0.0     - appmek 1.4.2     - architectury 9.2.14     - badpackets 0.4.3     - balm 7.3.35         \-- kuma_api 20.1.11     - biomancy 2.8.19.0     - botania 1.20.1-450-FORGE     - botarium 2.3.4     - caelus 3.2.0+1.20.1     - citadel 2.6.2     - cloth_config 11.1.136     - cofh_core 11.0.2     - compressed_create_recipes 1.2.4     - configuration 3.1.0     - copycats 3.0.2+mc.1.20.1-forge     - cratestuff 0.1.1     - create 6.0.6         |-- flywheel 1.0.4         \-- ponder 1.0.80     - create_alexscaves_compat 1.5.1     - create_buffers__beams_overhauled 1.0.0     - create_cardboarded_conveynience 0.0.3     - create_connected 1.1.7-mc1.20.1     - create_crush_everything 1.0.2     - create_dd 0.1b.Release-Early-Dev     - create_easy_structures 0.2     - create_enchantment_industry 1.3.3-for-create-6.0.6     - create_factory_logistics 1.4.6         \-- create_factory_abstractions 1.4.6     - create_jetpack 4.4.2         \-- flightlib 2.1.0     - create_jetpack_curios 1.2.0     - create_kart 2.3.0     - create_logistics 1.0.0     - create_ltab 3.0.0     - create_mechanical_chicken 1.20.1-1.1.5-6.0.2     - create_mechanical_extruder 1.20.1-1.6.10-6.0.6     - create_mob_spawners 3.1.0     - create_mobile_packages 0.5.5     - create_netherless 1.3.0     - create_new_age 1.1.4     - create_optical 0.3.0     - create_oxidized 0.1.2     - create_pattern_schematics 1.2.3+forge-1.20.1     - create_power_loader 2.0.3-mc1.20.1     - create_rustic_structures 1.0.0     - create_sa 2.1.0     - create_sabers 1.3.0     - create_security 0.1.2     - create_structures_arise 162.35.34     - create_tank_defenses 0.80     - create_things_and_misc 1.0.0     - create_ultimate_factory 2.1.0     - create_waystones_recipes 1.0.1.b     - create_wt 1.0.7     - createaddition 1.20.1-1.3.2     - createair 1.0.5     - createappliedkinetics 1.5.1-1.20.1     - createbb 3.1.1     - createcasing 1.7.2-fix1     - createchunkloading 1.6.0     - createcobblestone 1.4.5+forge-1.20.1-106     - createcompounds 1.0.0     - createcontraptionterminals 1.2.0     - createdieselgenerators 1.20.1-1.3.5     - createenchantablemachinery 3.4.1     - createenderlink 1.4.0     - createendertransmission 2.1.0-1.20.1     - createfiltersanywhere 1.5.0         \-- conditional_mixin 0.6.4     - createlowheated 1.20.1-6.0.6-4     - createmetallurgy 0.0.7-HF-1.20.1     - createmetalwork 1.20.1-1.0.11-forge     - createnewbeg 0.1.0-1.20.1-c6     - createnuclear 1.3.0     - createoreexcavation 1.6.4     - createqol 1.5.1-fix2     - createrailwaysnavigator 1.20.1-beta-0.8.4-C6         \-- dragonlib 1.20.1-2.2.24     - createsifter 1.20.1-1.8.6-6.0.6     - createstockbridge 0.1.5     - createteleporters 2.2     - createultimine 1.1.2     - createutilities 0.3.2+1.20.1     - crystal_clear 2.1-Beta     - curios 5.14.1+1.20.1     - delivery_director 1.0.1     - design_decor 0.4.0b     - dynamicvillage 0.4     - easy_applied_energestics_start 1.0     - edible_stuff 2.0.0     - embeddium 0.3.31+mc1.20.1         \-- rubidium 0.7.1     - extendedgears 2.1.1-1.20.1-0.5.1.f-forge     - extra_gauges 1.1.2     - farmersdelight 1.20.1-1.2.9     - forge 47.4.0     - framework 0.7.15     - ftblibrary 2001.2.10     - ftbquests 2001.4.14     - ftbteams 2001.3.1     - ftbultimine 2001.1.7     - fusion 1.2.11+a     - garnished 2.1.2     - geckolib 4.7.4     - glodium 1.20-1.5-forge     - guideme 20.1.12     - irons_spellbooks 1.20.1-3.4.0.11     - kotlinforforge 4.11.0     - kubejs 2001.6.5-build.16     - kubejs_create 2001.3.0-build.8     - mechanical_botany 1.0.5     - mekanism 10.4.16     - minecraft 1.20.1     - molten_metals 1.20.1-0.1.4     - molten_vents 2.0.9     - moonlight 1.20-2.16.10     - nocubescreateexp 1.0.4     - patchouli 1.20.1-84.1-FORGE     - petrolpark 1.4.11     - petrolsparts 1.2.3     - playeranimator 1.0.2-rc1+1.20     - projecte 1.0.1     - puzzleslib 8.1.33         \-- puzzlesaccessapi 20.1.1     - railways 1.6.7+forge-mc1.20.1     - rechiseled 1.1.6     - rechiseledcreate 1.0.2+b     - resourcefulconfig 2.1.3     - resourcefullib 2.1.29     - rhino 2001.2.3-build.10     - ritchiesprojectilelib 2.1.0     - sebastrnlib 4.0.0     - smartbrainlib 1.15     - smartcrafter 0.2.0     - sophisticatedcore 1.2.89.1147     - sophisticatedstorage 1.4.4.1286     - steampowered 1.20.1-3.0.2     - supermartijn642configlib 1.1.8     - supermartijn642corelib 1.1.18     - thinair 8.1.7     - timeclock 3.0.0     - toms_storage 1.7.1     - tools_complement 4.0.0     - vintageimprovements 1.20.1-0.2.0.3     - waystones 14.1.17
    • Also make a test without Embeddium/Oculus, Modernfix and immersive_optimization Remove these one by one - start with immersive_optimization If there is no change, add the new crash-report or log
  • Topics

×
×
  • Create New...

Important Information

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