From d51562b937d4c579bb1c50c36f2aeb8fd4285385 Mon Sep 17 00:00:00 2001 From: malte0811 Date: Sat, 25 Aug 2018 16:25:43 +0200 Subject: [PATCH] Probably actually works now --- .../malte0811/industrialWires/IWConfig.java | 3 + .../blocks/wire/BlockIC2Connector.java | 5 +- .../wire/TileEntityIC2ConnectorTin.java | 71 +++++--- .../industrialWires/items/ItemIC2Coil.java | 165 ++---------------- .../industrialWires/util/ConversionUtil.java | 10 +- .../industrialWires/wires/MixedWireType.java | 30 +++- .../assets/industrialwires/lang/en_US.lang | 2 +- .../recipes/ic2_connector_copper_conn.json | 29 --- .../recipes/ic2_connector_copper_relay.json | 26 --- .../recipes/ic2_connector_glass_conn.json | 29 --- .../recipes/ic2_connector_glass_relay.json | 33 ---- .../recipes/ic2_connector_gold_conn.json | 27 --- .../recipes/ic2_connector_gold_relay.json | 26 --- .../recipes/ic2_connector_hv_conn.json | 27 --- .../recipes/ic2_connector_hv_relay.json | 28 --- .../recipes/ic2_connector_tin_conn.json | 29 --- .../recipes/ic2_connector_tin_relay.json | 26 --- 17 files changed, 99 insertions(+), 467 deletions(-) delete mode 100644 src/main/resources/assets/industrialwires/recipes/ic2_connector_copper_conn.json delete mode 100644 src/main/resources/assets/industrialwires/recipes/ic2_connector_copper_relay.json delete mode 100644 src/main/resources/assets/industrialwires/recipes/ic2_connector_glass_conn.json delete mode 100644 src/main/resources/assets/industrialwires/recipes/ic2_connector_glass_relay.json delete mode 100644 src/main/resources/assets/industrialwires/recipes/ic2_connector_gold_conn.json delete mode 100644 src/main/resources/assets/industrialwires/recipes/ic2_connector_gold_relay.json delete mode 100644 src/main/resources/assets/industrialwires/recipes/ic2_connector_hv_conn.json delete mode 100644 src/main/resources/assets/industrialwires/recipes/ic2_connector_hv_relay.json delete mode 100644 src/main/resources/assets/industrialwires/recipes/ic2_connector_tin_conn.json delete mode 100644 src/main/resources/assets/industrialwires/recipes/ic2_connector_tin_relay.json diff --git a/src/main/java/malte0811/industrialWires/IWConfig.java b/src/main/java/malte0811/industrialWires/IWConfig.java index 9402490..ae34d51 100644 --- a/src/main/java/malte0811/industrialWires/IWConfig.java +++ b/src/main/java/malte0811/industrialWires/IWConfig.java @@ -30,6 +30,9 @@ public class IWConfig { public static int[] maxLengthPerConn = {16, 16, 16, 32, 32}; @Comment({"The maximum length of wire a coil item.", "Order: Tin, Copper, Gold, HV, Glass Fiber (as above)"}) public static int[] maxLengthOnCoil = {1024, 1024, 1024, 2048, 2048}; + @Comment({"The factor between the IF transfer rate of the wires and the IF transfer rate corresponding to the EU transfer rate.", + "The default value results in the same transfer rates as the standard IE wires"}) + public static double wireRatio = .5; @Comment({"Set this to false to completely disable any conversion between IF and EU (default: true)"}) @RequiresMcRestart diff --git a/src/main/java/malte0811/industrialWires/blocks/wire/BlockIC2Connector.java b/src/main/java/malte0811/industrialWires/blocks/wire/BlockIC2Connector.java index 50234f8..43f6945 100644 --- a/src/main/java/malte0811/industrialWires/blocks/wire/BlockIC2Connector.java +++ b/src/main/java/malte0811/industrialWires/blocks/wire/BlockIC2Connector.java @@ -18,6 +18,7 @@ import blusunrize.immersiveengineering.api.IEProperties; import malte0811.industrialWires.IndustrialWires; import malte0811.industrialWires.blocks.BlockIWBase; import malte0811.industrialWires.blocks.IMetaEnum; +import malte0811.industrialWires.util.ConversionUtil; import malte0811.industrialWires.wires.MixedWireType; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -161,8 +162,8 @@ public class BlockIC2Connector extends BlockIWBase implements IMetaEnum { int type = stack.getMetadata() / 2; tooltip.add(I18n.format(IndustrialWires.MODID + ".tooltip.power_tier", (type%5) + 1)); MixedWireType wire = MixedWireType.ALL[type]; - tooltip.add(I18n.format(IndustrialWires.MODID + ".tooltip.eu_per_tick", - wire.getTransferRate() / wire.getFactor())); + tooltip.add(I18n.format(IndustrialWires.MODID + ".tooltip.energy_per_tick", + wire.getIORate()*ConversionUtil.euPerJoule(), wire.getIORate()*ConversionUtil.ifPerJoule())); } } diff --git a/src/main/java/malte0811/industrialWires/blocks/wire/TileEntityIC2ConnectorTin.java b/src/main/java/malte0811/industrialWires/blocks/wire/TileEntityIC2ConnectorTin.java index 44053ab..c15041a 100644 --- a/src/main/java/malte0811/industrialWires/blocks/wire/TileEntityIC2ConnectorTin.java +++ b/src/main/java/malte0811/industrialWires/blocks/wire/TileEntityIC2ConnectorTin.java @@ -26,6 +26,7 @@ import ic2.api.energy.tile.IEnergyEmitter; import ic2.api.energy.tile.IEnergySink; import ic2.api.energy.tile.IEnergySource; import malte0811.industrialWires.IMixedConnector; +import malte0811.industrialWires.IWConfig; import malte0811.industrialWires.IndustrialWires; import malte0811.industrialWires.blocks.IBlockBoundsIW; import malte0811.industrialWires.compat.Compat; @@ -64,10 +65,10 @@ public class TileEntityIC2ConnectorTin extends TileEntityImmersiveConnectable im private static final double EPS = .1; private EnumFacing facing = EnumFacing.NORTH; private boolean relay; - private boolean first = true; // external net to IE net buffer private double bufferToNet = 0; - private double ieInputInTick = 0; + private double potentialIEInputInTick = 0; + private double actualIEInputInTick = 0; private double maxToNet = 0; //IE net to external net buffer private double bufferToMachine = 0; @@ -75,7 +76,7 @@ public class TileEntityIC2ConnectorTin extends TileEntityImmersiveConnectable im private double maxToMachine = 0; private EnergyType energyType = NONE; private boolean shouldBreak = false; - private final double maxStored; + private final double maxIO; private final MixedWireType wireType; private final int tier; private final double relayOffset; @@ -84,7 +85,7 @@ public class TileEntityIC2ConnectorTin extends TileEntityImmersiveConnectable im protected TileEntityIC2ConnectorTin(boolean relay, MixedWireType type, int tier, double relayLength, double connLength) { this.relay = relay; wireType = type; - maxStored = type.getIORate(); + maxIO = type.getIORate(); this.tier = tier; this.relayOffset = relayLength-.5; this.connOffset = connLength-.5; @@ -136,18 +137,9 @@ public class TileEntityIC2ConnectorTin extends TileEntityImmersiveConnectable im } return; } - if (externalInputInTick==0 && ieInputInTick == 0 && bufferToNet == 0 && bufferToMachine == 0) { + if (externalInputInTick ==0 && potentialIEInputInTick == 0 && bufferToNet == 0 && bufferToMachine == 0) { energyType = NONE; } - if (bufferToNet > EPS) { - transferPowerToNet(); - } - if (bufferToNet >EPS) { - notifyAvailableEnergy(bufferToNet); - } - if (bufferToMachine > EPS && energyType==FE_AC) { - transferPowerToFEMachine(); - } if (bufferToNet < maxToNet) { maxToNet = bufferToNet; } @@ -159,15 +151,24 @@ public class TileEntityIC2ConnectorTin extends TileEntityImmersiveConnectable im if (bufferToMachine < maxToMachine) { maxToMachine = bufferToMachine; } - if (ieInputInTick > maxToMachine) { - maxToMachine = ieInputInTick; + potentialIEInputInTick = Math.max(Math.max(potentialIEInputInTick, actualIEInputInTick), getMaxIO()); + if (potentialIEInputInTick > maxToMachine) { + maxToMachine = potentialIEInputInTick; + } + potentialIEInputInTick = 0; + actualIEInputInTick = 0; + if (bufferToNet > EPS) { + transferPowerToNet(); + } + if (bufferToNet >EPS) { + notifyAvailableEnergy(bufferToNet); + } + if (bufferToMachine > EPS && energyType==FE_AC) { + transferPowerToFEMachine(); } - ieInputInTick = 0; } } - //TODO push FE - private void transferPowerToNet() { Set conns = ImmersiveNetHandler.INSTANCE.getIndirectEnergyConnections(pos, world, true); Map> maxOutputs = new HashMap<>(); @@ -204,7 +205,8 @@ public class TileEntityIC2ConnectorTin extends TileEntityImmersiveConnectable im for (Connection sub : c.subConnections) { int transferredPerCon = transferedPerConn.getOrDefault(sub, 0); energyAtConn -= sub.cableType.getLossRatio() * sub.length; - ImmersiveNetHandler.INSTANCE.getTransferedRates(world.provider.getDimension()).put(sub, (int) (transferredPerCon + energyAtConn)); + double wireLoad = energyAtConn/(energyType==FE_AC?IWConfig.wireRatio:1); + transferedPerConn.put(sub, (int) (transferredPerCon + wireLoad)); IImmersiveConnectable subStart = ApiUtils.toIIC(sub.start, world); IImmersiveConnectable subEnd = ApiUtils.toIIC(sub.end, world); if (subStart != null && passedConnectors.add(subStart)) @@ -222,7 +224,7 @@ public class TileEntityIC2ConnectorTin extends TileEntityImmersiveConnectable im if (te!=null && te.hasCapability(CapabilityEnergy.ENERGY, facing.getOpposite())) { IEnergyStorage handler = te.getCapability(CapabilityEnergy.ENERGY, facing.getOpposite()); assert handler!=null; - double outJoules = Math.min(bufferToMachine, maxToMachine); + double outJoules = Math.min(bufferToMachine, maxToMachine*IWConfig.wireRatio); int outFE = MathHelper.floor(outJoules*ConversionUtil.ifPerJoule()); int received = handler.receiveEnergy(outFE, false); bufferToMachine -= received*ConversionUtil.joulesPerIf(); @@ -255,7 +257,12 @@ public class TileEntityIC2ConnectorTin extends TileEntityImmersiveConnectable im private double getAverageLossRate(AbstractConnection conn) { double f = 0; for (Connection c : conn.subConnections) { - f += c.length * c.cableType.getLossRatio(); + WireType type = c.cableType; + if (type instanceof MixedWireType) { + f += c.length * ((MixedWireType)type).getLoss(energyType); + } else { + f = Double.POSITIVE_INFINITY; + } } return f; } @@ -269,16 +276,22 @@ public class TileEntityIC2ConnectorTin extends TileEntityImmersiveConnectable im shouldBreak = true; return 0; } - final double insert = Math.min(maxStored - bufferToMachine, joules); + double insert = Math.min(getMaxIO() - bufferToMachine, joules); + insert = Math.min(getMaxIO()-actualIEInputInTick, insert); if (!simulate) { bufferToMachine += insert; + actualIEInputInTick += insert; } else { //Yes, this is weird. But it works, otherwise the system can get stuck at a lower output rate with a full buffer - ieInputInTick += insert; + potentialIEInputInTick += Math.min(joules, getMaxIO()); } return joules - insert; } + private double getMaxIO() { + return maxIO*(energyType==FE_AC?IWConfig.wireRatio:1); + } + @Override public void invalidate() { if (!world.isRemote) @@ -338,7 +351,7 @@ public class TileEntityIC2ConnectorTin extends TileEntityImmersiveConnectable im @Override @Optional.Method(modid="ic2") public double getDemandedEnergy() { - double ret = (maxStored - bufferToNet) *ConversionUtil.euPerJoule() + .5; + double ret = (getMaxIO() - bufferToNet) *ConversionUtil.euPerJoule() + .5; if (ret < .1) ret = 0; return ret; @@ -394,7 +407,8 @@ public class TileEntityIC2ConnectorTin extends TileEntityImmersiveConnectable im } else if (energyType!=type) { shouldBreak = true; } - if (bufferToNet < maxStored) { + joules = Math.min(getMaxIO()-externalInputInTick, joules); + if (bufferToNet < getMaxIO()) { if (!simulate) { bufferToNet += joules; externalInputInTick += joules; @@ -560,6 +574,9 @@ public class TileEntityIC2ConnectorTin extends TileEntityImmersiveConnectable im @Override public int receiveEnergy(int maxReceive, boolean simulate) { + if (bufferToNet>=getMaxIO()) { + return 0; + } double joules = maxReceive*ConversionUtil.joulesPerIf(); double accepted = addToIn(joules, simulate, FE_AC); return MathHelper.ceil(accepted*ConversionUtil.ifPerJoule()); @@ -590,7 +607,7 @@ public class TileEntityIC2ConnectorTin extends TileEntityImmersiveConnectable im @Override public int getMaxEnergyStored() { - return (int) (2*maxStored*ConversionUtil.ifPerJoule()); + return (int) (2* getMaxIO() *ConversionUtil.ifPerJoule()); } @Override diff --git a/src/main/java/malte0811/industrialWires/items/ItemIC2Coil.java b/src/main/java/malte0811/industrialWires/items/ItemIC2Coil.java index d0bb5a2..e710faf 100644 --- a/src/main/java/malte0811/industrialWires/items/ItemIC2Coil.java +++ b/src/main/java/malte0811/industrialWires/items/ItemIC2Coil.java @@ -16,44 +16,28 @@ package malte0811.industrialWires.items; import blusunrize.immersiveengineering.api.ApiUtils; import blusunrize.immersiveengineering.api.Lib; -import blusunrize.immersiveengineering.api.TargetingInfo; -import blusunrize.immersiveengineering.api.energy.wires.IImmersiveConnectable; import blusunrize.immersiveengineering.api.energy.wires.IWireCoil; -import blusunrize.immersiveengineering.api.energy.wires.ImmersiveNetHandler; -import blusunrize.immersiveengineering.api.energy.wires.ImmersiveNetHandler.Connection; -import blusunrize.immersiveengineering.common.IESaveData; -import blusunrize.immersiveengineering.common.blocks.metal.TileEntityBreakerSwitch; -import blusunrize.immersiveengineering.common.blocks.metal.TileEntityRedstoneBreaker; import blusunrize.immersiveengineering.common.util.ItemNBTHelper; -import blusunrize.immersiveengineering.common.util.Utils; import malte0811.industrialWires.IWConfig; import malte0811.industrialWires.IndustrialWires; import malte0811.industrialWires.util.ConversionUtil; import malte0811.industrialWires.wires.MixedWireType; -import net.minecraft.block.state.IBlockState; import net.minecraft.client.resources.I18n; import net.minecraft.client.util.ITooltipFlag; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagInt; -import net.minecraft.tileentity.TileEntity; import net.minecraft.util.*; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.Vec3d; -import net.minecraft.util.math.Vec3i; -import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import java.util.HashSet; import java.util.List; -import java.util.Set; public class ItemIC2Coil extends Item implements IWireCoil { public final static String[] subNames = { @@ -102,9 +86,9 @@ public class ItemIC2Coil extends Item implements IWireCoil { double ioRate = wireType.getIORate(); double transferRate = ioRate*wireType.getFactor(); tooltip.add(I18n.format(IndustrialWires.MODID + ".tooltip.transfer_rate", - transferRate*ConversionUtil.euPerJoule(), transferRate*ConversionUtil.ifPerJoule())); + transferRate*ConversionUtil.euPerJoule(), transferRate*ConversionUtil.ifPerJoule()*IWConfig.wireRatio)); tooltip.add(I18n.format(IndustrialWires.MODID + ".tooltip.input_rate", - ioRate*ConversionUtil.euPerJoule(), ioRate*ConversionUtil.ifPerJoule())); + ioRate*ConversionUtil.euPerJoule(), ioRate*ConversionUtil.ifPerJoule()*IWConfig.wireRatio)); if (stack.getTagCompound() != null && stack.getTagCompound().hasKey("linkingPos")) { int[] link = stack.getTagCompound().getIntArray("linkingPos"); if (link.length > 3) { @@ -118,135 +102,7 @@ public class ItemIC2Coil extends Item implements IWireCoil { @Nonnull @Override public EnumActionResult onItemUseFirst(EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, EnumHand hand) { - ItemStack stack = player.getHeldItem(hand); - if (!stack.isEmpty()) { - if (stack.getCount() > 1) { - player.sendMessage(new TextComponentTranslation(IndustrialWires.MODID + ".chat.stackSize")); - return EnumActionResult.FAIL; - } - TileEntity tileEntity = world.getTileEntity(pos); - if (tileEntity instanceof IImmersiveConnectable && ((IImmersiveConnectable) tileEntity).canConnect()) { - TargetingInfo target = new TargetingInfo(side, hitX, hitY, hitZ); - MixedWireType wire = getWireType(stack); - BlockPos masterPos = ((IImmersiveConnectable) tileEntity).getConnectionMaster(wire, target); - Vec3i offset = pos.subtract(masterPos); - tileEntity = world.getTileEntity(masterPos); - if (!(tileEntity instanceof IImmersiveConnectable) || !((IImmersiveConnectable) tileEntity).canConnect()) - return EnumActionResult.PASS; - - boolean canConnect = ((IImmersiveConnectable) tileEntity).canConnectCable(wire, target, offset); - if (canConnect&&tileEntity instanceof TileEntityBreakerSwitch) { - canConnect = !wire.isHV()||tileEntity instanceof TileEntityRedstoneBreaker; - } - if (!canConnect) { - if (!world.isRemote) - player.sendMessage(new TextComponentTranslation(Lib.CHAT_WARN + "wrongCable")); - return EnumActionResult.FAIL; - } - - if (!world.isRemote) - if (!ItemNBTHelper.hasKey(stack, "linkingPos")) { - ItemNBTHelper.setIntArray(stack, "linkingPos", new int[]{world.provider.getDimension(), masterPos.getX(), masterPos.getY(), masterPos.getZ(), - offset.getX(), offset.getY(), offset.getZ()}); - NBTTagCompound targetNbt = new NBTTagCompound(); - target.writeToNBT(targetNbt); - ItemNBTHelper.setTagCompound(stack, "targettingInfo", targetNbt); - } else { - int[] array = ItemNBTHelper.getIntArray(stack, "linkingPos"); - BlockPos linkPos = new BlockPos(array[1], array[2], array[3]); - Vec3i offsetLink = BlockPos.NULL_VECTOR; - if (array.length == 7) - offsetLink = new Vec3i(array[4], array[5], array[6]); - TileEntity tileEntityLinkingPos = world.getTileEntity(linkPos); - int distanceSq = (int) Math.ceil(linkPos.distanceSq(masterPos)); - if (array[0] != world.provider.getDimension()) { - player.sendMessage(new TextComponentTranslation(Lib.CHAT_WARN + "wrongDimension")); - } else if (linkPos.equals(masterPos)) { - player.sendMessage(new TextComponentTranslation(Lib.CHAT_WARN + "sameConnection")); - } else if (distanceSq > (wire.getMaxLength() * wire.getMaxLength())) { - player.sendMessage(new TextComponentTranslation(Lib.CHAT_WARN + "tooFar")); - } else { - TargetingInfo targetLink = TargetingInfo.readFromNBT(ItemNBTHelper.getTagCompound(stack, "targettingInfo")); - if (!(tileEntityLinkingPos instanceof IImmersiveConnectable) || !((IImmersiveConnectable) tileEntityLinkingPos).canConnectCable(wire, targetLink, offset)) { - player.sendMessage(new TextComponentTranslation(Lib.CHAT_WARN + "invalidPoint")); - } else { - IImmersiveConnectable nodeHere = (IImmersiveConnectable) tileEntity; - IImmersiveConnectable nodeLink = (IImmersiveConnectable) tileEntityLinkingPos; - boolean connectionExists = false; - Set outputs = ImmersiveNetHandler.INSTANCE.getConnections(world, Utils.toCC(nodeHere)); - if (outputs != null) { - for (Connection con : outputs) { - if (con.end.equals(Utils.toCC(nodeLink))) { - connectionExists = true; - } - } - } - if (connectionExists) { - player.sendMessage(new TextComponentTranslation(Lib.CHAT_WARN + "connectionExists")); - } else { - Set ignore = new HashSet<>(); - ignore.addAll(nodeHere.getIgnored(nodeLink)); - ignore.addAll(nodeLink.getIgnored(nodeHere)); - Connection tmpConn = new Connection(Utils.toCC(nodeHere), Utils.toCC(nodeLink), wire, - (int) Math.sqrt(distanceSq)); - Vec3d start = nodeHere.getConnectionOffset(tmpConn, target, pos.subtract(masterPos)).addVector(tileEntity.getPos().getX(), - tileEntity.getPos().getY(), tileEntity.getPos().getZ()); - Vec3d end = nodeLink.getConnectionOffset(tmpConn, targetLink, offsetLink).addVector(tileEntityLinkingPos.getPos().getX(), - tileEntityLinkingPos.getPos().getY(), tileEntityLinkingPos.getPos().getZ()); - boolean canSee = ApiUtils.raytraceAlongCatenary(tmpConn, (p) -> { - if (ignore.contains(p.getLeft())) { - return false; - } - IBlockState state = world.getBlockState(p.getLeft()); - return ApiUtils.preventsConnection(world, p.getLeft(), state, p.getMiddle(), p.getRight()); - }, (p) -> { - }, start, end); - if (canSee) { - int lengthOnStack = getLength(stack); - int length = (int) Math.sqrt(distanceSq); - if (length <= lengthOnStack) { - Connection conn = ImmersiveNetHandler.INSTANCE.addAndGetConnection(world, Utils.toCC(nodeHere), Utils.toCC(nodeLink), - (int) Math.sqrt(distanceSq), wire); - - - nodeHere.connectCable(wire, target, nodeLink, offset); - nodeLink.connectCable(wire, targetLink, nodeHere, offsetLink); - ImmersiveNetHandler.INSTANCE.addBlockData(world, conn); - IESaveData.setDirty(world.provider.getDimension()); - Utils.unlockIEAdvancement(player, "main/connect_wire"); - - if (!player.capabilities.isCreativeMode) { - if (length < lengthOnStack) { - setLength(stack, lengthOnStack - length); - } else { - player.setHeldItem(hand, ItemStack.EMPTY); - } - } - ((TileEntity) nodeHere).markDirty(); - world.addBlockEvent(masterPos, ((TileEntity) nodeHere).getBlockType(), -1, 0); - IBlockState state = world.getBlockState(masterPos); - world.notifyBlockUpdate(masterPos, state, state, 3); - ((TileEntity) nodeLink).markDirty(); - world.addBlockEvent(linkPos, ((TileEntity) nodeLink).getBlockType(), -1, 0); - state = world.getBlockState(linkPos); - world.notifyBlockUpdate(linkPos, state, state, 3); - } else { - player.sendMessage(new TextComponentTranslation(Lib.CHAT_WARN + "tooFar")); - } - } else { - player.sendMessage(new TextComponentTranslation(Lib.CHAT_WARN + "cantSee")); - } - } - } - } - ItemNBTHelper.remove(stack, "linkingPos"); - ItemNBTHelper.remove(stack, "targettingInfo"); - } - return EnumActionResult.SUCCESS; - } - return EnumActionResult.PASS; - } - return EnumActionResult.PASS; + return ApiUtils.doCoilUse(this, player, world, pos, hand, side, hitX, hitY, hitZ); } public static void setLength(ItemStack i, int blocks) { @@ -263,4 +119,19 @@ public class ItemIC2Coil extends Item implements IWireCoil { public static int getMaxWireLength(ItemStack i) { return IWConfig.maxLengthOnCoil[i.getItemDamage()%5]; } + + @Override + public int getMaxLength(ItemStack stack) { + return getLength(stack); + } + + @Override + public void consumeWire(ItemStack stack, int lengthConsumed) { + int lengthOnStack = getLength(stack); + if (lengthConsumed < lengthOnStack) { + setLength(stack, lengthOnStack - lengthConsumed); + } else { + stack.shrink(1); + } + } } diff --git a/src/main/java/malte0811/industrialWires/util/ConversionUtil.java b/src/main/java/malte0811/industrialWires/util/ConversionUtil.java index 2ce21eb..73450f3 100644 --- a/src/main/java/malte0811/industrialWires/util/ConversionUtil.java +++ b/src/main/java/malte0811/industrialWires/util/ConversionUtil.java @@ -29,11 +29,11 @@ public class ConversionUtil { return Config.IEConfig.Machines.dynamo_output; } - public static double euPerIfIdeal() { + public static double euPerIf() { return MechConversion.euPerIf; } - public static double ifPerEuIdeal() { + public static double ifPerEu() { return 1 / MechConversion.euPerIf; } @@ -46,7 +46,7 @@ public class ConversionUtil { } public static double kinPerRot() { - return kinPerEu() * euPerIfIdeal() * ifPerRot(); + return kinPerEu() * euPerIf() * ifPerRot(); } public static double rotPerKin() { @@ -62,10 +62,10 @@ public class ConversionUtil { } public static double joulesPerEu() { - return joulesPerIf()*ifPerEuIdeal(); + return joulesPerIf()* ifPerEu(); } public static double euPerJoule() { - return euPerIfIdeal()*ifPerJoule(); + return euPerIf()*ifPerJoule(); } } \ No newline at end of file diff --git a/src/main/java/malte0811/industrialWires/wires/MixedWireType.java b/src/main/java/malte0811/industrialWires/wires/MixedWireType.java index 853b47b..35db978 100644 --- a/src/main/java/malte0811/industrialWires/wires/MixedWireType.java +++ b/src/main/java/malte0811/industrialWires/wires/MixedWireType.java @@ -40,7 +40,8 @@ public class MixedWireType extends WireType { private final int[] ic2Colors = {0xa5bcc7, 0xbc7945, 0xfeff73, 0xb9d6d9, 0xf1f1f1}; private final String[] ic2Names = {"ic2Tin", "ic2Copper", "ic2Gold", "ic2Hv", "ic2Glass", "ic2TinIns", "ic2CopperIns", "ic2GoldIns"}; - private final double[] lossPerBlock = {.2, .2, .4, .8, .025}; + private final double[] euLossPerBlock = {.2, .2, .4, .8, .025}; + private final double[] ifLossRate = new double[euLossPerBlock.length]; private final double[] ic2RenderDiameter = { .03125, .03125, .046875, .0625, .75 * .03125, .0625, .0625, 2*.046875 }; @@ -61,14 +62,20 @@ public class MixedWireType extends WireType { super(); this.type = ordinal; WireApi.registerWireType(this); + for (int i = 0;i