Skip to content

Commit 19156cd

Browse files
authored
Give the right amount of experience after mending (#13047)
1 parent 9aaaadf commit 19156cd

File tree

3 files changed

+6
-10
lines changed

3 files changed

+6
-10
lines changed

paper-api/src/main/java/org/bukkit/event/player/PlayerExpChangeEvent.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import org.bukkit.event.HandlerList;
66
import org.jetbrains.annotations.ApiStatus;
77
import org.jetbrains.annotations.NotNull;
8-
98
import org.jetbrains.annotations.Nullable;
109

1110
/**
@@ -21,13 +20,13 @@ public class PlayerExpChangeEvent extends PlayerEvent {
2120

2221
@ApiStatus.Internal
2322
public PlayerExpChangeEvent(@NotNull final Player player, final int expAmount) {
24-
this(player, null, expAmount);
23+
this(player, null, expAmount);
2524
}
2625

2726
@ApiStatus.Internal
2827
public PlayerExpChangeEvent(@NotNull final Player player, @Nullable final Entity sourceEntity, final int expAmount) {
29-
super(player);
30-
this.source = sourceEntity;
28+
super(player);
29+
this.source = sourceEntity;
3130
this.exp = expAmount;
3231
}
3332

paper-server/patches/sources/net/minecraft/world/entity/ExperienceOrb.java.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,12 +185,12 @@
185185
- if (entity.takeXpDelay == 0) {
186186
- entity.takeXpDelay = 2;
187187
+ if (entity.takeXpDelay == 0 && new com.destroystokyo.paper.event.player.PlayerPickupExperienceEvent(serverPlayer.getBukkitEntity(), (org.bukkit.entity.ExperienceOrb) this.getBukkitEntity()).callEvent()) { // Paper - PlayerPickupExperienceEvent
188-
+ entity.takeXpDelay = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerXpCooldownEvent(entity, 2, org.bukkit.event.player.PlayerExpCooldownChangeEvent.ChangeReason.PICKUP_ORB).getNewCooldown(); // CraftBukkit - entityhuman.takeXpDelay = 2;
188+
+ entity.takeXpDelay = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerXpCooldownEvent(entity, 2, org.bukkit.event.player.PlayerExpCooldownChangeEvent.ChangeReason.PICKUP_ORB).getNewCooldown(); // CraftBukkit - entity.takeXpDelay = 2;
189189
entity.take(this, 1);
190190
int i = this.repairPlayerItems(serverPlayer, this.getValue());
191191
if (i > 0) {
192192
- entity.giveExperiencePoints(i);
193-
+ entity.giveExperiencePoints(org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerExpChangeEvent(entity, this).getAmount()); // CraftBukkit - this.value -> event.getAmount() // Paper - supply experience orb object
193+
+ entity.giveExperiencePoints(org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerExpChangeEvent(entity, this, i).getAmount()); // CraftBukkit - i -> event.getAmount() // Paper - supply experience orb
194194
}
195195

196196
this.count--;

paper-server/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1166,16 +1166,13 @@ public static PlayerItemMendEvent callPlayerItemMendEvent(net.minecraft.world.en
11661166
return event;
11671167
}
11681168

1169-
// Paper start - Add orb
1170-
public static PlayerExpChangeEvent callPlayerExpChangeEvent(net.minecraft.world.entity.player.Player entity, net.minecraft.world.entity.ExperienceOrb entityOrb) {
1169+
public static PlayerExpChangeEvent callPlayerExpChangeEvent(net.minecraft.world.entity.player.Player entity, net.minecraft.world.entity.ExperienceOrb entityOrb, int expAmount) {
11711170
Player player = (Player) entity.getBukkitEntity();
11721171
ExperienceOrb source = (ExperienceOrb) entityOrb.getBukkitEntity();
1173-
int expAmount = source.getExperience();
11741172
PlayerExpChangeEvent event = new PlayerExpChangeEvent(player, source, expAmount);
11751173
Bukkit.getPluginManager().callEvent(event);
11761174
return event;
11771175
}
1178-
// Paper end
11791176

11801177
public static boolean handleBlockGrowEvent(Level world, BlockPos pos, net.minecraft.world.level.block.state.BlockState state, int flags) {
11811178
CraftBlockState snapshot = CraftBlockStates.getBlockState(world, pos);

0 commit comments

Comments
 (0)