diff --git a/src/main/java/WayofTime/bloodmagic/inversion/InversionPillarHandler.java b/src/main/java/WayofTime/bloodmagic/inversion/InversionPillarHandler.java index 3c9fb261..d9217231 100644 --- a/src/main/java/WayofTime/bloodmagic/inversion/InversionPillarHandler.java +++ b/src/main/java/WayofTime/bloodmagic/inversion/InversionPillarHandler.java @@ -9,7 +9,6 @@ import java.util.Map; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import WayofTime.bloodmagic.api.soul.EnumDemonWillType; -import WayofTime.bloodmagic.tile.TileInversionPillar; public class InversionPillarHandler { @@ -27,7 +26,9 @@ public class InversionPillarHandler { if (!willMap.get(type).contains(pos)) { - return willMap.get(type).add(pos); + willMap.get(type).add(pos); + onPillarAdded(world, type, pos); + return true; } else { return false; @@ -37,6 +38,7 @@ public class InversionPillarHandler List posList = new ArrayList(); posList.add(pos); willMap.put(type, posList); + onPillarAdded(world, type, pos); return true; } } else @@ -47,6 +49,7 @@ public class InversionPillarHandler willMap.put(type, posList); pillarMap.put(dim, willMap); + onPillarAdded(world, type, pos); return true; } } @@ -61,6 +64,7 @@ public class InversionPillarHandler { if (willMap.get(type).contains(pos)) { + onPillarRemoved(world, type, pos); return willMap.get(type).remove(pos); } else { @@ -76,8 +80,77 @@ public class InversionPillarHandler } } + //Assume that it has been added already. + private static void onPillarAdded(World world, EnumDemonWillType type, BlockPos pos) + { + System.out.println("Adding..."); + List closePosList = new ArrayList(); + + int dim = world.provider.getDimension(); + if (pillarMap.containsKey(dim)) + { + Map> willMap = pillarMap.get(dim); + if (willMap.containsKey(type)) + { + List otherPosList = willMap.get(type); + + Iterator posIterator = otherPosList.iterator(); + while (posIterator.hasNext()) + { + BlockPos closePos = posIterator.next(); + if (!closePos.equals(pos) && closePos.distanceSq(pos) <= farthestDistanceSquared) + { + closePosList.add(closePos); + } + } + + } + } + if (nearPillarMap.containsKey(dim)) + { + Map>> willMap = nearPillarMap.get(dim); + if (willMap.containsKey(type)) + { + Map> posMap = willMap.get(type); + + Iterator closePosIterator = closePosList.iterator(); + while (closePosIterator.hasNext()) + { + BlockPos closePos = closePosIterator.next(); + List posList = posMap.get(closePos); + if (posList != null && !posList.contains(pos)) + { + posList.add(pos); + } else + { + posList = new ArrayList(); + posList.add(pos); + posMap.put(closePos, posList); + } + } + + posMap.put(pos, closePosList); + } else + { + Map> posMap = new HashMap>(); + + posMap.put(pos, closePosList); + willMap.put(type, posMap); + } + } else + { + Map>> willMap = new HashMap>>(); + Map> posMap = new HashMap>(); + + posMap.put(pos, closePosList); + willMap.put(type, posMap); + nearPillarMap.put(dim, willMap); + } + } + private static void onPillarRemoved(World world, EnumDemonWillType type, BlockPos pos) { + System.out.println("Removing..."); int dim = world.provider.getDimension(); if (nearPillarMap.containsKey(dim)) { @@ -109,35 +182,20 @@ public class InversionPillarHandler public static List getNearbyPillars(World world, EnumDemonWillType type, BlockPos pos) { int dim = world.provider.getDimension(); - List posList = new ArrayList(); - if (pillarMap.containsKey(dim)) + if (nearPillarMap.containsKey(dim)) { - Map> willMap = pillarMap.get(dim); - posList = willMap.get(type); - } - - if (posList != null) - { - List newList = new ArrayList(); - - Iterator itr = posList.iterator(); - while (itr.hasNext()) + Map>> willMap = nearPillarMap.get(dim); + if (willMap.containsKey(type)) { - BlockPos newPos = itr.next(); - if (newPos.equals(pos)) + Map> posMap = willMap.get(type); + List posList = posMap.get(pos); + if (posList != null) { - continue; - } - if (world.getTileEntity(newPos) instanceof TileInversionPillar) //Make this check... more efficient somehow. - { - newList.add(newPos); + return posList; } } - - return newList; - } else - { - return new ArrayList(); } + + return new ArrayList(); } } diff --git a/src/main/java/WayofTime/bloodmagic/tile/TileInversionPillar.java b/src/main/java/WayofTime/bloodmagic/tile/TileInversionPillar.java index e9a9be8e..5d128c79 100644 --- a/src/main/java/WayofTime/bloodmagic/tile/TileInversionPillar.java +++ b/src/main/java/WayofTime/bloodmagic/tile/TileInversionPillar.java @@ -66,6 +66,10 @@ public class TileInversionPillar extends TileTicking if (counter % 1 == 0) { List pillarList = getNearbyPillarsExcludingThis(); +// if (type == EnumDemonWillType.VENGEFUL) +// { +// System.out.println(pillarList.size() + " nearby pillars"); +// } generateWillForNearbyPillars(currentWill, pillarList); generateInversionForNearbyPillars(currentWill, pillarList); int pollute = polluteNearbyBlocks(currentWill); @@ -94,7 +98,10 @@ public class TileInversionPillar extends TileTicking public void removePillarFromMap() { - + if (!worldObj.isRemote) + { + InversionPillarHandler.removePillarFromMap(worldObj, type, pos); + } } public List getNearbyPillarsExcludingThis()