Fixed inability to inherit twice, changed INodeProvider interface

This commit is contained in:
Calclavia 2014-03-08 11:51:54 -08:00
parent 5888877b0d
commit 148152fc71
31 changed files with 150 additions and 162 deletions

View file

@ -753,17 +753,4 @@ public class TileEngineeringTable extends TileInventory implements IPacketReceiv
return slots; return slots;
} }
@Override
public ForgeDirection getDirection()
{
return ForgeDirection.getOrientation(getBlockMetadata());
}
@Override
public void setDirection(ForgeDirection direction)
{
worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, direction.ordinal(), 3);
}
} }

View file

@ -53,7 +53,7 @@ public class TileFilter extends TileFilterable implements IFilterable
*/ */
for (RecipeResource resoure : MachineRecipes.INSTANCE.getOutput(RecipeType.MIXER, "dust" + LanguageUtility.capitalizeFirst(ResourceGenerator.mixtureToMaterial(fluidBlock.getFluid().getName())))) for (RecipeResource resoure : MachineRecipes.INSTANCE.getOutput(RecipeType.MIXER, "dust" + LanguageUtility.capitalizeFirst(ResourceGenerator.mixtureToMaterial(fluidBlock.getFluid().getName()))))
{ {
InventoryUtility.dropItemStack(worldObj, checkAbove.clone().add(0.5), resoure.getItemStack().copy(), 0, false); InventoryUtility.dropItemStack(worldObj, checkAbove.clone().add(0.5), resoure.getItemStack().copy(), 0, 0);
} }
// TODO: Check if this is correct? // TODO: Check if this is correct?

View file

@ -57,7 +57,7 @@ public class TileGutter extends TilePressurizedNode
{ {
if (tile instanceof IPressureNodeProvider) if (tile instanceof IPressureNodeProvider)
{ {
PressureNode check = ((IPressureNodeProvider) tile).getNode(dir.getOpposite()); PressureNode check = ((IPressureNodeProvider) tile).getNode(PressureNode.class, dir.getOpposite());
if (check != null && canConnect(dir, check) && check.canConnect(dir.getOpposite(), this)) if (check != null && canConnect(dir, check) && check.canConnect(dir.getOpposite(), this))
{ {

View file

@ -1,16 +1,11 @@
package resonantinduction.archaic.fluid.tank; package resonantinduction.archaic.fluid.tank;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.IBlockAccess;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.fluids.FluidContainerRegistry; import net.minecraftforge.fluids.FluidContainerRegistry;
import resonantinduction.api.mechanical.fluid.IPressure;
import resonantinduction.core.fluid.FluidDistributionetwork; import resonantinduction.core.fluid.FluidDistributionetwork;
import resonantinduction.core.fluid.IFluidDistribution; import resonantinduction.core.fluid.IFluidDistribution;
import resonantinduction.core.fluid.TileFluidDistribution; import resonantinduction.core.fluid.TileFluidDistribution;
@ -22,7 +17,7 @@ import calclavia.lib.utility.FluidUtility;
import calclavia.lib.utility.WorldUtility; import calclavia.lib.utility.WorldUtility;
import calclavia.lib.utility.inventory.InventoryUtility; import calclavia.lib.utility.inventory.InventoryUtility;
public class TileTank extends TileFluidDistribution implements IPressure, IComparatorInputOverride public class TileTank extends TileFluidDistribution implements IComparatorInputOverride
{ {
public static final int VOLUME = 16; public static final int VOLUME = 16;
@ -112,17 +107,4 @@ public class TileTank extends TileFluidDistribution implements IPressure, ICompa
} }
} }
} }
@Override
public void setPressure(int amount)
{
pressure = amount;
}
@Override
public int getPressure(ForgeDirection dir)
{
return 0;// (getInternalTank().getCapacity() - getInternalTank().getFluidAmount()) / 10;
}
} }

View file

@ -3,12 +3,11 @@ package resonantinduction.electrical.generator;
import java.util.EnumSet; import java.util.EnumSet;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import resonantinduction.mechanical.energy.network.IMechanicalNodeProvider; import resonantinduction.core.grid.INodeProvider;
import resonantinduction.mechanical.energy.network.MechanicalNode; import resonantinduction.core.grid.Node;
import resonantinduction.mechanical.energy.grid.MechanicalNode;
import universalelectricity.api.energy.EnergyStorageHandler; import universalelectricity.api.energy.EnergyStorageHandler;
import universalelectricity.api.vector.Vector3;
import calclavia.lib.prefab.tile.IRotatable; import calclavia.lib.prefab.tile.IRotatable;
import calclavia.lib.prefab.tile.TileElectrical; import calclavia.lib.prefab.tile.TileElectrical;
@ -17,7 +16,7 @@ import calclavia.lib.prefab.tile.TileElectrical;
* *
* @author Calclavia * @author Calclavia
*/ */
public class TileGenerator extends TileElectrical implements IRotatable, IMechanicalNodeProvider public class TileGenerator extends TileElectrical implements IRotatable, INodeProvider
{ {
protected MechanicalNode node = new MechanicalNode(this) protected MechanicalNode node = new MechanicalNode(this)
{ {
@ -164,8 +163,10 @@ public class TileGenerator extends TileElectrical implements IRotatable, IMechan
} }
@Override @Override
public MechanicalNode getNode(ForgeDirection from) public <N extends Node> N getNode(Class<? super N> nodeType, ForgeDirection from)
{ {
return node; if (nodeType.isAssignableFrom(node.getClass()))
return (N) node;
return null;
} }
} }

View file

