aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/chrisoft/trashyaddon/modules/AutoTrade.java
diff options
context:
space:
mode:
authorGravatar Chris Xiong <chirs241097@gmail.com> 2024-05-11 00:35:40 -0400
committerGravatar Chris Xiong <chirs241097@gmail.com> 2024-05-11 00:35:40 -0400
commit1254320033d9345c8cf27e2dbeeb0b098735d029 (patch)
tree0b4a0174d860f9595e0fc5e50f55e2008050a1ed /src/main/java/org/chrisoft/trashyaddon/modules/AutoTrade.java
parent58a7d8c9cf50d4b2a9ae321684ca9d4ce4504260 (diff)
downloadmeteor-trashy-addon-1254320033d9345c8cf27e2dbeeb0b098735d029.tar.xz
(AutoTrade) Allow setting a maximum acceptable price.
Diffstat (limited to 'src/main/java/org/chrisoft/trashyaddon/modules/AutoTrade.java')
-rw-r--r--src/main/java/org/chrisoft/trashyaddon/modules/AutoTrade.java30
1 files changed, 22 insertions, 8 deletions
diff --git a/src/main/java/org/chrisoft/trashyaddon/modules/AutoTrade.java b/src/main/java/org/chrisoft/trashyaddon/modules/AutoTrade.java
index c5df1b9..0b71598 100644
--- a/src/main/java/org/chrisoft/trashyaddon/modules/AutoTrade.java
+++ b/src/main/java/org/chrisoft/trashyaddon/modules/AutoTrade.java
@@ -20,14 +20,11 @@ import net.minecraft.village.TradeOffer;
import net.minecraft.village.TradeOfferList;
import org.chrisoft.trashyaddon.mixin.MerchantScreenAccessor;
-import java.util.ArrayList;
-import java.util.Formatter;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
public class AutoTrade extends Module {
private final SettingGroup sgGeneral = settings.getDefaultGroup();
- private static final List<Item> allSellItems = List.of(
+ public static final List<Item> allSellItems = List.of(
Items.COAL,
Items.CHICKEN,
Items.PORKCHOP,
@@ -73,7 +70,7 @@ public class AutoTrade extends Module {
Items.QUARTZ
);
- private static final List<Item> allBuyItems = List.of(
+ public static final List<Item> allBuyItems = List.of(
Items.BELL,
Items.COOKED_PORKCHOP,
Items.COOKED_CHICKEN,
@@ -129,6 +126,12 @@ public class AutoTrade extends Module {
.filter((item) -> allBuyItems.contains(item))
.build()
);
+ private final Setting<AcceptablePrices> acceptablePricesSetting = sgGeneral.add(new GenericSetting.Builder<AcceptablePrices>()
+ .name("acceptable-prices")
+ .description("Configure maximum acceptable price for each item.")
+ .defaultValue(new AcceptablePrices(new HashMap<>()))
+ .build()
+ );
private final Setting<Integer> interactionRate = sgGeneral.add(new IntSetting.Builder()
.name("Interaction Rate")
.description("Number of ticks between interactions.")
@@ -190,10 +193,21 @@ public class AutoTrade extends Module {
ItemStack msell = o.getSellItem();
List<Item> sells = sellingEnabled.get() ? this.sellsSetting.get() : List.of();
List<Item> buys = buyingEnabled.get() ? this.buysSetting.get() : List.of();
- if (!sells.contains(mbuy.getItem()) && !buys.contains(msell.getItem()))
+ Item interestedItem = null;
+ if (sells.contains(mbuy.getItem()))
+ interestedItem = mbuy.getItem();
+ if (buys.contains(msell.getItem()))
+ interestedItem = msell.getItem();
+ if (interestedItem == null)
return false;
+ Integer maxPrice = acceptablePricesSetting.get().getMaxPriceForItem(interestedItem);
+ if (maxPrice != null && mbuy.getCount() > maxPrice) {
+ return false;
+ }
FindItemResult rs = InvUtils.find((stack) -> stack.getItem().equals(mbuy.getItem()) && stack.getCount() >= mbuy.getCount());
- if (!rs.found())
+ ItemStack s0is = screen.getScreenHandler().slots.get(0).getStack();
+ boolean remainingFirstSlotSufficient = s0is.getItem().equals(mbuy.getItem()) && s0is.getCount() >= mbuy.getCount();
+ if (!rs.found() && !remainingFirstSlotSufficient)
return false;
return true;
}