From cebaaea1537e2b659238c66f0e2fabcf88b8e3c3 Mon Sep 17 00:00:00 2001
From: Phillip Glanz
Date: Sun, 2 Apr 2023 17:34:48 +0200
Subject: [PATCH] Fix port for folia
---
.../fawe/v1_19_R3/PaperweightFaweAdapter.java | 61 +++++++++++++------
.../PaperweightFaweWorldNativeAccess.java | 6 +-
.../fawe/v1_19_R3/regen/PaperweightRegen.java | 3 -
3 files changed, 44 insertions(+), 26 deletions(-)
diff --git a/worldedit-bukkit/adapters/adapter-1_19_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R3/PaperweightFaweAdapter.java b/worldedit-bukkit/adapters/adapter-1_19_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R3/PaperweightFaweAdapter.java
index 82b13843b..ea818e106 100644
--- a/worldedit-bukkit/adapters/adapter-1_19_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R3/PaperweightFaweAdapter.java
+++ b/worldedit-bukkit/adapters/adapter-1_19_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R3/PaperweightFaweAdapter.java
@@ -488,26 +488,47 @@ public final class PaperweightFaweAdapter extends FaweAdapter getCapturedBlockStatesCopy(final ServerLevel serverLevel) {
- return new ArrayList<>(serverLevel.capturedBlockStates.values());
- }
-
- @Override
- protected void postCaptureBlockStates(final ServerLevel serverLevel) {
- serverLevel.captureBlockStates = false;
- serverLevel.captureTreeGeneration = false;
- serverLevel.capturedBlockStates.clear();
- }
-
- @Override
- protected ServerLevel getServerLevel(final World world) {
- return ((CraftWorld) world).getHandle();
+ public boolean generateTree(
+ TreeGenerator.TreeType treeType, EditSession editSession, BlockVector3 blockVector3,
+ org.bukkit.World bukkitWorld
+ ) {
+ TreeType bukkitType = BukkitWorld.toBukkitTreeType(treeType);
+ if (bukkitType == TreeType.CHORUS_PLANT) {
+ blockVector3 = blockVector3.add(
+ 0,
+ 1,
+ 0
+ ); // bukkit skips the feature gen which does this offset normally, so we have to add it back
+ }
+ ServerLevel serverLevel = ((CraftWorld) bukkitWorld).getHandle();
+ final BlockVector3 finalBlockVector = blockVector3;
+ // Sync to main thread to ensure no clashes occur
+ Map placed = TaskManager.taskManager().sync(() -> {
+ serverLevel.captureTreeGeneration = true;
+ serverLevel.captureBlockStates = true;
+ try {
+ if (!bukkitWorld.generateTree(BukkitAdapter.adapt(bukkitWorld, finalBlockVector), bukkitType)) {
+ return null;
+ }
+ return ImmutableMap.copyOf(serverLevel.capturedBlockStates);
+ } finally {
+ serverLevel.captureBlockStates = false;
+ serverLevel.captureTreeGeneration = false;
+ serverLevel.capturedBlockStates.clear();
+ }
+ });
+ if (placed == null || placed.isEmpty()) {
+ return false;
+ }
+ for (CraftBlockState craftBlockState : placed.values()) {
+ if (craftBlockState == null || craftBlockState.getType() == Material.AIR) {
+ continue;
+ }
+ editSession.setBlock(craftBlockState.getX(), craftBlockState.getY(), craftBlockState.getZ(),
+ BukkitAdapter.adapt(((org.bukkit.block.BlockState) craftBlockState).getBlockData())
+ );
+ }
+ return true;
}
@Override
diff --git a/worldedit-bukkit/adapters/adapter-1_19_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R3/PaperweightFaweWorldNativeAccess.java b/worldedit-bukkit/adapters/adapter-1_19_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R3/PaperweightFaweWorldNativeAccess.java
index dbe0150a9..39fa73f6f 100644
--- a/worldedit-bukkit/adapters/adapter-1_19_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R3/PaperweightFaweWorldNativeAccess.java
+++ b/worldedit-bukkit/adapters/adapter-1_19_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R3/PaperweightFaweWorldNativeAccess.java
@@ -11,10 +11,10 @@ import com.sk89q.worldedit.util.SideEffect;
import com.sk89q.worldedit.util.SideEffectSet;
import com.sk89q.worldedit.util.nbt.CompoundBinaryTag;
import com.sk89q.worldedit.world.block.BlockState;
+import io.papermc.paper.threadedregions.RegionizedServer;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
import net.minecraft.nbt.CompoundTag;
-import net.minecraft.server.MinecraftServer;
import net.minecraft.server.level.ChunkHolder;
import net.minecraft.server.level.ServerChunkCache;
import net.minecraft.world.level.Level;
@@ -58,7 +58,7 @@ public class PaperweightFaweWorldNativeAccess implements WorldNativeAccess getUncachedNoiseBiome(int biomeX, int biomeY, int biomeZ) {