Fix clipboard WorldEditRenderer with transform

This commit is contained in:
Lixfel
2024-11-29 13:02:35 +01:00
parent 891f4b0e9c
commit 46c2de43a4
4 changed files with 31 additions and 11 deletions
@@ -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 {
@@ -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;
@@ -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
}
@@ -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");