Fixed grinder rotation and packets
This commit is contained in:
parent
2cb30f501b
commit
bffc3e4fd5
|
@ -6,6 +6,7 @@ import java.util.Iterator;
|
|||
import java.util.LinkedHashMap;
|
||||
import java.util.LinkedHashSet;
|
||||
|
||||
import resonantinduction.mechanical.process.TileGrinderWheel;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
import universalelectricity.api.net.IUpdate;
|
||||
import universalelectricity.core.net.Network;
|
||||
|
@ -80,7 +81,7 @@ public class MechanicalNetwork extends Network<IMechanicalNetwork, IMechanical>
|
|||
float ratio = adjacentMech.getRatio(dir) / mechanical.getRatio(dir.getOpposite());
|
||||
long torque = mechanical.getTorque();
|
||||
|
||||
boolean inverseRotation = mechanical.inverseRotation(dir, adjacentMech) || adjacentMech.inverseRotation(dir.getOpposite(), mechanical);
|
||||
boolean inverseRotation = mechanical.inverseRotation(dir, adjacentMech) && adjacentMech.inverseRotation(dir.getOpposite(), mechanical);
|
||||
|
||||
int inversion = inverseRotation ? -1 : 1;
|
||||
|
||||
|
@ -93,7 +94,7 @@ public class MechanicalNetwork extends Network<IMechanicalNetwork, IMechanical>
|
|||
|
||||
if (Math.abs(velocity + inversion * (adjacentMech.getAngularVelocity() * ratio * ACCELERATION)) < Math.abs(adjacentMech.getAngularVelocity() * ratio))
|
||||
{
|
||||
mechanical.setAngularVelocity(velocity + inversion * ((adjacentMech.getAngularVelocity() * ratio * ACCELERATION)));
|
||||
mechanical.setAngularVelocity(velocity + (inversion * adjacentMech.getAngularVelocity() * ratio * ACCELERATION));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,13 +1,19 @@
|
|||
package resonantinduction.mechanical.network;
|
||||
|
||||
import resonantinduction.mechanical.gear.PartGearShaft;
|
||||
import com.google.common.io.ByteArrayDataInput;
|
||||
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
import resonantinduction.core.ResonantInduction;
|
||||
import resonantinduction.mechanical.gear.PartGearShaft;
|
||||
import universalelectricity.api.vector.Vector3;
|
||||
import calclavia.lib.network.IPacketReceiver;
|
||||
import calclavia.lib.network.PacketHandler;
|
||||
import calclavia.lib.prefab.tile.TileAdvanced;
|
||||
|
||||
public abstract class TileMechanical extends TileAdvanced implements IMechanical
|
||||
public abstract class TileMechanical extends TileAdvanced implements IMechanical, IPacketReceiver
|
||||
{
|
||||
/** The mechanical connections this connector has made */
|
||||
protected Object[] connections = new Object[6];
|
||||
|
@ -16,6 +22,12 @@ public abstract class TileMechanical extends TileAdvanced implements IMechanical
|
|||
protected long torque;
|
||||
public float angle = 0;
|
||||
|
||||
/**
|
||||
* For sending client update packets
|
||||
*/
|
||||
private float prevAngularVelocity;
|
||||
private boolean markPacketUpdate;
|
||||
|
||||
@Override
|
||||
public void initiate()
|
||||
{
|
||||
|
@ -29,6 +41,29 @@ public abstract class TileMechanical extends TileAdvanced implements IMechanical
|
|||
angle += angularVelocity / 20;
|
||||
torque *= getLoad();
|
||||
angularVelocity *= getLoad();
|
||||
|
||||
if (Math.abs(prevAngularVelocity - angularVelocity) > 0.05f)
|
||||
{
|
||||
prevAngularVelocity = angularVelocity;
|
||||
markPacketUpdate = true;
|
||||
}
|
||||
|
||||
if (markPacketUpdate && ticks % 10 == 0)
|
||||
{
|
||||
sendRotationPacket();
|
||||
markPacketUpdate = false;
|
||||
}
|
||||
}
|
||||
|
||||
private void sendRotationPacket()
|
||||
{
|
||||
PacketHandler.sendPacketToClients(ResonantInduction.PACKET_TILE.getPacket(this, angularVelocity), worldObj, new Vector3(this), 20);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onReceivePacket(ByteArrayDataInput data, EntityPlayer player, Object... extra)
|
||||
{
|
||||
angularVelocity = data.readFloat();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -2,7 +2,10 @@ package resonantinduction.mechanical.process;
|
|||
|
||||
import org.apache.commons.lang3.ArrayUtils;
|
||||
|
||||
import com.google.common.io.ByteArrayDataInput;
|
||||
|
||||
import net.minecraft.entity.item.EntityItem;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemBlock;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraftforge.common.ForgeDirection;
|
||||
|
@ -167,6 +170,12 @@ public class TileGrinderWheel extends TileMechanical implements IRotatable
|
|||
@Override
|
||||
public boolean canConnect(ForgeDirection from, Object source)
|
||||
{
|
||||
return from != this.getDirection() && from != this.getDirection().getOpposite();
|
||||
if (getDirection().ordinal() < 2)
|
||||
{
|
||||
return from.offsetY != 0;
|
||||
}
|
||||
|
||||
return getDirection().getRotation(ForgeDirection.UP) == from || getDirection().getRotation(ForgeDirection.DOWN) == from;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue