Skip to content

Commit 59f8d9f

Browse files
committed
new: preDowngrade hook
1 parent 8902fc7 commit 59f8d9f

File tree

9 files changed

+25
-24
lines changed

9 files changed

+25
-24
lines changed

c2me-rewrites-chunk-system/src/main/java/com/ishland/c2me/rewrites/chunksystem/common/NewChunkStatus.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public Completable upgradeToThis(ChunkLoadingContext context, Cancellable cancel
5050
}
5151

5252
@Override
53-
public Completable downgradeFromThis(ChunkLoadingContext context, Cancellable cancellable) {
53+
public Completable downgradeFromThis(ChunkLoadingContext context) {
5454
throw new UnsupportedOperationException();
5555
}
5656

c2me-rewrites-chunk-system/src/main/java/com/ishland/c2me/rewrites/chunksystem/common/statuses/Deferred.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66
import io.reactivex.rxjava3.core.Completable;
77
import net.minecraft.world.chunk.ChunkStatus;
88

9-
import java.util.concurrent.CompletableFuture;
10-
119
public class Deferred extends NewChunkStatus {
1210

1311
public Deferred(int ordinal) {
@@ -20,7 +18,7 @@ public Completable upgradeToThis(ChunkLoadingContext context, Cancellable cancel
2018
}
2119

2220
@Override
23-
public Completable downgradeFromThis(ChunkLoadingContext context, Cancellable cancellable) {
21+
public Completable downgradeFromThis(ChunkLoadingContext context) {
2422
return Completable.complete();
2523
}
2624

c2me-rewrites-chunk-system/src/main/java/com/ishland/c2me/rewrites/chunksystem/common/statuses/ReadFromDisk.java

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.ishland.flowsched.util.Assertions;
2727
import io.reactivex.rxjava3.annotations.NonNull;
2828
import io.reactivex.rxjava3.core.Completable;
29+
import io.reactivex.rxjava3.core.CompletableObserver;
2930
import io.reactivex.rxjava3.core.Single;
3031
import io.reactivex.rxjava3.schedulers.Schedulers;
3132
import net.minecraft.nbt.NbtCompound;
@@ -46,10 +47,8 @@
4647

4748
import java.util.Optional;
4849
import java.util.concurrent.CancellationException;
49-
import java.util.concurrent.CompletableFuture;
5050
import java.util.concurrent.CompletionStage;
5151
import java.util.concurrent.atomic.AtomicBoolean;
52-
import java.util.function.Function;
5352

5453
public class ReadFromDisk extends NewChunkStatus {
5554

@@ -155,18 +154,26 @@ public Completable upgradeToThis(ChunkLoadingContext context, Cancellable cancel
155154
}
156155

157156
@Override
158-
public Completable downgradeFromThis(ChunkLoadingContext context, Cancellable cancellable) {
159-
final AtomicBoolean loadedToWorld = new AtomicBoolean(false);
157+
public Completable preDowngradeFromThis(ChunkLoadingContext context, Cancellable cancellable) {
160158
return Completable.defer(() -> Completable.fromCompletionStage(syncWithLightEngine(context)))
161159
.observeOn(Schedulers.from(((IThreadedAnvilChunkStorage) context.tacs()).getMainThreadExecutor()))
162-
.andThen(Completable.defer(() -> {
160+
.andThen((CompletableObserver observer) -> {
161+
if (context.holder().getTargetStatus().ordinal() > this.ordinal()) { // saving cancelled
162+
cancellable.cancel();
163+
observer.onError(new CancellationException());
164+
} else {
165+
observer.onComplete();
166+
}
167+
});
168+
}
169+
170+
@Override
171+
public Completable downgradeFromThis(ChunkLoadingContext context) {
172+
final AtomicBoolean loadedToWorld = new AtomicBoolean(false);
173+
return Completable.defer(() -> {
163174
Assertions.assertTrue(((IThreadedAnvilChunkStorage) context.tacs()).getMainThreadExecutor().isOnThread());
164175

165176
try (var ignored = ThreadInstrumentation.getCurrent().begin(new ChunkTaskWork(context, this, false))) {
166-
if (context.holder().getTargetStatus().ordinal() > this.ordinal()) { // saving cancelled
167-
cancellable.cancel();
168-
return Completable.error(new CancellationException());
169-
}
170177
final ChunkState chunkState = context.holder().getItem().get();
171178
Chunk chunk = chunkState.chunk();
172179
if (chunk instanceof WrapperProtoChunk protoChunk) chunk = protoChunk.getWrappedChunk();
@@ -206,7 +213,7 @@ public Completable downgradeFromThis(ChunkLoadingContext context, Cancellable ca
206213

207214
return asyncSaveFuture;
208215
}
209-
}));
216+
});
210217
}
211218

212219
private Completable asyncSave(ChunkLoadingContext context, Chunk chunk) {

c2me-rewrites-chunk-system/src/main/java/com/ishland/c2me/rewrites/chunksystem/common/statuses/ServerAccessible.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ private static WorldChunk toFullChunk(ProtoChunk protoChunk, ServerWorld serverW
9696
}
9797

9898
@Override
99-
public Completable downgradeFromThis(ChunkLoadingContext context, Cancellable cancellable) {
99+
public Completable downgradeFromThis(ChunkLoadingContext context) {
100100
ChunkState state = context.holder().getItem().get();
101101
final Chunk chunk = state.chunk();
102102
Preconditions.checkState(chunk instanceof WorldChunk, "Chunk must be a full chunk");

c2me-rewrites-chunk-system/src/main/java/com/ishland/c2me/rewrites/chunksystem/common/statuses/ServerAccessibleChunkSending.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@
1010
import net.minecraft.util.math.ChunkPos;
1111
import net.minecraft.world.chunk.ChunkStatus;
1212

13-
import java.util.concurrent.CompletableFuture;
14-
1513
public class ServerAccessibleChunkSending extends NewChunkStatus {
1614

1715
private static final KeyStatusPair<ChunkPos, ChunkState, ChunkLoadingContext>[] deps;
@@ -30,7 +28,7 @@ public Completable upgradeToThis(ChunkLoadingContext context, Cancellable cancel
3028
}
3129

3230
@Override
33-
public Completable downgradeFromThis(ChunkLoadingContext context, Cancellable cancellable) {
31+
public Completable downgradeFromThis(ChunkLoadingContext context) {
3432
return Completable.complete();
3533
}
3634

c2me-rewrites-chunk-system/src/main/java/com/ishland/c2me/rewrites/chunksystem/common/statuses/ServerBlockTicking.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ private static void sendChunkToPlayer(ChunkLoadingContext context) {
129129
}
130130

131131
@Override
132-
public Completable downgradeFromThis(ChunkLoadingContext context, Cancellable cancellable) {
132+
public Completable downgradeFromThis(ChunkLoadingContext context) {
133133
ServerWorld serverWorld = ((IThreadedAnvilChunkStorage) context.tacs()).getWorld();
134134
final WorldChunk chunk = (WorldChunk) context.holder().getItem().get().chunk();
135135
((WorldChunkExtension) chunk).c2me$setBlockTicking(false);

c2me-rewrites-chunk-system/src/main/java/com/ishland/c2me/rewrites/chunksystem/common/statuses/ServerEntityTicking.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
import net.minecraft.world.chunk.ChunkStatus;
2121
import net.minecraft.world.chunk.WorldChunk;
2222

23-
import java.util.concurrent.CompletableFuture;
24-
2523
public class ServerEntityTicking extends NewChunkStatus {
2624

2725
private static final KeyStatusPair<ChunkPos, ChunkState, ChunkLoadingContext>[] deps;
@@ -61,7 +59,7 @@ public Completable upgradeToThis(ChunkLoadingContext context, Cancellable cancel
6159
}
6260

6361
@Override
64-
public Completable downgradeFromThis(ChunkLoadingContext context, Cancellable cancellable) {
62+
public Completable downgradeFromThis(ChunkLoadingContext context) {
6563
if (ModStatuses.fabric_lifecycle_events_v1 && LifecycleEventInvoker.needsInvokeChunkLevelTypeChange()) {
6664
return Completable
6765
.fromRunnable(() -> {

c2me-rewrites-chunk-system/src/main/java/com/ishland/c2me/rewrites/chunksystem/common/statuses/VanillaWorldGenerationDelegate.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public Completable upgradeToThis(ChunkLoadingContext context, Cancellable cancel
149149
}
150150

151151
@Override
152-
public Completable downgradeFromThis(ChunkLoadingContext context, Cancellable cancellable) {
152+
public Completable downgradeFromThis(ChunkLoadingContext context) {
153153
return Completable.complete();
154154
}
155155

0 commit comments

Comments
 (0)