Give the right amount of experience after mending (#13047)

This commit is contained in:
Lulu13022002
2025-09-06 22:49:56 +02:00
committed by GitHub
parent 9aaaadffaa
commit 19156cdd3b
3 changed files with 6 additions and 10 deletions
@@ -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);