Abstracting PartRailing from being an IItemRailing and instead making nodes implement it

This commit is contained in:
tgame14 2014-04-17 13:09:44 +03:00
parent f9483a2db5
commit 1ba7f878c4
3 changed files with 66 additions and 73 deletions

View file

@ -1,25 +1,34 @@
package resonantinduction.electrical.itemrailing;
import calclavia.lib.grid.Node;
import calclavia.lib.render.EnumColor;
import com.google.common.collect.Lists;
import net.minecraft.inventory.IInventory;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection;
import resonantinduction.electrical.itemrailing.interfaces.IItemRailing;
import resonantinduction.electrical.itemrailing.interfaces.IItemRailingTransfer;
import universalelectricity.api.vector.IVectorWorld;
import universalelectricity.api.vector.VectorWorld;
import java.util.ArrayList;
import java.util.List;
import java.util.HashSet;
import java.util.Set;
/**
* @author tgame14
* @since 18/03/14
*/
public class NodeRailing extends Node<IItemRailing, GridRailing, NodeRailing> implements IVectorWorld
public class NodeRailing extends Node<PartRailing, GridRailing, NodeRailing> implements IVectorWorld, IItemRailing
{
private EnumColor color;
private Set<IItemRailingTransfer> itemNodeSet;
public NodeRailing(PartRailing parent)
{
super(parent);
this.itemNodeSet = new HashSet<IItemRailingTransfer>();
}
@Override
@ -28,14 +37,10 @@ public class NodeRailing extends Node<IItemRailing, GridRailing, NodeRailing> im
return new GridRailing(getClass());
}
/**
* @return possibly null, a IInventory to target
*/
@Override
public double z()
{
return parent.getWorldPos().z();
return this.getWorldPos().z();
}
@Override
@ -55,4 +60,55 @@ public class NodeRailing extends Node<IItemRailing, GridRailing, NodeRailing> im
{
return parent.getWorldPos().y();
}
@Override
public boolean canItemEnter (IItemRailingTransfer item)
{
return this.color != null ? this.color == item.getColor() : false;
}
@Override
public boolean canConnectToRailing (IItemRailing railing, ForgeDirection from)
{
return this.color != null ? this.color == railing.getRailingColor() : true;
}
@Override
public EnumColor getRailingColor ()
{
return this.color;
}
@Override
public IItemRailing setRailingColor (EnumColor color)
{
this.color = color;
return this;
}
@Override
public VectorWorld getWorldPos()
{
return parent.getWorldPos();
}
@Override
public IInventory[] getInventoriesNearby()
{
ArrayList<IInventory> invList = Lists.<IInventory>newArrayList();
for (TileEntity tile : parent.getConnections())
{
if (tile instanceof IInventory)
{
invList.add((IInventory) tile);
}
}
return (IInventory[]) invList.toArray();
}
@Override
public boolean isLeaf()
{
return parent.getConnections().length < 2;
}
}

View file

@ -30,7 +30,7 @@ import java.util.List;
* @since 16/03/14
* @author tgame14
*/
public class PartRailing extends PartFramedConnection<PartRailing.EnumRailing, IConductor, IEnergyNetwork> implements IConductor, IItemRailing
public class PartRailing extends PartFramedConnection<PartRailing.EnumRailing, IConductor, IEnergyNetwork> implements IConductor, INodeProvider
{
public static enum EnumRailing
@ -74,72 +74,11 @@ public class PartRailing extends PartFramedConnection<PartRailing.EnumRailing, I
return null;
}
@Override
public boolean canItemEnter (IItemRailingTransfer item)
{
return this.color != null ? this.color == item.getColor() : false;
}
@Override
public boolean canConnectToRailing (IItemRailing railing, ForgeDirection from)
{
return this.color != null ? this.color == railing.getRailingColor() : true;
}
@Override
public EnumColor getRailingColor ()
{
return this.color;
}
@Override
public IItemRailing setRailingColor (EnumColor color)
{
this.color = color;
return this;
}
@Override
public VectorWorld getWorldPos()
{
return new VectorWorld(getWorld(), x(), y(), z());
}
//TODO: Handle the part as more of simply a host of Nodes, instead of the node itself
@Override
public IInventory[] getInventoriesNearby()
{
List<IInventory> invList = new ArrayList<IInventory>();
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
{
TileEntity te = this.getWorldPos().translate(dir).getTileEntity(this.getWorldPos().world());
if (te != null && te instanceof IInventory)
{
invList.add((IInventory) te);
}
}
return (IInventory[]) invList.toArray();
}
@Override
public boolean isLeaf()
{
int connectionsCount = 0;
for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS)
{
if (this.getWorldPos().translate(dir).getTileEntity(this.getWorldPos().world()) instanceof IItemRailing)
{
connectionsCount++;
if (connectionsCount >= 2)
{
return false;
}
}
}
return true;
}
@Override
public float getResistance ()
{
@ -193,7 +132,7 @@ public class PartRailing extends PartFramedConnection<PartRailing.EnumRailing, I
return network;
}
//TODO: Fix up
//TODO: Fix up to proper data
@Override
public void setMaterial (int i)
{

View file

@ -1,10 +1,8 @@
package resonantinduction.electrical.itemrailing.interfaces;
import calclavia.lib.grid.INodeProvider;
import calclavia.lib.render.EnumColor;
import net.minecraft.inventory.IInventory;
import net.minecraftforge.common.ForgeDirection;
import universalelectricity.api.vector.IVectorWorld;
import universalelectricity.api.vector.VectorWorld;
/**
@ -14,7 +12,7 @@ import universalelectricity.api.vector.VectorWorld;
* @author tgame14
*/
// TODO: Fix up IVectorWorld implementation to somehow overturn error with ChickenBones Multiparts returning doubles
public interface IItemRailing extends INodeProvider
public interface IItemRailing
{
public boolean canItemEnter (IItemRailingTransfer item);