Skip to content

NotEnoughItems ​

139 merged pull requests.

Needs action on an existing world:

  • [config] #957 NEI keybindings moved from the NEI settings screen to the vanilla Controls screen. They are now registered as normal Minecraft key bindings under the nei.options.keys names.
    After updating, set your NEI keys again in the vanilla Controls screen; custom binds from the old NEI settings screen are not carried over.

New Features ​

  • #1059 Added IFluidRenderer and API.registerFluidRenderer(Fluid, IFluidRenderer), backed by an identity map in FluidDrawer. FluidDrawer.drawFluid is renamed to drawTank, FluidDisplayRenderer now goes through FluidDrawer, and ItemFluidDisplay.getFluid no longer requires an NBT tag. - @slprime
    • Added: fluid renderer API for NEI fluid slots and tanks
  • #1052 CraftingTreeState is now stored per BookmarkGroup in a WeakHashMap and holds the Camera, which is passed to CraftingTreeCanvas. Added the craftingTreeZoomWithoutModifier config option with lang entries in en_US and ru_RU. The isFirstScreen flag is replaced by uiState.initialized. The E keybind returning from the tree is also mentioned in the body. - @slprime
    • Added: Tree Zoom without Ctrl option, crafting tree state kept between openings
    • Closes #1050
  • #1049 Added default IRecipeHandler.getRecipeGroupId(int) returning null; recipes sharing an id are rendered by the new RecipeGroup widget. NEIRecipeWidget is replaced by widget.RecipeWidget, PermutationsCycler is added, PositionedStack tooltips become a Function provider, and FireworkRecipeHandler is rewritten to use groups. - @slprime
    • Added: recipe groups in the recipe GUI, getRecipeGroupId on IRecipeHandler, Variants tooltip for grouped recipes
    • Removed: NEIRecipeWidget
  • #1047 Moved fluid drawing from PositionedStack.Fluid into a new client-side FluidDrawer with a FillDirection enum (AUTO, UP, DOWN, LEFT, RIGHT) and flowing icon support. The capacity field is now protected with getters/setters. handlers.csv values for four TConstruct handlers changed. - @slprime
    • Added: flowing fluid texture option, fluid fill direction option
  • #1041 Added RecipeItemsTooltipLineHandler and ItemsListTooltipLineHandler, extended ItemsTooltipLineHandler with amount renderers, and GuiCraftingTree.handleTooltip picks the item list tooltip when shift is held. Added three lang keys for Results, Ingredients and Ingredients Needed. - @slprime
    • Added: shift list view for recipes in the crafting tree tooltip
  • #1020 Adds a generic ItemFluidDisplay so a FluidStack can be passed straight into a PositionedStack, and adds IStackStringifyHandler.isFluidDisplayItem. Adds NEIClientUtils.presenceOverlay with fluid handling, and removes LayoutManager.itemPresenceOverlays and drawItemPresenceOverlay. The IOverlayHandler interface is changed. - @slprime
    • Added: Fluid display items in recipes, Tank fill level rendering in recipes, Fluid temperature tooltip option, Fluid state tooltip option
    • Removed: LayoutManager.drawItemPresenceOverlay
  • #1018 Adds the codechicken.nei.bookmark.tree package (GuiCraftingTree, CraftingTreeCanvas, Camera, StatsPanel and others) and the bookmark.open_crafting_tree keybind (T). Adds NEIClientUtils.getScrollMultiplier, and INEIGuiHandler gets default methods so INEIGuiAdapter no longer overrides them. - @slprime
    • Added: Bookmark Tree screen, Open crafting tree keybind (T)
  • #1016 Extended WorldOverlayRenderer with chunk-based rendering check. - @vcwdfca
    • Added: Center overlay rendering option
  • #1011 Implemented persistent ItemHistoryPanel with save/load logic in ItemListLoader and NEIClientConfig; added language strings. - @vcwdfca
    • Added: Persistent history saving, world-specific history option, history UI panel
    • Closes #1010
  • #1007 Implemented AcceptsFollowingTooltipLineHandler and updated PositionedStack, ItemsTooltipLineHandler, and NEIRecipeWidget to display accepts information. - @slprime
    • Added: Accepts label, tooltip for accepted items
  • #1002 Extended PositionedStack with slot size property and custom renderer; updated NEIRecipeWidget and GuiFavoriteButton to use new rendering system. - @slprime
    • Added: PositionedStack slot size, custom slot renderer
  • #992 Extended SearchTokenParser and added tooltip display in GuiRecipe showing available recipe filter syntax. - @slprime
    • Added: Recipe filter syntax tooltip, lang strings for filter help
  • #991 Added RecipeChainMath.ChainVisitor interface with enterRecipe, addIngredient, addIngredientFresh and leaveRecipe. Added refresh(ChainVisitor) and passed the visitor through calculateSuitableRecipe. The no-argument refresh uses an empty visitor. - @slprime
    • Added: ChainVisitor for recipe chain calculation
  • #971 Reworked bookmark chat link system with BookmarkItem and BookmarkPayload classes to support recipes and groups; extended NEISPH and chat command handling. - @slprime
    • Added: BookmarkItem item sharing class, BookmarkPayload recipe/group serialization, Recipe link support in chat, Bookmark group sharing
    • Removed: BookmarkStorage legacy chat link code
    • Closes GTNH#25731
  • #970 Modified WorldOverlayRenderer to use Cubic Chunks' getMinHeight/getMaxHeight methods when present; added blue/cyan cube boundary lines. - @RecursivePineapple
    • Added: Cubic Chunks cube overlay visualization, CC height boundary support
    • Fixed: Chunk grid clamping to vanilla world height
  • #965 Extended WorldOverlayRenderer with getOverlayYOffset() helper to detect and offset overlays above snow blocks. - @lunawinxp
    • Added: Overlay Y-offset support for snow blocks
    • Fixed: F7 mob spawn overlay hidden by snow
  • #961 Extended ItemInfo and API with alias storage, integrated into ItemList search indexing. - @slprime
    • Added: Item name alias API, Alias search integration
  • #960 Added default method IOverlayHandler.requireShiftForOverlayRecipe(), which returns the NEIClientConfig value. GuiOverlayButton now asks the overlay handler for it when one exists. - @slprime
    • Added: IOverlayHandler.requireShiftForOverlayRecipe
  • #959 Enhanced SubsetWidget to use GUID-based tracking for hidden items instead of object references, surviving reload cycles. - @slprime
    • Added: GUID-based hidden item persistence
    • Fixed: Hidden items being forgotten after reload
  • #942 Added autocraft permission config to NEIServerConfig and NEIClientConfig, permission checks in NEIActions. - @slprime
    • Added: Server-side autocraft permission control, Client-side permission checking for autocraft
    • Fixed: Inability to disable autocrafting on multiplayer servers
    • Closes #933
  • #929 Extended GuiRecipe and related components with a scrollPages configuration option. Added debug controls to configure scroll zones and IntegerField input validation. - @slprime
    • Added: scrollPages configuration option, Scroll zone controls
  • #924 Extended GuiRecipe, GuiRecipeTab, HandlerInfo, and RecipePageManager to support horizontal scroll wheel input. Added configuration option in NEIClientConfig and debug controls. - @slprime
    • Added: Horizontal scroll input, Recipe page scroll option, HandlerInfo scroll tracking
  • #909 Refactored badge rendering into a new Badge class, updated PositionedStack and NEIRecipeWidget to use improved badge display logic. - @slprime
    • Added: Badge class for centralized badge rendering, Improved badge visual formatting
  • #906 Extended PositionedStack and HandlerInfo to calculate and display chance tooltips, updated NEIRecipeWidget and debug handlers to render chance information, added language strings for chance display. - @slprime
    • Added: Chance tooltips on recipe items, Chance display language strings
  • #903 Extended BookmarkItem to store and calculate recipe chance values, updated BookmarkPanel and BookmarkGrid to display chance information, added chance tracking to recipe chain details, modified PositionedStack to support chance data. - @slprime
    • Added: Recipe chance tracking in bookmarks, Chance display in bookmark UI
  • #902 Refactored ItemPanelDumper to use dynamic max resolution based on window size, reversed right-click behavior for resolution halving, added shift-key confirmation for large batch exports, replaced hardcoded mode values with fields. - @koolkrafter5
    • Added: Dynamic resolution scaling, Batch export safety warning with shift confirmation, Mode constant fields
    • Removed: Hardcoded preset resolutions
    • Fixed: Invalid resolution handling on window resize
  • #901 Added reset button and functionality to debug/DebugHandlerWidget and updated GuiRecipe to support reset operations. - @slprime
    • Added: Debug handler reset button
  • #899 Added RepairRecipeHandler and RepairOverlayHandler classes, registered via IMCForNEI, added repair texture and language strings, added Repair recipe type to handlers registry. - @slprime
    • Added: RepairRecipeHandler class, RepairOverlayHandler class, Repair handler registration via IMC, Repair recipe texture, Repair handler language strings
    • Removed: RecipeInfo class (moved/refactored)
  • #880 Added favorite item support to FavoriteRecipes and NEIRecipeWidget, new GuiFavoriteButton class, recipe handler reference support, and config option enablement. - @slprime
    • Added: Favorite items (non-recipe), GuiFavoriteButton widget, RecipeHandlerRef support, Language strings for favorite items
  • #867 Re-added infinite items action handler in ShortcutInputHandler.java, updated NEIClientUtils.java with the new modifier, and added localization string to en_US.lang. - @slprime
    • Added: Infinite items action handler
    • Fixed: Missing infinite items feature
    • Closes #864
  • #863 Expanded FavoriteRecipes.java with single-recipe favorite generation logic, added new utility class FavoriteStorage.java, and enhanced NEIClientConfig.java with configuration options. Added keybind to force-remove recipes from favorites in GuiFavoriteButton.java. - @slprime
    • Added: Single-recipe favorite generation, Broken recipe removal from favorites, FavoriteStorage utility
    • Closes #824, #851
  • #854 Added debug text to localization strings and implemented tooltip display in DebugHandlerWidget.java. Debug text respects Minecraft color codes while tooltip remains white. - @Ranzuu
    • Added: Debug text localization, Debug tooltips
  • #852 Added click handler in GuiCraftingRecipe.java, GuiUsageRecipe.java, and GuiRecipe.java to open an all-recipes view when clicking handler names. Added localization string. - @Ranzuu
    • Added: Show all recipes view for handlers
  • #849 Added texture state handling in LayoutManager.java and LayoutStyleMinecraft.java, and updated the texture sprite sheet to include the toggled state variant. - @Ranzuu
    • Added: Magnet button toggled state texture
  • #836 Added localization entry for the optional subset label in SubsetWidget.java, enabling external customization via resource packs. - @Ranzuu
    • Added: Localized optional subset label
  • #827 Updated ItemUntranslator to conditionally hide subset option; updated language file. - @slprime
  • #810 Extended RecipeChainTooltipLineHandler to display required crafts on Shift key. - @Emilgardis
    • Added: Required crafts shift tooltip
    • Closes #656

