Skip to content

OpenComputers ​

48 merged pull requests.

Needs action on an existing world:

  • [check your build] #163 Fixed Blood Magic integration returning incorrect sacrifice multiplier value.
    Check your programs that read a Blood Magic altar through an Adapter. getSacrificeMultiplier handed back the altar's capacity in 2.8.4, which was simply the wrong number, and it hands back the actual sacrifice multiplier now. Anything that leaned on the old reading as a stand-in for capacity has to ask for capacity instead.
  • [read before updating] #169 Major refactor adding full fluid and essentia support to AE2 integration through the new StackAPI. Fixes multiple crashes and deadlocks related to AE2 inventory operations.
    OpenComputers programs that write ME Interface crafting patterns will error after updating: setInterfacePatternInput and setInterfacePatternOutput now take the pattern index as the second argument (slot, index, database, entry, size) instead of the last. Swap the order in your scripts. Nothing else changed: the store, clear and essentia calls are the same, and the AE fluid support is new.
  • [check your build] #175 Fixed GeolyzerEvent to return correct metadata values for GregTech machines instead of block rotation data. Players scanning machines with the Geolyzer will now see accurate metadata information.
    Check your programs that call geolyzer.analyze on a GregTech machine. The result gained machineType, metaId and gtMetaId, and its sensorInformation comes from the machine itself now, so only a real GregTech tile entity carries it and a non-GregTech block that answered through the same capability in 2.8.4 hands back nothing. Those sensorInformation strings are untranslated keys now, in the format described under the scanner refactor.
  • [check your build] #179 The Lapotronic Supercapacitor now reports correct stored and capacity figures to OpenComputers through a driver of its own.
    Check your programs that read a Lapotronic Supercapacitor through an Adapter. The bank answers as its own component named LSC now, which outranks the generic gt_energyContainer it presented in 2.8.4, so a lookup for gt_energyContainer on an LSC finds nothing and one for LSC finds it. The stored and capacity numbers were wrong on an LSC before and are right now, and getStoredEUString and getEUCapacityString hand back the full figure as a string for banks too large for a long.
  • [check your build] #211 Fixed Lua indexing in Applied Energistics 2 integration to use 1-based indexing (standard for Lua) instead of 0-based, with backward compatibility for Thaumic Energistics. Scripts expecting standard Lua array behavior will now work correctly.
    Check your programs that set an AE2 bus filter. Slots are counted from 1 now, matching the rest of Lua: getPartConfig and setPartConfig address the first slot as 1 where 2.8.4 addressed it as 0, on item import, export and storage buses and on the Thaumic Energistics essentia equivalents, so every explicit slot number in your programs moves up by one. A call that omits the slot argument behaves as it did.
  • [config] #215 Made clipboard signal batching feature opt-in via configuration to maintain backward compatibility with existing scripts and setups that depend on the original per-line signal behavior.
    If you have edited the OpenComputers config file, the maxClipboard key is gone and maxClipboardSize takes over from it, defaulting to 65536, so a value you set under the old name is ignored. Two keys join it: enableClipboardBatching, off by default so paste behaviour matches 2.8.4, and clipboardBatchSize.

New Features ​

  • #219 Created DriverCellWorkbench.scala providing methods to query cell type, get/set partitions, manage restrictions, and handle oredict filters; updated AEUtil and ModAppEng to register the driver. - @Armisael5
    • Added: DriverCellWorkbench with partition and restriction management, cell type detection and querying
  • #218 Added ColorUtils.java class using GTNHLib ColorResource; modified CallbackDocHandler and PagedUsageHandler to apply colors to indented text in documentation. - @Ranzuu
    • Added: ColorUtils class, color formatting for NEI documentation
  • #216 Added configurable dropfile limits (maxDropFileSize, dropFileChunkSize); refactored DropFileManager and related packet handling to send large files in multiple chunks; updated PacketSender and InputBuffer to handle file chunking. - @hinyb
    • Added: DropFileManager server-side upload handling, DropFileSession state management, maxDropFileSize and dropFileChunkSize settings, localization strings for upload limits
    • Fixed: packet too large error for file uploads
  • #210 Modified BlockDataProvider.scala to include Transposer transfer rate information in WAILA data. - @Azusfin
    • Added: Transposer transfer rate WAILA display
  • #206 Created three new driver classes (DriverBECDiode, DriverBECIONode, DriverBECStorage) that wrap @OCMethod annotated methods from BEC MTEs into OC-compatible signatures. - @RecursivePineapple
    • Added: BEC Diode driver, BEC IONode driver, BEC Storage driver
  • #196 Added computer.realTime to the libcomputer whitelist in machine.lua, making the native API function accessible from user programs. - @Eldrinn-Elantey
    • Added: computer.realTime() access in user programs
  • #194 Added nbt.lua helper library, enhanced NetworkControl and DataCard with NBT reading/write capabilities, updated AEStackFactory to support long quantities, and modified decodeNBT to persist type information. ConverterNBT expanded with encoding/decoding support. - @hinyb
    • Added: getCraftable method, NBT support in AE2 driver, nbt.lua helper library, Table parameter support
    • Fixed: getFluidsInNetwork() quantity capping, Pattern setting with ID and damage values
    • Migration: Update decodeNBT output handling to work with new type-preserving struct using nbt.lua helper; scripts relying on old decodeNBT output structure must be rewritten.
    • Closes GTNH#24848, GTNH#25263
  • #188 Updated NetworkControl and UpgradeAE to support long values in request() method, made size parameter optional, and enhanced updateAE to accept table parameters for more flexible updates. - @hinyb
    • Added: Long quantity support in AE2 API, Table parameter support for updateAE
  • #180 Added swap() method to InventoryTransfer.scala trait and swapStacks() utility method to InventoryUtils.scala. Method returns boolean indicating success. - @Vlamonster
    • Added: swap method for transposers, swapStacks utility function
  • #178 Added FileUploadSupport.java for lwjgl3 integration, new drop_file event type in PacketType, TextBuffer API extension, and boot script 95_drop_file.lua to handle dropped files in OpenOS. - @hinyb
    • Added: drop_file event, file upload capability with lwjgl3ify, boot script for drag-drop handling
  • #173 Added DriverPartInterfaceTerminal with methods for searching interfaces (getInterfaces, getInterfacesByName, getInterfacesByLocation) and moving patterns (send, sendBatch). - @hinyb
    • Added: Interface Terminal driver, pattern management automation
  • #170 Added UpgradeArcaneCrafting class and driver providing craft(), craftNormal(), and craftArcane() methods for Thaumcraft integration. - @hinyb
    • Added: Arcane Crafting Upgrade item, arcane crafting functions
  • #169 Refactored AE2 integration to use StackAPI instead of legacy item-only API. Added fluid/essentia support, thread-safety fixes, ae2fc integration, and changed setPatternSlot parameter order. - @hinyb
    • Added: fluid support via StackAPI, essentia support, ae2fc integration, network_changed event subscription, AEStackFactory, AE2Bridge utility
    • Removed: legacy ConverterPattern.java, legacy allItems implementation
    • Fixed: server crashes in AE2 operations, thread-safety in allItems, breaking changes in AE2 API, experimental persistence issues
    • Migration: OpenComputers programs that write ME Interface crafting patterns will error after updating: setInterfacePatternInput and setInterfacePatternOutput now take the pattern index as the second argument (slot, index, database, entry, size) instead of the last. Swap the order in your scripts. Nothing else changed: the store, clear and essentia calls are the same, and the AE fluid support is new.
    • Closes GTNH#19567, GTNH#19874, GTNH#20839, GTNH#23349, GTNH#23718
  • #167 Added decodeNBT() method to DataCard that decompresses and deserializes gzip NBT data. - @zyf051520
    • Added: NBT decoding to Data Card
  • #165 Added new DriverInfusionMatrix and improved ConverterAspectItem in Thaumcraft integration. - @hinyb
    • Added: Thaumcraft Infusion Matrix driver, improved aspect item conversion

Changes ​

  • #221 Replaced getCondensateFilter/setCondensateFilter callbacks with getCondensateFilterAt/setCondensateFilterAt in DriverBECDiode.java to match the GT5-Unofficial Maxwell Gate improvements that added multiple filter slots. - @hxync
    • Added: getCondensateFilterAt OpenComputers callback, setCondensateFilterAt OpenComputers callback
    • Removed: getCondensateFilter OpenComputers callback, setCondensateFilter OpenComputers callback
    • Migration: Any OpenComputers scripts accessing Maxwell Gate filters must switch from getCondensateFilter/setCondensateFilter to getCondensateFilterAt/setCondensateFilterAt with slot indices.
  • #215 Added enableClipboardBatching, maxClipboardSize, and clipboardBatchSize configuration options; modified PacketHandler and Keyboard to respect the opt-in flag. - @hinyb
    • Added: enableClipboardBatching setting, maxClipboardSize setting, clipboardBatchSize setting
    • Migration: If you have edited the OpenComputers config file, the maxClipboard key is gone and maxClipboardSize takes over from it, defaulting to 65536, so a value you set under the old name is ignored. Two keys join it: enableClipboardBatching, off by default so paste behaviour matches 2.8.4, and clipboardBatchSize.
  • #212 Modified Keyboard and Machine components to batch clipboard input using misc.maxClipboard configuration; removed unnecessary energy charges during clipboard processing; updated PacketSender to handle chunked clipboard data across line boundaries. - @shironakoushi
    • Added: clipboard batch processing, energy optimization for clipboard input
    • Fixed: clipboard paste truncation for files with many short lines
  • #209 Updated InternetFilteringRule.scala to block RFC 6052 NAT64 prefix (64:ff9b::/96). - @Pxx500
  • #200 Updated DriverPartInterfaceTerminal to use new AE2 API signatures from AE2 pull request #1193. - @UltraProdigy
  • #187 Added language strings to en_US.lang and ru_RU.lang files. Updated Transposer.scala to use StatCollector.translateToLocalFormatted() instead of hardcoded English text. - @Eldrinn-Elantey
    • Added: Localized transposer tooltip entries
  • #171 Updated Screen block bottom-face UV ordering in rendering when fixBottomFaceUV is enabled. - @leagris
    • Fixed: screen connected texture rendering with Hodgepodge fixBottomFaceUV
  • #161 Updated dependencies and modified AE2 integration code (ConverterCellInventory, ConverterFluidCellInventory, WirelessHandlerUpgradeAE) to work with new AE2 universal GUI API. - @DarkShadow44
    • Migration: Dependency update required; code using OpenComputers AE integration should be tested against new Applied-Energistics-2 changes.

