From d3c571d60c348c99350f7ebfac21bd012ef48912 Mon Sep 17 00:00:00 2001 From: malte0811 Date: Thu, 15 Dec 2016 21:32:28 +0100 Subject: [PATCH] added textures for the mechanical converters+IF motor, made by C8H8O4 fixed some minor bugs with energy conversion rates increased the default maximum of kinetic to rotational energy conversion, the old one was equal to about 2 IF added a manual entry, still need to change the displayed recipes --- README.md | 4 +- .../malte0811/industrialWires/IWConfig.java | 2 +- .../converter/BlockMechanicalConverter.java | 40 ++++++- .../blocks/converter/TileEntityIEMotor.java | 5 +- .../converter/TileEntityMechICtoIE.java | 6 +- .../converter/TileEntityMechIEtoIC.java | 6 +- .../industrialWires/client/ClientProxy.java | 33 ++++-- .../industrialWires/util/ConversionUtil.java | 4 +- .../blockstates/mechanical_converter.json | 111 ++++++++++++++++++ .../assets/industrialwires/lang/en_US.lang | 24 +++- .../textures/blocks/converter/con_ic.png | Bin 0 -> 838 bytes .../textures/blocks/converter/con_ie.png | Bin 0 -> 579 bytes .../blocks/converter/ic_to_ie_side.png | Bin 0 -> 724 bytes .../blocks/converter/ie_to_ic_side.png | Bin 0 -> 717 bytes .../textures/blocks/converter/motor.png | Bin 0 -> 642 bytes .../textures/blocks/converter/power_ie.png | Bin 0 -> 525 bytes 16 files changed, 200 insertions(+), 35 deletions(-) create mode 100644 src/main/resources/assets/industrialwires/blockstates/mechanical_converter.json create mode 100644 src/main/resources/assets/industrialwires/textures/blocks/converter/con_ic.png create mode 100644 src/main/resources/assets/industrialwires/textures/blocks/converter/con_ie.png create mode 100644 src/main/resources/assets/industrialwires/textures/blocks/converter/ic_to_ie_side.png create mode 100644 src/main/resources/assets/industrialwires/textures/blocks/converter/ie_to_ic_side.png create mode 100644 src/main/resources/assets/industrialwires/textures/blocks/converter/motor.png create mode 100644 src/main/resources/assets/industrialwires/textures/blocks/converter/power_ie.png diff --git a/README.md b/README.md index d47cf20..62d1dc7 100644 --- a/README.md +++ b/README.md @@ -6,4 +6,6 @@ An addon for Immersive Engineering and IndustrialCraft2. It adds IE-style wires Recipes for the relays, connectors and wires can be found in the Engineer's Manual. -All textures are modified versions of the textures Immersive Engineering uses and the models are loaded out of IE, so all art is at least based on art Mr. Damien Hazard made. \ No newline at end of file +All textures for the connectors are modified versions of the textures Immersive Engineering uses and the models are loaded out of IE, so all art for the wires is at least based on art Mr. Damien Hazard made. + +The textures for the mechanical converters and the Rotational Motor were made by C8H8O4. \ No newline at end of file diff --git a/src/main/java/malte0811/industrialWires/IWConfig.java b/src/main/java/malte0811/industrialWires/IWConfig.java index a3f2737..7a19400 100644 --- a/src/main/java/malte0811/industrialWires/IWConfig.java +++ b/src/main/java/malte0811/industrialWires/IWConfig.java @@ -48,7 +48,7 @@ public class IWConfig { public static double rotToKinEfficiency = .7; @Comment({"The maximum amount of IC2 kinetic energy that can be converted into IE rotational energy", "by one converter in one tick"}) - public static int maxKinToRot = 50; + public static int maxKinToRot = 2400; @Comment({"The efficiency of the conversion from IC2 kinetic energy to IE rotational energy"}) public static double kinToRotEfficiency = .8; diff --git a/src/main/java/malte0811/industrialWires/blocks/converter/BlockMechanicalConverter.java b/src/main/java/malte0811/industrialWires/blocks/converter/BlockMechanicalConverter.java index 89c1e9e..224fc85 100644 --- a/src/main/java/malte0811/industrialWires/blocks/converter/BlockMechanicalConverter.java +++ b/src/main/java/malte0811/industrialWires/blocks/converter/BlockMechanicalConverter.java @@ -21,6 +21,7 @@ import java.util.List; import blusunrize.immersiveengineering.api.IEProperties; import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IDirectionalTile; +import blusunrize.immersiveengineering.common.util.Utils; import malte0811.industrialWires.IndustrialWires; import malte0811.industrialWires.blocks.IMetaEnum; import malte0811.industrialWires.blocks.ItemBlockIW; @@ -38,6 +39,7 @@ import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.RayTraceResult; @@ -51,20 +53,20 @@ public class BlockMechanicalConverter extends Block implements IMetaEnum, ITileE super(Material.IRON); setHardness(3.0F); setResistance(15.0F); - String name = "mechanicalConverter"; + String name = "mechanical_converter"; GameRegistry.register(this, new ResourceLocation(IndustrialWires.MODID, name)); GameRegistry.register(new ItemBlockIW(this), new ResourceLocation(IndustrialWires.MODID, name)); setUnlocalizedName(name); setCreativeTab(IndustrialWires.creativeTab); } - + @Override public void getSubBlocks(Item itemIn, CreativeTabs tab, List list) { for (int i = 0;i<3;i++) { list.add(new ItemStack(itemIn, 1, i)); } } - + @Override protected BlockStateContainer createBlockState() { type = PropertyEnum.create("type", MechanicalBlockType.class); @@ -75,7 +77,7 @@ public class BlockMechanicalConverter extends Block implements IMetaEnum, ITileE }); return container; } - + @Override public IBlockState getActualState(IBlockState state, IBlockAccess worldIn, BlockPos pos) { return getExtendedState(state, worldIn, pos); @@ -140,4 +142,34 @@ public class BlockMechanicalConverter extends Block implements IMetaEnum, ITileE EntityPlayer player) { return new ItemStack(this, 1, damageDropped(state)); } + //mostly copied from IE + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, + EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { + TileEntity te = world.getTileEntity(pos); + if(te instanceof IDirectionalTile && Utils.isHammer(heldItem) && !world.isRemote) { + IDirectionalTile directionalTe = (IDirectionalTile) te; + if (directionalTe.canHammerRotate(side, hitX, hitY, hitZ, player)) { + EnumFacing f = directionalTe.getFacing(); + final EnumFacing original = f; + int limit = directionalTe.getFacingLimitation(); + + if(limit==0) { + f = EnumFacing.VALUES[(f.ordinal() + 1) % EnumFacing.VALUES.length]; + } else if(limit==1) { + f = player.isSneaking()?f.rotateAround(side.getAxis()).getOpposite():f.rotateAround(side.getAxis()); + } else if(limit == 2 || limit == 5) { + f = player.isSneaking()?f.rotateYCCW():f.rotateY(); + } + if (f!=original) { + directionalTe.setFacing(f); + te.markDirty(); + world.notifyBlockUpdate(pos,state,state,3); + world.addBlockEvent(pos, this, 255, 0); + } + return true; + } + } + return false; + } } diff --git a/src/main/java/malte0811/industrialWires/blocks/converter/TileEntityIEMotor.java b/src/main/java/malte0811/industrialWires/blocks/converter/TileEntityIEMotor.java index b09ceb5..787644e 100644 --- a/src/main/java/malte0811/industrialWires/blocks/converter/TileEntityIEMotor.java +++ b/src/main/java/malte0811/industrialWires/blocks/converter/TileEntityIEMotor.java @@ -32,7 +32,7 @@ import net.minecraft.util.ITickable; import net.minecraft.util.math.BlockPos; public class TileEntityIEMotor extends TileEntityIWBase implements ITickable, IFluxReceiver, IDirectionalTile { - public static final double bufferMax = 2*MechConversion.maxIfToMech*ConversionUtil.rotPerIf(); + public final double bufferMax = 2*MechConversion.maxIfToMech*ConversionUtil.rotPerIf(); private double rotBuffer = 0; private FluxStorage energy = new FluxStorage(20*MechConversion.maxIfToMech, 2*MechConversion.maxIfToMech); @@ -53,7 +53,6 @@ public class TileEntityIEMotor extends TileEntityIWBase implements ITickable, IF } TileEntity te = worldObj.getTileEntity(receiver); if (te instanceof IRotationAcceptor) { - //TODO maybe get inputRotation changed to return a double? Would make this more user-friendly ((IRotationAcceptor)te).inputRotation(rotBuffer, dir); rotBuffer = 0; dirty = true; @@ -116,7 +115,7 @@ public class TileEntityIEMotor extends TileEntityIWBase implements ITickable, IF } @Override public int getFacingLimitation() { - return 0; + return 1; } @Override public boolean mirrorFacingOnPlacement(EntityLivingBase placer) { diff --git a/src/main/java/malte0811/industrialWires/blocks/converter/TileEntityMechICtoIE.java b/src/main/java/malte0811/industrialWires/blocks/converter/TileEntityMechICtoIE.java index 2b8884c..b24f3cd 100644 --- a/src/main/java/malte0811/industrialWires/blocks/converter/TileEntityMechICtoIE.java +++ b/src/main/java/malte0811/industrialWires/blocks/converter/TileEntityMechICtoIE.java @@ -33,8 +33,8 @@ import net.minecraft.util.math.BlockPos; public class TileEntityMechICtoIE extends TileEntityIWBase implements IDirectionalTile, ITickable { EnumFacing dir = EnumFacing.DOWN; int kinBuffer = 0; - private static final int kinBufMax = 2*MechConversion.maxKinToRot; - private static final double maxInsert = ConversionUtil.rotPerKin()*MechConversion.maxKinToRot; + private final int kinBufMax = 2*MechConversion.maxKinToRot; + private final double maxInsert = ConversionUtil.rotPerKin()*MechConversion.maxKinToRot; BlockPos to; BlockPos from; @Override @@ -90,7 +90,7 @@ public class TileEntityMechICtoIE extends TileEntityIWBase implements IDirection } @Override public int getFacingLimitation() { - return 0; + return 1; } @Override public boolean mirrorFacingOnPlacement(EntityLivingBase placer) { diff --git a/src/main/java/malte0811/industrialWires/blocks/converter/TileEntityMechIEtoIC.java b/src/main/java/malte0811/industrialWires/blocks/converter/TileEntityMechIEtoIC.java index 5f6cf97..bd663f2 100644 --- a/src/main/java/malte0811/industrialWires/blocks/converter/TileEntityMechIEtoIC.java +++ b/src/main/java/malte0811/industrialWires/blocks/converter/TileEntityMechIEtoIC.java @@ -30,8 +30,8 @@ import net.minecraft.util.EnumFacing; public class TileEntityMechIEtoIC extends TileEntityIWBase implements IDirectionalTile, IRotationAcceptor, IKineticSource { EnumFacing dir = EnumFacing.DOWN; double rotBuffer = 0; - private static final double rotBufMax = 2*MechConversion.maxRotToKin; - private static final int maxOutput = (int)(ConversionUtil.kinPerRot()*MechConversion.maxRotToKin); + private final double rotBufMax = 2*MechConversion.maxRotToKin; + private final int maxOutput = (int)(ConversionUtil.kinPerRot()*MechConversion.maxRotToKin); @Override public void writeNBT(NBTTagCompound out, boolean updatePacket) { @@ -56,7 +56,7 @@ public class TileEntityMechIEtoIC extends TileEntityIWBase implements IDirection } @Override public int getFacingLimitation() { - return 0; + return 1; } @Override public boolean mirrorFacingOnPlacement(EntityLivingBase placer) { diff --git a/src/main/java/malte0811/industrialWires/client/ClientProxy.java b/src/main/java/malte0811/industrialWires/client/ClientProxy.java index bece3dc..06463d8 100644 --- a/src/main/java/malte0811/industrialWires/client/ClientProxy.java +++ b/src/main/java/malte0811/industrialWires/client/ClientProxy.java @@ -36,6 +36,7 @@ import net.minecraft.block.Block; import net.minecraft.client.renderer.ItemMeshDefinition; import net.minecraft.client.renderer.block.model.ModelBakery; import net.minecraft.client.renderer.block.model.ModelResourceLocation; +import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ResourceLocation; @@ -84,16 +85,16 @@ public class ClientProxy extends CommonProxy { ModelBakery.registerItemVariants(IndustrialWires.coil, loc); ModelLoader.setCustomModelResourceLocation(IndustrialWires.coil, meta, new ModelResourceLocation(loc, "inventory")); } - Item blockItem = Item.getItemFromBlock(IndustrialWires.ic2conn); - final ResourceLocation loc = IndustrialWires.ic2conn.getRegistryName(); - ModelLoader.setCustomMeshDefinition(blockItem, new ItemMeshDefinition() { - @Override - public ModelResourceLocation getModelLocation(ItemStack stack) { - return new ModelResourceLocation(loc, "inventory"); - } - }); - Block[] blocks = {IndustrialWires.ic2conn}; + Block[] blocks = {IndustrialWires.ic2conn, IndustrialWires.mechConv}; for (Block b:blocks) { + Item blockItem = Item.getItemFromBlock(b); + final ResourceLocation loc = b.getRegistryName(); + ModelLoader.setCustomMeshDefinition(blockItem, new ItemMeshDefinition() { + @Override + public ModelResourceLocation getModelLocation(ItemStack stack) { + return new ModelResourceLocation(loc, "inventory"); + } + }); Object[] v = ((IMetaEnum)b).getValues(); for(int meta = 0; meta < v.length; meta++) { String location = loc.toString(); @@ -146,11 +147,17 @@ public class ClientProxy extends CommonProxy { ItemIC2Coil.setLength(tmp, lengthSum); wireRecipes[i][9] = new PositionedItemStack(tmp, 18*4+xBase, 18); } - m.addEntry("industrialWires.all", "industrialWires", - new ManualPages.CraftingMulti(m, "industrialWires.all0", new ItemStack(IndustrialWires.ic2conn, 1, 0), new ItemStack(IndustrialWires.ic2conn, 1, 1), new ItemStack(IndustrialWires.ic2conn, 1, 2), new ItemStack(IndustrialWires.ic2conn, 1, 3), + m.addEntry("industrialWires.wires", "industrialWires", + new ManualPages.CraftingMulti(m, "industrialWires.wires0", new ItemStack(IndustrialWires.ic2conn, 1, 0), new ItemStack(IndustrialWires.ic2conn, 1, 1), new ItemStack(IndustrialWires.ic2conn, 1, 2), new ItemStack(IndustrialWires.ic2conn, 1, 3), new ItemStack(IndustrialWires.ic2conn, 1, 4), new ItemStack(IndustrialWires.ic2conn, 1, 5), new ItemStack(IndustrialWires.ic2conn, 1, 6), new ItemStack(IndustrialWires.ic2conn, 1, 7)), - new ManualPages.Text(m, "industrialWires.all1"), - new ManualPages.CraftingMulti(m, "industrialWires.all2", (Object[])wireRecipes) + new ManualPages.Text(m, "industrialWires.wires1"), + new ManualPages.CraftingMulti(m, "industrialWires.wires2", (Object[])wireRecipes) ); + m.addEntry("industrialWires.mechConv", "industrialWires", + new ManualPages.Crafting(m, "industrialWires.mechConv0", new ItemStack(Items.DIAMOND_PICKAXE)), + new ManualPages.Crafting(m, "industrialWires.mechConv1", new ItemStack(Items.DIAMOND_PICKAXE)), + new ManualPages.Crafting(m, "industrialWires.mechConv2", new ItemStack(Items.DIAMOND_PICKAXE)) + ); + } } diff --git a/src/main/java/malte0811/industrialWires/util/ConversionUtil.java b/src/main/java/malte0811/industrialWires/util/ConversionUtil.java index c8735ec..dbba8a1 100644 --- a/src/main/java/malte0811/industrialWires/util/ConversionUtil.java +++ b/src/main/java/malte0811/industrialWires/util/ConversionUtil.java @@ -35,10 +35,10 @@ public class ConversionUtil { return 1/MechConversion.euPerIf; } public static double euPerKin() { - return MechConversion.kinPerEu; + return 1/euPerKin(); } public static double kinPerEu() { - return 1/euPerKin(); + return MechConversion.kinPerEu; } public static double kinPerRot() { return kinPerEu()*euPerIfIdeal()*ifPerRot(); diff --git a/src/main/resources/assets/industrialwires/blockstates/mechanical_converter.json b/src/main/resources/assets/industrialwires/blockstates/mechanical_converter.json new file mode 100644 index 0000000..b32b344 --- /dev/null +++ b/src/main/resources/assets/industrialwires/blockstates/mechanical_converter.json @@ -0,0 +1,111 @@ +{ + "forge_marker": 1, + "defaults": { + "transform": "forge:default-block", + "model": "immersiveengineering:ieSixSides", + "textures": { + + }, + "custom": { + "flip-v": true + } + }, + "variants": { + "inventory,type=ie_motor": [{ + "textures": { + "bottom": "industrialwires:blocks/converter/con_ie", + "top": "industrialwires:blocks/converter/power_ie", + "north": "industrialwires:blocks/converter/motor", + "south": "industrialwires:blocks/converter/motor", + "west": "industrialwires:blocks/converter/motor", + "east": "industrialwires:blocks/converter/motor" + } + }], + "inventory,type=ie_to_ic2": [{ + "textures": { + "bottom": "industrialwires:blocks/converter/con_ic", + "top": "industrialwires:blocks/converter/con_ie", + "north": "industrialwires:blocks/converter/ie_to_ic_side", + "south": "industrialwires:blocks/converter/ie_to_ic_side", + "west": "industrialwires:blocks/converter/ie_to_ic_side", + "east": "industrialwires:blocks/converter/ie_to_ic_side" + } + }], + "inventory,type=ic2_to_ie": [{ + "textures": { + "bottom": "industrialwires:blocks/converter/con_ie", + "top": "industrialwires:blocks/converter/con_ic", + "north": "industrialwires:blocks/converter/ic_to_ie_side", + "south": "industrialwires:blocks/converter/ic_to_ie_side", + "west": "industrialwires:blocks/converter/ic_to_ie_side", + "east": "industrialwires:blocks/converter/ic_to_ie_side" + } + }], + "type": { + "ie_motor": {"textures": { + "bottom": "industrialwires:blocks/converter/con_ie", + "top": "industrialwires:blocks/converter/power_ie", + "north": "industrialwires:blocks/converter/motor", + "south": "industrialwires:blocks/converter/motor", + "west": "industrialwires:blocks/converter/motor", + "east": "industrialwires:blocks/converter/motor" + }}, + "ie_to_ic2": {"textures": { + "bottom": "industrialwires:blocks/converter/con_ic", + "top": "industrialwires:blocks/converter/con_ie", + "north": "industrialwires:blocks/converter/ie_to_ic_side", + "south": "industrialwires:blocks/converter/ie_to_ic_side", + "west": "industrialwires:blocks/converter/ie_to_ic_side", + "east": "industrialwires:blocks/converter/ie_to_ic_side" + }}, + "ic2_to_ie": {"textures": { + "bottom": "industrialwires:blocks/converter/con_ie", + "top": "industrialwires:blocks/converter/con_ic", + "north": "industrialwires:blocks/converter/ic_to_ie_side", + "south": "industrialwires:blocks/converter/ic_to_ie_side", + "west": "industrialwires:blocks/converter/ic_to_ie_side", + "east": "industrialwires:blocks/converter/ic_to_ie_side" + }} + }, + "facing": { + "down": { + + }, + "up": { + "transform": { + "rotation": { + "z": 180 + } + } + }, + "north": { + "transform": { + "rotation": { + "x": 90 + } + } + }, + "south": { + "transform": { + "rotation": { + "x": -90 + } + } + }, + "west": { + "transform": { + "rotation": { + "z": -90 + } + } + }, + "east": { + "transform": { + "rotation": { + "z": 90 + } + } + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/industrialwires/lang/en_US.lang b/src/main/resources/assets/industrialwires/lang/en_US.lang index 4610d98..c46640d 100644 --- a/src/main/resources/assets/industrialwires/lang/en_US.lang +++ b/src/main/resources/assets/industrialwires/lang/en_US.lang @@ -9,23 +9,37 @@ tile.industrialwires.ic2Connector.hv_relay.name=IC2 HV Wire Relay tile.industrialwires.ic2Connector.glass_conn.name=Glass Fiber Wire Connector tile.industrialwires.ic2Connector.glass_relay.name=Glass Fiber Wire Relay +tile.mechanical_converter.ie_motor.name=Rotational Motor +tile.mechanical_converter.ie_to_ic2.name=Converter: Rotational To Kinetic +tile.mechanical_converter.ic2_to_ie.name=Converter: Kinetic To Rotational + + item.industrialwires.ic2wireCoil.tin.name=Tin Wire Coil item.industrialwires.ic2wireCoil.copper.name=Copper Wire Coil item.industrialwires.ic2wireCoil.gold.name=Gold Wire Coil item.industrialwires.ic2wireCoil.hv.name=IC2 HV Wire Coil item.industrialwires.ic2wireCoil.glass.name=Glass Fiber Wire Coil + industrialwires.desc.wireLength=Wire length: %1s block(s) industrialwires.desc.recipe=Please check the Engineer's manual for recipe details industrialwires.chat.tooLong=This coil does not contain enough wire for this connection industrialwires.chat.stackSize=Linking is only possible with a stack of size 1 + itemGroup.industrialwires=Industrial Wires ie.manual.category.industrialWires.name=Industrial Wires -ie.manual.entry.industrialWires.all.name=Industrial Wires -ie.manual.entry.industrialWires.all.subtext=Everything you need to know -ie.manual.entry.industrialWires.all0=Wires from the IndustrialWires company allow you to transfer energy like you can with cables from the IndustrialCraft2 company.
You use them exactly as you would use wires from Immersive Engineering. Each wire transfers as much EU as the corresponding cable would, so -ie.manual.entry.industrialWires.all1=attaching a connector to a power source that would destroy the cable will destroy the connector.
The wire coils for the IC2 cable are different from the Immersive Engineering wire coils in that longer connections use up more wire: The coils are crafted by placing any combination of uninsulated IC2 cables and the corresponding wire coils in a crafting grid. The next page shows some examples of valid recipes and their outputs. The uninsulated -ie.manual.entry.industrialWires.all2=tin cables can be replaced by uninsulated copper, gold or HV cables or by glass fiber cable to craft the other coils. \ No newline at end of file + +ie.manual.entry.industrialWires.wires.name=Industrial Wires +ie.manual.entry.industrialWires.wires.subtext=No complex impedance! +ie.manual.entry.industrialWires.wires0=Wires from the IndustrialWires company allow you to transfer energy like you can with cables from the IndustrialCraft2 company.
You use them exactly as you would use wires from Immersive Engineering. Each wire transfers as much EU as the corresponding cable would, so +ie.manual.entry.industrialWires.wires1=attaching a connector to a power source that would destroy the cable will destroy the connector.
The wire coils for the IC2 cable are different from the Immersive Engineering wire coils in that longer connections use up more wire: The coils are crafted by placing any combination of uninsulated IC2 cables and the corresponding wire coils in a crafting grid. The next page shows some examples of valid recipes and their outputs. The uninsulated +ie.manual.entry.industrialWires.wires2=tin cables can be replaced by uninsulated copper, gold or HV cables or by glass fiber cable to craft the other coils. + +ie.manual.entry.industrialWires.mechConv.name=Mechanical Converters +ie.manual.entry.industrialWires.mechConv.subtext= +ie.manual.entry.industrialWires.mechConv0=Both the IC2 and IE company produce products that run on kinetic energy of some sort. The new converters from IndustrialWires allow you to convert between these two forms of energy!
To use the "Converter: Rotational To Kinetic" attach a source of IE rotational energy +ie.manual.entry.industrialWires.mechConv1=like a waterwheel or a motor (see page 3) to the side marked with a gear and a consumer of IC2 kinetic energy to the opposite side. The "Converter: Kinetic To Rotational" is used in a similar way (Rotational and kinetic energy have to be swapped).
Unfortunately some energy is +ie.manual.entry.industrialWires.mechConv2=lost with each conversion.
As a little extra the "Mechanical converter" product series also contains a Rotational Motor: It consumes IF to produce IE rotational energy. As with the converters this is not a lossless process. \ No newline at end of file diff --git a/src/main/resources/assets/industrialwires/textures/blocks/converter/con_ic.png b/src/main/resources/assets/industrialwires/textures/blocks/converter/con_ic.png new file mode 100644 index 0000000000000000000000000000000000000000..dff10252e3deab2d255ca960af47c47c1363ec4c GIT binary patch literal 838 zcmV-M1G)T(P)WFU8GbZ8()Nlj2>E@cM*00OE>L_t(I%Y~E8ZX0D3 zhM#l3Z^oW+rQAW11ZYM?YNpdE5lGVnYm6ntz`MO3Mid_cqn}6Qd51@5rwH)b z(Glfx$>4B+F@|2h4>6)*u&RO})YS@`CQPSOzI*V1=g*#!cRB$4_`~;XZf%nur|j?V z#HSKcA zd^RJ?va48@Wz1(Ys;cDE8#lZS!KW;Qrkcc8dal`E16E z#e&VPZOY~H>cIf4s?szyHn9v22c*a88rW}h7Jn=NsH*kiTgP|kcDwk-A)P5eDxc zQoDwmw{H_epmXgS?X*SX8jLDWo=g}FKA>qF);UL#SPuGqg7f$oFru{67VTCGqlORz zJ_OpWHg&zC*MAQItTk97j7B3w*6sUGXNZvyJTb(zw)k(wV?+>q@Te&N0Qaszl6jG{ Q9{>OV07*qoM6N<$f`R*S?EnA( literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/industrialwires/textures/blocks/converter/con_ie.png b/src/main/resources/assets/industrialwires/textures/blocks/converter/con_ie.png new file mode 100644 index 0000000000000000000000000000000000000000..8f8677993a934b9b2376e3a006fbe3fa69170259 GIT binary patch literal 579 zcmV-J0=)f+P)Js<+rfS!^BEsr9z}Y1}yIGoD>sKn$c?K?3~A}JUrZ!G)wNq%-jnpqyr!+A|zA= zfQX2Qy8CXo>-El6_0(2XGfOF{YD%W6`~641|4CIf=VF$crt403S5`A+}ILj~aOr4$lXRRLHof0-G{>GY*-+t5iekQ(zuLA*1GqWFG-uu1t@3Yq3A0KCRU5`fBB+X1kToC?+I9 RInw|D002ovPDHLkV1mX<{KfzP literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/industrialwires/textures/blocks/converter/ic_to_ie_side.png b/src/main/resources/assets/industrialwires/textures/blocks/converter/ic_to_ie_side.png new file mode 100644 index 0000000000000000000000000000000000000000..170d8fba86a5a227962cb1191a69bfbee925d289 GIT binary patch literal 724 zcmV;_0xSKAP)WFU8GbZ8()Nlj2>E@cM*00KBkL_t(2&rOfNi=0&y zhTr$xbBB#zc7lcfMo@Me(+EjnWn&W%3|1ET3xalHtw=f>tpZk7f?%VN7}P~pmJQKD zL`ZaZGC$Ut`M#NZ?>Wa}RD7z#%XtpxGtkky(dEoG~T za{b1QQY!^K!%5zhliQ9)=I6V zmgD2&07j#%DXE9Qba0R;5g|fCNrIp-Ng@gI;P4O;!lWW3ST@_eOM59LRsH1VtN53< zKKoKqYF1mVs#&v&P}W0FQbYh;EH41uy7$G+Pd^7xHrt`^-9t4C>1G08xmcW@o)G-~ zw_pES%mJ*|t7m6_0(knzli6%K^!>@nPqW3$-PEkj=Ce`OAHIM1_@noCpDY%O*?bD% z>pQmry!_sW;r7evY4gyFi^a3^v!P$_?~h-211-=YIFDbd}`K6DTl8- zfAkH2v#ZxQo2q7OH6q9kEV^E;R5OXz8h{9^HO^nWX6Eq5;HFj)5s_NABvn=2O+->k z?he4+BSJ(11dvkNg=V(d^a7yohbvdcKBGiaTDUC+ieYf$? z$sHsjA|)}ioYl+)K-XQGOr|Lb{>M(<4err(-DEO#_rC$!a8)s)Y=a2^0000WFU8GbZ8()Nlj2>E@cM*00J>dL_t(2&rOoMYm`wC z#m~&#`(>Z*vdNl=8pK8sf>9EJAZTkT2$CX&HvR+Y)y_h&vl1c}f;K948tjFHfOav6 zSVer~`DK&)n6cQn_^XC_oii{rH#aN7s>Vz?D*!VCKt%WtBI@TEKw0*>-Qj-sfPT3j zFjHBU-R>|mGZE#SLx{{|W@eUi{%;IKl(ULRj7fwUK&@8Y+S&%FkBFGrKM#lYilW%w z-cdD|QgY4{VX%1Y^T&b0`ov7mnVFecM2e!q^+rQP0CLU~5wif;n7;Ds!esy~QmNKN z1c3KL;>2~kM^j8Orsk3Q?#^zn*8|Y$bW{yMr!yQwAgY8Aon!9{*Y1qOgM;2)S+6zs zUO%q`0FIv+-`&~S1l)(W4&ZAyDmgQAt=@30R=ZlQ!Zd_%Z2tbIhj#&-IeYHU@1H9G zfJ^rtfw8%S^=d7IpsK>sYPJB} ze)&#SiOI~w`;=oi2+nyHajIspqB2CFoU_3QL_{EHRAJGanZ$VyvlJ8OoS1lJc{#?Y zs;ZW93NhxCLkKa(z5QNHad~OU3~Je>n2Mp|;?xuwQcBEBOpL=Han2R$y)PywCkY54 zx@@|*_+D7VJ0T%P&e;GMK!BO5F;UFPi8Ir`^Rgz74L`xJ00000NkvXXu0mjf3&29c literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/industrialwires/textures/blocks/converter/motor.png b/src/main/resources/assets/industrialwires/textures/blocks/converter/motor.png new file mode 100644 index 0000000000000000000000000000000000000000..8297f89c0f917c688b889597eac979006b8c97d1 GIT binary patch literal 642 zcmV-|0)737P)WFU8GbZ8()Nlj2>E@cM*00HJnL_t(2&s9-POO#<0 zJ?GwMMrTkL8YI{#t@;l^f@JGf5-z0Q7Of&^sgN{CApMVI$V@Tj>(%FdpL<%olhj$< z3-^P2&OJOjI&`-PnX!}rAPE3T`~#A0Jpq`_s_pHqtE=m$qfeqYzI--$R_eUB{ykFP z@2`J6c|D!Zc6J6gH@8Nzl#+9Oa`JgrIUM6hcFL=k|QwK27+m6uZbIVmRdhEY`40)SOS zL`sXv)UHZ0vj}aj!WuNS5bix0M6g9fSW7PFJQ!>NOvx{2KAQWlIWDT@(Znvsix*YZ z-Nwc`pp=qVRi4c%Gn&~jURcMJ7A8pQkN`?45dkonS-;;Ok0-4!BqAimgLe|l*y}Cd c-u@=}2ToKmNyVFeCIA2c07*qoM6N<$f{-2%W&i*H literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/industrialwires/textures/blocks/converter/power_ie.png b/src/main/resources/assets/industrialwires/textures/blocks/converter/power_ie.png new file mode 100644 index 0000000000000000000000000000000000000000..d06b53b5db9642a5ec71446ad2098fc14a7ea6b2 GIT binary patch literal 525 zcmV+o0`mQdP)YXJw9M*-Dl~QnKwi=bTg0>2v~+nIr)-BG&8mPJ)n+oYOC@c$o5SHJ5R}yZY`52TUsZF?s@cQe?c4LTu?aX9E^Z>vS zaMeiyyjjJ_h_n2^O-7%i@!RHDZIi#BpK5SLIM|?ohyZ}m+9dlOV|;!80RWgy9p^Ba zl6nF&DXGDMBx#@jLSM6+NRBZ^pQ0heMKY7NFMiP5M+5;Jk1w~kJHQ>+QO%>P-`?JK zyBjh_!&MbH9FUzvuA0+(+`raFoD+wN( P00000NkvXXu0mjf8