Gears now back to semi-working
This commit is contained in:
parent
bc81e18874
commit
f64b157544
10 changed files with 124 additions and 70 deletions
|
@ -69,7 +69,7 @@ public class TileGenerator extends TileElectrical implements IMechanical, IRotat
|
|||
{
|
||||
float angularVelocity = extract / torqueRatio;
|
||||
long torque = (long) (extract / angularVelocity);
|
||||
energy.extractEnergy(((IMechanical) mechanical).getNetwork().onReceiveEnergy(((IMechanical) mechanical), torque, angularVelocity), true);
|
||||
energy.extractEnergy(((IMechanical) mechanical).getNetwork(outputDir.getOpposite()).onReceiveEnergy(((IMechanical) mechanical), torque, angularVelocity), true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -153,6 +153,12 @@ public class TileGenerator extends TileElectrical implements IMechanical, IRotat
|
|||
return this.network;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMechanicalNetwork getNetwork(ForgeDirection from)
|
||||
{
|
||||
return getNetwork();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setNetwork(IMechanicalNetwork network)
|
||||
{
|
||||
|
@ -177,4 +183,9 @@ public class TileGenerator extends TileElectrical implements IMechanical, IRotat
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMechanical getInstance(ForgeDirection from)
|
||||
{
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -15,6 +15,7 @@ import resonantinduction.api.IBelt;
|
|||
import resonantinduction.core.ResonantInduction;
|
||||
import resonantinduction.mechanical.Mechanical;
|
||||
import resonantinduction.mechanical.network.IMechanical;
|
||||
import resonantinduction.mechanical.network.IMechanicalNetwork;
|
||||
import resonantinduction.mechanical.network.TileMechanical;
|
||||
import universalelectricity.api.vector.Vector3;
|
||||
import calclavia.lib.network.IPacketReceiverWithID;
|
||||
|
@ -296,4 +297,12 @@ public class TileConveyorBelt extends TileMechanical implements IBelt, IRotatabl
|
|||
return 0.5f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMechanicalNetwork getNetwork(ForgeDirection from)
|
||||
{
|
||||
if (from != this.getDirection() && from != this.getDirection().getOpposite())
|
||||
return getNetwork();
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -3,8 +3,10 @@ package resonantinduction.mechanical.gear;
|
|||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.MovingObjectPosition;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
import resonantinduction.mechanical.Mechanical;
|
||||
import resonantinduction.mechanical.network.IMechanical;
|
||||
import resonantinduction.mechanical.network.IMechanicalNetwork;
|
||||
import resonantinduction.mechanical.network.PartMechanical;
|
||||
import codechicken.lib.vec.Vector3;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
|
@ -27,7 +29,7 @@ public class PartGear extends PartMechanical implements IMechanical
|
|||
{
|
||||
if (manualCrankTime > 0)
|
||||
{
|
||||
|
||||
getNetwork().onReceiveEnergy(this, 20, 0.2f);
|
||||
manualCrankTime--;
|
||||
}
|
||||
}
|
||||
|
@ -38,16 +40,16 @@ public class PartGear extends PartMechanical implements IMechanical
|
|||
@Override
|
||||
public float getResistance()
|
||||
{
|
||||
return 0.5f;
|
||||
return 0.1f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean activate(EntityPlayer player, MovingObjectPosition hit, ItemStack item)
|
||||
{
|
||||
System.out.println(world().isRemote + ": " + getNetwork());
|
||||
|
||||
if (player.isSneaking())
|
||||
{
|
||||
getNetwork().onReceiveEnergy(this, 20, 0.3f);
|
||||
this.manualCrankTime = 20;
|
||||
}
|
||||
|
||||
|
@ -81,4 +83,11 @@ public class PartGear extends PartMechanical implements IMechanical
|
|||
{
|
||||
return "resonant_induction_gear";
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMechanical getInstance(ForgeDirection from)
|
||||
{
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
|
@ -27,9 +27,16 @@ public interface IMechanical extends IConnector<IMechanicalNetwork>
|
|||
public void setClockwise(boolean isClockwise);
|
||||
|
||||
/**
|
||||
* *
|
||||
*
|
||||
* @return Return true if the mechanical block should have its rotation set inveresed.
|
||||
*/
|
||||
public boolean isRotationInversed();
|
||||
|
||||
public IMechanicalNetwork getNetwork(ForgeDirection from);
|
||||
|
||||
/**
|
||||
* Gets the instance of this mechanical through ForgeMultipart
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public IMechanical getInstance(ForgeDirection from);
|
||||
}
|
||||
|
|
|
@ -107,8 +107,8 @@ public class MechanicalNetwork extends Network<IMechanicalNetwork, IMechanical>
|
|||
|
||||
prevTorque = torque;
|
||||
prevAngularVelocity = angularVelocity;
|
||||
torque *= 0.5;
|
||||
angularVelocity *= 0.5;
|
||||
torque = 0;
|
||||
angularVelocity = 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -65,25 +65,6 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
|
|||
this.placementSide = ForgeDirection.getOrientation((byte) (side ^ 1));
|
||||
}
|
||||
|
||||
// TODO: We don't need to tick.
|
||||
@Override
|
||||
public void update()
|
||||
{
|
||||
if (this.world().isRemote)
|
||||
{
|
||||
/**
|
||||
* Update angle rotation.
|
||||
*/
|
||||
if (getNetwork().getPower() > 0)
|
||||
{
|
||||
if (isClockwise)
|
||||
angle += getNetwork().getAngularVelocity() / 20f;
|
||||
else
|
||||
angle -= getNetwork().getAngularVelocity() / 20f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAdded()
|
||||
{
|
||||
|
@ -127,23 +108,16 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
|
|||
|
||||
TileEntity tile = vec.getTileEntity(world());
|
||||
|
||||
if (tile instanceof TileMultipart)
|
||||
if (tile instanceof IMechanical)
|
||||
{
|
||||
TMultiPart neighbor = ((TileMultipart) tile).partMap(this.placementSide.getOpposite().ordinal());
|
||||
IMechanicalNetwork networkToMerge = ((IMechanical) tile).getNetwork(this.placementSide.getOpposite());
|
||||
|
||||
if (neighbor instanceof IMechanical)
|
||||
if (networkToMerge != null)
|
||||
{
|
||||
connections[this.placementSide.getOpposite().ordinal()] = neighbor;
|
||||
getNetwork().merge(((IMechanical) neighbor).getNetwork());
|
||||
}
|
||||
}
|
||||
else if (tile instanceof IMechanical)
|
||||
{
|
||||
connections[this.placementSide.getOpposite().ordinal()] = tile;
|
||||
if (tile instanceof IMechanical)
|
||||
{
|
||||
getNetwork().merge(((IMechanical) tile).getNetwork());
|
||||
connections[this.placementSide.getOpposite().ordinal()] = ((IMechanical) tile).getInstance(this.placementSide.getOpposite());
|
||||
getNetwork().merge(networkToMerge);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/** Look for gears outside this block space, the relative UP, DOWN, LEFT, RIGHT */
|
||||
|
@ -153,14 +127,15 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
|
|||
universalelectricity.api.vector.Vector3 checkVec = new universalelectricity.api.vector.Vector3(tile()).translate(checkDir);
|
||||
|
||||
TileEntity checkTile = checkVec.getTileEntity(world());
|
||||
if (checkTile instanceof TileMultipart)
|
||||
{
|
||||
TMultiPart neighbor = ((TileMultipart) checkTile).partMap(this.placementSide.ordinal());
|
||||
|
||||
if (neighbor != this && neighbor instanceof IMechanical)
|
||||
if (checkTile instanceof IMechanical)
|
||||
{
|
||||
IMechanicalNetwork networkToMerge = ((IMechanical) checkTile).getNetwork(this.placementSide);
|
||||
|
||||
if (networkToMerge != null)
|
||||
{
|
||||
connections[checkDir.ordinal()] = neighbor;
|
||||
getNetwork().merge(((IMechanical) neighbor).getNetwork());
|
||||
connections[checkDir.ordinal()] = ((IMechanical) checkTile).getInstance(this.placementSide);
|
||||
getNetwork().merge(networkToMerge);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -169,12 +144,12 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
|
|||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
ForgeDirection checkDir = ForgeDirection.getOrientation(i);
|
||||
TMultiPart neighbor = tile().partMap(this.placementSide.getRotation(checkDir).ordinal());
|
||||
IMechanicalNetwork networkToMerge = ((IMechanical) tile()).getNetwork(checkDir);
|
||||
|
||||
if (neighbor != this && neighbor instanceof IMechanical)
|
||||
if (networkToMerge != null)
|
||||
{
|
||||
connections[checkDir.ordinal()] = neighbor;
|
||||
getNetwork().merge(((IMechanical) neighbor).getNetwork());
|
||||
connections[checkDir.ordinal()] = ((IMechanical) tile()).getInstance(checkDir);
|
||||
getNetwork().merge(networkToMerge);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -186,6 +161,12 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMechanicalNetwork getNetwork(ForgeDirection from)
|
||||
{
|
||||
return getNetwork();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object[] getConnections()
|
||||
{
|
||||
|
@ -203,7 +184,7 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
|
|||
@Override
|
||||
public boolean sendNetworkPacket(long torque, float angularVelocity)
|
||||
{
|
||||
if (!world().isRemote && tile() != null)
|
||||
if (world() != null && !world().isRemote && tile() != null)
|
||||
{
|
||||
tile().getWriteStream(this).writeByte(0).writeLong(torque).writeFloat(angularVelocity).writeBoolean(isClockwise);
|
||||
}
|
||||
|
@ -213,7 +194,7 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
|
|||
|
||||
public void sendRefreshPacket()
|
||||
{
|
||||
if (tile() != null)
|
||||
if (world() != null && !world().isRemote && tile() != null)
|
||||
{
|
||||
tile().getWriteStream(this).writeByte(1);
|
||||
}
|
||||
|
|
|
@ -36,7 +36,6 @@ public class PathfinderRotationManager extends ConnectionPathfinder<IMechanical>
|
|||
this.closedSet.add(currentNode);
|
||||
|
||||
currentNode.setClockwise(currentIsClockwise);
|
||||
currentIsClockwise = !currentNode.isClockwise();
|
||||
|
||||
for (IMechanical node : this.getConnectedNodes(currentNode))
|
||||
{
|
||||
|
@ -48,8 +47,8 @@ public class PathfinderRotationManager extends ConnectionPathfinder<IMechanical>
|
|||
currentNode.getNetwork().setPower(0, 0);
|
||||
}
|
||||
|
||||
currentIsClockwise = (node.isRotationInversed()) ? !currentNode.isClockwise() : currentNode.isClockwise();
|
||||
findNodes(node);
|
||||
currentIsClockwise = node.isRotationInversed() ? !currentNode.isClockwise() : currentNode.isClockwise();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ package resonantinduction.mechanical.network;
|
|||
import net.minecraftforge.common.ForgeDirection;
|
||||
import calclavia.lib.prefab.tile.TileAdvanced;
|
||||
|
||||
public class TileMechanical extends TileAdvanced implements IMechanical
|
||||
public abstract class TileMechanical extends TileAdvanced implements IMechanical
|
||||
{
|
||||
/** The mechanical connections this connector has made */
|
||||
protected Object[] connections = new Object[6];
|
||||
|
@ -70,4 +70,10 @@ public class TileMechanical extends TileAdvanced implements IMechanical
|
|||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMechanical getInstance(ForgeDirection from)
|
||||
{
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@ import resonantinduction.api.recipe.RecipeUtils.ItemStackResource;
|
|||
import resonantinduction.api.recipe.RecipeUtils.Resource;
|
||||
import resonantinduction.core.Reference;
|
||||
import resonantinduction.core.ResonantInduction;
|
||||
import resonantinduction.mechanical.network.IMechanicalNetwork;
|
||||
import resonantinduction.mechanical.network.TileMechanical;
|
||||
import universalelectricity.api.vector.Vector3;
|
||||
import calclavia.lib.prefab.tile.IRotatable;
|
||||
|
@ -160,17 +161,6 @@ public class TileGrinderWheel extends TileMechanical implements IRotatable
|
|||
return clientTimer;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isClockwise()
|
||||
{
|
||||
if (worldObj != null)
|
||||
{
|
||||
return !(getBlockMetadata() % 2 == 0);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ForgeDirection getDirection()
|
||||
{
|
||||
|
@ -187,4 +177,12 @@ public class TileGrinderWheel extends TileMechanical implements IRotatable
|
|||
{
|
||||
worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, direction.ordinal(), 3);
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMechanicalNetwork getNetwork(ForgeDirection from)
|
||||
{
|
||||
if (from != this.getDirection() && from != this.getDirection().getOpposite())
|
||||
return getNetwork();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -54,13 +54,15 @@ public class TraitMechanical extends TileMultipart implements IMechanical
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean canConnect(ForgeDirection direction)
|
||||
public boolean canConnect(ForgeDirection from)
|
||||
{
|
||||
for (IMechanical connector : this.mechanicalInterfaces)
|
||||
TMultiPart part = this.partMap(from.ordinal());
|
||||
|
||||
if (part != null)
|
||||
{
|
||||
if (connector.canConnect(direction.getOpposite()))
|
||||
if (this.mechanicalInterfaces.contains(part))
|
||||
{
|
||||
return true;
|
||||
return ((IMechanical) part).canConnect(from);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -85,6 +87,38 @@ public class TraitMechanical extends TileMultipart implements IMechanical
|
|||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMechanicalNetwork getNetwork(ForgeDirection from)
|
||||
{
|
||||
TMultiPart part = this.partMap(from.ordinal());
|
||||
|
||||
if (part != null)
|
||||
{
|
||||
if (part instanceof IMechanical)
|
||||
{
|
||||
return ((IMechanical) part).getNetwork();
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMechanical getInstance(ForgeDirection from)
|
||||
{
|
||||
TMultiPart part = this.partMap(from.ordinal());
|
||||
|
||||
if (part != null)
|
||||
{
|
||||
if (part instanceof IMechanical)
|
||||
{
|
||||
return (IMechanical) part;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IMechanicalNetwork getNetwork()
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue