You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
171 lines
4.9 KiB
171 lines
4.9 KiB
--- ../src-base/minecraft/net/minecraft/entity/item/EntityXPOrb.java |
|
+++ ../src-work/minecraft/net/minecraft/entity/item/EntityXPOrb.java |
|
@@ -12,13 +12,19 @@ |
|
import net.minecraftforge.common.MinecraftForge; |
|
import net.minecraftforge.event.entity.player.PlayerPickupXpEvent; |
|
|
|
+ |
|
+// CraftBukkit start |
|
+import org.bukkit.craftbukkit.event.CraftEventFactory; |
|
+import org.bukkit.event.entity.EntityTargetEvent; |
|
+// CraftBukkit end |
|
+ |
|
public class EntityXPOrb extends Entity |
|
{ |
|
public int xpColor; |
|
public int xpOrbAge; |
|
public int field_70532_c; |
|
private int xpOrbHealth = 5; |
|
- public int xpValue; |
|
+ public int xpValue; // CraftBukkit - private -> public |
|
private EntityPlayer closestPlayer; |
|
private int xpTargetColor; |
|
private static final String __OBFID = "CL_00001544"; |
|
@@ -115,18 +121,27 @@ |
|
|
|
if (this.closestPlayer != null) |
|
{ |
|
- double d1 = (this.closestPlayer.posX - this.posX) / d0; |
|
- double d2 = (this.closestPlayer.posY + (double)this.closestPlayer.getEyeHeight() - this.posY) / d0; |
|
- double d3 = (this.closestPlayer.posZ - this.posZ) / d0; |
|
- double d4 = Math.sqrt(d1 * d1 + d2 * d2 + d3 * d3); |
|
- double d5 = 1.0D - d4; |
|
+ // CraftBukkit start |
|
+ EntityTargetEvent event = CraftEventFactory.callEntityTargetEvent(this, closestPlayer, EntityTargetEvent.TargetReason.CLOSEST_PLAYER); |
|
+ Entity target = event.getTarget() == null ? null : ((org.bukkit.craftbukkit.entity.CraftEntity) event.getTarget()).getHandle(); |
|
|
|
- if (d5 > 0.0D) |
|
+ if (!event.isCancelled() && target != null) |
|
{ |
|
- d5 *= d5; |
|
- this.motionX += d1 / d4 * d5 * 0.1D; |
|
- this.motionY += d2 / d4 * d5 * 0.1D; |
|
- this.motionZ += d3 / d4 * d5 * 0.1D; |
|
+ double d1 = (target.posX - this.posX) / d0; |
|
+ double d2 = (target.posY + (double) target.getEyeHeight() - this.posY) / d0; |
|
+ double d3 = (target.posZ - this.posZ) / d0; |
|
+ double d4 = Math.sqrt(d1 * d1 + d2 * d2 + d3 * d3); |
|
+ double d5 = 1.0D - d4; |
|
+ |
|
+ if (d5 > 0.0D) |
|
+ { |
|
+ d5 *= d5; |
|
+ this.motionX += d1 / d4 * d5 * 0.1D; |
|
+ this.motionY += d2 / d4 * d5 * 0.1D; |
|
+ this.motionZ += d3 / d4 * d5 * 0.1D; |
|
+ } |
|
+ |
|
+ // CraftBukkit end |
|
} |
|
} |
|
|
|
@@ -210,7 +225,7 @@ |
|
p_70100_1_.xpCooldown = 2; |
|
this.worldObj.playSoundAtEntity(p_70100_1_, "random.orb", 0.1F, 0.5F * ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.8F)); |
|
p_70100_1_.onItemPickup(this, 1); |
|
- p_70100_1_.addExperience(this.xpValue); |
|
+ p_70100_1_.addExperience(CraftEventFactory.callPlayerExpChangeEvent(p_70100_1_, this.xpValue).getAmount()); |
|
this.setDead(); |
|
} |
|
} |
|
@@ -229,6 +244,88 @@ |
|
|
|
public static int getXPSplit(int p_70527_0_) |
|
{ |
|
+ // CraftBukkit start |
|
+ if (p_70527_0_ > 162670129) |
|
+ { |
|
+ return p_70527_0_ - 100000; |
|
+ } |
|
+ |
|
+ if (p_70527_0_ > 81335063) |
|
+ { |
|
+ return 81335063; |
|
+ } |
|
+ |
|
+ if (p_70527_0_ > 40667527) |
|
+ { |
|
+ return 40667527; |
|
+ } |
|
+ |
|
+ if (p_70527_0_ > 20333759) |
|
+ { |
|
+ return 20333759; |
|
+ } |
|
+ |
|
+ if (p_70527_0_ > 10166857) |
|
+ { |
|
+ return 10166857; |
|
+ } |
|
+ |
|
+ if (p_70527_0_ > 5083423) |
|
+ { |
|
+ return 5083423; |
|
+ } |
|
+ |
|
+ if (p_70527_0_ > 2541701) |
|
+ { |
|
+ return 2541701; |
|
+ } |
|
+ |
|
+ if (p_70527_0_ > 1270849) |
|
+ { |
|
+ return 1270849; |
|
+ } |
|
+ |
|
+ if (p_70527_0_ > 635413) |
|
+ { |
|
+ return 635413; |
|
+ } |
|
+ |
|
+ if (p_70527_0_ > 317701) |
|
+ { |
|
+ return 317701; |
|
+ } |
|
+ |
|
+ if (p_70527_0_ > 158849) |
|
+ { |
|
+ return 158849; |
|
+ } |
|
+ |
|
+ if (p_70527_0_ > 79423) |
|
+ { |
|
+ return 79423; |
|
+ } |
|
+ |
|
+ if (p_70527_0_ > 39709) |
|
+ { |
|
+ return 39709; |
|
+ } |
|
+ |
|
+ if (p_70527_0_ > 19853) |
|
+ { |
|
+ return 19853; |
|
+ } |
|
+ |
|
+ if (p_70527_0_ > 9923) |
|
+ { |
|
+ return 9923; |
|
+ } |
|
+ |
|
+ if (p_70527_0_ > 4957) |
|
+ { |
|
+ return 4957; |
|
+ } |
|
+ |
|
+ // CraftBukkit end |
|
return p_70527_0_ >= 2477 ? 2477 : (p_70527_0_ >= 1237 ? 1237 : (p_70527_0_ >= 617 ? 617 : (p_70527_0_ >= 307 ? 307 : (p_70527_0_ >= 149 ? 149 : (p_70527_0_ >= 73 ? 73 : (p_70527_0_ >= 37 ? 37 : (p_70527_0_ >= 17 ? 17 : (p_70527_0_ >= 7 ? 7 : (p_70527_0_ >= 3 ? 3 : 1))))))))); |
|
} |
|
|
|
@@ -236,4 +333,11 @@ |
|
{ |
|
return false; |
|
} |
|
+ |
|
+ // Cauldron start |
|
+ @Override |
|
+ public boolean entityProjectileHook() { |
|
+ return true; |
|
+ } |
|
+ // Cauldron end |
|
}
|
|
|