diff --git a/src/main/java/api/hbm/energy/IEnergyConductor.java b/src/main/java/api/hbm/energy/IEnergyConductor.java index 6fc2e5206..a1afc429b 100644 --- a/src/main/java/api/hbm/energy/IEnergyConductor.java +++ b/src/main/java/api/hbm/energy/IEnergyConductor.java @@ -30,7 +30,7 @@ public interface IEnergyConductor extends IEnergyConnector { } public static int getIdentityFromPos(int x, int y, int z) { - final int prime = 31; + final int prime = 27644437; // must be this large to minimize localized collisions int result = 1; result = prime * result + x; result = prime * result + y; diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index a1fdef708..be52392f4 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -72,6 +72,7 @@ import com.hbm.lib.RefStrings; import com.hbm.packet.PacketDispatcher; import com.hbm.potion.HbmPotion; import com.hbm.saveddata.satellites.Satellite; +import com.hbm.test.ReEvalTest; import com.hbm.tileentity.TileMappings; import com.hbm.tileentity.bomb.TileEntityNukeCustom; import com.hbm.tileentity.machine.*; diff --git a/src/main/java/com/hbm/test/ReEvalTest.java b/src/main/java/com/hbm/test/ReEvalTest.java new file mode 100644 index 000000000..9c137c481 --- /dev/null +++ b/src/main/java/com/hbm/test/ReEvalTest.java @@ -0,0 +1,44 @@ +package com.hbm.test; + +import java.util.HashMap; + +import com.hbm.main.MainRegistry; + +import api.hbm.energy.IEnergyConductor; + +public class ReEvalTest { + + /** + * Runs a collision test on a relatively large scale. So large in fact that it will most certainly OOM. + * Not an issue, since by that point we will already have our results. + * @throws OutOfMemoryError + */ + public static void runTest() throws OutOfMemoryError { + + HashMap collisions = new HashMap(); + + int minX = -130; + int maxX = 140; + int minZ = 300; + int maxZ = 520; + + MainRegistry.logger.info("Starting collision test..."); + + for(int x = minX; x <= maxX; x++) { + for(int y = 1; y <= 255; y++) { + for(int z = minZ; z <= maxZ; z++) { + int identity = IEnergyConductor.getIdentityFromPos(x, y, z); + + if(collisions.containsKey(identity)) { + int[] collision = collisions.get(identity); + MainRegistry.logger.info("Position " + x + "/" + y + "/" + z + " collides with " + collision[0] + "/" + collision[1] + "/" + collision[2] + "!"); + } else { + collisions.put(identity, new int[] {x, y, z}); + } + } + } + } + + MainRegistry.logger.info("Collision test complete!"); + } +}