PaperMC/patches/api/0229-Added-PlayerTradeEvent.patch

167 lines
5.2 KiB
Diff
Raw Permalink Normal View History

2021-06-11 14:02:28 +02:00
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
Date: Thu, 2 Jul 2020 16:10:10 -0700
Subject: [PATCH] Added PlayerTradeEvent
[Amendment: Alexander <protonull@protonmail.com>]
PlayerTradeEvent is used for player purchases from villagers and wandering
traders, but not custom merchants created via Bukkit.createMerchant(). During
discussions in Discord it was decided that it'd be better to add a new event
that PlayerTradeEvent inherits from than change getVillager()'s annotation to
@Nullable, especially since that'd also infringe on the implication of the
event being about villager trades.
diff --git a/src/main/java/io/papermc/paper/event/player/PlayerPurchaseEvent.java b/src/main/java/io/papermc/paper/event/player/PlayerPurchaseEvent.java
new file mode 100644
2024-02-01 10:15:57 +01:00
index 0000000000000000000000000000000000000000..61c62877c38e27eacc20aa43ef02dc43e9b50bfc
2021-06-11 14:02:28 +02:00
--- /dev/null
+++ b/src/main/java/io/papermc/paper/event/player/PlayerPurchaseEvent.java
2024-02-01 10:15:57 +01:00
@@ -0,0 +1,109 @@
2021-06-11 14:02:28 +02:00
+package io.papermc.paper.event.player;
+
2024-02-01 10:15:57 +01:00
+import com.google.common.base.Preconditions;
2021-06-11 14:02:28 +02:00
+import org.bukkit.entity.Player;
+import org.bukkit.event.Cancellable;
+import org.bukkit.event.HandlerList;
+import org.bukkit.event.player.PlayerEvent;
+import org.bukkit.inventory.MerchantRecipe;
2024-02-01 10:15:57 +01:00
+import org.jetbrains.annotations.ApiStatus;
2021-06-11 14:02:28 +02:00
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Called when a player trades with a standalone merchant GUI.
+ */
+public class PlayerPurchaseEvent extends PlayerEvent implements Cancellable {
+
2024-02-01 10:15:57 +01:00
+ private static final HandlerList HANDLER_LIST = new HandlerList();
+
2021-06-11 14:02:28 +02:00
+ private boolean rewardExp;
2024-02-01 10:15:57 +01:00
+ private boolean increaseTradeUses;
2021-06-11 14:02:28 +02:00
+ private MerchantRecipe trade;
+
2024-02-01 10:15:57 +01:00
+ private boolean cancelled;
+
+ @ApiStatus.Internal
2021-06-11 14:02:28 +02:00
+ public PlayerPurchaseEvent(@NotNull Player player,
+ @NotNull MerchantRecipe trade,
+ boolean rewardExp,
+ boolean increaseTradeUses) {
2024-02-01 10:15:57 +01:00
+ super(player);
2021-06-11 14:02:28 +02:00
+ setTrade(trade);
+ this.rewardExp = rewardExp;
+ this.increaseTradeUses = increaseTradeUses;
+ }
+
+ /**
+ * Gets the associated trade with this event
2024-02-01 10:15:57 +01:00
+ *
2021-06-11 14:02:28 +02:00
+ * @return the trade
+ */
+ @NotNull
+ public MerchantRecipe getTrade() {
+ return this.trade;
+ }
+
+ /**
+ * Sets the trade. This is then used to determine the next prices
2024-02-01 10:15:57 +01:00
+ *
2021-06-11 14:02:28 +02:00
+ * @param trade the trade to use
+ */
+ public void setTrade(@NotNull MerchantRecipe trade) {
2024-02-01 10:15:57 +01:00
+ Preconditions.checkArgument(trade != null, "Trade cannot be null!");
+ this.trade = trade;
2021-06-11 14:02:28 +02:00
+ }
+
+ /**
+ * @return will trade try to reward exp
+ */
+ public boolean isRewardingExp() {
+ return this.rewardExp;
+ }
+
+ /**
+ * Sets whether the trade will try to reward exp
2024-02-01 10:15:57 +01:00
+ *
2021-06-11 14:02:28 +02:00
+ * @param rewardExp try to reward exp
+ */
+ public void setRewardExp(boolean rewardExp) {
+ this.rewardExp = rewardExp;
+ }
+
+ /**
2024-02-01 10:15:57 +01:00
+ * @return whether the trade will count as a use of the trade
2021-06-11 14:02:28 +02:00
+ */
+ public boolean willIncreaseTradeUses() {
+ return this.increaseTradeUses;
+ }
+
+ /**
2024-02-01 10:15:57 +01:00
+ * Sets whether the trade will count as a use
+ *
+ * @param increaseTradeUses {@code true} to count, {@code false} otherwise
2021-06-11 14:02:28 +02:00
+ */
+ public void setIncreaseTradeUses(boolean increaseTradeUses) {
+ this.increaseTradeUses = increaseTradeUses;
+ }
+
+ @Override
+ public boolean isCancelled() {
+ return this.cancelled;
+ }
+
+ @Override
+ public void setCancelled(boolean cancel) {
+ this.cancelled = cancel;
+ }
+
+ @NotNull
+ @Override
+ public HandlerList getHandlers() {
2024-02-01 10:15:57 +01:00
+ return HANDLER_LIST;
2021-06-11 14:02:28 +02:00
+ }
+
+ @NotNull
+ public static HandlerList getHandlerList() {
2024-02-01 10:15:57 +01:00
+ return HANDLER_LIST;
2021-06-11 14:02:28 +02:00
+ }
+
+}
diff --git a/src/main/java/io/papermc/paper/event/player/PlayerTradeEvent.java b/src/main/java/io/papermc/paper/event/player/PlayerTradeEvent.java
new file mode 100755
2024-02-01 10:15:57 +01:00
index 0000000000000000000000000000000000000000..559d1a3c783e6c726f48d1c88b2ff8c0888890ac
2021-06-11 14:02:28 +02:00
--- /dev/null
+++ b/src/main/java/io/papermc/paper/event/player/PlayerTradeEvent.java
2024-02-01 10:15:57 +01:00
@@ -0,0 +1,32 @@
2021-06-11 14:02:28 +02:00
+package io.papermc.paper.event.player;
+
+import org.bukkit.entity.AbstractVillager;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.MerchantRecipe;
2024-02-01 10:15:57 +01:00
+import org.jetbrains.annotations.ApiStatus;
2021-06-11 14:02:28 +02:00
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Called when a player trades with a villager or wandering trader
+ */
+public class PlayerTradeEvent extends PlayerPurchaseEvent {
+
+ private final AbstractVillager villager;
+
2024-02-01 10:15:57 +01:00
+ @ApiStatus.Internal
2021-06-11 14:02:28 +02:00
+ public PlayerTradeEvent(@NotNull Player player, @NotNull AbstractVillager villager, @NotNull MerchantRecipe trade, boolean rewardExp, boolean increaseTradeUses) {
+ super(player, trade, rewardExp, increaseTradeUses);
+ this.villager = villager;
+ }
+
+ /**
+ * Gets the Villager or Wandering trader associated with this event
2024-02-01 10:15:57 +01:00
+ *
2021-06-11 14:02:28 +02:00
+ * @return the villager or wandering trader
+ */
+ @NotNull
+ public AbstractVillager getVillager() {
+ return this.villager;
+ }
+
+}