@ -11,12 +11,13 @@ import net.minecraft.util.MovingObjectPosition;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler; import net.minecraftforge.fluids.IFluidHandler;
import resonantinduction.api.mechanical.fluid.IPressure;
import resonantinduction.core.ResonantInduction; import resonantinduction.core.ResonantInduction;
import resonantinduction.core.grid.INodeProvider;
import resonantinduction.core.grid.fluid.IPressureNodeProvider;
import resonantinduction.core.grid.fluid.PressureNode;
import resonantinduction.core.prefab.part.PartFace; import resonantinduction.core.prefab.part.PartFace;
import resonantinduction.electrical.Electrical; import resonantinduction.electrical.Electrical;
import resonantinduction.mechanical.energy.network.IMechanicalNodeProvider; import resonantinduction.mechanical.energy.grid.MechanicalNode;
import resonantinduction.mechanical.energy.network.MechanicalNode;
import universalelectricity.api.CompatibilityModule; import universalelectricity.api.CompatibilityModule;
import universalelectricity.api.electricity.IElectricalNetwork; import universalelectricity.api.electricity.IElectricalNetwork;
import universalelectricity.api.energy.IConductor; import universalelectricity.api.energy.IConductor;
@ -268,9 +269,9 @@ public class PartMultimeter extends PartFace implements IConnector<MultimeterNet
} }
} }
if (tileEntity instanceof IMechanicalNodeProvider) if (tileEntity instanceof INodeProvider)
{ {
MechanicalNode instance = ((IMechanicalNodeProvider) tileEntity).getNode(receivingSide); MechanicalNode instance = ((INodeProvider) tileEntity).getNode(MechanicalNode.class, receivingSide);
for (ForgeDirection dir : ForgeDirection.values()) for (ForgeDirection dir : ForgeDirection.values())
{ {
@ -279,7 +280,7 @@ public class PartMultimeter extends PartFace implements IConnector<MultimeterNet
break; break;
} }
instance = ((IMechanicalNodeProvider) tileEntity).getNode(dir); instance = ((INodeProvider) tileEntity).getNode(MechanicalNode.class, dir);
} }
if (instance != null) if (instance != null)
@ -305,9 +306,9 @@ public class PartMultimeter extends PartFace implements IConnector<MultimeterNet
} }
} }
if (tileEntity instanceof IPressure) if (tileEntity instanceof IPressureNodeProvider)
{ {
getNetwork().pressureGraph.queue(((IPressure) tileEntity).getPressure(receivingSide)); getNetwork().pressureGraph.queue(((IPressureNodeProvider) tileEntity).getNode(PressureNode.class, receivingSide).getPressure(receivingSide));
} }
if (tileEntity instanceof ITemperature) if (tileEntity instanceof ITemperature)

View file

@ -18,7 +18,8 @@ public class MultipartMechanical implements IPartFactory
{ {
MultiPartRegistry.registerParts(this, PART_TYPES); MultiPartRegistry.registerParts(this, PART_TYPES);
MultipartGenerator.registerPassThroughInterface("resonantinduction.core.grid.fluid.IPressureNodeProvider"); MultipartGenerator.registerPassThroughInterface("resonantinduction.core.grid.fluid.IPressureNodeProvider");
MultipartGenerator.registerTrait("resonantinduction.mechanical.energy.network.IMechanicalNodeProvider", "resonantinduction.mechanical.trait.TraitMechanical"); // TODO: Move to UE
MultipartGenerator.registerTrait("resonantinduction.core.grid.INodeProvider", "resonantinduction.core.grid.TraitNodeProvider");
} }
@Override @Override

View file

