Began the actual implementation of PathfinderCache

This commit is contained in:
Aidan C. Brady 2014-08-17 21:36:16 -04:00
parent 9b46044391
commit aa2c79672b
3 changed files with 82 additions and 3 deletions

View file

@ -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

View file

@ -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;
}
}

View file

@ -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;
}
}
}