Jump to content

Recommended Posts

Posted

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!

Posted

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!

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.