forked from SteamWar/SteamWar
Fix clipboard WorldEditRenderer with transform
This commit is contained in:
@@ -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.*;
|
||||||
import com.sk89q.worldedit.extent.clipboard.io.legacycompat.*;
|
import com.sk89q.worldedit.extent.clipboard.io.legacycompat.*;
|
||||||
import com.sk89q.worldedit.math.BlockVector3;
|
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.CuboidRegion;
|
||||||
import com.sk89q.worldedit.regions.Region;
|
import com.sk89q.worldedit.regions.Region;
|
||||||
import com.sk89q.worldedit.session.ClipboardHolder;
|
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 com.sk89q.worldedit.world.registry.LegacyMapper;
|
||||||
import de.steamwar.sql.NoClipboardException;
|
import de.steamwar.sql.NoClipboardException;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
@@ -137,13 +140,20 @@ public class WorldEditWrapper14 implements WorldEditWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public org.bukkit.util.Vector getMinimum(Region region) {
|
public Vector getMinimum(Region region) {
|
||||||
return new org.bukkit.util.Vector(region.getMinimumPoint().getX(), region.getMinimumPoint().getY(), region.getMinimumPoint().getZ());
|
return new Vector(region.getMinimumPoint().getX(), region.getMinimumPoint().getY(), region.getMinimumPoint().getZ());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public org.bukkit.util.Vector getMaximum(Region region) {
|
public Vector getMaximum(Region region) {
|
||||||
return new org.bukkit.util.Vector(region.getMaximumPoint().getX(), region.getMaximumPoint().getY(), region.getMaximumPoint().getZ());
|
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 {
|
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.ClipboardFormat;
|
||||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardReader;
|
import com.sk89q.worldedit.extent.clipboard.io.ClipboardReader;
|
||||||
import com.sk89q.worldedit.extent.clipboard.io.SchematicReader;
|
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.CuboidRegion;
|
||||||
import com.sk89q.worldedit.regions.Region;
|
import com.sk89q.worldedit.regions.Region;
|
||||||
import com.sk89q.worldedit.session.ClipboardHolder;
|
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());
|
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 static class SpongeSchematicReader implements ClipboardReader {
|
||||||
|
|
||||||
private final NBTInputStream inputStream;
|
private final NBTInputStream inputStream;
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import com.sk89q.worldedit.IncompleteRegionException;
|
|||||||
import com.sk89q.worldedit.LocalSession;
|
import com.sk89q.worldedit.LocalSession;
|
||||||
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
|
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
|
||||||
import com.sk89q.worldedit.extent.clipboard.Clipboard;
|
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.Region;
|
||||||
import com.sk89q.worldedit.regions.RegionSelector;
|
import com.sk89q.worldedit.regions.RegionSelector;
|
||||||
import com.sk89q.worldedit.world.World;
|
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 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;
|
private final WorldEditPlugin we;
|
||||||
|
|
||||||
@@ -62,13 +63,12 @@ public class WorldEditRenderer {
|
|||||||
LocalSession session = we.getSession(player);
|
LocalSession session = we.getSession(player);
|
||||||
try {
|
try {
|
||||||
Clipboard clipboard = session.getClipboard().getClipboard();
|
Clipboard clipboard = session.getClipboard().getClipboard();
|
||||||
|
Vector pos = player.getLocation().toVector();
|
||||||
Region region = clipboard.getRegion();
|
Region region = clipboard.getRegion();
|
||||||
Vector offset = player.getLocation().toVector().subtract(WorldEditWrapper.impl.getOrigin(clipboard));
|
Transform transform = session.getClipboard().getTransform();
|
||||||
drawCuboid(
|
Vector a = WorldEditWrapper.impl.applyTransform(WorldEditWrapper.impl.getMinimum(region).subtract(WorldEditWrapper.impl.getOrigin(clipboard)), transform).add(pos);
|
||||||
WorldEditWrapper.impl.getMinimum(region).add(offset),
|
Vector b = WorldEditWrapper.impl.applyTransform(WorldEditWrapper.impl.getMaximum(region).subtract(WorldEditWrapper.impl.getOrigin(clipboard)), transform).add(pos);
|
||||||
WorldEditWrapper.impl.getMaximum(region).add(offset),
|
drawCuboid(Vector.getMinimum(a, b), Vector.getMaximum(a, b), Particle.VILLAGER_HAPPY, player);
|
||||||
Particle.VILLAGER_HAPPY, player
|
|
||||||
);
|
|
||||||
} catch (EmptyClipboardException e) {
|
} catch (EmptyClipboardException e) {
|
||||||
//ignore
|
//ignore
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ package de.steamwar.core;
|
|||||||
|
|
||||||
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
|
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
|
||||||
import com.sk89q.worldedit.extent.clipboard.Clipboard;
|
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.Region;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@@ -39,6 +40,7 @@ public interface WorldEditWrapper {
|
|||||||
Vector getOrigin(Clipboard clipboard);
|
Vector getOrigin(Clipboard clipboard);
|
||||||
Vector getMinimum(Region region);
|
Vector getMinimum(Region region);
|
||||||
Vector getMaximum(Region region);
|
Vector getMaximum(Region region);
|
||||||
|
Vector applyTransform(Vector vector, Transform transform);
|
||||||
|
|
||||||
static WorldEditPlugin getWorldEditPlugin() {
|
static WorldEditPlugin getWorldEditPlugin() {
|
||||||
return (WorldEditPlugin) Bukkit.getPluginManager().getPlugin("WorldEdit");
|
return (WorldEditPlugin) Bukkit.getPluginManager().getPlugin("WorldEdit");
|
||||||
|
|||||||
Reference in New Issue
Block a user