From ad930fcbdc7a51c76176cef4f6e915144611e5e5 Mon Sep 17 00:00:00 2001 From: Sen Date: Sun, 15 Jun 2025 01:06:10 +0200 Subject: [PATCH] add foxes, temp textures --- .../main/java/client/init/RenderRegistry.java | 3 + .../client/renderer/entity/RenderFox.java | 20 +++ .../java/client/renderer/model/ModelWolf.java | 18 +-- .../main/resources/textures/entity/fox.png | Bin 0 -> 13980 bytes .../java/common/entity/animal/EntityFox.java | 115 ++++++++++++++++++ .../main/java/common/init/EntityRegistry.java | 2 + 6 files changed, 150 insertions(+), 8 deletions(-) create mode 100644 client/src/main/java/client/renderer/entity/RenderFox.java create mode 100755 client/src/main/resources/textures/entity/fox.png create mode 100644 common/src/main/java/common/entity/animal/EntityFox.java diff --git a/client/src/main/java/client/init/RenderRegistry.java b/client/src/main/java/client/init/RenderRegistry.java index 8445a62..1224082 100644 --- a/client/src/main/java/client/init/RenderRegistry.java +++ b/client/src/main/java/client/init/RenderRegistry.java @@ -21,6 +21,7 @@ import client.renderer.entity.RenderFallingBlock; import client.renderer.entity.RenderFireball; import client.renderer.entity.RenderFish; import client.renderer.entity.RenderFlyingBox; +import client.renderer.entity.RenderFox; import client.renderer.entity.RenderHorse; import client.renderer.entity.RenderHumanoid; import client.renderer.entity.RenderItem; @@ -68,6 +69,7 @@ import common.entity.animal.EntityBat; import common.entity.animal.EntityChicken; import common.entity.animal.EntityCow; import common.entity.animal.EntityDragon; +import common.entity.animal.EntityFox; import common.entity.animal.EntityHorse; import common.entity.animal.EntityMooshroom; import common.entity.animal.EntityMouse; @@ -116,6 +118,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(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())); diff --git a/client/src/main/java/client/renderer/entity/RenderFox.java b/client/src/main/java/client/renderer/entity/RenderFox.java new file mode 100644 index 0000000..ebcf25f --- /dev/null +++ b/client/src/main/java/client/renderer/entity/RenderFox.java @@ -0,0 +1,20 @@ +package client.renderer.entity; + +import client.renderer.model.ModelBase; +import common.entity.animal.EntityFox; + +public class RenderFox extends RenderLiving { + private static final String FOX_TEXTURE = "textures/entity/fox.png"; + + public RenderFox(RenderManager renderManagerIn, ModelBase modelBaseIn) { + super(renderManagerIn, modelBaseIn); + } + + protected float handleRotationFloat(EntityFox livingBase, float partialTicks) { + return (float)Math.PI / 5F; + } + + protected String getEntityTexture(EntityFox entity) { + return FOX_TEXTURE; + } +} diff --git a/client/src/main/java/client/renderer/model/ModelWolf.java b/client/src/main/java/client/renderer/model/ModelWolf.java index 7bb6909..3b81da7 100755 --- a/client/src/main/java/client/renderer/model/ModelWolf.java +++ b/client/src/main/java/client/renderer/model/ModelWolf.java @@ -110,11 +110,11 @@ public class ModelWolf extends ModelBase * Used for easily adding entity-dependent animations. The second and third float params here are the same second * and third as in the setRotationAngles method. */ - public void setLivingAnimations(EntityLiving entitylivingbaseIn, float p_78086_2_, float p_78086_3_, float partialTickTime) + public void setLivingAnimations(EntityLiving living, float p_78086_2_, float p_78086_3_, float partialTickTime) { - EntityWolf entitywolf = (EntityWolf)entitylivingbaseIn; + EntityWolf wolf = living instanceof EntityWolf ? (EntityWolf)living : null; - if (entitywolf.isAngry()) + if (wolf != null && 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 (entitywolf.isSitting()) + if (wolf != null && wolf.isSitting()) { this.wolfMane.setRotationPoint(-1.0F, 16.0F, -3.0F); this.wolfMane.rotateAngleX = ((float)Math.PI * 2F / 5F); @@ -157,10 +157,12 @@ public class ModelWolf extends ModelBase this.wolfLeg4.rotateAngleX = ExtMath.cos(p_78086_2_ * 0.6662F) * 1.4F * p_78086_3_; } - this.wolfHeadMain.rotateAngleZ = entitywolf.getInterestedAngle(partialTickTime) + entitywolf.getShakeAngle(partialTickTime, 0.0F); - this.wolfMane.rotateAngleZ = entitywolf.getShakeAngle(partialTickTime, -0.08F); - this.wolfBody.rotateAngleZ = entitywolf.getShakeAngle(partialTickTime, -0.16F); - this.wolfTail.rotateAngleZ = entitywolf.getShakeAngle(partialTickTime, -0.2F); + 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); + } } /** diff --git a/client/src/main/resources/textures/entity/fox.png b/client/src/main/resources/textures/entity/fox.png new file mode 100755 index 0000000000000000000000000000000000000000..0ca12a099b4a34cffab6ee0d85a22964f7287054 GIT binary patch literal 13980 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 literal 0 HcmV?d00001 diff --git a/common/src/main/java/common/entity/animal/EntityFox.java b/common/src/main/java/common/entity/animal/EntityFox.java new file mode 100644 index 0000000..12fc7c7 --- /dev/null +++ b/common/src/main/java/common/entity/animal/EntityFox.java @@ -0,0 +1,115 @@ +package common.entity.animal; + +import common.ai.EntityAIAttackOnCollide; +import common.ai.EntityAIHurtByTarget; +import common.ai.EntityAILeapAtTarget; +import common.ai.EntityAILookIdle; +import common.ai.EntityAIMate; +import common.ai.EntityAISwimming; +import common.ai.EntityAIWander; +import common.ai.EntityAIWatchClosest; +import common.attributes.Attribute; +import common.entity.DamageSource; +import common.entity.Entity; +import common.entity.npc.Alignment; +import common.entity.types.EntityAnimal; +import common.entity.types.EntityLiving; +import common.init.Items; +import common.init.SoundEvent; +import common.item.Item; +import common.item.ItemStack; +import common.pathfinding.PathNavigateGround; +import common.vars.Vars; +import common.world.World; + +public class EntityFox extends EntityAnimal +{ + public EntityFox(World worldIn) + { + super(worldIn); + this.setSize(0.6F, 0.8F); + ((PathNavigateGround)this.getNavigator()).setAvoidsWater(true); + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(3, new EntityAILeapAtTarget(this, 0.4F)); + this.tasks.addTask(4, new EntityAIAttackOnCollide(this, 1.0D, true)); + this.tasks.addTask(6, new EntityAIMate(this, 1.0D)); + this.tasks.addTask(7, new EntityAIWander(this, 1.0D)); + 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)); + } + + 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; + } + + protected SoundEvent getDeathSound() + { + return SoundEvent.WOLF_DEATH; + } + + protected float getSoundVolume() + { + return 0.4F; + } + + protected Item getDropItem() + { + return null; + } + + public float getEyeHeight() + { + return this.height * 0.8F; + } + + public boolean attackEntityAsMob(Entity entityIn) + { + if(!this.worldObj.client && !Vars.damageMobs) + return false; + boolean flag = entityIn.attackEntityFrom(DamageSource.causeMobDamage(this), ((int)this.getEntityAttribute(Attribute.ATTACK_DAMAGE).getAttributeValue())); + + if (flag) + { + this.applyEnchantments(this, entityIn); + } + + return flag; + } + + public boolean isBreedingItem(ItemStack stack) + { + return stack != null && stack.getItem() == Items.apple; + } + + public int getMaxChunkSpawns() + { + return 6; + } + + public EntityFox createChild(EntityLiving ageable) + { + return new EntityFox(this.worldObj); + } + + public int getColor() { + return 0xc35d00; + } + + public Alignment getAlignment() { + return Alignment.LAWFUL; + } +} diff --git a/common/src/main/java/common/init/EntityRegistry.java b/common/src/main/java/common/init/EntityRegistry.java index 6fe113e..e0c9b95 100755 --- a/common/src/main/java/common/init/EntityRegistry.java +++ b/common/src/main/java/common/init/EntityRegistry.java @@ -9,6 +9,7 @@ import common.entity.animal.EntityBat; import common.entity.animal.EntityChicken; import common.entity.animal.EntityCow; import common.entity.animal.EntityDragon; +import common.entity.animal.EntityFox; import common.entity.animal.EntityHorse; import common.entity.animal.EntityMooshroom; import common.entity.animal.EntityMouse; @@ -262,6 +263,7 @@ public abstract class EntityRegistry { registerEntity("Horse", EntityHorse.class, "terra", "Pferd", 12623485, 15656192); registerEntity("Rabbit", EntityRabbit.class, "terra", "Kaninchen", 10051392, 7555121); registerEntity("Mouse", EntityMouse.class, "terra", "Maus", 0x606060, 0xb0b0b0); + registerEntity("Fox", EntityFox.class, "terra", "Fuchs", 0xae5300, 0x622f00); for(int z = 0; z < SpeciesRegistry.SPECIMEN.size(); z++) { SpeciesInfo info = SpeciesRegistry.SPECIMEN.get(z);