Skip to content

OpenComputers ​

51 merged pull requests.

Needs action on an existing world:

  • [read before updating] #169 OpenComputers AE2 integration now supports fluids and essentia the same way it supports items. It adds drivers for AE2 Fluid Crafting fluid interfaces, import and export buses and storage buses, plus Storage Bus and Ore Filter support and a network_changed event. setPatternSlot has a new argument order: slot, index, then the optional database, entry and size. It fixes the crashes from allItems and the ticking grid node crash on servers.
    OpenComputers programs that use the AE2 interface or network calls have to change three things: setInterfacePatternInput and setInterfacePatternOutput take the pattern index as the second argument (slot, index, database, entry, size) instead of the last; craftables from getCraftables() have getStack() in place of getItemStack(); getEssentiaInNetwork() names each essentia by its aspect tag, such as aer, instead of the gaseous essentia fluid name.
  • [check your build] #175 Geolyzer scans of GregTech machines now add machineType, metaId (the meta tile class name) and gtMetaId (the GregTech meta tile ID); the block's metadata field is unchanged. sensorInformation now comes from the GregTech machine itself, so a block that is not a GregTech tile entity, such as the BartWorks Heated Water Pump, no longer returns it.
    Check programs that call geolyzer.analyze on a GregTech machine: the result gained machineType, metaId and gtMetaId, and sensorInformation now comes from the GregTech machine itself, so a block that is not a GregTech machine, such as the BartWorks Heated Water Pump, no longer returns it. Its lines follow the scanner format described under the scanner change.
  • [check your build] #179 The Lapotronic Supercapacitor reports correct stored and capacity figures to OpenComputers; its getStoredEU, getEUCapacity and String calls come from the bank itself.
    Programs that read a Lapotronic Supercapacitor through an Adapter keep finding it as gt_machine. getStoredEU and getEUCapacity return the real figures now (2.8.4 returned a wrapped number on large banks), and getStoredEUString and getEUCapacityString hand back the full figure as a string for banks past the long limit.

New Features ​

  • #222 Added DriverMEInputHatch (SidedBlock) with bus and hatch environments for MTEHatchInputBusME and MTEHatchInputME, registered in ModGregtech. Bumped the GT5-Unofficial compileOnly dependency to 5.09.54.175. - @hxync
    • Added: OpenComputers API for ME stocking input buses and hatches
    • Migration: Programs that looked up a Stocking Input Bus or Hatch (ME) as gt_machine find it as me_inputbus or me_inputhatch now.
  • #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 Adds getCraftable and table-based lookups to the AE2 and ThaumicEnergistics NetworkControl traits. ConverterNBT now emits typed tags (__nbt_type/__value) so they can be re-encoded. Adds the OpenOS lib nbt.lua proxy helper and DataCard NBT functions. AEFluidStack converter now puts a long amount. - @hinyb
    • Added: getCraftable callback for AE2 network, table arguments for get*InNetwork callbacks, NBT support for item stacks in AE2 callbacks, DataCard NBT modification functions, nbt.lua library
    • Fixed: getFluidsInNetwork capping fluid amounts at max int, no way to set patterns by ID and damage values
    • Migration: Update scripts that use decodeNBT output to require the new nbt library (nbt.lua) and access values through it.
    • Closes GTNH#24848, GTNH#25263
  • #188 request() uses args.optLong instead of optInteger. AEStackFactory falls back to a size of 1 via getOrElse when size is missing. UpgradeAE.scala is reworked, using MapWrapper and DatabaseAccess helpers, to let the update function take a table. - @hinyb
    • Added: table argument for AE upgrade update, optional size field for AE stacks, long amounts in craft request
  • #182 Added ModAppEng.MemoryCard with isMemoryCard and handleShiftClick, which selects the part on the IPartHost and calls onShiftActivate. The agent Player uses it when sneaking with a memory card in hand. - @MarkinoTeck
    • Added: shift+click memory card support on AE2 P2Ps for agents
  • #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 the AE2 integration onto the new StackAPI with AEStackFactory, ConverterAEStack and an AE2Bridge helper. Added ae2fc drivers for the fluid interface, fluid import, export and storage buses, and a fluid packet converter. Made allItems thread-safe, subscribed to network changes, and reordered setPatternSlot to match storeInterfacePattern and clearInterfacePattern. - @hinyb
    • Added: Fluid and essentia support in OpenComputers AE2 drivers, AE2 Fluid Crafting drivers for fluid interface, import bus, export bus and storage bus, Storage Bus and Ore Filter integration, network_changed event
    • Fixed: Server crash from OpenComputers allItems, Crash on the ticking grid node with AE2 Fluid Crafting, getStack returning null in experimental persistence, Broken finalOutput handling after the AE change
    • Migration: OpenComputers programs that use the AE2 interface or network calls have to change three things: setInterfacePatternInput and setInterfacePatternOutput take the pattern index as the second argument (slot, index, database, entry, size) instead of the last; craftables from getCraftables() have getStack() in place of getItemStack(); getEssentiaInNetwork() names each essentia by its aspect tag, such as aer, instead of the gaseous essentia fluid name.
    • 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 ​

  • #226 application.conf: opencomputers maxSignalQueueSize default changed from 256 to 1024, with the comment updated. Existing configs keep their stored value. - @shironakoushi
  • #221 DriverBECDiode.java callbacks now wrap the MTEBECDiode multi-filter API (1-based slot tables). Removes single-filter callbacks. Bumps GT5-Unofficial compileOnly dependency to 5.09.54.124. The body also mentions getCondensateFilterAt and setCondensateFilterAt, but the visible diff shows the table-based callbacks. - @hxync
    • Added: getCondensateFilterCount callback, getCondensateFilters callback, setCondensateFilters callback
    • Removed: getCondensateFilter callback, setCondensateFilter callback
    • Fixed: other Maxwell Gate filter slots not reachable from OpenComputers
  • #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
  • #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
  • #161 Reworked ConverterFluidCellInventory to use AE2's ICellInventory and check getChannel, added channel checks to ConverterCellInventory, and implemented hasInfinityPower and hasInfinityRange in WirelessHandlerUpgradeAE. Dependencies moved to AE2 rv3-beta-754 and AE2FluidCraft-Rework 1.5.30. - @DarkShadow44
  • #160 Removed the extra predicate in InternetFilteringRule that required any-local, loopback, link-local or site-local addresses for ip: rules, so only the given address or range is matched. - @tomprince
    • Removed: private-address requirement for ip: filtering rules

Bug Fixes ​

  • #225 DriverBlockFluidInterface and DriverPartFluidInterface get/setFluidInterfaceConfiguration now subtract 1 from the slot argument, with the default slot changed from 0 to 1. - @Azusfin
    • Fixed: fluid interface API still using 0-indexed slots
  • #220 PacketHandler now calls func_143004_u only for packet types other than TextBufferInit and RobotStateRequest, and does it after dispatch inside the try block. - @Niki4tap
    • Fixed: OpenComputers packets breaking AFK detection
  • #215 Adds enableClipboardBatching (default false), maxClipboardSize (default 65536) and clipboardBatchSize (default 256, replaces maxClipboard) to Settings and application.conf. Keyboard uses clipboardParts only when batching is on, otherwise linesWithSeparators. Client and server size checks use the new maxClipboardLength. - @hinyb
    • Added: enableClipboardBatching config option, maxClipboardSize config option
    • Removed: maxClipboard config option
    • Fixed: clipboard signal batching changing behaviour for existing scripts
  • #214 Updated UpgradeBeekeeperUtil.java to fix GT loader check logic for version compatibility. - @felixfour
    • Fixed: GT version detection for Forestry integration
  • #213 SubscriptionBase.postChange converts each stack map through the new ExtendedNBT.mapToNbtRecursively before sending the computer.signal, so the signal arguments are valid types. - @hinyb
    • Fixed: server log warnings from me_interface.setItemEventSubscription
    • Closes GTNH#26028
  • #211 Interface and part config get/set subtract 1 from the slot argument (optSlot / checkInteger - 1). ConvertAEEssentiaStack uses getTag instead of getName. Adds thaumicenergistics PartEssentiaBusBase to accept an aspect name string as well as a table. - @hinyb
    • Added: aspect name string argument for essentia bus config
    • Fixed: AE2 OpenComputers callbacks using 0-based slot indexes, essentia name not matching the older getTag behaviour
  • #209 Added 64:ff9b::/96 (RFC 6052) to the blocked IPv6 ranges in InternetFilteringRule. - @Pxx500
    • Added: 64:ff9b::/96 to the internet filter blocklist
    • Fixed: internet filter bypass through NAT64 addresses
  • #205 In EventHandler's recraft handling, the extra wrench stack is only added when the item has no container item. - @hinyb
    • Fixed: wrench and screwdriver duplication with floppy drives
    • Closes GTNH#23222
  • #195 Added TextBuffer.isUseableByPlayer, a squared-distance check of 64 that includes multiblock screen parts, and applied it to clipboard, dropFile, copyToAnalyzer and sendMouseEvent. PacketHandler caps client text at 64KB in onClipboard and onFileDrop, and adds isFinite and isPlayerWatchingHost helpers. - @Caedis
    • Fixed: screen packets accepted from players out of reach, unbounded clipboard and dropped file size from modified clients
  • #193 Sound.scala now keys sources in a WeakHashMap and holds tile entities in WeakReference inside queued Start and Stop commands. Commands whose tile entity was collected are dropped. Cherry-picked from upstream. - @Alexdoru
    • Fixed: OpenComputers sound leak
  • #190 Moved the AEStackFactory.register calls in ModAppEng and ModThaumicEnergistics into a lazy val that initialize() touches, so the AE2 classes load only when the integration runs. - @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 glBegin/glEnd immediate mode and the compiled display-list cache in the font renderers and TextBufferRenderCache with Tessellator draws. Removed the TextBufferRenderCache tick handler registration. - @PinkYuDeer
    • Removed: display-list cache for screen text
    • Fixed: garbled OpenComputers screen text with Angelica 2.x
  • #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
  • #179 Added DriverLSC, a SidedBlock for MTELapotronicSuperCapacitor, registered in ModGregtech. DriverEnergyContainer.Environment now implements NamedBlock with priority -1, so the LSC driver takes precedence. - @hinyb
    • Added: OpenComputers driver for the Lapotronic Supercapacitor
    • Fixed: Incorrect values from LSC OpenComputers functions
    • Migration: Programs that read a Lapotronic Supercapacitor through an Adapter keep finding it as gt_machine. getStoredEU and getEUCapacity return the real figures now (2.8.4 returned a wrapped number on large banks), and getStoredEUString and getEUCapacityString hand back the full figure as a string for banks past the long limit.
    • Closes GTNH#23695
  • #175 EventHandlerGregTech now reads IGregTechTileEntity.getMetaTileEntity and adds sensorInformation, machineType, metaId and gtMetaId (from getMetaTileID) to the Geolyzer analyze data. The capability lookup for IGregTechDeviceInformation was removed. - @MarkinoTeck
    • Added: machineType and metaId fields in Geolyzer scans of GregTech machines
    • Fixed: Wrong metadata in Geolyzer scans of GregTech machines
    • Migration: Check programs that call geolyzer.analyze on a GregTech machine: the result gained machineType, metaId and gtMetaId, and sensorInformation now comes from the GregTech machine itself, so a block that is not a GregTech machine, such as the BartWorks Heated Water Pump, no longer returns it. Its lines follow the scanner format described under the scanner change.
  • #171 Screen.getIcon reads the hodgepodge.FixesConfig.fixBottomFaceUV flag from Launch.blackboard and uses a different unflipped coordinate order for the DOWN face. - @leagris
    • Fixed: misaligned bottom face textures on multi-block screens with Hodgepodge fixBottomFaceUV
  • #168 Reworked _coroutine.wrap in openos/boot/01_process.lua to pack the resume result, return the values on success and call error(result[2], 0) on failure. Copied from the sandboxed version in machine.lua. - @asquared31415
    • Fixed: coroutine.wrap in OpenOS swallowing errors
  • #163 DriverBloodAltar.getSacrificeMultiplier called tileEntity.getCapacity(); it now calls getSacrificeMultiplier(). - @hinyb
    • Fixed: Blood Altar getSacrificeMultiplier returning capacity
  • #158 Transposer.scala compares microcontroller components against Items.get(Constants.BlockName.Transposer).createItemStack(1) instead of a new block Transposer instance's item stack. - @Vlamonster
    • Fixed: Transposer filter in Microcontroller not matching

