Files
CatServer/patches/net/minecraft/entity/item/EntityXPOrb.java.patch
2018-09-08 17:51:33 +08:00

85 lines
3.6 KiB
Diff

--- ../src-base/minecraft/net/minecraft/entity/item/EntityXPOrb.java
+++ ../src-work/minecraft/net/minecraft/entity/item/EntityXPOrb.java
@@ -1,8 +1,13 @@
package net.minecraft.entity.item;
+import org.bukkit.craftbukkit.event.CraftEventFactory;
+import org.bukkit.event.entity.EntityTargetEvent;
+import org.bukkit.event.entity.EntityTargetLivingEntityEvent;
+
import net.minecraft.block.material.Material;
import net.minecraft.enchantment.EnchantmentHelper;
import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Enchantments;
import net.minecraft.init.SoundEvents;
@@ -74,6 +79,7 @@
public void onUpdate()
{
super.onUpdate();
+ EntityPlayer prevTarget = this.closestPlayer;// CraftBukkit - store old target
if (this.delayBeforeCanPickup > 0)
{
@@ -117,6 +123,16 @@
if (this.closestPlayer != null)
{
+ // CraftBukkit start
+ boolean cancelled = false;
+ if (this.closestPlayer != prevTarget) {
+ EntityTargetLivingEntityEvent event = CraftEventFactory.callEntityTargetLivingEvent(this, closestPlayer, EntityTargetEvent.TargetReason.CLOSEST_PLAYER);
+ EntityLivingBase target = event.getTarget() == null ? null : ((org.bukkit.craftbukkit.entity.CraftLivingEntity) event.getTarget()).getHandle();
+ closestPlayer = target instanceof EntityPlayer ? (EntityPlayer) target : null;
+ cancelled = event.isCancelled();
+ }
+
+ if (!cancelled && closestPlayer != null) {
double d1 = (this.closestPlayer.posX - this.posX) / 8.0D;
double d2 = (this.closestPlayer.posY + (double)this.closestPlayer.getEyeHeight() / 2.0D - this.posY) / 8.0D;
double d3 = (this.closestPlayer.posZ - this.posZ) / 8.0D;
@@ -130,6 +146,8 @@
this.motionY += d2 / d4 * d5 * 0.1D;
this.motionZ += d3 / d4 * d5 * 0.1D;
}
+ }
+ // CraftBukkit end
}
this.moveEntity(this.motionX, this.motionY, this.motionZ);
@@ -223,7 +241,7 @@
if (this.xpValue > 0)
{
- entityIn.addExperience(this.xpValue);
+ entityIn.addExperience(CraftEventFactory.callPlayerExpChangeEvent(entityIn, this.xpValue).getAmount());
}
this.setDead();
@@ -254,6 +272,24 @@
public static int getXPSplit(int expValue)
{
+ // CraftBukkit start
+ if (expValue > 162670129) return expValue - 100000;
+ if (expValue > 81335063) return 81335063;
+ if (expValue > 40667527) return 40667527;
+ if (expValue > 20333759) return 20333759;
+ if (expValue > 10166857) return 10166857;
+ if (expValue > 5083423) return 5083423;
+ if (expValue > 2541701) return 2541701;
+ if (expValue > 1270849) return 1270849;
+ if (expValue > 635413) return 635413;
+ if (expValue > 317701) return 317701;
+ if (expValue > 158849) return 158849;
+ if (expValue > 79423) return 79423;
+ if (expValue > 39709) return 39709;
+ if (expValue > 19853) return 19853;
+ if (expValue > 9923) return 9923;
+ if (expValue > 4957) return 4957;
+ // CraftBukkit end
return expValue >= 2477 ? 2477 : (expValue >= 1237 ? 1237 : (expValue >= 617 ? 617 : (expValue >= 307 ? 307 : (expValue >= 149 ? 149 : (expValue >= 73 ? 73 : (expValue >= 37 ? 37 : (expValue >= 17 ? 17 : (expValue >= 7 ? 7 : (expValue >= 3 ? 3 : 1)))))))));
}