From f066939c0ee39f03b4b5a57a1262f81b17a7867e Mon Sep 17 00:00:00 2001
From: TheMeinerLP
Date: Tue, 6 Jun 2023 13:14:01 +0200
Subject: [PATCH] Implements method handles for folia
---
.../fawe/v1_19_R3/PaperweightGetBlocks.java | 58 ++++++++++++++++---
1 file changed, 50 insertions(+), 8 deletions(-)
diff --git a/worldedit-bukkit/adapters/adapter-1_19_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R3/PaperweightGetBlocks.java b/worldedit-bukkit/adapters/adapter-1_19_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R3/PaperweightGetBlocks.java
index 60695c1e8..cbcf09aaf 100644
--- a/worldedit-bukkit/adapters/adapter-1_19_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R3/PaperweightGetBlocks.java
+++ b/worldedit-bukkit/adapters/adapter-1_19_4/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R3/PaperweightGetBlocks.java
@@ -12,6 +12,7 @@ import com.fastasyncworldedit.core.queue.IChunkSet;
import com.fastasyncworldedit.core.queue.implementation.QueueHandler;
import com.fastasyncworldedit.core.queue.implementation.blocks.CharGetBlocks;
import com.fastasyncworldedit.core.util.MathMan;
+import com.fastasyncworldedit.core.util.TaskManager;
import com.fastasyncworldedit.core.util.collection.AdaptedMap;
import com.google.common.base.Suppliers;
import com.sk89q.jnbt.CompoundTag;
@@ -19,11 +20,15 @@ import com.sk89q.jnbt.ListTag;
import com.sk89q.jnbt.StringTag;
import com.sk89q.jnbt.Tag;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
+import com.sk89q.worldedit.bukkit.BukkitWorld;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
+import com.sk89q.worldedit.bukkit.adapter.ext.fawe.v1_19_R3.PaperweightAdapter;
import com.sk89q.worldedit.bukkit.adapter.impl.fawe.v1_19_R3.nbt.PaperweightLazyCompoundTag;
import com.sk89q.worldedit.internal.Constants;
import com.sk89q.worldedit.internal.util.LogManagerCompat;
import com.sk89q.worldedit.math.BlockVector3;
+import com.sk89q.worldedit.math.Vector3;
+import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.world.biome.BiomeType;
import com.sk89q.worldedit.world.biome.BiomeTypes;
import com.sk89q.worldedit.world.block.BlockTypesCache;
@@ -82,6 +87,7 @@ import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.function.Function;
+import java.util.function.Supplier;
import java.util.stream.Collectors;
import static net.minecraft.core.registries.Registries.BIOME;
@@ -256,13 +262,32 @@ public class PaperweightGetBlocks extends CharGetBlocks implements BukkitGetBloc
@Override
public CompoundTag getTile(int x, int y, int z) {
- BlockEntity blockEntity = getChunk().getBlockEntity(new BlockPos((x & 15) + (
- chunkX << 4), y, (z & 15) + (
- chunkZ << 4)));
- if (blockEntity == null) {
- return null;
+ PaperweightAdapter adapter = (PaperweightAdapter) this.adapter.getParent();
+ if (adapter.isFolia()) {
+ Supplier entity = () -> {
+ var pos = new BlockPos((x & 15) + (
+ chunkX << 4), y, (z & 15) + (
+ chunkZ << 4));
+ return getChunk().getBlockEntity(pos);
+ };
+
+ if (entity == null) {
+ return null;
+ }
+ return new PaperweightLazyCompoundTag(Suppliers.memoize(TaskManager.taskManager().syncAt(
+ entity,
+ new Location(new BukkitWorld(serverLevel.getWorld()), Vector3.at(x, y, z))
+ )::saveWithId));
+ } else {
+ BlockEntity blockEntity = getChunk().getBlockEntity(new BlockPos((x & 15) + (
+ chunkX << 4), y, (z & 15) + (
+ chunkZ << 4)));
+ if (blockEntity == null) {
+ return null;
+ }
+ return new PaperweightLazyCompoundTag(Suppliers.memoize(blockEntity::saveWithId));
}
- return new PaperweightLazyCompoundTag(Suppliers.memoize(blockEntity::saveWithId));
+
}
@Override
@@ -789,8 +814,8 @@ public class PaperweightGetBlocks extends CharGetBlocks implements BukkitGetBloc
final int y = blockHash.getY();
final int z = blockHash.getZ() + bz;
final BlockPos pos = new BlockPos(x, y, z);
-
- synchronized (nmsWorld) {
+ PaperweightAdapter adapter = (PaperweightAdapter) this.adapter.getParent();
+ if (adapter.isFolia()) {
BlockEntity tileEntity = nmsWorld.getBlockEntity(pos);
if (tileEntity == null || tileEntity.isRemoved()) {
nmsWorld.removeBlockEntity(pos);
@@ -804,7 +829,24 @@ public class PaperweightGetBlocks extends CharGetBlocks implements BukkitGetBloc
tag.put("z", IntTag.valueOf(z));
tileEntity.load(tag);
}
+ } else {
+ synchronized (nmsWorld) {
+ BlockEntity tileEntity = nmsWorld.getBlockEntity(pos);
+ if (tileEntity == null || tileEntity.isRemoved()) {
+ nmsWorld.removeBlockEntity(pos);
+ tileEntity = nmsWorld.getBlockEntity(pos);
+ }
+ if (tileEntity != null) {
+ final net.minecraft.nbt.CompoundTag tag = (net.minecraft.nbt.CompoundTag) adapter.fromNative(
+ nativeTag);
+ tag.put("x", IntTag.valueOf(x));
+ tag.put("y", IntTag.valueOf(y));
+ tag.put("z", IntTag.valueOf(z));
+ tileEntity.load(tag);
+ }
+ }
}
+
}
};
}