MatterManipulator
66 merged pull requests.
New Features
- #83 Adds MixinGuiContainer_PickBlock (client, early phase) and new packets in Messages to send the hovered stack to the server. BlockSpec.fromStack converts a stack to a spec, and WeightedSpecList.containsEquivalent is used by the exchange whitelist check. Network packet decode now takes a ByteBuf instead of ByteArrayDataInput. - @vermz99
- Added: middle-click pick in GUI containers for the Matter Manipulator
- #79 Added edit transform functionality across all manipulator modes by extending ItemMatterManipulator with mode-specific transform windows (cable transform, cylinder transform, generic cube transform). - @Azusfin
- Added: transform editing UI for all modes, cable-specific transform window, cylinder-specific transform window, localization strings for new UI
- #78 Added
EnderStorageItemConsumer.javathat registers as a custom consumer inMMItemConsumer.java, providing special handling for Ender Storage items. - @Azusfin- Added: EnderStorageItemConsumer for flexible ender storage handling
- #76 Enhanced
AECellItemProvider.javato copy cell restriction settings. - @Azusfin- Added: AE cell restriction copying
- #75 Added Dynamism Tablet property detection to
BlockPropertyRegistry.java. - @Azusfin- Added: Dynamism Tablet copy support
- #74 Added Forestry wood type detection to
BlockPropertyRegistry.java. Wood type is extracted from NBT rather than metadata. - @vermz99- Added: Forestry wood tile entity support
- #73 Extended
ItemMatterManipulator.javawith transform editing in move mode. Added networking message inMessages.javato synchronize transform changes. UpdatedMMRenderer.javato enforce default transform when rendering paste region. - @Azusfin- Added: Transform editing in move mode, Swap Region button
- Closes GTNH#22047, GTNH#24653
- #72 Created new
ItemConsumerinterface and implementations (AECableItemConsumer,DefaultItemConsumer,IItemConsumer) inconsumers/package. RefactoredPendingBuild.javato use the new consumer system. Registered consumers can provide special handling for items not found in inventory. - @Azusfin- Added: ItemConsumer interface and system, AECableItemConsumer for flexible cable consumption
- Closes GTNH#24609
- #71 Enhanced
ComputerComponentItemProvider.javato add APU to fuzzy matching and implement special handling for loot floppy disks. - @Azusfin- Added: APU and loot floppy disk copy support
- Fixed: Matter Manipulator cannot copy APUs in Quantum Computer racks
- Closes GTNH#25995
- #69 Extended
PatternItemProvider.javato handle the new AE2 Ultimate Pattern item type. - @Azusfin- Added: AE2 Ultimate Pattern copy support
- Closes GTNH#25775
- #68 Enhanced
AECellItemProvider.javato handle fluid cells usingFluidStackdirectly. UpdatedGTAnalysisResult.javaandMMUtils.javato support fluid cell serialization. - @hinyb- Added: Fluid cell copy/paste support
- Fixed: Matter Manipulator crash with filtered ME Output Hatch fluid cells
- Closes GTNH#25866
- #66 Added
fluidTransferRatedetection support inBlockPropertyRegistry.javafor OC Transposer blocks. - @Azusfin- Added: OC Transposer copy support with fluid transfer rate detection
- #47 Added ComputerComponentItemProvider class to handle OC component duplication; treats addressed EEPROMs, HDDs, and floppies specially with size constraints. - @Vlamonster
- Added: OpenComputers component copying
- #44 Extended InteropConstants and MMState cable registry; added OC cable detection in MMUtils and Mods compatibility check. - @Luca-Guettinger
- Added: Open Computers cable support
- #40 Introduced SmartCopyIntegration and WirelessLinkFixer classes; extended MMState and PendingBuild to track and apply advanced copy transformations; requires AE2 PR #1205. - @Luca-Guettinger
- Added: wireless connector auto-linking, auto-proxy CRIB replacement, auto-P2P interface conversion
- #34 Added FMPPartTransforms class to handle FMP/Project Red rotation and placement logic; extended MultipartAnalysisResult to store additional metadata; updated MMRenderer for improved visualization. - @Luca-Guettinger
- Added: FMP/Project Red copy-paste support, rotation handling for multipart blocks, support block failure messages in survival
- #22 Updates imports in BlockPropertyRegistry to gregtech.common.tileentities.machines.outputme.*, adjusts AbstractBuildable and InventoryAdapter, and bumps dependencies and the GTNH gradle conventions (jabel, settings convention 2.0.19, daemon JVM 25). Depends on GT5-Unofficial#5853. - @hinyb
- Added: ME output cache mode support, ME output check mode support
- #18 Added BlockSpec::toDisplayString() method and updated ItemMatterManipulator to use localized tooltip strings. - @Discreater
- Added: localized tooltip strings, BlockSpec::toDisplayString method
Changes
- #81 AECellItemProvider.getStack only calls setFuzzyMode when the installed upgrades include at least one Upgrades.FUZZY card. - @AnsonYeung
- Fixed: NBT pollution on copied AE2 cells without a fuzzy card
- #65 MTEMMUplink.createTooltip uses the new MultiblockTooltipBuilder structure API (beginStructureBlock(9,9,9), addCasing, addSupportAny), and checkMachine adds checkHasAnyEnergy, checkHasMaintenanceHatch and checkHasInputHatch. WirelessLinkFixer switches to unlinkAll and WireLessToolHelper.restoreConnection. Requires GT5-Unofficial PR 7299. - @DylanTaylor1
- Added: energy, maintenance and input hatch checks on the Uplink, new Uplink construction tooltip
- #60 Enhanced
RenderHints.javaandStreamingVertexBuffer.javawith improved rendering logic. UpdatedMMRenderer.javaandMMState.javato prevent AE cable interaction crashes. Dependency updates independencies.gradle. - @RecursivePineapple- Added: Togglable dependency features
- Fixed: AE cable render crash
- #50 WirelessLinkFixer, WirelessBlockMover, InteropConstants and BlockPropertyRegistry now target AE2's TileWirelessBase and the tile.BlockWirelessConnector and tile.BlockWirelessHub blocks. The link map stores a set of destinations per source. The AE2Stuff and bdlib dependencies are dropped and the Gradle daemon JVM toolchain URLs are updated. - @Kogepan229
- Added: support for AE2 Wireless Connector and Wireless Hub
- Removed: AE2Stuff wireless block support
- #21 BlockPropertyRegistry.CALImprintProperty now uses MTECircuitAssemblyLine.getCircuitImprint() and IMPRINT_ID_KEY and stores a CircuitImprint id as a JSON int, replacing the reflective field getter and NBT compound. GT5-Unofficial bumped to 5.09.52.279 for GT5-Unofficial#5771. - @boubou19
- Fixed: Circuit Assembly Line imprint copy with current GregTech
- #19 Refactored chat messaging to use ChatComponentTranslation throughout analysis results and building classes, allowing client-side localization. - @Discreater
- Added: client-side chat localization
- Fixed: server-language forcing on clients
- #15 Language file update correcting grammar in en_US.lang. - @GTNH-Afx237v7
- Fixed: grammar in upgrade description
- #13 In MTEMMUplink.generatePlasmaEU, removed the MTEHatchInputME branch and its reflective storedFluids getter and AE2 imports. Plasma is now read from every input hatch through getTankInfo. The full 2.8.0 contents are not shown. - @Dream-Master
- Removed: ME input hatch special case in the uplink plasma conversion
Bug Fixes
- #91 BlockAnalyzer.tryConsumeItems no longer builds a wildcard ItemId for fuzzy requests on items without subtypes. It always uses ItemId.create on the stack. - @Azusfin
- Fixed: Matter Manipulator planning failing to match AE2 storage cells
- Closes GTNH#26515
- #90 GTAnalysisResult now calls acceptsConfigCopy() on IItemLockable instead of acceptsItemLock(), following GT5-Unofficial#8174. GT5-Unofficial dev dependency bumped from 5.09.54.132 to 5.09.54.183. - @Azusfin
- Fixed: GT item lock compatibility with current GT5-Unofficial
- #86 BlockSpec.setStackData now skips intrinsic properties whose getValue returns null instead of putting them in the map. - @vermz99
- Fixed: crash when middle-click picking a block with null property values in a GUI
- #85 MMUtils gets a getBlockReachDistance helper. For EntityPlayerMP it subtracts 0.5 from the item-in-world-manager reach when not in creative. getHitResult and getLookingAtLocation both use it. - @Jesse-njx
- Fixed: survival target desync from mismatched reach distance
- #82 Added MMUtils.installPatterns, which clones the source InventoryAnalysis and limits slots to 9 * (1 + installed PATTERN_CAPACITY upgrades) for IUpgradeableHost. AEAnalysisResult and AEPartData now call it, and InventoryAnalysis.clone is public. - @Azusfin
- Fixed: Matter Manipulator bypassing Interface Pattern Capacity Card requirements
- Closes Dupes-Exploits-GTNH#361
- #80 ItemMatterManipulator.onUpdate returns early when the world is remote, so the periodic refill logic runs server-side only. - @Azusfin
- Fixed: uplink charging check running on the client
- #77 Reworked the consume path of MMUtils.installUpgrades. The missing-upgrade check is skipped for creative players, and found stacks are decremented against the wanted amount so the warning only fires for a real shortfall. - @Azusfin
- Fixed: AE upgrades not copied in creative mode, missing error message when upgrades are not found
- #67 Added a TEArcaneAssembler entry to InventoryAdapter that rejects slots in the pattern range (PATTERN_SLOT_INDEX up to MAXIMUM_STORED_PATTERNS). Added a Thaumic Energistics dev dependency and a THAUMIC_ENERGISTICS mod name constant. - @tiffit
- Fixed: Matter Manipulator pulling ghost patterns out of the Arcane Assembler as items
- Closes Dupes-Exploits-GTNH#326
- #64 WirelessLinkFixer adapted to the AE2-Unofficial wireless rework (PR 1400): tracks internal wireless destinations, adds links in both directions between partner connectors, and bumps AE2-Unofficial to rv3-beta-997. Depends on AE2-Unofficial PR 1410. - @Kogepan229
- Fixed: AE2 wireless connector and hub link copying
- #63 PendingBuild and PendingMove pass the translation key and args to sendWarningToPlayer and sendErrorToPlayer, so the client translates them. Before, the server ran them through StatCollector (always en_US) and sent the result as a key. - @Eldrinn-Elantey
- Fixed: Block warning messages not translating on dedicated servers
- #61 MMState.securityTerminal is replaced by a transient IActionHost actionHost. connectToMESystem adds a TileWireless branch next to the TileSecurity branch. MMInventory builds PlayerSource from actionHost. - @LazyFlesh
- Added: ME connection through a wireless access point
- Fixed: Matter Manipulator unable to use AE2 wireless connections
- Closes GTNH#25373
- #59 FMPBlockMover.remove and StandardBlockMover.remove call world.removeTileEntity(x, y, z) instead of world.setTileEntity(x, y, z, null), which returned early on null and did nothing. - @Algent
- Fixed: Container duplication when moving blocks with the Matter Manipulator on Iota / Thermos
- Closes Dupes-Exploits-GTNH#307
- #58 Refactored
AEPartData.javato usedownloadSettings()anduploadSettings()methods instead of manual NBT manipulation. This aligns Matter Manipulator's copying behavior with AE2's memory card system. - @Kogepan229- Added: AE2 part settings copy via memory card methods
- Fixed: Matter Manipulator not copying ME Level Emitter item/fluid amounts
- Closes GTNH#25115
- #56 Added bounds check in GTAnalysisResult.apply() and clears ghost circuit data in MMState when substituting CRIBs with proxies to prevent size mismatch. - @Luca-Guettinger
- Fixed: CRIB proxy ArrayIndexOutOfBoundsException
- Closes GTNH#25050
- #52 Updated GTAnalysisResult to use IFluidLockableMui2 API instead of deleted IFluidLockable. - @Luca-Guettinger
- Fixed: GT Pipe copying crash
- Closes GTNH#24736
- #51 AbstractBuildable.isEditable takes an isPlacement flag. It fires ForgeEventFactory.onPlayerBlockPlace for placement or posts BlockEvent.BreakEvent otherwise, and treats a cancelled event as protected. PendingBuild passes true. PendingMove passes false for the source and true for the destination. - @Lyfts
- Fixed: Matter Manipulator bypassing grief protection and spawn protection
- Closes GTNH#22410
- #49 GTAnalysisResult and InventoryAdapter now use getAmperes(), setAmperes() and getHeat() instead of reading the fields directly, which avoids IllegalAccessError on protected fields. MTEMMUplink moves to the new gregtech.api.structure.error.StructureError and the validateStructure signature without a context, the localizeStructureErrors override is removed, and dependencies.gradle bumps versions. - @RecursivePineapple
- Fixed: IllegalAccessError when copying energy tunnel hatches
- #48 Registers an orientation property for li.cil.oc.common.tileentity.traits.Rotatable in BlockPropertyRegistry.initOpenComputers, mapping yaw and pitch to Orientation, only when OpenComputers is loaded. - @Vlamonster
- Added: OpenComputers orientation support
- Fixed: wrong orientation for OpenComputers blocks
- #46 Introduced CarpentersBlocksAnalysisResult to capture Carpenter's Block state and custom shapes; extended PendingBlock to apply this state on placement. - @Luca-Guettinger
- Added: Carpenter's Blocks state preservation
- Fixed: Carpenter's Blocks copying
- Closes GTNH#21078
- #43 Extended InventoryAdapter to handle Crafting Input Buffer's manual slot configuration. - @Luca-Guettinger
- Fixed: Crafting Input Buffer manual slot copying
- #42 MMInventory.injectFluidsIntoCells now iterates mainInventory, copies a single cell from the stack, fills it through IFluidContainerItem and re-adds it to the inventory. The old stream filter on stackSize == 1 is removed. - @Luca-Guettinger
- Fixed: Stacked fluid cells not being filled by the Matter Manipulator
- #41 Corrected packet handling in MMUtils; bug introduced in PR #19. This crash prevented players from using copy mode entirely. - @Luca-Guettinger
- Fixed: plan creation disconnect
- Closes GTNH#24223
- #39 Extended BlockSpec to track slab variants; adjusted PendingBuild cost calculation to correctly count slab usage. - @Luca-Guettinger
- Fixed: slab consumption and copying
- Closes GTNH#22781
- #37 Refactored block movement system: replaced monolithic PendingMove with strategy pattern (BlockMover interface, FMPBlockMover, GTBlockMover, StandardBlockMover, WirelessBlockMover). Wireless components now use dedicated mover logic. Previously they were not relocated properly, breaking wireless connections when builds were copied or moved. - @Luca-Guettinger
- Added: BlockMover abstraction, FMPBlockMover, GTBlockMover, StandardBlockMover, WirelessBlockMover
- Fixed: wireless hub/connector relocation
- Closes GTNH#24269
- #36 Modified InventoryAnalysis and PendingBlock to properly notify AE2 of new hatch availability; likely triggers AE2's cache invalidation on block placement. - @Luca-Guettinger
- Fixed: AE2 hatch detection after MM replacement
- #33 Added AEPartData and enhanced AEAnalysisResult to properly handle and copy fluid configuration in dual interface blocks. - @Luca-Guettinger
- Added: AEPartData fluid handling, dual interface fluid support
- Fixed: fluid copying in dual interfaces, Level Emitter settings copying
- Closes GTNH#23587, GTNH#23621
- #31 ItemMatterManipulator.setState no longer replaces the stack tag with state.save(). It copies the state's keys (jv, dv, config, installedUpgrades, charge, and encKey/uplinkAddress when present, else removes them) into the existing tag. - @WhyDoLogic2
- Fixed: Matter Manipulator losing outside NBT data when changing modes
- Closes GTNH#23997
- #28 GTAnalysisResult reflected on MTEIntegratedOreFactory field "sMode", which was renamed to "mode". The getter and setter method handles now use "mode". - @LazyFlesh
- Fixed: Matter Manipulator crash when analysing an Integrated Ore Factory
- Closes GTNH#23966
- #27 Removed the client Textures holder class. MTEMMUplink now defines its ACTIVE_GLOW, IDLE_GLOW and OFF icon containers as local static fields, using the optional resource API from GT5-Unofficial. GT5-Unofficial is bumped from 5.09.52.272 to 5.09.52.360 for dev runtime. - @UltraProdigy
- Removed: client Textures holder class
- Fixed: client freeze or crash when opening the UV quest tab
- Closes GTNH#23925
Performance
- #24 DeMemberator.transform returns early when the class name does not start with com.recursive_pineapple.matter_manipulator. - @danyadev
Internal / Refactor
- #62 InteropConstants.isGTRenderer now delegates to GregTechAPI.isGTRenderer, dropping direct references to BartWorks, GoodGenerator and TecTech render blocks. Dependency versions updated. - @RecursivePineapple
- Removed: hardcoded list of GT render blocks
- #57 BoxRenderer, RenderHints, StreamingVertexBuffer and FixedLengthVertexBuffer switch from CapturingTessellator to LocalTessellator via TessellatorManager.enterLocalMode, and use the POSITION_TEXTURE_COLOR vertex format and the renamed allocatedBytes field. Bumps GTNHLib and other deps, and comments out the removed mHasBeenUpdated assignment in GTAnalysisResult. Requires GTNHLib PR 393. - @sisyphussy
- Removed: CapturingTessellator usage
- #29 GTAnalysisResult uses MTEIntegratedOreFactory.getMachineMode()/setMachineMode() and drops the MethodHandle field accessors. - @Alexdoru
- #26 Adds a client-only Textures class holding IIconContainers built with BlockIcons.customOptional/custom, replacing the CustomIcon constants in MTEMMUplink. getTexture is marked SideOnly(CLIENT). - @leagris
- #20 Replaced MMUtils.formatNumbers with NumberFormatUtil.formatNumber and formatFluid in MMInventory and ItemMatterManipulator, and removed the three formatNumbers overloads from MMUtils. Bumped GTNHLib to 0.9.6 and other dependencies. - @Connor-Colenso
Chores
- #55 dependencies.gradle: EnderIO compileOnly dependency changed from 5.2.62 to 2.10.27; also trims trailing whitespace. - @dipo33
- Fixed: incorrect EnderIO dependency version
- #53 Bumps dependencies. MTEMMUplink.checkMachine now uses the new three-argument signature with a StructureError list, and validateStructure and explodesOnComponentBreak overrides are removed. GTAnalysisResult uses outputHatch.setMode(). - @Kogepan229
- #30 Bumps GT5-Unofficial to 5.09.52.391 and changes the AuthorPineapple static import in MTEMMUplink to gregtech.api.enums.GTAuthors, following GT5-Unofficial#5261. - @iouter
- #25 Bumps compileOnly GT5-Unofficial from 5.09.52.279 to 5.09.52.360 to account for GT5-Unofficial#5781. - @boubou19
- #16 QuadViewComparator now compares ModelQuadView instead of QuadView. BoxRenderer and RenderHints use var for the pooled quads list. Bumped GTNHLib to 0.8.0, StructureLib, AE2, Avaritia, GT5-Unofficial, Hodgepodge and related dependencies. - @ah-OOG-ah
Contributors
Everyone who authored, reviewed or co-authored a change on this page, with how many of them:
@RecursivePineapple (44), @Azusfin (14), @Luca-Guettinger (13), @Dream-Master (10), @UltraProdigy (7), @Kogepan229 (5), @vermz99 (4), @AshVz (3), @boubou19 (3), @Alexdoru (2), @cubefury (2), @Discreater (2), @hinyb (2), @lc-1337 (2), @Ruling-0 (2), @Vlamonster (2), @ah-OOG-ah (1), @Algent (1), @Angry3vilbot (1), @AnsonYeung (1), @chrombread (1), @Connor-Colenso (1), @danyadev (1), @dipo33 (1), @DylanTaylor1 (1), @Eldrinn-Elantey (1), @glektarssza (1), @GTNH-Afx237v7 (1), @Guvante (1), @iouter (1), @Jesse-njx (1), @koolkrafter5 (1), @kuba6000 (1), @LazyFlesh (1), @LazyFleshWasTaken (1), @leagris (1), @Lyfts (1), @Sanduhr32 (1), @sisyphussy (1), @TheYoingLad (1), @tiffit (1), @WhyDoLogic (1), @WhyDoLogic2 (1)