From 60c2720aaec59318ba870fb2f0a02b0e712845c9 Mon Sep 17 00:00:00 2001 From: DadamaldaDad Date: Fri, 25 Sep 2026 22:46:18 +0200 Subject: [PATCH] Add bundled redstone support for Immersive Engineering --- build.gradle | 4 +++ gradle.properties | 1 + .../scala/li/cil/oc/integration/Mods.scala | 3 ++ .../BundledProviderImmersiveEngineering.scala | 15 ++++++++++ .../ModImmersiveEngineering.scala | 29 +++++++++++++++++++ 5 files changed, 52 insertions(+) create mode 100644 src/main/scala/li/cil/oc/integration/immersiveengineering/BundledProviderImmersiveEngineering.scala create mode 100644 src/main/scala/li/cil/oc/integration/immersiveengineering/ModImmersiveEngineering.scala diff --git a/build.gradle b/build.gradle index 1da7ffee47..533233957a 100644 --- a/build.gradle +++ b/build.gradle @@ -384,6 +384,10 @@ dependencies { runtimeOnly("mrtjp:ProjectRed:${projred_version}:core") runtimeOnly("mrtjp:ProjectRed:${projred_version}:transmission") + // Immersive Engineering + compileOnly("maven.modrinth:immersiveengineering:${immersiveengineering_version}") + runtimeOnly("maven.modrinth:immersiveengineering:${immersiveengineering_version}") + testImplementation("com.typesafe:config:1.4.5") testImplementation("org.scala-lang:scala-library:2.13.12") testImplementation("org.scalatest:scalatest_2.13:3.2.18") diff --git a/gradle.properties b/gradle.properties index 6a2852e7aa..dcdcb43a06 100644 --- a/gradle.properties +++ b/gradle.properties @@ -42,6 +42,7 @@ sable_companion_version=1.6.0 sable_version=2.0.5+mc1.21.1 sable_version_range=[2.0,3) aeronautics_version=1.3.2+mc1.21.1 +immersiveengineering_version=12.4.2-194 # Publishing curse_project_id=1634364 modrinth_project_id=YiAbZis2 diff --git a/src/main/scala/li/cil/oc/integration/Mods.scala b/src/main/scala/li/cil/oc/integration/Mods.scala index c7122ad32f..f105d11b38 100644 --- a/src/main/scala/li/cil/oc/integration/Mods.scala +++ b/src/main/scala/li/cil/oc/integration/Mods.scala @@ -31,6 +31,7 @@ object Mods { val OpenComputers = new SimpleMod(IDs.OpenComputers) val EnderStorage = new SimpleMod(IDs.EnderStorage) val ProjectRedTransmission = new SimpleMod(IDs.ProjectRedTransmission) + val ImmersiveEngineering = new SimpleMod(IDs.ImmersiveEngineering) // ----------------------------------------------------------------------- // @@ -43,6 +44,7 @@ object Mods { integration.appeng.ModAppliedEnergistics2.INSTANCE, integration.enderstorage.ModEnderStorage, integration.projectred.ModProjectRed, + integration.immersiveengineering.ModImmersiveEngineering, // We go late to ensure all other mod integration is done, e.g. to // allow properly checking if wireless redstone is present. @@ -107,6 +109,7 @@ object Mods { final val OpenComputers = "opencomputers" final val EnderStorage = "enderstorage" final val ProjectRedTransmission = "projectred_transmission" + final val ImmersiveEngineering = "immersiveengineering" } // ----------------------------------------------------------------------- // diff --git a/src/main/scala/li/cil/oc/integration/immersiveengineering/BundledProviderImmersiveEngineering.scala b/src/main/scala/li/cil/oc/integration/immersiveengineering/BundledProviderImmersiveEngineering.scala new file mode 100644 index 0000000000..0d6d8286f8 --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/immersiveengineering/BundledProviderImmersiveEngineering.scala @@ -0,0 +1,15 @@ +package li.cil.oc.integration.immersiveengineering + +import blusunrize.immersiveengineering.common.blocks.metal.ConnectorBundledBlockEntity.IBundledProvider +import li.cil.oc.common.blockentity.traits.BundledRedstoneAware +import net.minecraft.core.{BlockPos, Direction} +import net.minecraft.world.level.Level + +class BundledProviderImmersiveEngineering extends IBundledProvider { + + override def getEmittedState(level: Level, blockPos: BlockPos, direction: Direction): Array[Byte] = { + val tileEntity = level.getBlockEntity(blockPos) + if(!tileEntity.isInstanceOf[BundledRedstoneAware]) return null + tileEntity.asInstanceOf[BundledRedstoneAware].getBundledOutput(direction).map(value => math.min(math.max(value, 0), 255).toByte) + } +} diff --git a/src/main/scala/li/cil/oc/integration/immersiveengineering/ModImmersiveEngineering.scala b/src/main/scala/li/cil/oc/integration/immersiveengineering/ModImmersiveEngineering.scala new file mode 100644 index 0000000000..90615b7bb5 --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/immersiveengineering/ModImmersiveEngineering.scala @@ -0,0 +1,29 @@ +package li.cil.oc.integration.immersiveengineering + +import blusunrize.immersiveengineering.common.blocks.metal.ConnectorBundledBlockEntity +import blusunrize.immersiveengineering.common.register.IEBlockEntities +import li.cil.oc.integration.util.BundledRedstone +import li.cil.oc.integration.util.BundledRedstone.RedstoneProvider +import li.cil.oc.integration.{ModProxy, Mods} +import li.cil.oc.util.BlockPosition +import net.minecraft.core.Direction + +object ModImmersiveEngineering extends ModProxy with RedstoneProvider { + override def getMod = Mods.ImmersiveEngineering + + override def preInitialize(): Unit = { + ConnectorBundledBlockEntity.EXTRA_SOURCES.add(new BundledProviderImmersiveEngineering) + } + + override def initialize(): Unit = { + BundledRedstone.addProvider(this) + } + + override def computeInput(pos: BlockPosition, side: Direction): Int = 0 + + override def computeBundledInput(pos: BlockPosition, side: Direction): Array[Int] = { + val tileEntity = pos.world.get.getBlockEntity(pos.toBlockPos.relative(side), IEBlockEntities.CONNECTOR_BUNDLED.get) + if(tileEntity.isEmpty) return null + (for (i <- 0 until 16) yield tileEntity.get.getValue(i).toInt).toArray + } +}