Posted April 29, 201510 yr Hi there, so: I'm using map to assign one object to another, and to find assigned value, i'm creating new first object and trying to find it in map with get, and as it is another object, in it's class i specified equals method to compare it... So, i tested and for the moment: equals method is working succesfully with 2 different objects, that are not the same but stored ints are equal... map.get is not working with condition above, even know that map.get description says that .equals counts... And also: minecraft uses same kind of system to assign tileentities to position, and it works... DimBlockPos: public int dim; public int x; public int y; public int z; public DimBlockPos(int dim, int x, int y, int z) { this.dim = dim; this.x = x; this.y = y; this.z = z; } @Override public boolean equals(Object obj) { if(obj instanceof DimBlockPos){ DimBlockPos pos = (DimBlockPos) obj; System.out.println("Comparing " + this + " with " + pos); return dim == pos.dim && x == pos.x && y == pos.y && z == pos.z; } return super.equals(obj); } @Override public String toString() { return "DimBlockPos{ " + dim + ", " + x + ", " + y + ", " + z + "}"; } Map map: private static Map<DimBlockPos, RGBO> map = new HashMap<DimBlockPos, RGBO>(); Method that retrieves: DimBlockPos pos = new DimBlockPos(player.worldObj.provider.dimensionId, x, y, z); RGBO rgbo = map.get(pos); System.out.println(map); System.out.println(pos); System.out.println(rgbo); System.out.println(new DimBlockPos(player.worldObj.provider.dimensionId, x, y, z).equals(new DimBlockPos(player.worldObj.provider.dimensionId, x, y, z))); System.out.println(pos.equals(new DimBlockPos(player.worldObj.provider.dimensionId, x, y, z))); And finally what console prints: [19:14:55] [Client thread/INFO] [sTDOUT]: [code.elix_x.coremods.colourfullblocks.color.ColourfullBlocksManager:renderBlock:27]: {DimBlockPos{ 0, 180, 68, 248}=RGBO{ 50.0, 0.0, -50.0, 15.0}, DimBlockPos{ 0, 180, 68, 248}=RGBO{ 50.0, 0.0, -50.0, 15.0}, DimBlockPos{ 0, 179, 68, 246}=RGBO{ 50.0, 0.0, -50.0, 15.0}, DimBlockPos{ 0, 179, 68, 246}=RGBO{ 50.0, 0.0, -50.0, 15.0}} [19:14:55] [Client thread/INFO] [sTDOUT]: [code.elix_x.coremods.colourfullblocks.color.ColourfullBlocksManager:renderBlock:28]: DimBlockPos{ 0, 180, 68, 248} [19:14:55] [Client thread/INFO] [sTDOUT]: [code.elix_x.coremods.colourfullblocks.color.ColourfullBlocksManager:renderBlock:29]: null [19:14:55] [Client thread/INFO] [sTDOUT]: [code.elix_x.coremods.colourfullblocks.util.DimBlockPos:equals:22]: Comparing DimBlockPos{ 0, 180, 68, 248} with DimBlockPos{ 0, 180, 68, 248} true [19:14:55] [Client thread/INFO] [sTDOUT]: [code.elix_x.coremods.colourfullblocks.util.DimBlockPos:equals:22]: Comparing DimBlockPos{ 0, 180, 68, 248} with DimBlockPos{ 0, 180, 68, 248} true Any help is appreciated, andif you have any questions - just ask! Check out my mods: BTAM Armor sets Avoid Exploding Creepers Tools compressor Anti Id Conflict Key bindings overhaul Colourfull blocks Invisi Zones
April 29, 201510 yr Author If you override equals you always MUST override hashCode. Read the javadocs for both equals and hashCode, they tell you how the two interact. If you just override one, you create weird behavior like this. Alternatively, use your IDE, it can generate both for you (Source > Generate equals/hashCode in eclipse iirc). Thank you, it solved the problem! Check out my mods: BTAM Armor sets Avoid Exploding Creepers Tools compressor Anti Id Conflict Key bindings overhaul Colourfull blocks Invisi Zones
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.