NOTE: WHAT I HAVE IN MY CODE SO FAR IS AT THE BOTTOM OF THE PAGE
So basically I'm trying to make a tamable entity in singleplayer, render as a dragon, if that makes any sense. I've gotten the basic idea around it complete but there's a lot of bugs. I'm not trying to get the tamable entity to fly, just trying to replace an entity with a dragon
One problem is i can't get the wings to "flap" properly, i'm not trying to make the entity fly, but i just want the dragon model to have a flapping animation, but it just glitches out for me.
If anyone can help please do.
Another problem is I can't get the dragon to follow the direction of the player when the player is riding it. For example: Me as a player is facing west or east, so is the dragon model, however when i face south or north, the dragon model doesn't look that direction. Here's some screenshots:
Facing west, dragon is facing west
Facing North, Dragon isn't
Here's the code for rendering the dragon
@SideOnly(Side.CLIENT)
@SubscribeEvent
public void onRender(final RenderLivingEvent.Pre event) {
if (event.entity instanceof EntityHorse && this.dragon) {
final EntityPig entity = (EntityPig)event.entity;
final EntityDragon dragon = new EntityDragon(entity.getEntityWorld());
final float partialTicks = Animation.getPartialTickTime();
dragon.distanceWalkedModified = entity.distanceWalkedModified;
dragon.distanceWalkedOnStepModified = entity.distanceWalkedOnStepModified;
dragon.swingProgress = entity.swingProgress;
dragon.prevSwingProgress = entity.prevSwingProgress;
dragon.ticksExisted = 1;
dragon.posX = entity.posX;
dragon.lastTickPosX = entity.lastTickPosX;
dragon.posY = entity.posY;
dragon.lastTickPosY = entity.lastTickPosY;
dragon.posZ = entity.posZ;
dragon.lastTickPosZ = entity.lastTickPosZ;
dragon.rotationPitch = entity.rotationPitch;
dragon.prevRotationPitch = entity.prevRotationPitch;
dragon.rotationYaw = entity.rotationYaw;
dragon.prevRotationYaw = entity.prevRotationYaw;
dragon.renderYawOffset = entity.renderYawOffset;
dragon.prevRenderYawOffset = entity.prevRenderYawOffset;
dragon.rotationYawHead = entity.rotationYawHead;
dragon.prevRotationYawHead = entity.prevRotationYawHead;
dragon.limbSwing = entity.limbSwing;
dragon.limbSwingAmount = entity.limbSwingAmount;
dragon.prevLimbSwingAmount = entity.prevLimbSwingAmount;
dragon.swingProgress = entity.swingProgress;
dragon.isAirBorne = true;
dragon.moveStrafing = entity.moveStrafing;
dragon.moveForward = entity.moveForward;
dragon.swingProgressInt = entity.swingProgressInt;
dragon.prevAnimTime = dragon.animTime;
dragon.renderYawOffset = dragon.rotationYaw;
final EntityDragonPart dragonPartHead = dragon.dragonPartHead;
final EntityDragonPart dragonPartHead2 = dragon.dragonPartHead;
final float n = 3.0f;
dragonPartHead2.height = 3.0f;
dragonPartHead.width = 3.0f;
final EntityDragonPart dragonPartTail1 = dragon.dragonPartTail1;
final EntityDragonPart dragonPartTail2 = dragon.dragonPartTail1;
final float n2 = 2.0f;
dragonPartTail2.height = 2.0f;
dragonPartTail1.width = 2.0f;
final EntityDragonPart dragonPartTail3 = dragon.dragonPartTail2;
final EntityDragonPart dragonPartTail4 = dragon.dragonPartTail2;
final float n3 = 2.0f;
dragonPartTail4.height = 2.0f;
dragonPartTail3.width = 2.0f;
final EntityDragonPart dragonPartTail5 = dragon.dragonPartTail3;
final EntityDragonPart dragonPartTail6 = dragon.dragonPartTail3;
final float n4 = 2.0f;
dragonPartTail6.height = 2.0f;
dragonPartTail5.width = 2.0f;
dragon.dragonPartBody.height = 3.0f;
dragon.dragonPartBody.width = 5.0f;
dragon.dragonPartWing1.height = 2.0f;
dragon.dragonPartWing1.width = 4.0f;
dragon.dragonPartWing2.height = 3.0f;
dragon.dragonPartWing2.width = 4.0f;
// final float f2 = 0.0f;
float f3 = 0.03f / (MathHelper.sqrt_double(dragon.motionX * dragon.motionX + dragon.motionZ * dragon.motionZ) * 10.0f + 1.0f);
f3 *= (float)Math.pow(0.05, dragon.motionY);
if (dragon.slowed) {
final EntityDragon entityDragon4;
final EntityDragon entityDragon7;
final EntityDragon entityDragon3 = entityDragon7 = (entityDragon4 = dragon);
entityDragon7.animTime += f3 * 0.0f;
}
else {
final EntityDragon entityDragon6;
final EntityDragon entityDragon8;
final EntityDragon entityDragon5 = entityDragon8 = (entityDragon6 = dragon);
entityDragon8.animTime += f3;
}
for (int i = 0; i < dragon.ringBuffer.length; ++i) {
dragon.ringBuffer[i][0] = -dragon.rotationYaw;
dragon.ringBuffer[i][1] = -dragon.posY;
}
final float rotation = 0.0f;
GL11.glPushMatrix();
final float baseRotation = dragon.renderYawOffset - dragon.prevRenderYawOffset * partialTicks + dragon.prevRenderYawOffset;
final RenderManager renderManager = Minecraft.getMinecraft().getRenderManager();
// GL11.glScalef(0.4f, 0.4f, 0.4f);
renderManager.renderEntitySimple((Entity)dragon, partialTicks);
final double x = entity.lastTickPosX + (entity.posX - entity.lastTickPosX) * partialTicks - renderManager.viewerPosX;
final double y = entity.lastTickPosY + (entity.posY - entity.lastTickPosY) * partialTicks - renderManager.viewerPosY;
final double z = entity.lastTickPosZ + (entity.posZ - entity.lastTickPosZ) * partialTicks - renderManager.viewerPosZ;
event.renderer.renderName((EntityLivingBase)entity, x, y, z);
event.setCanceled(true);
}
}