Of course IC2 would be awkward. Add a prewritten java trait as I don't think it's possible to make auto-generated ones not crash.
This commit is contained in:
parent
39b28888cd
commit
a2d05d04ec
2 changed files with 93 additions and 1 deletions
|
@ -21,10 +21,10 @@ public class MultipartRI implements IPartFactory
|
|||
{
|
||||
MultiPartRegistry.registerParts(this, new String[]{"resonant_induction_wire"});
|
||||
MultipartGenerator.registerPassThroughInterface("universalelectricity.core.block.IConductor");
|
||||
MultipartGenerator.registerPassThroughInterface("ic2.api.energy.tile.IEnergySink");
|
||||
MultipartGenerator.registerPassThroughInterface("buildcraft.api.power.IPowerReceptor");
|
||||
MultipartGenerator.registerPassThroughInterface("resonantinduction.wire.IInsulatedMaterial");
|
||||
MultipartGenerator.registerPassThroughInterface("resonantinduction.wire.multipart.IBlockableConnection");
|
||||
MultipartGenerator.registerTrait("ic2.api.energy.tile.IEnergySink", "resonantinduction.wire.multipart.javatraits.TEnergySink");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,92 @@
|
|||
package resonantinduction.wire.multipart.javatraits;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.HashSet;
|
||||
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
import ic2.api.energy.tile.IEnergySink;
|
||||
import codechicken.multipart.TMultiPart;
|
||||
import codechicken.multipart.TileMultipart;
|
||||
|
||||
public class TEnergySink extends TileMultipart implements IEnergySink
|
||||
{
|
||||
public Set<IEnergySink> ic2Sinks = new HashSet<IEnergySink>();
|
||||
|
||||
@Override
|
||||
public void copyFrom(TileMultipart that)
|
||||
{
|
||||
super.copyFrom(that);
|
||||
if(that instanceof TEnergySink)
|
||||
ic2Sinks = ((TEnergySink)that).ic2Sinks;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void bindPart(TMultiPart part)
|
||||
{
|
||||
super.bindPart(part);
|
||||
if(part instanceof IEnergySink)
|
||||
ic2Sinks.add((IEnergySink)part);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void partRemoved(TMultiPart part, int p)
|
||||
{
|
||||
super.partRemoved(part, p);
|
||||
if(part instanceof IEnergySink)
|
||||
ic2Sinks.remove((IEnergySink)part);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void clearParts()
|
||||
{
|
||||
super.clearParts();
|
||||
ic2Sinks.clear();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean acceptsEnergyFrom(TileEntity emitter, ForgeDirection direction)
|
||||
{
|
||||
for (IEnergySink sink: this.ic2Sinks)
|
||||
{
|
||||
if (sink.acceptsEnergyFrom(emitter, direction))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double demandedEnergyUnits()
|
||||
{
|
||||
double demanded = 0;
|
||||
|
||||
for (IEnergySink sink: this.ic2Sinks)
|
||||
{
|
||||
demanded += sink.demandedEnergyUnits();
|
||||
}
|
||||
return demanded;
|
||||
}
|
||||
|
||||
@Override
|
||||
public double injectEnergyUnits(ForgeDirection directionFrom, double amount)
|
||||
{
|
||||
for (IEnergySink sink: this.ic2Sinks)
|
||||
{
|
||||
amount = sink.injectEnergyUnits(directionFrom, Math.min(amount, sink.demandedEnergyUnits()));
|
||||
}
|
||||
return amount;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMaxSafeInput()
|
||||
{
|
||||
int safe = 0;
|
||||
for (IEnergySink sink: this.ic2Sinks)
|
||||
{
|
||||
safe += sink.getMaxSafeInput();
|
||||
}
|
||||
return safe;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue