Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Implement diffing algorithm for MapTemplates #17

Open
wants to merge 1 commit into
base: 1.20.6
Choose a base branch
from

Conversation

Restioson
Copy link

@Restioson Restioson commented Jun 14, 2024

This PR implements a very coarse diffing algorithm for map templates. It is intended to be used with NucleoidMC/plasmid#293 as such:

The functionality offered is therefore pretty much the bare minimum to support that use case.

        if (newTemplate.diff(oldTemplate).needsRegeneration()) {
            gameSpace.getWorlds().regenerate(world, new TemplateChunkGenerator(server, newTemplate), newTemplate.getBounds().union(oldTemplate.getBounds()));
        }

The diffing algorithm uses the BLAKE3 hash function internally to compare MapChunks.

It takes around 100ms to hash a map that takes 400ms to load (based on siege:jungle). Therefore, the first hot reload of the map would take 100ms (hash old map) + 400ms (load new map) + 100ms (hash new map) + (negligible comparison) = 600ms. On second reload, the old map doesn't need to be hashed, so it would be 500ms.

@Restioson
Copy link
Author

Restioson commented Jun 14, 2024

This could probably be optimised somewhat by keeping the hash on the entire template rather than each MapChunk, but this would somewhat weaken encapsulation. I don't really have the bandwidth to change it and it's a minor optimisation for a use-case that isn't very performance-critical (reloading).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant