From 46c2de43a4b8290b411de5751c826200184d9535 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Fri, 29 Nov 2024 13:02:35 +0100 Subject: [PATCH] Fix clipboard WorldEditRenderer with transform --- .../de/steamwar/core/WorldEditWrapper14.java | 18 ++++++++++++++---- .../de/steamwar/core/WorldEditWrapper8.java | 8 ++++++++ .../de/steamwar/core/WorldEditRenderer.java | 14 +++++++------- .../src/de/steamwar/core/WorldEditWrapper.java | 2 ++ 4 files changed, 31 insertions(+), 11 deletions(-) diff --git a/SpigotCore/SpigotCore_14/src/de/steamwar/core/WorldEditWrapper14.java b/SpigotCore/SpigotCore_14/src/de/steamwar/core/WorldEditWrapper14.java index 38ae351a..eae1c53e 100644 --- a/SpigotCore/SpigotCore_14/src/de/steamwar/core/WorldEditWrapper14.java +++ b/SpigotCore/SpigotCore_14/src/de/steamwar/core/WorldEditWrapper14.java @@ -35,6 +35,8 @@ import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.extent.clipboard.io.*; import com.sk89q.worldedit.extent.clipboard.io.legacycompat.*; import com.sk89q.worldedit.math.BlockVector3; +import com.sk89q.worldedit.math.Vector3; +import com.sk89q.worldedit.math.transform.Transform; import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.session.ClipboardHolder; @@ -44,6 +46,7 @@ import com.sk89q.worldedit.world.block.BlockTypes; import com.sk89q.worldedit.world.registry.LegacyMapper; import de.steamwar.sql.NoClipboardException; import org.bukkit.entity.Player; +import org.bukkit.util.Vector; import java.io.*; import java.util.*; @@ -137,13 +140,20 @@ public class WorldEditWrapper14 implements WorldEditWrapper { } @Override - public org.bukkit.util.Vector getMinimum(Region region) { - return new org.bukkit.util.Vector(region.getMinimumPoint().getX(), region.getMinimumPoint().getY(), region.getMinimumPoint().getZ()); + public Vector getMinimum(Region region) { + return new Vector(region.getMinimumPoint().getX(), region.getMinimumPoint().getY(), region.getMinimumPoint().getZ()); } @Override - public org.bukkit.util.Vector getMaximum(Region region) { - return new org.bukkit.util.Vector(region.getMaximumPoint().getX(), region.getMaximumPoint().getY(), region.getMaximumPoint().getZ()); + public Vector getMaximum(Region region) { + return new Vector(region.getMaximumPoint().getX(), region.getMaximumPoint().getY(), region.getMaximumPoint().getZ()); + } + + @Override + public Vector applyTransform(Vector vector, Transform transform) { + Vector3 v = Vector3.at(vector.getX(), vector.getY(), vector.getZ()); + v = transform.apply(v); + return new org.bukkit.util.Vector(v.getX(), v.getY(), v.getZ()); } private static class MCEditSchematicReader extends NBTSchematicReader { diff --git a/SpigotCore/SpigotCore_8/src/de/steamwar/core/WorldEditWrapper8.java b/SpigotCore/SpigotCore_8/src/de/steamwar/core/WorldEditWrapper8.java index e021ceed..69ebb544 100644 --- a/SpigotCore/SpigotCore_8/src/de/steamwar/core/WorldEditWrapper8.java +++ b/SpigotCore/SpigotCore_8/src/de/steamwar/core/WorldEditWrapper8.java @@ -32,6 +32,7 @@ import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat; import com.sk89q.worldedit.extent.clipboard.io.ClipboardReader; import com.sk89q.worldedit.extent.clipboard.io.SchematicReader; +import com.sk89q.worldedit.math.transform.Transform; import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.session.ClipboardHolder; @@ -126,6 +127,13 @@ public class WorldEditWrapper8 implements WorldEditWrapper { return new org.bukkit.util.Vector(region.getMaximumPoint().getX(), region.getMaximumPoint().getY(), region.getMaximumPoint().getZ()); } + @Override + public org.bukkit.util.Vector applyTransform(org.bukkit.util.Vector vector, Transform transform) { + Vector v = new Vector(vector.getX(), vector.getY(), vector.getZ()); + v = transform.apply(v); + return new org.bukkit.util.Vector(v.getX(), v.getY(), v.getZ()); + } + private static class SpongeSchematicReader implements ClipboardReader { private final NBTInputStream inputStream; diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/WorldEditRenderer.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/WorldEditRenderer.java index 7850754e..cd9a0d4e 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/WorldEditRenderer.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/WorldEditRenderer.java @@ -24,6 +24,7 @@ import com.sk89q.worldedit.IncompleteRegionException; import com.sk89q.worldedit.LocalSession; import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldedit.extent.clipboard.Clipboard; +import com.sk89q.worldedit.math.transform.Transform; import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.regions.RegionSelector; import com.sk89q.worldedit.world.World; @@ -43,7 +44,7 @@ public class WorldEditRenderer { private static final Vector ONES = new Vector(1, 1, 1); - private static final Material WAND = Material.valueOf(Core.getVersion() > 12 ? "WOODEN_AXE" : "WOOD_AXE"); + private static final Material WAND = FlatteningWrapper.impl.getMaterial("WOOD_AXE"); private final WorldEditPlugin we; @@ -62,13 +63,12 @@ public class WorldEditRenderer { LocalSession session = we.getSession(player); try { Clipboard clipboard = session.getClipboard().getClipboard(); + Vector pos = player.getLocation().toVector(); Region region = clipboard.getRegion(); - Vector offset = player.getLocation().toVector().subtract(WorldEditWrapper.impl.getOrigin(clipboard)); - drawCuboid( - WorldEditWrapper.impl.getMinimum(region).add(offset), - WorldEditWrapper.impl.getMaximum(region).add(offset), - Particle.VILLAGER_HAPPY, player - ); + Transform transform = session.getClipboard().getTransform(); + Vector a = WorldEditWrapper.impl.applyTransform(WorldEditWrapper.impl.getMinimum(region).subtract(WorldEditWrapper.impl.getOrigin(clipboard)), transform).add(pos); + Vector b = WorldEditWrapper.impl.applyTransform(WorldEditWrapper.impl.getMaximum(region).subtract(WorldEditWrapper.impl.getOrigin(clipboard)), transform).add(pos); + drawCuboid(Vector.getMinimum(a, b), Vector.getMaximum(a, b), Particle.VILLAGER_HAPPY, player); } catch (EmptyClipboardException e) { //ignore } diff --git a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/WorldEditWrapper.java b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/WorldEditWrapper.java index c034723c..1d9ef6cd 100644 --- a/SpigotCore/SpigotCore_Main/src/de/steamwar/core/WorldEditWrapper.java +++ b/SpigotCore/SpigotCore_Main/src/de/steamwar/core/WorldEditWrapper.java @@ -21,6 +21,7 @@ package de.steamwar.core; import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldedit.extent.clipboard.Clipboard; +import com.sk89q.worldedit.math.transform.Transform; import com.sk89q.worldedit.regions.Region; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -39,6 +40,7 @@ public interface WorldEditWrapper { Vector getOrigin(Clipboard clipboard); Vector getMinimum(Region region); Vector getMaximum(Region region); + Vector applyTransform(Vector vector, Transform transform); static WorldEditPlugin getWorldEditPlugin() { return (WorldEditPlugin) Bukkit.getPluginManager().getPlugin("WorldEdit");