Give the right amount of experience after mending (#13047)
This commit is contained in:
@@ -5,7 +5,6 @@ import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
@@ -21,13 +20,13 @@ public class PlayerExpChangeEvent extends PlayerEvent {
|
||||
|
||||
@ApiStatus.Internal
|
||||
public PlayerExpChangeEvent(@NotNull final Player player, final int expAmount) {
|
||||
this(player, null, expAmount);
|
||||
this(player, null, expAmount);
|
||||
}
|
||||
|
||||
@ApiStatus.Internal
|
||||
public PlayerExpChangeEvent(@NotNull final Player player, @Nullable final Entity sourceEntity, final int expAmount) {
|
||||
super(player);
|
||||
this.source = sourceEntity;
|
||||
super(player);
|
||||
this.source = sourceEntity;
|
||||
this.exp = expAmount;
|
||||
}
|
||||
|
||||
|
||||
@@ -185,12 +185,12 @@
|
||||
- if (entity.takeXpDelay == 0) {
|
||||
- entity.takeXpDelay = 2;
|
||||
+ if (entity.takeXpDelay == 0 && new com.destroystokyo.paper.event.player.PlayerPickupExperienceEvent(serverPlayer.getBukkitEntity(), (org.bukkit.entity.ExperienceOrb) this.getBukkitEntity()).callEvent()) { // Paper - PlayerPickupExperienceEvent
|
||||
+ entity.takeXpDelay = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerXpCooldownEvent(entity, 2, org.bukkit.event.player.PlayerExpCooldownChangeEvent.ChangeReason.PICKUP_ORB).getNewCooldown(); // CraftBukkit - entityhuman.takeXpDelay = 2;
|
||||
+ entity.takeXpDelay = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerXpCooldownEvent(entity, 2, org.bukkit.event.player.PlayerExpCooldownChangeEvent.ChangeReason.PICKUP_ORB).getNewCooldown(); // CraftBukkit - entity.takeXpDelay = 2;
|
||||
entity.take(this, 1);
|
||||
int i = this.repairPlayerItems(serverPlayer, this.getValue());
|
||||
if (i > 0) {
|
||||
- entity.giveExperiencePoints(i);
|
||||
+ entity.giveExperiencePoints(org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerExpChangeEvent(entity, this).getAmount()); // CraftBukkit - this.value -> event.getAmount() // Paper - supply experience orb object
|
||||
+ entity.giveExperiencePoints(org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerExpChangeEvent(entity, this, i).getAmount()); // CraftBukkit - i -> event.getAmount() // Paper - supply experience orb
|
||||
}
|
||||
|
||||
this.count--;
|
||||
|
||||
@@ -1166,16 +1166,13 @@ public class CraftEventFactory {
|
||||
return event;
|
||||
}
|
||||
|
||||
// Paper start - Add orb
|
||||
public static PlayerExpChangeEvent callPlayerExpChangeEvent(net.minecraft.world.entity.player.Player entity, net.minecraft.world.entity.ExperienceOrb entityOrb) {
|
||||
public static PlayerExpChangeEvent callPlayerExpChangeEvent(net.minecraft.world.entity.player.Player entity, net.minecraft.world.entity.ExperienceOrb entityOrb, int expAmount) {
|
||||
Player player = (Player) entity.getBukkitEntity();
|
||||
ExperienceOrb source = (ExperienceOrb) entityOrb.getBukkitEntity();
|
||||
int expAmount = source.getExperience();
|
||||
PlayerExpChangeEvent event = new PlayerExpChangeEvent(player, source, expAmount);
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
return event;
|
||||
}
|
||||
// Paper end
|
||||
|
||||
public static boolean handleBlockGrowEvent(Level world, BlockPos pos, net.minecraft.world.level.block.state.BlockState state, int flags) {
|
||||
CraftBlockState snapshot = CraftBlockStates.getBlockState(world, pos);
|
||||
|
||||
Reference in New Issue
Block a user