Probably actually works now

This commit is contained in:
malte0811 2018-08-25 16:25:43 +02:00
parent c8bba65ad4
commit d51562b937
17 changed files with 99 additions and 467 deletions

View File

@ -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

View File

@ -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()));
}
}

View File

@ -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<AbstractConnection> conns = ImmersiveNetHandler.INSTANCE.getIndirectEnergyConnections(pos, world, true);
Map<AbstractConnection, Pair<IMixedConnector, Double>> 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

View File

@ -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<Connection> 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<BlockPos> 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);
}
}
}

View File

@ -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();
}
}

View File

@ -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<ifLossRate.length;i++) {
//Loss is the same at full single-connector load
double lossPerBlockIF = euLossPerBlock[i] * ConversionUtil.ifPerEu();
ifLossRate[i] = lossPerBlockIF/(getIORate()*ConversionUtil.ifPerJoule());
}
}
/**
* In this case, this does not return the loss RATIO but the loss PER BLOCK
*/
@Override
public double getLossRatio() {
return lossPerBlock[type%5];
return ifLossRate[type%5];
}
public double getLossRateEU() {
return euLossPerBlock[type%5];
}
@Override
@ -167,4 +174,17 @@ public class MixedWireType extends WireType {
public boolean isHV() {
return this==HV||this==GLASS;
}
public double getLoss(EnergyType energyType) {
switch (energyType) {
case FE_AC:
return getLossRatio();
case EU_DC:
return getLossRateEU();
case NONE:
default:
return 10;
}
}
}

View File

@ -103,7 +103,7 @@ industrialwires.tooltip.latching=Stays on indefinitely
industrialwires.tooltip.instantaneous=Turns off after half a second
industrialwires.tooltip.length=Length: %1s
industrialwires.tooltip.power_tier=Power Tier: %s
industrialwires.tooltip.eu_per_tick=%s EU/t
industrialwires.tooltip.energy_per_tick=%s EU/t=%s IF/t
industrialwires.tooltip.transfer_rate=Burns at %s EU/t (%s IF/t)
industrialwires.tooltip.input_rate=%s EU/t (%s IF/t) per connector

View File

@ -1,29 +0,0 @@
{
"result": {
"item": "industrialwires:ic2_connector",
"data": 2,
"count": 4
},
"pattern": [
" c ",
"rcr",
"rcr"
],
"type": "forge:ore_shaped",
"key": {
"r": {
"type": "forge:ore_dict",
"ore": "itemRubber"
},
"c": {
"type": "forge:ore_dict",
"ore": "ingotCopper"
}
},
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "ic2"
}
]
}

View File

@ -1,26 +0,0 @@
{
"result": {
"item": "industrialwires:ic2_connector",
"data": 3,
"count": 4
},
"pattern": [
" c ",
"rcr"
],
"type": "forge:ore_shaped",
"key": {
"r": {
"type": "forge:ore_dict", "ore": "itemRubber"
},
"c": {
"type": "forge:ore_dict", "ore": "ingotCopper"
}
},
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "ic2"
}
]
}

View File

@ -1,29 +0,0 @@
{
"result": {
"item": "industrialwires:ic2_connector",
"data": 8,
"count": 4
},
"pattern": [
" c ",
"rcr",
"rcr"
],
"type": "forge:ore_shaped",
"key": {
"r": {
"type": "forge:ore_dict", "ore": "itemRubber"
},
"c": {
"type": "industrialwires:ic2_item",
"name": "cable",
"variant": "type:glass,insulation:0"
}
},
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "ic2"
}
]
}

View File

@ -1,33 +0,0 @@
{
"result": {
"item": "industrialwires:ic2_connector",
"data": 9,
"count": 4
},
"pattern": [
" c ",
"grg",
"grg"
],
"type": "forge:ore_shaped",
"key": {
"r": {
"type": "forge:ore_dict", "ore": "itemRubber"
},
"c": {
"type": "industrialwires:ic2_item",
"name": "cable",
"variant": "type:glass,insulation:0"
},
"g": {
"item": "immersiveengineering:stone_decoration",
"data": 8
}
},
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "ic2"
}
]
}

View File

@ -1,27 +0,0 @@
{
"result": {
"item": "industrialwires:ic2_connector",
"data": 4,
"count": 4
},
"pattern": [
" g ",
"rgr",
"rgr"
],
"type": "forge:ore_shaped",
"key": {
"r": {
"type": "forge:ore_dict", "ore": "itemRubber"
},
"g": {
"type": "forge:ore_dict", "ore": "ingotGold"
}
},
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "ic2"
}
]
}

View File

@ -1,26 +0,0 @@
{
"result": {
"item": "industrialwires:ic2_connector",
"data": 5,
"count": 4
},
"pattern": [
" g ",
"rgr"
],
"type": "forge:ore_shaped",
"key": {
"r": {
"type": "forge:ore_dict", "ore": "itemRubber"
},
"g": {
"type": "forge:ore_dict", "ore": "ingotGold"
}
},
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "ic2"
}
]
}

View File

@ -1,27 +0,0 @@
{
"result": {
"item": "industrialwires:ic2_connector",
"data": 6,
"count": 4
},
"pattern": [
" i ",
"rir",
"rir"
],
"type": "forge:ore_shaped",
"key": {
"r": {
"type": "forge:ore_dict", "ore": "itemRubber"
},
"i": {
"type": "forge:ore_dict", "ore": "ingotIron"
}
},
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "ic2"
}
]
}

View File

@ -1,28 +0,0 @@
{
"result": {
"item": "industrialwires:ic2_connector",
"data": 7,
"count": 4
},
"pattern": [
" i ",
"gig",
"gig"
],
"type": "forge:ore_shaped",
"key": {
"g": {
"item": "immersiveengineering:stone_decoration",
"data": 8
},
"i": {
"type": "forge:ore_dict", "ore": "ingotIron"
}
},
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "ic2"
}
]
}

View File

@ -1,29 +0,0 @@
{
"result": {
"item": "industrialwires:ic2_connector",
"data": 0,
"count": 4
},
"pattern": [
" t ",
"rtr",
"rtr"
],
"type": "forge:ore_shaped",
"key": {
"r": {
"type": "forge:ore_dict",
"ore": "itemRubber"
},
"t": {
"type": "forge:ore_dict",
"ore": "ingotTin"
}
},
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "ic2"
}
]
}

View File

@ -1,26 +0,0 @@
{
"result": {
"item": "industrialwires:ic2_connector",
"data": 1,
"count": 4
},
"pattern": [
" t ",
"rtr"
],
"type": "forge:ore_shaped",
"key": {
"r": {
"type": "forge:ore_dict", "ore": "itemRubber"
},
"t": {
"type": "forge:ore_dict", "ore": "ingotTin"
}
},
"conditions": [
{
"type": "forge:mod_loaded",
"modid": "ic2"
}
]
}