From 1254320033d9345c8cf27e2dbeeb0b098735d029 Mon Sep 17 00:00:00 2001 From: Chris Xiong Date: Sat, 11 May 2024 00:35:40 -0400 Subject: (AutoTrade) Allow setting a maximum acceptable price. --- .../modules/AcceptablePricesScreen.java | 78 ++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/main/java/org/chrisoft/trashyaddon/modules/AcceptablePricesScreen.java (limited to 'src/main/java/org/chrisoft/trashyaddon/modules/AcceptablePricesScreen.java') diff --git a/src/main/java/org/chrisoft/trashyaddon/modules/AcceptablePricesScreen.java b/src/main/java/org/chrisoft/trashyaddon/modules/AcceptablePricesScreen.java new file mode 100644 index 0000000..aec721d --- /dev/null +++ b/src/main/java/org/chrisoft/trashyaddon/modules/AcceptablePricesScreen.java @@ -0,0 +1,78 @@ +package org.chrisoft.trashyaddon.modules; + +import meteordevelopment.meteorclient.gui.GuiTheme; +import meteordevelopment.meteorclient.gui.WindowScreen; +import meteordevelopment.meteorclient.gui.screens.settings.ItemSettingScreen; +import meteordevelopment.meteorclient.gui.widgets.WItemWithLabel; +import meteordevelopment.meteorclient.gui.widgets.containers.WHorizontalList; +import meteordevelopment.meteorclient.gui.widgets.containers.WTable; +import meteordevelopment.meteorclient.gui.widgets.input.WIntEdit; +import meteordevelopment.meteorclient.gui.widgets.pressable.WMinus; +import meteordevelopment.meteorclient.settings.ItemSetting; +import net.minecraft.client.MinecraftClient; +import net.minecraft.item.Item; +import net.minecraft.item.Items; + +import java.util.ArrayList; + +public class AcceptablePricesScreen extends WindowScreen { + private final AcceptablePrices targetValue; + private WTable table; + private ArrayList rowItems; + public AcceptablePricesScreen(GuiTheme theme, AcceptablePrices prices) { + super(theme, "Configure max prices for each trade"); + targetValue = prices; + rowItems = new ArrayList<>(); + } + + @Override + public void initWidgets() { + this.add(theme.label("The amount set here corresponds to the max number of items in the first input slot.")); + table = this.add(theme.table()).expandX().widget(); + initTable(); + WHorizontalList hl = theme.horizontalList(); + hl.add(theme.label("")).expandCellX(); + hl.add(theme.plus()).widget().action = () -> { + ItemSetting t = new ItemSetting("", "", Items.AIR, null, null, null, + (Item item) -> AcceptablePrices.allItems.contains(item) && (targetValue.getMaxPriceForItem(item) == null)); + ItemSettingScreen screen = new ItemSettingScreen(this.theme, t); + screen.onClosed(() -> { + Item item = t.get(); + if (item != null && item != Items.AIR) + addRowForItem(item); + }); + MinecraftClient.getInstance().setScreen(screen); + }; + this.add(hl).expandX(); + } + + private void initTable() { + for (Item i : targetValue.allConfiguredItems()) { + addRowForItem(i); + } + } + private void addRowForItem(Item item) { + rowItems.add(item); + WItemWithLabel itemDisplay = theme.itemWithLabel(item.getDefaultStack(), item.getName().getString()); + table.add(itemDisplay).expandCellX(); + Integer v = targetValue.getMaxPriceForItem(item); + if (v == null) { + targetValue.setMaxPriceForItem(item, 1); + v = 1; + } + WIntEdit priceEdit = theme.intEdit(v, 1, 64, true); + priceEdit.action = () -> { + targetValue.setMaxPriceForItem(item, priceEdit.get()); + }; + table.add(priceEdit); + WMinus deleteButton = theme.minus(); + deleteButton.action = () -> { + table.removeRow(rowItems.indexOf(item)); + this.invalidate(); + rowItems.remove(item); + targetValue.unsetMaxPriceForItem(item); + }; + table.add(deleteButton); + table.row(); + } +} -- cgit v1.2.3