Add TE and UE support to multipart cables

This commit is contained in:
Aidan C. Brady 2013-12-03 11:03:03 -05:00
parent 5dc8d2fc80
commit 9a4147ab7c
3 changed files with 89 additions and 6 deletions

View file

@ -308,7 +308,8 @@ public class RenderPartTransmitter implements IIconRegister
CCRenderState.reset();
CCRenderState.useModelColours(true);
CCRenderState.setBrightness(transmitter.world(), transmitter.x(), transmitter.y(), transmitter.z());
for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS)
for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS)
{
renderSide(side, transmitter);
}
@ -333,13 +334,11 @@ public class RenderPartTransmitter implements IIconRegister
}
public void renderPart(Icon icon, CCModel cc, double x, double y, double z) {
cc.render(0, cc.verts.length,
new Translation(x, y, z), new IconTransformation(icon), null);
cc.render(0, cc.verts.length, new Translation(x, y, z), new IconTransformation(icon), null);
}
public void renderTransparency(Icon icon, CCModel cc, Colour colour) {
cc.render(0, cc.verts.length,
new Translation(0, 0, 0), new IconTransformation(icon), new ColourMultiplier(colour));
cc.render(0, cc.verts.length, new Translation(0, 0, 0), new IconTransformation(icon), new ColourMultiplier(colour));
}
public Icon getIconForPart(PartTransmitter<?, ?> part)

View file

@ -27,9 +27,11 @@ public class MultipartMekanism implements IPartFactory
public void init()
{
MultiPartRegistry.registerParts(this, new String[]{"mekanism:universal_cable", "mekanism:mechanical_pipe", "mekanism:pressurized_tube"});
MultipartGenerator.registerPassThroughInterface("mekanism.api.transmitters.ITransmitter");
MultipartGenerator.registerPassThroughInterface("mekanism.common.ITileNetwork");
MultipartGenerator.registerPassThroughInterface("cofh.api.energy.IEnergyHandler");
MultipartGenerator.registerPassThroughInterface("universalelectricity.core.block.IElectrical");
MultipartGenerator.registerPassThroughInterface("ic2.api.energy.tile.IEnergySink");
}
}

View file

@ -22,13 +22,15 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.common.MinecraftForge;
import universalelectricity.core.block.IElectrical;
import universalelectricity.core.electricity.ElectricityPack;
import buildcraft.api.power.IPowerEmitter;
import buildcraft.api.power.IPowerReceptor;
import codechicken.lib.vec.Vector3;
import cofh.api.energy.IEnergyHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class PartUniversalCable extends PartTransmitter<EnergyNetwork, Double> implements IEnergySink
public class PartUniversalCable extends PartTransmitter<EnergyNetwork, Double> implements IEnergySink, IEnergyHandler, IElectrical
{
public PartUniversalCable()
{
@ -208,4 +210,84 @@ public class PartUniversalCable extends PartTransmitter<EnergyNetwork, Double> i
list.add(Object3D.get(tile()).getFromSide(direction).getTileEntity(world()));
return getTransmitterNetwork().emit(i*Mekanism.FROM_IC2, list)*Mekanism.TO_IC2;
}
@Override
public float receiveElectricity(ForgeDirection from, ElectricityPack receive, boolean doReceive)
{
ArrayList list = new ArrayList();
list.add(Object3D.get(tile()).getFromSide(from).getTileEntity(world()));
if(doReceive && receive != null && receive.getWatts() > 0)
{
return receive.getWatts() - (float)(getTransmitterNetwork().emit(receive.getWatts()*Mekanism.FROM_UE, list));
}
return 0;
}
@Override
public ElectricityPack provideElectricity(ForgeDirection from, ElectricityPack request, boolean doProvide)
{
return null;
}
@Override
public float getRequest(ForgeDirection direction)
{
ArrayList list = new ArrayList();
list.add(Object3D.get(tile()).getFromSide(direction).getTileEntity(world()));
return (float)(getTransmitterNetwork().getEnergyNeeded(list)*Mekanism.TO_UE);
}
@Override
public float getProvide(ForgeDirection direction)
{
return 0;
}
@Override
public float getVoltage()
{
return 120;
}
@Override
public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate)
{
ArrayList list = new ArrayList();
list.add(Object3D.get(tile()).getFromSide(from).getTileEntity(world()));
if(!simulate)
{
return maxReceive - (int)Math.round(getTransmitterNetwork().emit(maxReceive*Mekanism.FROM_TE, list)*Mekanism.TO_TE);
}
return 0;
}
@Override
public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate)
{
return 0;
}
@Override
public boolean canInterface(ForgeDirection from)
{
return true;
}
@Override
public int getEnergyStored(ForgeDirection from)
{
return 0;
}
@Override
public int getMaxEnergyStored(ForgeDirection from)
{
ArrayList list = new ArrayList();
list.add(Object3D.get(tile()).getFromSide(from).getTileEntity(world()));
return (int)Math.round(getTransmitterNetwork().getEnergyNeeded(list)*Mekanism.TO_TE);
}
}