Tags
Creators
Details
7.2.0+26.3
Compatibility
Required content
Changes
7.2.0
This release is additions, plus one change for mods that subclass ItemPicker. Nothing was removed, and other mods built for 7.1.0 work as before. An item picker a mod already has opens the new item dialog with no change on its side.
Added
- A color setting.
ColorFieldshows a swatch and opens a dialog when clicked. The first tab holds Minecraft's 16 dye colors in rainbow order, shown by their dye items and named by color. The second is a full picker with a saturation and brightness square, a hue bar, a transparency bar when the value has alpha, and a hex field that only takes valid hex. Changes show at once, and Cancel puts back the color from before. The value is an int,0xRRGGBB, or0xAARRGGBBwithalpha(true). The swatch and its dialog match the screen they are on, inventory or options. Recipe. - Item settings that hold whole stacks, and lists of them.
ItemPickergainsstack,stacks,rule, andrulesbeside its 6.1.0statefor one item.match(...)sets how stacks compare.ITEMcompares the kind of item only,EXACTthe exact stack, andCONTAINSthe item plus at least the components the rule sets. So an empty rule means a plain item forEXACTand any variant forCONTAINS.playerChoosesMatch()lets the player pick Any or Exactly for each slot.ItemMatchis the one shared matcher. It compares stacks the way vanilla's item predicates do, so no mod writes its own, andItemMatch.CODECsaves a rule. A list shows as a wrapping row of slots, with an empty one at the end to add to. Recipe. - A new item dialog. Clicking an item picker opens a dialog over the screen, in that screen's look, instead of a separate chooser screen. The setting's slots sit at the top.
- The Search tab takes typing at once. It searches every item in the creative inventory's search tab, with each potion, enchanted book level, and other variant as its own entry. Clicking an item puts it in the selected slot, which stays selected.
- The Edit tab edits the selected slot's name, count, and enchantments, and any other component as text in
/givesyntax, checked by vanilla's own parser with its error messages. Enchantments already on the item are listed under Added, each with its level,-and+buttons (from I to its highest level), and a remove button. Under Not Added are the ones that fit the item, each with an add button. One that conflicts with an enchantment already on the item is grayed and names the conflict. - Each filled slot, in the dialog and on the page, has a small remove button in its corner. In a list, the items after it move up.
- The dialog is as wide and as tall as the tab it shows, so the whole grid is always visible. Cancel puts back the value from before. The dialog never touches the player's inventory.
- A home for widgets made elsewhere.
WidgetHostputs any vanilla-style widget in a panel, such as a custom control another config library hands over. It moves the widget with the panel and its scroll, clips it to its box, passes it clicks, drags, the wheel, and typed keys, and gives it keyboard focus and narration. A widget that opens a list below itself can draw over everything withoverflow(). Recipe. - A
Tabsthe size of the tab it shows. WithfitShownTab(), aTabswith no fixed size is as wide and as tall as the shown tab instead of the largest one, so a dialog holding it resizes when the tab changes and its buttons follow. The color and item dialogs use it. - Elements that size to their content.
ScrollContainer.Builder.fitWidth()(withheight(h)) makes a scroll area as wide as its content plus its scrollbar, and wider when its panel gives it room.fitHeight()makes it as tall as its content, up to its height.TextField.Builder.fill()andTextLabel.Builder.fill()take the width they are given instead of setting their own, for a field that spans a dialog or a message that wraps instead of widening it. A filling field asks for at least the width of its hint. - Radio buttons are round, so a set of them never reads as checkboxes.
- Cards in a list.
Flow.Builder.boxed()draws a card behind aFlow's children, withBOX_PADDING(6 px) inside it. On an options screen the card is a dark translucent box with a light border that brightens on hover. On an inventory it is the inset panel look. A boxed row fills its width, so a list of them lines up like vanilla's world list. - A sidebar menu without its tabs.
tabColumn(false)on aSIDEBARTabsleaves out the tab column and gives the page the full width. A settings screen for one mod can then look exactly like a tabbed one, with the same darker page, insets, bottom line, scrollbar, and header.
Changed
ItemPicker's protected constructor changed. A mod that subclassesItemPickerupdates its constructor call. Mods that build pickers with the builder change nothing.
Fixed
- Slots in a
ScrollContainerclip to it. A slot across the top or bottom edge of the viewport draws only the part inside, and only that part hovers, shows a tooltip, and takes a click. Before, vanilla drew and hit-tested the whole slot past the edge. Slots in a scroll area on an opaque panel now take hover and clicks, where before the panel made them inert. The same holds for slots in aSection, aFlow, and aTabsbody. A slot library reports each slot it places withSlotClip.shown, new inapi.host. SlotKit's slot elements do this, so mods that use them change nothing. - Dialogs have the same margin on every side.
ConfirmDialog,AlertDialog, and the color dialog leave 4 px between the frame and their content on all four sides, and the buttons sit centered between the content and the frame below. Before, the content sat 8 px further from the left and top of the frame than from the right and bottom.PADDINGandSECTION_GAPonConfirmDialogandAlertDialogare now 4. - Inside a dialog on an options screen, a scroll area's list band and a
Tabspage inset their content by the dialog's own 4 px gap instead of the full screen's 14 px, which left wide empty margins. A panel now tells its elements whether it is a dialog (PanelElement.inDialog) and what kind of screen it is on (PanelElement.screenKind).ScrollContainer.bandInsetX,bandInsetY, andDIALOG_INSEThold the rule. - A
RAISEDpanel on an options screen keeps 4 px between vanilla's popup frame and its elements, as it does inside MenuKit's frame on an inventory screen. Before, its content came within 1 px of the frame. The panel is 6 px bigger each way. - A
Tabswith no fixed size that grows after it is placed, for example on an options screen's page, pushes the elements below it down instead of covering them. - A
TextFieldorSlideron a panel over a vanilla screen, such as the inventory, now takes clicks. Before, they only worked on a mod's own screen. - A
TextFieldorSliderwhose panel is hidden, or whose tab is not shown, lets go of keyboard focus instead of taking keys out of sight, and Tab skips it.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:3vGajyPr:zlzklFid"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:3vGajyPr:zlzklFid"
}