Bug Fixes ​

  • #220 Modified PacketHandler.scala to distinguish utility/broken packets and skip AFK timer updates for them, only updating AFK status on player-initiated packets. - @Niki4tap
    • Fixed: AFK timer spam from TextBufferInit packets
  • #214 Updated UpgradeBeekeeperUtil.java to fix GT loader check logic for version compatibility. - @felixfour
    • Fixed: GT version detection for Forestry integration
  • #213 Modified SubscriptionBase.scala to serialize stacks to NBTTagCompound; added ExtendedNBT utility class to handle the serialization. - @hinyb
    • Added: ExtendedNBT serialization utility
    • Fixed: ME Interface subscription console warnings
    • Closes GTNH#26028
  • #211 Corrected array indexing in InterfaceEnvironmentBase and PartEnvironmentBase from 0-based to 1-based; added PartEnvironmentBase shim in thaumicenergistics module to maintain backward compatibility with legacy method names. - @hinyb
    • Added: backward compatibility layer for thaumicenergistics
    • Fixed: AE2 Lua API indexing, thaumicenergistics compatibility
    • Migration: Check your programs that set an AE2 bus filter. Slots are counted from 1 now, matching the rest of Lua: getPartConfig and setPartConfig address the first slot as 1 where 2.8.4 addressed it as 0, on item import, export and storage buses and on the Thaumic Energistics essentia equivalents, so every explicit slot number in your programs moves up by one. A call that omits the slot argument behaves as it did.
  • #205 Modified EventHandler.scala to prevent wrench duplication by checking for container items during recipe crafting. - @hinyb
    • Fixed: wrench/screwdriver duplication with floppy drives
    • Closes GTNH#23222
  • #193 Applied upstream fix to Sound.scala to properly dispose of sound resources and prevent handle leaks. - @Alexdoru
    • Fixed: Sound resource memory leak
  • #190 Isolated AE2 and Thaumic Energistics registration to prevent NoClassDefFoundError when mods are absent. Added proper module loading guards. - @hinyb
    • Fixed: NoClassDefFoundError when AE2 is missing
  • #189 Updated Sound.scala to properly dispose of sound references and cleaned up world references in FakeNetworkManager and Player agent classes. - @Alexdoru
    • Fixed: World memory leaks in sound system and agents
  • #186 Updated StaticSimpleEnvironment template and SideTracker to properly clear world references. Added leak detection in OpenComputers startup. - @Alexdoru
    • Fixed: Server-side memory leak from retained world references
  • #184 Replaced legacy immediate-mode GL rendering with Tessellator-based approach in TextBufferRenderCache and font renderer classes to be compatible with Angelica's modernized rendering pipeline. - @PinkYuDeer
    • Fixed: Garbled text on OC screens with Angelica 2.x installed
  • #183 Updated AEStackFactory, NetworkControl, and ModAppEng to use long instead of int for item quantities. Removed unused import from ModThaumicEnergistics. - @hinyb
    • Fixed: Integer overflow on large AE2 item quantities
  • #182 Added special P2P handling in ModAppEng.scala to detect and copy frequency data when shift+clicking P2P tunnels with a memory card. Updated Player.scala agent to support the operation. - @MarkinoTeck
    • Fixed: P2P Tunnel frequency not copying with memory card
  • #179 Added DriverLSC.scala to properly interface with Large Storage Containers, updated DriverEnergyContainer to handle LSC-specific energy reporting. - @hinyb
    • Added: LSC driver integration
    • Fixed: LSC OpenComputers function returning incorrect values
    • Migration: Check your programs that read a Lapotronic Supercapacitor through an Adapter. The bank answers as its own component named LSC now, which outranks the generic gt_energyContainer it presented in 2.8.4, so a lookup for gt_energyContainer on an LSC finds nothing and one for LSC finds it. The stored and capacity numbers were wrong on an LSC before and are right now, and getStoredEUString and getEUCapacityString hand back the full figure as a string for banks too large for a long.
    • Closes GTNH#23695
  • #175 EventHandlerGregTech.scala now correctly extracts metadata (gtMetaId) from GregTech MetaTileEntity objects instead of returning block rotation values. - @MarkinoTeck
    • Fixed: Incorrect metadata values returned by Geolyzer.analyze() for GregTech machines
    • Migration: Check your programs that call geolyzer.analyze on a GregTech machine. The result gained machineType, metaId and gtMetaId, and its sensorInformation comes from the machine itself now, so only a real GregTech tile entity carries it and a non-GregTech block that answered through the same capability in 2.8.4 hands back nothing. Those sensorInformation strings are untranslated keys now, in the format described under the scanner refactor.
  • #168 Updated coroutine.wrap implementation in boot/01_process.lua to check resume status and propagate errors according to Lua specification. - @asquared31415
    • Fixed: coroutine.wrap error propagation in openOS
  • #163 Corrected return value in DriverBloodAltar.getSacrificeMultiplier(). - @hinyb
    • Fixed: Blood Magic sacrifice multiplier calculation
    • Migration: Check your programs that read a Blood Magic altar through an Adapter. getSacrificeMultiplier handed back the altar's capacity in 2.8.4, which was simply the wrong number, and it hands back the actual sacrifice multiplier now. Anything that leaned on the old reading as a stand-in for capacity has to ask for capacity instead.
  • #160 Modified InternetFilteringRule to skip private-IP validation when an explicit IP range is specified via ip: filtering. - @tomprince
    • Fixed: non-local IP filtering rules rejection
  • #158 Corrected Transposer filter logic in microcontroller implementation. - @Vlamonster
    • Fixed: Transposer filter in Microcontroller

Performance ​

  • #201 Reduced Integer and Double boxing operations in DynamicFontRenderer and TextureFontRenderer by using primitive types where possible. - @mitchej123
  • #195 Optimized TextBuffer.scala rendering logic and improved PacketHandler efficiency to reduce redundant operations. - @Caedis
  • #176 Refactored ASM transformation classes to reduce redundant operations and improve caching efficiency in ClassTransformer and related transformer implementations. - @danyadev
    • Removed: TransformerStripMissingClasses
    • Fixed: Slow ASM transformation during game startup
  • #162 Added conditional check to skip glGetError() calls when GL error checking is disabled in RenderState. - @mitchej123
    • Fixed: unnecessary glGetError calls

Removals ​

  • #174 Removed RecipeHandler fluid canner integration code and recipe definition. - @FourIsTheNumber
    • Removed: fluid canner recipe handler, fluid canner recipe

Internal / Refactor ​

  • #177 ClassTransformer.scala split into separate Java classes (ASMHelpers, ClassTransformer, TransformerEntityLiving, TransformerInjectEnvironmentImplementation, TransformerInjectInterfaces, TransformerRenderLiving, TransformerStripMissingClasses) with ObfNames.java for shared obfuscation mappings. - @danyadev
    • Added: Java ASM transformer classes, ObfNames mapping class
    • Removed: ClassTransformer.scala (Scala implementation)
  • #164 Replaced CofhCore#server reference with direct MinecraftServer instance in TpsCard. - @Alexdoru

Contributors ​

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

@hinyb (22), @Dream-Master (17), @UltraProdigy (8), @guneykabel (7), @Alexdoru (6), @Azusfin (5), @Eldrinn-Elantey (4), @Kogepan229 (4), @boubou19 (3), @Guvante (3), @mitchej123 (3), @chrombread (2), @danyadev (2), @DarkShadow44 (2), @koolkrafter5 (2), @MarkinoTeck (2), @Pxx500 (2), @Vlamonster (2), @Algent (1), @Armisael5 (1), @asquared31415 (1), @AX3Lino (1), @Caedis (1), @felixfour (1), @FourIsTheNumber (1), @hxync (1), @leagris (1), @Luca-Guettinger (1), @Nana-Sakura (1), @Niki4tap (1), @Nikolay-Sitnikov (1), @OvermindDL1 (1), @PinkYuDeer (1), @PLASMAchicken (1), @Ranzuu (1), @RecursivePineapple (1), @Ruling-0 (1), @shironakoushi (1), @spacebuilder2020 (1), @tomprince (1), @wlhlm (1), @Worive (1), @zyf051520 (1)