Browse Source

Rework fawe implementation

Lilly 1 năm trước cách đây
mục cha
commit
0801b88ec9

+ 18 - 18
1_16_FAWE/src/main/java/de/butzlabben/missilewars/missile/paste/r1_16/fawe/R1_16Paster.java

@@ -19,18 +19,20 @@
 package de.butzlabben.missilewars.missile.paste.r1_16.fawe;
 
 import com.sk89q.worldedit.EditSession;
+import com.sk89q.worldedit.bukkit.BukkitAdapter;
 import com.sk89q.worldedit.bukkit.BukkitWorld;
 import com.sk89q.worldedit.extent.clipboard.Clipboard;
 import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats;
+import com.sk89q.worldedit.function.operation.Operation;
+import com.sk89q.worldedit.function.operation.Operations;
 import com.sk89q.worldedit.math.BlockVector3;
 import com.sk89q.worldedit.math.transform.AffineTransform;
 import com.sk89q.worldedit.regions.CuboidRegion;
+import com.sk89q.worldedit.session.ClipboardHolder;
 import com.sk89q.worldedit.world.World;
 import java.io.File;
-import java.util.HashSet;
 import java.util.Set;
 import org.bukkit.Material;
-import org.bukkit.block.Block;
 import org.bukkit.plugin.java.JavaPlugin;
 import org.bukkit.scheduler.BukkitRunnable;
 import org.bukkit.util.Vector;
@@ -45,26 +47,24 @@ public class R1_16Paster {
         World weWorld = new BukkitWorld(world);
 
         try (Clipboard clipboard = ClipboardFormats.findByFile(schematic).load(schematic)) {
+            ClipboardHolder clipboardHolder = new ClipboardHolder(clipboard);
+            clipboardHolder.setTransform(new AffineTransform().rotateY(rotation));
+            Operation pasteBuilder = clipboardHolder
+                    .createPaste(weWorld)
+                    .to(fromBukkitVector(pos))
+                    .ignoreAirBlocks(true)
+                    .build();
 
-            AffineTransform transform = new AffineTransform();
-            transform = transform.rotateY(rotation);
+            Operations.completeBlindly(pasteBuilder);
 
-            clipboard.paste(weWorld, fromBukkitVector(pos), false, false, transform);
-
-            // Replace given blocks
-            Set<Block> replace = new HashSet<>();
-            Vector min = new Vector(pos.getX() - radius, pos.getY() - radius, pos.getZ() - radius);
-            Vector max = new Vector(pos.getX() + radius, pos.getY() + radius, pos.getZ() + radius);
-            for (BlockVector3 v : new CuboidRegion(fromBukkitVector(min), fromBukkitVector(max))) {
-                Block b = world.getBlockAt(v.getBlockX(), v.getBlockY(), v.getBlockZ());
-                if (b.getType() == replaceType) {
-                    replace.add(b);
-                }
-            }
             new BukkitRunnable() {
                 @Override
                 public void run() {
-                    replace.forEach(b -> b.setType(Material.AIR));
+                    Vector min = pos.subtract(new Vector(radius, radius, radius));
+                    Vector max = pos.add(new Vector(radius, radius, radius));
+                    weWorld.replaceBlocks(new CuboidRegion(fromBukkitVector(min), fromBukkitVector(max)),
+                    Set.of(BukkitAdapter.adapt(replaceType.createBlockData()).toBaseBlock()),
+                    BukkitAdapter.adapt(Material.AIR.createBlockData()));
                 }
             }.runTaskLater(plugin, replaceTicks);
 
@@ -88,4 +88,4 @@ public class R1_16Paster {
     private BlockVector3 fromBukkitVector(org.bukkit.util.Vector pos) {
         return BlockVector3.at(pos.getX(), pos.getY(), pos.getZ());
     }
-}
+}