diff --git a/src/main/java/com/volmit/iris/manager/command/CommandIrisJigsaw.java b/src/main/java/com/volmit/iris/manager/command/CommandIrisJigsaw.java index e53b26474..87d0f45d1 100644 --- a/src/main/java/com/volmit/iris/manager/command/CommandIrisJigsaw.java +++ b/src/main/java/com/volmit/iris/manager/command/CommandIrisJigsaw.java @@ -18,6 +18,9 @@ public class CommandIrisJigsaw extends MortarCommand @Command private CommandIrisJigsawSave save; + @Command + private CommandIrisJigsawPlace place; + public CommandIrisJigsaw() { super("jigsaw", "jig", "jsw"); diff --git a/src/main/java/com/volmit/iris/manager/command/CommandIrisJigsawPlace.java b/src/main/java/com/volmit/iris/manager/command/CommandIrisJigsawPlace.java index e54314ed1..091e9bbb1 100644 --- a/src/main/java/com/volmit/iris/manager/command/CommandIrisJigsawPlace.java +++ b/src/main/java/com/volmit/iris/manager/command/CommandIrisJigsawPlace.java @@ -3,22 +3,19 @@ package com.volmit.iris.manager.command; import com.volmit.iris.Iris; import com.volmit.iris.IrisSettings; import com.volmit.iris.manager.IrisDataManager; -import com.volmit.iris.manager.edit.JigsawEditor; -import com.volmit.iris.object.IrisJigsawPiece; -import com.volmit.iris.util.KList; -import com.volmit.iris.util.MortarCommand; -import com.volmit.iris.util.MortarSender; +import com.volmit.iris.object.IrisJigsawStructure; +import com.volmit.iris.object.IrisPosition; +import com.volmit.iris.scaffold.jigsaw.PlannedStructure; +import com.volmit.iris.util.*; -import java.io.File; - -public class CommandIrisJigsawEdit extends MortarCommand +public class CommandIrisJigsawPlace extends MortarCommand { - public CommandIrisJigsawEdit() + public CommandIrisJigsawPlace() { - super("edit", "e", "*"); + super("place", "paste"); requiresPermission(Iris.perm); setCategory("Jigsaw"); - setDescription("Create a new jigsaw piece"); + setDescription("Place a jigsaw structure"); } @Override @@ -41,13 +38,14 @@ public class CommandIrisJigsawEdit extends MortarCommand return true; } + IrisJigsawStructure str = IrisDataManager.loadAnyJigsawStructure(args[0]); - IrisJigsawPiece piece = IrisDataManager.loadAnyJigsawPiece(args[0]); - - if(piece != null) + if(str != null) { - File dest = piece.getLoadFile(); - new JigsawEditor(sender.player(), piece, IrisDataManager.loadAnyObject(piece.getObject()), dest); + PrecisionStopwatch p = PrecisionStopwatch.start(); + PlannedStructure ps = new PlannedStructure(str, new IrisPosition(sender.player().getLocation()), new RNG()); + sender.sendMessage("Generated " + ps.getPieces().size() + " pieces in " + Form.duration(p.getMilliseconds(), 2)); + ps.place(sender.player().getWorld()); } return true; diff --git a/src/main/java/com/volmit/iris/manager/edit/JigsawEditor.java b/src/main/java/com/volmit/iris/manager/edit/JigsawEditor.java index ba22fde48..9db523501 100644 --- a/src/main/java/com/volmit/iris/manager/edit/JigsawEditor.java +++ b/src/main/java/com/volmit/iris/manager/edit/JigsawEditor.java @@ -73,7 +73,7 @@ public class JigsawEditor implements Listener { { for(IrisPosition i : falling.k()) { - Location at = origin.clone().add(new Vector(i.getX()+1, i.getY()+1, i.getZ()+1)).getBlock().getLocation(); + Location at = toLocation(i); if(at.equals(target)) { @@ -84,17 +84,27 @@ public class JigsawEditor implements Listener { } } + public Location toLocation(IrisPosition i) + { + return origin.clone() + .add(new Vector(i.getX(), i.getY(), i.getZ())) + .add(object.getCenter()) + .getBlock() + .getLocation(); + } + public IrisPosition toPosition(Location l) { - Vector v = l.clone().subtract(origin.clone()).subtract(object.getCenter()).toVector(); - - return new IrisPosition(v.getBlockX()+1, v.getBlockY()+1, v.getBlockZ()+1); + return new IrisPosition(l.clone().getBlock().getLocation() + .subtract(origin.clone()) + .subtract(object.getCenter()) + .add(1,1,1) + .toVector()); } @EventHandler public void on(PlayerInteractEvent e) { - e.getPlayer().sendMessage("Center is " + object.getCenter().toString()); if(e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) { if(e.getClickedBlock() != null && cuboid.contains(e.getClickedBlock().getLocation()) && e.getPlayer().equals(player)) @@ -170,7 +180,7 @@ public class JigsawEditor implements Listener { for(IrisJigsawPieceConnector i : piece.getConnectors()) { IrisPosition pos = i.getPosition(); - Location at = origin.clone().add(object.getCenter()).add(new Vector(pos.getX(), pos.getY(), pos.getZ())); + Location at = toLocation(pos); Vector dir = i.getDirection().toVector().clone();