Changes ​

  • #1054 RecipeGroup and RecipeWidget are reworked to support pinning. Added GuiRecipe.openTargetRecipe(RecipeId, List<ItemStack>), RecipePageManager.pinRecipe, an optional third argument for the recipeId outputId in GuiCraftingRecipe, PermutationsCycler helpers and a pinned_pause texture. PositionedStack.getFilteredPermutations now copies into a mutable list. - @slprime
    • Added: pause and resume for recipe groups, pinned_pause texture
  • #1053 UpdateRecipeButtonsEvent and its Pre and Post subclasses gain width and height constructor parameters and public fields, filled from RecipeWidget. Addons that construct these events must update. - @slprime
    • Added: width and height on UpdateRecipeButtonsEvent
  • #1044 Added CompositeTooltipLineHandler, removed ItemsListTooltipLineHandler, and rewrote ItemsTooltipLineHandler (grid/list factories, name rows) and RecipeChainTooltipLineHandler. Removed the inventory.bookmarks.recipeChainDir option and NEIClientConfig.recipeChainDir(), plus its lang keys. - @slprime
    • Added: handler icons in chain tooltip, stack count and remainder display, item names in tooltip
    • Removed: recipe chain direction option, outputs header in chain tooltip
  • #1029 ItemFluidDisplay stores neiFluidDisplayAmount and stringify handler Count as long, with new createStack(Fluid, long) and getAmountLong. FluidDisplayRenderer uses getAmountLong and OpenGlHelper.glBlendFunc with separate alpha. The FluidTag NBT handling is removed from the display item and stringify handlers. - @slprime
    • Added: long fluid amounts on NEI fluid display items
    • Removed: FluidTag NBT on NEI fluid display items
  • #982 Callers replaced KeyManager.isHashDown with isKeyDown. KeyManager.isKeyDown now reads the vanilla KeyBinding's key code and checks Mouse for negative codes and Keyboard for positive codes. - @slprime
  • #957 KeyManager now registers vanilla KeyBinding objects through ClientRegistry and exposes isPressed, isKeyDown, isHashDown and getKeyName. The old KeyState tracking and OptionKeyBind config option were removed, and NEIClientConfig, ShortcutInputHandler and callers were updated to use KeyManager. - @slprime
    • Added: NEI key bindings on the Controls screen
    • Removed: NEI keybinding options in the NEI settings screen
    • Migration: After updating, set your NEI keys again in the vanilla Controls screen; custom binds from the old NEI settings screen are not carried over.
  • #947 Adds ColorUtils with ColorResource entries under the nei namespace, and embeds only the ColorResource classes from GTNHLib 0.11.15 into the jar through dependencies.gradle. Hardcoded colours in GuiEnchantmentModifier, GuiPotionCreator, GuiNEIButton, LayoutStyleMinecraft, SubsetWidget, Badge, GuiRecipe, GuiRecipeTab and ProfilerRecipeHandler use them. Button gets getRenderLabelColor, and NEIClientUtils.getTextColorOrDefault is removed. - @Ranzuu
    • Added: GTNHLib colour resources for NEI
    • Removed: getTextColorOrDefault
  • #911 ProfilerRecipeHandler gets an inner RecipeProfiler class and a registerHandlerInfo IMC message from IMCForNEI. RecipeHandlerQuery is reworked. The default Badge colour changes from 0xFFAA00 to 0xFDD835. GuiRecipeTab.addTooltips uses NEIClientUtils.shiftKey. PositionedStack.getCustomBadge and its use in NEIRecipeWidget are removed. - @slprime
    • Added: profiler recipe handler tab info
    • Removed: custom badge hook on positioned stacks
  • #907 HandlerInfo.showBadge defaults to false, and IMCHandler reads showBadge as false unless the key is present and true. - @slprime
  • #866 GTNHLib becomes devOnlyNonPublishable and the gtnhlib dependency is dropped from NEIModContainer.getDependencies. NEIClientUtils gets formatNumber and formatFluid, which use NumberFormatUtil only if isGTNHLibLoaded. GuiContainerManager calls these. - @slprime
    • Removed: GTNHLib as a required dependency
  • #862 Modified width constants in BookmarkPanel.java and BookmarkGrid.java. - @slprime
  • #822 Extended recipe background and catalyst tab rendering with additional border padding in draw functions; texture resources updated. - @timb8g
    • Added: Transparency border space

