Skip to content

Applied-Energistics-2-Unofficial ​

573 merged pull requests.

Needs action on an existing world:

  • [check your build] #953 Fixes crafting getting stuck when a crafting pattern that accepts substitutes needs a specific wood plank. The calculator used to take a different plank from a processing pattern's output, even though the crafting pattern would not accept it.
    Check your crafting CPUs for a job stuck on a substituted ingredient, cancel it and re-request it; the calculator now tests that a substitute is actually accepted by the pattern slot. The patterns themselves do not have to be re-encoded.
  • [check your build] #1638 Fixes an exploit where each RemoteIO connection on the same ME Controller face gave another 32 channels. Connections on one face now share that face's 32 channels, while connections on different faces stay independent. With channels disabled, capacity is still unlimited.
    If several RemoteIO links sit on one ME Controller face, they now share its 32 channels; spread them over more faces.

New Features ​

  • #1681 PatternEncodingHelper.encode writes an encodedAt long to the pattern NBT. ItemEncodedPattern formats it in the tooltip. PatternHelper and UltimatePatternHelper strip encodedAt, as they do author, when building the comparison stack. - @DreamYao520
    • Added: Encoding timestamp on pattern tooltips
    • Closes GTNH#27073
  • #1661 PacketPickBlock opens the craft amount GUI (ContainerCraftAmount via GuiBridge) when the grid has a crafting pattern but no stock. The early return for a full inventory with no partial stacks is removed. - @Jesse-njx
    • Added: crafting amount screen on pick block for out-of-stock craftable items
  • #1659 Adds Settings.RESHUFFLE_ACCESS to PartStorageBus, synced in ContainerStorageBus (GuiSync 10) with a GuiImgButton in GuiStorageBus. StorageBusInventoryHandler applies the intersection of reshuffle and normal access; game tests added for item and ae2fc fluid buses. - @Worive
    • Added: reshuffler access setting on ME Storage Bus, reshuffler access button in storage bus GUI
  • #1649 GuiNetworkStatus gets an MEGuiTextField that sets the search string on the ItemRepo, updates the view and refreshes the scrollbar on text change. networkstatus.png is updated for the search slot. - @Worive
    • Added: Component search field in Network Status
  • #1643 Added four ExtraBlockTextures entries (BlockCreativeEnergyControllerLights, ColumnLights, ColumnConflict, Conflict) with PNGs and animation mcmeta files. RenderBlockController picks them when the block is a BlockCreativeEnergyController. - @Nana-Sakura
    • Added: Creative Energy Controller light textures, Creative Energy Controller conflict textures
  • #1616 GuiCraftingTree tracks missing and hasMissing per Node, colors nodes and lines by status, and supports collapsing branches. GuiCraftConfirm adds a hideAvailable GuiAeButton and shrinks the tree widget to make room. New ColorUtils entries and a HideAllAvailable lang key were added. - @Pxx500
    • Added: missing ingredient highlighting in crafting tree, blocked node highlighting, branch collapse and expand, Hide all available button
  • #1613 Added Settings.RESHUFFLE_ACCESS backed by AccessRestriction, plus getReshuffleAccess defaults on ICellContainer and IMEInventoryHandler. GuiDrive and GuiChest get a GuiImgButton, and the containers, TileDrive, TileChest and ReshuffleTask apply the restriction. Rollback can still return items to extract-only sources. - @Worive
    • Added: Storage Reshuffler access mode button on ME Drive and ME Chest, GameTests for reshuffler access modes
    • Fixed: reshuffle report marking moved items as lost when restricted storage was involved
  • #1604 Added ToolMemoryCard.savePatterns and insertPatterns, storing crafting patterns and slot indexes under an NBT list on the card. They are called from AEBaseTileBlock.onBlockActivated and AEBasePart.useMemoryCard for IInterfaceHost. - @Caedis
    • Added: pattern copying with the Memory Card
  • #1595 Animation state moves into PathGridCache and is synced through ContainerNetworkStatus and PacketValueConfig. The per-player default is stored client-side in ClientHelper and the AEConfig entry is removed. BlockController now registers light textures for every ControllerAnimation. GuiNetworkStatus gets a CONTROLLER_ANIMATION GuiImgButton and a preview, and NetworkCoreTests adds gametests. - @Worive
    • Added: per-network controller animation, controller animation preview and button in Network Tool GUI
    • Removed: global controller animation config option
  • #1579 BlockInterface registers per-color icons and RenderBlockInterface picks them from TileInterface's color, falling back to the default when the stuck highlight is active. TileInterface gets color handling. Added 16 color textures per interface face, a gametest for mismatched cables, and an extra label in the interface_network test structure. - @Worive
    • Added: colorable ME Interface, colorable Dual Interface, colored interface textures
  • #1576 ToolColorApplicator skips the power and cell inventory checks when the player is in creative mode. getAvailableColorsCount takes a creative flag. IMouseWheelItem gets a default onWheel overload that receives the player, and PacketValueConfig calls it. - @Worive
    • Added: creative mode use of Color Applicator without energy or paint
  • #1574 Added colorability to BlockController with per-color textures, animation rendering in RenderBlockController, new ControllerAnimation enum, keybinding for animation cycling, and AEConfig settings for animation and color selection. - @Worive
    • Added: controller colorability, 16-color dyeing, 7 animation styles, animation cycle keybinding, controller texture variants
  • #1554 Modified AEBasePart.setCustomName() to remove the display name tag when given empty text, instead of storing an empty string. - @Eldrinn-Elantey
    • Fixed: Empty custom names on cable parts
  • #1552 Extended GuiCellWorkbench and NEIInputHandler to handle bookmark group drops for cell partitioning, mirroring the implementation from PR #1487. - @DreamYao520
    • Added: Bookmark group drag-drop support in Cell Workbench
  • #1545 Modified IInterfaceNameProvider to support serialized IChatComponent suffixes that deserialize on the client, ensuring proper language localization; plain text and failed deserializations remain as raw text for compatibility. - @Eldrinn-Elantey
    • Added: Chat component serialization support for interface names
    • Fixed: Interface name localization on dedicated servers
  • #1541 Extended GuiNetworkStatus and ContainerNetworkStatus to configure lite crafting default; updated CraftingGridCache to use network default when no explicit mode is provided. - @AnsonYeung
    • Added: Network-wide lite crafting default setting
  • #1538 Added getPartName() method to IStorageBus interface and PartStorageBus implementation; GuiStorageBus now uses dynamic part name instead of hardcoded text. - @vVvDAPPA
    • Added: IStorageBus#getPartName() API
    • Fixed: Fluid storage bus label in GUI
    • Closes GTNH#26041
  • #1487 Added NEI bookmark group handling to GuiStorageBus and NEIInputHandler, allowing phantom slot filter population from dragged item groups instead of single items. - @DreamYao520
    • Added: NEI bookmark group drag-and-drop support for Storage Bus filters
  • #1483 Updated dependencies to latest InventoryBogoSorter and added pin detection logic in AEBaseContainer and Platform to respect pinned slots during dropoff. - @Algent
    • Added: Bogo sorter pin support in dropoff
  • #1470 Modified ItemRepo, ContainerCraftConfirm, ContainerMEMonitorable, and PinsHandler to implement crafting history behaviour and added configuration option in AEConfig. - @kirilwapj
    • Added: Crafting row history mode, showCraftingPinsItemsInMainView config option
  • #1464 Added client config option in AEConfig to control auto-focus behaviour in GuiInterfaceTerminal. - @Eldrinn-Elantey
    • Added: Interface Terminal search autofocus config option
  • #1462 Added new localization strings and tooltip display logic to ICellInventory and related classes to show Equal Distribution and Void Overflow upgrades in cell tooltips. - @Sanduhr32
    • Added: Equal Distribution and Void Overflow upgrade tooltips
  • #1455 Added new part class PartAdvancedLevelEmitter, container, GUI, and API interface IAdvancedLevelEmitter; introduced BooleanOperation enum for AND/OR logic; created corresponding textures and localization strings. - @Ranzuu
    • Added: Advanced Level Emitter part, BooleanOperation enum, ContainerAdvancedLevelEmitter, GuiAdvancedLevelEmitter, IAdvancedLevelEmitter API interface
    • Closes GTNH#25481
  • #1438 Introduced CraftingJobFast and SccResolver classes for fast crafting computation, added configuration option to AEConfig, updated crafting request packet and container logic to support mode selection via GUI. - @AnsonYeung
    • Added: Lite crafting mode algorithm (CraftingJobFast, SccResolver), crafting mode selection in GUI, configuration option for crafting mode
  • #1418 Added API methods to ICraftingGrid and ICraftingProviderHelper to expose virtual patterns from Level Emitters. Modified PartPatternRepeater to subscribe to and intercept emitable craft requests via CraftingWatcher. Updated CraftingGridCache to notify pattern repeaters of emitable patterns. - @rieverholic
    • Added: Pattern repeater support for emitable crafting, API for exposing emitable patterns
    • Closes GTNH#24755
  • #1414 Added new config flag in AEConfig, updated pattern type mismatch highlighting logic in GuiInterface and GuiInterfaceTerminal to check the flag and only highlight pattern inputs. - @Kogepan229
    • Added: Config option for pattern type mismatch highlighting
    • Closes #1406
  • #1407 Added default isDistribution() to ICellInventory and ICellInventoryHandler, implemented in CellInventory (returns cardDistribution) and CellInventoryHandler (delegates to the cell inventory). - @hinyb
    • Added: isDistribution on cell inventory API
  • #1403 Added color support to BlockIOPort and TileIOPort with new RenderIOPort renderer and ExtraBlockTextures for colored light textures. - @Inphysible
    • Added: ME IO Port coloring
  • #1402 Implemented client-side placement with PacketPartPlacement and PacketPartInteraction, removing server-side raytracing logic. Client computes block position and side, sending complete placement data to server. Removed onPlayerRightClick override from ToolQuartzWrench in favor of the new system. - @AnsonYeung
    • Added: client-side cable placement, PacketPartInteraction
    • Removed: server-side placement raytracing
    • Fixed: cable placement feedback delay
    • Closes GTNH#25251
  • #1396 Added pattern multiplication/division logic to GuiInterfaceTerminal and ContainerInterfaceTerminal with new InventoryAction and MonitorableAction handlers. Supports Ctrl+Click, Ctrl+M2, and Ctrl+Scroll for multiply-by-2 and divide-by-2 operations. Localized strings added across multiple language files. - @S4mpsa
    • Added: pattern multiplication in interface terminal
  • #1390 Extended phantom slot tooltip rendering in AEBaseGui to display outside terminal contexts, and removed duplicate handling from GuiMEMonitorable. - @Kogepan229
    • Added: phantom slot tooltips outside terminals
    • Fixed: difficulty setting up Level Emitters and Level Maintainers with fluids
    • Closes GTNH#25401
  • #1378 Added TerminalSettings and TerminalPlayerSettings classes to store per-terminal search state; updated GuiMEMonitorable, terminal parts, and WirelessTerminalGuiObject to use local storage instead of global filter; removed MonitorableTypeFilter. - @lc-1337
    • Added: terminal-specific saved search, TerminalSettings storage
    • Removed: MonitorableTypeFilter global filter
  • #1376 Introduced flow statistics collection infrastructure: FlowSearchDTO, ItemFlowHighlighter, and integration into AEBaseContainer and terminal GUIs; added Item Flow Tracking toggle to GuiNetworkStatus; added keybind in ActionKey; extended IDisplayRepo API. - @slprime
    • Added: item flow tracking system, flow search UI, block highlighting for item flow, network status tracking toggle, flow statistics collection
  • #1367 Modified GuiCraftingCPU order logic to use active stack size instead of including inactive stacks. - @lc-1337
  • #1366 Updated tooltip generation to call getDisplayName() on keybinds instead of using keybind name strings across multiple GUI classes. - @lc-1337
    • Added: keybind key name display in tooltips
  • #1359 Made downloadSettings/uploadSettings public in AEBaseTileBlock and AEBasePart; extended ToolMemoryCard to handle additional NBT fields and clear existing slots before pasting. - @Kogepan229
    • Added: memory card custom name copy, memory card ore filter copy, memory card P2P priority copy, memory card config copy
  • #1302 StorageChunkProvider.provideChunk fills the short[] biome array through ChunkBiomeHook when Platform.isEndlessIdsLoaded is true. Otherwise it fills the byte[] array as before. Added the endlessids compileOnly dependency. - @tiffit
    • Added: EndlessIDs compatibility for spatial storage biome
  • #1294 Added BlockSuperMEReplenisher, GuiSuperMEReplenisher, ContainerSuperMEReplenisher with caching logic for input items and configurable keep-percentage and refill tick rates. Extended tick manager cache and storage interfaces. - @lc-1337
    • Added: Super ME Replenisher block, Super ME Replenisher GUI and container, cache function for input items
  • #1287 Added IWirelessTermRegistry.checkRange(ItemStack, EntityPlayer), implemented in WirelessRegistry. It resolves the terminal's encryption key to a locatable and runs the existing range check, honouring infinity range. It returns false on the client. - @Kogepan229
    • Added: checkRange in IWirelessTermRegistry
  • #1275 Added ThEConvertor and ae2fcConvertor utility classes to handle item conversion for deprecated fluid cells and essentia workbenches from legacy mods. - @lc-1337
    • Added: Thaumic Energistics deprecation support, AE2 Fluid Crafting deprecation support, convertor utilities
  • #1274 Restored RotaryCraft integration module and re-added RotaryCraft power sink handler. Removed dead IntegrationTypes and cleaned up Mekanism and other integration modules. - @lc-1337
    • Added: RotaryCraft power sink support, RotaryCraft integration module
    • Removed: dead integration type entries, unused integration code paths
    • Fixed: RotaryCraft Watt power support
    • Closes #730
  • #1271 Updated AEBaseCell disassembly logic to support fluid cells in addition to item storage cells. - @lc-1337
    • Added: Fluid cell disassembly support
  • #1268 Introduced GuiWirelessNetworkManager, ContainerWirelessNetworkManager, and related UI infrastructure; enhanced ToolWirelessTerminal to support multi-network binding; added new GUI text keys and texture asset. - @lc-1337
    • Added: Wireless Terminal Network Manager GUI, Multi-network wireless terminal support, WirelessModeChange and WirelessExtraAction keybind integration
  • #1250 Increased maximum text field length in MEGuiTextField for OreDictionaryFilter usage. - @youkoaona
    • Added: Longer ore name support in OreDictionaryFilter
  • #1243 Added Colorizer item and container; introduced ScreenColor client config utility; modified all AE2 GUI components (backgrounds, buttons, frames) to apply the selected color tint. - @ko-lja
    • Added: Colorizer item, ScreenColor client-side color utility, GUI color tinting system
  • #1237 Made ContainerInterfaceTerminal implement IContainerSubGui and GuiInterfaceTerminal implement IGuiSub; added RENAME_INTERFACE action item. - @Eldrinn-Elantey
    • Added: Shift-click rename button in Interface Terminal, RENAME_INTERFACE action item
    • Fixed: Interface Terminal rename flow
  • #1228 Added per-section visibility toggle and global "Show Hidden" button; implemented server-side terminalVisible flag in packets; reordered packet dispatch to fix race conditions. - @Eldrinn-Elantey
    • Added: Per-section hide button in Interface Terminal, Global show hidden toggle, terminalVisible flag in network packets
    • Fixed: Interface Terminal visibility race condition
  • #1227 Extended TileDrive cell recognition logic to identify and accept EquivalentEnergistics EMC cell types. - @lc-1337
    • Added: EquivalentEnergistics EMC cell compatibility
    • Fixed: ME Drive EMC cell recognition
    • Closes #1225
  • #1220 Modified GuiMEMonitorable to handle NEI ghost item clicks on terminal pins; adjusted ContainerMEMonitorable pin validation logic to allow ghost items. - @Kogepan229
    • Added: NEI ghost item support for terminal pins
    • Closes #880
  • #1219 Added block icon rendering and priority tooltip to GuiInterfaceTerminal. Exposed getPriority() and isFluidInterface() default methods in IInterfaceViewable. Added fluid pattern highlighting in GuiInterface and terminal. Introduced PacketInterfaceTerminalUpdate for priority/type syncing and updated ContainerInterfaceTerminal accordingly. - @Eldrinn-Elantey
    • Added: interface block icon in terminal headers, priority tooltip, fluid pattern highlighting
  • #1210 Implemented new PartCraftingDiagnosticTerminal with dedicated GUI and container. Captures crafting stats (total quantity, time, items/sec) from CPU execution, persists via grid storage, and provides sortable diagnostic views via GuiCraftingDiagnosticTerminal and ContainerCraftingDiagnosticTerminal. - @ShadowQFT
    • Added: CraftingDiagnosticTerminal part, GuiCraftingDiagnosticTerminal, ContainerCraftingDiagnosticTerminal, DiagnosticSortMode, DiagnosticSortButton, crafting diagnostics tracking
  • #1200 Enhanced Pattern Terminal and ME Monitorable GUI/Containers to allow blank pattern usage directly from network storage with different interaction modes. - @Kogepan229
    • Added: network-based blank pattern usage
  • #1196 Created IInterfaceNameProvider interface in API for TileEntities to provide name suffixes. Created IInterfaceViewable and enhanced IInterfaceHost. Modified DualityInterface to use getAdjacentNameSuffix() and check for IInterfaceNameProvider implementations. Updated GuiInterfaceTerminal, ContainerInterfaceTerminal, and CraftingCPUCluster to work with dynamic interface names. - @Eldrinn-Elantey
    • Added: IInterfaceNameProvider API interface, IInterfaceViewable interface, Dynamic interface name suffix support
  • #1194 Enhanced GuiPatternTerm and VirtualMEMonitorableSlot to display tooltip hints about available hotkeys. Added localization strings for hotkey information in ButtonToolTips. - @Kogepan229
    • Added: Hotkey hint tooltips in Pattern Terminal, MEMonitor slot interaction hints
  • #1190 Enhanced GuiAmount and GuiCraftAmount to display calculation result tooltips when text field contains non-numeric characters or values exceed 1M threshold. - @Kogepan229
    • Added: Calculation result tooltips for amount inputs
  • #1189 Added PacketClickOrDragFakeSlot to handle container interaction key combined with inventory clicks. Modified AEBaseGui and GuiMEMonitorable to detect and process container transfers. Removed obsolete PacketNEIDragClick and updated Platform helper methods. - @Kogepan229
    • Added: Quick container transfer feature, PacketClickOrDragFakeSlot for container interactions, MonitorableAction support
    • Removed: PacketNEIDragClick obsolete packet
    • Closes #1107
  • #1179 Added NEICellSearchFilter, an NEI ISearchParserProvider with search mode ALWAYS, registered reflectively in the NEI integration module. It reads the cell inventory of any IStorageCell stack and matches the pattern against the stored stacks. Moved from AE2FluidCraft-Rework's NEISearchFilter and generalised to all stack types. - @Kogepan229
    • Added: NEI search filter for storage cell contents
  • #1176 Enhanced GuiUpgradeable and ContainerCellWorkbench to display tooltips for cell upgrade slots. Refactored UpgradeInventory and created IUpgradeInventory interface for better abstraction. - @Kogepan229
    • Added: Tooltips for upgrade card slots, IUpgradeInventory interface
  • #1164 Added tooltip handler in GuiUpgradeable to display available upgrade cards and their maximum installable quantities when hovering over upgrade slots. - @Ranzuu
    • Added: tooltip handler for upgrade slots
    • Closes GTNH#24084
  • #1155 Added amount control button configuration to GuiAmount and GuiCraftAmount, extended AEConfig with new settings, added corresponding ActionItems and localization strings. - @Ranzuu
    • Added: configurable amount value fields in Select Amount GUI
  • #1151 Extended PacketCraftingRemainingOperations to include per-item scheduled reasons, added color and icon mappings for scheduled reasons, updated GuiCraftingCPU to display reason indicators and tooltips. - @bk5115545
    • Added: scheduled-reason colors and icons for crafting CPU operations, per-item scheduled reason in sync payload
    • Closes GTNH#21019
  • #1147 Updated GuiMEMonitorable, VirtualMEMonitorableSlot, and ContainerMEMonitorable to check type filter visibility before allowing insertions and container interactions. - @Kogepan229
    • Added: type filter enforcement on item insertion
  • #1143 Introduced CPUSortBy enum and ActionItems entries, added sort button logic to GuiCraftingCPUTable and ContainerCPUTable, updated GUI button rendering and localization. - @Ranzuu
    • Added: CPU sorting by name/memory/co-processors, sort order toggle button, CPU sorting UI controls
  • #1142 Extended ToolColorApplicator to handle backhand interactions via PacketColorSelect, fixed power and dye consumption logic in Platform utility. - @sbancuz
    • Added: backhand support for Color Applicator
    • Fixed: Color Applicator not consuming power and dyes
  • #1138 Added PinSectionOrder and PinsRows enums, extended IDisplayRepo interface, updated ItemRepo caching logic, refactored GuiMEMonitorable and related containers to use new pin row settings, added new color for crafting pin slots. - @PantACRO4life
    • Added: visible row settings for crafting and player pins, new color for crafting pin slots in GUI
  • #1137 Enhanced PartLevelEmitter with methods to detect legacy emitter type from item stacks and apply appropriate filters during loading. - @PantACRO4life
    • Added: legacy type detection for level emitters
    • Fixed: compatibility with previously placed emitters lacking type filter data
  • #1120 Enhanced GuiInterfaceTerminal text rendering to wrap interface names across multiple lines. - @ABKQPO
    • Added: line wrapping for interface names in terminal
  • #1105 Replaced string-based rendering with texture rendering in GuiNetworkStatus; updated networkstatus.png asset. - @Ranzuu
    • Added: texture-based network status bar rendering
  • #1097 Refactored GuiCraftConfirm and GuiCraftingCPU search field rendering and updated searchField.png texture. - @evgengoldwar
  • #1090 Modified ItemMultiPart cable sorting logic to prioritize base cable in groups. - @slprime
  • #1089 Extended RenderBlockInterface, AEConfig, DualityInterface, and TileInterface with enhanced stuck overlay rendering and tracking. - @Ranzuu
    • Added: enhanced stuck overlay with detailed state visualization
  • #1084 Updated GuiStorageBus rendering logic to fade slots when oredict card is present. - @lc-1337
    • Added: slot fadeout visual for oredict mode
  • #1078 Added render-time detection and tinting in RenderBlockInterface, with configurable option in AEConfig and stuck state tracking in DualityInterface. - @lc-1337
    • Added: red tint visual indicator for stuck items, AE config option for stuck overlay
  • #1077 Modified DualityInterface, AdaptorDualityInterface, and AdaptorMEChest to support exotic stack transfers in addition to standard items. - @lc-1337
    • Added: exotic stack transfer support in network interfaces
  • #1072 Added new BlockStorageReshuffle, GuiStorageReshuffle, RendererStorageReshuffle, ReshufflePhase config, and associated network/container logic to enable storage redistribution workflow. - @Breviel
    • Added: reshuffle storage block, reshuffle storage GUI, reshuffle action source, reshuffle phase configuration, health sort order configuration
  • #1069 Updated IStorageCell, ICellWorkbenchItem, ItemViewCell, and related classes to support all stack types in view cells and cell workbench. - @Kogepan229
    • Added: universal stack type support in view cells
  • #1060 Extended VirtualMEMonitorableSlot, VirtualMEPhantomSlot, and VirtualMESlot to display operation tooltips; updated AEConfig keybinding labels and localization. - @Kogepan229
    • Added: slot operation tooltips, clarified keybinding names
    • Closes #1059
  • #1057 Added ItemTunnelPattern class and extended ICraftingPatternDetails, ContainerPatternTerm, UltimatePatternHelper, and CraftableItemResolver to support tunnel pattern encoding with input-only mode. - @PinkYuDeer
    • Added: tunnel pattern item type, input-only pattern encoding
  • #1054 Updated BlockWireless, TileWireless, TileSecurity, and PlayerMessages to enable terminal binding without security when configured. - @lc-1337
    • Added: wireless terminal binding, new localization key
  • #1053 Modified ICraftingCPU, CraftingCPUCluster, and TileCraftingTile to support multi-output pattern handling with fake crafting cards and adjusted data update scheduling. - @lc-1337
    • Added: multi-output pattern support
  • #1048 Introduced GuiNotification, Notification, NotificationManager, PacketCraftingCompleteNotification, and CraftingNotificationManager. Integrated popup rendering into client loop and notification dispatch into CraftingCPUCluster completion logic. - @ABKQPO
    • Added: GuiNotification, Notification, NotificationManager, PacketCraftingCompleteNotification, CraftingNotificationManager
  • #1046 Exposed addInformation method in AEBaseBlock and implemented custom tooltips for BlockCreativeEnergyCell, BlockCreativeEnergyController, BlockDrive, and ItemMultiPart. Added corresponding tooltip strings to all language files. - @Eldrinn-Elantey
    • Added: BlockCreativeEnergyCell tooltips, BlockCreativeEnergyController tooltips, BlockDrive tooltips, ItemMultiPart priority display
  • #1041 Added PacketRemoteRename packet and integrated shift-click rename detection in GuiInterfaceTerminal and PartInterfaceTerminal, restoring renaming without requiring a separate Renamer GUI. - @lc-1337
    • Added: PacketRemoteRename packet
    • Removed: GuiRenamer dependency
    • Fixed: Interface renaming in Terminal
    • Closes GTNH#23322
  • #1035 Introduced BlockSpatialLinkChamber, BlockSpatialNetworkRelay, corresponding containers, renderers, and GUIs. Enhanced BlockMatrixFrame to support shift+RMB interaction. Updated GuiBridge, API definitions, and packet handlers to support spatial dimension routing. - @kuba6000
    • Added: Spatial Link Chamber block, Spatial Network Relay block, PacketSpatialAction packet
  • #1010 Added requester tracking to ICraftingCPU interface and CraftingCPUCluster, updated GuiCraftingCPUTable and CraftingCPUStatus to display requester name in active crafts. - @serenibyss
    • Added: requester tracking in crafting CPU
  • #1002 GuiColorSelect now reads its colors from new GuiColors entries (ColorSelectBackground, ColorSelectBorder, ColorSelectTitle and the ColorSelectBtn* set) instead of hardcoded constants. - @Worive
    • Added: resource pack colors for the color selection screen
  • #1000 Added PartPatternRepeater block with crafting pattern forwarding, new ICraftingPostPatternChangeListener callback, and WAILA integration. Modified CraftingGridCache and related networking classes. - @lc-1337
    • Added: Pattern Repeater part, crafting post-pattern change listener callback, Pattern Repeater WAILA provider
  • #998 Added GuiColorSelect GUI, IMouseWheelItem interface, and PacketColorSelect packet; refactored ToolColorApplicator to use new color selection and added special handling for AE2 blocks. - @Worive
    • Added: Color picker GUI, Middle-click color sampling, GuiColorSelect implementation
    • Removed: Old color click packet
  • #994 Added new setting and UI button to GuiLevelEmitter and ContainerLevelEmitter; updated PartLevelEmitter to use the detection mode flag. - @hinyb
    • Added: Level Emitter empty filter detection mode button
  • #993 New IStorageInterceptor API, implemented by DualityInterface and handled in NetworkMonitor. unlockStacks becomes List<IAEStack<?>> and is saved via Platform.writeStackNBT/readStackNBT, with the Waila providers updated to match. Diff is truncated, so the exact locking fix is not visible. - @lc-1337
    • Added: IStorageInterceptor API
    • Fixed: locking card behaviour for interfaces
  • #991 Added ExtractionMode enum values and UI controls to ContainerStorageBus and GuiStorageBus; updated Settings and localization. - @sbancuz
    • Added: Bi-directional Storage Bus filter modes, Mode selector button
  • #988 Modified RenderDrive and RenderMEChest to apply color to the chassis/frame geometry instead of cell rendering. - @Worive
    • Added: Chassis-based coloring for ME Drives and Chests
  • #982 Added localization strings and updated GuiAmount.java and GuiLevelEmitter.java to display localized text. - @Ranzuu
    • Added: Localized amount display
  • #974 Added NEIInputHandler.java, updated NEIPatternViewHandler.java, ItemEncodedPattern.java, and localization to support pattern output viewing with customizable hotkey. - @ABKQPO
    • Added: NEIInputHandler class, Pattern output viewing feature
  • #969 Adds the IFacadeControl interface with a default createFacadeForBlock(meta) returning true. FacadeConfig.checkEnabled returns false when the block implements it and it returns false for the metadata. - @chrombread
    • Added: IFacadeControl interface
  • #958 Introduces IAEStackType. StorageChannel-based APIs get stack-type equivalents, with the old ones kept as deprecated where the diff shows it. Removes Settings.TYPE_FILTER and IStorageCell.getStorageChannel. IStorageBus and ICellWorkbench now use getStackType. Adds LevelEmitterTypeFilter to ILevelEmitter. - @Kogepan229
    • Added: stack type registration API, level emitter type filters
    • Removed: TYPE_FILTER setting, IStorageCell storage channel method
    • Fixed: Tree Display mode bugs, server crash with subnetwork (storage bus and interface)
    • Migration: Settings.TYPE_FILTER is removed, and StorageChannel and the methods that take it still work but are deprecated in favour of IAEStackType, registered through AEStackTypeRegistry. Classes that implement IAEStack directly must add the new abstract methods, including getStackType(), getAmountPerUnit() and drawOnBlockFace(World).
    • Closes #996, #1025
  • #945 Implemented PacketPickBlock, KeyBindHandler, and PlayerInventoryUtil to handle block selection, terminal lookup, range checking, and item insertion into hotbar. - @michaeldoylecs
    • Added: AE2 Pick Block keybind, creative-like block withdrawal from AE2, PacketPickBlock and supporting utilities
  • #935 Introduced BlockRendererPreviewEvent, AbstractRendererPreview, and specific renderer implementations (RendererCable, RendererExportBus, etc.) for client-side preview rendering. - @evgengoldwar
    • Added: block preview rendering system, preview renderers for cables, buses, emitters, and terminals
  • #927 Created QuantumBridgeWailaDataProvider for WAILA integration, enhanced QuantumCluster to expose state information, added tooltip localization strings. - @evgengoldwar
    • Added: Quantum Bridge WAILA tooltip, QuantumBridgeWailaDataProvider, Singularity name and status display, Localization entries
  • #923 Extended FuzzyMode enum with two new breakpoint values, added GUI sprites for new settings, and localization entries across all supported languages. - @Litten95
    • Added: 10% fuzzy card breakpoint, 1% fuzzy card breakpoint, GUI sprites for new breakpoints, Localization entries (all languages)
  • #921 Enhanced GuiCraftingCPUTable to display tooltip text based on crafting request restriction mode, added localization strings in multiple languages. - @MCTBL
    • Added: CPU crafting request source tooltips, Localization strings for CPU modes
  • #908 Created NEIPatternViewHandler in NEI integration module to display encoded pattern details, extended GuiText localization entries, and updated localization strings. - @evgengoldwar
    • Added: Encoded Pattern preview tooltip, NEIPatternViewHandler integration
  • #900 Enhanced MEGuiTextField with character count display logic, updated GuiOreFilter to render the counter, added color definitions to GuiColors. - @gaogao-qwq
    • Added: Text length counter in oredict card GUI, Color definitions for counter display
  • #899 Added PAUSE_TERMINAL_OPERATIONS setting in Settings.java, integrated into GuiMEMonitorable terminal GUI logic to conditionally skip pause operations on shift-click. - @SST-03
    • Added: PAUSE_TERMINAL_OPERATIONS setting
    • Fixed: Shift-click leaving 0-size stacks in terminal
    • Closes GTNH#22257
  • #892 Extended GuiCraftingTree with collapse functionality and added UI state toggle buttons for tree node expansion control. - @asukaonly
    • Added: Tree collapse/expand toggle buttons, Tree state visibility controls
  • #889 Introduced PrioritizedNetworkItemList that streams items ordered by descending/ascending priority. IO Port uses this list to determine extraction order. - @hiroscho
    • Added: PrioritizedNetworkItemList for priority-ordered item iteration
  • #875 Created MEItemIO capability wrapper and integrated with PartSharedItemBus, PartExportBus, PartImportBus, and TileInterface. Uses GT's IItemIO/IItemSource/IItemSink capabilities. Updated GT integration module. - @RecursivePineapple
    • Added: MEItemIO capability implementation, InventoryAdapter for IItemIO wrapping
  • #872 Introduced VirtualMESlot for IAEStack-based rendering and sync, subgui system for modular GUIs, and enhanced API surface for addon customization. Pattern terminal supports arbitrary stack sizes. Cell partition system now generic. - @lc-1337
    • Added: VirtualMESlot system, Subgui framework, Control keybind for non-item interactions, LevelViewable and LevelState APIs, IGuiItem interface enhancements
    • Fixed: Pattern converter incompatibility
    • Closes GTNH#22220
  • #865 Added suspend/resume API methods to ICraftingCPU and UI buttons in GuiCraftingCPU. Network state is synchronized via PacketValueConfig and stored in CraftingCPUCluster. - @ko-lja
    • Added: Pause/resume button in Crafting CPU GUI, Suspend state tracking in CraftingCPUCluster
  • #862 Modified AEColor utility class to support ME drive coloring, updated RenderDrive and RenderMEChest rendering logic, and added color storage/retrieval to TileDrive class. - @chrombread
    • Added: Color support for ME Drive proxy
  • #846 Extended GuiCraftingCPU, GuiInterfaceTerminal, GuiNetworkStatus, BlockPosHighlighter, and CraftingCPUCluster to retrieve and display interface names; updated localization strings and PacketCraftingItemInterface packet handler. - @FabienChatton
    • Added: Interface name highlighting display, Interface name localization strings
  • #775 Modified GuiCraftConfirm and created new GuiCraftingList widget class to handle list-based crafting plan screenshot rendering with automatic column-ratio calculation; added texture asset for UI. - @MCTBL
    • Added: List-based crafting plan screenshot function, GuiCraftingList widget
  • #734 Introduced new tool item class, configuration enums (AdvancedWirelessToolMode, WirelessToolGroupBy, WirelessToolMode), two new blocks (BlockAdvancedInscriber, BlockWirelessConnector, BlockWirelessHub), new API utilities (DimensionalCoord, extended NamedDimensionalCoord), container and GUI implementations, with multiple net packet handlers for tool functionality. - @lc-1337
    • Added: Super Wireless Kit item, Advanced Inscriber block, Wireless Connector block, Wireless Hub block, Wireless tool mode and grouping settings, Tool mode and grouping configuration classes