Performance ​

  • #201 DynamicFontRenderer charMap changed from a Scala mutable.Map[Int] to a Trove TIntObjectHashMap. TextureFontRenderer replaces a color.map for-comprehension with a while loop to avoid boxing and intermediate collections. - @mitchej123
  • #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 RenderState.checkError now reads Settings.get.logOpenGLErrors before calling glGetError. - @mitchej123

Removals ​

  • #174 Removed the gt_fluidCanner handler registration and addGTFluidCannerRecipe from RecipeHandler.scala, and its line from the gregtech.recipes header comment. Sister change to GT5-Unofficial#5763. - @FourIsTheNumber
    • Removed: gt_fluidCanner recipe handler

Internal / Refactor ​

  • #177 Replaced ClassTransformer.scala with Java: ClassTransformer, ASMHelpers, ObfNames, and separate TransformerEntityLiving, TransformerRenderLiving, TransformerInjectInterfaces, TransformerInjectEnvironmentImplementation and TransformerStripMissingClasses classes. Added .editorconfig and adjusted TransformerLoader.scala. - @danyadev
  • #164 TpsCard replaces CoFHCore.server with MinecraftServer.getServer and drops the CoFHCore import and an unused Map import. - @Alexdoru

Chores ​

  • #200 DriverPartInterfaceTerminal now calls AEApi.instance().registries().interfaceTerminal() instead of InterfaceTerminalRegistry.instance. Matches Applied-Energistics-2-Unofficial#1193. - @UltraProdigy

Contributors ​

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

@hinyb (24), @Dream-Master (17), @UltraProdigy (8), @guneykabel (7), @Alexdoru (6), @Azusfin (6), @Eldrinn-Elantey (4), @Kogepan229 (4), @boubou19 (3), @Guvante (3), @mitchej123 (3), @chrombread (2), @danyadev (2), @DarkShadow44 (2), @hxync (2), @koolkrafter5 (2), @MarkinoTeck (2), @Pxx500 (2), @shironakoushi (2), @Vlamonster (2), @Algent (1), @Armisael5 (1), @asquared31415 (1), @AX3Lino (1), @Caedis (1), @DreamYao520 (1), @felixfour (1), @FourIsTheNumber (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), @spacebuilder2020 (1), @tomprince (1), @wlhlm (1), @Worive (1), @zyf051520 (1)