Some wire trait reorganization
This commit is contained in:
parent
b1d8527bea
commit
48864b2701
6 changed files with 30 additions and 352 deletions
|
@ -24,7 +24,7 @@ object PartColorableMaterial
|
||||||
|
|
||||||
abstract class PartColorableMaterial[M](materialItem: Item) extends TMultiPart with TraitPart
|
abstract class PartColorableMaterial[M](materialItem: Item) extends TMultiPart with TraitPart
|
||||||
{
|
{
|
||||||
var color: Int = PartColorableMaterial.defaultColor
|
var color = PartColorableMaterial.defaultColor
|
||||||
var material: M = _
|
var material: M = _
|
||||||
var isInsulated = false
|
var isInsulated = false
|
||||||
var requiresInsulation = true
|
var requiresInsulation = true
|
||||||
|
|
|
@ -139,31 +139,23 @@ abstract class PartFramedNode[M](material: Item) extends PartColorableMaterial[M
|
||||||
return PartFramedNode.connectionMapContainsSide(getAllCurrentConnections, side)
|
return PartFramedNode.connectionMapContainsSide(getAllCurrentConnections, side)
|
||||||
}
|
}
|
||||||
|
|
||||||
override def onWorldJoin
|
override def onWorldJoin()
|
||||||
{
|
{
|
||||||
node.reconstruct()
|
node.reconstruct()
|
||||||
}
|
}
|
||||||
|
|
||||||
override def onNeighborChanged
|
override def onNeighborChanged()
|
||||||
{
|
{
|
||||||
node.reconstruct()
|
node.reconstruct()
|
||||||
}
|
}
|
||||||
|
|
||||||
override def onWorldSeparate
|
override def onWorldSeparate()
|
||||||
{
|
{
|
||||||
node.deconstruct()
|
node.deconstruct()
|
||||||
}
|
}
|
||||||
|
|
||||||
def copyFrom(other: PartFramedNode[M])
|
|
||||||
{
|
|
||||||
this.isInsulated = other.isInsulated
|
|
||||||
this.color = other.color
|
|
||||||
this.connections = other.connections
|
|
||||||
this.material = other.material
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Packet Methods */
|
/** Packet Methods */
|
||||||
def sendConnectionUpdate
|
def sendConnectionUpdate()
|
||||||
{
|
{
|
||||||
tile.getWriteStream(this).writeByte(0).writeByte(currentConnections)
|
tile.getWriteStream(this).writeByte(0).writeByte(currentConnections)
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
package resonantinduction.electrical.wire.base
|
||||||
|
|
||||||
|
import net.minecraft.item.ItemStack
|
||||||
|
import resonantinduction.core.prefab.part.PartColorableMaterial
|
||||||
|
import resonantinduction.electrical.ElectricalContent
|
||||||
|
import resonantinduction.electrical.wire.WireMaterial
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Calclavia
|
||||||
|
*/
|
||||||
|
trait TWire extends PartColorableMaterial[WireMaterial]
|
||||||
|
{
|
||||||
|
override def setMaterial(i: Int)
|
||||||
|
{
|
||||||
|
material = WireMaterial.values()(i)
|
||||||
|
}
|
||||||
|
|
||||||
|
override def getMaterialID = material.ordinal()
|
||||||
|
|
||||||
|
override protected def getItem = new ItemStack(ElectricalContent.itemInsulation, getMaterialID)
|
||||||
|
|
||||||
|
}
|
|
@ -1,24 +1,16 @@
|
||||||
package resonantinduction.electrical.wire.framed
|
package resonantinduction.electrical.wire.framed
|
||||||
|
|
||||||
import net.minecraft.item.ItemStack
|
import net.minecraft.item.ItemStack
|
||||||
import resonantinduction.core.prefab.part.PartFramedNode
|
import resonantinduction.core.prefab.part.{PartColorableMaterial, PartFramedNode}
|
||||||
import resonantinduction.electrical.ElectricalContent
|
import resonantinduction.electrical.ElectricalContent
|
||||||
import resonantinduction.electrical.wire.WireMaterial
|
import resonantinduction.electrical.wire.WireMaterial
|
||||||
|
import resonantinduction.electrical.wire.base.TWire
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A framed version of the electrical wire
|
* A framed version of the electrical wire
|
||||||
* @author Calclavia
|
* @author Calclavia
|
||||||
*/
|
*/
|
||||||
class PartFramedWire extends PartFramedNode[WireMaterial](ElectricalContent.itemInsulation)
|
class PartFramedWire extends PartColorableMaterial[WireMaterial](ElectricalContent.itemInsulation) with TWire
|
||||||
{
|
{
|
||||||
override def setMaterial(i: Int)
|
|
||||||
{
|
|
||||||
material = WireMaterial.values()(i)
|
|
||||||
}
|
|
||||||
|
|
||||||
override def getMaterialID = material.ordinal()
|
|
||||||
|
|
||||||
override protected def getItem = new ItemStack(ElectricalContent.itemInsulation, getMaterialID)
|
|
||||||
|
|
||||||
override def getType = "FramedWire"
|
override def getType = "FramedWire"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,193 +0,0 @@
|
||||||
package resonantinduction.electrical.wire.trait;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import net.minecraftforge.common.util.ForgeDirection;
|
|
||||||
import resonantinduction.electrical.wire.PartConductor;
|
|
||||||
import codechicken.multipart.TMultiPart;
|
|
||||||
import codechicken.multipart.TileMultipart;
|
|
||||||
import cofh.api.energy.IEnergyHandler;
|
|
||||||
|
|
||||||
public class TraitEnergyHandler extends TileMultipart implements IEnergyHandler
|
|
||||||
{
|
|
||||||
public Set<PartConductor> teConductorInterfaces = new HashSet<PartConductor>();
|
|
||||||
public Set<IEnergyHandler> teInterfaces = new HashSet<IEnergyHandler>();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void copyFrom(TileMultipart that)
|
|
||||||
{
|
|
||||||
super.copyFrom(that);
|
|
||||||
|
|
||||||
if (that instanceof TraitEnergyHandler)
|
|
||||||
{
|
|
||||||
this.teConductorInterfaces = ((TraitEnergyHandler) that).teConductorInterfaces;
|
|
||||||
this.teInterfaces = ((TraitEnergyHandler) that).teInterfaces;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void bindPart(TMultiPart part)
|
|
||||||
{
|
|
||||||
super.bindPart(part);
|
|
||||||
|
|
||||||
if (part instanceof IEnergyHandler)
|
|
||||||
{
|
|
||||||
if (part instanceof PartConductor)
|
|
||||||
{
|
|
||||||
this.teConductorInterfaces.add((PartConductor) part);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.teInterfaces.add((IEnergyHandler) part);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void partRemoved(TMultiPart part, int p)
|
|
||||||
{
|
|
||||||
super.partRemoved(part, p);
|
|
||||||
|
|
||||||
if (part instanceof IEnergyHandler)
|
|
||||||
{
|
|
||||||
if (part instanceof PartConductor)
|
|
||||||
{
|
|
||||||
this.teConductorInterfaces.remove(part);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
this.teInterfaces.remove(part);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void clearParts()
|
|
||||||
{
|
|
||||||
super.clearParts();
|
|
||||||
this.teInterfaces.clear();
|
|
||||||
this.teConductorInterfaces.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate)
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Try out different sides to try to inject energy into.
|
|
||||||
*/
|
|
||||||
if (this.partMap(from.ordinal()) == null)
|
|
||||||
{
|
|
||||||
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
|
|
||||||
{
|
|
||||||
if (dir != from.getOpposite())
|
|
||||||
{
|
|
||||||
TMultiPart part = this.partMap(dir.ordinal());
|
|
||||||
|
|
||||||
if (this.teConductorInterfaces.contains(part))
|
|
||||||
{
|
|
||||||
return ((IEnergyHandler) part).receiveEnergy(from, maxReceive, simulate);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Failed, try pure TE interfaces.
|
|
||||||
*/
|
|
||||||
for (IEnergyHandler handler : this.teInterfaces)
|
|
||||||
{
|
|
||||||
return handler.receiveEnergy(from, maxReceive, simulate);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean canConnectEnergy(ForgeDirection from)
|
|
||||||
{
|
|
||||||
if (this.partMap(from.ordinal()) == null)
|
|
||||||
{
|
|
||||||
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
|
|
||||||
{
|
|
||||||
if (dir != from.getOpposite())
|
|
||||||
{
|
|
||||||
TMultiPart part = this.partMap(dir.ordinal());
|
|
||||||
|
|
||||||
if (this.teConductorInterfaces.contains(part))
|
|
||||||
{
|
|
||||||
return ((IEnergyHandler) part).canConnectEnergy(from);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (IEnergyHandler handler : this.teInterfaces)
|
|
||||||
{
|
|
||||||
return handler.canConnectEnergy(from);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getEnergyStored(ForgeDirection from)
|
|
||||||
{
|
|
||||||
if (this.partMap(from.ordinal()) == null)
|
|
||||||
{
|
|
||||||
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
|
|
||||||
{
|
|
||||||
if (dir != from.getOpposite())
|
|
||||||
{
|
|
||||||
TMultiPart part = this.partMap(dir.ordinal());
|
|
||||||
|
|
||||||
if (this.teConductorInterfaces.contains(part))
|
|
||||||
{
|
|
||||||
return ((IEnergyHandler) part).getEnergyStored(from);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (IEnergyHandler handler : this.teInterfaces)
|
|
||||||
{
|
|
||||||
return handler.getEnergyStored(from);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMaxEnergyStored(ForgeDirection from)
|
|
||||||
{
|
|
||||||
if (this.partMap(from.ordinal()) == null)
|
|
||||||
{
|
|
||||||
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
|
|
||||||
{
|
|
||||||
if (dir != from.getOpposite())
|
|
||||||
{
|
|
||||||
TMultiPart part = this.partMap(dir.ordinal());
|
|
||||||
|
|
||||||
if (this.teConductorInterfaces.contains(part))
|
|
||||||
{
|
|
||||||
return ((IEnergyHandler) part).getMaxEnergyStored(from);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (IEnergyHandler handler : this.teInterfaces)
|
|
||||||
{
|
|
||||||
return handler.getMaxEnergyStored(from);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,135 +0,0 @@
|
||||||
package resonantinduction.electrical.wire.trait;
|
|
||||||
|
|
||||||
import ic2.api.energy.tile.IEnergySink;
|
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import net.minecraft.tileentity.TileEntity;
|
|
||||||
import net.minecraftforge.common.util.ForgeDirection;
|
|
||||||
import codechicken.multipart.PartMap;
|
|
||||||
import codechicken.multipart.TMultiPart;
|
|
||||||
import codechicken.multipart.TileMultipart;
|
|
||||||
|
|
||||||
public class TraitEnergySink extends TileMultipart implements IEnergySink
|
|
||||||
{
|
|
||||||
public Set<IEnergySink> icInterfaces = new HashSet<IEnergySink>();
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void copyFrom(TileMultipart that)
|
|
||||||
{
|
|
||||||
super.copyFrom(that);
|
|
||||||
|
|
||||||
if (that instanceof TraitEnergySink)
|
|
||||||
{
|
|
||||||
this.icInterfaces = ((TraitEnergySink) that).icInterfaces;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void bindPart(TMultiPart part)
|
|
||||||
{
|
|
||||||
super.bindPart(part);
|
|
||||||
|
|
||||||
if (part instanceof IEnergySink)
|
|
||||||
{
|
|
||||||
this.icInterfaces.add((IEnergySink) part);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void partRemoved(TMultiPart part, int p)
|
|
||||||
{
|
|
||||||
super.partRemoved(part, p);
|
|
||||||
|
|
||||||
if (part instanceof IEnergySink)
|
|
||||||
{
|
|
||||||
this.icInterfaces.remove(part);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void clearParts()
|
|
||||||
{
|
|
||||||
super.clearParts();
|
|
||||||
this.icInterfaces.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean acceptsEnergyFrom(TileEntity emitter, ForgeDirection from)
|
|
||||||
{
|
|
||||||
if (this.partMap(from.ordinal()) == null)
|
|
||||||
{
|
|
||||||
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
|
|
||||||
{
|
|
||||||
if (dir != from.getOpposite())
|
|
||||||
{
|
|
||||||
TMultiPart part = this.partMap(dir.ordinal());
|
|
||||||
|
|
||||||
if (this.icInterfaces.contains(part))
|
|
||||||
{
|
|
||||||
return ((IEnergySink) part).acceptsEnergyFrom(emitter, from);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public double demandedEnergyUnits()
|
|
||||||
{
|
|
||||||
double demanded = 0;
|
|
||||||
|
|
||||||
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
|
|
||||||
{
|
|
||||||
TMultiPart part = this.partMap(dir.ordinal());
|
|
||||||
|
|
||||||
if (part instanceof IEnergySink)
|
|
||||||
{
|
|
||||||
demanded += ((IEnergySink) part).demandedEnergyUnits();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return demanded;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public double injectEnergyUnits(ForgeDirection from, double amount)
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Try out different sides to try to inject energy into.
|
|
||||||
*/
|
|
||||||
if (partMap(from.ordinal()) instanceof IEnergySink)
|
|
||||||
{
|
|
||||||
return ((IEnergySink) partMap(from.ordinal())).injectEnergyUnits(from, amount);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
|
|
||||||
{
|
|
||||||
if (dir != from.getOpposite())
|
|
||||||
{
|
|
||||||
TMultiPart part = this.partMap(dir.ordinal());
|
|
||||||
|
|
||||||
if (part instanceof IEnergySink)
|
|
||||||
{
|
|
||||||
return ((IEnergySink) part).injectEnergyUnits(from, amount);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (partMap(PartMap.CENTER.ordinal()) instanceof IEnergySink)
|
|
||||||
{
|
|
||||||
return ((IEnergySink) partMap(PartMap.CENTER.ordinal())).injectEnergyUnits(from, amount);
|
|
||||||
}
|
|
||||||
|
|
||||||
return amount;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getMaxSafeInput()
|
|
||||||
{
|
|
||||||
return Integer.MAX_VALUE;
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue