Began the actual implementation of PathfinderCache
This commit is contained in:
parent
9b46044391
commit
aa2c79672b
3 changed files with 82 additions and 3 deletions
|
@ -36,8 +36,8 @@ import mekanism.common.EnergyNetwork.EnergyTransferEvent;
|
|||
import mekanism.common.FluidNetwork.FluidTransferEvent;
|
||||
import mekanism.common.Tier.EnergyCubeTier;
|
||||
import mekanism.common.Tier.FactoryTier;
|
||||
import mekanism.common.base.IModule;
|
||||
import mekanism.common.base.IFactory.RecipeType;
|
||||
import mekanism.common.base.IModule;
|
||||
import mekanism.common.entity.EntityBabySkeleton;
|
||||
import mekanism.common.entity.EntityBalloon;
|
||||
import mekanism.common.entity.EntityFlame;
|
||||
|
@ -63,6 +63,7 @@ import mekanism.common.tile.TileEntityEnergizedSmelter;
|
|||
import mekanism.common.tile.TileEntityEntangledBlock;
|
||||
import mekanism.common.tile.TileEntitySalinationBlock;
|
||||
import mekanism.common.tile.TileEntitySalinationValve;
|
||||
import mekanism.common.transporter.PathfinderCache;
|
||||
import mekanism.common.transporter.TransporterManager;
|
||||
import mekanism.common.util.MekanismUtils;
|
||||
import mekanism.common.util.MekanismUtils.ResourceType;
|
||||
|
@ -983,6 +984,7 @@ public class Mekanism
|
|||
//Reset consistent managers
|
||||
MultiblockManager.reset();
|
||||
TransporterManager.reset();
|
||||
PathfinderCache.reset();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
package mekanism.common.multipart;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
|
||||
import codechicken.microblock.BlockMicroMaterial;
|
||||
|
||||
public class PlasticMicroMaterial extends BlockMicroMaterial
|
||||
|
@ -11,8 +10,9 @@ public class PlasticMicroMaterial extends BlockMicroMaterial
|
|||
super(block, meta);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getColour(int pass)
|
||||
{
|
||||
return block().getRenderColor(meta())<<8|0xFF;
|
||||
return block().getRenderColor(meta()) << 8 | 0xFF;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,77 @@
|
|||
package mekanism.common.transporter;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import mekanism.api.Coord4D;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class PathfinderCache
|
||||
{
|
||||
public static Map<PathData, List<Coord4D>> cachedPaths = new HashMap<PathData, List<Coord4D>>();
|
||||
|
||||
public static void onChanged(Coord4D location)
|
||||
{
|
||||
Set<PathData> toKill = new HashSet<PathData>();
|
||||
|
||||
for(Map.Entry<PathData, List<Coord4D>> entry : cachedPaths.entrySet())
|
||||
{
|
||||
if(entry.getValue().contains(entry))
|
||||
{
|
||||
toKill.add(entry.getKey());
|
||||
}
|
||||
}
|
||||
|
||||
for(PathData path : toKill)
|
||||
{
|
||||
cachedPaths.remove(path);
|
||||
}
|
||||
}
|
||||
|
||||
public static void reset()
|
||||
{
|
||||
cachedPaths.clear();
|
||||
}
|
||||
|
||||
public static class PathData
|
||||
{
|
||||
public Coord4D start;
|
||||
public ForgeDirection startSide;
|
||||
|
||||
public Coord4D end;
|
||||
public ForgeDirection endSide;
|
||||
|
||||
public PathData(Coord4D s, ForgeDirection ss, Coord4D e, ForgeDirection es)
|
||||
{
|
||||
start = s;
|
||||
startSide = ss;
|
||||
|
||||
end = e;
|
||||
endSide = es;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj)
|
||||
{
|
||||
return obj instanceof PathData &&
|
||||
((PathData)obj).start.equals(start) &&
|
||||
((PathData)obj).startSide.equals(startSide) &&
|
||||
((PathData)obj).end.equals(end) &&
|
||||
((PathData)obj).endSide.equals(endSide);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
int code = 1;
|
||||
code = 31 * code + start.hashCode();
|
||||
code = 31 * code + startSide.hashCode();
|
||||
code = 31 * code + end.hashCode();
|
||||
code = 31 * code + endSide.hashCode();
|
||||
return code;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue