From b4b80ffff1176848ed774e6914024ac79c44d5be Mon Sep 17 00:00:00 2001 From: Michael Davenport Date: Thu, 31 Jul 2025 01:15:16 -0600 Subject: [PATCH] fix MerchantGui onTrade number of calls on shift click --- src/main/java/eu/pb4/sgui/api/gui/MerchantGui.java | 10 +++++++++- .../eu/pb4/sgui/virtual/merchant/VirtualMerchant.java | 11 +++++++++++ .../sgui/virtual/merchant/VirtualTradeOutputSlot.java | 2 +- src/testmod/java/eu/pb4/sgui/testmod/SGuiTest.java | 2 +- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/main/java/eu/pb4/sgui/api/gui/MerchantGui.java b/src/main/java/eu/pb4/sgui/api/gui/MerchantGui.java index 8757d37..2962498 100644 --- a/src/main/java/eu/pb4/sgui/api/gui/MerchantGui.java +++ b/src/main/java/eu/pb4/sgui/api/gui/MerchantGui.java @@ -183,10 +183,18 @@ public TradeOffer getSelectedTrade() { * @param offer the trade offer being done * @return if the trade should complete */ - public boolean onTrade(TradeOffer offer) { + public boolean shouldTrade(TradeOffer offer) { return true; } + /** + * Runs after a trade has been completed. + * + * @param offer the trade offer being done + */ + public void onTrade(TradeOffer offer) { + } + /** * Runs when a suggested trade is placed into the selling slot. * diff --git a/src/main/java/eu/pb4/sgui/virtual/merchant/VirtualMerchant.java b/src/main/java/eu/pb4/sgui/virtual/merchant/VirtualMerchant.java index d69bb80..d40001d 100644 --- a/src/main/java/eu/pb4/sgui/virtual/merchant/VirtualMerchant.java +++ b/src/main/java/eu/pb4/sgui/virtual/merchant/VirtualMerchant.java @@ -5,6 +5,7 @@ import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.Text; import net.minecraft.village.SimpleMerchant; +import net.minecraft.village.TradeOffer; public class VirtualMerchant extends SimpleMerchant { @@ -48,4 +49,14 @@ public void sendOffers(PlayerEntity player, Text test, int levelProgress) { ((VirtualMerchantScreenHandler) player.currentScreenHandler).getGui().sendUpdate(); } } + + @Override + public void trade(TradeOffer offer) { + super.trade(offer); + ServerPlayerEntity player = (ServerPlayerEntity) this.getCustomer(); + assert player != null; + if (player.currentScreenHandler instanceof VirtualMerchantScreenHandler) { + ((VirtualMerchantScreenHandler) player.currentScreenHandler).getGui().onTrade(offer); + } + } } diff --git a/src/main/java/eu/pb4/sgui/virtual/merchant/VirtualTradeOutputSlot.java b/src/main/java/eu/pb4/sgui/virtual/merchant/VirtualTradeOutputSlot.java index 9867ac3..6fc0797 100644 --- a/src/main/java/eu/pb4/sgui/virtual/merchant/VirtualTradeOutputSlot.java +++ b/src/main/java/eu/pb4/sgui/virtual/merchant/VirtualTradeOutputSlot.java @@ -18,7 +18,7 @@ public VirtualTradeOutputSlot(PlayerEntity player, VirtualMerchant merchant, Mer public boolean canTakeItems(PlayerEntity playerEntity) { TradeOffer tradeOffer = this.merchantInventory.getTradeOffer(); VirtualMerchantScreenHandler handler = (VirtualMerchantScreenHandler) playerEntity.currentScreenHandler; - return tradeOffer != null && handler.getGui().onTrade(tradeOffer); + return tradeOffer != null && handler.getGui().shouldTrade(tradeOffer); } } diff --git a/src/testmod/java/eu/pb4/sgui/testmod/SGuiTest.java b/src/testmod/java/eu/pb4/sgui/testmod/SGuiTest.java index e1c9706..057e92c 100644 --- a/src/testmod/java/eu/pb4/sgui/testmod/SGuiTest.java +++ b/src/testmod/java/eu/pb4/sgui/testmod/SGuiTest.java @@ -360,7 +360,7 @@ public void onSelectTrade(TradeOffer offer) { } @Override - public boolean onTrade(TradeOffer offer) { + public boolean shouldTrade(TradeOffer offer) { return player.isCreative(); }