IntellectualSites / IntellectualSites/FastAsyncWorldEdit

FAWE does not write into extent of edit session, but into world of extent

Open
#2,121 8 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Requires Testing
Dominant language
Java
Stars
806
Forks
394
Avg merge
22h 19m
Merged PRs (30d)
14

Description

Server Implementation

Paper

Server Version

1.19.3

Describe the bug

First: This bug does not occur when using WorldEdit. It only occurs when using FAWE

When creating an ImmutableWorld Extent which blocks setting of a block and modifying the world in general, FAWE still writes into the world itself instead of the extend provided for the edit session.

None of the setBlock methods of the extent is called. I suspect that FAWE directly writes into the chunks which would makes sense considering how fawe works, but this causes that the extent is used to retrieve the chunks but not to write the changes.

Since the original extent is wrapped into an SingleThreadQueueExtent and this implements how the chunk setters are retrieved, there is no real way to prevent writing into the chunks from api side.

Case 1
EditSession with normal world.
PasteOperation into EditSession as Extent
Result: Schematic gets pasted into the world (Expected)

Case 2
EditSession with ImmutableWorld.
PasteOperation with ImmutableWorld as Extent
Result: Schematic does NOT get paste into the world (Expected)

Case 3
EditSession with ImmutableWorld.
PasteOperation with EditSession as Extent
Result: Schematic gets pasted into the world (Unexpected)

To Reproduce

I created a minimal working example:

https://github.com/eldoriarpg/we-playground

  1. Install the plugin
  2. Execute /wetest <case> to execute one of the cases described above.
Expected behaviour

That FAWE writes into the provided extent and not into the chunks of the extent as it seems.

Screenshots / Videos

No response

Error log (if applicable)

No response

Fawe Debugpaste

https://athion.net/ISPaster/paste/view/973182bf68674dfc91006cc50d54d6c4

Fawe Version

FastAsyncWorldEdit-Bukkit-2.5.3-SNAPSHOT-370

Checklist
Anything else?

No response

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the minimal example in eldoriarpg/we-playground and reproduce cases 1–3 using /wetest <case>. Then trace how an EditSession wraps an ImmutableWorld through SingleThreadQueueExtent, especially chunk retrieval and setters. Done means the provided extent receives writes in case 3 instead of the underlying world, without breaking cases 1 and 2.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
game-dev
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.