Fixed multipart registration and null connections with WeakReferences
This commit is contained in:
parent
466f5b0839
commit
08c0aad457
4 changed files with 21 additions and 12 deletions
|
@ -18,7 +18,7 @@ public class MultipartMechanical implements IPartFactory
|
||||||
{
|
{
|
||||||
MultiPartRegistry.registerParts(this, PART_TYPES);
|
MultiPartRegistry.registerParts(this, PART_TYPES);
|
||||||
MultipartGenerator.registerPassThroughInterface("resonantinduction.api.fluid.IFluidPipe");
|
MultipartGenerator.registerPassThroughInterface("resonantinduction.api.fluid.IFluidPipe");
|
||||||
MultipartGenerator.registerTrait("resonantinduction.mechanical.network.IMechanical", "resonantinduction.mechanical.trait.TraitMechanical");
|
MultipartGenerator.registerTrait("resonantinduction.api.mechanical.IMechanical", "resonantinduction.mechanical.trait.TraitMechanical");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package resonantinduction.mechanical.gear;
|
package resonantinduction.mechanical.gear;
|
||||||
|
|
||||||
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
@ -164,7 +165,7 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock
|
||||||
@Override
|
@Override
|
||||||
public void refresh()
|
public void refresh()
|
||||||
{
|
{
|
||||||
connections = new Object[6];
|
connections = new WeakReference[6];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Only call refresh if this is the main block of a multiblock gear or a single gear block.
|
* Only call refresh if this is the main block of a multiblock gear or a single gear block.
|
||||||
|
@ -183,7 +184,7 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock
|
||||||
|
|
||||||
if (instance != null && instance != this && !(instance instanceof PartGearShaft) && instance.canConnect(placementSide.getOpposite(), this))
|
if (instance != null && instance != this && !(instance instanceof PartGearShaft) && instance.canConnect(placementSide.getOpposite(), this))
|
||||||
{
|
{
|
||||||
connections[placementSide.ordinal()] = instance;
|
connections[placementSide.ordinal()] = new WeakReference(instance);
|
||||||
getNetwork().merge(instance.getNetwork());
|
getNetwork().merge(instance.getNetwork());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -214,7 +215,7 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock
|
||||||
|
|
||||||
if (connections[checkDir.ordinal()] == null && instance != this && checkDir != placementSide && instance != null && instance.canConnect(checkDir.getOpposite(), this))
|
if (connections[checkDir.ordinal()] == null && instance != this && checkDir != placementSide && instance != null && instance.canConnect(checkDir.getOpposite(), this))
|
||||||
{
|
{
|
||||||
connections[checkDir.ordinal()] = instance;
|
connections[checkDir.ordinal()] = new WeakReference(instance);
|
||||||
getNetwork().merge(instance.getNetwork());
|
getNetwork().merge(instance.getNetwork());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -239,7 +240,7 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock
|
||||||
|
|
||||||
if (instance != null && instance != this && instance.canConnect(checkDir.getOpposite(), this) && !(instance instanceof PartGearShaft))
|
if (instance != null && instance != this && instance.canConnect(checkDir.getOpposite(), this) && !(instance instanceof PartGearShaft))
|
||||||
{
|
{
|
||||||
connections[checkDir.ordinal()] = instance;
|
connections[checkDir.ordinal()] = new WeakReference(instance);
|
||||||
getNetwork().merge(instance.getNetwork());
|
getNetwork().merge(instance.getNetwork());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -289,7 +290,7 @@ public class PartGear extends PartMechanical implements IMechanical, IMultiBlock
|
||||||
return new Object[6];
|
return new Object[6];
|
||||||
}
|
}
|
||||||
|
|
||||||
return connections;
|
return super.getConnections();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package resonantinduction.mechanical.gear;
|
package resonantinduction.mechanical.gear;
|
||||||
|
|
||||||
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
@ -65,7 +66,7 @@ public class PartGearShaft extends PartMechanical
|
||||||
@Override
|
@Override
|
||||||
public void refresh()
|
public void refresh()
|
||||||
{
|
{
|
||||||
connections = new Object[6];
|
connections = new WeakReference[6];
|
||||||
|
|
||||||
/** Check for internal connections, the FRONT and BACK. */
|
/** Check for internal connections, the FRONT and BACK. */
|
||||||
for (int i = 0; i < 6; i++)
|
for (int i = 0; i < 6; i++)
|
||||||
|
@ -78,7 +79,7 @@ public class PartGearShaft extends PartMechanical
|
||||||
|
|
||||||
if (instance != null && instance != this && instance.canConnect(checkDir.getOpposite(), this))
|
if (instance != null && instance != this && instance.canConnect(checkDir.getOpposite(), this))
|
||||||
{
|
{
|
||||||
connections[checkDir.ordinal()] = instance;
|
connections[checkDir.ordinal()] = new WeakReference(instance);
|
||||||
getNetwork().merge(instance.getNetwork());
|
getNetwork().merge(instance.getNetwork());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -100,7 +101,7 @@ public class PartGearShaft extends PartMechanical
|
||||||
// Only connect to shafts outside of this block space.
|
// Only connect to shafts outside of this block space.
|
||||||
if (instance != null && instance != this && instance instanceof PartGearShaft && instance.canConnect(checkDir.getOpposite(), this))
|
if (instance != null && instance != this && instance instanceof PartGearShaft && instance.canConnect(checkDir.getOpposite(), this))
|
||||||
{
|
{
|
||||||
connections[checkDir.ordinal()] = instance;
|
connections[checkDir.ordinal()] = new WeakReference(instance);
|
||||||
getNetwork().merge(instance.getNetwork());
|
getNetwork().merge(instance.getNetwork());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package resonantinduction.mechanical.network;
|
package resonantinduction.mechanical.network;
|
||||||
|
|
||||||
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
@ -29,7 +30,7 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
|
||||||
private IMechanicalNetwork network;
|
private IMechanicalNetwork network;
|
||||||
|
|
||||||
/** The mechanical connections this connector has made */
|
/** The mechanical connections this connector has made */
|
||||||
protected Object[] connections = new Object[6];
|
protected WeakReference[] connections = new WeakReference[6];
|
||||||
|
|
||||||
protected float prevAngularVelocity, angularVelocity;
|
protected float prevAngularVelocity, angularVelocity;
|
||||||
|
|
||||||
|
@ -126,7 +127,13 @@ public abstract class PartMechanical extends JCuboidPart implements JNormalOcclu
|
||||||
@Override
|
@Override
|
||||||
public Object[] getConnections()
|
public Object[] getConnections()
|
||||||
{
|
{
|
||||||
return connections;
|
Object[] actualConnections = new Object[6];
|
||||||
|
|
||||||
|
for (int i = 0; i < connections.length; i++)
|
||||||
|
if (connections[i] != null)
|
||||||
|
actualConnections[i] = connections[i].get();
|
||||||
|
|
||||||
|
return actualConnections;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in a new issue