Bug Fixes ​

  • #1058 SubsetTag.calculatedWidth is now volatile and starts at -1. The width is computed lazily in resize() instead of in the subset-building task. - @slprime
    • Fixed: GL called outside the main thread when calculating subset width
  • #1057 StackInfo.equalItemAndNBT null-checks the fluid of a display stack. GTFluidStackStringifyHandler.getFluid falls back to FluidRegistry.getFluid(itemDamage) and returns a FluidStack of amount 0. nei-custom-diagram still needs its own fix. - @slprime
    • Fixed: NPE on GT fluid display item without NBT
  • #1056 BookmarkItem.getItemGUID now uses the fluid-based key only when the fluid amount is above 0 or the stack is not a fluid container. - @slprime
    • Fixed: Ender IO fluid tank identified as 1L of water
    • Closes GTNH#27070
  • #1048 ItemFluidDisplay constructor now calls setHasSubtypes(true), so the fluid id metadata counts as a subtype in NBT-aware matching. - @danyadev
    • Fixed: fluid alternatives not cycling in recipes
  • #1046 Changed two entries each in 12 NEI lang files (cs_CZ, de_DE, et_EE, fr_FR, it_IT, ko_KR, pl_PL, pt_BR, sk_SK, tr_CN etc.) so the category names are no longer identical. - @slprime
    • Fixed: controls screen crash in some languages
    • Closes #979
  • #1045 AutoFocusWidget now holds a focused GuiTextField to capture early input, and tracks mouse position in a new guiTick() called from LayoutManager.guiTick, cancelling when the mouse moves after it settles. - @slprime
    • Fixed: search autofocus losing the first typed character
    • Closes #840
  • #1038 NEIController.handleSlotClick now requires button != 2 in the shiftKey branch. - @vermz99
    • Fixed: NEI shift-click handling conflicting with middle click use by other mods
  • #1035 GuiOverlayButton.draw calls GuiDraw.drawRect instead of the inherited drawRect for the BACKGROUND overlay format. - @slprime
    • Fixed: slot highlight in recipe overlay buttons
  • #1033 The NEI fluid display item is now registered on the server in ServerHandler.preInit, called from NEIModContainer.preInit. The creative tab and renderer setup moved to a client-only ItemInfo method. FluidDisplayRenderer is marked client-side only, and StackInfo.getFluid has a null check. - @slprime
    • Fixed: server kick with bookmarked and history NEI fluids, cannot manually set fluids on AE2 patterns on servers
    • Closes GTNH#26751, GTNH#26774
  • #1032 ItemFluidDisplay.getSubItems loop bound changed from i < FluidRegistry.getMaxID() to i <= getMaxID(). - @Chitak985
    • Fixed: last registered fluid missing from fluid display sub-items
  • #1030 API.hideItem(ItemStack) and hideItem(String) are now synchronized to prevent a ConcurrentModificationException on the hidden item lists. - @slprime
    • Fixed: concurrent modification crash in API.hideItem with Unidict
    • Closes #1028
  • #1027 IdentifierFilter and ModNameFilter resolve fluids through StackInfo.getFluid. RecipeFilter skips ItemInfo.isHidden stacks, StackInfo.equalItemAndNBT compares fluids with isFluidEqual, and isFluidContainer excludes fluid display items. - @slprime
    • Fixed: Fluid filtering in NEI search
  • #1025 BookmarkItem.Builder factor for fluid display items changed from min(144, Count) to max(Count, 1). - @slprime
    • Fixed: Fluid bookmarks added by chat getting wrong amounts
    • Closes #1024
  • #1021 Replaces itemStackToNBT(...).hasKey("gtFluidName") checks with StackInfo.isFluidDisplayItem in NEIClientUtils.getScrollMultiplier, ItemTreeSlot and StatsPanel. - @slprime
    • Fixed: Fluid display detection in bookmark tree
  • #1014 Updated BookmarkPanel, NEIClientConfig, BookmarkGrid, and RecipeChainMath to validate bookmark group existence and warn on unknown groups. - @slprime
    • Fixed: Unknown bookmark group crashes
  • #1012 Added synchronization in RecipePageManager and SearchRecipeHandler to prevent searchRecipes list from being swapped during page rebuild. - @slprime
    • Fixed: Recipe page rebuild crash with concurrent search
  • #1009 Corrected fluid untranslator output serialization in ItemUntranslator. - @slprime
    • Fixed: Fluid untranslator dump
  • #1006 Enhanced DefaultOverlayHandler to properly validate tool durability constraints during autocrafting and Shift+Click operations. - @slprime
    • Fixed: Tool durability not consumed in autocrafting
  • #1004 Updated AutoCraftingManager and DefaultOverlayHandler to detect full inventory conditions; improved RecipeChainMath cycle detection logic. - @slprime
    • Fixed: Autocrafting infinite loop with full inventory
    • Closes #994
  • #1003 Modified NEIClientConfig.loadworld to check global cheatmode value before allocating; defaults to global unless gamemode requires lower access. - @H3stur
    • Fixed: New worlds ignoring global cheatmode config
    • Closes #952
  • #1000 Updated BookmarkItem, BookmarkGrid, and related classes to properly handle amount tracking during fluid permutation cycles. - @slprime
    • Fixed: Bookmark fluid quantity not updating on permutation
    • Closes GTNH#26268
  • #993 Added null check in ItemUntranslator.stripFormatting() to handle cases where EnumChatFormatting.func_110646_a() returns null. - @slprime
    • Fixed: NullPointerException in broken item tooltips
  • #989 Corrected GuiContainerManager tooltip rendering logic to properly handle Component objects in first line position. - @slprime
    • Fixed: Tooltip rendering with first-line Component
  • #988 Corrected multiplier limit calculation in RecipeChainMath for container items with durability restrictions. - @slprime
    • Fixed: Container item usage limits in recipe chains
  • #985 Modified DefaultOverlayHandler to enforce minimum multiplier of 1 when moving items, ensuring items are moved even for zero-sized recipe stacks. - @koolkrafter5
    • Fixed: Overlay button item movement with zero-size recipes
  • #984 Added GL state cleanup in WorldOverlayRenderer to properly isolate F7 and F9 overlay rendering from other mod overlays. - @Algent
    • Fixed: F7 overlay rendering through walls, F9 overlay dimming other UI
  • #974 Simplified WorldOverlayRenderer ore generation pattern detection logic by replacing unstable approach with coordinated fix from GT5-Unofficial. - @Algent
    • Fixed: Ore generation pattern reliability
  • #973 Corrected logic in ItemMobSpawner.java that determines mob type when placing spawners. - @jordanamr
    • Fixed: Spawner default mob type
  • #972 Modified KeyManager and added NEITransformer hook to prevent dynamic keybinding entries from being cleared when saving options. Added SaveOptionsFixHooks to intercept and preserve unrecognized NEI keybind entries during options save. - @slprime
    • Added: SaveOptionsFixHooks class, ASM hook for options save fix
    • Fixed: Keybindings resetting on world join, options.txt corruption on keybind changes, AE2 integration keybinds
    • Closes GTNH#25687, GTNH#25703, GTNH#25723, #969
  • #968 Added KeyBindingFixHooks and ASM transformer to prevent duplicate keybinding registration; Hodgepodge provides equivalent fix in GTNH. - @slprime
    • Added: KeyBindingFixHooks duplicate keybinding prevention, NEI ASM transformer for KeyBinding patching
    • Fixed: Duplicate keybinding errors
    • Closes #966
  • #967 Removed duplicate simplewasher entries from catalysts.csv since recipes are auto-generated from GT RecipeMapWorkable machines. - @mllfjn
    • Removed: Redundant simplewasher recipe definitions
    • Fixed: Non-existent simplewasher recipes in recipe window
    • Closes GTNH#25289
  • #964 Updated WorldOverlayRenderer to use correct reflection method for obtaining ore generation pattern from GT, fixing displacement calculation. - @Algent
    • Fixed: Ore vein center displacement in GT overlay
    • Closes GTNH#25588
  • #963 DebugHandlerWidget.loadHandlerInfoPatch falls back to GuiRecipeTab.DEFAULT_HANDLER_INFO for unknown keys instead of skipping them. getHandlerID only returns the overlay identifier when the handler ID is unknown, the handler is a TemplateRecipeHandler and the identifier is not null. - @slprime
    • Fixed: NEI debug handler skipping unknown handlers
  • #956 ItemList's item loading catch block now logs the throwable message and Guava Throwables.getStackTraceAsString in the message string instead of passing the throwable as the last logger argument. - @slprime
    • Fixed: missing stack trace in the NEI 'Removing item' error log
  • #951 Added null checks and proper initialization in GuiHighlightTips, GuiItemIconDumper, GuiItemSorter, and GuiPanelSettings config dialogs. - @slprime
    • Fixed: NPE crash when opening NEI panels config
    • Closes GTNH#24945
  • #949 Corrected ItemUntranslator display name resolution logic. - @slprime
    • Fixed: Item untranslator display name bug
  • #948 Corrected NEIServerConfig autocraft permission initialization. - @slprime
    • Fixed: Autocraft permission configuration error
  • #941 Corrected BookmarkPanel display logic for single-item bookmark rendering with amounts. - @slprime
    • Fixed: Single item bookmark amount display
  • #939 Added error handling in TemplateRecipeHandler.loadTransferRects() to prevent plugin init exceptions from corrupting transfer rect state. - @slprime
    • Fixed: GUI overlap when recipe plugins fail to initialize
    • Closes #934
  • #938 Updated DefaultStackStringifyHandler to use int instead of short for item ID parsing to accommodate large item identifiers. - @slprime
    • Fixed: ItemStack load from NBT with short overflow
  • #935 Implemented SmartOverlayHandler with guarded fallback logic in DefaultOverlayHandler and added RecipeHandlerRef for safer recipe handler references. - @MassAnarchyy
    • Added: SmartOverlayHandler fallback system, RecipeHandlerRef safety wrapper
    • Fixed: Blood Magic Alchemic Chemistry Set display
  • #932 Corrected area calculation in GuiRecipe for recipe page rendering bounds. - @slprime
    • Fixed: Recipe page area sizing
  • #930 Restored glBlitFramebuffer call in ItemsGrid screen capture to properly handle stencil buffer used by ModularUI2. - @sisyphussy
    • Fixed: MUI2 screen capture blitting
  • #928 Added proper cleanup and reference clearing in Option, OptionList, OptionTextField, and related classes to prevent memory accumulation. - @slprime
    • Fixed: Memory leaks in options and configuration
  • #927 Added cleanup in ClientHandler to properly release references when GuiInfo is closed. - @slprime
    • Fixed: GuiInfo memory leaks
  • #926 Modified ItemList and TemplateRecipeHandler to use snapshot copies when iterating collections during stream operations to prevent concurrent modification. - @slprime
    • Fixed: ConcurrentModificationException in fuel search
  • #925 Fixed race condition in SearchTokenParser that was causing item list loading to fail with search text present. - @slprime
    • Fixed: Item list loading with persistent search, SearchTokenParser concurrency
    • Closes #919, #923
  • #922 Updated FormattedTextField.getFormattedTextShift to validate section sign codes and defensively clamp the return value to prevent StringIndexOutOfBoundsException. - @Luca-Guettinger
    • Fixed: StringIndexOutOfBoundsException in FormattedTextField
  • #921 Modified BookmarkGrid to use consistent sorting when generating recipe item lists. - @Luca-Guettinger
    • Fixed: Inconsistent bookmark recipe item order
    • Closes GTNH#24368
  • #917 Added null-safety check in BookmarkItem to prevent NPE during autocrafting operations. - @slprime
    • Fixed: Autocrafting NPE
  • #916 Removes the GuiContainerCreative branches from NEIClientUtils.giveStack and CheatItemHandler.handleDragNDrop, restoring NEICPH.sendGiveItem and setSlotContents. - @slprime
    • Fixed: creative screen item giving from PR 913 rolled back
  • #915 Corrected BookmarkGridGenerator and RecipeChainDetails to properly handle collapsed recipe state. - @slprime
    • Fixed: Collapsed recipes not displaying in bookmarks
  • #913 Fixed CheatItemHandler and NEIClientUtils to properly reset client inventory state after giving items, ensuring sync arrays match between client and server. - @lc-1337
    • Fixed: Client-server sync in creative GUI
  • #912 Modified NEIController.handleSlotClick to only consume the event when cheat item is actually available, allowing downstream handlers to process the click. - @Kogepan229
    • Fixed: NEI blocking slot clicks when canCheatItem is false
  • #910 Added null-safety checks to RepairRecipeHandler to handle broken ItemStack instances gracefully. - @slprime
    • Fixed: Repair Handler crash with broken ItemStack
    • Closes #908
  • #905 Corrected RecipeChainDetails chain calculation, updated BookmarkGridGenerator and BookmarksGridSlot layout logic, added collapsed state tracking to HandlerInfo. - @slprime
    • Added: HandlerInfo collapsed state tracking
    • Removed: Unused NEIClientConfig settings
    • Fixed: Recipe chains collapsing in bookmarks
  • #896 Corrected damage value checking in NEIServerUtils.areStacksSameTypeWithNBT method. - @slprime
    • Fixed: Bookmark recipe damage value comparison
  • #893 Corrected NEIRecipeWidget filtered permutation handling. - @slprime
    • Fixed: Filtered permutations logic
  • #891 NEIModContainer.getDependencies adds gtnhlib@[0.9.6,). Closes #872. - @slprime
    • Fixed: tooltip rendering crash without a recent GTNHLib
    • Closes #872
  • #887 Corrected NEIClientConfig favorite option logic. - @slprime
    • Fixed: Favorite option configuration
  • #885 Corrected placement calculation in BookmarkGridGenerator. - @slprime
    • Fixed: Bookmark slot placement
  • #884 Corrected glColor4f call in FormattedTextField and changed NEIClientConfig default for generateSingleRecipeFavorites. - @slprime
    • Fixed: Color rendering in text field
  • #878 Modified GuiOverlayButton to always show the recipe ingredients overlay regardless of crafting grid mismatch state. - @slprime
    • Fixed: Recipe ingredient overlay not showing with mismatched crafting grid
    • Closes GTNH#23142
  • #873 Removed generated/single-recipe favorites from the AcceptsFollowingTooltipLineHandler filtering logic and cleaned up SubsetWidget's favorite permutation handling. - @slprime
    • Fixed: Tooltips incorrectly hiding saved recipes
  • #857 Corrected item retrieval logic in DefaultBookmarkContainerHandler.java to properly fetch bookmarked items. - @slprime
    • Fixed: Pulling bookmarked items from inventory
    • Closes #832
  • #856 Changed alignment logic in BookmarkPanel.java, ItemPanel.java, and PanelWidget.java to align from edges (left for bookmarks, right for item list) rather than from center. - @slprime
    • Fixed: UI shift during dynamic panel resizing
  • #855 Added page reset logic in ItemPanel.java and ItemsPanelGrid.java when search result size changes. - @slprime
    • Fixed: Item panel page display on search result change
  • #848 Modified SearchField.java and SearchTokenParser.java to check the NEI option flag and apply appropriate quoting and escaping for Extended+ item name search syntax. - @sbwaz
    • Fixed: Quote Drop Item Name NEI option handling in Extended+
    • Closes GTNH#22122
  • #843 Added background padding adjustment in InformationHandler.java to eliminate texture rendering artifact. - @slprime
    • Fixed: White line artifact on information handler background
  • #842 Adjusted padding constant in RecipePageManager.java to correct recipe handler layout. - @slprime
    • Fixed: Recipe handler padding alignment
  • #841 Corrected recipe handling in ShortcutInputHandler.java to support recipes with no ingredients. - @slprime
    • Fixed: Autocrafting for recipes without ingredients
    • Closes GTNH#23267
  • #839 Corrected colored text cropping logic in NEIClientUtils.java to properly handle Minecraft color codes. - @slprime
    • Fixed: Text cropping for colored text
  • #838 Corrected transparency border handling in DebugHandlerWidget.java and RecipeTooltipLineHandler.java to properly render tooltip borders. - @slprime
    • Fixed: Transparency border display in recipe tooltips
  • #833 Added abstract class checks in ItemMobSpawner.getEntity() to prevent attempting to instantiate abstract entity classes like EntityLiving, which was causing reflection-based instantiation failures. - @NealDeal34
    • Fixed: Console errors when spawning eggs from abstract entity classes
  • #829 Restores public static NEIModContainer.plugins as a HideousLinkedList over a CopyOnWriteArrayList, and NEIClientConfig adds each loaded IConfigureNEI to it. HideousLinkedList and its constructor become public. Partly reverts #820. - @PLASMAchicken
    • Fixed: NEIModContainer plugins field missing or not filled

