--- a/net/minecraft/server/EntityHorse.java +++ b/net/minecraft/server/EntityHorse.java @@ -6,6 +6,8 @@ import java.util.List; import java.util.UUID; +import org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason; // CraftBukkit + public class EntityHorse extends EntityAnimal implements IInventoryListener, IJumpable { private static final Predicate<Entity> bB = new Predicate() { @@ -52,6 +54,7 @@ private String cd; private String[] ce = new String[3]; private boolean cf = false; + public int maxDomestication = 100; // CraftBukkit - store max domestication value public EntityHorse(World world) { super(world); @@ -318,7 +321,7 @@ public void loadChest() { InventoryHorseChest inventoryhorsechest = this.inventoryChest; - this.inventoryChest = new InventoryHorseChest("HorseChest", this.dI()); + this.inventoryChest = new InventoryHorseChest("HorseChest", this.dI(), this); // CraftBukkit this.inventoryChest.a(this.getName()); if (inventoryhorsechest != null) { inventoryhorsechest.b(this); @@ -470,7 +473,7 @@ } public int getMaxDomestication() { - return 100; + return this.maxDomestication; // CraftBukkit - return stored max domestication instead of 100 } protected float cd() { @@ -560,7 +563,7 @@ } if (this.getHealth() < this.getMaxHealth() && f > 0.0F) { - this.heal(f); + this.heal(f, RegainReason.EATING); // CraftBukkit flag = true; } @@ -652,11 +655,24 @@ public void die(DamageSource damagesource) { super.die(damagesource); + /* CraftBukkit start - Handle chest dropping in dropDeathLoot below if (!this.world.isClientSide) { this.dropChest(); } + // CraftBukkit end */ + } + + // CraftBukkit start - Add method + @Override + protected void dropDeathLoot(boolean flag, int i) { + super.dropDeathLoot(flag, i); + // Moved from die method above + if (!this.world.isClientSide) { + this.dropChest(); + } } + // CraftBukkit end public void n() { if (this.random.nextInt(200) == 0) { @@ -666,7 +682,7 @@ super.n(); if (!this.world.isClientSide) { if (this.random.nextInt(900) == 0 && this.deathTicks == 0) { - this.heal(1.0F); + this.heal(1.0F, RegainReason.REGEN); // CraftBukkit } if (!this.dm() && !this.isVehicle() && this.random.nextInt(300) == 0 && this.world.getType(new BlockPosition(MathHelper.floor(this.locX), MathHelper.floor(this.locY) - 1, MathHelper.floor(this.locZ))).getBlock() == Blocks.GRASS) { @@ -919,6 +935,7 @@ if (this.getOwnerUUID() != null) { nbttagcompound.setString("OwnerUUID", this.getOwnerUUID().toString()); } + nbttagcompound.setInt("Bukkit.MaxDomestication", this.maxDomestication); // CraftBukkit if (this.hasChest()) { NBTTagList nbttaglist = new NBTTagList(); @@ -974,6 +991,12 @@ this.setOwnerUUID(UUID.fromString(s)); } + // CraftBukkit start + if (nbttagcompound.hasKey("Bukkit.MaxDomestication")) { + this.maxDomestication = nbttagcompound.getInt("Bukkit.MaxDomestication"); + } + // CraftBukkit end + AttributeInstance attributeinstance = this.getAttributeMap().a("Speed"); if (attributeinstance != null) { @@ -1145,6 +1168,18 @@ } public void b(int i) { + // CraftBukkit start + float power; + if (i >= 90) { + power = 1.0F; + } else { + power = 0.4F + 0.4F * (float) i / 90.0F; + } + org.bukkit.event.entity.HorseJumpEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callHorseJumpEvent(this, power); + if (event.isCancelled()) { + return; + } + // CraftBukkit end this.canSlide = true; this.setStanding(); }