Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

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!

  • 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!

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

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.