fix: always set createCopy status on chunk get as chunks are cached (#2567)

- fixes #2539
This commit is contained in:
Jordan 2024-02-02 18:06:57 +01:00 committed by GitHub
parent 9ffe76dce3
commit 033b8e35d2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 7 additions and 1 deletions

View File

@ -148,6 +148,7 @@ public class PaperweightGetBlocks extends CharGetBlocks implements BukkitGetBloc
throw new IllegalStateException("Attempting to set if chunk GET should create copy, but it is not call-locked."); throw new IllegalStateException("Attempting to set if chunk GET should create copy, but it is not call-locked.");
} }
this.createCopy = createCopy; this.createCopy = createCopy;
// Increment regardless of whether copy will be created or not to return null from getCopy()
return ++this.copyKey; return ++this.copyKey;
} }

View File

@ -153,6 +153,7 @@ public class PaperweightGetBlocks extends CharGetBlocks implements BukkitGetBloc
throw new IllegalStateException("Attempting to set if chunk GET should create copy, but it is not call-locked."); throw new IllegalStateException("Attempting to set if chunk GET should create copy, but it is not call-locked.");
} }
this.createCopy = createCopy; this.createCopy = createCopy;
// Increment regardless of whether copy will be created or not to return null from getCopy()
return ++this.copyKey; return ++this.copyKey;
} }

View File

@ -156,6 +156,7 @@ public class PaperweightGetBlocks extends CharGetBlocks implements BukkitGetBloc
throw new IllegalStateException("Attempting to set if chunk GET should create copy, but it is not call-locked."); throw new IllegalStateException("Attempting to set if chunk GET should create copy, but it is not call-locked.");
} }
this.createCopy = createCopy; this.createCopy = createCopy;
// Increment regardless of whether copy will be created or not to return null from getCopy()
return ++this.copyKey; return ++this.copyKey;
} }

View File

@ -156,6 +156,7 @@ public class PaperweightGetBlocks extends CharGetBlocks implements BukkitGetBloc
throw new IllegalStateException("Attempting to set if chunk GET should create copy, but it is not call-locked."); throw new IllegalStateException("Attempting to set if chunk GET should create copy, but it is not call-locked.");
} }
this.createCopy = createCopy; this.createCopy = createCopy;
// Increment regardless of whether copy will be created or not to return null from getCopy()
return ++this.copyKey; return ++this.copyKey;
} }

View File

@ -135,6 +135,7 @@ public class PaperweightGetBlocks extends CharGetBlocks implements BukkitGetBloc
throw new IllegalStateException("Attempting to set if chunk GET should create copy, but it is not call-locked."); throw new IllegalStateException("Attempting to set if chunk GET should create copy, but it is not call-locked.");
} }
this.createCopy = createCopy; this.createCopy = createCopy;
// Increment regardless of whether copy will be created or not to return null from getCopy()
return ++this.copyKey; return ++this.copyKey;
} }

View File

@ -135,6 +135,7 @@ public class PaperweightGetBlocks extends CharGetBlocks implements BukkitGetBloc
throw new IllegalStateException("Attempting to set if chunk GET should create copy, but it is not call-locked."); throw new IllegalStateException("Attempting to set if chunk GET should create copy, but it is not call-locked.");
} }
this.createCopy = createCopy; this.createCopy = createCopy;
// Increment regardless of whether copy will be created or not to return null from getCopy()
return ++this.copyKey; return ++this.copyKey;
} }

View File

@ -1031,10 +1031,10 @@ public class ChunkHolder<T extends Future<T>> implements IQueueChunk<T> {
try { try {
get.lockCall(); get.lockCall();
boolean postProcess = !(getExtent().getPostProcessor() instanceof EmptyBatchProcessor); boolean postProcess = !(getExtent().getPostProcessor() instanceof EmptyBatchProcessor);
final int copyKey = get.setCreateCopy(postProcess);
final IChunkSet iChunkSet = getExtent().processSet(this, get, set); final IChunkSet iChunkSet = getExtent().processSet(this, get, set);
Runnable finalizer; Runnable finalizer;
if (postProcess) { if (postProcess) {
int copyKey = get.setCreateCopy(true);
finalizer = () -> { finalizer = () -> {
getExtent().postProcess(this, get.getCopy(copyKey), iChunkSet); getExtent().postProcess(this, get.getCopy(copyKey), iChunkSet);
finalize.run(); finalize.run();