Skip to content

Commit 81774ec

Browse files
committed
Make merchant accessible in PlayerPurchaseEvent
1 parent 29c8822 commit 81774ec

File tree

3 files changed

+24
-8
lines changed

3 files changed

+24
-8
lines changed

paper-api/src/main/java/io/papermc/paper/event/player/PlayerPurchaseEvent.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import org.bukkit.event.Cancellable;
66
import org.bukkit.event.HandlerList;
77
import org.bukkit.event.player.PlayerEvent;
8+
import org.bukkit.inventory.Merchant;
89
import org.bukkit.inventory.MerchantRecipe;
910
import org.jetbrains.annotations.ApiStatus;
1011
import org.jspecify.annotations.NullMarked;
@@ -17,20 +18,31 @@ public class PlayerPurchaseEvent extends PlayerEvent implements Cancellable {
1718

1819
private static final HandlerList HANDLER_LIST = new HandlerList();
1920

21+
private final Merchant merchant;
2022
private boolean rewardExp;
2123
private boolean increaseTradeUses;
2224
private MerchantRecipe trade;
2325

2426
private boolean cancelled;
2527

2628
@ApiStatus.Internal
27-
public PlayerPurchaseEvent(final Player player, final MerchantRecipe trade, final boolean rewardExp, final boolean increaseTradeUses) {
29+
public PlayerPurchaseEvent(final Player player, final Merchant merchant, final MerchantRecipe trade, final boolean rewardExp, final boolean increaseTradeUses) {
2830
super(player);
31+
this.merchant = merchant;
2932
this.trade = trade;
3033
this.rewardExp = rewardExp;
3134
this.increaseTradeUses = increaseTradeUses;
3235
}
3336

37+
/**
38+
* Gets the merchant that the player is trading with
39+
*
40+
* @return the merchant
41+
*/
42+
public Merchant getMerchant() {
43+
return merchant;
44+
}
45+
3446
/**
3547
* Gets the associated trade with this event
3648
*

paper-api/src/main/java/io/papermc/paper/event/player/PlayerTradeEvent.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,25 @@
1212
@NullMarked
1313
public class PlayerTradeEvent extends PlayerPurchaseEvent {
1414

15-
private final AbstractVillager villager;
16-
1715
@ApiStatus.Internal
1816
public PlayerTradeEvent(final Player player, final AbstractVillager villager, final MerchantRecipe trade, final boolean rewardExp, final boolean increaseTradeUses) {
19-
super(player, trade, rewardExp, increaseTradeUses);
20-
this.villager = villager;
17+
super(player, villager, trade, rewardExp, increaseTradeUses);
18+
}
19+
20+
@Override
21+
public AbstractVillager getMerchant() {
22+
return (AbstractVillager) super.getMerchant();
2123
}
2224

2325
/**
2426
* Gets the Villager or Wandering trader associated with this event
2527
*
2628
* @return the villager or wandering trader
29+
* @see #getMerchant()
2730
*/
31+
@ApiStatus.Obsolete
2832
public AbstractVillager getVillager() {
29-
return this.villager;
33+
return getMerchant();
3034
}
3135

3236
}

paper-server/patches/sources/net/minecraft/world/inventory/MerchantResultSlot.java.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@
1212
+ if (activeOffer != null && player instanceof net.minecraft.server.level.ServerPlayer serverPlayer) {
1313
+ if (this.merchant instanceof net.minecraft.world.entity.npc.AbstractVillager abstractVillager) {
1414
+ event = new io.papermc.paper.event.player.PlayerTradeEvent(serverPlayer.getBukkitEntity(), (org.bukkit.entity.AbstractVillager) abstractVillager.getBukkitEntity(), activeOffer.asBukkit(), true, true);
15-
+ } else if (this.merchant instanceof org.bukkit.craftbukkit.inventory.CraftMerchantCustom.MinecraftMerchant) {
16-
+ event = new io.papermc.paper.event.player.PlayerPurchaseEvent(serverPlayer.getBukkitEntity(), activeOffer.asBukkit(), false, true);
15+
+ } else if (this.merchant instanceof org.bukkit.craftbukkit.inventory.CraftMerchantCustom.MinecraftMerchant minecraftMerchant) {
16+
+ event = new io.papermc.paper.event.player.PlayerPurchaseEvent(serverPlayer.getBukkitEntity(), minecraftMerchant.getCraftMerchant(), activeOffer.asBukkit(), false, true);
1717
+ }
1818
+ if (event != null) {
1919
+ if (!event.callEvent()) {

0 commit comments

Comments
 (0)