Skip to content

Commit 64ec554

Browse files
committed
Make merchant accessible in PlayerPurchaseEvent
1 parent 29c8822 commit 64ec554

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
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;
@@ -19,18 +20,29 @@ public class PlayerPurchaseEvent extends PlayerEvent implements Cancellable {
1920

2021
private boolean rewardExp;
2122
private boolean increaseTradeUses;
23+
private Merchant merchant;
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: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class PlayerTradeEvent extends PlayerPurchaseEvent {
1616

1717
@ApiStatus.Internal
1818
public PlayerTradeEvent(final Player player, final AbstractVillager villager, final MerchantRecipe trade, final boolean rewardExp, final boolean increaseTradeUses) {
19-
super(player, trade, rewardExp, increaseTradeUses);
19+
super(player, villager, trade, rewardExp, increaseTradeUses);
2020
this.villager = villager;
2121
}
2222

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)