Performance ​

  • #1036 ItemCraftablesPanel is reworked around a snapshot of the inventory and a list of recipe candidates. Recipe.RecipeId caches ingredient GUIDs while sorting and gets a new of(handler, index, ingredients) overload. - @slprime
    • Fixed: game freeze when building the craftables panel
  • #1031 RepairRecipeHandler.buildCache now runs in parallel on ItemList.forkJoinPool with a ConcurrentHashMap, caches the ItemStackKey hash, and collects unique materials up front. It also tracks known broken item types. - @slprime
  • #1015 ItemsGrid.setGridSize only calls onGridChanged when values change, and refresh skips updateGuiOverlapSlots when the render cache is valid. GuiInfo gets a handler snapshot and plain bounds checks, LayoutManager.drawButtonBackground batches quads in one Tessellator draw, and NEIPotionGuiHandler exits early. Tests were added. - @boubou19
  • #998 Adds a static VALUES array to ItemInfo.Layout and uses it in ItemInfo.getText instead of calling values(). - @boubou19
  • #995 NEIController.updateUnlimitedItems drops the LinkedList of copied stacks and compares packed stack size and damage per slot around replenishInfiniteStack. InfiniteStackSizeHandler.replenishInfiniteStack now only sets stackSize to 111 and no longer clears matching stacks in other slots. - @boubou19
  • #958 Item loading logic was extracted from ItemList into the new ItemListLoader class. Callers that used LayoutManager.markItemsDirty now call ItemList.refreshItems.restart(), and NEIClientConfig restarts refreshItems instead of loadItems when loading has already finished. - @slprime

Internal / Refactor ​

  • #1051 PositionedStack.Fluid is renamed to PositionedStack.Tank, with an added overlay field of type DrawableResource. Addons that use the old class name must update. - @slprime
    • Removed: PositionedStack.Fluid
  • #997 Removes casts made redundant by generic injection, replaces reflective get-field-by-instance calls, links statically to the Cubic Chunks API via a new compileOnly dependency, and applies pattern matching and IDE warning fixes. - @Nikolay-Sitnikov
  • #990 Renamed codechicken.nei.recipe.ContainerRecipe to codechicken.nei.util.EmptyContainer. GuiRecipe uses it, and NEIController.mouseScrolled now checks for EmptyContainer instead of GuiRecipe. - @slprime
    • Removed: ContainerRecipe
    • Migration: Addons that reference ContainerRecipe or GuiRecipe.slotcontainer should use codechicken.nei.util.EmptyContainer.
  • #900 DebugHandlerWidget is deleted from codechicken.nei.recipe and rewritten under recipe.debug as a singleton (DebugHandlerWidget.instance), with new CheckboxWidget, IntegerField, LabelWidget and IUpdatableWidget classes. HandlerInfo.setHandlerDimensions no longer takes the multipleWidgetsAllowed flag, which now has its own setter. GuiRecipe.forceRefreshPage becomes public, TemplateRecipeHandler.RecipeTransferRect gets getRect, and ScrollContainer is extended. - @slprime
    • Added: debug widget helper classes
  • #892 PanelWidget.calculateBounds now takes the GuiContainer as a parameter instead of fetching it through NEIClientUtils. BookmarkPanel and ItemPanel are updated to match, and resize passes its gui through. Addon subclasses of PanelWidget must change their override signature. - @slprime
    • Migration: Addon developers who extend PanelWidget must change their calculateBounds override to take a GuiContainer argument.
  • #846 Removes NEIClientUtils.formatNumbers overloads. GuiContainerManager.countDetails takes an IntFunction formatter that calls GTNHLib NumberFormatUtil. GTNHLib is bumped from 0.8.0 to 0.9.6 and the settings convention plugin to 1.0.49. - @Connor-Colenso
    • Removed: NEIClientUtils formatNumbers methods

