InventoryBogoSorter
58 merged pull requests.
New Features
- #227 Adds cancelable BeforeSortEvent (player, container, inGui, sortKeyCode) posted from ClientEventHandler before inventory and GUI sorts. A cancelled sort returns false so the input passes to other handlers. - @vermz99
- Added: BeforeSortEvent for cancelling sorts
- #225 Implemented two new NBT sort rules (tc_essentia, forestry_genome) in DefaultRules; extended ItemCompareHelper to compare NBTTagString and NBTTagList; added Mods.Thaumcraft enum and translations. - @Faith4ng
- Added: tc_essentia sort rule, forestry_genome sort rule, NBTTagString comparison, NBTTagList comparison
- Fixed: essentia container sorting, Forestry bee/larvae sorting
- Closes #224
- #220 Adds isPinned(EntityPlayer, Container, Slot) to IBogoSortAPI and implements it in BogoSortAPI. Player slots go through PinnedSlots.isPinned, other containers through the backpack mask and PinnedSlots.isBackpackPinned. Must be called on the logical server. - @Algent
- Added: isPinned method in the BogoSorter API
- #218 Added two mixin classes (MixinContainerBag, MixinContainerCloak) to enable sorting in Witching Gadgets containers and registered the mods in TargetedMod enum. - @Edgaru089
- Added: Bag of Tricks sorting support, Cloak of Volumous Pockets sorting support, WitchingGadgets mixins
- Closes #217
- #215 Implemented PinnedSlots system with client rendering (PinnedSlotClient), new keybind (Ctrl+Middle Click), network packet (CPlayerPins), and config options including 9 visual styles. Supports player data storage and backpack compatibility. - @Algent
- Added: pinned slots system, PinnedSlotClient, CPlayerPins network packet, pinned slot rendering, 9 visual styles
- #213 Implemented DropKeyRepeatHandler, added GuiContainerDropKeyMixin, and extended config with drop repeat options (enabled by default, 5 tick delay). - @Caedis
- Added: drop key repetition, DropKeyRepeatHandler, GuiContainerDropKeyMixin
- #206 Added hotbar drop-off configuration option to BogoSorterConfig and modified DropOffHandler to include hotbar slots when processing drop-off tasks. - @MassAnarchyy
- Added: hotbar drop-off feature, hotbar drop-off config toggle
- #205 Extended ShortcutHandler to recognize and properly handle Forestry workbench containers, enabling shortcut key functionality in those GUIs. - @MassAnarchyy
- Added: Forestry workbench shortcut support
- Fixed: Alt+Click not working in Forestry workbenches
- Closes #155
- #196 Added vending machine detection, coin deposit destination handling, new UI buttons in config GUI, and network packets to synchronize coin deposit preferences between client and server. - @MassAnarchyy
- Added: vending machine drop-off support, coin deposit destination selector, deposit sound effect
- #184 Added AE2 client bridge, tooltip command infrastructure, and network handlers to query AE2 storage systems from NEI overlays. Includes new packet types and configuration options. - @MassAnarchyy
- Added: AE2 wireless terminal NEI integration, Thaumic Aspects integration, /bogosorter tooltip command, AE2 client bridge
- #164 Refactored RendererCube with smooth fading animation system; added multiple render style enums; expanded BogoSorterConfig with render style configuration. - @0hwx
- Added: Drop-off render style options, Smooth fade animation system
- #163 Enhanced InventoryManager to scan tile entities across loaded chunks using a chunk-based search; added null safety in LocalizationHelper; retrieves mod ID from ItemStack to avoid conflicts between mods with identical unlocalized names. - @0hwx
- Added: Binnie Compartments support, Filing Cabinet support, Chunk-based inventory scanning
- Fixed: Drop-off with Binnie Compartments, Drop-off crashes, Drop-off with Filing Cabinets, Range config not updating on servers
- Closes GTNH#21426, GTNH#21872, GTNH#21952, GTNH#22140, #161
- #162 Added Chisel mod compatibility in DefaultCompat; updated mod metadata and dependencies to support Chisel chest detection. - @0hwx
- Added: Chisel chest compatibility
- Fixed: Chisel chest sorting support
- Closes #157, GTNH#22756
- #146 Implemented BSKeybinds control system with BSGuiControls, BSGuiKeybindList, and BSButtonEntry classes; integrated Shortcut keybind support with dynamic key capture and GUI binding management. - @0hwx
- Added: In-game keybind editor GUI, BSKeybinds control system, BSGuiControls, BSGuiKeybindList, BSButtonEntry
- Closes #55
- #142 Added ArrowHandlerRegistry and compatibility handlers for Tinkers' Construct and vanilla bows to track and display arrow/ammo counts in the Usage Ticker UI. - @0hwx
- Added: Ammo tracker in Usage Ticker, ArrowHandlerRegistry, Tinkers' Construct arrow compat, Vanilla bow handler
- #139 Split sorting keybind logic in ClientEventHandler; removed sorting-with-no-gui option and made inside-GUI sorting default to middle click with dedicated world keybind. - @Caedis
- Added: Dedicated outside-GUI sort keybind
- Removed: Sorting with no GUI option
- #134 Added server-controlled config option in BogoSorterConfig and RefillHandler to toggle auto-refill behavior. - @Caedis
- Added: Server-controlled refill toggle configuration
- Closes #133
Changes
- #229 Removes GuiRecipe/NEIRecipeWidget hover lookups from Ae2TerminalSearchAdapter and the recipe branch in Ae2TooltipClient.RecipeTooltipHandler. ClientEventHandler now uses Mods.Nei.isLoaded(). - @slprime
- Removed: NEI GuiRecipe hover hooks
- #223 Updated SDropOffMessage and Ae2TooltipClient to apply user locale number formatting. - @Connor-Colenso
- #207 Updated color constant in Ae2TooltipClient from aqua to gold. - @MassAnarchyy
- #180 Updated dependencies.gradle and replaced deprecated Grid.mapToMatrix usage in ConfigGui with a compatible alternative to prevent crashes on insufficient grid elements. - @tiffit
- Fixed: crash on opening sort config
- Closes GTNH#24361
- #148 Migrated refill logic to server-side packet handling via CRefill packet; removed client-side MixinEntityPlayer refill hook; replaced hacky consumed-item refilling with proper server-controlled behavior. - @Caedis
- Added: CRefill server-side packet handler
- Removed: MixinEntityPlayer client-side refill, Hacky consumed item refilling
- Fixed: Auto-refill settings not being respected
- Closes #147
Bug Fixes
- #230 ClientSortData.of runs the display name through GTNHLib FontRendering.preprocessText on the client. ItemCompareHelper.FORMATTING_PATTERN now strips any section sign followed by one character, which covers converted hex codes. - @alppp
- Fixed: display name sort using & and hex color codes
- #228 MixinItemStack no longer stores an EntityPlayer field. It now uses a MixinExtras ModifyExpressionValue on the attemptDamageItem call inside damageItem to run the refill hook for non-FakePlayer players. - @Alexdoru
- Fixed: world memory leak from ItemStack mixin, extra memory per ItemStack
- #221 Updated RendererCube to use renderViewEntity instead of direct player entity for camera calculations. - @Caedis
- Fixed: freecam compatibility
- #219 Added an FMLServerStoppedEvent handler in BogoSorter that calls Ae2AmountService.clearCaches() to release references held by Ae2AmountServiceImpl. - @Alexdoru
- Fixed: world server leak in Ae2AmountServiceImpl
- #214 Removed the static AE2_PRESENT flag that used Class.forName on appeng.api.storage.IStorageGrid (wrong package). onPlayerLogout now uses Mods.Ae2.isLoaded(). - @Kogepan229
- Removed: class-based AE2 presence check
- Fixed: incorrect AE2 presence detection
- #212 ClientEventHandler.Keypress now also checks the current Keyboard/Mouse event state for the bound key, since isPressed does not work inside a GUI. When Controlling is loaded, the new ControllingCompat.isModifierActive checks ComboKeyBinding modifiers. - @Algent
- Added: ControllingCompat helper
- Fixed: Middle-click inventory sort not working, Keyboard sort key not working in open inventory
- Closes GTNH#26019
- #211 ClientEventHandler.handleInput now checks modifier state for the dropoff and sort keybinds and skips them when a text field is focused. The NEI check reads the GuiRecipe searchField and LayoutManager.searchField directly instead of calling isVisible and focused by reflection. - @Algent
- Fixed: Drop off key firing while typing in chat, Drop off key bound to Ctrl+G firing on G, Drop off and sort ignoring modifiers
- #210 Edits three lines in zh_CN.lang. - @MCTBL
- Fixed: Simplified Chinese translations
- #204 MixinGuiNewKeyBindingList no longer shadows the private displayedEntries field, which unimixins could not find. It shadows setDisplayedEntries and calls it instead. - @MassAnarchyy
- Fixed: Crash with the Controlling mod from a mixin shadow field
- #203 ShortcutHandler.getContainerShortcutSlots for CraftingStationContainer again collects non-player slots that are not the craft matrix, and returns null when the list is empty. - @MassAnarchyy
- Fixed: Alt+Click not working with the Crafting Station
- Closes #200
- #202 ClientEventHandler reflects into codechicken.nei.recipe.GuiRecipe searchField and skips dropoff when it is focused. BSKeybinds.getComboDisplayString falls back to the keycode masked with 0xFF and then the key.keyCode lang string. BSGuiKeybindList masks recorded key codes with 0xFF. - @MassAnarchyy
- Fixed: Drop off key triggering in the NEI filter bar, Keybind settings showing key codes instead of key names
- Closes #201
- #198 Ae2TooltipClient.fluidOf returns null for stacks where StackInfo.isFluidContainer is true, instead of calling StackInfo.getFluid. - @MassAnarchyy
- Fixed: Buckets shown as fluids in AE2 tooltips
- #197 ShortcutHandler.moveItemStack, moveAllItems and dropItems now check the real Slot for getHasStack, SlotDummyOrCrafting and canTakeStack, and only drop the item if the slot is actually cleared. SortHandler.getSortableSlots skips slots whose real stack is empty while the accessor still reports one. - @Algent
- Fixed: Forestry backpack dupe through force drop, Item dupe through move-all and drop with open bags
- Closes Dupes-Exploits-GTNH#226, Dupes-Exploits-GTNH#241, Dupes-Exploits-GTNH#250, Dupes-Exploits-GTNH#275
- #195 ShortcutHandler.insert now also requires slot.callIsItemValid(stack) before merging into an existing stack. Also bumps dependency versions in dependencies.gradle (ModularUI2, ModularUI, GTNHLib and compileOnly mods). - @Algent
- Fixed: Cooking table food dupe via shortcut insert
- Closes Dupes-Exploits-GTNH#239
- #194 NetworkHandler runs CSort, CShortcut and CSlotSync packets immediately instead of queuing them. ShortcutHandler builds target slot lists with special handling for CraftingStationContainer and the moveAllItems signature drops the player argument. README key names were changed to SPACE. - @MassAnarchyy
- Fixed: ALT+LMB acting like shift click or being ignored, shortcut desync during rapid input, shortcuts moving into the connected chest instead of the crafting table in the Crafting Station
- Closes #193
- #192 AE2 integration is split into a facade, IAe2Service interface, a stub and an impl package, with AE2 types removed from shared APIs. BogoSorter detects AE2 via Class.forName and skips the logout cleanup without it. The rate limiter cleanup now uses a heap, and null players and reflective access are handled. - @MassAnarchyy
- Fixed: NoClassDefFoundError for appeng ITerminalHost on logout without AE2
- Closes #191
- #190 Adds @Desugar to the BaublesAccessor record in Ae2AmountService and fixes its indentation. Ae2TooltipClient.requestAmount only copies the item stack when there is no fluid stack and no essentiaAspectTag. - @MassAnarchyy
- Fixed: build failure from missing Desugar annotation on the Baubles record, AE2 tooltip amount request for essentia aspect items
- #188 DefaultCompat registers the HBM ContainerCrateTemplate compat via Class.forName in a try/catch instead of a hard import, and ignores ClassNotFoundException. - @re7gog
- Fixed: incompatibility with NTM X5714 and newer
- #185 Adds bounds and null checks to CHotbarSwap, CRefill, CShortcut, CSort, CSlotSync and SortHandler, and readEnumValue returns null for an out-of-range ordinal. NetworkHandler gains gating and is registered on the FML bus. New synced config enableDebugTools (default false) replaces the deobfuscated-environment check in ClientEventHandler. - @Caedis
- Added: enableDebugTools config option
- Fixed: unvalidated custom packet handling on the server
- Closes #124
- #182 Added proper cleanup code in ClientEventHandler, GuiSortingContext, SortHandler, and ButtonHandler to clear references when worlds unload. Removed unused Serializer references. - @Alexdoru
- Removed: unused NBT serializer references
- Fixed: 4 world memory leaks
- #174 InventoryManager.isInventoryValid falls back to IInventory.getInventoryName() when the ItemStack-based name check fails. - @mikkerlo
- Fixed: drop-off not recognizing modded inventories with shared block types
- #173 ClientSortData.readFromPacket raises the readStringFromBuffer limit from 64 to 32767. - @DarkShadow44
- Fixed: crash on item names longer than 64 characters
- #172 OreDictHelper.getGtToolMaterial returns an empty string when stackTagCompound is null instead of dereferencing it. - @WayneYam
- Fixed: fatal error during network handshake from GT tools without NBT
- Closes GTNH#23244
- #169 BSKeybinds.rebuildKeyBinds skips settings with zero key codes. ClientEventHandler.handleInput null-checks each result of getActiveKeyBind before use. - @0hwx
- Fixed: bugged keybinds when a keybind is empty
- Closes GTNH#23048
- #167 ShortcutHandler.SlotDummyOrCrafting now returns true for AppEngCraftingSlot when AE2 is loaded, so shortcut moves skip it. - @lc-1337
- Fixed: server freeze from illegal crafts when shortcut-moving items into the AE2 crafting slot
- Closes GTNH#22963
- #166 InventoryManager.getNearbyInventories loops over the whole result list for a matching tile entity, where it used to check only the last element. - @0hwx
- Fixed: Double chests counted twice in drop-off
- #158 ShortcutHandler.moveItemStack returns early when stack.stackSize is 0 or lower. - @Worive
- Fixed: Moving invalid item stacks with shortcuts
- #154 Bumps ModularUI2 from 2.2.20 to 2.3.3. ConfigGui moves to the UITexture builder, IThemeApi in place of Theme, and a generic TextWidget. - @FrostyFire1
- Fixed: Crash when opening the sort config GUI
- Closes GTNH#21998, #153
- #149 CRefill gets a swap boolean that is encoded, decoded and passed to RefillHandler. DamageHelper.damageItemHook now sends a CRefill packet with swap true instead of calling RefillHandler.handle directly. RefillHandler.onDestroyItem sends swap false. - @0hwx
- Fixed: Auto-refill desync between client and server
- #145 HotbarSwap.render passes 24 instead of 22 as the last texture size argument of the draw call. - @0hwx
- Fixed: Hotbar swap overlay rendering
- #143 ClientEventHandler: config GUI and drop-off key handling moves out of onKeyInput into handleInput and uses Keypress, which reads all input. The sort key checks use Keypress, with a Keyboard.isKeyDown fallback for keyboard keys. - @0hwx
- Fixed: Config and drop-off keys ignoring mouse input, Sort keys not working with keyboard keys
- #140 ButtonHandler.onInitGui checks buttonEnabled. The Draconium chest slot group x moves from 260 to 234. The Vanilla_BOTH mixin enum entry is renamed to Vanilla, which fixes the IllegalAccessError. The Forestry worktable class path in CraftingTweaks Compatiblity changes to forestry.factory.gui, and ClientProxy stores the event button list instead of using GuiScreenAccessor. The server auto-refill lang key is renamed to autorefill.enable_server. - @0hwx
- Fixed: Crash when right-clicking the Multiblock Structure Hologram Projector facing the air, Crash when opening the AromaBackup backup screen, Sort button showing while disabled in config, Sorting in the Draconic Evolution chest, Forestry Worktable crafting tweak compatibility, Missing lang text for the server auto-refill option
- Closes #117, #120, #121, #127
Performance
- #165 Implemented DropOffScheduler and DropOffTask for multi-tick item transfer distribution based on DropoffQuotaInMS setting; replaced instant CDropOff processing with sequential queued transfers. - @0hwx
- Added: DropOffScheduler, DropOffTask, Multi-tick transfer system
- Removed: Instant drop-off processing
- Fixed: Server lag spikes from drop-off
Removals
- #175 Removes the net.blay09.mods.craftingtweaks package and the CraftingTweaks, Forestry, CodeChickenCore, NEI and AE2 mixins that implemented Mouse Tweaks and CraftingTweaks hooks, along with their Mixins enum entries. - @Caedis
- Removed: bundled CraftingTweaks, bundled MouseTweaks integration mixins
Internal / Refactor
- #144 Adds Mods.versionMatches(String) using VersionParser.parseRange and getProcessedVersion. The BetterStorage and BetterStorageFixed entries use it instead of startsWith checks. - @0hwx
Documentation
- #216 Comment only above the Optional.Method annotation on OreDictHelper.getGtToolMaterial. - @felixfour
Contributors
Everyone who authored, reviewed or co-authored a change on this page, with how many of them:
@Caedis (29), @0hwx (26), @MassAnarchyy (17), @Algent (7), @Alexdoru (3), @boubou19 (3), @DarkShadow44 (3), @slprime (3), @UltraProdigy (3), @Kogepan229 (2), @tiffit (2), @ABKQPO (1), @alppp (1), @AshVz (1), @Connor-Colenso (1), @cubefury (1), @Dream-Master (1), @DylanTaylor1 (1), @Edgaru089 (1), @Eldrinn-Elantey (1), @Faith4ng (1), @felixfour (1), @FrostyFire1 (1), @glektarssza (1), @koolkrafter5 (1), @lc-1337 (1), @Lyfts (1), @MCTBL (1), @mikkerlo (1), @Ranzuu (1), @re7gog (1), @sisyphussy (1), @vermz99 (1), @WayneYam (1), @wlhlm (1), @Worive (1)