Sophisticated Sorter
Sophisticated Sorter extends the container sorting (and related) features that come with the Sophisticated series so they work on the player inventory and on every usable container.
Main Features
Sort Button Extension
The mod adds Sophisticated Core's sort buttons to most regular container screens. "Extension" here means bringing the Sophisticated Core sorting entry point to more containers outside the Sophisticated series, not adding a second, completely different sorting logic. Sorting still uses Sophisticated Core's four sorting modes: by name, by mod, by count and by tags, with by name as the default mode.
One button performs the sort, the other cycles the sort mode. Players already used to the Sophisticated series' sorting should not need to relearn anything.
Player Inventory Sorting
The mod can sort the player's own inventory. When the current screen does not qualify as "sort the container itself", the mod sorts the player inventory instead. So even on crafting tables, furnaces or recipe-type screens you can still quickly sort the items on your character.
When the current screen does qualify, the mod sorts the container itself rather than the player inventory. This way ordinary containers such as chests and barrels get the same sorting experience as the Sophisticated series.
Even on screens that do not display the sort buttons, you can still sort with the hotkey (default: R).
The hotkey and the buttons share the same target logic: if the current screen suits sorting the
container, it sorts the container; otherwise it sorts the player inventory.
Search & Quick Transfer
Very common functionality; not much to say.
Container Filter Rules
Whether the current container is sorted is controlled by two filters:
Filter1(enabled by default): when enabled, only screens with more than46slots are treated as a sortable container; otherwise sorting falls back to the player inventory. 46 can be read as the player's 36 inventory slots plus 10 for a small container. Screens with few slots, such as crafting tables or small utility screens, therefore do not sort the container itself by default.Filter2(enabled by default): when enabled, if the current screen contains any slots that are clearly unsuitable for sorting, the screen is not treated as a sortable container. The most typical example is special slots such as crafting result slots. This filter exists to keep functional screens from accidentally sorting special slots.
On a regular container screen the sort buttons only appear when it satisfies the current filters (and is not blacklisted). Screens that are not suited for sorting the container usually hide the buttons, but the hotkey still sorts the player inventory there.
Button Layout
Buttons can be repositioned by right-click-dragging them, and toggled hidden/shown with the hotkey
(default: U).
Button layout is isolated per container type: moving the buttons inside a chest does not affect barrels.
Container Settings
- Ignore sorting: mark a slot range; slots inside that range are never sorted.
- Slot memory: assign a fixed item to a specific slot in a container — no other item can be placed there, and when sorting, the matching item is placed into that slot first.
All Versions
+ Add Version| Name | Game version | Platforms | Published | Downloads | Actions |
|---|---|---|---|---|---|
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 | ||||
| 1d ago | 1 |
- Clearer failure when the Sophisticated Core prerequisite is missing.** Every entry point now probes
sophisticatedcore, instead of dying inside class initialisation with a bare NoClassDefFoundError
(which some launchers surface only as a generic "mod loading failed", with no usable cause). All
targets already declare Core in their mod metadata, so a normal loader still blocks the start first.
Documentation (README / docs) now states the prerequisite explicitly.
- Fabric: fixed item loss when sorting several identical max-stack-1 items** (reported with iron
InventorySorter mixin that caps each slot's stack limit at the item's own limit embedded a
vanilla type in its injection target but was compiled with
remap = false. Fabric production
runtimes use intermediary names (
class_1799), so the injector was never found there: the sorter
kept using the container's 64-per-slot limit, merged e.g. five axes into one "stack of 5", and the
container truncated it back to one on write-back ¡ª the rest were destroyed. The injector target is
now remapped (
@At(remap = true), keeping the Core method itself unremapped), and the built
refmap maps
ItemStack to class_1799 so the hook actually applies. Forge/NeoForge keep official
class names and were unaffected.
- Sort results are now validated before being written back.** Besides the pre-existing "no item
allowed for that item; an oversized stack (exactly the corruption above, which a container would
truncate) makes the sort keep the originals instead. A legitimate pre-existing oversized stack
still passes.
- New config
transferMainInventoryFirst(defaulttrue).** When transferring container items
matching Sophisticated Core's own transfer. Set it to
false for the old vanilla quick-move order
(hotbar first). The choice travels with the transfer request, so client and server agree. Applies to
all targets.
- The whole mod is now inert on Sophisticated Backpacks / Sophisticated Storage screens.**
memory slots), so the sorter no longer triggers its own sort on them from any entry point:
- Their main screens extend Core's
StorageScreenBaseand their settings screens extend
SettingsScreen; all client entry points (sort key, sort/transfer buttons, the settings gear,
the disable toggle, slot-highlight decoration and even the search-box tooltip hint) now bail
out on both.
- Server-side guard:
CoreUtils.executeSort/executeTransferskip any open
StorageContainerMenuBase / SettingsContainerMenu, so even a mismatched or third-party
client cannot make the sorter touch a Sophisticated container.
- Fixed item loss ("swallowing" items) when sorting a high-stack inventory.** The generic sort
InventorySorter, which places items back at the *vanilla* 64-per-slot
limit; a high-stack item (from a stack upgrade) then needs many slots, and Core silently drops the
overflow when there are not enough. The sort result is now verified against the per-item totals
taken before the sort and is discarded when anything would be lost, so sorting can never destroy
items. Applies to the shared backend and the 26.1 adapter.
- Fixed the sort/disable keys doing anything at all on a Sophisticated screen, which previously made
> Note: the two entries above and the first two entries of this release are the fixes for the
> "sorting swallows items / only one item left" reports. The root causes were distinct:
> 1. **Fabric only** ¡ª a mixin lost its obfuscation mapping in production, so max-stack-1 items were
> merged into one invalid stack and truncated (iron axes / leggings / shovels all reduced to one).
> 2. **All targets** ¡ª the generic sort could not represent high-stack items (stack upgrades) or
> items that needed more slots than were free, and the overflow was dropped.
- Clearer failure when the Sophisticated Core prerequisite is missing.** Every entry point now probes
sophisticatedcore, instead of dying inside class initialisation with a bare NoClassDefFoundError
(which some launchers surface only as a generic "mod loading failed", with no usable cause). All
targets already declare Core in their mod metadata, so a normal loader still blocks the start first.
Documentation (README / docs) now states the prerequisite explicitly.
- Fabric: fixed item loss when sorting several identical max-stack-1 items** (reported with iron
InventorySorter mixin that caps each slot's stack limit at the item's own limit embedded a
vanilla type in its injection target but was compiled with
remap = false. Fabric production
runtimes use intermediary names (
class_1799), so the injector was never found there: the sorter
kept using the container's 64-per-slot limit, merged e.g. five axes into one "stack of 5", and the
container truncated it back to one on write-back ¡ª the rest were destroyed. The injector target is
now remapped (
@At(remap = true), keeping the Core method itself unremapped), and the built
refmap maps
ItemStack to class_1799 so the hook actually applies. Forge/NeoForge keep official
class names and were unaffected.
- Sort results are now validated before being written back.** Besides the pre-existing "no item
allowed for that item; an oversized stack (exactly the corruption above, which a container would
truncate) makes the sort keep the originals instead. A legitimate pre-existing oversized stack
still passes.
- New config
transferMainInventoryFirst(defaulttrue).** When transferring container items
matching Sophisticated Core's own transfer. Set it to
false for the old vanilla quick-move order
(hotbar first). The choice travels with the transfer request, so client and server agree. Applies to
all targets.
- The whole mod is now inert on Sophisticated Backpacks / Sophisticated Storage screens.**
memory slots), so the sorter no longer triggers its own sort on them from any entry point:
- Their main screens extend Core's
StorageScreenBaseand their settings screens extend
SettingsScreen; all client entry points (sort key, sort/transfer buttons, the settings gear,
the disable toggle, slot-highlight decoration and even the search-box tooltip hint) now bail
out on both.
- Server-side guard:
CoreUtils.executeSort/executeTransferskip any open
StorageContainerMenuBase / SettingsContainerMenu, so even a mismatched or third-party
client cannot make the sorter touch a Sophisticated container.
- Fixed item loss ("swallowing" items) when sorting a high-stack inventory.** The generic sort
InventorySorter, which places items back at the *vanilla* 64-per-slot
limit; a high-stack item (from a stack upgrade) then needs many slots, and Core silently drops the
overflow when there are not enough. The sort result is now verified against the per-item totals
taken before the sort and is discarded when anything would be lost, so sorting can never destroy
items. Applies to the shared backend and the 26.1 adapter.
- Fixed the sort/disable keys doing anything at all on a Sophisticated screen, which previously made
> Note: the two entries above and the first two entries of this release are the fixes for the
> "sorting swallows items / only one item left" reports. The root causes were distinct:
> 1. **Fabric only** ¡ª a mixin lost its obfuscation mapping in production, so max-stack-1 items were
> merged into one invalid stack and truncated (iron axes / leggings / shovels all reduced to one).
> 2. **All targets** ¡ª the generic sort could not represent high-stack items (stack upgrades) or
> items that needed more slots than were free, and the overflow was dropped.
- Clearer failure when the Sophisticated Core prerequisite is missing.** Every entry point now probes
sophisticatedcore, instead of dying inside class initialisation with a bare NoClassDefFoundError
(which some launchers surface only as a generic "mod loading failed", with no usable cause). All
targets already declare Core in their mod metadata, so a normal loader still blocks the start first.
Documentation (README / docs) now states the prerequisite explicitly.
- Fabric: fixed item loss when sorting several identical max-stack-1 items** (reported with iron
InventorySorter mixin that caps each slot's stack limit at the item's own limit embedded a
vanilla type in its injection target but was compiled with
remap = false. Fabric production
runtimes use intermediary names (
class_1799), so the injector was never found there: the sorter
kept using the container's 64-per-slot limit, merged e.g. five axes into one "stack of 5", and the
container truncated it back to one on write-back ¡ª the rest were destroyed. The injector target is
now remapped (
@At(remap = true), keeping the Core method itself unremapped), and the built
refmap maps
ItemStack to class_1799 so the hook actually applies. Forge/NeoForge keep official
class names and were unaffected.
- Sort results are now validated before being written back.** Besides the pre-existing "no item
allowed for that item; an oversized stack (exactly the corruption above, which a container would
truncate) makes the sort keep the originals instead. A legitimate pre-existing oversized stack
still passes.
- New config
transferMainInventoryFirst(defaulttrue).** When transferring container items
matching Sophisticated Core's own transfer. Set it to
false for the old vanilla quick-move order
(hotbar first). The choice travels with the transfer request, so client and server agree. Applies to
all targets.
- The whole mod is now inert on Sophisticated Backpacks / Sophisticated Storage screens.**
memory slots), so the sorter no longer triggers its own sort on them from any entry point:
- Their main screens extend Core's
StorageScreenBaseand their settings screens extend
SettingsScreen; all client entry points (sort key, sort/transfer buttons, the settings gear,
the disable toggle, slot-highlight decoration and even the search-box tooltip hint) now bail
out on both.
- Server-side guard:
CoreUtils.executeSort/executeTransferskip any open
StorageContainerMenuBase / SettingsContainerMenu, so even a mismatched or third-party
client cannot make the sorter touch a Sophisticated container.
- Fixed item loss ("swallowing" items) when sorting a high-stack inventory.** The generic sort
InventorySorter, which places items back at the *vanilla* 64-per-slot
limit; a high-stack item (from a stack upgrade) then needs many slots, and Core silently drops the
overflow when there are not enough. The sort result is now verified against the per-item totals
taken before the sort and is discarded when anything would be lost, so sorting can never destroy
items. Applies to the shared backend and the 26.1 adapter.
- Fixed the sort/disable keys doing anything at all on a Sophisticated screen, which previously made
> Note: the two entries above and the first two entries of this release are the fixes for the
> "sorting swallows items / only one item left" reports. The root causes were distinct:
> 1. **Fabric only** ¡ª a mixin lost its obfuscation mapping in production, so max-stack-1 items were
> merged into one invalid stack and truncated (iron axes / leggings / shovels all reduced to one).
> 2. **All targets** ¡ª the generic sort could not represent high-stack items (stack upgrades) or
> items that needed more slots than were free, and the overflow was dropped.
- Clearer failure when the Sophisticated Core prerequisite is missing.** Every entry point now probes
sophisticatedcore, instead of dying inside class initialisation with a bare NoClassDefFoundError
(which some launchers surface only as a generic "mod loading failed", with no usable cause). All
targets already declare Core in their mod metadata, so a normal loader still blocks the start first.
Documentation (README / docs) now states the prerequisite explicitly.
- Fabric: fixed item loss when sorting several identical max-stack-1 items** (reported with iron
InventorySorter mixin that caps each slot's stack limit at the item's own limit embedded a
vanilla type in its injection target but was compiled with
remap = false. Fabric production
runtimes use intermediary names (
class_1799), so the injector was never found there: the sorter
kept using the container's 64-per-slot limit, merged e.g. five axes into one "stack of 5", and the
container truncated it back to one on write-back ¡ª the rest were destroyed. The injector target is
now remapped (
@At(remap = true), keeping the Core method itself unremapped), and the built
refmap maps
ItemStack to class_1799 so the hook actually applies. Forge/NeoForge keep official
class names and were unaffected.
- Sort results are now validated before being written back.** Besides the pre-existing "no item
allowed for that item; an oversized stack (exactly the corruption above, which a container would
truncate) makes the sort keep the originals instead. A legitimate pre-existing oversized stack
still passes.
- New config
transferMainInventoryFirst(defaulttrue).** When transferring container items
matching Sophisticated Core's own transfer. Set it to
false for the old vanilla quick-move order
(hotbar first). The choice travels with the transfer request, so client and server agree. Applies to
all targets.
- The whole mod is now inert on Sophisticated Backpacks / Sophisticated Storage screens.**
memory slots), so the sorter no longer triggers its own sort on them from any entry point:
- Their main screens extend Core's
StorageScreenBaseand their settings screens extend
SettingsScreen; all client entry points (sort key, sort/transfer buttons, the settings gear,
the disable toggle, slot-highlight decoration and even the search-box tooltip hint) now bail
out on both.
- Server-side guard:
CoreUtils.executeSort/executeTransferskip any open
StorageContainerMenuBase / SettingsContainerMenu, so even a mismatched or third-party
client cannot make the sorter touch a Sophisticated container.
- Fixed item loss ("swallowing" items) when sorting a high-stack inventory.** The generic sort
InventorySorter, which places items back at the *vanilla* 64-per-slot
limit; a high-stack item (from a stack upgrade) then needs many slots, and Core silently drops the
overflow when there are not enough. The sort result is now verified against the per-item totals
taken before the sort and is discarded when anything would be lost, so sorting can never destroy
items. Applies to the shared backend and the 26.1 adapter.
- Fixed the sort/disable keys doing anything at all on a Sophisticated screen, which previously made
> Note: the two entries above and the first two entries of this release are the fixes for the
> "sorting swallows items / only one item left" reports. The root causes were distinct:
> 1. **Fabric only** ¡ª a mixin lost its obfuscation mapping in production, so max-stack-1 items were
> merged into one invalid stack and truncated (iron axes / leggings / shovels all reduced to one).
> 2. **All targets** ¡ª the generic sort could not represent high-stack items (stack upgrades) or
> items that needed more slots than were free, and the overflow was dropped.
- Clearer failure when the Sophisticated Core prerequisite is missing.** Every entry point now probes
sophisticatedcore, instead of dying inside class initialisation with a bare NoClassDefFoundError
(which some launchers surface only as a generic "mod loading failed", with no usable cause). All
targets already declare Core in their mod metadata, so a normal loader still blocks the start first.
Documentation (README / docs) now states the prerequisite explicitly.
- Fabric: fixed item loss when sorting several identical max-stack-1 items** (reported with iron
InventorySorter mixin that caps each slot's stack limit at the item's own limit embedded a
vanilla type in its injection target but was compiled with
remap = false. Fabric production
runtimes use intermediary names (
class_1799), so the injector was never found there: the sorter
kept using the container's 64-per-slot limit, merged e.g. five axes into one "stack of 5", and the
container truncated it back to one on write-back ¡ª the rest were destroyed. The injector target is
now remapped (
@At(remap = true), keeping the Core method itself unremapped), and the built
refmap maps
ItemStack to class_1799 so the hook actually applies. Forge/NeoForge keep official
class names and were unaffected.
- Sort results are now validated before being written back.** Besides the pre-existing "no item
allowed for that item; an oversized stack (exactly the corruption above, which a container would
truncate) makes the sort keep the originals instead. A legitimate pre-existing oversized stack
still passes.
- New config
transferMainInventoryFirst(defaulttrue).** When transferring container items
matching Sophisticated Core's own transfer. Set it to
false for the old vanilla quick-move order
(hotbar first). The choice travels with the transfer request, so client and server agree. Applies to
all targets.
- The whole mod is now inert on Sophisticated Backpacks / Sophisticated Storage screens.**
memory slots), so the sorter no longer triggers its own sort on them from any entry point:
- Their main screens extend Core's
StorageScreenBaseand their settings screens extend
SettingsScreen; all client entry points (sort key, sort/transfer buttons, the settings gear,
the disable toggle, slot-highlight decoration and even the search-box tooltip hint) now bail
out on both.
- Server-side guard:
CoreUtils.executeSort/executeTransferskip any open
StorageContainerMenuBase / SettingsContainerMenu, so even a mismatched or third-party
client cannot make the sorter touch a Sophisticated container.
- Fixed item loss ("swallowing" items) when sorting a high-stack inventory.** The generic sort
InventorySorter, which places items back at the *vanilla* 64-per-slot
limit; a high-stack item (from a stack upgrade) then needs many slots, and Core silently drops the
overflow when there are not enough. The sort result is now verified against the per-item totals
taken before the sort and is discarded when anything would be lost, so sorting can never destroy
items. Applies to the shared backend and the 26.1 adapter.
- Fixed the sort/disable keys doing anything at all on a Sophisticated screen, which previously made
> Note: the two entries above and the first two entries of this release are the fixes for the
> "sorting swallows items / only one item left" reports. The root causes were distinct:
> 1. **Fabric only** ¡ª a mixin lost its obfuscation mapping in production, so max-stack-1 items were
> merged into one invalid stack and truncated (iron axes / leggings / shovels all reduced to one).
> 2. **All targets** ¡ª the generic sort could not represent high-stack items (stack upgrades) or
> items that needed more slots than were free, and the overflow was dropped.
## [1.1.0-hotfix]
- Forge 1.20.1: fixed a production startup crash. The forge mixin config now declares its
refmap, so mixin targets (e.g. the quickcraftSlots accessor) resolve correctly on theSRG-named production runtime instead of failing with "No candidates were found".
- Per-screen client options now use a combined **screen class + title key** identifier:
- Button visibility (disable toggle) and button offset records are stored per screen, so
ChestScreen) no longer share button positions or the hide toggle with each other.- The button offset *render/drag* path now uses the same identifier (previously it used the
- Matching is backward compatible and loose: a stored entry matches when it equals the full
class@title id, the bare title key (the old format) or the bare screen class, so existingconfig entries keep working.
## [1.1.0] - Container Settings
This release brings the new **Container Settings** system to all supported loaders and versions.
It was originally developed for NeoForge 1.21.1 and is now available on Forge 1.20.1, Fabric 1.20.1,
Fabric 1.21.1, NeoForge 1.21.1 and NeoForge 26.1, with the loader-neutral logic shared from the
common codebase.
### New: container settings
- Per-container settings screen for every usable container (chests, barrels, ...) and the player
to fit it). On vanilla container screens the entry is also reachable directly.
- Settings are persisted **server-side** per container (world SavedData, keyed by dimension and
independently of the client and of other containers.
- Memory slots**: pick a remembered item for any slot; empty memorized slots show the remembered
the slot that do not match the memorized item.
- Ignore sorting (no-sort)**: mark slots that sorting must never touch; those slots keep whatever
- Slot highlights**: the regular container view draws the same color stripes and memory ghosts the
- Sorting now respects these settings: no-sort slots stay in place, and memorized slots are emptied
client config
memorySlotSorting on 26.1).### Ports and quality
- The whole settings feature is ported to Forge 1.20.1, Fabric 1.20.1/1.21.1 and NeoForge 26.1,
- Forge 1.20.1: fixed the per-slot highlight stripes not rendering on vanilla container screens
fillGradient argument order); entering or leaving the settings screen no longer resetsthe mouse cursor to the screen center (menu swaps are closed server-side only, mirroring
NeoForge's
SophisticatedMenuProvider behavior).- NeoForge 26.1: the settings screen now shows the container's actual items (item snapshots travel
view-only slots); sorting no longer silently does nothing after marking ignore-sort slots; new
client config
memorySlotSorting (default true) restores the classic memorized-slot refillbehavior, set it to
false to use the 26.1 sorter's plain handling.- Shared key/store/resolver logic moved into the common source set used by all 1.20.1/1.21.1
### Notes
- Container contents shown in the settings screen are a snapshot taken when the screen opens.
memorySlotSortinglives in the client config (sophisticatedsorter-client.toml) and only
own sorter.
## [1.1.0-hotfix]
- Forge 1.20.1: fixed a production startup crash. The forge mixin config now declares its
refmap, so mixin targets (e.g. the quickcraftSlots accessor) resolve correctly on theSRG-named production runtime instead of failing with "No candidates were found".
- Per-screen client options now use a combined **screen class + title key** identifier:
- Button visibility (disable toggle) and button offset records are stored per screen, so
ChestScreen) no longer share button positions or the hide toggle with each other.- The button offset *render/drag* path now uses the same identifier (previously it used the
- Matching is backward compatible and loose: a stored entry matches when it equals the full
class@title id, the bare title key (the old format) or the bare screen class, so existingconfig entries keep working.
## [1.1.0] - Container Settings
This release brings the new **Container Settings** system to all supported loaders and versions.
It was originally developed for NeoForge 1.21.1 and is now available on Forge 1.20.1, Fabric 1.20.1,
Fabric 1.21.1, NeoForge 1.21.1 and NeoForge 26.1, with the loader-neutral logic shared from the
common codebase.
### New: container settings
- Per-container settings screen for every usable container (chests, barrels, ...) and the player
to fit it). On vanilla container screens the entry is also reachable directly.
- Settings are persisted **server-side** per container (world SavedData, keyed by dimension and
independently of the client and of other containers.
- Memory slots**: pick a remembered item for any slot; empty memorized slots show the remembered
the slot that do not match the memorized item.
- Ignore sorting (no-sort)**: mark slots that sorting must never touch; those slots keep whatever
- Slot highlights**: the regular container view draws the same color stripes and memory ghosts the
- Sorting now respects these settings: no-sort slots stay in place, and memorized slots are emptied
client config
memorySlotSorting on 26.1).### Ports and quality
- The whole settings feature is ported to Forge 1.20.1, Fabric 1.20.1/1.21.1 and NeoForge 26.1,
- Forge 1.20.1: fixed the per-slot highlight stripes not rendering on vanilla container screens
fillGradient argument order); entering or leaving the settings screen no longer resetsthe mouse cursor to the screen center (menu swaps are closed server-side only, mirroring
NeoForge's
SophisticatedMenuProvider behavior).- NeoForge 26.1: the settings screen now shows the container's actual items (item snapshots travel
view-only slots); sorting no longer silently does nothing after marking ignore-sort slots; new
client config
memorySlotSorting (default true) restores the classic memorized-slot refillbehavior, set it to
false to use the 26.1 sorter's plain handling.- Shared key/store/resolver logic moved into the common source set used by all 1.20.1/1.21.1
### Notes
- Container contents shown in the settings screen are a snapshot taken when the screen opens.
memorySlotSortinglives in the client config (sophisticatedsorter-client.toml) and only
own sorter.
## [1.1.0-hotfix]
- Forge 1.20.1: fixed a production startup crash. The forge mixin config now declares its
refmap, so mixin targets (e.g. the quickcraftSlots accessor) resolve correctly on theSRG-named production runtime instead of failing with "No candidates were found".
- Per-screen client options now use a combined **screen class + title key** identifier:
- Button visibility (disable toggle) and button offset records are stored per screen, so
ChestScreen) no longer share button positions or the hide toggle with each other.- The button offset *render/drag* path now uses the same identifier (previously it used the
- Matching is backward compatible and loose: a stored entry matches when it equals the full
class@title id, the bare title key (the old format) or the bare screen class, so existingconfig entries keep working.
## [1.1.0] - Container Settings
This release brings the new **Container Settings** system to all supported loaders and versions.
It was originally developed for NeoForge 1.21.1 and is now available on Forge 1.20.1, Fabric 1.20.1,
Fabric 1.21.1, NeoForge 1.21.1 and NeoForge 26.1, with the loader-neutral logic shared from the
common codebase.
### New: container settings
- Per-container settings screen for every usable container (chests, barrels, ...) and the player
to fit it). On vanilla container screens the entry is also reachable directly.
- Settings are persisted **server-side** per container (world SavedData, keyed by dimension and
independently of the client and of other containers.
- Memory slots**: pick a remembered item for any slot; empty memorized slots show the remembered
the slot that do not match the memorized item.
- Ignore sorting (no-sort)**: mark slots that sorting must never touch; those slots keep whatever
- Slot highlights**: the regular container view draws the same color stripes and memory ghosts the
- Sorting now respects these settings: no-sort slots stay in place, and memorized slots are emptied
client config
memorySlotSorting on 26.1).### Ports and quality
- The whole settings feature is ported to Forge 1.20.1, Fabric 1.20.1/1.21.1 and NeoForge 26.1,
- Forge 1.20.1: fixed the per-slot highlight stripes not rendering on vanilla container screens
fillGradient argument order); entering or leaving the settings screen no longer resetsthe mouse cursor to the screen center (menu swaps are closed server-side only, mirroring
NeoForge's
SophisticatedMenuProvider behavior).- NeoForge 26.1: the settings screen now shows the container's actual items (item snapshots travel
view-only slots); sorting no longer silently does nothing after marking ignore-sort slots; new
client config
memorySlotSorting (default true) restores the classic memorized-slot refillbehavior, set it to
false to use the 26.1 sorter's plain handling.- Shared key/store/resolver logic moved into the common source set used by all 1.20.1/1.21.1
### Notes
- Container contents shown in the settings screen are a snapshot taken when the screen opens.
memorySlotSortinglives in the client config (sophisticatedsorter-client.toml) and only
own sorter.
## [1.1.0-hotfix]
- Forge 1.20.1: fixed a production startup crash. The forge mixin config now declares its
refmap, so mixin targets (e.g. the quickcraftSlots accessor) resolve correctly on theSRG-named production runtime instead of failing with "No candidates were found".
- Per-screen client options now use a combined **screen class + title key** identifier:
- Button visibility (disable toggle) and button offset records are stored per screen, so
ChestScreen) no longer share button positions or the hide toggle with each other.- The button offset *render/drag* path now uses the same identifier (previously it used the
- Matching is backward compatible and loose: a stored entry matches when it equals the full
class@title id, the bare title key (the old format) or the bare screen class, so existingconfig entries keep working.
## [1.1.0] - Container Settings
This release brings the new **Container Settings** system to all supported loaders and versions.
It was originally developed for NeoForge 1.21.1 and is now available on Forge 1.20.1, Fabric 1.20.1,
Fabric 1.21.1, NeoForge 1.21.1 and NeoForge 26.1, with the loader-neutral logic shared from the
common codebase.
### New: container settings
- Per-container settings screen for every usable container (chests, barrels, ...) and the player
to fit it). On vanilla container screens the entry is also reachable directly.
- Settings are persisted **server-side** per container (world SavedData, keyed by dimension and
independently of the client and of other containers.
- Memory slots**: pick a remembered item for any slot; empty memorized slots show the remembered
the slot that do not match the memorized item.
- Ignore sorting (no-sort)**: mark slots that sorting must never touch; those slots keep whatever
- Slot highlights**: the regular container view draws the same color stripes and memory ghosts the
- Sorting now respects these settings: no-sort slots stay in place, and memorized slots are emptied
client config
memorySlotSorting on 26.1).### Ports and quality
- The whole settings feature is ported to Forge 1.20.1, Fabric 1.20.1/1.21.1 and NeoForge 26.1,
- Forge 1.20.1: fixed the per-slot highlight stripes not rendering on vanilla container screens
fillGradient argument order); entering or leaving the settings screen no longer resetsthe mouse cursor to the screen center (menu swaps are closed server-side only, mirroring
NeoForge's
SophisticatedMenuProvider behavior).- NeoForge 26.1: the settings screen now shows the container's actual items (item snapshots travel
view-only slots); sorting no longer silently does nothing after marking ignore-sort slots; new
client config
memorySlotSorting (default true) restores the classic memorized-slot refillbehavior, set it to
false to use the 26.1 sorter's plain handling.- Shared key/store/resolver logic moved into the common source set used by all 1.20.1/1.21.1
### Notes
- Container contents shown in the settings screen are a snapshot taken when the screen opens.
memorySlotSortinglives in the client config (sophisticatedsorter-client.toml) and only
own sorter.
## [1.1.0-hotfix]
- Forge 1.20.1: fixed a production startup crash. The forge mixin config now declares its
refmap, so mixin targets (e.g. the quickcraftSlots accessor) resolve correctly on theSRG-named production runtime instead of failing with "No candidates were found".
- Per-screen client options now use a combined **screen class + title key** identifier:
- Button visibility (disable toggle) and button offset records are stored per screen, so
ChestScreen) no longer share button positions or the hide toggle with each other.- The button offset *render/drag* path now uses the same identifier (previously it used the
- Matching is backward compatible and loose: a stored entry matches when it equals the full
class@title id, the bare title key (the old format) or the bare screen class, so existingconfig entries keep working.
## [1.1.0] - Container Settings
This release brings the new **Container Settings** system to all supported loaders and versions.
It was originally developed for NeoForge 1.21.1 and is now available on Forge 1.20.1, Fabric 1.20.1,
Fabric 1.21.1, NeoForge 1.21.1 and NeoForge 26.1, with the loader-neutral logic shared from the
common codebase.
### New: container settings
- Per-container settings screen for every usable container (chests, barrels, ...) and the player
to fit it). On vanilla container screens the entry is also reachable directly.
- Settings are persisted **server-side** per container (world SavedData, keyed by dimension and
independently of the client and of other containers.
- Memory slots**: pick a remembered item for any slot; empty memorized slots show the remembered
the slot that do not match the memorized item.
- Ignore sorting (no-sort)**: mark slots that sorting must never touch; those slots keep whatever
- Slot highlights**: the regular container view draws the same color stripes and memory ghosts the
- Sorting now respects these settings: no-sort slots stay in place, and memorized slots are emptied
client config
memorySlotSorting on 26.1).### Ports and quality
- The whole settings feature is ported to Forge 1.20.1, Fabric 1.20.1/1.21.1 and NeoForge 26.1,
- Forge 1.20.1: fixed the per-slot highlight stripes not rendering on vanilla container screens
fillGradient argument order); entering or leaving the settings screen no longer resetsthe mouse cursor to the screen center (menu swaps are closed server-side only, mirroring
NeoForge's
SophisticatedMenuProvider behavior).- NeoForge 26.1: the settings screen now shows the container's actual items (item snapshots travel
view-only slots); sorting no longer silently does nothing after marking ignore-sort slots; new
client config
memorySlotSorting (default true) restores the classic memorized-slot refillbehavior, set it to
false to use the 26.1 sorter's plain handling.- Shared key/store/resolver logic moved into the common source set used by all 1.20.1/1.21.1
### Notes
- Container contents shown in the settings screen are a snapshot taken when the screen opens.
memorySlotSortinglives in the client config (sophisticatedsorter-client.toml) and only
own sorter.
## [1.1.0] - Container Settings
This release brings the new **Container Settings** system to all supported loaders and versions.
It was originally developed for NeoForge 1.21.1 and is now available on Forge 1.20.1, Fabric 1.20.1,
Fabric 1.21.1, NeoForge 1.21.1 and NeoForge 26.1, with the loader-neutral logic shared from the
common codebase.
### New: container settings
- Per-container settings screen for every usable container (chests, barrels, ...) and the player
to fit it). On vanilla container screens the entry is also reachable directly.
- Settings are persisted **server-side** per container (world SavedData, keyed by dimension and
independently of the client and of other containers.
- Memory slots**: pick a remembered item for any slot; empty memorized slots show the remembered
the slot that do not match the memorized item.
- Ignore sorting (no-sort)**: mark slots that sorting must never touch; those slots keep whatever
- Slot highlights**: the regular container view draws the same color stripes and memory ghosts the
- Sorting now respects these settings: no-sort slots stay in place, and memorized slots are emptied
client config
memorySlotSorting on 26.1).### Ports and quality
- The whole settings feature is ported to Forge 1.20.1, Fabric 1.20.1/1.21.1 and NeoForge 26.1,
- Forge 1.20.1: fixed the per-slot highlight stripes not rendering on vanilla container screens
fillGradient argument order); entering or leaving the settings screen no longer resetsthe mouse cursor to the screen center (menu swaps are closed server-side only, mirroring
NeoForge's
SophisticatedMenuProvider behavior).- NeoForge 26.1: the settings screen now shows the container's actual items (item snapshots travel
view-only slots); sorting no longer silently does nothing after marking ignore-sort slots; new
client config
memorySlotSorting (default true) restores the classic memorized-slot refillbehavior, set it to
false to use the 26.1 sorter's plain handling.- Shared key/store/resolver logic moved into the common source set used by all 1.20.1/1.21.1
### Notes
- Container contents shown in the settings screen are a snapshot taken when the screen opens.
memorySlotSortinglives in the client config (sophisticatedsorter-client.toml) and only
own sorter.
## [1.1.0] - Container Settings
This release brings the new **Container Settings** system to all supported loaders and versions.
It was originally developed for NeoForge 1.21.1 and is now available on Forge 1.20.1, Fabric 1.20.1,
Fabric 1.21.1, NeoForge 1.21.1 and NeoForge 26.1, with the loader-neutral logic shared from the
common codebase.
### New: container settings
- Per-container settings screen for every usable container (chests, barrels, ...) and the player
to fit it). On vanilla container screens the entry is also reachable directly.
- Settings are persisted **server-side** per container (world SavedData, keyed by dimension and
independently of the client and of other containers.
- Memory slots**: pick a remembered item for any slot; empty memorized slots show the remembered
the slot that do not match the memorized item.
- Ignore sorting (no-sort)**: mark slots that sorting must never touch; those slots keep whatever
- Slot highlights**: the regular container view draws the same color stripes and memory ghosts the
- Sorting now respects these settings: no-sort slots stay in place, and memorized slots are emptied
client config
memorySlotSorting on 26.1).### Ports and quality
- The whole settings feature is ported to Forge 1.20.1, Fabric 1.20.1/1.21.1 and NeoForge 26.1,
- Forge 1.20.1: fixed the per-slot highlight stripes not rendering on vanilla container screens
fillGradient argument order); entering or leaving the settings screen no longer resetsthe mouse cursor to the screen center (menu swaps are closed server-side only, mirroring
NeoForge's
SophisticatedMenuProvider behavior).- NeoForge 26.1: the settings screen now shows the container's actual items (item snapshots travel
view-only slots); sorting no longer silently does nothing after marking ignore-sort slots; new
client config
memorySlotSorting (default true) restores the classic memorized-slot refillbehavior, set it to
false to use the 26.1 sorter's plain handling.- Shared key/store/resolver logic moved into the common source set used by all 1.20.1/1.21.1
### Notes
- Container contents shown in the settings screen are a snapshot taken when the screen opens.
memorySlotSortinglives in the client config (sophisticatedsorter-client.toml) and only
own sorter.
## [1.1.0] - Container Settings
This release brings the new **Container Settings** system to all supported loaders and versions.
It was originally developed for NeoForge 1.21.1 and is now available on Forge 1.20.1, Fabric 1.20.1,
Fabric 1.21.1, NeoForge 1.21.1 and NeoForge 26.1, with the loader-neutral logic shared from the
common codebase.
### New: container settings
- Per-container settings screen for every usable container (chests, barrels, ...) and the player
to fit it). On vanilla container screens the entry is also reachable directly.
- Settings are persisted **server-side** per container (world SavedData, keyed by dimension and
independently of the client and of other containers.
- Memory slots**: pick a remembered item for any slot; empty memorized slots show the remembered
the slot that do not match the memorized item.
- Ignore sorting (no-sort)**: mark slots that sorting must never touch; those slots keep whatever
- Slot highlights**: the regular container view draws the same color stripes and memory ghosts the
- Sorting now respects these settings: no-sort slots stay in place, and memorized slots are emptied
client config
memorySlotSorting on 26.1).### Ports and quality
- The whole settings feature is ported to Forge 1.20.1, Fabric 1.20.1/1.21.1 and NeoForge 26.1,
- Forge 1.20.1: fixed the per-slot highlight stripes not rendering on vanilla container screens
fillGradient argument order); entering or leaving the settings screen no longer resetsthe mouse cursor to the screen center (menu swaps are closed server-side only, mirroring
NeoForge's
SophisticatedMenuProvider behavior).- NeoForge 26.1: the settings screen now shows the container's actual items (item snapshots travel
view-only slots); sorting no longer silently does nothing after marking ignore-sort slots; new
client config
memorySlotSorting (default true) restores the classic memorized-slot refillbehavior, set it to
false to use the 26.1 sorter's plain handling.- Shared key/store/resolver logic moved into the common source set used by all 1.20.1/1.21.1
### Notes
- Container contents shown in the settings screen are a snapshot taken when the screen opens.
memorySlotSortinglives in the client config (sophisticatedsorter-client.toml) and only
own sorter.
## [1.1.0] - Container Settings
This release brings the new **Container Settings** system to all supported loaders and versions.
It was originally developed for NeoForge 1.21.1 and is now available on Forge 1.20.1, Fabric 1.20.1,
Fabric 1.21.1, NeoForge 1.21.1 and NeoForge 26.1, with the loader-neutral logic shared from the
common codebase.
### New: container settings
- Per-container settings screen for every usable container (chests, barrels, ...) and the player
to fit it). On vanilla container screens the entry is also reachable directly.
- Settings are persisted **server-side** per container (world SavedData, keyed by dimension and
independently of the client and of other containers.
- Memory slots**: pick a remembered item for any slot; empty memorized slots show the remembered
the slot that do not match the memorized item.
- Ignore sorting (no-sort)**: mark slots that sorting must never touch; those slots keep whatever
- Slot highlights**: the regular container view draws the same color stripes and memory ghosts the
- Sorting now respects these settings: no-sort slots stay in place, and memorized slots are emptied
client config
memorySlotSorting on 26.1).### Ports and quality
- The whole settings feature is ported to Forge 1.20.1, Fabric 1.20.1/1.21.1 and NeoForge 26.1,
- Forge 1.20.1: fixed the per-slot highlight stripes not rendering on vanilla container screens
fillGradient argument order); entering or leaving the settings screen no longer resetsthe mouse cursor to the screen center (menu swaps are closed server-side only, mirroring
NeoForge's
SophisticatedMenuProvider behavior).- NeoForge 26.1: the settings screen now shows the container's actual items (item snapshots travel
view-only slots); sorting no longer silently does nothing after marking ignore-sort slots; new
client config
memorySlotSorting (default true) restores the classic memorized-slot refillbehavior, set it to
false to use the 26.1 sorter's plain handling.- Shared key/store/resolver logic moved into the common source set used by all 1.20.1/1.21.1
### Notes
- Container contents shown in the settings screen are a snapshot taken when the screen opens.
memorySlotSortinglives in the client config (sophisticatedsorter-client.toml) and only
own sorter.
## [1.1.0] - Container Settings
This release brings the new **Container Settings** system to all supported loaders and versions.
It was originally developed for NeoForge 1.21.1 and is now available on Forge 1.20.1, Fabric 1.20.1,
Fabric 1.21.1, NeoForge 1.21.1 and NeoForge 26.1, with the loader-neutral logic shared from the
common codebase.
### New: container settings
- Per-container settings screen for every usable container (chests, barrels, ...) and the player
to fit it). On vanilla container screens the entry is also reachable directly.
- Settings are persisted **server-side** per container (world SavedData, keyed by dimension and
independently of the client and of other containers.
- Memory slots**: pick a remembered item for any slot; empty memorized slots show the remembered
the slot that do not match the memorized item.
- Ignore sorting (no-sort)**: mark slots that sorting must never touch; those slots keep whatever
- Slot highlights**: the regular container view draws the same color stripes and memory ghosts the
- Sorting now respects these settings: no-sort slots stay in place, and memorized slots are emptied
client config
memorySlotSorting on 26.1).### Ports and quality
- The whole settings feature is ported to Forge 1.20.1, Fabric 1.20.1/1.21.1 and NeoForge 26.1,
- Forge 1.20.1: fixed the per-slot highlight stripes not rendering on vanilla container screens
fillGradient argument order); entering or leaving the settings screen no longer resetsthe mouse cursor to the screen center (menu swaps are closed server-side only, mirroring
NeoForge's
SophisticatedMenuProvider behavior).- NeoForge 26.1: the settings screen now shows the container's actual items (item snapshots travel
view-only slots); sorting no longer silently does nothing after marking ignore-sort slots; new
client config
memorySlotSorting (default true) restores the classic memorized-slot refillbehavior, set it to
false to use the 26.1 sorter's plain handling.- Shared key/store/resolver logic moved into the common source set used by all 1.20.1/1.21.1
### Notes
- Container contents shown in the settings screen are a snapshot taken when the screen opens.
memorySlotSortinglives in the client config (sophisticatedsorter-client.toml) and only
own sorter.
fixed bugs.
fixed bug about items losing. maybe.
fixed bug about ftb buttons losing.
support order by pinyin.
fixed bug about items losing. maybe.
fixed bug about ftb buttons losing.
support order by pinyin.