Chores ​

  • #1039 Updated gtnhsettingsconvention to 2.0.30, switched gtnhlibEmbed zipTree to gtnhGradle.archiveOperations, added curseForgeEnvironments to gradle.properties, and removed an unchecked cast in CollapsibleItems.loadStates by casting to NBTPrimitive per entry. - @kuba6000
    • Fixed: NEI publish workflow failure
  • #895 Bumped gtnhsettingsconvention to 2.0.24, the Gradle wrapper and the daemon JVM toolchain URLs. DefaultOverlayHandler gets getCraftingResultSlot and uses it in craft and moveIngredients. GuiOverlayButton only sets its overlay flags when the gui is non-null. NEIRecipeWidget.updatePermutationsFor runs the permutation update on first load through a needsUpdate flag instead of setting the first permutation directly. - @slprime
    • Fixed: first-load permutation display in recipe widget
  • #860 addon.gradle sets duplicatesStrategy EXCLUDE on the sourcesJar task. - @UltraProdigy

Contributors ​

Everyone who authored, reviewed or co-authored a change on this page, with how many of them:

@slprime (136), @Dream-Master (14), @UltraProdigy (7), @Ranzuu (6), @Algent (3), @boubou19 (3), @Caedis (3), @Alexdoru (2), @Kogepan229 (2), @koolkrafter5 (2), @Luca-Guettinger (2), @PLASMAchicken (2), @vcwdfca (2), @AshVz (1), @Chitak985 (1), @Connor-Colenso (1), @cubefury (1), @danyadev (1), @eigenraven (1), @Emilgardis (1), @FourIsTheNumber (1), @Guvante (1), @H3stur (1), @jordanamr (1), @Justxs (1), @kuba6000 (1), @lc-1337 (1), @lunawinxp (1), @MassAnarchyy (1), @mllfjn (1), @NealDeal34 (1), @Nikolay-Sitnikov (1), @PlayfulPiano (1), @RecursivePineapple (1), @sbwaz (1), @sisyphussy (1), @timb8g (1), @vermz99 (1), @wlhlm (1), @YannickMG (1), @Yoshy2002 (1)