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;
|
float angularVelocity = extract / torqueRatio;
|
||||||
long torque = (long) (extract / angularVelocity);
|
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;
|
return this.network;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IMechanicalNetwork getNetwork(ForgeDirection from)
|
||||||
|
{
|
||||||
|
return getNetwork();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setNetwork(IMechanicalNetwork network)
|
public void setNetwork(IMechanicalNetwork network)
|
||||||
{
|
{
|
||||||
|
@ -177,4 +183,9 @@ public class TileGenerator extends TileElectrical implements IMechanical, IRotat
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IMechanical getInstance(ForgeDirection from)
|
||||||
|
{
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ import resonantinduction.api.IBelt;
|
||||||
import resonantinduction.core.ResonantInduction;
|
import resonantinduction.core.ResonantInduction;
|
||||||
import resonantinduction.mechanical.Mechanical;
|
import resonantinduction.mechanical.Mechanical;
|
||||||
import resonantinduction.mechanical.network.IMechanical;
|
import resonantinduction.mechanical.network.IMechanical;
|
||||||
|
import resonantinduction.mechanical.network.IMechanicalNetwork;
|
||||||
import resonantinduction.mechanical.network.TileMechanical;
|
import resonantinduction.mechanical.network.TileMechanical;
|
||||||
import universalelectricity.api.vector.Vector3;
|
import universalelectricity.api.vector.Vector3;
|
||||||
import calclavia.lib.network.IPacketReceiverWithID;
|
import calclavia.lib.network.IPacketReceiverWithID;
|
||||||
|
@ -296,4 +297,12 @@ public class TileConveyorBelt extends TileMechanical implements IBelt, IRotatabl
|
||||||
return 0.5f;
|
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.entity.player.EntityPlayer;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.MovingObjectPosition;
|
import net.minecraft.util.MovingObjectPosition;
|
||||||
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
import resonantinduction.mechanical.Mechanical;
|
import resonantinduction.mechanical.Mechanical;
|
||||||
import resonantinduction.mechanical.network.IMechanical;
|
import resonantinduction.mechanical.network.IMechanical;
|
||||||
|
import resonantinduction.mechanical.network.IMechanicalNetwork;
|
||||||
import resonantinduction.mechanical.network.PartMechanical;
|
import resonantinduction.mechanical.network.PartMechanical;
|
||||||
import codechicken.lib.vec.Vector3;
|
import codechicken.lib.vec.Vector3;
|
||||||
import cpw.mods.fml.relauncher.Side;
|
import cpw.mods.fml.relauncher.Side;
|
||||||
|
@ -27,7 +29,7 @@ public class PartGear extends PartMechanical implements IMechanical
|
||||||
{
|
{
|
||||||
if (manualCrankTime > 0)
|
if (manualCrankTime > 0)
|
||||||
{
|
{
|
||||||
|
getNetwork().onReceiveEnergy(this, 20, 0.2f);
|
||||||
manualCrankTime--;
|
manualCrankTime--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,16 +40,16 @@ public class PartGear extends PartMechanical implements IMechanical
|
||||||
@Override
|
@Override
|
||||||
public float getResistance()
|
public float getResistance()
|
||||||
{
|
{
|
||||||
return 0.5f;
|
return 0.1f;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean activate(EntityPlayer player, MovingObjectPosition hit, ItemStack item)
|
public boolean activate(EntityPlayer player, MovingObjectPosition hit, ItemStack item)
|
||||||
{
|
{
|
||||||
System.out.println(world().isRemote + ": " + getNetwork());
|
System.out.println(world().isRemote + ": " + getNetwork());
|
||||||
|
|
||||||
if (player.isSneaking())
|
if (player.isSneaking())
|
||||||
{
|
{
|
||||||
getNetwork().onReceiveEnergy(this, 20, 0.3f);
|
|
||||||
this.manualCrankTime = 20;
|
this.manualCrankTime = 20;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,4 +83,11 @@ public class PartGear extends PartMechanical implements IMechanical
|
||||||
{
|
{
|
||||||
return "resonant_induction_gear";
|
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);
|
public void setClockwise(boolean isClockwise);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* *
|
|
||||||
*
|
|
||||||
* @return Return true if the mechanical block should have its rotation set inveresed.
|
* @return Return true if the mechanical block should have its rotation set inveresed.
|
||||||
*/
|
*/
|
||||||
public boolean isRotationInversed();
|
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;
|
prevTorque = torque;
|
||||||
prevAngularVelocity = angularVelocity;
|
prevAngularVelocity = angularVelocity;
|
||||||
torque *= 0.5;
|
torque = 0;
|
||||||
angularVelocity *= 0.5;
|
angularVelocity = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -65,25 +65,6 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
|
||||||
this.placementSide = ForgeDirection.getOrientation((byte) (side ^ 1));
|
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
|
@Override
|
||||||
public void onAdded()
|
public void onAdded()
|
||||||
{
|
{
|
||||||
|
@ -127,23 +108,16 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
|
||||||
|
|
||||||
TileEntity tile = vec.getTileEntity(world());
|
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;
|
connections[this.placementSide.getOpposite().ordinal()] = ((IMechanical) tile).getInstance(this.placementSide.getOpposite());
|
||||||
getNetwork().merge(((IMechanical) neighbor).getNetwork());
|
getNetwork().merge(networkToMerge);
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (tile instanceof IMechanical)
|
|
||||||
{
|
|
||||||
connections[this.placementSide.getOpposite().ordinal()] = tile;
|
|
||||||
if (tile instanceof IMechanical)
|
|
||||||
{
|
|
||||||
getNetwork().merge(((IMechanical) tile).getNetwork());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Look for gears outside this block space, the relative UP, DOWN, LEFT, RIGHT */
|
/** 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);
|
universalelectricity.api.vector.Vector3 checkVec = new universalelectricity.api.vector.Vector3(tile()).translate(checkDir);
|
||||||
|
|
||||||
TileEntity checkTile = checkVec.getTileEntity(world());
|
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;
|
connections[checkDir.ordinal()] = ((IMechanical) checkTile).getInstance(this.placementSide);
|
||||||
getNetwork().merge(((IMechanical) neighbor).getNetwork());
|
getNetwork().merge(networkToMerge);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -169,12 +144,12 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
|
||||||
for (int i = 0; i < 6; i++)
|
for (int i = 0; i < 6; i++)
|
||||||
{
|
{
|
||||||
ForgeDirection checkDir = ForgeDirection.getOrientation(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;
|
connections[checkDir.ordinal()] = ((IMechanical) tile()).getInstance(checkDir);
|
||||||
getNetwork().merge(((IMechanical) neighbor).getNetwork());
|
getNetwork().merge(networkToMerge);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -186,6 +161,12 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IMechanicalNetwork getNetwork(ForgeDirection from)
|
||||||
|
{
|
||||||
|
return getNetwork();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object[] getConnections()
|
public Object[] getConnections()
|
||||||
{
|
{
|
||||||
|
@ -203,7 +184,7 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
|
||||||
@Override
|
@Override
|
||||||
public boolean sendNetworkPacket(long torque, float angularVelocity)
|
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);
|
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()
|
public void sendRefreshPacket()
|
||||||
{
|
{
|
||||||
if (tile() != null)
|
if (world() != null && !world().isRemote && tile() != null)
|
||||||
{
|
{
|
||||||
tile().getWriteStream(this).writeByte(1);
|
tile().getWriteStream(this).writeByte(1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,6 @@ public class PathfinderRotationManager extends ConnectionPathfinder<IMechanical>
|
||||||
this.closedSet.add(currentNode);
|
this.closedSet.add(currentNode);
|
||||||
|
|
||||||
currentNode.setClockwise(currentIsClockwise);
|
currentNode.setClockwise(currentIsClockwise);
|
||||||
currentIsClockwise = !currentNode.isClockwise();
|
|
||||||
|
|
||||||
for (IMechanical node : this.getConnectedNodes(currentNode))
|
for (IMechanical node : this.getConnectedNodes(currentNode))
|
||||||
{
|
{
|
||||||
|
@ -48,8 +47,8 @@ public class PathfinderRotationManager extends ConnectionPathfinder<IMechanical>
|
||||||
currentNode.getNetwork().setPower(0, 0);
|
currentNode.getNetwork().setPower(0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
currentIsClockwise = (node.isRotationInversed()) ? !currentNode.isClockwise() : currentNode.isClockwise();
|
||||||
findNodes(node);
|
findNodes(node);
|
||||||
currentIsClockwise = node.isRotationInversed() ? !currentNode.isClockwise() : currentNode.isClockwise();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ package resonantinduction.mechanical.network;
|
||||||
import net.minecraftforge.common.ForgeDirection;
|
import net.minecraftforge.common.ForgeDirection;
|
||||||
import calclavia.lib.prefab.tile.TileAdvanced;
|
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 */
|
/** The mechanical connections this connector has made */
|
||||||
protected Object[] connections = new Object[6];
|
protected Object[] connections = new Object[6];
|
||||||
|
@ -70,4 +70,10 @@ public class TileMechanical extends TileAdvanced implements IMechanical
|
||||||
{
|
{
|
||||||
return false;
|
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.api.recipe.RecipeUtils.Resource;
|
||||||
import resonantinduction.core.Reference;
|
import resonantinduction.core.Reference;
|
||||||
import resonantinduction.core.ResonantInduction;
|
import resonantinduction.core.ResonantInduction;
|
||||||
|
import resonantinduction.mechanical.network.IMechanicalNetwork;
|
||||||
import resonantinduction.mechanical.network.TileMechanical;
|
import resonantinduction.mechanical.network.TileMechanical;
|
||||||
import universalelectricity.api.vector.Vector3;
|
import universalelectricity.api.vector.Vector3;
|
||||||
import calclavia.lib.prefab.tile.IRotatable;
|
import calclavia.lib.prefab.tile.IRotatable;
|
||||||
|
@ -160,17 +161,6 @@ public class TileGrinderWheel extends TileMechanical implements IRotatable
|
||||||
return clientTimer;
|
return clientTimer;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean isClockwise()
|
|
||||||
{
|
|
||||||
if (worldObj != null)
|
|
||||||
{
|
|
||||||
return !(getBlockMetadata() % 2 == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ForgeDirection getDirection()
|
public ForgeDirection getDirection()
|
||||||
{
|
{
|
||||||
|
@ -187,4 +177,12 @@ public class TileGrinderWheel extends TileMechanical implements IRotatable
|
||||||
{
|
{
|
||||||
worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, direction.ordinal(), 3);
|
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
|
@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;
|
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
|
@Override
|
||||||
public IMechanicalNetwork getNetwork()
|
public IMechanicalNetwork getNetwork()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue