Skip to content

⚡️Performance: Rework World Generation - #201

Merged
Zoriot merged 73 commits into
mainfrom
update/world-generation-rework
Sep 12, 2026
Merged

⚡️Performance: Rework World Generation #201
Zoriot merged 73 commits into
mainfrom
update/world-generation-rework

Conversation

@Zoriot

@Zoriot Zoriot commented Jan 27, 2026

Copy link
Copy Markdown
Member

Summary

This PR reworks plot-world generation and loading to make it asynchronous and lifecycle-safe, while updating plot recovery, world-height handling, tutorial flows, and translation automation.

What changed

  • Moved plot-world file generation off the main server thread.
  • Added skeleton-world generation and reuse for faster, consistent plot-world creation.
  • Reworked plot loading into dedicated loader implementations for regular and tutorial plots.
  • Ensured Bukkit, Multiverse, WorldGuard, and FAWE operations run on the appropriate thread.
  • Added synchronization to prevent concurrent generation of the same plot world.
  • Improved plot-world recovery when an existing one-plot world is missing.
    • Failed recovery no longer abandons or resets the existing plot.
    • New plot generation still rolls back assignment when generation fails.
  • Preserved existing plot-world identity based on persisted plot type and legacy compatibility.
  • Updated teleport and review flows to prepare worlds before teleporting.
  • Improved passenger handling during plot teleportation.
  • Updated plot height validation to use the actual world height limits.
  • Added clearer generation-error logging, including the affected plot ID.
  • Updated tutorial plot generation and schematic-pasting behavior.
  • Removed the obsolete plot generator implementations and replaced them with the new loader architecture.
  • Updated project dependencies and Paper/Gradle compatibility.
  • Updated Crowdin workflows and upgraded the Crowdin GitHub Action.
  • Removed source-file license notices where no longer required.

Behavior and compatibility notes

  • The disable-city-inspiration-mode setting now affects new plot assignment only.
  • Existing City Inspiration Mode plots continue to resolve to their persisted city worlds.
  • Existing completed and unfinished one-plot worlds retain their database state if recovery fails

Cinnazeyy and others added 26 commits July 14, 2025 04:17
- measure old generator performance
- add new AbstractPlotLoader, DefaultPlotLoader and PlotHandler
…ion-rework

# Conflicts:
#	src/main/java/com/alpsbte/plotsystem/core/system/plot/generator/DefaultPlotGenerator.java
…ot Worlds to handle world specific abandon logic
- measure old generator performance
- add new AbstractPlotLoader, DefaultPlotLoader and PlotHandler
…ot Worlds to handle world specific abandon logic
…into update/world-generation-rework

# Conflicts:
#	src/main/java/com/alpsbte/plotsystem/core/system/plot/generator/world/PlotWorldGenerator.java
#	src/main/java/com/alpsbte/plotsystem/core/system/plot/world/OnePlotWorld.java
#	src/main/java/com/alpsbte/plotsystem/core/system/plot/world/PlotWorld.java
move savePlotAsSchematic to PlotHandler.
create methods for both assigning and generating in PlotHandler.
remove all old PlotGenerator files and replace every usage with the new PlotLoaders
…ion-rework

# Conflicts:
#	src/main/java/com/alpsbte/plotsystem/commands/plot/CMD_Plot_Abandon.java
#	src/main/java/com/alpsbte/plotsystem/core/menus/companion/CityProjectMenu.java
#	src/main/java/com/alpsbte/plotsystem/core/menus/review/ReviewPlotTogglesMenu.java
#	src/main/java/com/alpsbte/plotsystem/core/system/plot/generator/DefaultPlotGenerator.java
#	src/main/java/com/alpsbte/plotsystem/core/system/plot/utils/PlotUtils.java
#	src/main/java/com/alpsbte/plotsystem/core/system/plot/world/CityPlotWorld.java
#	src/main/java/com/alpsbte/plotsystem/core/system/plot/world/OnePlotWorld.java
@Zoriot Zoriot added enhancement New feature or request high priority labels Jan 27, 2026
Zoriot added 11 commits August 25, 2026 21:12
Persist plot state consistently, prevent duplicate generation, and move heavy WorldEdit work onto FAWE's async executor.
- Now we don't construct a Air Mask in several places anymore.
- We just use ignore air

This fixes a issue where we adapt a cim world before it is actually loaded, that resulted into a fawe exception, which resulted in the plot not beeing pasted.
We switched to only the per repo license.
Teleporting called loadWorld(), which regenerated missing plot worlds and blocked on FAWE tasks that themselves need the main thread, freezing the server until the watchdog fired. World regeneration now lives in prepareWorld(), which callers invoke asynchronously before teleporting, and blocking waits fail fast when they run on the main thread.
@Zoriot
Zoriot marked this pull request as ready for review September 8, 2026 17:25
@LordTuxn
LordTuxn self-requested a review September 12, 2026 15:22
Comment thread src/main/java/com/alpsbte/plotsystem/core/menus/tutorial/TutorialStagesMenu.java Outdated
Comment thread src/main/resources/tutorial/tutorial_beginner.yml Outdated
Zoriot and others added 8 commits September 12, 2026 23:10
This reverts commit 339d69b

We paste it on the original position anyway so it's fine to fallback to 0 there
Prevent failed rebuilds of existing one-plot worlds from abandoning their plots, while retaining rollback behavior for newly assigned plots. Resolve existing plot worlds from persisted type and legacy compatibility instead of the new-plot CIM configuration.
Reduce schematic-save complexity, replace raw exception wrappers with specific completion exceptions, and document the tutorial loader lifecycle hook. Migrate tutorial menus, holograms, and NPC text to Adventure components and NamedTextColor.
@Zoriot
Zoriot force-pushed the update/world-generation-rework branch from 4bb715b to 348ffd3 Compare September 12, 2026 21:14
@Zoriot
Zoriot requested a review from LordTuxn September 12, 2026 21:15
@Zoriot
Zoriot force-pushed the update/world-generation-rework branch from 78ceada to c05c465 Compare September 12, 2026 21:24
@Zoriot
Zoriot merged commit 197f65d into main Sep 12, 2026
2 checks passed
@Zoriot
Zoriot deleted the update/world-generation-rework branch September 12, 2026 21:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request high priority

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] - Plot Slot Bugged - We need a Queue [Feature] - the ability to add custom links to /p links

3 participants