New Content ​

  • #1066 Updated uk_UA.lang with improved translations and formatting. - @GribanovIvan
  • #943 Added en_US.lang entries for Terminal bauble localization with formatting codes matching other bauble types. - @Kynake
    • Added: Terminal bauble localization
    • Fixed: Terminal bauble description display

Changes ​

  • #1678 Changed two display names in en_US.lang for ItemEncodedPattern and ItemEncodedUltimatePattern. No ids change. - @shironakoushi
  • #1624 DualityInterface.addToSendList uses alertDevice instead of wakeDevice, and tickingRequest returns URGENT when items were sent, not only when storage work was done. - @AnsonYeung
    • Fixed: stuck interfaces staying at the slowest tick rate
  • #1622 GuiInterfaceTerminal.drawFG shifts the inventory label to VIEW_LEFT + 12 and ySize - 93. - @Ranzuu
  • #1618 PartPlacement.tryPlace predicts cable connections client-side through a new internal PartCable.addConnection and sends a new PacketRequestResync to make the server mark the neighbor for update. - @AnsonYeung
    • Added: client-side cable connection prediction, PacketRequestResync packet
  • #1591 GuiColorSelect draws the colorApplicator.png texture instead of filled rectangles and uses EnumChatFormatting for tooltip colors. Removed unused colorSelect entries from ColorUtils. - @Ranzuu
    • Removed: unused color select colors in ColorUtils
  • #1582 Replaced the controller and related colored block textures (about 128 PNG files). No code changes. - @Worive
  • #1488 Changed particle color constant in PartAdvancedLevelEmitter from the base tier color to purple. - @boubou19
  • #1481 Modified GuiCraftConfirm and GuiCraftingCPUTable to render tint overlay first and adjusted progress bar initialization logic. - @Ranzuu
    • Fixed: CPU status text visibility, Progress bar starting point
  • #1471 Drops the CardPatternRefiller shapeless recipe from cards.recipe, deletes network/crafting/index.recipe, removes the matter-cannon and misctools imports from the tools and network index files, and sets erroronmissing=false in the root index.recipe. - @Kogepan229
    • Removed: Pattern Refiller Card recipe, unused recipe imports
  • #1440 Changes the inWorldSingularity string in the en_GB, en_US, ko_KR and ro_RO lang files. - @DylanTaylor1
  • #1426 Added Blood Arsenal Transparent Orb item to the blocking mode ignore registry in BlockingModeIgnoreItemRegistry. - @koolkrafter5
    • Added: Blood Arsenal Transparent Orb to blocking mode blacklist
  • #1419 Removed highlight rendering logic in RenderBlockInterface, restored tint rendering in RenderBlockInterface, and simplified stuck state management in TileInterface by removing verbose handling code. - @lc-1337
    • Removed: stuck highlight, verbose stuck state checks in TileInterface
  • #1410 TileWirelessBase.addLinkedTarget is now public. The private overload returns early on duplicate targets, on a non-hub that already has a target, and when linkedTargets has reached maxConnections. - @Kogepan229
    • Added: public addLinkedTarget on wireless tiles
  • #1408 Updated states.png texture for better hide button visuals. - @Eldrinn-Elantey
  • #1398 Moved Line mode from AdvancedWirelessToolMode to WirelessToolMode enum, updated WireLessToolHelper and ToolWirelessKit to handle the new mode structure. - @lc-1337
    • Fixed: wireless kit line mode accessibility
    • Closes GTNH#25480
  • #1345 Modified NetworkVisualiserRender to remove duplicate node/link rendering, PacketNetworkVisualiserData to batch updates, and ToolNetworkVisualiser with optimizations; updated config defaults. - @Kogepan229
    • Added: network visualiser update interval configuration
    • Removed: duplicate link/node rendering
    • Fixed: network visualiser flickering
  • #1309 Enhanced GuiWirelessKit rendering and text layout, added GuiColors enum entry for indicator text color, localization strings for tooltips. - @Kogepan229
    • Added: indicator tooltip text, indicator text color enum
    • Fixed: rename tooltip positioning
  • #1277 Extended ThEConvertor with additional logic to handle Essentia Cell Workbench conversions. - @lc-1337
  • #1265 Refactored IStorageCell and ICellRestriction APIs; redesigned GuiCellRestriction and ContainerCellRestriction; updated AEBaseCell, storage cells, and related items to use new restriction patterns; simplified CellInventory handling by removing obsolete restriction methods. - @lc-1337
    • Added: Enhanced ICellRestriction API
    • Removed: Legacy PacketValueConfig value synchronization, Old CellInventoryHandler restriction methods
  • #1257 Updated GuiCraftingCPUTable styling parameters and refreshed the cpu_selector.png texture asset. - @Ranzuu
  • #1254 Modified DualityInterface to attempt pushing cached stacks when receiving neighbor updates. - @lc-1337
    • Fixed: Interface cache stacks stalling on neighbor changes
    • Closes #883
  • #1218 Modified GUI dimension in GuiInterfaceTerminal. - @Ranzuu
  • #1216 Updated tooltip string in language files across all supported locales and in GuiText configuration. - @Ranzuu
  • #1181 Reorganized pins synchronization in ContainerMEMonitorable and GuiMEMonitorable. Removed unnecessary Settings registration, consolidated player and crafting pin setters, and moved re-initialization logic. Updated ActionItems and removed unused sync packet fields. - @lc-1337
    • Removed: Separate Settings for pin sync, Additional button registrations, Sync functional not used for pins
    • Fixed: Search bar focus loss on terminal open
    • Closes #1174
  • #1180 Modified GuiCraftingCPU to always display scheduled reason tooltips with improved styling. Updated localization strings across all language files to provide clearer messages, particularly for interface blockages. - @Kogepan229
    • Fixed: Scheduled reason tooltip clarity and visibility
  • #1177 Modified GuiBusIO and GuiCellWorkbench to conditionally hide configuration slots based on whether an ore dictionary filter is active. Updated corresponding texture assets. - @lc-1337
  • #1173 Modified rendering coordinates in GuiCraftConfirm and GuiCraftingCPUTable to improve overlay visibility and alignment. - @Ranzuu
  • #1145 Added Crafting (Busy + Progress) sorting state to CPUSortBy enum, refactored GuiImgButton button state logic, updated ContainerCPUTable sort handling. - @Ranzuu
    • Added: Crafting (Busy + Progress) CPU sort option
  • #1136 Updated initial mode configuration in TileCondenser and ContainerCondenser. - @Ranzuu
  • #1116 Added IAEStackType.getColorDefinition() (default AQUA), overridden in AEItemStackType (GREEN) and AEFluidStackType (GOLD). ItemEncodedPattern.addInformation was simplified to use the stack type colour, dropping the fluid special case and the player and displayMoreInfo parameters. - @lc-1337
    • Added: stack type colour definition
  • #1074 Updated BlockDrive warning message localization to include line break. - @Eldrinn-Elantey
  • #1050 Updated Pins button tooltip text across 15 language files to document shift-click removal behavior. - @Ranzuu
  • #986 Updated tooltip text in GuiImgButton.java and ButtonToolTips.java from 'Item' to 'Item / Fluid' and updated all language files. - @UltraProdigy
  • #985 Updated ItemMultiMaterial.java and MaterialType.java to apply manual sorting instead of name-based sorting. Adjusted DisassembleRecipe.java accordingly. - @danyadev
    • Fixed: Material display order
  • #937 Updated GuiCraftingCPUTable tooltip rendering and added new localization strings in GuiText and en_US.lang. - @evgengoldwar
    • Added: improved CPU tooltip information
  • #936 CraftingRequest now tracks its parent requests. CraftingContext marks a request successful when a parent still has concrete, non-simulated resolvers left. CraftingTask gains isSimulated, overridden by IgnoreMissingItemResolver and SimulateMissingItemResolver. CraftableItemResolver is updated, and a competingRecipe functional test is added. - @Glease
    • Fixed: crafting tree search falling back to simulation when an alternative pattern could finish the craft

Bug Fixes ​

  • #1680 Added PinsHandler.writeToNBT and readFromNBT, which extract and restore the operating player's entry from the PinsHolder data. AEBasePart.useMemoryCard calls them for parts implementing ITerminalPins and marks the host for save. - @DreamYao520
    • Added: Pins copied by memory card
    • Fixed: Memory card on ME terminal not copying pins
    • Closes GTNH#27083
  • #1677 Removed the setPowerSides call from the TileAdvancedInscriber constructor, which registered the tile with IC2 before its world was set. Registration is left to onReady(). - @Kogepan229
    • Fixed: Crash when placing an Advanced Inscriber with IC2 installed
    • Closes #1632
  • #1676 PacketNEIRecipe.extractItemFromPlayerInventory handles WILDCARD_VALUE damage by matching on item only with FuzzyMode.IGNORE_ALL. Platform.extractItemsByRecipe adds a wildcardMatch check on the same Item for the fuzzy network search. - @Kogepan229
    • Fixed: NEI recipe transfer leaving slots empty for wildcard-metadata ingredients
    • Closes #1651
  • #1674 AEBaseGui.func_146977_a returns early for an AppEngSlot whose shouldDisplay() is false. - @Kogepan229
    • Fixed: NEI search overlays rendering on hidden slots
  • #1673 NEIInputHandler.keyTyped now handles recipe.recipe and recipe.usage keys over a VirtualMEPatternSlot in GuiPatternTerm and forwards them to the NEI manager. GuiMEMonitorable gets isSearchFieldManuallyFocused, ignores keyTyped when it is not the current screen, and clears search focus on close. - @Kogepan229
    • Fixed: NEI recipe and usage shortcuts on Pattern Terminal slots being eaten by the search field autofocus
  • #1670 AEBasePart.useMemoryCard writes AEStackTypeFilter to the memory card NBT on download and reads it back on upload for parts implementing ITerminalTypeFilterProvider, then calls saveTypeFilter(). - @DreamYao520
    • Fixed: terminal type filters not copied by memory cards
  • #1669 Moves getReshuffleAccess() (default READ_WRITE) into a new IReshuffleAccess interface, which ICellContainer and IMEInventoryHandler both extend, so the two defaults no longer conflict. Adds ReshuffleAccessCompatibilityTest. - @Worive
    • Added: IReshuffleAccess interface
    • Fixed: conflicting getReshuffleAccess defaults breaking compilation
  • #1668 DualityInterface.getCrafterIcon skips neighbours whose adaptor is AdaptorConduitBandle, or that are BaseMetaPipeEntity when GT is loaded. - @Eldrinn-Elantey
    • Fixed: interface terminal name and icon showing an adjacent EnderIO conduit or GT item pipe
  • #1667 PartP2PGT5Power.doOutput returns 0 when the proxy is not active. Adds a HorizonQA GameTest and structure (gt_eu_p2p_no_channel). - @Worive
    • Fixed: GT EU P2P output injecting energy without a channel
    • Closes GTNH#27049
  • #1666 AEBaseGui.mouseMovedOrUp calls the new GuiScrollbar.release(), which clears isLatestClickOnScrollbar, when a mouse button is released. - @Ressed
    • Fixed: scrollbar snapping to position after a single click on it
    • Closes GTNH#26907
  • #1663 ItemRepo.updateView: when a view entry has no server entry, call reset() on it instead of removing it; entries are removed only when pinned. Removal of 0-count entries is left to the next view update after shift is released. - @MarloGr
    • Fixed: ME terminal shift-lock not holding items whose amount reached 0
    • Closes GTNH#26971
  • #1660 GuiMEMonitorable returns false in the pick block action branch when the player's cursor holds an ItemStack. - @vermz99
    • Fixed: middle click craft firing while an item is held on the cursor
  • #1656 ItemSorters adds getSortName, which runs the display name through GTNHLib FontRendering.preprocessText and strips section sign codes with a regex. CONFIG_BASED_SORT_BY_NAME and the name tie-break in CONFIG_BASED_SORT_BY_MOD use it. - @alppp
    • Fixed: Name sort placing format-coded item names at the top or bottom
    • Closes GTNH#26932
  • #1654 PartPlacement.placeItemPart now calls tryPlace even with a null host so replaceable blocks are replaced. AbstractRendererPreview uses canAddPart and canPlaceBlockAt, RendererCable handles replaceable blocks, and the client assumes success on FMP hosts. - @AnsonYeung
    • Fixed: cable not replacing grass and other replaceable blocks, cable preview offset on replaceable blocks, Vajra hotswap placing AE2 cables adjacent to the target
    • Closes GTNH#26926
  • #1648 GridStorageCache.updateCellsStatusFromRegistry treats a cell reporting Integer.MAX_VALUE or Long.MAX_VALUE total types as a void cell and passes 0 total and used types. Adds a GameTest, voidCellIsDisplayedWithoutAddingTypes. - @Worive
    • Fixed: Void cells inflating the network type totals in the Network Tool
  • #1647 ContainerNetworkStatus.detectAndSendChanges reuses the existing ItemStack NBT tag when it has one before writing the named coordinates, instead of replacing it with a new compound. - @Worive
    • Fixed: Custom names lost in Network Status entries, Duplicate groups of the same component in Network Status
  • #1642 TileDrive writes a packed id/damage int per slot in writeToStream_TileDrive, reads it into a new storageTypes array, and exposes getStorageTypes() and getPoweredStorageType(slot). TileChest.getStorageType() now returns the raw value and a new getPoweredStorageType() keeps the powered check, which RenderMEChest uses. The stream format changed. - @ABKQPO
    • Fixed: ME Drive client missing cell capacity information
  • #1640 GuiInscriber, GuiAdvancedInscriber and GuiCrystalGrowthChamber pick xSize and the toolbox texture by getToolboxSize, as GuiUpgradeable does. ContainerUpgradeable gets an overridable getToolboxX, and ContainerAdvancedInscriber moves the 5x5 toolbox beside the upgrade strip. - @Eldrinn-Elantey
    • Fixed: Advanced Network Tool slots overflowing in Inscriber, Advanced Inscriber and Crystal Growth Chamber
  • #1638 PathingCalculation tracks a ControllerFace per path item with a 32-channel capacity (unlimited when the Channels feature is off) and checks it during the BFS channel assignment. Added RemoteIO as a compileOnly and runtime dependency, plus unit, functional and GameTest coverage. - @Worive
    • Fixed: Infinite channels from multiple RemoteIO connections on one ME Controller face
    • Migration: If several RemoteIO links sit on one ME Controller face, they now share its 32 channels; spread them over more faces.
    • Closes Dupes-Exploits-GTNH#372
  • #1633 GuiInterfaceTerminal.translateRawName falls back to dispRep.getDisplayName() when no translation key exists. PacketRename now carries the dispRep ItemStack, and the entry keeps rawName, rawSuffix and dispRep so the name can be rebuilt on rename. - @Eldrinn-Elantey
    • Fixed: Raw translation keys shown for GregTech hatches in the Interface Terminal, Stale name after the machine under an open terminal changed
  • #1630 Added IInterfaceViewable.isCraftingPatternProvider(), implemented in TileInterface, PartInterface and PartP2PInterface, and sent to the client in PacketInterfaceTerminalUpdate.PacketAdd. GuiInterfaceTerminal filters on that flag instead of comparing the display icon to the Molecular Assembler stack. The packet format gained a boolean, so client and server need the same version. - @Ableytner
    • Fixed: Large Molecular Assembler missing from the Interface Terminal crafting filter
  • #1629 DualityInterface.inventoryCountsAsEmpty now returns false when the adaptor is an AdaptorP2PFluid and containsItems() is true. - @Angry3vilbot
    • Fixed: Blocking mode ignoring the contents of a fluid P2P destination
    • Closes GTNH#26823
  • #1625 GuiPatternItemRenamer.getNewNameStack returns null when the stack is not an IAEItemStack, and keyTyped skips sending PacketPatternValueSet in that case. - @Nana-Sakura
    • Fixed: cannot cast AEFluidStack to IAEItemStack when renaming a fluid pattern entry
    • Closes GTNH#26827
  • #1621 TileSuperMEReplenisher exposes persistent per-type ReplenisherMonitor instances via getMonitor, used by AEExternalHandler. Signed changes are published only for the external buffer, and byte accounting uses long quotients and bounded remainders. Unit and functional tests were added. - @Worive
    • Fixed: storage buses missing Super ME Replenisher change events, byte accounting overflow on large amounts, insertion allowed while over capacity
  • #1617 PartAdvancedLevelEmitter.channelChanged calls configureWatchers instead of updateState, so it re-subscribes and re-reads the current counts. - @Ranzuu
    • Fixed: Advanced Level Emitter stuck on stale data after network reboot
    • Closes GTNH#26788
  • #1615 GuiStorageReshuffle only draws the progress marker rect when progressPercent is below 100. - @Ranzuu
    • Fixed: Reshuffle progress bar end marker showing at 100%
  • #1614 CraftingGridCache adds a submittedJob != null check before togglePlayerFollowStatus. - @mattiasploesch-cpu
    • Fixed: Start and follow following the wrong recipe when the CPU got another job
    • Closes GTNH#26770
  • #1612 ReshuffleTask tracks a PendingInjection with per-source contributions and restores rejected stacks to their source. TileStorageReshuffle marks itself dirty when the pending list changes, and returnPendingItems now updates partial remainders. Adds GameTests and a storage_reshuffler test structure. - @Worive
    • Added: GameTests for the Storage Reshuffle
    • Fixed: items lost when Storage Reshuffle reinsertion failed
  • #1611 CableBusPart.bind calls the new CableBusContainer.updatePartHostInfo to refresh part host references. CableBusPart.addPart now checks canAddPart first. Needs the matching ForgeMultipart and AE2FluidCraft-Rework changes. - @Pxx500
    • Fixed: AE2 parts losing their host after a ForgeMultipart tile replacement, AE2 parts placed inside occupied multipart space
  • #1609 Bumped NotEnoughItems to 2.8.136-GTNH. FluidUtils.isFluidContainer now calls StackInfo.isFluidContainer, and AEFluidStack.getItemStackForNEI uses StackInfo.withAmount. - @slprime
    • Added: NEI fluid support
  • #1607 Added IGT.removeColor, implemented in GT via ColoredBlockContainer. ToolColorApplicator.performClean tries GT removal and then vanilla fallbacks. The consumePowerAndItemsForTe check is gone, so items and power are consumed after every successful operation. - @Worive
    • Added: GT color removal with the Color Applicator, vanilla block cleaning fallbacks
    • Fixed: Color Applicator could not remove colors from non-AE2 blocks
    • Closes #1375
  • #1603 CreativeCellInventory.getStatusForCell returns 2 instead of 0. TileDrive.getCellStatus now reads the stack from the requested slot instead of hardcoded slot 2. - @Nana-Sakura
    • Fixed: creative essentia cell rendered as missing in ME Drive, ME Drive cell status read from the wrong slot
  • #1597 GenericInterestManager.remove now creates SavedTransactions with false instead of true, so the queued transaction is a removal. - @Algent
    • Fixed: deferred watcher removals not being applied
  • #1587 GuiInterfaceTerminal.setItemInSlot clears the cached brokenRecipes entry for the slot whenever its contents change. - @Worive
    • Fixed: stale invalid pattern highlighting in the Interface Terminal
  • #1586 AEBasePart.useMemoryCard returns early on the client after the item-use event check, so the memory card handling only runs on the server. - @Kogepan229
    • Fixed: duplicate Waila names after applying memory card settings
    • Closes GTNH#26607
  • #1577 AEBasePart.getHostWorld now gets the tile from the part host first and falls back to getTile. Forge Multipart calls getBoxes before its cached TileEntity is set, which left the world reference null. - @Kogepan229
    • Fixed: Annihilation Plane crash when loading Forge Multipart cable buses
  • #1573 Removed unsafe access to client-only 'prevLight' field in FacadePart.java that caused NoClassDefFoundError on servers. - @Kogepan229
    • Removed: prevLight client variable access
    • Fixed: FacadePart server crash
    • Closes #1572
  • #1569 Modified AEBaseContainer.java and Grid.java to search fluid storage targets in addition to item targets when using the network search function. - @Worive
    • Fixed: fluid network search highlighting
  • #1566 Added null check in TileWirelessBase setCustomName method to handle cases where the Matter Manipulator resetAEMachine method passes null to remove the custom name of the connected TileWirelessBase. - @Angry3vilbot
    • Fixed: Matter Manipulator deconstruction crash
    • Closes GTNH#26574
  • #1564 Removed inversion logic in Platform.java and AEItemStack.java that was comparing durability thresholds in the wrong direction. - @Chitak985
    • Fixed: inverted fuzzy durability thresholds
  • #1560 Modified PartPlacement to prevent blocking Color Applicator interactions, restoring functionality from PR #1402. - @Worive
    • Fixed: Color Applicator shift-right-click GUI
  • #1558 Modified Platform.postListChanges to copy read-only lists before mutation, marked NetworkItemList, ItemListIgnoreCrafting, and LazyItemList as read-only, and added regression test in PlatformFunctionalTest. - @Worive
    • Added: Read-only network list regression test
    • Fixed: Crash on network item list diffing
    • Closes #1556
  • #1557 Updated GuiMEMonitorable to correctly handle normal shift+LMB drag operations alongside existing drag-click support. - @Worive
    • Fixed: Shift+left-click dragging in ME terminal
  • #1551 Updated GUI rendering and item naming in GuiWirelessKit and ToolWirelessKit classes, plus a language file adjustment. - @zyf051520
    • Fixed: Wireless Kit display issues
  • #1550 Fixed ContainerWirelessKit to check command.color instead of subCommand.color when processing Mad Chameleon mode commands, preventing IllegalStateException during NBT serialization. - @zyf051520
    • Fixed: Mad Chameleon button crash on Wireless Kit
  • #1548 Modified ContainerWirelessKit to use correct machine search method that includes subclass instances instead of requiring exact type equivalence. - @zyf051520
    • Fixed: Wireless Kit unable to connect to machines
  • #1543 Modified PartThroughputMonitor to use time-weighted rolling average instead of adjacent snapshot comparison, preserve fractional rates, and sample more frequently during warm-up. - @Worive
    • Added: Throughput monitoring regression tests
    • Fixed: Throughput monitor showing no change for slow rates
    • Closes GTNH#20290
  • #1540 Modified ContainerCellWorkbench and TileCellWorkbench to synchronize cell stack immediately after clearing or partitioning restrictions. - @Worive
    • Fixed: Cell restrictions not clearing in workbench
    • Closes GTNH#26136
  • #1536 Modified TileIOPort to properly reset after processing one cell in pulse mode, preventing continued processing across multiple ticks. - @guusw
    • Fixed: Multi-tick redstone pulse processing
  • #1535 Modified CraftingCPUCluster scheduler to stop processing tasks once the operation budget is exhausted. - @Worive
    • Fixed: Negative idle processor counts
    • Closes GTNH#25983
  • #1534 Modified AEBaseGui and GuiMEMonitorable to handle MOVE_REGION action when space-dragging across multiple virtual slots. - @Worive
    • Fixed: Space-drag transfers in virtual slot terminals
    • Closes GTNH#25678
  • #1533 Modified PacketNEIBookmark to track available player inventory space and safely return insertion leftovers to ME network or drop them. - @Worive
    • Fixed: Item voiding when pulling bookmarked items
    • Closes GTNH#26197
  • #1531 Modified DualityInterface to notify advanced-blocking interfaces on target subnets when any interface pushes patterns, while maintaining pattern hash tracking only in smart-blocking interfaces. Added regression test with HorizonQA. - @Worive
    • Added: HorizonQA regression test for smart-blocking with shared subnets
    • Fixed: Smart-blocking interface pattern allowance caching bug
    • Closes GTNH#26392
  • #1530 Modified ToolNetworkVisualiser to return correct client-side value when sneak-clicking, preventing right-click air packets. - @AnsonYeung
    • Fixed: Unintended mode switching on sneak right-click
  • #1528 Added null checks in CraftingGridCache and CraftingCPUCluster to validate pattern validity before processing. - @Nana-Sakura
    • Fixed: NPE crash from empty crafting patterns
  • #1517 IOPortFluidCompatibilityTests: @GameTestHolder now sets requiredMods = "ae2fc" so the tests are skipped when the mod is absent. - @Worive
    • Fixed: AE2FC compatibility gametest failing when AE2FC is not present
  • #1516 Added destination inventory validation in PartBaseExportBus to reject crafted stacks when the target is missing, with regression coverage for simulated and real delivery scenarios. - @Worive
    • Added: Regression tests for missing target inventory handling
    • Fixed: Server crash when Export Bus target inventory is removed
    • Closes #1510
  • #1515 Fixed parsing in OreFilteredList to preserve positions of repeated operands instead of dropping duplicates, with comprehensive regression test coverage. - @Worive
    • Added: Regression tests for ore filter operand parsing
    • Fixed: Ore filter repeated operands being silently dropped
    • Closes #1506
  • #1514 Fixed ContainerInterfaceTerminal creative pick-block to copy the encoded pattern with maximum stack size instead of the empty cursor stack. - @Worive
    • Fixed: Creative middle-click pattern cloning in Interface Terminal
    • Closes #1505
  • #1513 Changed Interface Terminal tooltip rendering to use deferred rendering pass with proper depth testing, matching the pattern of hide and rename tooltips in GuiInterfaceTerminal. - @Worive
    • Fixed: Pattern amounts rendering above interface highlight tooltip
    • Closes #1507
  • #1512 Modified PartStorageBus to persist remembered filter state separately from active filter state, with backward-compatible NBT loading and regression tests for reload and wrench scenarios. - @Worive
    • Added: Regression tests for ore filter persistence
    • Fixed: Storage Bus ore filter forgotten after reload and card reinsertion
    • Closes #1508
  • #1511 Added capacity validation in TileCrystalGrowthChamber to check the full Fluix output capacity before modifying chamber state. - @Worive
    • Fixed: Fluix output validation in Crystal Growth Chamber
  • #1504 Routed fluid insertion and extraction in ContainerMEMonitorable through Platform.poweredInsert and Platform.poweredExtraction, with power-aware preflight simulations to handle partial and batch transfers. - @Worive
    • Fixed: Free fluid transfers through terminals bypassing AE power system
  • #1503 Modified PartP2PInterface to preserve locally buffered items in orphaned output tunnels during removal instead of voiding them. - @Worive
    • Fixed: Orphaned Interface P2P buffer item loss
  • #1502 Fixed drop ownership logic in PartP2PInterface to ensure output upgrades remain attached when input is removed, with regression test coverage. - @Worive
    • Added: Regression test for P2P interface drop ownership
    • Fixed: Interface P2P output upgrade loss on input removal
  • #1501 Added thread-safety documentation and synchronization guards to IPartCollisionHelper, IPartRenderHelper, BusRenderHelper, CableRenderHelper, and related part classes to prevent render task executor races. - @mitchej123
    • Added: Thread-safety documentation and locks in rendering helpers
    • Fixed: Cable rendering failures due to threading race conditions
    • Closes GTNH#26215
  • #1499 Added Ctrl+Scroll handler to GuiInterface and ContainerInterface to support pattern quantity adjustments, with bounds checking to prevent zero-value patterns. - @Worive
    • Added: Ctrl+Scroll pattern adjustment support in Interface GUI
    • Fixed: Pattern division getting stuck at value 0
    • Closes #1460
  • #1495 Added text truncation and tooltip logic to GuiCraftingStatus to prevent CPU name button overflow. - @Worive
    • Added: Tooltip display for full CPU names
    • Fixed: CPU name text overflow in Crafting Status GUI
    • Closes GTNH#25194
  • #1493 Modified DualityInterface, AdaptorConduitBandle, and AdaptorItemIO to call tileHasOnlyIgnoredItems instead of defaulting to false in inventoryCountsAsEmpty, enabling proper ignored-item handling for indirect inventory access. - @Angry3vilbot
    • Fixed: Blocking mode item filtering for Transvector Interfaces and Inventory Relays
    • Closes GTNH#25990
  • #1492 Updated BlockPosHighlighter classes to use renderViewEntity for camera math instead of player position. - @Caedis
    • Fixed: Block highlighting with Freecam compatibility
  • #1489 Changed NetworkVisualiserRender to use renderViewEntity instead of player position for camera-relative calculations. - @Caedis
    • Fixed: Network Visualizer rendering with Freecam
  • #1486 Added colour compatibility check in RendererCable to validate that gridhost colours match before showing valid connection preview. - @Angry3vilbot
    • Fixed: Cable placement preview colour compatibility
    • Closes GTNH#26177
  • #1485 Modified DualityInterface.getSupportedStackTypes() to return all registered stack types minus fluid for non-dual interfaces, ensuring mod-added types are recognized. - @Eldrinn-Elantey
    • Fixed: Essentia pattern type mismatch highlighting
  • #1482 Added chunk preloading and validation in StorageHelper and SpatialPylonCalculator to prevent unloaded chunks from resolving to EmptyChunk during spatial transfers. - @Pxx500
    • Added: Chunk preloading and validation
    • Fixed: Spatial IO transfer corruption into unloaded chunks
    • Closes GTNH#25282
  • #1478 Changed AEBaseItemBlockChargeable to read cell capacity from the block itself rather than using hardcoded values, ensuring config multipliers are properly applied. - @Eldrinn-Elantey
    • Fixed: Energy cell tooltip power multiplier, Dense cell capacity display
  • #1477 Added checks in ItemViewCell and related classes to ensure empty filter strings fall back to normal filter configuration rather than bypassing it. - @Kogepan229
    • Fixed: Unconfigured ore filter behavior
  • #1476 Added negative input hardening and implemented final loop re-sync in CraftingJobFast to ensure crafting plan visibility matches internal state for loop candidates. - @AnsonYeung
    • Added: Negative input validation
    • Fixed: Crafting plan item availability mismatch, Loop candidate resolution
  • #1474 Changed MEIInventoryWrapper and AdaptorIInventory to use decrStackSize when extracting items from unknown IInventory blocks, preventing bypasses of processing logic in custom tile entities. - @felixfour
    • Fixed: Item duplication via external inventory manipulation
  • #1472 Made textFields non-final in ContainerAdvancedLevelEmitter to allow lazy initialization, and added null checks in onClientChange to prevent NPE on dedicated servers. - @Ranzuu
    • Fixed: Advanced Level Emitter dedicated server crash
    • Closes GTNH#26081
  • #1468 Adjusted X coordinate in ContainerAdvancedLevelEmitter and corrected Y offset in the GUI texture file. - @Ranzuu
    • Fixed: Advanced Level Emitter GUI inventory misalignment
  • #1465 Removes the static booleanAlphaPass field and its setter/getter from BlockMolecularAssembler. RenderBlockAssembler.renderInWorld now checks ForgeHooksClient.getWorldRenderPass() == 1 instead. - @mitchej123
    • Removed: static alpha pass flag in the Molecular Assembler block
    • Fixed: Molecular Assembler render pass state shared across threads
  • #1461 Adjusted pixel offsets in GuiCraftingCPU (1px for line, 4px for offset) to align the hover detection area with the visual element. - @Ranzuu
    • Fixed: Crafting CPU status tooltip misalignment
    • Closes GTNH#25991
  • #1458 Updated ContainerOptimizePatterns to traverse reachable grids through active Pattern Repeater pairs from Provider to Accessor side, collecting IInterfaceViewable machines on each reachable grid with cycle detection. - @starxingchenc
    • Fixed: pattern optimization through Pattern Repeaters
  • #1454 Corrected AEColor color value assignment for ME storage devices. - @Sanduhr32
    • Fixed: ME drive/chest/IO port texture color
  • #1453 Modified PartStorageBus.resetCacheLogic to make reset strength monotonic, preventing a neighbor notification from downgrading a full configuration-driven reset (strength 2) to a partial reset (strength 1). - @Worive
    • Fixed: storage bus configuration downgrade on neighbor notification
  • #1441 Updated MultiCraftingTracker to clear the pending Future when beginCraftingJob returns null or throws an exception, and widened package-private helpers to public for reuse by other mods. - @Eldrinn-Elantey
    • Fixed: crafting tracker stuck on failed jobs
  • #1439 Added dependency on Mouse Tweaks mod and implemented handling in AEBaseContainer to detect and process skipped shift-clicks during drag operations. - @Kogepan229
    • Added: Mouse Tweaks mod dependency, shift-click skip detection in AEBaseContainer
    • Fixed: skipped shift-clicks with Mouse Tweaks dragging
  • #1435 Added cell type caching in TileCellWorkbench to preserve the cell configuration being copied, enabling the copy mode to function correctly. - @hinyb
  • #1434 Corrected onBlockActivated return value logic in AEBaseTileBlock to properly synchronize behavior between client and server sides. - @AnsonYeung
    • Fixed: Memory card interaction on tile blocks
  • #1433 Added inventory state validation in AdaptorIInventory to detect mutations during insertion attempts, preventing incorrect item handling when inventories change size mid-operation. - @Kogepan229
  • #1432 Added single-line notification call in CraftingCPUCluster to update Level Emitters when crafted items are oversupplied beyond the request. - @rieverholic
    • Fixed: Level emitter crafting mode oversupply detection
  • #1429 Corrected texture coordinate offset in GuiImgButton for the Crafting Plan icon. Updated states.png texture file. - @slprime
    • Fixed: Crafting Plan icon texture rendering
  • #1427 Added power cache invalidation in PartQuartzFiber when the part is removed from or changes connection state in the grid, ensuring stale power state isn't retained. - @Kogepan229
    • Fixed: Subnet power state after disconnecting power source
    • Closes GTNH#25786
  • #1423 Enhanced hand detection and interaction handling in PartPlacement, ItemMultiPart, and ItemFacade to correctly identify which hand holds the relevant item. Re-added hand swinging animation in PacketPartInteraction. - @AnsonYeung
    • Added: offhand item support in placement logic
    • Fixed: Cable and part placement with offhand items, Tool interactions with offhand items
  • #1422 Updated keybind name references in NEIInputHandler to match the current NotEnoughItems keybind names. - @koolkrafter5
    • Fixed: Keybind to show encoded pattern recipe/usage
  • #1421 Modified PartPlacement to prevent GUI opening during PlaceType.INTERACT_FIRST_PASS events, allowing interaction handlers like renaming to complete properly. - @AnsonYeung
    • Fixed: Part renaming with certus knife and wire cutters
    • Closes GTNH#25685
  • #1420 Updated ICraftingWatcherHost to support both item and fluid monitoring. Modified PartLevelEmitter to register with proper fluid-aware API. Fixed CraftingCPUCluster fluid notification to use correct crafting watcher callback. - @rieverholic
    • Added: Fluid support for level emitter crafting watcher
    • Fixed: Level emitter crafting mode for fluids
  • #1413 After successful pushPattern() in CraftingCPUCluster, the craftingInventory reference must be set to null to prevent returnItems() from re-inserting items into the network. Added missing null checks to the fake crafting code path to match the normal crafting branch in AdaptorItemIO. - @Kogepan229
  • #1412 Modified TileWireless to properly persist and restore wireless serial data during NBT serialization. - @Kogepan229
    • Fixed: wireless serial not saved
  • #1411 Modified ToolNetworkVisualiser to check if the item is in the selected slot before updating the network display. - @Kogepan229
    • Fixed: network visualiser updating from non-selected slots
  • #1405 Modified CraftingCPUCluster and EmitableItemResolver to properly notify level emitters on craft completion, trigger immediate redstone updates without requiring block updates, and correctly recalculate emitable item requirements when new crafts are merged into active tasks. - @rieverholic
    • Fixed: level emitter redstone signal failure with crafting card, crafting CPU hanging on emitable craft completion, incorrect emitable item requirements on craft merge
    • Closes GTNH#21391
  • #1400 Rewrote wireless network management in TileWirelessBase, TileWirelessHub, and TileWirelessConnector to properly handle chunk unloading, connector movement, and hub connection cleanup. - @Kogepan229
    • Fixed: wireless connector channel inflation on chunk unload, wireless hub connection issues, stale hub connection from Matter Manipulator movement
    • Closes GTNH#23803, GTNH#25518, GTNH#25523
  • #1399 Updated RenderBlockSkyCompass and ModelCompass to correctly calculate needle rotation for both first and third person offhand positioning. - @tiffit
    • Fixed: meteorite compass pointing wrong way in backhand
    • Closes GTNH#22691
  • #1395 Rewrote storage bus cache refresh logic in PartStorageBus to prevent recursive calls that would overflow the stack. - @Kogepan229
    • Fixed: storage bus cache refresh recursion
  • #1394 Added color state reset in GuiCraftingList to prevent GL color state from persisting across rendering calls. - @MCTBL
    • Fixed: GL color state contamination in crafting list
  • #1393 Modified MECraftingInventory to properly signal crafting failures. - @lc-1337
    • Fixed: crafting failure no feedback
  • #1388 Modified AEBaseCell.addCheckedInformation() to handle multi-type cells by checking stored items when Ctrl is pressed, matching the behavior of single-type cells. - @Luca-Guettinger
    • Fixed: multi-fluid storage cells not showing contents in tooltip
    • Closes GTNH#25397
  • #1385 Added cache refresh logic to PartSharedItemBus and PartStorageBus to ensure export buses detect and track inventory connections correctly, fixing a regression where buses placed before inventory attachment failed to operate. - @Kogepan229
    • Fixed: fluid export bus not working when placed prior to receiving inventory
    • Closes GTNH#25375
  • #1383 Corrected container fill logic in ContainerMEMonitorable to properly handle interactions with full containers. - @Kogepan229
    • Fixed: fluid voiding with full containers
    • Closes GTNH#25355
  • #1381 Added proper display name override in TileCraftingStorageTile to distinguish storage tiers. - @Kogepan229
    • Fixed: crafting storage tile display name
    • Closes #1372
  • #1380 Fixed condition in RenderBlocksWorkaround so custom rendering is called for facades even when fixedBottomFaceUV is enabled. - @Kogepan229
    • Fixed: crafting storage facade rendering
    • Closes GTNH#25213
  • #1374 Fixed logic in DualityInterface blocking mode check to correctly evaluate and report when Advanced Blocking Cards reject items. - @lc-1337
    • Fixed: advanced blocking card ignoring
    • Closes #1373
  • #1371 Corrected registration condition in BlockStorageReshuffle to allow block registration regardless of channel configuration state. - @Yoshy2002
    • Fixed: reshuffler registration with disabled channels
    • Closes GTNH#25256
  • #1369 Applied smart blocking mode fix to TileInterface, mirroring the logic added to part interfaces in PR #660. - @AnsonYeung
    • Fixed: smart blocking mode on tile interfaces
  • #1368 Corrected part retrieval logic to properly handle TileMultipart containment; removed false instanceof checks and reverted PR #977; updated CableBusContainer and related classes to correctly identify CableBusPart when embedded in TileMultipart. - @Kogepan229
    • Removed: FMP integration stub
    • Fixed: fluid insertion with FMP covers, P2P tunnel FMP interaction, WAILA detection with microblocks, network tool FMP detection
    • Closes GTNH#17039, GTNH#18673, GTNH#19852, GTNH#23471
  • #1365 Updated PartPlacement to align behavior with existing placement checks (lines 238-250) and added missing dependency. - @Kogepan229
    • Fixed: part placement inconsistency
  • #1364 Refactored slot synchronization in pattern terminal containers to ensure both input and output slots receive full sync on first updateVirtualSlots, not just diffs. - @Kogepan229
    • Removed: PacketValueConfig unused packet
    • Fixed: phantom items in pattern terminal, pattern terminal slot sync
    • Closes GTNH#25172
  • #1360 Corrected UV coordinate calculation in AEFluidStack rendering logic. - @Kogepan229
    • Fixed: fluid rendering in terminals
  • #1358 Added cache clearing in AppEng class and null checks in InventoryAdaptor to prevent retaining TileEntity references across unloads. - @Alexdoru
    • Fixed: world server reference leak in InventoryAdaptor cache
  • #1356 Added missing NBT fields to PartLevelEmitter copy/paste logic in memory card serialization. - @lc-1337
    • Fixed: memory card level emitter settings copy
    • Closes GTNH#25089
  • #1354 Rewrote MEItemIO to prioritize network insertion and match IInventory behavior; simplified dependency management. - @Kogepan229
  • #1353 GT integration constructor reads the gregtech mod version and throws ModNotInstalled only if it contains GT6-MC1710, so the module is skipped quietly. - @MalTeeez
    • Fixed: GT integration failing loudly when GT6 is present
  • #1352 Updated BlockRendererPreviewEvent to use actual survival mode reach of 4.5 blocks instead of 5.0; simplified ViewHelper ray trace logic. - @Kogepan229
    • Fixed: part placement preview accuracy
    • Closes GTNH#25005
  • #1351 Updated CraftingContext and CraftableItemResolver to properly track reusable substituted tool counts during crafting v2 calculations; added test cases. - @Kogepan229
    • Added: crafting tests for reusable substituted tools
    • Fixed: reusable substituted tool crafting calculations
  • #1350 Rewrote PrioritizedNetworkItemList comparator to order root-to-leaf priority paths consistently, preventing TimSort crash from non-transitive comparisons. - @Kogepan229
    • Fixed: IOPort crash due to comparator transitivity violation
  • #1344 Corrected CPU active color constant in GuiColors. - @Ranzuu
    • Fixed: crafting CPU active status color
  • #1339 Fixed TileWirelessBase power tooltip calculation to display actual power drain instead of divided value. - @lc-1337
    • Fixed: wireless connector power drain display accuracy
    • Closes GTNH#24966
  • #1338 Rewrote PartPatternRepeater waiting stacks logic to track network origin and rewritten injectItems to prevent recursive injection cycles while maintaining loopback detection. - @Redderpears
    • Fixed: stack overflow in looped pattern repeater networks
    • Closes #1337
  • #1336 Adjusted GuiWirelessNetworkManager text color, fixed GuiColorButton string constraints, and improved network removal logic in ContainerWirelessNetworkManager. - @lc-1337
    • Fixed: wireless manager text legibility, string overflow in network names
  • #1334 Updated ae2stuffConvertor to preserve custom name tags during wireless connector data migration. - @lc-1337
    • Fixed: custom name loss on wireless connector migration
  • #1332 Fixed CraftingGridCache listener registration and PartPatternRepeater mode-switching logic to avoid concurrent modification of listener collections. - @Kogepan229
    • Fixed: concurrent modification exception in pattern repeater networks
  • #1331 Corrected GuiColorizer button rendering logic and updated item localization string. - @Kogepan229
    • Fixed: colorizer button visual display
  • #1329 Modified PartPatternRepeater to properly invalidate cached craftable state when patterns are removed from recursive repeater chains. - @lc-1337
    • Fixed: ghost craftable patterns from recursive repeater loops
    • Closes #1327
  • #1328 Fixed PacketPatternValueSet to correctly handle middle-click packet routing. - @Kogepan229
    • Fixed: middle-click pattern input in wireless terminals
    • Closes GTNH#24902
  • #1318 Added keybind support in ToolWirelessKit and ServerHelper to properly handle wireless key input events across platforms. - @lc-1337
    • Added: keybind handlers for wireless kit
    • Removed: Platform legacy key handling
    • Fixed: Wireless Kit macOS compatibility (#24854)
    • Closes GTNH#24854
  • #1315 Fixed array bounds checking in WireLessToolHelper to handle mismatched source/target wireless tile counts. - @UltraProdigy
    • Fixed: Wireless Kit Advanced mode crash with mismatched tile counts
  • #1313 Corrected off-by-one error in WireLessToolHelper line mode binding distance calculation. - @lc-1337
    • Fixed: Wireless Kit Advanced mode line length off-by-one
  • #1312 Added Forge GUI event handler callback in AEBaseGui to properly trigger action-performed events when Forge event is posted. - @lc-1337
    • Fixed: Forge event action performed not triggered (#24741)
    • Closes GTNH#24741
  • #1311 Corrected NBT compound parsing in WirelessKitObject, ToolNetworkVisualiser, and ToolWirelessKit to properly read configuration data. - @lc-1337
    • Fixed: Wireless Kit config manager NBT parsing
  • #1306 Corrected power calculation in TileWirelessBase to use proper energy constants. - @Kogepan229
    • Fixed: Wireless Connector excessive power consumption (#24810)
    • Closes GTNH#24810
  • #1305 AEBaseGui gains flushPendingSync and closeGui and calls them from keyTyped on close keys and from onGuiClosed. SyncManager adds flushClient. AEStackInventorySyncHandler was reworked, and several GUIs call closeGui instead of closeScreen. - @Kogepan229
    • Fixed: Client sync changes lost when closing a GUI quickly
  • #1303 Added null-safety checks in InventoryAdaptor.getAdaptor(). - @Kogepan229
    • Fixed: NPE in getAdaptor
  • #1301 Corrected item handling logic in SlotCraftingTerm during shift-click crafting operations. - @lc-1337
    • Fixed: Items voiding during shift-craft (#1300)
    • Closes #1300
  • #1299 Added ItemMEStackPacket for safe item transfer, improved ContainerMEMonitorable simulate logic to cache original input before pass 2, added false-positive handler in NetworkInventoryHandler, and enhanced PartConversionMonitor validation. - @lc-1337
    • Added: ItemMEStackPacket class, GUI text strings for improved UX
    • Fixed: Fluid voiding exploit (#24793), Infinite extraction from non-extractable tanks (#304), Simulate false positives in container operations
    • Closes GTNH#24793, Dupes-Exploits-GTNH#304
  • #1292 Added IMovableHandler API and NBTSpatialHandler logic to properly preserve GT5 machine NBT data during spatial cell transfers, with GT integration module support. - @Pxx500
    • Added: IMovableHandler interface, NBT spatial preservation for GT machines
    • Fixed: spatial storage corrupting GT machines
  • #1291 Corrected event listener cleanup in TickHandler to properly deregister listeners and allow garbage collection. - @Alexdoru
    • Fixed: memory leaks in tick handler
  • #1288 Corrected circuits.recipe file formatting to properly display in NEI. - @OTPANNIEXD
    • Fixed: NEI circuit recipe display
  • #1286 Corrected stack size validation in PatternHelper and Platform utility to ensure crafting output matches requested stack sizes. - @lc-1337
    • Fixed: crafting output stack size mismatch
    • Closes #1285
  • #1283 Corrected PartConversionMonitor fluid handling logic to prevent duplication exploits. - @Kogepan229
  • #1282 Rewrote MEItemIO.java to respect inventory slot item types during extraction (preventing type mismatch), removed random subset extraction logic, and removed erroneous insert filter restrictions. - @OneEyeMaker
    • Removed: random item subset extraction, insert filter restrictions
    • Fixed: transmutation glitch with ME interface and conveyors, random item extraction behavior, insertion into ME systems
    • Closes Dupes-Exploits-GTNH#287, GTNH#24529
  • #1281 Corrected weight calculation logic in AEBaseCell for GUI type weight representation. - @lc-1337
    • Fixed: Cell Restriction GUI type weight calculation
  • #1278 Modified ContainerInterfaceTerminal and PartPatternRepeater to properly register Pattern Repeater in interface terminal listings and prevent feedback loops. - @lc-1337
    • Fixed: Pattern Repeater close-loop issue
  • #1273 Corrected texture location references in BlockAdvancedCraftingStorage, BlockAdvancedCraftingUnit, and BlockSingularityCraftingStorage by updating texture path definitions. - @lc-1337
    • Fixed: texture location errors in crafting blocks
    • Closes #687
  • #1272 Migrated BlockQuartzGlass definition from decorative blocks module to core, ensuring recipes remain functional regardless of decorative block settings. - @lc-1337
    • Fixed: Quartz glass recipes breaking when decorative blocks disabled
    • Closes #778
  • #1267 Added exception handling in AEFluidStack to catch and prevent crashes during fluid rendering in terminal interfaces. - @lc-1337
    • Fixed: Fluid rendering crash in terminal
  • #1264 Removed the usedChannelsCache/maxChannelsCache maps in ChannelWailaDataProvider and the WeakHashMap cache in PowerStorageWailaDataProvider. The tooltips now read values straight from the accessor NBT. - @Alexdoru
    • Removed: Waila tooltip value caches for channels and power
    • Fixed: Memory leak in AE2 Waila data providers
  • #1263 Corrected DualityInterface and AdaptorFluidHandler blocking mode logic for GT hatch compatibility. - @lc-1337
    • Fixed: GT hatch blocking mode interaction
  • #1262 Clear BlockRendererPreviewEvent view helper player state on each dimension change to prevent holding stale world references. - @Alexdoru
    • Fixed: World leak on dimension change in preview renderer
  • #1260 Minor code change in DualityInterface (3 lines added, 1 removed in addition to existing changes). - @lc-1337
  • #1259 Corrected TileIOPort logic to align with 2.8.4 behavior: prevent unnecessary cell movement when no work was done, and ensure full cells move to output regardless of network fullness. - @rhobold
    • Fixed: IO Port incorrectly moving empty cells and not moving full cells
  • #1256 Corrected NBT data handling in SlotCraftingTerm during shift-click crafting operations. - @lc-1337
    • Fixed: NBT error in shift crafting
    • Closes #879
  • #1255 Modified GuiAmount to prevent inventory keybind from closing the GUI when a text field is in focus. - @lc-1337
    • Fixed: Keybind triggering GUI close while text field active
    • Closes #1133
  • #1253 Enhanced CraftingRequest and resolvers (CraftableItemResolver, ExtractItemResolver) to correctly handle fuzzy matching during pattern fulfillment. Added functional tests for crafting with ore dict substitutions. - @lc-1337
    • Added: Functional tests for fuzzy crafting scenarios
    • Fixed: Processing pattern autocrafting with ore substitution
    • Closes #494, GTNH#24172
  • #1252 Cleared world reference in MEGuiTextField to prevent holding stale world instances in memory. - @Alexdoru
    • Removed: World reference leak in MEGuiTextField
    • Fixed: Client world memory leak in MEGuiTextField
  • #1251 Modified InventoryAdaptor to return null when getAccessibleSlotsFromSide is empty, preventing AdaptorIInventory from bypassing side restrictions. TileCableBus now returns null immediately when no part exists on the accessed side. - @Kogepan229
    • Fixed: Item insertion from wrong sides on TileCableBus parts
    • Closes #1249
  • #1248 Removed or fixed item renderer reference retention in AEBaseGui and AppEng core initialization. - @Alexdoru
    • Removed: Item renderer leak in AppEng
    • Fixed: Memory leak in AEBaseGui renderer
  • #1247 Corrected coordinate calculation in GuiInterfaceTerminal for the tooltip hover box rendering. - @Ranzuu
    • Fixed: Interface Terminal hover highlight position
  • #1245 Fixed AdaptorItemIO stack extraction logic to maintain item type information across multiple simultaneous extractions. - @daxsc
    • Fixed: Importing items losing their types
  • #1244 Added neighbor update notification in DualityInterface config change handler. - @daxsc
    • Fixed: Config changes not updating neighbors
  • #1242 Fixed GuiPatternTerm and ContainerPatternTerm pattern extraction logic to skip blank patterns during encoding. - @Kogepan229
    • Fixed: Blank pattern extraction when encoding
  • #1241 Added RF buffering mechanism to PartP2PGT5Power that queues packets and pushes them incrementally, matching GT cable behavior; moved explosion check before transfer logic. - @jamiehu427
    • Added: RF buffer in P2P GT5 power tunnel
    • Fixed: EU P2P not converting to RF for machines
  • #1240 Corrected viewport boundary calculations in GuiInterfaceTerminal. - @Ranzuu
    • Fixed: Interface Terminal viewport rendering
  • #1239 Changed CraftingNotificationManager to send S29PacketSoundEffect directly to the requesting player instead of broadcasting via World.playSoundAtEntity(). - @Eldrinn-Elantey
    • Fixed: Crafting sound broadcasting to all players
  • #1238 Added missing field initialization in DualityInterface. - @Eldrinn-Elantey
    • Fixed: DualityInterface state
  • #1234 Added machine-origin flag to ICraftingCPU and CraftingCPUStatus; updated merge logic in CraftingGridCache to prevent merging machine-originated requests; extended Level Maintainer to recognize pending requests. - @Kogepan229
    • Added: Machine origin tracking in crafting requests
    • Fixed: Machine craft merging with player crafts, Level Maintainer infinite queueing
    • Closes GTNH#19298, GTNH#23043, GTNH#23128
  • #1233 Fixed CellInventory void logic to activate when cell reaches capacity threshold instead of only when full. - @Kogepan229
    • Fixed: Overflow Void Card voiding behavior
    • Closes GTNH#24400
  • #1231 Fixed GridStorageCache missing-mode retry logic to properly detect items in system storage and re-attempt crafting. - @ShadowQFT
    • Fixed: Delayed missing-mode crafting retries
    • Closes GTNH#24394
  • #1230 Rewrote CraftingCPUCluster recycling ingredient handling to correctly resolve ingredient sources and manage inventory updates. - @lc-1337
    • Fixed: Pattern crafting with recycling ingredients
    • Closes #1064
  • #1226 Added ghost item handling to AEBaseGui and GuiPatternTerm for shift-click operations. - @ShadowQFT
    • Fixed: Pattern terminal shift-click with NEI ghost items
    • Closes GTNH#24374
  • #1222 Removed retained World reference in GuiMEMonitorable to allow proper cleanup and garbage collection. - @Alexdoru
    • Removed: World field reference in GuiMEMonitorable
    • Fixed: World reference leak in GuiMEMonitorable
  • #1217 Removed space buffering logic from GuiMEMonitorable search field handler and added trimming when updating the ItemRepo. - @Kogepan229
    • Fixed: buffered leading spaces in terminal search
  • #1213 Removed problematic code in AEBaseGui that handled shift-click behavior in phantom slots. - @lc-1337
    • Fixed: shift-click crash in phantom slots
  • #1212 Corrected refund logic in CraftableItemResolver and CraftingRequest for mixed-recipe scenarios. Added functional tests in CraftingV2Tests to prevent regression. - @ShadowQFT
    • Added: crafting plan mixed-recipe tests
    • Fixed: crafting tree view counts for mixed recipes
    • Closes #1162
  • #1207 Modified GuiBusIO to hide the scheduling mode button when the bus is an Import Bus. - @Kogepan229
    • Fixed: crash from scheduling button on Import Bus
  • #1206 Added null-safety checks to PartConversionMonitor. - @Kogepan229
    • Fixed: Conversion Monitor NPE
  • #1205 Added recursion guard flag updatingCraftingList to PartP2PInterface to prevent re-entrant calls during grid event processing. The flag is cleared in a finally block to ensure cleanup. - @Luca-Guettinger
    • Fixed: StackOverflowError in P2P Interface updateCraftingList
  • #1204 Added sync condition check to PacketMonitorableTypeFilter and modified GuiMEMonitorable to filter out-of-date filter packets during rapid mode switches. - @czqwq
    • Fixed: terminal desynchronization from rapid View Mode switches
  • #1203 Added missing save logic to TileCellWorkbench, TileCondenser, and TileSecurity to ensure NBT data is written when modified. - @Kogepan229
    • Fixed: unsaved changes in Cell Workbench, unsaved changes in Condenser, unsaved changes in Security Terminal
  • #1202 Added null-safety checks in TileQuantumBridge rename handling to prevent NPE when the cluster is unformed. - @Kogepan229
    • Fixed: Quantum Bridge renaming NPE in unformed clusters
  • #1201 Corrected rounding logic in ContainerCraftConfirm for the 'From Storage' percentage calculation. - @ShadowQFT
    • Fixed: crafting plan percentage rounding display
    • Closes GTNH#21022
  • #1199 Modified CraftingCPUCluster to preserve remaining outputs when merging jobs instead of rebuilding them from the total amount requested. - @ShadowQFT
    • Fixed: incorrect remaining count after merging crafts
    • Closes #1160
  • #1197 Fixed TileIOPort logic to check whether the network is actually empty rather than whether the current tick transferred items. The cell move condition now correctly accounts for edge cases where the transfer budget is exactly consumed. - @Kogepan229
    • Fixed: IO Port cell movement in FILL + MoveWhenEmpty mode
    • Closes GTNH#24238
  • #1193 Fixed LocatableRegistry memory leak by removing static registry access patterns. Created new IBlockingModeIgnoreItemRegistry and IInterfaceTerminalRegistry interfaces and updated registries to use dependency injection instead of static access. Updated references in DualityInterface and related classes. - @Alexdoru
    • Added: IBlockingModeIgnoreItemRegistry interface, IInterfaceTerminalRegistry interface
    • Removed: Static registry access patterns
    • Fixed: Server memory leak in LocatableRegistry
  • #1191 Added null-safe checks throughout the codebase to avoid writing empty NBT compounds. Updated 40+ files including FuzzyMode, IPatternTerminal, various container implementations, and helper classes to use conditional NBT writes. - @Alexdoru
    • Fixed: Empty NBT tags persisting on items
  • #1188 Overrode PowerEvent in TileEnergyAcceptor to notify the ME grid when power is received, matching behavior in TileController. - @Majora320
    • Fixed: Energy Acceptor buffer grid notification
    • Closes #1171
  • #1185 Fixed infinite loop condition in PatternMultiplierHelper when size is 0 or greater than int.max with low 32 bits equal to 0. Optimized using numberOfLeadingZeros and numberOfTrailingZeros instead of bit shifting loops. - @zyf051520
    • Fixed: Infinite loop in multiplier/divider with edge-case values, Pattern optimization calculation efficiency
  • #1183 Fixed memory leaks in TESRWrapper and BlockRendererPreviewEvent by properly cleaning up references when worlds are unloaded. - @Alexdoru
    • Fixed: Client memory leaks on world transitions
  • #1175 Updated NEI integration handlers (NEICellViewHandler, NEIPatternViewHandler) to properly preserve stack size information. Also updated dependencies.gradle with NEI library changes. - @slprime
    • Fixed: Bookmarked recipe quantities from pattern/cell views
    • Closes GTNH#23972
  • #1172 GuiCraftingCPU.filteredVisual field was not being cleared when switching CPUs. Added clear call to GuiCraftConfirm and GuiCraftingCPU to reset the display state. - @Alexdoru
    • Fixed: CPU cycling showing previous inventory items
  • #1170 Added null safety check in MergedPriorityList to handle cases where oredict filter cards encounter incompatible stack types. - @lc-1337
    • Fixed: view cell client crash with oredict filter and fluids
    • Closes #1169
  • #1168 Added missing null safety check in ContainerMEMonitorable portable cell handling. - @lc-1337
    • Fixed: crash when interacting with portable cells
    • Closes #1166
  • #1163 Fixed NetworkItemList.findFuzzy to ensure fuzzy resolution uses fuzzy-capable list implementation instead of primitive-backed lists, which don't support fuzzy operations. - @bk5115545
    • Fixed: UnsupportedOperationException in fuzzy export bus resolution, fuzzy lookup with primitive-backed network list
  • #1159 Added fallback logic in ItemRepo to handle cases where NEI cannot provide alternative stacks during fuzzy search. - @lc-1337
    • Fixed: fluid search with missing NEI item metadata
    • Closes #1156
  • #1154 Refactored AEExternalHandler and added subnet reading support to PartInterface, PartP2PInterface, and TileInterface for alternative storage types. - @lc-1337
    • Fixed: Essentia Storage Bus unable to read subnet
    • Closes #1152
  • #1149 Added null check in CraftingGridCache and PartPatternRepeater when accessing legacy craftable map. - @lc-1337
    • Fixed: null key in legacy craftable map
  • #1148 Added null safety check in StorageBusInventoryHandler. - @Ranzuu
    • Fixed: Storage Bus crash on empty containers
  • #1141 Modified ClientHelper and KeyBindHandler to use GTNHLib PickBlockEvent when ME and vanilla pick block keys are identical, with appropriate event priority lowering. - @querns
    • Fixed: ME Pick Block jumping ahead of GTNHLib Pick Block event
  • #1140 Adjusted ContainerMEMonitorable logic for container fill interactions. - @lc-1337
    • Fixed: container fill interaction
  • #1139 Added null check in AEFluidStackType#drainStackFromContainer to handle cases where draining returns null before accessing the amount field. - @Alexdoru
    • Fixed: NullPointerException when draining fluid containers into ME system
    • Closes GTNH#23922
  • #1134 Corrected default search mode value in AEConfig. - @lc-1337
    • Fixed: default search mode setting
  • #1131 Replaced unreliable intermediary checks with direct comparisons in DualityInterface; fixed fuzzy config/mode mismatch; updated GuiInterface texture to show fuzzy indication. - @lc-1337
    • Added: fuzzy mode visual indicator in interface GUI
    • Fixed: interface crash with special item types, fuzzy mode configuration matching
    • Closes #1130
  • #1129 Added type compatibility check in ContainerStorageBus before applying partition configuration. - @lc-1337
    • Fixed: crash when pasting storage bus partitions between different types
    • Closes #1126
  • #1128 Rate-limited cache updates in ContainerMEMonitorable to one per tick; extended AEFluidStack size field from int to long. - @lc-1337
    • Fixed: terminal lag on networks with high cache churn, fluid stack size display limit
    • Closes #1127
  • #1125 CraftingCPUCluster.getTile now uses containsKey on getTileMethodCache, so a failed reflection lookup is cached as null and not retried. - @zyf051520
    • Fixed: repeated failing reflection lookup in crafting CPU getTile
  • #1108 Corrected transfer rate logic in AEFluidStackType. - @lc-1337
    • Fixed: fluid transfer IO port speed
  • #1104 Corrected alignment parameter in GuiMEMonitorable. - @Ranzuu
    • Fixed: Security Terminal GUI layout
  • #1103 Updated storagebus.png texture asset. - @lc-1337
    • Fixed: storage bus GUI texture
  • #1102 Replaced server-side localized ItemStack names with client-side ChatComponentTranslation in crafting inventory and completion packets. - @Eldrinn-Elantey
    • Added: server-to-client localization key transmission in IAEStack
    • Fixed: item localization on dedicated servers
  • #1101 Fixed NotificationManager and PacketCraftingCompleteNotification to handle state safely, preventing client crashes. - @lc-1337
    • Fixed: client disconnection during AE Follow Craft
    • Closes GTNH#23676
  • #1100 Added focus request support to GuiMEMonitorable base class; updated mod dependency version. - @Goldenlion5648
    • Added: focus toggling support in terminal GUI
    • Fixed: toggle search box focus keybind not working in standard terminals
    • Closes GTNH#18798
  • #1099 Corrected logic in CraftingCPUCluster that was voiding items instead of returning them when network injection fails. - @Kogepan229
    • Fixed: crafting results being voided when network injection unavailable
  • #1095 Modified DualityInterface essentia push logic to properly inject essentia into network. - @Kogepan229
    • Fixed: essentia not pushing to network via interface
  • #1094 DualityInterface.addDrops() now handles null return from stackConvertPacket when processing exotic stacks. - @Alexdoru
    • Fixed: NPE in addDrops when handling exotic stacks
  • #1093 TileInterface: added STUCK_FLAG (8) to clientFlags, removed the public somethingStuck field and the extra writeBoolean/readBoolean in the network stream. The TICK handler is now @SideOnly(CLIENT) and only runs while isStuck(). - @Alexdoru
    • Removed: separate stuck boolean in interface network packet
  • #1092 TileInterface null check fix to prevent crash from enhanced stuck state tracking. - @Alexdoru
    • Fixed: server crash in TileInterface
  • #1091 Improved pin slot interaction in GuiMEMonitorable, fixed container ghost item handling in AEBaseContainer and ContainerMEMonitorable. - @Kogepan229
    • Fixed: pinned fluid retrieval, ghost items from fluid extraction
    • Closes #1076
  • #1088 Updated AEBaseGui, GuiMEMonitorable, and VirtualMEPatternSlot to properly handle keyBindPickBlock. - @lc-1337
    • Fixed: pick block keybind in terminals
  • #1087 TileCraftingTile null check fix. - @lc-1337
    • Fixed: NPE in addon handling
  • #1083 Modified CraftingCPUCluster final output handling to properly release items when using fake crafting. - @lc-1337
    • Fixed: fake crafting cards holding items
    • Closes #1082
  • #1081 Updated NEIPatternViewHandler and ItemEncodedPattern to properly handle exotic stacks in pattern tooltips. - @lc-1337
    • Fixed: exotic stack display in pattern view, tooltip rendering for super exotic stacks
  • #1080 Changed ContainerInterfaceTerminal to not call isItemValidForSlot with null. - @asquared31415
    • Fixed: null being passed to slot validation
  • #1075 Fixed AEBaseContainer to sync null filter values to client. - @hinyb
    • Fixed: null filter client sync
  • #1073 Extended ItemSearchDTO with client-side display name and unlocalized machine key fields; updated StoragePosHighlighter and AEBaseContainer to serialize these for client-side translation. - @Eldrinn-Elantey
    • Added: ItemSearchDTO display name fields
    • Fixed: storage highlight localization, generated item fallback display
  • #1068 Corrected progress calculation in GuiCraftingCPUTable tooltip rendering. - @Kogepan229
    • Fixed: inverted crafting progress tooltip
  • #1063 Enhanced DualityInterface and MEInventoryCrafting to catch and skip unsupported stack types during pattern processing; added ScheduledReason enum value and Platform utility for type safety. - @Kogepan229
    • Fixed: crash on unsupported pattern types, essentia pattern handling
    • Closes GTNH#23514
  • #1062 Corrected PinsHandler to prevent item placement in hidden pins. - @lc-1337
    • Fixed: hidden pins item placement
  • #1061 WirelessRegistry.openWirelessTerminalGui replaces the hard cast to ToolWirelessTerminal with an instanceof check and falls back to Platform.openGUI with GUI_ME. The PR has no description, so the crash it prevents is inferred from the cast. - @lc-1337
    • Fixed: wireless terminal GUI failing for items that are not ToolWirelessTerminal
  • #1058 Optimized ContainerMEMonitorable packet handling, fixed GUI icon rendering in AEBaseGui, and corrected fluid utility calculations in FluidUtils and AEFluidStackType. - @lc-1337
    • Fixed: packet spam on terminal refresh, fluid filter icon alignment, void-filled cells on extraction, cell duplication with insufficient fluid
  • #1055 Fixed DualityInterface to correctly handle smart blocking across multiple interfaces. - @kuba6000
    • Fixed: multi-interface smart blocking
  • #1049 Enhanced memory card read/write in AEBasePart, PartSharedItemBus, PartBaseImportBus, PartBaseExportBus, and PartLevelEmitter to support IAEStackInventory config persistence and Level Emitter reporting values. - @Kogepan229
    • Fixed: Memory card config copy for IO/Storage/Level buses
  • #1045 Moved pick-block block select logic from server to client in KeyBindHandler and PacketPickBlock to allow use of client-only rendering functions. Also ensures partial stacks route to active slot even without wireless terminal. - @michaeldoylecs
    • Fixed: Pick-block crash with Red Alloy Wire, Partial stack routing without wireless terminal
    • Closes GTNH#23383
  • #1044 Corrected spelling errors in PowerUnits.java and translated strings across 15 language files (en_US, cs_CZ, de_DE, es_ES, fr_FR, hu_HU, it_IT, ja_JP, ko_KR, pt_BR, ro_RO, ru_RU, uk_UA, zh_CN, zh_TW). - @Yoshy2002
    • Fixed: Typos in code and translations
  • #1043 Added shift-click guards in AEBaseGui, VirtualMEPatternSlot, and VirtualMEPhantomSlot to prevent unintended item additions during pattern editing. - @Kogepan229
    • Fixed: Pattern Terminal unintended shift-click additions
    • Closes GTNH#23333
  • #1042 Corrected event handling in GuiMEMonitorable and GuiPatternTerm to properly capture and route right-click actions on pinned items. - @lc-1337
    • Fixed: ME Monitor pins right-click, Processing terminal pattern display
    • Closes GTNH#23243
  • #1040 Corrected state management logic in TileChest to prevent toggle bus state changes from clearing displayed inventory. - @lc-1337
    • Fixed: ME Chest content visibility after network updates
    • Closes GTNH#23068
  • #1039 Corrected pt_BR.lang ME Chest item name. - @thiago-solfo
    • Fixed: ME Chest name spelling in pt_BR
  • #1038 Updated TileSpatialIOPort to source dimension context from the Spatial Pylon rather than the IO Port itself. - @JeromeBollinger
    • Fixed: Cross-dimension spatial transitions
    • Closes #1037
  • #1032 Adjusted slot priority in AEBaseContainer and ContainerMEMonitorable to ensure shift-clicked items route to player inventory first when appropriate, and properly sync inventory state. - @Kogepan229
    • Fixed: Terminal shift-click destination, Inventory not updating on shift-click
    • Closes GTNH#23286, GTNH#23287
  • #1029 Corrected logic in ContainerCellWorkbench to properly handle partition button clicks for cell partitioning. - @Kogepan229
    • Fixed: Cell Workbench partition button
    • Closes GTNH#23269
  • #1028 Corrected fluid stack handling in GuiOptimizePatterns and PacketOptimizePatterns to properly filter and display fluid crafting recipes. - @Kogepan229
    • Fixed: Fluid recipes missing from optimizer
    • Closes GTNH#23262
  • #1027 Corrected slot priority logic in AEBaseGui and AEBaseContainer to prevent shift-clicked items from ending up in phantom slots and to restore shift-click functionality for upgrade slot cards. - @Kogepan229
    • Fixed: Shift-click phantom slot bug, Upgrade card shift-click regression
    • Closes GTNH#23265
  • #1023 Fixed ContainerCraftConfirm initialization in wireless terminal context and updated dependencies.gradle version. - @Kogepan229
    • Fixed: wireless terminal Optimize button not opening GUI
    • Closes GTNH#23230
  • #1022 Improved block highlighting logic in CraftingCPUCluster to properly handle and expose valid highlight targets. - @lc-1337
    • Fixed: Crafting CPU shift-highlight not accessible in some cases
    • Closes GTNH#23249
  • #1021 Implemented shift-click handling for phantom slots in AEBaseGui and VirtualMEPhantomSlot to properly insert filters into Storage Bus. - @lc-1337
    • Fixed: shift-click filter insertion into Storage Bus phantom slots
    • Closes GTNH#23233
  • #1019 Added null check in PartStorageBus.updateSetting and fixed BlockRendererPreviewEvent to copy item stacks before rendering, preventing NBT corruption. - @Kogepan229
    • Fixed: Storage Bus crashes on legacy items, NBT data corruption from preview rendering
  • #1018 Adjusted button positioning calculations in GuiPatternTermEx. - @lc-1337
    • Fixed: Processing Terminal button positioning
  • #1017 Added null check in ContainerCraftConfirm to prevent crash in pattern optimization. - @Kogepan229
    • Fixed: pattern optimizer crash
  • #1016 Corrected button state and value handling in GuiAmount, GuiLevelEmitter, and GuiQuantityButton for negative number inputs. - @Kogepan229
    • Fixed: negative amount input handling in GUIs
  • #1013 Modified PartSharedItemBus to update redstone mode immediately when GUI changes, backporting upstream AE2 fix for redstone card responsiveness. - @dfddgge
  • #1009 Corrected color reporting logic in ToolColorApplicator to handle all color types, not just paintballs. - @Worive
    • Fixed: Color Applicator GUI color display for non-paintball colors
  • #1008 Fixed GuiCraftingCPU tooltip rendering to use current hover state instead of stale state from previous frame. - @Worive
    • Fixed: Crafting CPU tooltip stale data
  • #1007 Modified GuiCraftingCPU shift-click handler to check if a block is available to highlight before closing the screen. - @Worive
    • Fixed: Crafting CPU screen closing on shift-click with no highlight target
  • #1004 Adds IInterfaceViewable.numSlots() (default rows * rowSize) and sends it in PacketInterfaceTerminalUpdate.PacketAdd, whose setItems now takes a numSlots argument. ContainerInterfaceTerminal checks isItemValidForSlot before inserting, handles shouldDisplay going false, and does a full inventory update when rows, row size or slot count change; GuiInterfaceTerminal stops drawing at numSlots. - @asquared31415
    • Added: numSlots for machines in the Interface Terminal, variable slot count, rows and row size per machine
    • Fixed: Interface Terminal crashes in edge cases, invalid items inserted into pattern slots from the terminal, machines that stop displaying staying in the terminal list
  • #1001 Changed GuiInterfaceTerminal to set search box focus in initGui instead of constructor, matching Minecraft GUI lifecycle requirements. - @chrombread
    • Fixed: Interface Terminal search box focus handling
  • #997 Fixed button value update logic in GuiAmount, GuiLevelEmitter, and GuiQuantityButton to properly handle colored button states. - @Ranzuu
    • Fixed: Colored button value updates
  • #995 Updated DualityInterface to check interface active state before pushing items to network. - @lc-1337
    • Fixed: Inactive interface item push
  • #990 Fixed PartLevelEmitter fluid listener initialization and filter tracking logic to handle fluids correctly alongside items. - @Sheodar
    • Fixed: Fluid detection in ME Level Emitters, Empty filter handling
    • Closes GTNH#22991
  • #989 Fixed one-line issue in ContainerPatternTerm affecting crafting mode detection. - @lc-1337
    • Fixed: Processing Pattern Terminal crafting mode
  • #987 Fixed crash and encoded pattern overwrite logic in ContainerPatternTerm. - @lc-1337
    • Fixed: Crash on encoded pattern overwrite
  • #983 Added null-safety checks in renderer classes (RendererExportBus, RendererImportBus, RendererLevelEmitter, RendererTerminal) to handle missing AE2FC. - @lc-1337
    • Fixed: Crash when holding terminals without AE2FC
    • Closes #980, GTNH#23028
  • #981 Updated PacketInventoryAction.java to properly handle crafting GUI opening from non-hand slots. - @Kogepan229
    • Fixed: Crafting GUI opening from non-hand slots
  • #979 Corrected stack size rendering in NEICellViewHandler.java and AEFluidStack.java. - @Kogepan229
    • Fixed: NEI cell view stack size display
  • #978 Corrected amount-to-send calculation in PartBaseImportBus.java for fluid handling. - @hiroscho
    • Fixed: Fluid amount calculation
  • #977 Added validation in CableBusContainer and FMP integration to prevent simultaneous placement of bus parts and cable multiparts in the same FMP tile, and prevent multi-part cables from accepting AE2 bus attachments. - @lc-1337
    • Added: Bus coexistence validation in CableBusContainer, Multi-part cable rejection check in FMP integration
    • Fixed: Forge Microblocks covers blocking fluid insertion on Dual Interface
    • Closes GTNH#17039
  • #976 Corrected PacketCraftRequest.java to fix crafting GUI transition behavior introduced in PR #971. - @Kogepan229
    • Fixed: Crafting GUI transition mistake
  • #975 Corrected interface check logic in ToolQuartzCuttingKnife.java. - @ABKQPO
    • Fixed: Cutting Knife validation logic
  • #972 Updated WirelessTerminalGuiObject.java and WirelessPatternTerminalGuiObject.java to properly handle pattern loading on output slot changes. - @Kogepan229
    • Fixed: Pattern not loading when changing output slot
  • #971 Updated AEBaseContainer and several packet classes (PacketCraftRequest, PacketInventoryAction, etc.) to handle cases where no parent GUI exists. - @Kogepan229
    • Fixed: Primary GUI assumptions
  • #970 Refactored AEBaseGui.java slot rendering, removed unused slot classes (NullSlot, SlotFakeBlacklist, SlotInaccessibleHD), removed ASMTweaker transformer, and updated AppEngSlot.java. - @Kogepan229
    • Removed: NullSlot class, SlotFakeBlacklist class, SlotInaccessibleHD class, ASMTweaker slot transformer
    • Fixed: Item preview not showing while dragging
    • Closes GTNH#15949
  • #967 Modified GuiBridge.java and Platform.java to correct GUI opening logic for the network status display. - @Kogepan229
    • Fixed: Network Status GUI not opening
  • #965 Updated GuiBusIO.java, GuiUpgradeable.java, and automation bus classes (import/export bus, item bus) to fix several related issues. - @lc-1337
    • Fixed: Bus UI issues, Automation behavior
  • #964 Modified AEBaseGui.java and NEIGuiHandler.java to correct fake slot handling in the client GUI rendering system. - @Kogepan229
    • Fixed: Fake slot display
  • #963 Fixed AEFluidStack and Platform fluid amount calculation methods. - @Kogepan229
    • Fixed: incorrect fluid amount display in NEI
  • #962 Added safety checks to FluidUtils for fluid cell operations. - @Kogepan229
    • Fixed: fluid cell interaction bug
  • #960 Updated PatternTerm GUI logic and PacketSwitchGuis handling for wireless terminals; fixed WirelessPatternTerminalGuiObject state management. - @lc-1337
    • Fixed: wireless terminal crafting order when out of hand
  • #956 Removed world field leak in MBCalculator; added CraftingNotificationManager to properly clean up world references in CraftingCPUCluster and AppEngRenderItem on world unload. - @Alexdoru
    • Added: CraftingNotificationManager for world lifecycle cleanup
    • Removed: direct world field from MBCalculator
    • Fixed: world reference memory leaks
  • #955 AdaptorItemIO.simulateAdd is implemented with itemIO.simulatedSinkIterator and InsertionItemStack, returning the remainder. GTNHLib bumped from 0.8.32 to 0.8.34. - @hiroscho
    • Fixed: simulateAdd returning null for ItemIO inventories
  • #953 In CraftableItemResolver, isOutputSameAs is renamed to isOutputAcceptable. In ACCEPT_FUZZY mode it now also checks the request's acceptableSubstituteFn before the fuzzy comparison. - @zyf051520
    • Fixed: wrong oredict substitute used in crafting calculation, leaving crafting stuck
    • Migration: Check your crafting CPUs for a job stuck on a substituted ingredient, cancel it and re-request it; the calculator now tests that a substitute is actually accepted by the pattern slot. The patterns themselves do not have to be re-encoded.
  • #947 Modified GuiAmount to prevent text field unfocus; updated MEGuiTextField and MEMonitorable container focus handling. - @Kogepan229
    • Fixed: text field focus loss during amount input
  • #940 RenderBlocksWorkaround reads hodgepodge.FixesConfig.fixBottomFaceUV from Launch.blackboard into a static flag. renderFaceYNeg skips the facade UV workaround when the flag is true. - @leagris
    • Fixed: double-applied bottom face UV fix on facades with Hodgepodge
  • #933 CraftingCPUCluster.submitJob now returns type2 CraftingLink (for requesters) instead of type1 (for CPU-internal use) when job merging occurs. - @zyf051520
    • Fixed: crafting link serialization bug causing block disappearance
  • #932 Limited MEItemIO and AdaptorItemIO to expose 64 stacks maximum; fixed PartStorageBus hash calculation that reserved 0 for 'none'; added blocking mode support to DualityInterface. - @RecursivePineapple
    • Added: stack limit for unfiltered interfaces, blocking mode support for GT machines
    • Fixed: interface lag spikes, GT machine integration blocking mode
  • #931 Enhanced AdaptorItemIO.removeItems to properly reflect the behavior of simulateRemove, allowing multiple stacks of items to be extracted in a single operation. - @Engineer12798
    • Fixed: Advanced Stocking Hatch single-stack extraction limit
    • Closes GTNH#22531
  • #928 Modified DualityInterface to regenerate item list on every access rather than relying on tick updates, ensuring transient inventories always reflect current state. - @Glease
    • Fixed: Empty storage list in configured ME interfaces
  • #924 Added null-safety checks in AdaptorItemIO to prevent NPE during item operations. - @RecursivePineapple
    • Fixed: Null pointer exception in adaptor
  • #918 Added channel presence check to DualityInterface to prevent network content passing when the interface lacks a channel connection. - @Kogepan229
    • Fixed: Interface passing network contents without channel
    • Closes #916
  • #917 Corrected mathematical operation in CellInventory restriction calculation. - @lc-1337
    • Fixed: Cell restriction calculation error
  • #915 Added null-safety check in NetworkInventoryHandler to prevent sticky inventories from corrupting the priority iteration loop. - @hiroscho
    • Fixed: Sticky inventory breaking priority loop
  • #913 Enhanced PartP2PInterface to copy stocking configuration settings when binding tunnels. - @hiroscho
    • Fixed: P2P binding not copying stocking settings
  • #912 Added synchronization logic to PartP2PTunnel and PartP2PInterface to properly handle repeated memory card saves of input tunnels. - @hiroscho
    • Fixed: P2P memory card save desync
  • #907 Added safeguards in DualityInterface and PartP2PInterface to prevent item duplication during P2P transfers. - @hiroscho
    • Fixed: P2P interface duplication bug
  • #894 Corrected conduit connection detection in DualityInterface and fixed fluid interface blocking mode in AdaptorConduitBandle. - @lc-1337
    • Fixed: Interface conduit connection detection, Fluid interface blocking behavior
    • Closes GTNH#22206
  • #891 Added blocking state re-application in MEMonitorIInventory during initialization to restore blocking card rules after world load. - @hiroscho
    • Fixed: Advanced blocking card persistence on load
    • Closes GTNH#22144
  • #890 Corrected NetworkMonitor cache handling so discretizer uses correct list type instead of corrupting fluid cache during item network searches. - @hiroscho
    • Fixed: AutoFiller fluid cache corruption, SuperStocking network lag, Fluid discretizer cache pollution
    • Closes GTNH#22109
  • #888 Fixed out-of-bounds error and optimized crafting CPU cluster status tracking. - @lc-1337
    • Fixed: Crafting CPU status tracking
  • #881 Added convertToInput, convertToOutput and unbind to PartP2PTunnel, and P2PCache.unbind. updateTunnel no longer takes an updateOutputs flag. PartP2PInterface now overrides applyMemoryCard in place of pasteMemoryCardData, and the memory card data now includes the P2P item stack. - @hiroscho
    • Fixed: patterns voided when an input P2P Interface is bound as output, new P2P Interface not updating as an available interface, advanced memory card unbinding the input on every new output, tunnel rebuilt twice on frequency change, output P2P Interface not copying input settings
  • #876 Corrected NBT serialization in DualityInterface, UltimatePatternHelper, and Platform to handle legacy 2.9 format correctly. - @lc-1337
    • Fixed: NBT read/write legacy compatibility
  • #873 Corrected packet fragmentation logic in DualityInterface to ensure proper packet boundaries. - @lc-1337
    • Fixed: Interface packet splitting
  • #871 Added null-safety checks in InventoryAdaptor and AdaptorFluidHandler to handle missing AE2FC module gracefully. - @lc-1337
    • Fixed: Crash on AE2FC-free version upgrade
    • Closes #869
  • #870 Corrected fluid push logic in DualityInterface to handle partial ingredient submission and prevent recipe stalling. - @Kogepan229
    • Fixed: Fluid interface crafting limbo state, Partial fluid ingredient submission
    • Closes GTNH#21793
  • #868 Corrected iteration ID generation in PartExportBus so each slot has a unique ID instead of reusing the same ID, allowing proper item re-reading. - @hiroscho
    • Fixed: Fuzzy export bus multi-slot export
  • #867 Introduced NetworkItemList that associates each item stack with its source network and applies extract-only filters per network. Storage bus reading order no longer affects item visibility. - @hiroscho
    • Added: NetworkItemList class for per-network item tracking, NetworkItemStack with source network association
    • Fixed: Filtered extract-only storage bus inconsistency, Nested network item visibility
    • Closes GTNH#18074
  • #866 Corrected item count return value in CreativeCellInventory.getAvailableItem(). - @hiroscho
    • Fixed: Creative cell item count reporting
  • #864 Moved crafting status helper function from GuiInterfaceTerminal (client-only) to CraftingCPUCluster (server-side accessible), resolving the illegal cross-side function call in issue #21703. - @FabienChatton
    • Removed: Crafting helper from client GUI
    • Fixed: Crafting CPU check crash
  • #863 Updated TileChest to notify when internal handler is ready, and corrected configuration path in InvTweakSortingModule to properly resolve invTweaks settings. - @lc-1337
    • Fixed: Storage bus content loading after restart
    • Closes GTNH#21607

Performance ​

  • #1671 CraftingCPUCluster defers markDirty during updateCraftingLogic with a deferMarkDirty/markDirtyPending flag pair, flushed once in a try/finally, and caches condensed and expanded inputs per task visit. Adds CraftingCPUClusterFunctionalTest. - @Worive
  • #1665 ItemRepo caches per-stack sort keys (name, mod id) in an Object2ObjectOpenHashMap and builds the name and mod comparators from them, and ItemSorters.stripFormatting replaces the regex. Dirty flags (viewStale, sizesChanged, flowRatesChanged) gate the re-sort, and GuiMEMonitorable sets the scrollbar from the repo size instead of after each updateView call. - @mitchej123
    • Fixed: ME terminal lag from re-sorting on every inventory update, scrollbar not updating after filter or view mode changes
  • #1600 MEMonitorIFluidHandler.onTick compares cache and current lists with findPrecise and builds a change list lazily. This replaces the full negate-and-merge IItemList and the zero-removal pass. - @Algent
  • #1599 CraftingGridCache builds an ImmutableMap craftableItemsSnapshot in setPatternsFromCraftingMethods. getCraftingMultiPatterns returns it instead of calling ImmutableMap.copyOf on each call. - @Algent
  • #1598 GridNode.beginVisit uses ArrayDeque instead of LinkedList and reuses one connection ArrayList between layers. Functional tests cover BFS order, cycles and pruning. - @Algent
  • #1596 MEMonitorIInventory.onTick updates the item list incrementally from detected slot changes instead of calling resetStatus and re-adding every stack each poll. A full rebuild runs every CACHE_REFRESH_INTERVAL (256) polls. A functional test checks that retained types stay bounded. - @Algent
  • #1594 NetworkMonitor.monitorDifference now takes the already-copied stack as its parameter instead of calling copy() on the original. This removes one IAEStack copy per call. - @Algent
  • #1593 EnergyGridCache.injectAEPower skips PartQuartzFiber providers when the new PartQuartzFiber.hasUnvisitedEnergyGrid check finds both endpoint grids already in the seen set. A GridAccessException falls back to the normal path. - @Algent
  • #1567 Cable and part rendering resolves textures once per render pass through a TextureSet in BlockRenderInfo, and caches taught, offset and flipped icons in CableBusTextures. BusRenderHelper and RenderBlocksWorkaround reuse scratch arrays and renderer state, and the cable part classes were updated to match. - @boubou19
    • Fixed: slow AE2 cable rendering
  • #1553 TileWirelessBase now implements IGridTickable instead of using a TICK tile event. Only connectors request ticking, and they sleep once linkedTargets matches getConnectedTiles. Restoration also runs in onReady. A regression test was added. - @Worive
    • Fixed: wireless hub and connector tick cost when fully connected
  • #1532 Modified OreDictionaryHandler to defer rebaking to TickHandler, coalescing multiple registrations into a single rebake operation. - @Worive
    • Added: Deferred rebake mechanism, Regression tests for deferred rebaking
    • Fixed: Recipe rebaking on late ore registrations
    • Closes #1529
  • #1494 Adds a static VALUES array to AEColor and MaterialType and replaces values() calls with it in the wireless blocks, GUIs, containers, commands, Waila provider and item classes. - @boubou19
  • #1473 Added a filtered getAvailableItems overload to MEMonitorHandler, NetworkMonitor, MEInventoryWrapper, MEMonitorPassThrough, MEPassThrough and StorageBusInventoryHandler that delegates to the inner handler. CellInventory and IItemList get a direct filtered path. Added a gametest for multiple storage buses. - @RecursivePineapple
    • Added: filtered getAvailableItems fast path for cells, multiple storage bus gametest
    • Fixed: full network scan in filtered getAvailableItems
  • #1436 Implemented object deduplication in CraftingTreeSerializer using identity-based caching. Added new IObjectSerializer interface and ObjectAEStackSerializer to track and reuse references. Updated CraftingJobV2 and resolvers to work with deduplicated objects. - @Azusfin
    • Added: IObjectSerializer interface, ObjectAEStackSerializer, object deduplication in serialization
    • Fixed: Large crafting tree serialization failures
  • #1391 Platform.poweredExtraction and the insertion counterpart drop the initial SIMULATE pass against the cell and act on the real result. EnergyGridCache.extractAEPower now caps the returned value at the requested amount so simulate and modulate agree. - @Kogepan229
    • Removed: initial simulate pass in powered insert/extract
  • #1307 Skip already-connected tiles and build safe set without modifying locList during wireless hub connection scanning. - @czqwq
    • Fixed: Wireless Hub reconnecting every tick causing performance issues
  • #1293 Implemented multi-map caching strategy in InventoryAdaptor using null-value sentinel to avoid repeated hash collisions and equality checks on adaptor lookups. - @bk5115545
  • #1290 Implemented single-tick cache in DualityInterface.isBusy() to avoid repeated target scans within the same tick while maintaining correctness for busy-state accuracy. - @bk5115545
  • #1289 Replaced link list iteration with LinkedHashMap for O(1) lookups in isEnabled() and getInstance(), reducing per-tick overhead from repeated equality checks. - @bk5115545
  • #1232 GridStorage keeps a double instead of a full NBTTagCompound, and getValue() returns null when empty. StorageData skips empty values when saving and runs a one-time cleanup of existing empty entries from the config, tracked by a newDataFormat flag. - @Alexdoru
    • Fixed: grid storage data held in memory and saved as empty entries
  • #1215 Refactored RenderBlocksWorkaround to use symmetric acquire/release pattern instead of relying on ThreadLocal cleanup, eliminating dangling references in BusRenderHelper, BusRenderer, CableRenderHelper, and related renderers. - @Alexdoru
    • Fixed: ThreadLocal memory leak in rendering
  • #1124 CraftingCPUCluster.getTile caches the reflected getTile Method per class in an IdentityHashMap, and returns null early for a null provider. - @zyf051520
  • #1123 Improved ASMIntegration class loading strategy to reduce redundant reflection calls for mod integrations. - @danyadev
  • #1111 AEStackTypeRegistry now assigns byte network ids (from 1, 0 is null) to sorted types in initNetworkIds, called from AppEng init. IAEStack.writeToPacketGeneric/fromPacketGeneric and Platform.writeStackByte use the byte id instead of a UTF8 string. The wire format changed, so client and server must run the same version. - @Kogepan229
    • Added: byte network ids for stack types
  • #1109 Added cached VALUES arrays and fromOrdinal() to AEColor and YesNo, added static ForgeDirection[] caches, and replaced Enum.values() calls across about 30 files. - @Alexdoru
  • #1098 MEItemIO.getStackInSlot: replaced storage.getAvailableItem(config, IterationCounter.fetchNewId()) with a SIMULATE extractItems call using a copy of config at Integer.MAX_VALUE stack size and the duality action source. - @lc-1337
  • #1096 NetworkInventoryHandler.getAvailableItem() now uses targeted, item-specific queries for storage locations instead of fully reconstructing all subnet contents. Added functional test and new queryBestStorageHandlers() API method. - @bk5115545
    • Added: queryBestStorageHandlers API, NetworkInventoryHandlerFunctionalTest
    • Fixed: network reconstruction timeout on large networks
  • #1085 PatternHelper and UltimatePatternHelper now cache pattern validity status in NBT to avoid repeated validation checks. - @Alexdoru
    • Added: pattern validity cache in NBT
    • Fixed: lag from repeatedly validating invalid patterns
  • #1071 Added caching of pattern output stacks in ItemEncodedPattern to avoid recalculation on every render. - @Kogepan229
    • Fixed: FPS drops in interface terminals
  • #1065 Modified SpawnData and WorldData to batch dirty-flag marking; updated TickHandler to periodically flush spawn data instead of writing on every chunk. - @mitchej123
    • Fixed: excessive spawn data I/O
  • #1012 Optimized CraftingContext and CraftableItemResolver in crafting v2 to improve request resolution performance, fixing regression from PR #936. - @Glease
    • Fixed: crafting request performance regression
  • #954 PartCable.changeColor now swaps the part item through a new protected AEBasePart.setItemStack (the is field is no longer final), sets the proxy color and calls CableBusContainer.updateConnections, instead of removePart/addPart on the host. - @hiroscho
    • Fixed: grid rebuilds and merges when recoloring cables
  • #941 AppEngInternalInventory.readFromNBT checks hasKey before getCompoundTag, for both the named compound and each slot key, and skips missing ones. - @Alexdoru
  • #914 P2PCache now updates only affected outputs on add/remove/frequency change; removed unnecessary notifyNeighbors calls from DualityInterface; reorganized PartP2PTunnel updateFreq; simplified PartP2PInterface config syncing and fixed output-only patterns with disconnected inputs. - @hiroscho
    • Removed: Redundant tick-based P2P inventory syncing
    • Fixed: Output P2P patterns with disconnected inputs
  • #893 NetworkInventoryHandler.getAvailableItems now creates lists through a new getPrimitiveItemList helper. It calls createPrimitiveItemList for the item channel and createFluidList otherwise, in place of the channel's createList. - @hiroscho
  • #886 ItemList now builds its NavigableSet lazily and iterates over a copy of setRecords when unsorted. Added IStorageHelper.createSortedItemList and IItemList.isSorted and toSorted. ItemRepo, ContainerCellWorkbench, ToolColorApplicator and ToolMassCannon switched to sorted lists. - @zyf051520
    • Added: createSortedItemList API method
  • #885 Changed CraftingContext to use MECraftingInventory constructor without ActionSource, avoiding per-stack simulated extract validation. Profiler shows 80%+ CPU reduction in constructor. - @zyf051520
    • Removed: Per-stack simulated extract validation

Removals ​

  • #1314 Deleted GTNHRecipes/network/crafting/cpu.recipe, which held four shapeless recipes for BlockAdvancedCraftingUnit meta 0 to 3. Replacement recipes are in NewHorizonsCoreMod#1767. - @UltraProdigy
    • Removed: GTNH-specific co-processor shapeless recipes
  • #984 Removed Pattern Refill Card from Upgrades.java, IMaterials.java, ContainerPatternTerm.java, Registration.java, ApiMaterials.java, MaterialType.java, and AbstractPartTerminal.java. Deleted associated texture files. - @lc-1337
    • Removed: Pattern Refill Card item, Pattern Refill upgrade type, Associated textures
    • Fixed: Crash when shift-clicking terminal with Memory Card
    • Closes GTNH#22609

Internal / Refactor ​

  • #1546 Gametests switch to the named onEachTickDisabled callback from Horizon-QA 0.14.0. The deprecated continuousInvariant helper is removed from AEGameTestHelpers. - @Worive
    • Removed: deprecated continuousInvariant test helper
  • #1539 Gametests replace deprecated AEGameTestHelpers usages with GameTestHelper, InventoryHelper and TickCallbackHandle calls, and rename the continuous-invariant callbacks. - @Worive
  • #1497 IOPortTests now uses GameTestHelper#onEachTick with TickCallbackHandle, disabled initially and enabled in the observation window, instead of the deprecated continuousInvariant helper. - @Worive
  • #1452 StorageBusTests drops AEGameTestHelpers chest wrappers (setChestSlot, clearChestSlot, assertChestStoredAmount, tile) in favour of GameTestHelper setSlot, inventory count assertions and tile-entity helpers. - @Worive
  • #1451 P2PTests now uses HorizonQA inventory, labeled position, tile entity and redstone helpers instead of setChestSlot, tile and direct hopper and chest handling, which removes about 70 net lines. - @Worive
  • #1450 NetworkCoreTests now uses HorizonQA labeled position (TestPos), tile entity, inventory, block and redstone helpers instead of AEGameTestHelpers pos, tile and Coord wrappers and direct inventory calls. - @Worive
  • #1449 IOPortFluidCompatibilityTests now uses helper.assertTileEntityPresent and helper.setSlot instead of the AEGameTestHelpers tile wrapper and direct setInventorySlotContents calls. - @Worive
  • #1448 IOPortTests now uses HorizonQA inventory, labeled position (TestPos), tile entity, redstone and assertItemEqual helpers instead of direct inventory calls and AEGameTestHelpers wrappers. - @Worive
  • #1447 InterfaceTests now uses HorizonQA inventory and tile entity helpers (helper.setSlot, InventoryHelper) instead of direct inventory manipulation and AEGameTestHelpers wrappers. - @Worive
  • #1446 ImportExportBusTests now uses HorizonQA inventory slot, count, assertion, tile entity and redstone helpers instead of direct inventory calls and AEGameTestHelpers wrappers (setChestSlot, fillChest, assertChestStoredAmount, tile). - @Worive
  • #1445 DriveAndCellTests now uses helper.setSlot and HorizonQA tile entity helpers instead of direct setInventorySlotContents calls and the AEGameTestHelpers tile wrapper. - @Worive
  • #1444 CraftingExecutionTests now uses HorizonQA helpers (InventoryHelper, TestPos, tile entity and entity queries) instead of AEGameTestHelpers wrappers such as tile, pos, Coord and assertChestStoredAmount. - @Worive
  • #1443 TileMolecularAssembler gets public SPEED and ACCELERATION_TAX arrays replacing the switch; TileInscriber and TileAdvancedInscriber expose MAX_PROCESSING_TIME, BASE_POWER_PER_TICK and BASE_SPEED as public constants. The assembler now returns early if installed upgrades exceed the inventory size. - @sbancuz
    • Added: public Molecular Assembler and Inscriber constants
  • #1431 Moves encode logic from ContainerPatternTerm into a new PatternEncodingHelper and IPatternTerminal, adds a PatternEncodeListener interface with add/remove/get methods implemented in PartPatternTerminal and WirelessPatternTerminalGuiObject, and makes encode public. - @hinyb
    • Added: PatternEncodeListener API on pattern terminals
  • #1384 CraftingCPUCluster and CraftingCpuDiagnostics lose final and become public, private members become protected, and inner classes become public. CraftingGridCache fields become protected. ICraftingCPU is marked NonExtendable and documents CraftingCPUCluster as the base class. - @ABKQPO
  • #1363 DualityInterface sets isFluidInterface via instanceof IDualHost instead of TileFluidInterface, PartFluidP2PInterface and PartFluidInterface; the field is no longer final. - @ABKQPO
  • #1343 Replaced GuiColors usages with ColorUtils constants (e.g. guiTextColorGray, itemSlotOverlayInvalid) across about 60 GUI classes, and added context menu colors. Needs GTNHLib#392. ThaticEnergistics needs a follow-up change (ThaumicEnergistics#135) after merge. - @Ranzuu
    • Added: context menu colors
    • Removed: unused color enums
    • Fixed: broken and unlocalized GUI colors
  • #1340 Replaced per-GUI title and inventory color enum entries (e.g. ChestTitle, InscriberInventory, DefaultBlack) with a single GuiTextColorGray in GuiColors across the GUI classes. GuiAeButton was reworked to drop its enums and scale its size. - @Ranzuu
    • Removed: per-GUI title color enum entries
    • Fixed: AE buttons not resizing correctly
  • #1322 ContainerPatternValueAmount now implements IVirtualSlotSource and uses PacketPatternValueSet instead of PacketVirtualSlot. PacketPatternValueSet gets an update-only mode (slot index plus 1,000,000 offset) that skips reopening the primary GUI, and a clientPacketData handler. VirtualMEPatternSlot and VirtualMEPhantomSlotPrecise send it on click. - @lc-1337
  • #1317 VirtualMEPhantomSlot takes an AEStackInventorySyncHandler instead of StackGetter/StackSetter. ContainerCellWorkbench, ContainerLevelEmitter and TileCellWorkbench move to sync handlers (configSync, copyModeSync, partitionAction). SyncManager's tickClient/tickServer/flushClient are merged into flushSync. - @Kogepan229
    • Removed: StackGetter and StackSetter callbacks on phantom slots, tickClientSync on containers
  • #1297 Removed getTypeWeight from IStorageCell and its overrides. Added IAEStackType.getAmountPerByte, returning 8 for AEItemStackType and 8*256 for AEFluidStackType. AEBaseCell and CellInventory use it. Addon cells that override getTypeWeight or implement IAEStackType must update. - @lc-1337
    • Added: getAmountPerByte on IAEStackType
    • Removed: getTypeWeight on IStorageCell
  • #1276 Added ActionHandler, StreamCodec and StreamCodecs, plus SyncManager and SyncRegistrar support for stateless actions sent immediately in either direction. ContainerMEMonitorable registers toggleViewCell through it, replacing the PacketValueConfig call in GuiMEMonitorable. - @Kogepan229
    • Added: Action Handler for container sync, StreamCodec and StreamCodecs
  • #1246 Extracted PartBaseFormationPlane and PartBaseAnnihilationPlane from PartFormationPlane and PartAnnihilationPlane. ContainerFormationPlane now implements IVirtualSlotHolder with 63 virtual config slots, and GuiFormationPlane shows buttons depending on supportItemDrop() and supportFuzzy(). GuiBridge now uses PartBaseFormationPlane as the host class. - @lc-1337
    • Added: PartBaseFormationPlane, PartBaseAnnihilationPlane
  • #1214 Added a SyncManager with typed sync handlers, codecs and optional delta syncing, registered through AEBaseContainer.syncRegistrar(), supporting server to client, client to server and both directions. ContainerLevelEmitter and GuiLevelEmitter use it, VirtualMEPhantomSlot gained getter/setter constructors, and GuiSync and DataSynchronization are marked deprecated but still work. - @Kogepan229
    • Added: SyncManager container sync system, sync codecs
  • #1211 Added abstract IAEStackType.getTestStack(). AEItemStackType returns a copy of a fire block stack, AEFluidStackType returns a copy of a water bucket's fluid stack. - @lc-1337
    • Added: IAEStackType.getTestStack
  • #1208 Added PacketCraftingCpuUpdate and CraftingCpuEntry to send the CPU state in one packet, and removed PacketCraftingRemainingOperations. The scheduled reason no longer goes through NBT. GuiCraftingCPU was rewritten around LinkedHashMap entries, and NamedDimensionalCoord gained packet read/write helpers. - @Kogepan229
    • Added: PacketCraftingCpuUpdate, CraftingCpuEntry
    • Removed: PacketCraftingRemainingOperations
  • #1186 Renamed LevelEmitterTypeFilter to AEStackTypeFilter and hid its internal map behind toggle() and isEnabled(). ILevelEmitter.getTypeFilters() now returns AEStackTypeFilter; the GUI, container and PartLevelEmitter were updated to match. Also bumps NotEnoughItems to 2.8.87-GTNH, GTNHLib to 0.9.48, GT5-Unofficial to 5.09.52.411, OpenComputers to 1.12.28-GTNH and Backhand to 1.8.8. - @Kogepan229
    • Added: AEStackTypeFilter
    • Removed: LevelEmitterTypeFilter
  • #1184 SynchronizedField.CustomField writes a boolean presence flag before the value and returns null on read when the flag is false, so null values in GuiSync custom fields no longer throw. - @lc-1337
    • Added: null support for custom GuiSync fields
  • #1167 Added GuiColors.NEICellView (0x000000) and used it in NEICellViewHandler.drawForeground instead of the literal 0. - @Ranzuu
    • Added: NEICellView GUI colour entry
  • #1086 GuiInterface now overrides drawBG and draws config and pattern slot rows from regions of interface.png based on installed pattern capacity cards; getBackground always returns guis/interface.png. interface2, interface3, interface4 and the interfacenone textures are no longer used, and interface.png is changed. - @lc-1337
    • Removed: interface2, interface3, interface4 and interfacenone GUI textures
  • #1024 AEBaseInvTile and AENetworkInvTile get a protected constructor taking inventoryPersistent. When false, the base class skips reading and writing the inv NBT; the no-arg constructor keeps the old behaviour (true). - @Kogepan229
    • Added: inventoryPersistent constructor on AEBaseInvTile and AENetworkInvTile
  • #968 SyncData and PacketProgressBar are replaced by DataSynchronization, SynchronizedField, IGuiPacketWritable and PacketGuiDataSync. AEBaseContainer uses DataSynchronization, and ContainerFormationPlane's GuiSync id moves from 6 to 10. Addons using SyncData or PacketProgressBar must update. - @Kogepan229
    • Added: IGuiPacketWritable support for GuiSync fields, private and protected GuiSync fields
    • Removed: SyncData, PacketProgressBar
    • Migration: Addon containers that extend AE2 containers must give each @GuiSync field an id not used anywhere else in their class hierarchy, because a duplicate id now throws an IllegalStateException instead of logging a warning. AEBaseContainer.stringSync and updateFullProgressBar are removed; synced fields go through DataSynchronization and PacketGuiDataSync, and onUpdate(String, Object, Object) still fires on a change.
  • #957 WirelessRegistry gains private testWap and checkRange helpers that iterate TileWireless machines on the grid and compare squared distance to the WAP range, so performCheck can verify range. Diff is truncated, so exact use is unclear. - @Kogepan229
  • #895 DualityInterface.pushPattern drops the antlr Triple import and uses a private VerifiedAcceptors holder class for the tile, side and adaptor. - @lc-1337
    • Removed: antlr Triple dependency in DualityInterface
  • #819 Made private members public or protected in AEBaseGui, GuiCraftingStatus, ContainerCraftConfirm, ContainerUpgradeable, CraftingCPUCluster, PartP2PLiquids and ItemSlot. Added IMEInventoryHandler.getInternal, MEInventoryHandler.isPreformatted, and made DualityInterface implement IGridProxyable. - @NeOzay
    • Added: IMEInventoryHandler getInternal, MEInventoryHandler isPreformatted, IGridProxyable on DualityInterface
  • #799 ContainerAdvancedNetworkTool now extends ContainerNetworkTool with an overridable setupSlotContainer. ContainerUpgradeable detects toolboxes through INetworkToolItem. The facade toggle packet uses the "NetworkTool" key for both tools, and ToolAdvancedNetworkTool duplicate code was removed. - @NeOzay
    • Removed: duplicate Advanced Network Tool container and item code
  • #752 Crafting APIs are generalised from IAEItemStack to IAEStack<?>, with the old item methods kept as deprecated. ICraftingJob becomes generic over stack type, and a new encoded ultimate pattern item is added. NBT is written through a reversible conversion. New compile-only dependencies are added. - @lc-1337
    • Added: IAEStack-based crafting API methods, encoded ultimate pattern item definition
    • Migration: ICraftingJob now takes a stack type parameter: populatePlan takes IItemList<IAEStack<?>> and getOutput returns that type, and CraftCompleteListener.apply takes an IAEStack<?> instead of an ItemStack. Classes that implement IAEStack or IItemList must add the new abstract methods, and the IAEItemStack methods on ICraftingGrid and ICraftingCPU still work but are deprecated in favour of IAEStack<?> ones such as getCraftingMultiPatterns and getFinalMultiOutput.

Documentation ​

  • #1417 Adds a two-line reference to the GTNewHorizons .github CONTRIBUTING.md in CONTRIBUTING.md. - @UltraProdigy
  • #1319 Updated en_US.lang file with 77 localization string refinements for better English clarity. - @Yoshy2002
  • #1316 Updated en_US.lang file with corrected grammar and clarity in 84 localization entries. - @UltraProdigy

Chores ​

  • #1645 CraftingV2Tests replaces the 150 ms simulateFor timeout with a loop capped at 10,000 steps that stops when the job finishes. - @Worive
  • #1571 Extended NetworkPowerTests with a GameTest for export pause and recovery during power loss. It tracks item conservation, dropped EntityItems and partial transfer state, and setUpNetwork now takes a cobblestone count. - @Worive
    • Added: export recovery after power loss GameTest
  • #1561 Added activeProcessingJobSurvivesCpuReconstruction to CraftingExecutionTests (Horizon-QA, crafting_cpu template). It checks the cluster reforms, the job completes once, and ingredients and output are not lost or duplicated. - @Worive
    • Added: crafting CPU reconstruction GameTest
  • #1555 Replaced three duplicated IOPortTests speed budget tests with one Horizon-QA test using @MethodSource (no-upgrade, one-upgrade, three-upgrades). Removed the unused installSpeedUpgrades helper. - @Worive
    • Removed: installSpeedUpgrades test helper
  • #1549 dependencies.gradle: devOnlyNonPublishable Horizon-QA bumped from 0.13.0 to 0.14.0. - @Worive
  • #1544 IOPortTests gains redstonePulseModeCompletesExactlyOneMultiTickCell, covering PR 1536: a pulse stays latched until exactly one multi-tick cell finishes. - @Kogepan229
    • Added: IO Port pulse mode gametest
  • #1537 New gametests in StorageBusTests, DriveAndCellTests and CraftingExecutionTests cover sticky cells and sticky storage buses against higher-priority storage. Adds an extractFromGrid helper to AEGameTestHelpers. - @Kogepan229
    • Added: sticky card gametests
  • #1496 Adds importBusFullNetworkLeavesSourceUntouched to ImportExportBusTests. It fills a 1k cell with 8128 cobblestone and asserts on each tick that the 32 cobblestone in the source chest stay there. - @Worive
    • Added: import bus full network game test
  • #1479 Adds NetworkPowerTests and the energy_acceptor_network structure (json and nbt), and bumps Horizon-QA from 0.11.0 to 0.13.0. - @Worive
    • Added: energy acceptor game test
  • #1467 Bumps Horizon-QA from 0.10.0 to 0.11.0 in dependencies.gradle, sets format_version 2 in the horizonqastructures JSON files and regenerates the .nbt files, and removes required = false from the game tests. - @Worive
  • #1463 Adds required = false to the @GameTest annotations in ImportExportBusTests, StorageBusTests, InterfaceTests and P2PTests. - @Worive
  • #1442 AEGameTestHelpers delegates tile and setRedstoneInput to GameTestHelper label overloads and adds deprecation notes; Horizon-QA bumped 0.9.0 to 0.10.0. - @Worive
  • #1437 Adds external-deps-inclusion to build-and-test.yml and new gate-by-required, latest-daily-integration-test and trigger-rebuild-with-deps workflow shims calling GTNH-Actions-Workflows. - @MalTeeez
  • #1425 New Horizon-QA game tests and structure templates under appeng.gametests, a shared AEGameTestHelpers class, IOPortTests moved to storage/ioport, and Horizon-QA dev dependency bumped 0.7.0 to 0.9.0. - @Worive
    • Added: Horizon-QA tests for buses, storage bus, interfaces, P2P, crafting, drive and cells, network core
  • #1416 IOPortTests replaces position constants with labels (io_port, drive, redstone) declared in ioport.json annotations; dev dependency Horizon-QA bumped 0.6.0 to 0.7.0. - @Worive
  • #1389 Raised the required-after gtnhlib version range in AppEng from 0.9.5 to 0.11.14 and updated the README installation note. - @mitchej123
  • #1355 SIMPLE_SIMULATION_TIMEOUT_MS in CraftingV2Tests raised from 100 to 150. - @Kogepan229
    • Fixed: flaky crafting functional test timeout
  • #1348 Removed the Loader version lookup and the ModNotInstalled throw for a non-MC1710 version from the GT integration module constructor in GT.java. - @PLASMAchicken
    • Removed: GregTech version check in the GT integration
  • #1341 Deleted the 13-line '# GUI Colors - ARGB' block (gui.color.appliedenergistics2.*) from all lang files. Colors are loaded from GuiColors in code. Closes GTNH-Translations#50. - @Ranzuu
  • #1335 Added IOPortTests (HorizonQA GameTests) with an ioport structure template, the Horizon-QA 0.4.1 dev dependency, and horizonqa: true in the build-and-test workflow. - @Kogepan229
    • Added: IOPort GameTests
  • #1321 New class VirtualMEPhantomSlotPrecise extends VirtualMEPhantomSlot with showAmount = true. On the pick-block action it sends PacketSwitchGuis(GUI_PATTERN_VALUE_AMOUNT). - @lc-1337
    • Added: VirtualMEPhantomSlotPrecise
  • #1280 addon.gradle adds runFunctionalTestServer and runFunctionalTestClient GradleBuild tasks. The functional test classpath is added to runServer and runClient only when the ae2.withFunctionalTests property is set or in CI. - @Kogepan229
    • Added: runFunctionalTestServer and runFunctionalTestClient tasks
  • #1279 dependencies.gradle moves AE2FluidCraft-Rework from 1.5.81 to 1.5.83-gtnh and excludes waila from the GT5 functional test dependency. RendererLevelEmitter and RendererTerminal drop PartFluidLevelEmitter and PartFluidTerminal. - @lc-1337
  • #1052 Moves the optimize-images job out of build-and-test.yml into its own optimize-images.yml workflow, triggered on changes to **/*.png. - @UltraProdigy
  • #1051 Bumps gtnhsettingsconvention to 2.0.19 and updates dev dependencies in dependencies.gradle, including NotEnoughItems 2.8.58, Angelica 2.0.0-alpha17, GT5-Unofficial 5.09.52.246 and BuildCraft 7.1.51. - @Connor-Colenso
  • #1034 Changes the required-after:gtnhlib range in AppEng.java from [0.6.11,) to [0.8.34,). - @Kogepan229
  • #1030 Replaces about 480 PNGs under assets/appliedenergistics2 with optimised versions and adds an optimize-images job to build-and-test.yml. No diff was available because the PR exceeds the 300 file limit. - @boubou19
    • Added: texture optimisation check in CI
  • #919 PathingCalculation.processQueue logs multiblock.getMachine().getClass().getName() and getLocation() in the skipped-null-node AELog.error call. The message also switches from a {} placeholder to %s. - @Kogepan229

Contributors ​

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

@Kogepan229 (412), @lc-1337 (252), @Dream-Master (222), @Worive (84), @UltraProdigy (47), @Ranzuu (41), @Alexdoru (34), @boubou19 (28), @hiroscho (24), @AnsonYeung (21), @Eldrinn-Elantey (21), @zyf051520 (10), @ABKQPO (9), @Algent (9), @Nana-Sakura (9), @slprime (7), @Angry3vilbot (6), @bk5115545 (6), @evgengoldwar (6), @hinyb (6), @mitchej123 (6), @Pxx500 (6), @ShadowQFT (6), @sisyphussy (6), @Caedis (5), @DreamYao520 (5), @Luca-Guettinger (5), @MCTBL (5), @NeOzay (5), @Nikolay-Sitnikov (5), @RecursivePineapple (5), @serenibyss (5), @Yoshy2002 (5), @danyadev (4), @DarkShadow44 (4), @Guvante (4), @koolkrafter5 (4), @MalTeeez (4), @micvog (4), @PLASMAchicken (4), @rieverholic (4), @sbancuz (4), @vermz99 (4), @chrombread (3), @Ethryan (3), @Glease (3), @tiffit (3), @alppp (2), @asquared31415 (2), @czqwq (2), @daxsc (2), @FabienChatton (2), @Inphysible (2), @iouter (2), @ko-lja (2), @kuba6000 (2), @leagris (2), @LewisSaber (2), @michaeldoylecs (2), @OTPANNIEXD (2), @PantACRO4life (2), @Ruling-0 (2), @Sanduhr32 (2), @Sheodar (2), @Ableytner (1), @AshVz (1), @asukaonly (1), @Azusfin (1), @Breviel (1), @Chitak985 (1), @chochem (1), @Connor-Colenso (1), @Copilot (1), @copilot-pull-request-reviewer (1), @cubefury (1), @DennisOrtin (1), @dfddgge (1), @DylanTaylor1 (1), @eigenraven (1), @EnderProyects (1), @Engineer12798 (1), @felixfour (1), @FourIsTheNumber (1), @Gamingb3ast (1), @gaogao-qwq (1), @Goldenlion5648 (1), @GribanovIvan (1), @guusw (1), @jamiehu427 (1), @JeromeBollinger (1), @Jesse-njx (1), @Justxs (1), @kirilwapj (1), @Ktmi (1), @Kynake (1), @LazyFlesh (1), @Litten95 (1), @lynxx131 (1), @Majora320 (1), @MarloGr (1), @mattiasploesch-cpu (1), @Miklebe (1), @nmgix (1), @OneEyeMaker (1), @PinkYuDeer (1), @querns (1), @Redderpears (1), @Ressed (1), @rhobold (1), @S4mpsa (1), @shironakoushi (1), @Spicierspace153 (1), @SST-03 (1), @Stars-27 (1), @starxingchenc (1), @SuperSoupr (1), @thiago-solfo (1), @vVvDAPPA (1), @XSana (1), @youkoaona (1)