add foxes, complete texture

This commit is contained in:
Sen 2025-06-15 13:15:24 +02:00
parent ad930fcbdc
commit 339a7679f7
Signed by: sen
GPG key ID: 3AC50A6F47D1B722
16 changed files with 138 additions and 67 deletions

View file

@ -47,6 +47,7 @@ import client.renderer.entity.RenderWolf;
import client.renderer.entity.RenderXpOrb;
import client.renderer.model.ModelChicken;
import client.renderer.model.ModelCow;
import client.renderer.model.ModelFox;
import client.renderer.model.ModelHorse;
import client.renderer.model.ModelMouse;
import client.renderer.model.ModelOcelot;
@ -118,7 +119,7 @@ public abstract class RenderRegistry {
map.put(EntityCow.class, new RenderCow(mgr, new ModelCow()));
map.put(EntityMooshroom.class, new RenderMooshroom(mgr, new ModelCow()));
map.put(EntityWolf.class, new RenderWolf(mgr, new ModelWolf()));
map.put(EntityFox.class, new RenderFox(mgr, new ModelWolf()));
map.put(EntityFox.class, new RenderFox(mgr, new ModelFox()));
map.put(EntityChicken.class, new RenderChicken(mgr, new ModelChicken()));
map.put(EntityOcelot.class, new RenderOcelot(mgr, new ModelOcelot()));
map.put(EntityRabbit.class, new RenderRabbit(mgr, new ModelRabbit()));

View file

@ -10,10 +10,6 @@ public class RenderFox extends RenderLiving<EntityFox> {
super(renderManagerIn, modelBaseIn);
}
protected float handleRotationFloat(EntityFox livingBase, float partialTicks) {
return (float)Math.PI / 5F;
}
protected String getEntityTexture(EntityFox entity) {
return FOX_TEXTURE;
}

View file

@ -0,0 +1,97 @@
package client.renderer.model;
import org.lwjgl.opengl.GL11;
import common.entity.Entity;
import common.util.ExtMath;
public class ModelFox extends ModelBase
{
private final ModelRenderer head;
private final ModelRenderer body;
private final ModelRenderer wolfLeg1;
private final ModelRenderer wolfLeg2;
private final ModelRenderer wolfLeg3;
private final ModelRenderer wolfLeg4;
private final ModelRenderer tail;
public ModelFox()
{
float f = 0.0F;
this.head = new ModelRenderer(this, 0, 0);
this.head.addBox(-3.0F, -3.0F, -2.0F, 6, 6, 4, f);
this.head.setRotationPoint(-1.0F, 15.5F, -7.0F);
this.body = new ModelRenderer(this, 24, 0);
this.body.addBox(-3.5F, -2.0F, -2.0F, 5, 13, 5, f);
this.body.setRotationPoint(0.0F, 16.0F, -4.0F);
this.wolfLeg1 = new ModelRenderer(this, 0, 18);
this.wolfLeg1.addBox(-1.0F, 0.0F, -1.0F, 2, 6, 2, f);
this.wolfLeg1.setRotationPoint(-2.49F, 18.0F, 5.0F);
this.wolfLeg2 = new ModelRenderer(this, 0, 18);
this.wolfLeg2.addBox(-1.0F, 0.0F, -1.0F, 2, 6, 2, f);
this.wolfLeg2.setRotationPoint(0.49F, 18.0F, 5.0F);
this.wolfLeg3 = new ModelRenderer(this, 0, 18);
this.wolfLeg3.addBox(-1.0F, 0.0F, -1.0F, 2, 6, 2, f);
this.wolfLeg3.setRotationPoint(-2.49F, 18.0F, -4.0F);
this.wolfLeg4 = new ModelRenderer(this, 0, 18);
this.wolfLeg4.addBox(-1.0F, 0.0F, -1.0F, 2, 6, 2, f);
this.wolfLeg4.setRotationPoint(0.49F, 18.0F, -4.0F);
this.tail = new ModelRenderer(this, 9, 18);
this.tail.addBox(-1.5F, 0.0F, -1.0F, 3, 10, 3, f);
this.tail.setRotationPoint(-1.0F, 15.0F, 6.0F);
this.head.setTextureOffset(16, 14).addBox(-3.15F, -4.35F, 0.0F, 2, 2, 1, f);
this.head.setTextureOffset(16, 14).addBox(1.15F, -4.35F, 0.0F, 2, 2, 1, f);
this.head.setTextureOffset(0, 10).addBox(-1.5F, 0.0F, -5.0F, 3, 2, 4, f);
this.head.setTextureOffset(16, 11).addBox(-3.15F, -5.35F, 0.0F, 1, 1, 1, f);
this.head.setTextureOffset(16, 11).addBox(2.15F, -5.35F, 0.0F, 1, 1, 1, f);
}
public void render(Entity entityIn, float p_78088_2_, float p_78088_3_, float p_78088_4_, float p_78088_5_, float p_78088_6_, float scale)
{
super.render(entityIn, p_78088_2_, p_78088_3_, p_78088_4_, p_78088_5_, p_78088_6_, scale);
this.setRotationAngles(p_78088_2_, p_78088_3_, p_78088_4_, p_78088_5_, p_78088_6_, scale, entityIn);
if (this.isChild)
{
float f = 2.0F;
GL11.glPushMatrix();
GL11.glTranslatef(0.0F, 3.5F * scale, 2.0F * scale);
this.head.renderWithRotation(scale);
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glScalef(1.0F / f, 1.0F / f, 1.0F / f);
GL11.glTranslatef(0.0F, 24.0F * scale, 0.0F);
this.body.render(scale);
this.wolfLeg1.render(scale);
this.wolfLeg2.render(scale);
this.wolfLeg3.render(scale);
this.wolfLeg4.render(scale);
this.tail.renderWithRotation(scale);
GL11.glPopMatrix();
}
else
{
this.head.renderWithRotation(scale);
this.body.render(scale);
this.wolfLeg1.render(scale);
this.wolfLeg2.render(scale);
this.wolfLeg3.render(scale);
this.wolfLeg4.render(scale);
this.tail.renderWithRotation(scale);
}
}
public void setRotationAngles(float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch, float scaleFactor, Entity entityIn)
{
super.setRotationAngles(limbSwing, limbSwingAmount, ageInTicks, netHeadYaw, headPitch, scaleFactor, entityIn);
this.tail.rotateAngleY = ExtMath.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount;
this.body.rotateAngleX = ((float)Math.PI / 2F);
this.wolfLeg1.rotateAngleX = ExtMath.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount;
this.wolfLeg2.rotateAngleX = ExtMath.cos(limbSwing * 0.6662F + (float)Math.PI) * 1.4F * limbSwingAmount;
this.wolfLeg3.rotateAngleX = ExtMath.cos(limbSwing * 0.6662F + (float)Math.PI) * 1.4F * limbSwingAmount;
this.wolfLeg4.rotateAngleX = ExtMath.cos(limbSwing * 0.6662F) * 1.4F * limbSwingAmount;
this.head.rotateAngleX = headPitch / (180F / (float)Math.PI);
this.head.rotateAngleY = netHeadYaw / (180F / (float)Math.PI);
this.tail.rotateAngleX = (float)Math.PI / 2.5F;
}
}

View file

@ -112,9 +112,9 @@ public class ModelWolf extends ModelBase
*/
public void setLivingAnimations(EntityLiving living, float p_78086_2_, float p_78086_3_, float partialTickTime)
{
EntityWolf wolf = living instanceof EntityWolf ? (EntityWolf)living : null;
EntityWolf wolf = (EntityWolf)living;
if (wolf != null && wolf.isAngry())
if (wolf.isAngry())
{
this.wolfTail.rotateAngleY = 0.0F;
}
@ -123,7 +123,7 @@ public class ModelWolf extends ModelBase
this.wolfTail.rotateAngleY = ExtMath.cos(p_78086_2_ * 0.6662F) * 1.4F * p_78086_3_;
}
if (wolf != null && wolf.isSitting())
if (wolf.isSitting())
{
this.wolfMane.setRotationPoint(-1.0F, 16.0F, -3.0F);
this.wolfMane.rotateAngleX = ((float)Math.PI * 2F / 5F);
@ -157,13 +157,11 @@ public class ModelWolf extends ModelBase
this.wolfLeg4.rotateAngleX = ExtMath.cos(p_78086_2_ * 0.6662F) * 1.4F * p_78086_3_;
}
if(wolf != null) {
this.wolfHeadMain.rotateAngleZ = wolf.getInterestedAngle(partialTickTime) + wolf.getShakeAngle(partialTickTime, 0.0F);
this.wolfMane.rotateAngleZ = wolf.getShakeAngle(partialTickTime, -0.08F);
this.wolfBody.rotateAngleZ = wolf.getShakeAngle(partialTickTime, -0.16F);
this.wolfTail.rotateAngleZ = wolf.getShakeAngle(partialTickTime, -0.2F);
}
}
/**
* Sets the model's various rotation angles. For bipeds, par1 and par2 are used for animating the movement of arms

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Before After
Before After

View file

@ -12,6 +12,7 @@ import common.entity.types.EntityLiving;
import common.entity.types.IEntityMultiPart;
import common.init.SoundEvent;
import common.model.ParticleType;
import common.potion.Potion;
import common.util.ExtMath;
import common.util.Vec3;
import common.vars.Vars;
@ -56,6 +57,10 @@ public class EntityDragon extends EntityLiving implements IEntityMultiPart
return true;
}
public boolean isPotionApplicable(Potion potion, int amplifier) {
return false;
}
protected void applyEntityAttributes()
{
super.applyEntityAttributes();

View file

@ -5,6 +5,7 @@ import common.ai.EntityAIHurtByTarget;
import common.ai.EntityAILeapAtTarget;
import common.ai.EntityAILookIdle;
import common.ai.EntityAIMate;
import common.ai.EntityAINearestAttackableTarget;
import common.ai.EntityAISwimming;
import common.ai.EntityAIWander;
import common.ai.EntityAIWatchClosest;
@ -37,28 +38,24 @@ public class EntityFox extends EntityAnimal
this.tasks.addTask(9, new EntityAIWatchClosest(this, null, 8.0F));
this.tasks.addTask(9, new EntityAILookIdle(this));
this.targets.addTask(3, new EntityAIHurtByTarget(this, true));
// this.targets.addTask(5, new EntityAINearestAttackableTarget(this, EntityUndead.class, false));
this.targets.addTask(5, new EntityAINearestAttackableTarget(this, EntityChicken.class, true));
}
protected void applyEntityAttributes()
{
super.applyEntityAttributes();
this.getEntityAttribute(Attribute.MOVEMENT_SPEED).setBaseValue(0.35D);
this.setMaxHealth(6);
this.getAttributeMap().registerAttribute(Attribute.ATTACK_DAMAGE);
this.getEntityAttribute(Attribute.ATTACK_DAMAGE).setBaseValue(2.0D);
}
protected SoundEvent getHurtSound()
{
return SoundEvent.WOLF_HURT;
return SoundEvent.FOX_HURT;
}
protected SoundEvent getDeathSound()
{
return SoundEvent.WOLF_DEATH;
return SoundEvent.FOX_DEATH;
}
protected float getSoundVolume()
@ -80,7 +77,7 @@ public class EntityFox extends EntityAnimal
{
if(!this.worldObj.client && !Vars.damageMobs)
return false;
boolean flag = entityIn.attackEntityFrom(DamageSource.causeMobDamage(this), ((int)this.getEntityAttribute(Attribute.ATTACK_DAMAGE).getAttributeValue()));
boolean flag = entityIn.attackEntityFrom(DamageSource.causeMobDamage(this), 2);
if (flag)
{
@ -110,6 +107,6 @@ public class EntityFox extends EntityAnimal
}
public Alignment getAlignment() {
return Alignment.LAWFUL;
return Alignment.CHAOTIC;
}
}

View file

@ -85,6 +85,10 @@ public class EntityRabbit extends EntityAnimal {
return this.moveHelper.isUpdating() && this.moveHelper.getY() > this.posY + 0.5D ? 0.5F : this.moveType.getUpwardsMotion();
}
public boolean isPotionApplicable(Potion potion, int amplifier) {
return super.isPotionApplicable(potion, amplifier) || potion == Potion.JUMP;
}
public void setMoveType(EntityRabbit.EnumMoveType type) {
this.moveType = type;
}

View file

@ -87,20 +87,9 @@ public class EntityWolf extends EntityTameable
{
super.applyEntityAttributes();
this.getEntityAttribute(Attribute.MOVEMENT_SPEED).setBaseValue(0.30000001192092896D);
if (this.isTamed())
{
this.setMaxHealth(20);
}
else
{
this.setMaxHealth(8);
}
this.getAttributeMap().registerAttribute(Attribute.ATTACK_DAMAGE);
this.getEntityAttribute(Attribute.ATTACK_DAMAGE).setBaseValue(2.0D);
}
/**
* Sets the active target the Task system uses for tracking
*/
@ -350,7 +339,7 @@ public class EntityWolf extends EntityTameable
{
if(!this.worldObj.client && !Vars.damageMobs)
return false;
boolean flag = entityIn.attackEntityFrom(DamageSource.causeMobDamage(this), ((int)this.getEntityAttribute(Attribute.ATTACK_DAMAGE).getAttributeValue()));
boolean flag = entityIn.attackEntityFrom(DamageSource.causeMobDamage(this), this.rand.chance(2, 3, 8));
if (flag)
{
@ -360,22 +349,6 @@ public class EntityWolf extends EntityTameable
return flag;
}
public void setTamed(boolean tamed)
{
super.setTamed(tamed);
if (tamed)
{
this.setMaxHealth(20);
}
else
{
this.setMaxHealth(8);
}
this.getEntityAttribute(Attribute.ATTACK_DAMAGE).setBaseValue(4.0D);
}
/**
* Called when a player interacts with a mob. e.g. gets milk from a cow, gets into the saddle on a pig.
*/

View file

@ -550,6 +550,10 @@ public abstract class EntityNPC extends EntityLiving
this.getEntityAttribute(Attribute.MANA_CAPACITY).setBaseValue(20.0D);
}
public boolean isPotionApplicable(Potion potion, int amplifier) {
return true;
}
// protected int getExperiencePoints(EntityNPC player)
// {
// return ;

