Bug entity controllable



  • Bonjour je voudrais créer un kart , j'ai donc fait une entity tout fonctionne , j'ai ajouté le code pour monter dedans et le diriger.

    tout fonctionne mise a part un bug…. lorsque je bouge je revient a la même place au bout d'une seconde ou plus , comme un lag

    voici le code de l'entity si quelqu'un a déjà eu se problème :

    package minecraftkart.common;
    
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.EntityLiving;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.world.World;
    
    import com.sun.xml.internal.bind.v2.schemagen.xmlschema.List;
    
    public class EntityKart extends EntityLiving
    {
    
    private boolean isKartEmpty;
    
    private int i;
    
    public EntityKart(World model) {
    super(model);
    stationary = false;
    
    // TODO Auto-generated constructor stub
    }
    
    public boolean interact(EntityPlayer entityplayer)
    {
    if(riddenByEntity == null || riddenByEntity == entityplayer)
    {
    entityplayer.mountEntity(this);
    return true;
    } else
    {
    return false;
    }
    
    }
    
    public boolean stationary;
    
    protected boolean isMovementCeased()
    {
    return stationary;
    }
    public void moveEntity(double d, double d1, double d2)
    {
    if(riddenByEntity != null)
    {
    stationary = true;
    motionX += riddenByEntity.motionX*5; // * 0.20000000000000001D;
    motionZ += riddenByEntity.motionZ*5; // * 0.20000000000000001D;
    if(isCollidedHorizontally)
    {
    isJumping = true;
    }
    super.moveEntity(motionX, motionY, motionZ);
    }else
    {
    super.moveEntity(d, d1, d2);
    stationary = true;
    }
    }
    
    public double getMountedYOffset() {
    return 0.2D;
    }
    
    public void onUpdate()
    {
    super.onUpdate();
    if (riddenByEntity != null) //check if there is a rider
    {
    //currentTarget = this;
    this.randomYawVelocity = 0; //try not to let the horse control where to look.
    this.rotationYaw = riddenByEntity.rotationYaw;
    }
    
    }
    }
    
    


  • Personne ne connait se problème? 😞



  • dans la console j'ai ca :

    Warning: Clientside chunk ticking took 130 ms

    ca a peu-etre un rapport?



  • Pourquoi tu as mis motionX += riddenByEntity.motionZ*5; ? Moi jàurais mis this.motionX au lieu de riddenByEntity



  • salut quand je met this.Motionx a la place de riddenByEntity je ne peu pas bouger je reste sur place 😞



  • Je sais pourquoi: toi tu mets riddenByEntity et tu déplace donc ce qui est sur l'entité pas elle. Essaye avec autre chose regarde dans la classe du cheval..



  • j'ai déjà essayé de regarder dans horse mais étant débutant dan se domaine , je comprend pas tout encore … j'apprends petit à petit 😞



  • Ne t'inquiètes pas je le suis aussi, j'en suis a mon premier mod, un peu complexe des fois pour moi mais tu vas t'en sortir si tu t'accrocher. Tu peux poster la classe du horse car je suis sur mon tel et mon ordi est éteint.. J'ai pas envie de le rallumer pour apres aller dormir.. ^^



  • je m'accroche mais c'est pas facile au début ^^

    voici la classe :

    package net.minecraft.entity.passive;
    
    import java.util.Iterator;
    import java.util.List;
    import net.minecraft.block.Block;
    import net.minecraft.block.material.Material;
    import net.minecraft.command.IEntitySelector;
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.EntityAgeable;
    import net.minecraft.entity.EntityLivingBase;
    import net.minecraft.entity.IEntityLivingData;
    import net.minecraft.entity.SharedMonsterAttributes;
    import net.minecraft.entity.ai.EntityAIFollowParent;
    import net.minecraft.entity.ai.EntityAILookIdle;
    import net.minecraft.entity.ai.EntityAIMate;
    import net.minecraft.entity.ai.EntityAIPanic;
    import net.minecraft.entity.ai.EntityAIRunAroundLikeCrazy;
    import net.minecraft.entity.ai.EntityAISwimming;
    import net.minecraft.entity.ai.EntityAIWander;
    import net.minecraft.entity.ai.EntityAIWatchClosest;
    import net.minecraft.entity.ai.attributes.IAttribute;
    import net.minecraft.entity.ai.attributes.IAttributeInstance;
    import net.minecraft.entity.ai.attributes.RangedAttribute;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.init.Blocks;
    import net.minecraft.init.Items;
    import net.minecraft.inventory.AnimalChest;
    import net.minecraft.inventory.IInvBasic;
    import net.minecraft.inventory.InventoryBasic;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.nbt.NBTTagCompound;
    import net.minecraft.nbt.NBTTagList;
    import net.minecraft.pathfinding.PathEntity;
    import net.minecraft.potion.Potion;
    import net.minecraft.util.DamageSource;
    import net.minecraft.util.MathHelper;
    import net.minecraft.util.StatCollector;
    import net.minecraft.world.World;
    
    public class EntityHorse extends EntityAnimal implements IInvBasic
    {
       private static final IEntitySelector horseBreedingSelector = new IEntitySelector()
       {
           private static final String __OBFID = "CL_00001642";
           public boolean isEntityApplicable(Entity p_82704_1_)
           {
               return p_82704_1_ instanceof EntityHorse && ((EntityHorse)p_82704_1_).func_110205_ce();
           }
       };
       private static final IAttribute horseJumpStrength = (new RangedAttribute("horse.jumpStrength", 0.7D, 0.0D, 2.0D)).setDescription("Jump Strength").setShouldWatch(true);
       private static final String[] horseArmorTextures = new String[] {null, "textures/entity/horse/armor/horse_armor_iron.png", "textures/entity/horse/armor/horse_armor_gold.png", "textures/entity/horse/armor/horse_armor_diamond.png"};
       private static final String[] field_110273_bx = new String[] {"", "meo", "goo", "dio"};
       private static final int[] armorValues = new int[] {0, 5, 7, 11};
       private static final String[] horseTextures = new String[] {"textures/entity/horse/horse_white.png", "textures/entity/horse/horse_creamy.png", "textures/entity/horse/horse_chestnut.png", "textures/entity/horse/horse_brown.png", "textures/entity/horse/horse_black.png", "textures/entity/horse/horse_gray.png", "textures/entity/horse/horse_darkbrown.png"};
       private static final String[] field_110269_bA = new String[] {"hwh", "hcr", "hch", "hbr", "hbl", "hgr", "hdb"};
       private static final String[] horseMarkingTextures = new String[] {null, "textures/entity/horse/horse_markings_white.png", "textures/entity/horse/horse_markings_whitefield.png", "textures/entity/horse/horse_markings_whitedots.png", "textures/entity/horse/horse_markings_blackdots.png"};
       private static final String[] field_110292_bC = new String[] {"", "wo_", "wmo", "wdo", "bdo"};
       private int eatingHaystackCounter;
       private int openMouthCounter;
       private int jumpRearingCounter;
       public int field_110278_bp;
       public int field_110279_bq;
       protected boolean horseJumping;
       private AnimalChest horseChest;
       private boolean hasReproduced;
    
       /**
        * "The higher this value, the more likely the horse is to be tamed next time a player rides it."
        */
       protected int temper;
       protected float jumpPower;
       private boolean field_110294_bI;
       private float headLean;
       private float prevHeadLean;
       private float rearingAmount;
       private float prevRearingAmount;
       private float mouthOpenness;
       private float prevMouthOpenness;
       private int field_110285_bP;
       private String field_110286_bQ;
       private String[] field_110280_bR = new String[3];
       private static final String __OBFID = "CL_00001641";
    
       public EntityHorse(World p_i1685_1_)
       {
           super(p_i1685_1_);
           this.setSize(1.4F, 1.6F);
           this.isImmuneToFire = false;
           this.setChested(false);
           this.getNavigator().setAvoidsWater(true);
           this.tasks.addTask(0, new EntityAISwimming(this));
           this.tasks.addTask(1, new EntityAIPanic(this, 1.2D));
           this.tasks.addTask(1, new EntityAIRunAroundLikeCrazy(this, 1.2D));
           this.tasks.addTask(2, new EntityAIMate(this, 1.0D));
           this.tasks.addTask(4, new EntityAIFollowParent(this, 1.0D));
           this.tasks.addTask(6, new EntityAIWander(this, 0.7D));
           this.tasks.addTask(7, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F));
           this.tasks.addTask(8, new EntityAILookIdle(this));
           this.func_110226_cD();
       }
    
       protected void entityInit()
       {
           super.entityInit();
           this.dataWatcher.addObject(16, Integer.valueOf(0));
           this.dataWatcher.addObject(19, Byte.valueOf((byte)0));
           this.dataWatcher.addObject(20, Integer.valueOf(0));
           this.dataWatcher.addObject(21, String.valueOf(""));
           this.dataWatcher.addObject(22, Integer.valueOf(0));
       }
    
       public void setHorseType(int p_110214_1_)
       {
           this.dataWatcher.updateObject(19, Byte.valueOf((byte)p_110214_1_));
           this.func_110230_cF();
       }
    
       /**
        * returns the horse type
        */
       public int getHorseType()
       {
           return this.dataWatcher.getWatchableObjectByte(19);
       }
    
       public void setHorseVariant(int p_110235_1_)
       {
           this.dataWatcher.updateObject(20, Integer.valueOf(p_110235_1_));
           this.func_110230_cF();
       }
    
       public int getHorseVariant()
       {
           return this.dataWatcher.getWatchableObjectInt(20);
       }
    
       /**
        * Gets the name of this command sender (usually username, but possibly "Rcon")
        */
       public String getCommandSenderName()
       {
           if (this.hasCustomNameTag())
           {
               return this.getCustomNameTag();
           }
           else
           {
               int var1 = this.getHorseType();
    
               switch (var1)
               {
                   case 0:
                   default:
                       return StatCollector.translateToLocal("entity.horse.name");
    
                   case 1:
                       return StatCollector.translateToLocal("entity.donkey.name");
    
                   case 2:
                       return StatCollector.translateToLocal("entity.mule.name");
    
                   case 3:
                       return StatCollector.translateToLocal("entity.zombiehorse.name");
    
                   case 4:
                       return StatCollector.translateToLocal("entity.skeletonhorse.name");
               }
           }
       }
    
       private boolean getHorseWatchableBoolean(int p_110233_1_)
       {
           return (this.dataWatcher.getWatchableObjectInt(16) & p_110233_1_) != 0;
       }
    
       private void setHorseWatchableBoolean(int p_110208_1_, boolean p_110208_2_)
       {
           int var3 = this.dataWatcher.getWatchableObjectInt(16);
    
           if (p_110208_2_)
           {
               this.dataWatcher.updateObject(16, Integer.valueOf(var3 | p_110208_1_));
           }
           else
           {
               this.dataWatcher.updateObject(16, Integer.valueOf(var3 & ~p_110208_1_));
           }
       }
    
       public boolean isAdultHorse()
       {
           return !this.isChild();
       }
    
       public boolean isTame()
       {
           return this.getHorseWatchableBoolean(2);
       }
    
       public boolean func_110253_bW()
       {
           return this.isAdultHorse();
       }
    
       public String func_152119_ch()
       {
           return this.dataWatcher.getWatchableObjectString(21);
       }
    
       public void func_152120_b(String p_152120_1_)
       {
           this.dataWatcher.updateObject(21, p_152120_1_);
       }
    
       public float getHorseSize()
       {
           int var1 = this.getGrowingAge();
           return var1 >= 0 ? 1.0F : 0.5F + (float)(-24000 - var1) / -24000.0F * 0.5F;
       }
    
       /**
        * "Sets the scale for an ageable entity according to the boolean parameter, which says if it's a child."
        */
       public void setScaleForAge(boolean p_98054_1_)
       {
           if (p_98054_1_)
           {
               this.setScale(this.getHorseSize());
           }
           else
           {
               this.setScale(1.0F);
           }
       }
    
       public boolean isHorseJumping()
       {
           return this.horseJumping;
       }
    
       public void setHorseTamed(boolean p_110234_1_)
       {
           this.setHorseWatchableBoolean(2, p_110234_1_);
       }
    
       public void setHorseJumping(boolean p_110255_1_)
       {
           this.horseJumping = p_110255_1_;
       }
    
       public boolean allowLeashing()
       {
           return !this.func_110256_cu() && super.allowLeashing();
       }
    
       protected void func_142017_o(float p_142017_1_)
       {
           if (p_142017_1_ > 6.0F && this.isEatingHaystack())
           {
               this.setEatingHaystack(false);
           }
       }
    
       public boolean isChested()
       {
           return this.getHorseWatchableBoolean(8);
       }
    
       public int func_110241_cb()
       {
           return this.dataWatcher.getWatchableObjectInt(22);
       }
    
       /**
        * 0 = iron, 1 = gold, 2 = diamond
        */
       private int getHorseArmorIndex(ItemStack p_110260_1_)
       {
           if (p_110260_1_ == null)
           {
               return 0;
           }
           else
           {
               Item var2 = p_110260_1_.getItem();
               return var2 == Items.iron_horse_armor ? 1 : (var2 == Items.golden_horse_armor ? 2 : (var2 == Items.diamond_horse_armor ? 3 : 0));
           }
       }
    
       public boolean isEatingHaystack()
       {
           return this.getHorseWatchableBoolean(32);
       }
    
       public boolean isRearing()
       {
           return this.getHorseWatchableBoolean(64);
       }
    
       public boolean func_110205_ce()
       {
           return this.getHorseWatchableBoolean(16);
       }
    
       public boolean getHasReproduced()
       {
           return this.hasReproduced;
       }
    
       public void func_146086_d(ItemStack p_146086_1_)
       {
           this.dataWatcher.updateObject(22, Integer.valueOf(this.getHorseArmorIndex(p_146086_1_)));
           this.func_110230_cF();
       }
    
       public void func_110242_l(boolean p_110242_1_)
       {
           this.setHorseWatchableBoolean(16, p_110242_1_);
       }
    
       public void setChested(boolean p_110207_1_)
       {
           this.setHorseWatchableBoolean(8, p_110207_1_);
       }
    
       public void setHasReproduced(boolean p_110221_1_)
       {
           this.hasReproduced = p_110221_1_;
       }
    
       public void setHorseSaddled(boolean p_110251_1_)
       {
           this.setHorseWatchableBoolean(4, p_110251_1_);
       }
    
       public int getTemper()
       {
           return this.temper;
       }
    
       public void setTemper(int p_110238_1_)
       {
           this.temper = p_110238_1_;
       }
    
       public int increaseTemper(int p_110198_1_)
       {
           int var2 = MathHelper.clamp_int(this.getTemper() + p_110198_1_, 0, this.getMaxTemper());
           this.setTemper(var2);
           return var2;
       }
    
       /**
        * Called when the entity is attacked.
        */
       public boolean attackEntityFrom(DamageSource p_70097_1_, float p_70097_2_)
       {
           Entity var3 = p_70097_1_.getEntity();
           return this.riddenByEntity != null && this.riddenByEntity.equals(var3) ? false : super.attackEntityFrom(p_70097_1_, p_70097_2_);
       }
    
       /**
        * Returns the current armor value as determined by a call to InventoryPlayer.getTotalArmorValue
        */
       public int getTotalArmorValue()
       {
           return armorValues[this.func_110241_cb()];
       }
    
       /**
        * Returns true if this entity should push and be pushed by other entities when colliding.
        */
       public boolean canBePushed()
       {
           return this.riddenByEntity == null;
       }
    
       public boolean prepareChunkForSpawn()
       {
           int var1 = MathHelper.floor_double(this.posX);
           int var2 = MathHelper.floor_double(this.posZ);
           this.worldObj.getBiomeGenForCoords(var1, var2);
           return true;
       }
    
       public void dropChests()
       {
           if (!this.worldObj.isClient && this.isChested())
           {
               this.func_145779_a(Item.getItemFromBlock(Blocks.chest), 1);
               this.setChested(false);
           }
       }
    
       private void func_110266_cB()
       {
           this.openHorseMouth();
           this.worldObj.playSoundAtEntity(this, "eating", 1.0F, 1.0F + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F);
       }
    
       /**
        * Called when the mob is falling. Calculates and applies fall damage.
        */
       protected void fall(float p_70069_1_)
       {
           if (p_70069_1_ > 1.0F)
           {
               this.playSound("mob.horse.land", 0.4F, 1.0F);
           }
    
           int var2 = MathHelper.ceiling_float_int(p_70069_1_ * 0.5F - 3.0F);
    
           if (var2 > 0)
           {
               this.attackEntityFrom(DamageSource.fall, (float)var2);
    
               if (this.riddenByEntity != null)
               {
                   this.riddenByEntity.attackEntityFrom(DamageSource.fall, (float)var2);
               }
    
               Block var3 = this.worldObj.getBlock(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY - 0.2D - (double)this.prevRotationYaw), MathHelper.floor_double(this.posZ));
    
               if (var3.getMaterial() != Material.air)
               {
                   Block.SoundType var4 = var3.stepSound;
                   this.worldObj.playSoundAtEntity(this, var4.func_150498_e(), var4.func_150497_c() * 0.5F, var4.func_150494_d() * 0.75F);
               }
           }
       }
    
       private int func_110225_cC()
       {
           int var1 = this.getHorseType();
           return this.isChested() && (var1 == 1 || var1 == 2) ? 17 : 2;
       }
    
       private void func_110226_cD()
       {
           AnimalChest var1 = this.horseChest;
           this.horseChest = new AnimalChest("HorseChest", this.func_110225_cC());
           this.horseChest.func_110133_a(this.getCommandSenderName());
    
           if (var1 != null)
           {
               var1.func_110132_b(this);
               int var2 = Math.min(var1.getSizeInventory(), this.horseChest.getSizeInventory());
    
               for (int var3 = 0; var3 < var2; ++var3)
               {
                   ItemStack var4 = var1.getStackInSlot(var3);
    
                   if (var4 != null)
                   {
                       this.horseChest.setInventorySlotContents(var3, var4.copy());
                   }
               }
    
               var1 = null;
           }
    
           this.horseChest.func_110134_a(this);
           this.func_110232_cE();
       }
    
       private void func_110232_cE()
       {
           if (!this.worldObj.isClient)
           {
               this.setHorseSaddled(this.horseChest.getStackInSlot(0) != null);
    
               if (this.func_110259_cr())
               {
                   this.func_146086_d(this.horseChest.getStackInSlot(1));
               }
           }
       }
    
       /**
        * Called by InventoryBasic.onInventoryChanged() on a array that is never filled.
        */
       public void onInventoryChanged(InventoryBasic p_76316_1_)
       {
           int var2 = this.func_110241_cb();
           boolean var3 = this.isHorseSaddled();
           this.func_110232_cE();
    
           if (this.ticksExisted > 20)
           {
               if (var2 == 0 && var2 != this.func_110241_cb())
               {
                   this.playSound("mob.horse.armor", 0.5F, 1.0F);
               }
               else if (var2 != this.func_110241_cb())
               {
                   this.playSound("mob.horse.armor", 0.5F, 1.0F);
               }
    
               if (!var3 && this.isHorseSaddled())
               {
                   this.playSound("mob.horse.leather", 0.5F, 1.0F);
               }
           }
       }
    
       /**
        * Checks if the entity's current position is a valid location to spawn this entity.
        */
       public boolean getCanSpawnHere()
       {
           this.prepareChunkForSpawn();
           return super.getCanSpawnHere();
       }
    
       protected EntityHorse getClosestHorse(Entity p_110250_1_, double p_110250_2_)
       {
           double var4 = Double.MAX_VALUE;
           Entity var6 = null;
           List var7 = this.worldObj.getEntitiesWithinAABBExcludingEntity(p_110250_1_, p_110250_1_.boundingBox.addCoord(p_110250_2_, p_110250_2_, p_110250_2_), horseBreedingSelector);
           Iterator var8 = var7.iterator();
    
           while (var8.hasNext())
           {
               Entity var9 = (Entity)var8.next();
               double var10 = var9.getDistanceSq(p_110250_1_.posX, p_110250_1_.posY, p_110250_1_.posZ);
    
               if (var10 < var4)
               {
                   var6 = var9;
                   var4 = var10;
               }
           }
    
           return (EntityHorse)var6;
       }
    
       public double getHorseJumpStrength()
       {
           return this.getEntityAttribute(horseJumpStrength).getAttributeValue();
       }
    
       /**
        * Returns the sound this mob makes on death.
        */
       protected String getDeathSound()
       {
           this.openHorseMouth();
           int var1 = this.getHorseType();
           return var1 == 3 ? "mob.horse.zombie.death" : (var1 == 4 ? "mob.horse.skeleton.death" : (var1 != 1 && var1 != 2 ? "mob.horse.death" : "mob.horse.donkey.death"));
       }
    
       protected Item func_146068_u()
       {
           boolean var1 = this.rand.nextInt(4) == 0;
           int var2 = this.getHorseType();
           return var2 == 4 ? Items.bone : (var2 == 3 ? (var1 ? Item.getItemById(0) : Items.rotten_flesh) : Items.leather);
       }
    
       /**
        * Returns the sound this mob makes when it is hurt.
        */
       protected String getHurtSound()
       {
           this.openHorseMouth();
    
           if (this.rand.nextInt(3) == 0)
           {
               this.makeHorseRear();
           }
    
           int var1 = this.getHorseType();
           return var1 == 3 ? "mob.horse.zombie.hit" : (var1 == 4 ? "mob.horse.skeleton.hit" : (var1 != 1 && var1 != 2 ? "mob.horse.hit" : "mob.horse.donkey.hit"));
       }
    
       public boolean isHorseSaddled()
       {
           return this.getHorseWatchableBoolean(4);
       }
    
       /**
        * Returns the sound this mob makes while it's alive.
        */
       protected String getLivingSound()
       {
           this.openHorseMouth();
    
           if (this.rand.nextInt(10) == 0 && !this.isMovementBlocked())
           {
               this.makeHorseRear();
           }
    
           int var1 = this.getHorseType();
           return var1 == 3 ? "mob.horse.zombie.idle" : (var1 == 4 ? "mob.horse.skeleton.idle" : (var1 != 1 && var1 != 2 ? "mob.horse.idle" : "mob.horse.donkey.idle"));
       }
    
       protected String getAngrySoundName()
       {
           this.openHorseMouth();
           this.makeHorseRear();
           int var1 = this.getHorseType();
           return var1 != 3 && var1 != 4 ? (var1 != 1 && var1 != 2 ? "mob.horse.angry" : "mob.horse.donkey.angry") : null;
       }
    
       protected void func_145780_a(int p_145780_1_, int p_145780_2_, int p_145780_3_, Block p_145780_4_)
       {
           Block.SoundType var5 = p_145780_4_.stepSound;
    
           if (this.worldObj.getBlock(p_145780_1_, p_145780_2_ + 1, p_145780_3_) == Blocks.snow_layer)
           {
               var5 = Blocks.snow_layer.stepSound;
           }
    
           if (!p_145780_4_.getMaterial().isLiquid())
           {
               int var6 = this.getHorseType();
    
               if (this.riddenByEntity != null && var6 != 1 && var6 != 2)
               {
                   ++this.field_110285_bP;
    
                   if (this.field_110285_bP > 5 && this.field_110285_bP % 3 == 0)
                   {
                       this.playSound("mob.horse.gallop", var5.func_150497_c() * 0.15F, var5.func_150494_d());
    
                       if (var6 == 0 && this.rand.nextInt(10) == 0)
                       {
                           this.playSound("mob.horse.breathe", var5.func_150497_c() * 0.6F, var5.func_150494_d());
                       }
                   }
                   else if (this.field_110285_bP <= 5)
                   {
                       this.playSound("mob.horse.wood", var5.func_150497_c() * 0.15F, var5.func_150494_d());
                   }
               }
               else if (var5 == Block.soundTypeWood)
               {
                   this.playSound("mob.horse.wood", var5.func_150497_c() * 0.15F, var5.func_150494_d());
               }
               else
               {
                   this.playSound("mob.horse.soft", var5.func_150497_c() * 0.15F, var5.func_150494_d());
               }
           }
       }
    
       protected void applyEntityAttributes()
       {
           super.applyEntityAttributes();
           this.getAttributeMap().registerAttribute(horseJumpStrength);
           this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(53.0D);
           this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.22499999403953552D);
       }
    
       /**
        * Will return how many at most can spawn in a chunk at once.
        */
       public int getMaxSpawnedInChunk()
       {
           return 6;
       }
    
       public int getMaxTemper()
       {
           return 100;
       }
    
       /**
        * Returns the volume for the sounds this mob makes.
        */
       protected float getSoundVolume()
       {
           return 0.8F;
       }
    
       /**
        * Get number of ticks, at least during which the living entity will be silent.
        */
       public int getTalkInterval()
       {
           return 400;
       }
    
       public boolean func_110239_cn()
       {
           return this.getHorseType() == 0 || this.func_110241_cb() > 0;
       }
    
       private void func_110230_cF()
       {
           this.field_110286_bQ = null;
       }
    
       private void setHorseTexturePaths()
       {
           this.field_110286_bQ = "horse/";
           this.field_110280_bR[0] = null;
           this.field_110280_bR[1] = null;
           this.field_110280_bR[2] = null;
           int var1 = this.getHorseType();
           int var2 = this.getHorseVariant();
           int var3;
    
           if (var1 == 0)
           {
               var3 = var2 & 255;
               int var4 = (var2 & 65280) >> 8;
               this.field_110280_bR[0] = horseTextures[var3];
               this.field_110286_bQ = this.field_110286_bQ + field_110269_bA[var3];
               this.field_110280_bR[1] = horseMarkingTextures[var4];
               this.field_110286_bQ = this.field_110286_bQ + field_110292_bC[var4];
           }
           else
           {
               this.field_110280_bR[0] = "";
               this.field_110286_bQ = this.field_110286_bQ + "_" + var1 + "_";
           }
    
           var3 = this.func_110241_cb();
           this.field_110280_bR[2] = horseArmorTextures[var3];
           this.field_110286_bQ = this.field_110286_bQ + field_110273_bx[var3];
       }
    
       public String getHorseTexture()
       {
           if (this.field_110286_bQ == null)
           {
               this.setHorseTexturePaths();
           }
    
           return this.field_110286_bQ;
       }
    
       public String[] getVariantTexturePaths()
       {
           if (this.field_110286_bQ == null)
           {
               this.setHorseTexturePaths();
           }
    
           return this.field_110280_bR;
       }
    
       public void openGUI(EntityPlayer p_110199_1_)
       {
           if (!this.worldObj.isClient && (this.riddenByEntity == null || this.riddenByEntity == p_110199_1_) && this.isTame())
           {
               this.horseChest.func_110133_a(this.getCommandSenderName());
               p_110199_1_.displayGUIHorse(this, this.horseChest);
           }
       }
    
       /**
        * Called when a player interacts with a mob. e.g. gets milk from a cow, gets into the saddle on a pig.
        */
       public boolean interact(EntityPlayer p_70085_1_)
       {
           ItemStack var2 = p_70085_1_.inventory.getCurrentItem();
    
           if (var2 != null && var2.getItem() == Items.spawn_egg)
           {
               return super.interact(p_70085_1_);
           }
           else if (!this.isTame() && this.func_110256_cu())
           {
               return false;
           }
           else if (this.isTame() && this.isAdultHorse() && p_70085_1_.isSneaking())
           {
               this.openGUI(p_70085_1_);
               return true;
           }
           else if (this.func_110253_bW() && this.riddenByEntity != null)
           {
               return super.interact(p_70085_1_);
           }
           else
           {
               if (var2 != null)
               {
                   boolean var3 = false;
    
                   if (this.func_110259_cr())
                   {
                       byte var4 = -1;
    
                       if (var2.getItem() == Items.iron_horse_armor)
                       {
                           var4 = 1;
                       }
                       else if (var2.getItem() == Items.golden_horse_armor)
                       {
                           var4 = 2;
                       }
                       else if (var2.getItem() == Items.diamond_horse_armor)
                       {
                           var4 = 3;
                       }
    
                       if (var4 >= 0)
                       {
                           if (!this.isTame())
                           {
                               this.makeHorseRearWithSound();
                               return true;
                           }
    
                           this.openGUI(p_70085_1_);
                           return true;
                       }
                   }
    
                   if (!var3 && !this.func_110256_cu())
                   {
                       float var7 = 0.0F;
                       short var5 = 0;
                       byte var6 = 0;
    
                       if (var2.getItem() == Items.wheat)
                       {
                           var7 = 2.0F;
                           var5 = 60;
                           var6 = 3;
                       }
                       else if (var2.getItem() == Items.sugar)
                       {
                           var7 = 1.0F;
                           var5 = 30;
                           var6 = 3;
                       }
                       else if (var2.getItem() == Items.bread)
                       {
                           var7 = 7.0F;
                           var5 = 180;
                           var6 = 3;
                       }
                       else if (Block.getBlockFromItem(var2.getItem()) == Blocks.hay_block)
                       {
                           var7 = 20.0F;
                           var5 = 180;
                       }
                       else if (var2.getItem() == Items.apple)
                       {
                           var7 = 3.0F;
                           var5 = 60;
                           var6 = 3;
                       }
                       else if (var2.getItem() == Items.golden_carrot)
                       {
                           var7 = 4.0F;
                           var5 = 60;
                           var6 = 5;
    
                           if (this.isTame() && this.getGrowingAge() == 0)
                           {
                               var3 = true;
                               this.func_146082_f(p_70085_1_);
                           }
                       }
                       else if (var2.getItem() == Items.golden_apple)
                       {
                           var7 = 10.0F;
                           var5 = 240;
                           var6 = 10;
    
                           if (this.isTame() && this.getGrowingAge() == 0)
                           {
                               var3 = true;
                               this.func_146082_f(p_70085_1_);
                           }
                       }
    
                       if (this.getHealth() < this.getMaxHealth() && var7 > 0.0F)
                       {
                           this.heal(var7);
                           var3 = true;
                       }
    
                       if (!this.isAdultHorse() && var5 > 0)
                       {
                           this.addGrowth(var5);
                           var3 = true;
                       }
    
                       if (var6 > 0 && (var3 || !this.isTame()) && var6 < this.getMaxTemper())
                       {
                           var3 = true;
                           this.increaseTemper(var6);
                       }
    
                       if (var3)
                       {
                           this.func_110266_cB();
                       }
                   }
    
                   if (!this.isTame() && !var3)
                   {
                       if (var2 != null && var2.interactWithEntity(p_70085_1_, this))
                       {
                           return true;
                       }
    
                       this.makeHorseRearWithSound();
                       return true;
                   }
    
                   if (!var3 && this.func_110229_cs() && !this.isChested() && var2.getItem() == Item.getItemFromBlock(Blocks.chest))
                   {
                       this.setChested(true);
                       this.playSound("mob.chickenplop", 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F);
                       var3 = true;
                       this.func_110226_cD();
                   }
    
                   if (!var3 && this.func_110253_bW() && !this.isHorseSaddled() && var2.getItem() == Items.saddle)
                   {
                       this.openGUI(p_70085_1_);
                       return true;
                   }
    
                   if (var3)
                   {
                       if (!p_70085_1_.capabilities.isCreativeMode && –var2.stackSize == 0)
                       {
                           p_70085_1_.inventory.setInventorySlotContents(p_70085_1_.inventory.currentItem, (ItemStack)null);
                       }
    
                       return true;
                   }
               }
    
               if (this.func_110253_bW() && this.riddenByEntity == null)
               {
                   if (var2 != null && var2.interactWithEntity(p_70085_1_, this))
                   {
                       return true;
                   }
                   else
                   {
                       this.func_110237_h(p_70085_1_);
                       return true;
                   }
               }
               else
               {
                   return super.interact(p_70085_1_);
               }
           }
       }
    
       private void func_110237_h(EntityPlayer p_110237_1_)
       {
           p_110237_1_.rotationYaw = this.rotationYaw;
           p_110237_1_.rotationPitch = this.rotationPitch;
           this.setEatingHaystack(false);
           this.setRearing(false);
    
           if (!this.worldObj.isClient)
           {
               p_110237_1_.mountEntity(this);
           }
       }
    
       public boolean func_110259_cr()
       {
           return this.getHorseType() == 0;
       }
    
       public boolean func_110229_cs()
       {
           int var1 = this.getHorseType();
           return var1 == 2 || var1 == 1;
       }
    
       /**
        * Dead and sleeping entities cannot move
        */
       protected boolean isMovementBlocked()
       {
           return this.riddenByEntity != null && this.isHorseSaddled() ? true : this.isEatingHaystack() || this.isRearing();
       }
    
       public boolean func_110256_cu()
       {
           int var1 = this.getHorseType();
           return var1 == 3 || var1 == 4;
       }
    
       public boolean func_110222_cv()
       {
           return this.func_110256_cu() || this.getHorseType() == 2;
       }
    
       /**
        * Checks if the parameter is an item which this animal can be fed to breed it (wheat, carrots or seeds depending on
        * the animal type)
        */
       public boolean isBreedingItem(ItemStack p_70877_1_)
       {
           return false;
       }
    
       private void func_110210_cH()
       {
           this.field_110278_bp = 1;
       }
    
       /**
        * Called when the mob's health reaches 0.
        */
       public void onDeath(DamageSource p_70645_1_)
       {
           super.onDeath(p_70645_1_);
    
           if (!this.worldObj.isClient)
           {
               this.dropChestItems();
           }
       }
    
       /**
        * 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.
        */
       public void onLivingUpdate()
       {
           if (this.rand.nextInt(200) == 0)
           {
               this.func_110210_cH();
           }
    
           super.onLivingUpdate();
    
           if (!this.worldObj.isClient)
           {
               if (this.rand.nextInt(900) == 0 && this.deathTime == 0)
               {
                   this.heal(1.0F);
               }
    
               if (!this.isEatingHaystack() && this.riddenByEntity == null && this.rand.nextInt(300) == 0 && this.worldObj.getBlock(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY) - 1, MathHelper.floor_double(this.posZ)) == Blocks.grass)
               {
                   this.setEatingHaystack(true);
               }
    
               if (this.isEatingHaystack() && ++this.eatingHaystackCounter > 50)
               {
                   this.eatingHaystackCounter = 0;
                   this.setEatingHaystack(false);
               }
    
               if (this.func_110205_ce() && !this.isAdultHorse() && !this.isEatingHaystack())
               {
                   EntityHorse var1 = this.getClosestHorse(this, 16.0D);
    
                   if (var1 != null && this.getDistanceSqToEntity(var1) > 4.0D)
                   {
                       PathEntity var2 = this.worldObj.getPathEntityToEntity(this, var1, 16.0F, true, false, false, true);
                       this.setPathToEntity(var2);
                   }
               }
           }
       }
    
       /**
        * Called to update the entity's position/logic.
        */
       public void onUpdate()
       {
           super.onUpdate();
    
           if (this.worldObj.isClient && this.dataWatcher.hasChanges())
           {
               this.dataWatcher.func_111144_e();
               this.func_110230_cF();
           }
    
           if (this.openMouthCounter > 0 && ++this.openMouthCounter > 30)
           {
               this.openMouthCounter = 0;
               this.setHorseWatchableBoolean(128, false);
           }
    
           if (!this.worldObj.isClient && this.jumpRearingCounter > 0 && ++this.jumpRearingCounter > 20)
           {
               this.jumpRearingCounter = 0;
               this.setRearing(false);
           }
    
           if (this.field_110278_bp > 0 && ++this.field_110278_bp > 8)
           {
               this.field_110278_bp = 0;
           }
    
           if (this.field_110279_bq > 0)
           {
               ++this.field_110279_bq;
    
               if (this.field_110279_bq > 300)
               {
                   this.field_110279_bq = 0;
               }
           }
    
           this.prevHeadLean = this.headLean;
    
           if (this.isEatingHaystack())
           {
               this.headLean += (1.0F - this.headLean) * 0.4F + 0.05F;
    
               if (this.headLean > 1.0F)
               {
                   this.headLean = 1.0F;
               }
           }
           else
           {
               this.headLean += (0.0F - this.headLean) * 0.4F - 0.05F;
    
               if (this.headLean < 0.0F)
               {
                   this.headLean = 0.0F;
               }
           }
    
           this.prevRearingAmount = this.rearingAmount;
    
           if (this.isRearing())
           {
               this.prevHeadLean = this.headLean = 0.0F;
               this.rearingAmount += (1.0F - this.rearingAmount) * 0.4F + 0.05F;
    
               if (this.rearingAmount > 1.0F)
               {
                   this.rearingAmount = 1.0F;
               }
           }
           else
           {
               this.field_110294_bI = false;
               this.rearingAmount += (0.8F * this.rearingAmount * this.rearingAmount * this.rearingAmount - this.rearingAmount) * 0.6F - 0.05F;
    
               if (this.rearingAmount < 0.0F)
               {
                   this.rearingAmount = 0.0F;
               }
           }
    
           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;
               }
           }
       }
    
       private void openHorseMouth()
       {
           if (!this.worldObj.isClient)
           {
               this.openMouthCounter = 1;
               this.setHorseWatchableBoolean(128, true);
           }
       }
    
       private boolean func_110200_cJ()
       {
           return this.riddenByEntity == null && this.ridingEntity == null && this.isTame() && this.isAdultHorse() && !this.func_110222_cv() && this.getHealth() >= this.getMaxHealth();
       }
    
       public void setEating(boolean p_70019_1_)
       {
           this.setHorseWatchableBoolean(32, p_70019_1_);
       }
    
       public void setEatingHaystack(boolean p_110227_1_)
       {
           this.setEating(p_110227_1_);
       }
    
       public void setRearing(boolean p_110219_1_)
       {
           if (p_110219_1_)
           {
               this.setEatingHaystack(false);
           }
    
           this.setHorseWatchableBoolean(64, p_110219_1_);
       }
    
       private void makeHorseRear()
       {
           if (!this.worldObj.isClient)
           {
               this.jumpRearingCounter = 1;
               this.setRearing(true);
           }
       }
    
       public void makeHorseRearWithSound()
       {
           this.makeHorseRear();
           String var1 = this.getAngrySoundName();
    
           if (var1 != null)
           {
               this.playSound(var1, this.getSoundVolume(), this.getSoundPitch());
           }
       }
    
       public void dropChestItems()
       {
           this.dropItemsInChest(this, this.horseChest);
           this.dropChests();
       }
    
       private void dropItemsInChest(Entity p_110240_1_, AnimalChest p_110240_2_)
       {
           if (p_110240_2_ != null && !this.worldObj.isClient)
           {
               for (int var3 = 0; var3 < p_110240_2_.getSizeInventory(); ++var3)
               {
                   ItemStack var4 = p_110240_2_.getStackInSlot(var3);
    
                   if (var4 != null)
                   {
                       this.entityDropItem(var4, 0.0F);
                   }
               }
           }
       }
    
       public boolean setTamedBy(EntityPlayer p_110263_1_)
       {
           this.func_152120_b(p_110263_1_.getUniqueID().toString());
           this.setHorseTamed(true);
           return true;
       }
    
       /**
        * Moves the entity based on the specified heading.  Args: strafe, forward
        */
       public void moveEntityWithHeading(float p_70612_1_, float p_70612_2_)
       {
           if (this.riddenByEntity != null && this.riddenByEntity instanceof EntityLivingBase && this.isHorseSaddled())
           {
               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;
               p_70612_1_ = ((EntityLivingBase)this.riddenByEntity).moveStrafing * 0.5F;
               p_70612_2_ = ((EntityLivingBase)this.riddenByEntity).moveForward;
    
               if (p_70612_2_ <= 0.0F)
               {
                   p_70612_2_ *= 0.25F;
                   this.field_110285_bP = 0;
               }
    
               if (this.onGround && this.jumpPower == 0.0F && this.isRearing() && !this.field_110294_bI)
               {
                   p_70612_1_ = 0.0F;
                   p_70612_2_ = 0.0F;
               }
    
               if (this.jumpPower > 0.0F && !this.isHorseJumping() && this.onGround)
               {
                   this.motionY = this.getHorseJumpStrength() * (double)this.jumpPower;
    
                   if (this.isPotionActive(Potion.jump))
                   {
                       this.motionY += (double)((float)(this.getActivePotionEffect(Potion.jump).getAmplifier() + 1) * 0.1F);
                   }
    
                   this.setHorseJumping(true);
                   this.isAirBorne = true;
    
                   if (p_70612_2_ > 0.0F)
                   {
                       float var3 = MathHelper.sin(this.rotationYaw * (float)Math.PI / 180.0F);
                       float var4 = MathHelper.cos(this.rotationYaw * (float)Math.PI / 180.0F);
                       this.motionX += (double)(-0.4F * var3 * this.jumpPower);
                       this.motionZ += (double)(0.4F * var4 * this.jumpPower);
                       this.playSound("mob.horse.jump", 0.4F, 1.0F);
                   }
    
                   this.jumpPower = 0.0F;
               }
    
               this.stepHeight = 1.0F;
               this.jumpMovementFactor = this.getAIMoveSpeed() * 0.1F;
    
               if (!this.worldObj.isClient)
               {
                   this.setAIMoveSpeed((float)this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getAttributeValue());
                   super.moveEntityWithHeading(p_70612_1_, p_70612_2_);
               }
    
               if (this.onGround)
               {
                   this.jumpPower = 0.0F;
                   this.setHorseJumping(false);
               }
    
               this.prevLimbSwingAmount = this.limbSwingAmount;
               double var8 = this.posX - this.prevPosX;
               double var5 = this.posZ - this.prevPosZ;
               float var7 = MathHelper.sqrt_double(var8 * var8 + var5 * var5) * 4.0F;
    
               if (var7 > 1.0F)
               {
                   var7 = 1.0F;
               }
    
               this.limbSwingAmount += (var7 - this.limbSwingAmount) * 0.4F;
               this.limbSwing += this.limbSwingAmount;
           }
           else
           {
               this.stepHeight = 0.5F;
               this.jumpMovementFactor = 0.02F;
               super.moveEntityWithHeading(p_70612_1_, p_70612_2_);
           }
       }
    
       /**
        * (abstract) Protected helper method to write subclass entity data to NBT.
        */
       public void writeEntityToNBT(NBTTagCompound p_70014_1_)
       {
           super.writeEntityToNBT(p_70014_1_);
           p_70014_1_.setBoolean("EatingHaystack", this.isEatingHaystack());
           p_70014_1_.setBoolean("ChestedHorse", this.isChested());
           p_70014_1_.setBoolean("HasReproduced", this.getHasReproduced());
           p_70014_1_.setBoolean("Bred", this.func_110205_ce());
           p_70014_1_.setInteger("Type", this.getHorseType());
           p_70014_1_.setInteger("Variant", this.getHorseVariant());
           p_70014_1_.setInteger("Temper", this.getTemper());
           p_70014_1_.setBoolean("Tame", this.isTame());
           p_70014_1_.setString("OwnerUUID", this.func_152119_ch());
    
           if (this.isChested())
           {
               NBTTagList var2 = new NBTTagList();
    
               for (int var3 = 2; var3 < this.horseChest.getSizeInventory(); ++var3)
               {
                   ItemStack var4 = this.horseChest.getStackInSlot(var3);
    
                   if (var4 != null)
                   {
                       NBTTagCompound var5 = new NBTTagCompound();
                       var5.setByte("Slot", (byte)var3);
                       var4.writeToNBT(var5);
                       var2.appendTag(var5);
                   }
               }
    
               p_70014_1_.setTag("Items", var2);
           }
    
           if (this.horseChest.getStackInSlot(1) != null)
           {
               p_70014_1_.setTag("ArmorItem", this.horseChest.getStackInSlot(1).writeToNBT(new NBTTagCompound()));
           }
    
           if (this.horseChest.getStackInSlot(0) != null)
           {
               p_70014_1_.setTag("SaddleItem", this.horseChest.getStackInSlot(0).writeToNBT(new NBTTagCompound()));
           }
       }
    
       /**
        * (abstract) Protected helper method to read subclass entity data from NBT.
        */
       public void readEntityFromNBT(NBTTagCompound p_70037_1_)
       {
           super.readEntityFromNBT(p_70037_1_);
           this.setEatingHaystack(p_70037_1_.getBoolean("EatingHaystack"));
           this.func_110242_l(p_70037_1_.getBoolean("Bred"));
           this.setChested(p_70037_1_.getBoolean("ChestedHorse"));
           this.setHasReproduced(p_70037_1_.getBoolean("HasReproduced"));
           this.setHorseType(p_70037_1_.getInteger("Type"));
           this.setHorseVariant(p_70037_1_.getInteger("Variant"));
           this.setTemper(p_70037_1_.getInteger("Temper"));
           this.setHorseTamed(p_70037_1_.getBoolean("Tame"));
    
           if (p_70037_1_.func_150297_b("OwnerUUID", 8))
           {
               this.func_152120_b(p_70037_1_.getString("OwnerUUID"));
           }
    
           IAttributeInstance var2 = this.getAttributeMap().getAttributeInstanceByName("Speed");
    
           if (var2 != null)
           {
               this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(var2.getBaseValue() * 0.25D);
           }
    
           if (this.isChested())
           {
               NBTTagList var3 = p_70037_1_.getTagList("Items", 10);
               this.func_110226_cD();
    
               for (int var4 = 0; var4 < var3.tagCount(); ++var4)
               {
                   NBTTagCompound var5 = var3.getCompoundTagAt(var4);
                   int var6 = var5.getByte("Slot") & 255;
    
                   if (var6 >= 2 && var6 < this.horseChest.getSizeInventory())
                   {
                       this.horseChest.setInventorySlotContents(var6, ItemStack.loadItemStackFromNBT(var5));
                   }
               }
           }
    
           ItemStack var7;
    
           if (p_70037_1_.func_150297_b("ArmorItem", 10))
           {
               var7 = ItemStack.loadItemStackFromNBT(p_70037_1_.getCompoundTag("ArmorItem"));
    
               if (var7 != null && func_146085_a(var7.getItem()))
               {
                   this.horseChest.setInventorySlotContents(1, var7);
               }
           }
    
           if (p_70037_1_.func_150297_b("SaddleItem", 10))
           {
               var7 = ItemStack.loadItemStackFromNBT(p_70037_1_.getCompoundTag("SaddleItem"));
    
               if (var7 != null && var7.getItem() == Items.saddle)
               {
                   this.horseChest.setInventorySlotContents(0, var7);
               }
           }
           else if (p_70037_1_.getBoolean("Saddle"))
           {
               this.horseChest.setInventorySlotContents(0, new ItemStack(Items.saddle));
           }
    
           this.func_110232_cE();
       }
    
       /**
        * Returns true if the mob is currently able to mate with the specified mob.
        */
       public boolean canMateWith(EntityAnimal p_70878_1_)
       {
           if (p_70878_1_ == this)
           {
               return false;
           }
           else if (p_70878_1_.getClass() != this.getClass())
           {
               return false;
           }
           else
           {
               EntityHorse var2 = (EntityHorse)p_70878_1_;
    
               if (this.func_110200_cJ() && var2.func_110200_cJ())
               {
                   int var3 = this.getHorseType();
                   int var4 = var2.getHorseType();
                   return var3 == var4 || var3 == 0 && var4 == 1 || var3 == 1 && var4 == 0;
               }
               else
               {
                   return false;
               }
           }
       }
    
       public EntityAgeable createChild(EntityAgeable p_90011_1_)
       {
           EntityHorse var2 = (EntityHorse)p_90011_1_;
           EntityHorse var3 = new EntityHorse(this.worldObj);
           int var4 = this.getHorseType();
           int var5 = var2.getHorseType();
           int var6 = 0;
    
           if (var4 == var5)
           {
               var6 = var4;
           }
           else if (var4 == 0 && var5 == 1 || var4 == 1 && var5 == 0)
           {
               var6 = 2;
           }
    
           if (var6 == 0)
           {
               int var8 = this.rand.nextInt(9);
               int var7;
    
               if (var8 < 4)
               {
                   var7 = this.getHorseVariant() & 255;
               }
               else if (var8 < 8)
               {
                   var7 = var2.getHorseVariant() & 255;
               }
               else
               {
                   var7 = this.rand.nextInt(7);
               }
    
               int var9 = this.rand.nextInt(5);
    
               if (var9 < 2)
               {
                   var7 |= this.getHorseVariant() & 65280;
               }
               else if (var9 < 4)
               {
                   var7 |= var2.getHorseVariant() & 65280;
               }
               else
               {
                   var7 |= this.rand.nextInt(5) << 8 & 65280;
               }
    
               var3.setHorseVariant(var7);
           }
    
           var3.setHorseType(var6);
           double var13 = this.getEntityAttribute(SharedMonsterAttributes.maxHealth).getBaseValue() + p_90011_1_.getEntityAttribute(SharedMonsterAttributes.maxHealth).getBaseValue() + (double)this.func_110267_cL();
           var3.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(var13 / 3.0D);
           double var14 = this.getEntityAttribute(horseJumpStrength).getBaseValue() + p_90011_1_.getEntityAttribute(horseJumpStrength).getBaseValue() + this.func_110245_cM();
           var3.getEntityAttribute(horseJumpStrength).setBaseValue(var14 / 3.0D);
           double var11 = this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getBaseValue() + p_90011_1_.getEntityAttribute(SharedMonsterAttributes.movementSpeed).getBaseValue() + this.func_110203_cN();
           var3.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(var11 / 3.0D);
           return var3;
       }
    
       public IEntityLivingData onSpawnWithEgg(IEntityLivingData p_110161_1_)
       {
           Object p_110161_1_1 = super.onSpawnWithEgg(p_110161_1_);
           boolean var2 = false;
           int var3 = 0;
           int var7;
    
           if (p_110161_1_1 instanceof EntityHorse.GroupData)
           {
               var7 = ((EntityHorse.GroupData)p_110161_1_1).field_111107_a;
               var3 = ((EntityHorse.GroupData)p_110161_1_1).field_111106_b & 255 | this.rand.nextInt(5) << 8;
           }
           else
           {
               if (this.rand.nextInt(10) == 0)
               {
                   var7 = 1;
               }
               else
               {
                   int var4 = this.rand.nextInt(7);
                   int var5 = this.rand.nextInt(5);
                   var7 = 0;
                   var3 = var4 | var5 << 8;
               }
    
               p_110161_1_1 = new EntityHorse.GroupData(var7, var3);
           }
    
           this.setHorseType(var7);
           this.setHorseVariant(var3);
    
           if (this.rand.nextInt(5) == 0)
           {
               this.setGrowingAge(-24000);
           }
    
           if (var7 != 4 && var7 != 3)
           {
               this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue((double)this.func_110267_cL());
    
               if (var7 == 0)
               {
                   this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(this.func_110203_cN());
               }
               else
               {
                   this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.17499999701976776D);
               }
           }
           else
           {
               this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(15.0D);
               this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.20000000298023224D);
           }
    
           if (var7 != 2 && var7 != 1)
           {
               this.getEntityAttribute(horseJumpStrength).setBaseValue(this.func_110245_cM());
           }
           else
           {
               this.getEntityAttribute(horseJumpStrength).setBaseValue(0.5D);
           }
    
           this.setHealth(this.getMaxHealth());
           return (IEntityLivingData)p_110161_1_1;
       }
    
       public float getGrassEatingAmount(float p_110258_1_)
       {
           return this.prevHeadLean + (this.headLean - this.prevHeadLean) * p_110258_1_;
       }
    
       public float getRearingAmount(float p_110223_1_)
       {
           return this.prevRearingAmount + (this.rearingAmount - this.prevRearingAmount) * p_110223_1_;
       }
    
       public float func_110201_q(float p_110201_1_)
       {
           return this.prevMouthOpenness + (this.mouthOpenness - this.prevMouthOpenness) * p_110201_1_;
       }
    
       /**
        * Returns true if the newer Entity AI code should be run
        */
       protected boolean isAIEnabled()
       {
           return true;
       }
    
       public void setJumpPower(int p_110206_1_)
       {
           if (this.isHorseSaddled())
           {
               if (p_110206_1_ < 0)
               {
                   p_110206_1_ = 0;
               }
               else
               {
                   this.field_110294_bI = true;
                   this.makeHorseRear();
               }
    
               if (p_110206_1_ >= 90)
               {
                   this.jumpPower = 1.0F;
               }
               else
               {
                   this.jumpPower = 0.4F + 0.4F * (float)p_110206_1_ / 90.0F;
               }
           }
       }
    
       /**
        * "Spawns particles for the horse entity. par1 tells whether to spawn hearts. If it is false, it spawns smoke."
        */
       protected void spawnHorseParticles(boolean p_110216_1_)
       {
           String var2 = p_110216_1_ ? "heart" : "smoke";
    
           for (int var3 = 0; var3 < 7; ++var3)
           {
               double var4 = this.rand.nextGaussian() * 0.02D;
               double var6 = this.rand.nextGaussian() * 0.02D;
               double var8 = this.rand.nextGaussian() * 0.02D;
               this.worldObj.spawnParticle(var2, this.posX + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, this.posY + 0.5D + (double)(this.rand.nextFloat() * this.height), this.posZ + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width, var4, var6, var8);
           }
       }
    
       public void handleHealthUpdate(byte p_70103_1_)
       {
           if (p_70103_1_ == 7)
           {
               this.spawnHorseParticles(true);
           }
           else if (p_70103_1_ == 6)
           {
               this.spawnHorseParticles(false);
           }
           else
           {
               super.handleHealthUpdate(p_70103_1_);
           }
       }
    
       public void updateRiderPosition()
       {
           super.updateRiderPosition();
    
           if (this.prevRearingAmount > 0.0F)
           {
               float var1 = MathHelper.sin(this.renderYawOffset * (float)Math.PI / 180.0F);
               float var2 = MathHelper.cos(this.renderYawOffset * (float)Math.PI / 180.0F);
               float var3 = 0.7F * this.prevRearingAmount;
               float var4 = 0.15F * this.prevRearingAmount;
               this.riddenByEntity.setPosition(this.posX + (double)(var3 * var1), this.posY + this.getMountedYOffset() + this.riddenByEntity.getYOffset() + (double)var4, this.posZ - (double)(var3 * var2));
    
               if (this.riddenByEntity instanceof EntityLivingBase)
               {
                   ((EntityLivingBase)this.riddenByEntity).renderYawOffset = this.renderYawOffset;
               }
           }
       }
    
       private float func_110267_cL()
       {
           return 15.0F + (float)this.rand.nextInt(8) + (float)this.rand.nextInt(9);
       }
    
       private double func_110245_cM()
       {
           return 0.4000000059604645D + this.rand.nextDouble() * 0.2D + this.rand.nextDouble() * 0.2D + this.rand.nextDouble() * 0.2D;
       }
    
       private double func_110203_cN()
       {
           return (0.44999998807907104D + this.rand.nextDouble() * 0.3D + this.rand.nextDouble() * 0.3D + this.rand.nextDouble() * 0.3D) * 0.25D;
       }
    
       public static boolean func_146085_a(Item p_146085_0_)
       {
           return p_146085_0_ == Items.iron_horse_armor || p_146085_0_ == Items.golden_horse_armor || p_146085_0_ == Items.diamond_horse_armor;
       }
    
       /**
        * returns true if this entity is by a ladder, false otherwise
        */
       public boolean isOnLadder()
       {
           return false;
       }
    
       public static class GroupData implements IEntityLivingData
       {
           public int field_111107_a;
           public int field_111106_b;
           private static final String __OBFID = "CL_00001643";
    
           public GroupData(int p_i1684_1_, int p_i1684_2_)
           {
               this.field_111107_a = p_i1684_1_;
               this.field_111106_b = p_i1684_2_;
           }
       }
    }
    


  • Alors c'est this.riddenByEntity.setPosition(this.posX + et la tu mets ton truc). Essaye et dis moi si ça marche, sur ceux bonne nuit.



  • je met quoi dans les parenthèses ? car la j'ai mis mon code mais je suis bloqué dans le sol 😄 sans pouvoir bouger



  • J'ai même soucis tu as trouvé une solution?



  • Je penses qu'il faut: remplacer ça:

    public void moveEntity(double d, double d1, double d2)
    
    {
    
    if(riddenByEntity != null)
    
    {
    
    stationary = true;
    
    motionX += riddenByEntity.motionX*5; // * 0.20000000000000001D;
    
    motionZ += riddenByEntity.motionZ*5; // * 0.20000000000000001D;
    
    if(isCollidedHorizontally)
    
    {
    
    isJumping = true;
    
    }
    
    super.moveEntity(motionX, motionY, motionZ);
    
    }else
    
    {
    
    super.moveEntity(d, d1, d2);
    
    stationary = true;
    
    }
    
    }
    

    par:

    public void updateRiderPosition()
    
        {
    
           super.updateRiderPosition();
    
            if (this.prevRearingAmount > 0.0F)
    
           {
    
               float var1 = MathHelper.sin(this.renderYawOffset * (float)Math.PI / 180.0F);
    
               float var2 = MathHelper.cos(this.renderYawOffset * (float)Math.PI / 180.0F);
    
               float var3 = 0.7F * this.prevRearingAmount;
    
               float var4 = 0.15F * this.prevRearingAmount;
    
               this.riddenByEntity.setPosition(this.posX + (double)(var3 * var1), this.posY + this.getMountedYOffset() + this.riddenByEntity.getYOffset() + (double)var4, this.posZ - (double)(var3 * var2));
    
                if (this.riddenByEntity instanceof EntityLivingBase)
    
               {
    
                   ((EntityLivingBase)this.riddenByEntity).renderYawOffset = this.renderYawOffset;
    
               }
    
       }
    
      }
    

    Je viens de voir sur d'autres mods, ils extends a:

    ​extends EntityAnimal
    


  • D'accord et en remplaceant comme cela ça fonctionne? Oui d'ailleurs moi je fais presque tout mes mobs passif en entityAnimal.



  • Je crois que ca fais avancer de 1. Je vais regarder de plus pres apres, quand j'aurais finis mes devoirs ^^



  • D'accord je chercherai de mon côté en rentrant du travail ce soir.



  • salut non cela ne marche pas impossible de bouger et quand je met extends animal , l'entity bug dans le sol et impossible de monter dessus.

    j'ai vu sur un serveur un minecart dirigeable partout exsactement se que j'aimerais faire !mais aucune idée comment le faire.



  • Pour ce qui est du glicht dans le sol rajoute ça dans ton constructeur si tu extends EntityAnimal

    this.setSize(0.9F, 1.3F);
    


  • Oui mais on peu toujours pas bouger ^^