@ -14,10 +14,10 @@ import net.minecraftforge.common.ForgeDirection;
import resonantinduction.api.mechanical.IBelt; import resonantinduction.api.mechanical.IBelt;
import resonantinduction.core.Reference; import resonantinduction.core.Reference;
import resonantinduction.core.ResonantInduction; import resonantinduction.core.ResonantInduction;
import resonantinduction.core.grid.INodeProvider;
import resonantinduction.mechanical.Mechanical; import resonantinduction.mechanical.Mechanical;
import resonantinduction.mechanical.energy.network.IMechanicalNodeProvider; import resonantinduction.mechanical.energy.grid.MechanicalNode;
import resonantinduction.mechanical.energy.network.MechanicalNode; import resonantinduction.mechanical.energy.grid.TileMechanical;
import resonantinduction.mechanical.energy.network.TileMechanical;
import universalelectricity.api.vector.Vector3; import universalelectricity.api.vector.Vector3;
import calclavia.lib.prefab.tile.IRotatable; import calclavia.lib.prefab.tile.IRotatable;
@ -85,13 +85,13 @@ public class TileConveyorBelt extends TileMechanical implements IBelt, IRotatabl
if (tile instanceof TileConveyorBelt) if (tile instanceof TileConveyorBelt)
{ {
connections.put(((TileConveyorBelt) tile).getNode(dir.getOpposite()), dir); connections.put(((TileConveyorBelt) tile).getNode(MechanicalNode.class, dir.getOpposite()), dir);
didRefresh = true; didRefresh = true;
} }
} }
else if (tile instanceof IMechanicalNodeProvider) else if (tile instanceof INodeProvider)
{ {
MechanicalNode mechanical = ((IMechanicalNodeProvider) tile).getNode(dir.getOpposite()); MechanicalNode mechanical = ((INodeProvider) tile).getNode(MechanicalNode.class, dir.getOpposite());
if (mechanical != null) if (mechanical != null)
{ {

View file

@ -12,11 +12,12 @@ import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import resonantinduction.core.Reference; import resonantinduction.core.Reference;
import resonantinduction.core.grid.INodeProvider;
import resonantinduction.core.grid.Node;
import resonantinduction.core.resource.ItemHandCrank; import resonantinduction.core.resource.ItemHandCrank;
import resonantinduction.mechanical.Mechanical; import resonantinduction.mechanical.Mechanical;
import resonantinduction.mechanical.energy.network.IMechanicalNodeProvider; import resonantinduction.mechanical.energy.grid.MechanicalNode;
import resonantinduction.mechanical.energy.network.MechanicalNode; import resonantinduction.mechanical.energy.grid.PartMechanical;
import resonantinduction.mechanical.energy.network.PartMechanical;
import calclavia.lib.multiblock.reference.IMultiBlockStructure; import calclavia.lib.multiblock.reference.IMultiBlockStructure;
import calclavia.lib.multiblock.reference.MultiBlockHandler; import calclavia.lib.multiblock.reference.MultiBlockHandler;
import calclavia.lib.utility.WrenchUtility; import calclavia.lib.utility.WrenchUtility;
@ -121,9 +122,9 @@ public class PartGear extends PartMechanical implements IMultiBlockStructure<Par
/** Look for gears that are back-to-back with this gear. Equate torque. */ /** Look for gears that are back-to-back with this gear. Equate torque. */
TileEntity tileBehind = new universalelectricity.api.vector.Vector3(tile()).translate(placementSide).getTileEntity(world()); TileEntity tileBehind = new universalelectricity.api.vector.Vector3(tile()).translate(placementSide).getTileEntity(world());
if (tileBehind instanceof IMechanicalNodeProvider) if (tileBehind instanceof INodeProvider)
{ {
MechanicalNode instance = ((IMechanicalNodeProvider) tileBehind).getNode(placementSide.getOpposite()); MechanicalNode instance = ((INodeProvider) tileBehind).getNode(MechanicalNode.class, placementSide.getOpposite());
if (instance != null && instance != this && !(instance.parent instanceof PartGearShaft) && instance.canConnect(placementSide.getOpposite(), this)) if (instance != null && instance != this && !(instance.parent instanceof PartGearShaft) && instance.canConnect(placementSide.getOpposite(), this))
{ {
@ -146,7 +147,7 @@ public class PartGear extends PartMechanical implements IMultiBlockStructure<Par
tile = new universalelectricity.api.vector.Vector3(tile()).translate(checkDir).getTileEntity(world()); tile = new universalelectricity.api.vector.Vector3(tile()).translate(checkDir).getTileEntity(world());
} }
if (tile instanceof IMechanicalNodeProvider) if (tile instanceof INodeProvider)
{ {
/** /**
* If we're checking for the block that is opposite to the gear's * If we're checking for the block that is opposite to the gear's
@ -154,7 +155,7 @@ public class PartGear extends PartMechanical implements IMultiBlockStructure<Par
* side * side
* (the center), then we try to look for a gear shaft in the center. * (the center), then we try to look for a gear shaft in the center.
*/ */
MechanicalNode instance = ((IMechanicalNodeProvider) tile).getNode(checkDir == placementSide.getOpposite() ? ForgeDirection.UNKNOWN : checkDir); MechanicalNode instance = ((INodeProvider) tile).getNode(MechanicalNode.class, checkDir == placementSide.getOpposite() ? ForgeDirection.UNKNOWN : checkDir);
if (!connections.containsValue(checkDir) && instance != this && checkDir != placementSide && instance != null && instance.canConnect(checkDir.getOpposite(), this)) if (!connections.containsValue(checkDir) && instance != this && checkDir != placementSide && instance != null && instance.canConnect(checkDir.getOpposite(), this))
{ {
@ -176,9 +177,9 @@ public class PartGear extends PartMechanical implements IMultiBlockStructure<Par
ForgeDirection checkDir = ForgeDirection.getOrientation(Rotation.rotateSide(PartGear.this.placementSide.ordinal(), i)); ForgeDirection checkDir = ForgeDirection.getOrientation(Rotation.rotateSide(PartGear.this.placementSide.ordinal(), i));
TileEntity checkTile = new universalelectricity.api.vector.Vector3(tile()).translate(checkDir, displaceCheck).getTileEntity(world()); TileEntity checkTile = new universalelectricity.api.vector.Vector3(tile()).translate(checkDir, displaceCheck).getTileEntity(world());
if (!connections.containsValue(checkDir) && checkTile instanceof IMechanicalNodeProvider) if (!connections.containsValue(checkDir) && checkTile instanceof INodeProvider)
{ {
MechanicalNode instance = ((IMechanicalNodeProvider) checkTile).getNode(placementSide); MechanicalNode instance = ((INodeProvider) checkTile).getNode(MechanicalNode.class, placementSide);
if (instance != null && instance != this && instance.canConnect(checkDir.getOpposite(), this) && !(instance.parent instanceof PartGearShaft)) if (instance != null && instance != this && instance.canConnect(checkDir.getOpposite(), this) && !(instance.parent instanceof PartGearShaft))
{ {
@ -206,7 +207,7 @@ public class PartGear extends PartMechanical implements IMultiBlockStructure<Par
if (with instanceof MechanicalNode) if (with instanceof MechanicalNode)
{ {
IMechanicalNodeProvider parent = ((MechanicalNode) with).parent; INodeProvider parent = ((MechanicalNode) with).parent;
/** /**
* Check for flat connections (gear face on gear face) to make sure it's * Check for flat connections (gear face on gear face) to make sure it's
@ -268,9 +269,9 @@ public class PartGear extends PartMechanical implements IMultiBlockStructure<Par
/** Face to face stick connection. */ /** Face to face stick connection. */
TileEntity sourceTile = position().translate(from.getOpposite()).getTileEntity(world()); TileEntity sourceTile = position().translate(from.getOpposite()).getTileEntity(world());
if (sourceTile instanceof IMechanicalNodeProvider) if (sourceTile instanceof INodeProvider)
{ {
MechanicalNode sourceInstance = ((IMechanicalNodeProvider) sourceTile).getNode(from); MechanicalNode sourceInstance = ((INodeProvider) sourceTile).getNode(MechanicalNode.class, from);
return sourceInstance == with; return sourceInstance == with;
} }
} }
@ -279,9 +280,9 @@ public class PartGear extends PartMechanical implements IMultiBlockStructure<Par
/** Face to face stick connection. */ /** Face to face stick connection. */
TileEntity sourceTile = position().translate(from).getTileEntity(world()); TileEntity sourceTile = position().translate(from).getTileEntity(world());
if (sourceTile instanceof IMechanicalNodeProvider) if (sourceTile instanceof INodeProvider)
{ {
MechanicalNode sourceInstance = ((IMechanicalNodeProvider) sourceTile).getNode(from.getOpposite()); MechanicalNode sourceInstance = ((INodeProvider) sourceTile).getNode(MechanicalNode.class, from.getOpposite());
return sourceInstance == with; return sourceInstance == with;
} }
} }
@ -289,7 +290,7 @@ public class PartGear extends PartMechanical implements IMultiBlockStructure<Par
{ {
TileEntity destinationTile = ((MechanicalNode) with).position().translate(from.getOpposite()).getTileEntity(world()); TileEntity destinationTile = ((MechanicalNode) with).position().translate(from.getOpposite()).getTileEntity(world());
if (destinationTile instanceof IMechanicalNodeProvider && destinationTile instanceof TileMultipart) if (destinationTile instanceof INodeProvider && destinationTile instanceof TileMultipart)
{ {
TMultiPart destinationPart = ((TileMultipart) destinationTile).partMap(placementSide.ordinal()); TMultiPart destinationPart = ((TileMultipart) destinationTile).partMap(placementSide.ordinal());
@ -527,9 +528,11 @@ public class PartGear extends PartMechanical implements IMultiBlockStructure<Par
} }
@Override @Override
public MechanicalNode getNode(ForgeDirection from) public <N extends Node> N getNode(Class<? super N> nodeType, ForgeDirection from)
{ {
return getMultiBlock().get().node; if (nodeType.isAssignableFrom(node.getClass()))
return (N) getMultiBlock().get().node;
return null;
} }
/** Multipart Bounds */ /** Multipart Bounds */

View file

@ -7,10 +7,10 @@ import java.util.Set;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import resonantinduction.core.grid.INodeProvider;
import resonantinduction.mechanical.Mechanical; import resonantinduction.mechanical.Mechanical;
import resonantinduction.mechanical.energy.network.IMechanicalNodeProvider; import resonantinduction.mechanical.energy.grid.MechanicalNode;
import resonantinduction.mechanical.energy.network.MechanicalNode; import resonantinduction.mechanical.energy.grid.PartMechanical;
import resonantinduction.mechanical.energy.network.PartMechanical;
import codechicken.lib.raytracer.IndexedCuboid6; import codechicken.lib.raytracer.IndexedCuboid6;
import codechicken.lib.vec.Cuboid6; import codechicken.lib.vec.Cuboid6;
import codechicken.lib.vec.Vector3; import codechicken.lib.vec.Vector3;
@ -98,7 +98,7 @@ public class PartGearShaft extends PartMechanical
if (checkDir == placementSide || checkDir == placementSide.getOpposite()) if (checkDir == placementSide || checkDir == placementSide.getOpposite())
{ {
MechanicalNode instance = ((IMechanicalNodeProvider) tile()).getNode(checkDir); MechanicalNode instance = ((INodeProvider) tile()).getNode(MechanicalNode.class, checkDir);
if (instance != null && instance != this && instance.canConnect(checkDir.getOpposite(), this)) if (instance != null && instance != this && instance.canConnect(checkDir.getOpposite(), this))
{ {
@ -116,9 +116,9 @@ public class PartGearShaft extends PartMechanical
{ {
TileEntity checkTile = new universalelectricity.api.vector.Vector3(tile()).translate(checkDir).getTileEntity(world()); TileEntity checkTile = new universalelectricity.api.vector.Vector3(tile()).translate(checkDir).getTileEntity(world());
if (checkTile instanceof IMechanicalNodeProvider) if (checkTile instanceof INodeProvider)
{ {
MechanicalNode instance = ((IMechanicalNodeProvider) checkTile).getNode(checkDir.getOpposite()); MechanicalNode instance = ((INodeProvider) checkTile).getNode(MechanicalNode.class, checkDir.getOpposite());
// Only connect to shafts outside of this block space. // Only connect to shafts outside of this block space.
if (instance != null && instance != this && instance.parent instanceof PartGearShaft && instance.canConnect(checkDir.getOpposite(), this)) if (instance != null && instance != this && instance.parent instanceof PartGearShaft && instance.canConnect(checkDir.getOpposite(), this))

View file

@ -1,4 +1,4 @@
package resonantinduction.mechanical.energy.network; package resonantinduction.mechanical.energy.grid;
import resonantinduction.core.grid.Grid; import resonantinduction.core.grid.Grid;
import resonantinduction.core.grid.INodeProvider; import resonantinduction.core.grid.INodeProvider;

View file

@ -1,4 +1,4 @@
package resonantinduction.mechanical.energy.network; package resonantinduction.mechanical.energy.grid;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map.Entry; import java.util.Map.Entry;
@ -8,7 +8,6 @@ import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import resonantinduction.core.ResonantInduction; import resonantinduction.core.ResonantInduction;
import resonantinduction.core.grid.Grid;
import resonantinduction.core.grid.INodeProvider; import resonantinduction.core.grid.INodeProvider;
import resonantinduction.core.grid.TickingGrid; import resonantinduction.core.grid.TickingGrid;
import universalelectricity.api.vector.Vector3; import universalelectricity.api.vector.Vector3;
@ -30,7 +29,7 @@ import codechicken.multipart.TMultiPart;
* *
* @author Calclavia * @author Calclavia
*/ */
public class MechanicalNode extends EnergyNode<IMechanicalNodeProvider, TickingGrid, MechanicalNode> public class MechanicalNode extends EnergyNode<INodeProvider, TickingGrid, MechanicalNode>
{ {
public double torque = 0; public double torque = 0;
public double prevAngularVelocity, angularVelocity = 0; public double prevAngularVelocity, angularVelocity = 0;
@ -46,7 +45,7 @@ public class MechanicalNode extends EnergyNode<IMechanicalNodeProvider, TickingG
private double power = 0; private double power = 0;
public MechanicalNode(IMechanicalNodeProvider parent) public MechanicalNode(INodeProvider parent)
{ {
super(parent); super(parent);
} }
@ -201,9 +200,9 @@ public class MechanicalNode extends EnergyNode<IMechanicalNodeProvider, TickingG
{ {
TileEntity tile = position().translate(dir).getTileEntity(world()); TileEntity tile = position().translate(dir).getTileEntity(world());
if (tile instanceof IMechanicalNodeProvider) if (tile instanceof INodeProvider)
{ {
MechanicalNode check = ((IMechanicalNodeProvider) tile).getNode(dir.getOpposite()); MechanicalNode check = ((INodeProvider) tile).getNode(MechanicalNode.class, dir.getOpposite());
if (check != null && canConnect(dir, check) && check.canConnect(dir.getOpposite(), this)) if (check != null && canConnect(dir, check) && check.canConnect(dir.getOpposite(), this))
{ {

View file

@ -1,4 +1,4 @@
package resonantinduction.mechanical.energy.network; package resonantinduction.mechanical.energy.grid;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;

View file

@ -1,4 +1,4 @@
package resonantinduction.mechanical.energy.network; package resonantinduction.mechanical.energy.grid;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -7,12 +7,14 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.MovingObjectPosition;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import resonantinduction.core.grid.INodeProvider;
import resonantinduction.core.grid.Node;
import resonantinduction.mechanical.energy.turbine.TileMechanicalTurbine;
import codechicken.lib.data.MCDataInput; import codechicken.lib.data.MCDataInput;
import codechicken.lib.data.MCDataOutput; import codechicken.lib.data.MCDataOutput;
import codechicken.multipart.JCuboidPart; import codechicken.multipart.JCuboidPart;
import codechicken.multipart.JNormalOcclusion; import codechicken.multipart.JNormalOcclusion;
import codechicken.multipart.TFacePart; import codechicken.multipart.TFacePart;
import codechicken.multipart.TMultiPart;
/** /**
* We assume all the force acting on the gear is 90 degrees. * We assume all the force acting on the gear is 90 degrees.
@ -20,7 +22,7 @@ import codechicken.multipart.TMultiPart;
* @author Calclavia * @author Calclavia
* *
*/ */
public abstract class PartMechanical extends JCuboidPart implements JNormalOcclusion, TFacePart, IMechanicalNodeProvider public abstract class PartMechanical extends JCuboidPart implements JNormalOcclusion, TFacePart, INodeProvider
{ {
public MechanicalNode node; public MechanicalNode node;
protected double prevAngularVelocity; protected double prevAngularVelocity;
@ -68,9 +70,12 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
} }
} }
public MechanicalNode getNode(ForgeDirection dir) @Override
public <N extends Node> N getNode(Class<? super N> nodeType, ForgeDirection from)
{ {
return node; if (nodeType.isAssignableFrom(node.getClass()))
return (N) node;
return null;
} }
@Override @Override

View file

@ -1,9 +1,10 @@
package resonantinduction.mechanical.energy.network; package resonantinduction.mechanical.energy.grid;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import resonantinduction.core.ResonantInduction; import resonantinduction.core.ResonantInduction;
import resonantinduction.core.grid.INodeProvider;
import resonantinduction.core.grid.Node; import resonantinduction.core.grid.Node;
import resonantinduction.mechanical.Mechanical; import resonantinduction.mechanical.Mechanical;
import universalelectricity.api.vector.Vector3; import universalelectricity.api.vector.Vector3;
@ -13,7 +14,7 @@ import calclavia.lib.prefab.tile.TileAdvanced;
import com.google.common.io.ByteArrayDataInput; import com.google.common.io.ByteArrayDataInput;
public abstract class TileMechanical extends TileAdvanced implements IMechanicalNodeProvider, IPacketReceiver public abstract class TileMechanical extends TileAdvanced implements INodeProvider, IPacketReceiver
{ {
protected static final int PACKET_VELOCITY = Mechanical.contentRegistry.getNextPacketID(); protected static final int PACKET_VELOCITY = Mechanical.contentRegistry.getNextPacketID();
@ -21,7 +22,7 @@ public abstract class TileMechanical extends TileAdvanced implements IMechanical
protected class PacketMechanicalNode extends MechanicalNode protected class PacketMechanicalNode extends MechanicalNode
{ {
public PacketMechanicalNode(IMechanicalNodeProvider parent) public PacketMechanicalNode(INodeProvider parent)
{ {
super(parent); super(parent);
} }
@ -69,9 +70,11 @@ public abstract class TileMechanical extends TileAdvanced implements IMechanical
} }
@Override @Override
public MechanicalNode getNode(Class<? extends Node> clazz, ForgeDirection dir) public <N extends Node> N getNode(Class<? super N> nodeType, ForgeDirection from)
{ {
return mechanicalNode; if (nodeType.isAssignableFrom(mechanicalNode.getClass()))
return (N) mechanicalNode;
return null;
} }
private void sendRotationPacket() private void sendRotationPacket()

View file

@ -1,8 +0,0 @@
package resonantinduction.mechanical.energy.network;
import resonantinduction.core.grid.INodeProvider;
public interface IMechanicalNodeProvider extends INodeProvider
{
}

View file

@ -3,22 +3,23 @@ package resonantinduction.mechanical.energy.turbine;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import resonantinduction.mechanical.energy.network.IMechanicalNodeProvider; import resonantinduction.core.grid.INodeProvider;
import resonantinduction.mechanical.energy.network.MechanicalNode; import resonantinduction.core.grid.Node;
import resonantinduction.mechanical.energy.grid.MechanicalNode;
import universalelectricity.api.energy.EnergyStorageHandler; import universalelectricity.api.energy.EnergyStorageHandler;
import calclavia.lib.network.Synced.SyncedInput; import calclavia.lib.network.Synced.SyncedInput;
import calclavia.lib.network.Synced.SyncedOutput; import calclavia.lib.network.Synced.SyncedOutput;
import calclavia.lib.prefab.turbine.TileTurbine; import calclavia.lib.prefab.turbine.TileTurbine;
public class TileMechanicalTurbine extends TileTurbine implements IMechanicalNodeProvider public class TileMechanicalTurbine extends TileTurbine implements INodeProvider
{ {
protected MechanicalNode node; protected MechanicalNode mechanicalNode;
public TileMechanicalTurbine() public TileMechanicalTurbine()
{ {
super(); super();
energy = new EnergyStorageHandler(0); energy = new EnergyStorageHandler(0);
node = new MechanicalNode(this) mechanicalNode = new MechanicalNode(this)
{ {
@Override @Override
public boolean canConnect(ForgeDirection from, Object source) public boolean canConnect(ForgeDirection from, Object source)
@ -30,9 +31,9 @@ public class TileMechanicalTurbine extends TileTurbine implements IMechanicalNod
*/ */
TileEntity sourceTile = position().translate(from).getTileEntity(getWorld()); TileEntity sourceTile = position().translate(from).getTileEntity(getWorld());
if (sourceTile instanceof IMechanicalNodeProvider) if (sourceTile instanceof INodeProvider)
{ {
MechanicalNode sourceInstance = ((IMechanicalNodeProvider) sourceTile).getNode(from.getOpposite()); MechanicalNode sourceInstance = ((INodeProvider) sourceTile).getNode(MechanicalNode.class, from.getOpposite());
return sourceInstance == source && from == getDirection().getOpposite(); return sourceInstance == source && from == getDirection().getOpposite();
} }
} }
@ -57,28 +58,30 @@ public class TileMechanicalTurbine extends TileTurbine implements IMechanicalNod
@Override @Override
public void initiate() public void initiate()
{ {
node.reconstruct(); mechanicalNode.reconstruct();
super.initiate(); super.initiate();
} }
@Override @Override
public void invalidate() public void invalidate()
{ {
node.deconstruct(); mechanicalNode.deconstruct();
super.invalidate(); super.invalidate();
} }
@Override @Override
public void onProduce() public void onProduce()
{ {
node.torque += (torque - node.torque) / 10; mechanicalNode.torque += (torque - mechanicalNode.torque) / 10;
node.angularVelocity += (angularVelocity - node.angularVelocity) / 10; mechanicalNode.angularVelocity += (angularVelocity - mechanicalNode.angularVelocity) / 10;
} }
@Override @Override
public MechanicalNode getNode(ForgeDirection dir) public <N extends Node> N getNode(Class<? super N> nodeType, ForgeDirection from)
{ {
return ((TileMechanicalTurbine) getMultiBlock().get()).node; if (nodeType.isAssignableFrom(mechanicalNode.getClass()))
return (N) ((TileMechanicalTurbine) getMultiBlock().get()).mechanicalNode;
return null;
} }
@Override @Override
@ -87,7 +90,7 @@ public class TileMechanicalTurbine extends TileTurbine implements IMechanicalNod
{ {
super.readFromNBT(nbt); super.readFromNBT(nbt);
tier = nbt.getInteger("tier"); tier = nbt.getInteger("tier");
node.load(nbt); mechanicalNode.load(nbt);
} }
/** /**
@ -99,6 +102,6 @@ public class TileMechanicalTurbine extends TileTurbine implements IMechanicalNod
{ {
super.writeToNBT(nbt); super.writeToNBT(nbt);
nbt.setInteger("tier", tier); nbt.setInteger("tier", tier);
node.save(nbt); mechanicalNode.save(nbt);
} }
} }

View file

@ -13,6 +13,7 @@ import net.minecraftforge.fluids.FluidTank;
import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler; import net.minecraftforge.fluids.IFluidHandler;
import resonantinduction.core.ResonantInduction; import resonantinduction.core.ResonantInduction;
import resonantinduction.core.grid.Node;
import resonantinduction.core.grid.fluid.IPressureNodeProvider; import resonantinduction.core.grid.fluid.IPressureNodeProvider;
import resonantinduction.core.grid.fluid.PressureNode; import resonantinduction.core.grid.fluid.PressureNode;
import resonantinduction.core.prefab.part.PartFramedNode; import resonantinduction.core.prefab.part.PartFramedNode;
@ -59,7 +60,7 @@ public class PartPipe extends PartFramedNode<EnumPipeMaterial, PressureNode, IPr
{ {
if (tile instanceof IPressureNodeProvider) if (tile instanceof IPressureNodeProvider)
{ {
PressureNode check = ((IPressureNodeProvider) tile).getNode(dir.getOpposite()); PressureNode check = ((IPressureNodeProvider) tile).getNode(PressureNode.class, dir.getOpposite());
if (check != null && canConnect(dir, check) && check.canConnect(dir.getOpposite(), this)) if (check != null && canConnect(dir, check) && check.canConnect(dir.getOpposite(), this))
{ {
@ -239,8 +240,6 @@ public class PartPipe extends PartFramedNode<EnumPipeMaterial, PressureNode, IPr
return this.tank; return this.tank;
} }
@Override @Override
public void drawBreaking(RenderBlocks renderBlocks) public void drawBreaking(RenderBlocks renderBlocks)
{ {

View file

@ -49,8 +49,8 @@ public class RenderPipe implements ISimpleItemRenderer
GL11.glPushMatrix(); GL11.glPushMatrix();
FluidStack fluid = part.getInternalTank().getFluid(); FluidStack fluid = part.getPressureTank().getFluid();
int capacity = part.getInternalTank().getCapacity(); int capacity = part.getPressureTank().getCapacity();
byte renderSides = part.getAllCurrentConnections(); byte renderSides = part.getAllCurrentConnections();
if (fluid != null && fluid.amount > 0) if (fluid != null && fluid.amount > 0)

View file

@ -36,7 +36,7 @@ public class RenderPump extends TileEntitySpecialRenderer
List<String> notRendered = new ArrayList<String>(); List<String> notRendered = new ArrayList<String>();
GL11.glPushMatrix(); GL11.glPushMatrix();
GL11.glRotated(Math.toDegrees((float) tile.getNode(null).angle), 0, 0, 1); GL11.glRotated(Math.toDegrees((float) tile.mechanicalNode.angle), 0, 0, 1);
for (int i = 1; i <= 12; i++) for (int i = 1; i <= 12; i++)
{ {

View file

@ -7,9 +7,10 @@ import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.FluidTank;
import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler; import net.minecraftforge.fluids.IFluidHandler;
import resonantinduction.core.grid.Node;
import resonantinduction.core.grid.fluid.IPressureNodeProvider; import resonantinduction.core.grid.fluid.IPressureNodeProvider;
import resonantinduction.core.grid.fluid.PressureNode; import resonantinduction.core.grid.fluid.PressureNode;
import resonantinduction.mechanical.energy.network.TileMechanical; import resonantinduction.mechanical.energy.grid.TileMechanical;
import universalelectricity.api.vector.Vector3; import universalelectricity.api.vector.Vector3;
import calclavia.lib.prefab.tile.IRotatable; import calclavia.lib.prefab.tile.IRotatable;
@ -39,7 +40,7 @@ public class TilePump extends TileMechanical implements IPressureNodeProvider, I
return 0; return 0;
} }
} };
} }
@Override @Override
@ -129,4 +130,12 @@ public class TilePump extends TileMechanical implements IPressureNodeProvider, I
return null; return null;
} }
@Override
public <N extends Node> N getNode(Class<? super N> nodeType, ForgeDirection from)
{
if (nodeType.isAssignableFrom(pressureNode.getClass()))
return (N) pressureNode;
return super.getNode(nodeType, from);
}
} }

View file

@ -9,6 +9,7 @@ import net.minecraftforge.client.model.IModelCustom;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import resonantinduction.core.Reference; import resonantinduction.core.Reference;
import resonantinduction.core.grid.fluid.PressureNode;
import calclavia.lib.render.RenderUtility; import calclavia.lib.render.RenderUtility;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
@ -33,7 +34,7 @@ public class RenderMechanicalPiston extends TileEntitySpecialRenderer
RenderUtility.bind(TEXTURE); RenderUtility.bind(TEXTURE);
// Angle in radians of the rotor. // Angle in radians of the rotor.
float angle = (float) tile.getNode(null).angle; float angle = (float) tile.mechanicalNode.angle;
float radius = 0.5f; float radius = 0.5f;
// Length of piston arm // Length of piston arm
float length = 1f; float length = 1f;

View file

@ -7,7 +7,7 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import resonantinduction.mechanical.energy.network.TileMechanical; import resonantinduction.mechanical.energy.grid.TileMechanical;
import universalelectricity.api.vector.Vector3; import universalelectricity.api.vector.Vector3;
import calclavia.lib.utility.MovementUtility; import calclavia.lib.utility.MovementUtility;
import cpw.mods.fml.common.Loader; import cpw.mods.fml.common.Loader;

View file

@ -13,8 +13,8 @@ import resonantinduction.api.recipe.RecipeResource;
import resonantinduction.archaic.filter.Timer; import resonantinduction.archaic.filter.Timer;
import resonantinduction.core.Reference; import resonantinduction.core.Reference;
import resonantinduction.core.ResonantInduction; import resonantinduction.core.ResonantInduction;
import resonantinduction.mechanical.energy.network.MechanicalNode; import resonantinduction.mechanical.energy.grid.MechanicalNode;
import resonantinduction.mechanical.energy.network.TileMechanical; import resonantinduction.mechanical.energy.grid.TileMechanical;
import universalelectricity.api.vector.Vector3; import universalelectricity.api.vector.Vector3;
import calclavia.lib.prefab.tile.IRotatable; import calclavia.lib.prefab.tile.IRotatable;

View file

@ -40,7 +40,7 @@ public class RenderMixer extends TileEntitySpecialRenderer implements ISimpleIte
RenderUtility.bind(TEXTURE); RenderUtility.bind(TEXTURE);
MODEL.renderOnly("centerTop", "centerBase"); MODEL.renderOnly("centerTop", "centerBase");
glPushMatrix(); glPushMatrix();
glRotatef((float) Math.toDegrees((float) tile.getNode(null).angle), 0, 1, 0); glRotatef((float) Math.toDegrees((float) tile.mechanicalNode.angle), 0, 1, 0);
MODEL.renderAllExcept("centerTop", "centerBase"); MODEL.renderAllExcept("centerTop", "centerBase");
glPopMatrix(); glPopMatrix();
glPopMatrix(); glPopMatrix();

View file

@ -18,8 +18,8 @@ import resonantinduction.archaic.filter.Timer;
import resonantinduction.core.Reference; import resonantinduction.core.Reference;
import resonantinduction.core.resource.ResourceGenerator; import resonantinduction.core.resource.ResourceGenerator;
import resonantinduction.core.resource.fluid.BlockFluidMixture; import resonantinduction.core.resource.fluid.BlockFluidMixture;
import resonantinduction.mechanical.energy.network.MechanicalNode; import resonantinduction.mechanical.energy.grid.MechanicalNode;
import resonantinduction.mechanical.energy.network.TileMechanical; import resonantinduction.mechanical.energy.grid.TileMechanical;
import universalelectricity.api.vector.Vector3; import universalelectricity.api.vector.Vector3;
import calclavia.lib.utility.inventory.InventoryUtility; import calclavia.lib.utility.inventory.InventoryUtility;
@ -205,7 +205,7 @@ public class TileMixer extends TileMechanical implements IInventory
if (!worldObj.isRemote) if (!worldObj.isRemote)
{ {
Vector3 spawnVector = new Vector3(this).translate(ForgeDirection.getOrientation(worldObj.rand.nextInt(4) + 2)).translate(0.5); Vector3 spawnVector = new Vector3(this).translate(ForgeDirection.getOrientation(worldObj.rand.nextInt(4) + 2)).translate(0.5);
InventoryUtility.dropItemStack(worldObj, spawnVector, itemstack, 20, false); InventoryUtility.dropItemStack(worldObj, spawnVector, itemstack, 20, 0);
} }
} }

View file

@ -6,6 +6,7 @@ import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidStack; import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTank; import net.minecraftforge.fluids.FluidTank;
import net.minecraftforge.fluids.FluidTankInfo; import net.minecraftforge.fluids.FluidTankInfo;
import resonantinduction.core.grid.Node;
import resonantinduction.core.grid.fluid.IPressureNodeProvider; import resonantinduction.core.grid.fluid.IPressureNodeProvider;
import resonantinduction.core.grid.fluid.PressureNode; import resonantinduction.core.grid.fluid.PressureNode;
import calclavia.lib.network.IPacketReceiverWithID; import calclavia.lib.network.IPacketReceiverWithID;
@ -94,8 +95,10 @@ public abstract class TilePressurizedNode extends TileFluidNode implements IPres
} }
@Override @Override
public PressureNode getNode(ForgeDirection from) public <N extends Node> N getNode(Class<? super N> nodeType, ForgeDirection from)
{ {
return node; if (nodeType.isAssignableFrom(node.getClass()))
return (N) node;
return null;
} }
} }

View file

@ -3,8 +3,6 @@ package resonantinduction.core.grid;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
/** /**
* Any inheritance of INodeProvider should have a method "getNode()"
*
* @author Calclavia * @author Calclavia
* *
* @param <N> - Node type. * @param <N> - Node type.
@ -16,5 +14,5 @@ public interface INodeProvider
* @param from - The direction. * @param from - The direction.
* @return Returns the node object. * @return Returns the node object.
*/ */
public Object getNode(Class<? extends Node> nodeType, ForgeDirection from); public <N extends Node> N getNode(Class<? super N> nodeType, ForgeDirection from);
} }

View file

@ -1,27 +1,25 @@
package resonantinduction.mechanical.trait; package resonantinduction.core.grid;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import net.minecraftforge.common.ForgeDirection; import net.minecraftforge.common.ForgeDirection;
import resonantinduction.mechanical.energy.network.IMechanicalNodeProvider;
import resonantinduction.mechanical.energy.network.MechanicalNode;
import codechicken.multipart.PartMap; import codechicken.multipart.PartMap;
import codechicken.multipart.TMultiPart; import codechicken.multipart.TMultiPart;
import codechicken.multipart.TileMultipart; import codechicken.multipart.TileMultipart;
public class TraitMechanical extends TileMultipart implements IMechanicalNodeProvider public class TraitNodeProvider extends TileMultipart implements INodeProvider
{ {
public Set<IMechanicalNodeProvider> mechanicalInterfaces = new HashSet<IMechanicalNodeProvider>(); public Set<INodeProvider> mechanicalInterfaces = new HashSet<INodeProvider>();
@Override @Override
public void copyFrom(TileMultipart that) public void copyFrom(TileMultipart that)
{ {
super.copyFrom(that); super.copyFrom(that);
if (that instanceof TraitMechanical) if (that instanceof TraitNodeProvider)
{ {
this.mechanicalInterfaces = ((TraitMechanical) that).mechanicalInterfaces; this.mechanicalInterfaces = ((TraitNodeProvider) that).mechanicalInterfaces;
} }
} }
@ -30,9 +28,9 @@ public class TraitMechanical extends TileMultipart implements IMechanicalNodePro
{ {
super.bindPart(part); super.bindPart(part);
if (part instanceof IMechanicalNodeProvider) if (part instanceof INodeProvider)
{ {
this.mechanicalInterfaces.add((IMechanicalNodeProvider) part); this.mechanicalInterfaces.add((INodeProvider) part);
} }
} }
@ -41,7 +39,7 @@ public class TraitMechanical extends TileMultipart implements IMechanicalNodePro
{ {
super.partRemoved(part, p); super.partRemoved(part, p);
if (part instanceof IMechanicalNodeProvider) if (part instanceof INodeProvider)
{ {
this.mechanicalInterfaces.remove(part); this.mechanicalInterfaces.remove(part);
} }
@ -55,7 +53,7 @@ public class TraitMechanical extends TileMultipart implements IMechanicalNodePro
} }
@Override @Override
public MechanicalNode getNode(ForgeDirection from) public <N extends Node> N getNode(Class<? super N> nodeType, ForgeDirection from)
{ {
TMultiPart part = this.partMap(from.ordinal()); TMultiPart part = this.partMap(from.ordinal());
@ -64,12 +62,11 @@ public class TraitMechanical extends TileMultipart implements IMechanicalNodePro
part = partMap(PartMap.CENTER.ordinal()); part = partMap(PartMap.CENTER.ordinal());
} }
if (part instanceof IMechanicalNodeProvider) if (part instanceof INodeProvider)
{ {
return ((IMechanicalNodeProvider) part).getNode(from); return ((INodeProvider) part).getNode(nodeType, from);
} }
return null; return null;
} }
} }

View file

@ -137,7 +137,7 @@ public class PressureNode extends Node<IPressureNodeProvider, TickingGrid, Objec
{ {
IFluidHandler fluidHandler = (IFluidHandler) obj; IFluidHandler fluidHandler = (IFluidHandler) obj;
int pressure = getPressure(dir); int pressure = getPressure(dir);
int tankPressure = fluidHandler instanceof IPressureNodeProvider ? ((IPressureNodeProvider) fluidHandler).getNode(getClass(),dir.getOpposite()).getPressure(dir.getOpposite()) : 0; int tankPressure = fluidHandler instanceof IPressureNodeProvider ? ((IPressureNodeProvider) fluidHandler).getNode(PressureNode.class, dir.getOpposite()).getPressure(dir.getOpposite()) : 0;
FluidTank sourceTank = parent.getPressureTank(); FluidTank sourceTank = parent.getPressureTank();
int transferAmount = (Math.max(pressure, tankPressure) - Math.min(pressure, tankPressure)) * getMaxFlowRate(); int transferAmount = (Math.max(pressure, tankPressure) - Math.min(pressure, tankPressure)) * getMaxFlowRate();
@ -191,7 +191,7 @@ public class PressureNode extends Node<IPressureNodeProvider, TickingGrid, Objec
if (tile instanceof IPressureNodeProvider) if (tile instanceof IPressureNodeProvider)
{ {
PressureNode check = ((IPressureNodeProvider) tile).getNode(dir.getOpposite()); PressureNode check = ((IPressureNodeProvider) tile).getNode(PressureNode.class, dir.getOpposite());
if (check != null && canConnect(dir, check) && check.canConnect(dir.getOpposite(), this)) if (check != null && canConnect(dir, check) && check.canConnect(dir.getOpposite(), this))
{ {

View file

@ -264,7 +264,7 @@ public abstract class PartFramedNode<M extends Enum, N extends Node, T extends I
{ {
if (packetID == 0) if (packetID == 0)
{ {
currentConnections= packet.readByte(); currentConnections = packet.readByte();
tile().markRender(); tile().markRender();
} }
else else
@ -273,8 +273,12 @@ public abstract class PartFramedNode<M extends Enum, N extends Node, T extends I
} }
} }
public N getNode(ForgeDirection from) @SuppressWarnings("hiding")
@Override
public <N extends Node> N getNode(Class<? super N> nodeType, ForgeDirection from)
{ {
return node; if (nodeType.isAssignableFrom(node.getClass()))
return (N) node;
return null;
} }
} }