View file

@ -828,19 +828,8 @@ public abstract class EntityLiving extends Entity
}
}
public boolean isPotionApplicable(Potion potion, int amplifier)
{
// if (this.getCreatureType() == CreatureType.UNDEAD)
// {
// int i = potioneffectIn.getPotionID();
//
// if (i == Potion.regeneration.id || i == Potion.poison.id)
// {
// return false;
// }
// }
return true;
public boolean isPotionApplicable(Potion potion, int amplifier) {
return potion == Potion.SPEED || potion == Potion.SLOWNESS || potion == Potion.HEAL || potion == Potion.DAMAGE || potion == Potion.POISON || potion == Potion.RADIATION;
}
public boolean arePotionsInverted()

View file

@ -110,6 +110,9 @@ public enum SoundEvent {
WOLF_SHAKE("wolf_shake"),
WOLF_WHINE("wolf_whine"),
FOX_DEATH("fox_death"),
FOX_HURT("fox_hurt1", "fox_hurt2"),
SLIME_ATTACK("slime_attack1", "slime_attack2"),
SLIME_BIG("slime_big1", "slime_big2", "slime_big3", "slime_big4"),
SLIME_SMALL("slime_small1", "slime_small2", "slime_small3", "slime_small4", "slime_small5");

View file

@ -3,6 +3,7 @@ package server.biome;
import common.biome.Biome;
import common.block.foliage.BlockDoublePlant;
import common.block.foliage.BlockFlower;
import common.entity.animal.EntityFox;
import common.entity.animal.EntityWolf;
import common.entity.npc.EntityElf;
import common.entity.npc.EntityWoodElf;
@ -67,12 +68,14 @@ public class BiomeForest extends GenBiome
if (this.subType == 0)
{
this.mobs.add(new RngSpawn(EntityWolf.class, 5, 4, 4));
this.mobs.add(new RngSpawn(EntityWolf.class, 5, 2, 4));
this.mobs.add(new RngSpawn(EntityFox.class, 1, 2, 6));
}
if (this.subType == 3)
{
this.treesPerChunk = -999;
this.mobs.add(new RngSpawn(EntityFox.class, 1, 2, 4));
}
if(this.subType != 4) {
@ -81,6 +84,7 @@ public class BiomeForest extends GenBiome
else {
this.mobs.add(new RngSpawn(EntityWoodElf.class, 100, 4, 16));
this.mobs.add(new RngSpawn(EntityElf.class, 12, 4, 16));
this.mobs.add(new RngSpawn(EntityFox.class, 3, 2, 5));
}
}