From 22ebc12fc8b6ecb3c6f39a7f58eeefd24047bb95 Mon Sep 17 00:00:00 2001 From: Timo Ley Date: Thu, 9 Apr 2020 23:52:49 +0200 Subject: [PATCH] Added Magneticraft and Gregtech support --- build.gradle | 4 +- changelog.json | 12 ++--- .../wire/TileEntityIC2ConnectorTin.java | 48 +++++++++++++++++++ 3 files changed, 57 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index a530c6a..4f1ca37 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ import groovy.json.JsonOutput def mainVersion = "1.7" -def buildNumber = "37" +def buildNumber = "38" // For those who want the bleeding edge buildscript { @@ -102,6 +102,8 @@ dependencies { compileOnly "mezz.jei:jei_1.12:4.+" compileOnly "CraftTweaker2:CraftTweaker2-MC1120-Main:1.12-4.1.8.460" compile 'com.elytradev:mirage:2.0.3-rc3-SNAPSHOT' + compile "gregtechce:gregtech:1.12.2:1.9.0.481" + compile "magneticraft:Magneticraft_1.12:2.8.2:dev" } diff --git a/changelog.json b/changelog.json index eb35e7c..5965efa 100644 --- a/changelog.json +++ b/changelog.json @@ -5,8 +5,8 @@ "1.10.2-recommended": "1.4-18", "1.11.2-latest": "1.5-19", "1.11.2-recommended": "1.5-19", - "1.12.2-latest": "1.7-36", - "1.12.2-recommended": "1.7-36" + "1.12.2-latest": "1.7-36", + "1.12.2-recommended": "1.7-36" }, "1.10.2": { "1.1-3": " - fixed incompatibility with IE build 48\n - reduced the amount of calls to core IE classes to make such incompatibilities less likely\n - fixed localization of the creative tab", @@ -43,9 +43,9 @@ "1.7-30": " - Fixed crashes when IC2 isn't installed\n - Fixed connectors allowing too much power output\n - Added a config option for some of the wires' properties\n - Updated chinese translation (thanks @DepletedPrism)", "1.7-31": " - Fixed accidental conversion from FE to EU\n - Fixed connectors not blowing up as intended\n ", "1.7-32": " - Fixed connectors not rendering properly without IC2\n - Fixed parts of the mechanical multiblocks not rendering when Optifine is installed\n - Changed some values for the mechanical multiblock sound", - "1.7-33": " - Fixed the Marx generator not processing ores\n - Fixed control panels and the Marx generator not working when connected directly\n - Added Russian translation (thanks @StolenSoda)", - "1.7-34": " - Control panels can use the texture of any block now\n - Added a recipe to copy the settings of an unfinished control panel\n - The Marx generator now returns the wires used in its construction when disassembled\n - Fixed the RS controller for non-IE wires not keeping its IO state on world reload\n - Fixed control panels not working correctly with multiple controllers", - "1.7-35": " - Fixed a crash when placing certain items in the crafting grid", - "1.7-36": " - Added an RGB indicator light, controlled by 3 (independent) RS signals\n - Fixed a bug allowing for unfinished control panels to be duplicated\n - Fixed insulated and uninsulated wire producing the same wire coils\n - Fixed some issues (including a crash) with the IE RS controller on dedicated servers" + "1.7-33": " - Fixed the Marx generator not processing ores\n - Fixed control panels and the Marx generator not working when connected directly\n - Added Russian translation (thanks @StolenSoda)", + "1.7-34": " - Control panels can use the texture of any block now\n - Added a recipe to copy the settings of an unfinished control panel\n - The Marx generator now returns the wires used in its construction when disassembled\n - Fixed the RS controller for non-IE wires not keeping its IO state on world reload\n - Fixed control panels not working correctly with multiple controllers", + "1.7-35": " - Fixed a crash when placing certain items in the crafting grid", + "1.7-36": " - Added an RGB indicator light, controlled by 3 (independent) RS signals\n - Fixed a bug allowing for unfinished control panels to be duplicated\n - Fixed insulated and uninsulated wire producing the same wire coils\n - Fixed some issues (including a crash) with the IE RS controller on dedicated servers" } } \ No newline at end of file diff --git a/src/main/java/malte0811/industrialwires/blocks/wire/TileEntityIC2ConnectorTin.java b/src/main/java/malte0811/industrialwires/blocks/wire/TileEntityIC2ConnectorTin.java index ebbb3af..82b5a22 100644 --- a/src/main/java/malte0811/industrialwires/blocks/wire/TileEntityIC2ConnectorTin.java +++ b/src/main/java/malte0811/industrialwires/blocks/wire/TileEntityIC2ConnectorTin.java @@ -20,6 +20,13 @@ import blusunrize.immersiveengineering.api.energy.wires.*; import blusunrize.immersiveengineering.api.energy.wires.ImmersiveNetHandler.AbstractConnection; import blusunrize.immersiveengineering.api.energy.wires.ImmersiveNetHandler.Connection; import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IDirectionalTile; +import com.cout970.magneticraft.api.core.INode; +import com.cout970.magneticraft.api.energy.IElectricNode; +import com.cout970.magneticraft.api.energy.IElectricNodeHandler; +import com.cout970.magneticraft.registry.CapabilitiesKt; +import com.cout970.magneticraft.systems.config.Config; +import gregtech.api.capability.GregtechCapabilities; +import gregtech.api.capability.IEnergyContainer; import ic2.api.energy.tile.IEnergyAcceptor; import ic2.api.energy.tile.IEnergyEmitter; import ic2.api.energy.tile.IEnergySink; @@ -41,6 +48,7 @@ import net.minecraft.util.math.*; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.energy.CapabilityEnergy; import net.minecraftforge.energy.IEnergyStorage; +import net.minecraftforge.fml.common.Loader; import net.minecraftforge.fml.common.Optional; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; @@ -158,6 +166,10 @@ public class TileEntityIC2ConnectorTin extends TileEntityImmersiveConnectable im } if (bufferToMachine > EPS) { transferPowerToFEMachine(); + if (Loader.isModLoaded("gregtech")) + transferPowerToGTMachine(); + if (Loader.isModLoaded("magneticraft")) + transferPowerToMagn(); } } } @@ -224,6 +236,42 @@ public class TileEntityIC2ConnectorTin extends TileEntityImmersiveConnectable im } } + private void transferPowerToGTMachine() { + BlockPos outPos = pos.offset(facing); + TileEntity te = MiscUtils.getLoadedTE(world, outPos, TileEntity.class); + if (te!=null && te.hasCapability(GregtechCapabilities.CAPABILITY_ENERGY_CONTAINER, facing.getOpposite())) { + IEnergyContainer container = te.getCapability(GregtechCapabilities.CAPABILITY_ENERGY_CONTAINER, facing.getOpposite()); + assert container!=null; + double outJoules = Math.min(bufferToMachine, maxToMachine*IWConfig.wireRatio); + long outEU = Math.min(MathHelper.floor(outJoules*ConversionUtil.euPerJoule()), container.getInputVoltage()); + long received = container.addEnergy(outEU); + bufferToMachine -= received*ConversionUtil.joulesPerEu(); + } + } + + private void transferPowerToMagn() { + BlockPos outPos = pos.offset(facing); + TileEntity te = MiscUtils.getLoadedTE(world, outPos, TileEntity.class); + if (te!=null && te.hasCapability(CapabilitiesKt.getELECTRIC_NODE_HANDLER(), facing.getOpposite())) { + IElectricNodeHandler handler = te.getCapability(CapabilitiesKt.getELECTRIC_NODE_HANDLER(), facing.getOpposite()); + assert handler!=null; + double outJoules = Math.min(bufferToMachine, maxToMachine*IWConfig.wireRatio); + int outRF = MathHelper.floor(outJoules*ConversionUtil.ifPerJoule()); + IElectricNode node = null; + for (INode n : handler.getNodes()) { + if (n instanceof IElectricNode) { + node = (IElectricNode) n; + break; + } + } + if (node != null) { + double insertet = node.applyPower(outRF * Config.INSTANCE.getWattsToFE(), false); + bufferToMachine -= insertet/Config.INSTANCE.getWattsToFE(); + } + + } + } + private void notifyAvailableEnergy(double storedNew) { Set outputs = ImmersiveNetHandler.INSTANCE.getIndirectEnergyConnections(pos, world, true);