Jump to content

How does the findNearestStructure function work?


Calous

Recommended Posts

World.findNearestStructure is called when using the locate command and when a Villager creates a treasuremap. But it seems it always returns null anyway, so how do the locate command and EntityVillager get a BlockPos out of this function?

This is the function in question for those that can't be bothered to look it up:
 

@Nullable
public BlockPos findNearestStructure(String p_190528_1_, BlockPos p_190528_2_, boolean p_190528_3_)
{
    return null;
}

 

Just trying to wrap my head around it.

Link to comment
Share on other sites

It's overridden in WorldServer to call ChunkProviderServer#getNearestStructurePos, which in turn calls IChunkGenerator#getNearestStructurePos. ChunkGeneratorOverworld implements this to look for a hardcoded set of Vanilla structure types, so there's no good way for mods to hook into it. This PR aims to resolve that.

  • Like 1

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

Would it be intelligent to use these as a template if I want to implement a way to track specific mod blocks (in a specific radius maybe)? Sort of like a compass tracks the spawn (except that the information about the spawn is in the player)?

Link to comment
Share on other sites

58 minutes ago, Calous said:

Would it be intelligent to use these as a template if I want to implement a way to track specific mod blocks (in a specific radius maybe)? Sort of like a compass tracks the spawn (except that the information about the spawn is in the player)?

 

You probably could do that.

 

Depending on exactly how your mod works, it may be easier to simply maintain a list of block positions and search that.

  • Like 1

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

On 1/26/2018 at 4:25 PM, Choonster said:

It's overridden in WorldServer to call ChunkProviderServer#getNearestStructurePos, which in turn calls IChunkGenerator#getNearestStructurePos. ChunkGeneratorOverworld implements this to look for a hardcoded set of Vanilla structure types, so there's no good way for mods to hook into it. This PR aims to resolve that.

Is this what the command /locate use to find nearest structures?

Link to comment
Share on other sites

3 minutes ago, TheRPGAdventurer said:

Is this what the command /locate use to find nearest structures?

 

If you look at the CommandLocate class in your IDE, you'll see that it is.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

Link to comment
Share on other sites

On 1/26/2018 at 4:52 AM, Calous said:

If these blocks should be procedurally generated throughout the world then most likely not a list. Thanks for your help I'm gonna look into it and post results here :)

Well, a list can contain BlockPos and can also take in entries for any custom class you create. If you want more information, like a special name for the location of course you can use another collection type like a Map. But in any case you need a list-like collection.

 

So you can just have list of BlockPos and if you don't want to list every block in your "structure" then you just need to record some BlockPos that you consider a marker for the location -- maybe the center, or maybe you have a special block, or maybe just the "seed" for your procedural generation. So just a list. Pretty sure the structure finding ultimately is implemented as a list (or similar collection).

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

Link to comment
Share on other sites

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.