From fe4e7e5388fd3a541153bbbd392f80be9b8c4db0 Mon Sep 17 00:00:00 2001 From: Listerw <33641061+Listerw@users.noreply.github.com> Date: Tue, 26 Nov 2024 10:13:44 -0800 Subject: [PATCH 1/3] Allow alt+click to transfer stacks into stockpiles and 1-item-per-tile inventories --- src/haven/Inventory.java | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/haven/Inventory.java b/src/haven/Inventory.java index fd76b586..ef93a597 100644 --- a/src/haven/Inventory.java +++ b/src/haven/Inventory.java @@ -360,6 +360,9 @@ public void wdgmsg(Widget sender, String msg, Object... args) { } Color colorIdentical = null; + + Object[] invxf2Args = tryBuildInvxf2Args(); + for (WItem item : items) { try { if (Config.transfercolor) { @@ -379,6 +382,11 @@ public void wdgmsg(Widget sender, String msg, Object... args) { } } item.item.wdgmsg("transfer", Coord.z); + PBotItem pbItem = new PBotItem(item); + if (pbItem.isStack()) { + invxf2Args[1] = pbItem.getStackContents().size(); + pbItem.getStackContents().get(0).gitem.wdgmsg("invxf2", invxf2Args); + } } catch (Exception e) { System.out.println(e.getMessage()); } @@ -403,6 +411,38 @@ public void wdgmsg(Widget sender, String msg, Object... args) { } } + private Object[] tryBuildInvxf2Args() { + List transferTargetIds = getTransferTargetWidgetIds(); + if (transferTargetIds.isEmpty()) { + return null; + } + + Object[] xf2args = new Object[2 + transferTargetIds.size()]; + xf2args[0] = 0; + xf2args[1] = 1; + for (int i = 0; i < transferTargetIds.size(); i++) { + xf2args[i+2] = transferTargetIds.get(i); + } + return xf2args; + } + + private List getTransferTargetWidgetIds() { + List externalInventoryIds = PBotUtils.getAllInventories(ui).stream().filter(i -> { + Window window = i.inv.getparent(Window.class); + if (window == null || window.cap == null || window.cap.text == null) { + return false; + } + + return !PLAYER_INVENTORY_NAMES.contains(window.cap.text); + }).map(i -> i.inv.wdgid()) + .collect(Collectors.toList()); + + List stockpiles = ui.widgets.values().stream().filter(i -> i instanceof ISBox).map(Widget::wdgid).collect(Collectors.toList()); + + externalInventoryIds.addAll(stockpiles); + return externalInventoryIds; + } + public List getIdenticalItems(GItem item) { List items = new ArrayList(); GSprite sprite = item.spr(); From 9fdfd2a982e23285430c3141c1c41c0fd3965285 Mon Sep 17 00:00:00 2001 From: Listerw <33641061+Listerw@users.noreply.github.com> Date: Tue, 26 Nov 2024 10:46:52 -0800 Subject: [PATCH 2/3] Add missing inventory names --- src/haven/Inventory.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/haven/Inventory.java b/src/haven/Inventory.java index ef93a597..f193ce89 100644 --- a/src/haven/Inventory.java +++ b/src/haven/Inventory.java @@ -56,6 +56,7 @@ public class Inventory extends Widget implements DTarget2, ItemObserver, InventoryListener { public static final Coord sqsz = UI.scale(33, 33); public static final Tex invsq/* = Resource.loadtex("gfx/hud/invsq")*/; + private static final Set PLAYER_INVENTORY_NAMES = new HashSet<>(Arrays.asList("Inventory", "Belt", "Equipment", "Character Sheet", "Study")); public boolean dropul = true; public Coord isz; public boolean[] sqmask = null; From cc1153687307f440e656f5fc7af2f4a64a046f78 Mon Sep 17 00:00:00 2001 From: Listerw <33641061+Listerw@users.noreply.github.com> Date: Tue, 26 Nov 2024 10:50:53 -0800 Subject: [PATCH 3/3] Fix missing import --- src/haven/Inventory.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/haven/Inventory.java b/src/haven/Inventory.java index f193ce89..b5157fa7 100644 --- a/src/haven/Inventory.java +++ b/src/haven/Inventory.java @@ -37,6 +37,7 @@ import java.awt.Color; import java.awt.image.WritableRaster; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashMap;