From 6f26fe46c2537d6a2438c3c4061d3ef8a6d5ff50 Mon Sep 17 00:00:00 2001
From: Chris Xiong <chirs241097@gmail.com>
Date: Sun, 21 Apr 2024 19:06:12 -0400
Subject: Fix trading of items that can't be finished in one go.

---
 src/main/java/org/chrisoft/trashyaddon/modules/AutoTrade.java | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

(limited to 'src/main/java/org')

diff --git a/src/main/java/org/chrisoft/trashyaddon/modules/AutoTrade.java b/src/main/java/org/chrisoft/trashyaddon/modules/AutoTrade.java
index 5cfacdc..07c6995 100644
--- a/src/main/java/org/chrisoft/trashyaddon/modules/AutoTrade.java
+++ b/src/main/java/org/chrisoft/trashyaddon/modules/AutoTrade.java
@@ -15,6 +15,7 @@ import net.minecraft.item.ItemStack;
 import net.minecraft.item.Items;
 import net.minecraft.network.packet.s2c.play.ScreenHandlerSlotUpdateS2CPacket;
 import net.minecraft.network.packet.s2c.play.SetTradeOffersS2CPacket;
+import net.minecraft.screen.MerchantScreenHandler;
 import net.minecraft.village.TradeOffer;
 import net.minecraft.village.TradeOfferList;
 import org.chrisoft.trashyaddon.mixin.MerchantScreenAccessor;
@@ -124,7 +125,7 @@ public class AutoTrade extends Module {
         .name("Interaction Rate")
         .description("Number of ticks between interactions.")
         .min(0)
-        .max(10)
+        .max(20)
         .build()
     );
     private final Setting<Boolean> autoClose = sgGeneral.add(new BoolSetting.Builder()
@@ -134,7 +135,7 @@ public class AutoTrade extends Module {
     );
     private final Setting<Boolean> logSummary = sgGeneral.add(new BoolSetting.Builder()
         .name("Log Summary")
-        .description("Give a summary of what has been traded once it finishes trading.")
+        .description("Give a summary of what has been traded once trading is complete.")
         .build()
     );
 
@@ -270,7 +271,10 @@ public class AutoTrade extends Module {
                 endTrading();
                 return;
             }
-            if (waitState != WaitState.None && currentOffer < offers.size() && offers.get(currentOffer).isDisabled()) {
+            if (waitState != WaitState.None && currentOffer < offers.size() && (offers.get(currentOffer).isDisabled() ||
+                screen.getScreenHandler().slots.get(0).getStack().getCount() < offers.get(currentOffer).getAdjustedFirstBuyItem().getCount())) {
+                // the WaitingForInventoryUpdate state is mostly useless because ScreenHandlerSlotUpdateS2CPacket
+                // isn't sent after the shift-click...
                 finalizeCurrentTrade();
                 waitState = WaitState.None;
                 ticksRemaining = interactionRate.get();
-- 
cgit v1.2.3