mirror of
https://github.com/barkeser2002/CatServer.git
synced 2026-09-25 12:05:59 +03:00
85 lines
3.6 KiB
Diff
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)))))))));
|
|
}
|
|
|