diff --git a/pom.xml b/pom.xml
index b0ba102eb..2c40092d6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -152,6 +152,10 @@
CodeMC
https://repo.codemc.org/repository/maven-public
+
+ WorldEdit
+ https://maven.enginehub.org/repo/
+
@@ -186,6 +190,13 @@
1.14.4
provided
+
+
+ com.sk89q.worldedit
+ worldedit-bukkit
+ 7.2.0-SNAPSHOT
+ provided
+
org.bstats
diff --git a/src/main/java/com/volmit/iris/GeneratedChunk.java b/src/main/java/com/volmit/iris/GeneratedChunk.java
deleted file mode 100644
index 0b5f4a06e..000000000
--- a/src/main/java/com/volmit/iris/GeneratedChunk.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.volmit.iris;
-
-import org.bukkit.generator.ChunkGenerator.BiomeGrid;
-import org.bukkit.generator.ChunkGenerator.ChunkData;
-
-import com.volmit.iris.util.ChunkPosition;
-
-import lombok.Data;
-
-@Data
-public class GeneratedChunk
-{
- private ChunkPosition pos;
- private ChunkData data;
- private BiomeGrid grid;
-
- public GeneratedChunk(ChunkPosition pos)
- {
- this.pos = pos;
- }
-}
diff --git a/src/main/java/com/volmit/iris/Iris.java b/src/main/java/com/volmit/iris/Iris.java
index bd2b034f8..a1ce47b2a 100644
--- a/src/main/java/com/volmit/iris/Iris.java
+++ b/src/main/java/com/volmit/iris/Iris.java
@@ -23,6 +23,13 @@ import com.volmit.iris.gen.provisions.ProvisionBukkit;
import com.volmit.iris.gen.scaffold.IrisGenConfiguration;
import com.volmit.iris.gen.scaffold.TerrainTarget;
import com.volmit.iris.link.MultiverseCoreLink;
+import com.volmit.iris.manager.EditManager;
+import com.volmit.iris.manager.IrisBoardManager;
+import com.volmit.iris.manager.IrisDataManager;
+import com.volmit.iris.manager.IrisHotloadManager;
+import com.volmit.iris.manager.ProjectManager;
+import com.volmit.iris.manager.StructureManager;
+import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.C;
import com.volmit.iris.util.Form;
import com.volmit.iris.util.GroupedExecutor;
@@ -44,6 +51,7 @@ public class Iris extends MortarPlugin
public static IrisHotloadManager hotloader;
public static WandManager wand;
public static StructureManager struct;
+ public static EditManager edit;
public static IrisBoardManager board;
public static String nmsTag = findNMSTag();
public static MultiverseCoreLink linkMultiverseCore;
@@ -141,6 +149,7 @@ public class Iris extends MortarPlugin
proj = new ProjectManager();
board = new IrisBoardManager();
linkMultiverseCore = new MultiverseCoreLink();
+ edit = new EditManager();
J.a(() -> IO.delete(getTemp()));
J.a(() -> bstats());
J.s(this::splash, 20);
diff --git a/src/main/java/com/volmit/iris/command/CommandIrisCreate.java b/src/main/java/com/volmit/iris/command/CommandIrisCreate.java
index 647257aee..9ced8230c 100644
--- a/src/main/java/com/volmit/iris/command/CommandIrisCreate.java
+++ b/src/main/java/com/volmit/iris/command/CommandIrisCreate.java
@@ -11,13 +11,13 @@ import org.zeroturnaround.zip.ZipUtil;
import org.zeroturnaround.zip.commons.FileUtils;
import com.volmit.iris.Iris;
-import com.volmit.iris.IrisDataManager;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.gen.IrisTerrainProvider;
import com.volmit.iris.gen.nms.NMSCreator;
import com.volmit.iris.gen.provisions.ProvisionBukkit;
import com.volmit.iris.gen.scaffold.IrisGenConfiguration;
import com.volmit.iris.gen.scaffold.TerrainTarget;
+import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.util.Form;
import com.volmit.iris.util.IO;
diff --git a/src/main/java/com/volmit/iris/command/CommandIrisMetrics.java b/src/main/java/com/volmit/iris/command/CommandIrisMetrics.java
index d74dd0055..16d1cfd36 100644
--- a/src/main/java/com/volmit/iris/command/CommandIrisMetrics.java
+++ b/src/main/java/com/volmit/iris/command/CommandIrisMetrics.java
@@ -4,9 +4,9 @@ import org.bukkit.World;
import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
-import com.volmit.iris.IrisMetrics;
import com.volmit.iris.gen.IrisTerrainProvider;
import com.volmit.iris.gen.provisions.ProvisionBukkit;
+import com.volmit.iris.gen.scaffold.IrisMetrics;
import com.volmit.iris.util.C;
import com.volmit.iris.util.Form;
import com.volmit.iris.util.MortarCommand;
diff --git a/src/main/java/com/volmit/iris/command/CommandIrisObjectContract.java b/src/main/java/com/volmit/iris/command/CommandIrisObjectContract.java
index 4c111dff2..1853216de 100644
--- a/src/main/java/com/volmit/iris/command/CommandIrisObjectContract.java
+++ b/src/main/java/com/volmit/iris/command/CommandIrisObjectContract.java
@@ -6,7 +6,7 @@ import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
-import com.volmit.iris.WandManager;
+import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.Cuboid;
import com.volmit.iris.util.Direction;
import com.volmit.iris.util.MortarCommand;
diff --git a/src/main/java/com/volmit/iris/command/CommandIrisObjectExpand.java b/src/main/java/com/volmit/iris/command/CommandIrisObjectExpand.java
index b48e78e68..fb019be08 100644
--- a/src/main/java/com/volmit/iris/command/CommandIrisObjectExpand.java
+++ b/src/main/java/com/volmit/iris/command/CommandIrisObjectExpand.java
@@ -6,7 +6,7 @@ import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
-import com.volmit.iris.WandManager;
+import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.Cuboid;
import com.volmit.iris.util.Direction;
import com.volmit.iris.util.MortarCommand;
diff --git a/src/main/java/com/volmit/iris/command/CommandIrisObjectP1.java b/src/main/java/com/volmit/iris/command/CommandIrisObjectP1.java
index fccb852f6..1d76ba883 100644
--- a/src/main/java/com/volmit/iris/command/CommandIrisObjectP1.java
+++ b/src/main/java/com/volmit/iris/command/CommandIrisObjectP1.java
@@ -9,7 +9,7 @@ import org.bukkit.inventory.ItemStack;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
-import com.volmit.iris.WandManager;
+import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
diff --git a/src/main/java/com/volmit/iris/command/CommandIrisObjectP2.java b/src/main/java/com/volmit/iris/command/CommandIrisObjectP2.java
index 6592a58e6..5d01a6659 100644
--- a/src/main/java/com/volmit/iris/command/CommandIrisObjectP2.java
+++ b/src/main/java/com/volmit/iris/command/CommandIrisObjectP2.java
@@ -9,7 +9,7 @@ import org.bukkit.inventory.ItemStack;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
-import com.volmit.iris.WandManager;
+import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
diff --git a/src/main/java/com/volmit/iris/command/CommandIrisObjectPaste.java b/src/main/java/com/volmit/iris/command/CommandIrisObjectPaste.java
index da54bef7a..19dfe47af 100644
--- a/src/main/java/com/volmit/iris/command/CommandIrisObjectPaste.java
+++ b/src/main/java/com/volmit/iris/command/CommandIrisObjectPaste.java
@@ -11,7 +11,7 @@ import org.bukkit.inventory.ItemStack;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
-import com.volmit.iris.WandManager;
+import com.volmit.iris.manager.WandManager;
import com.volmit.iris.object.IrisObject;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
diff --git a/src/main/java/com/volmit/iris/command/CommandIrisObjectSave.java b/src/main/java/com/volmit/iris/command/CommandIrisObjectSave.java
index a28a2879c..61a9be426 100644
--- a/src/main/java/com/volmit/iris/command/CommandIrisObjectSave.java
+++ b/src/main/java/com/volmit/iris/command/CommandIrisObjectSave.java
@@ -8,7 +8,7 @@ import org.bukkit.inventory.ItemStack;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
-import com.volmit.iris.WandManager;
+import com.volmit.iris.manager.WandManager;
import com.volmit.iris.object.IrisObject;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
diff --git a/src/main/java/com/volmit/iris/command/CommandIrisObjectShift.java b/src/main/java/com/volmit/iris/command/CommandIrisObjectShift.java
index 7ddb64262..f8336f0da 100644
--- a/src/main/java/com/volmit/iris/command/CommandIrisObjectShift.java
+++ b/src/main/java/com/volmit/iris/command/CommandIrisObjectShift.java
@@ -6,7 +6,7 @@ import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
-import com.volmit.iris.WandManager;
+import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.Cuboid;
import com.volmit.iris.util.Direction;
import com.volmit.iris.util.MortarCommand;
diff --git a/src/main/java/com/volmit/iris/command/CommandIrisObjectWand.java b/src/main/java/com/volmit/iris/command/CommandIrisObjectWand.java
index 4cb208d8b..311d171a1 100644
--- a/src/main/java/com/volmit/iris/command/CommandIrisObjectWand.java
+++ b/src/main/java/com/volmit/iris/command/CommandIrisObjectWand.java
@@ -4,7 +4,7 @@ import org.bukkit.Sound;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
-import com.volmit.iris.WandManager;
+import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
diff --git a/src/main/java/com/volmit/iris/command/CommandIrisObjectXAY.java b/src/main/java/com/volmit/iris/command/CommandIrisObjectXAY.java
index ba95b21bb..832e9d072 100644
--- a/src/main/java/com/volmit/iris/command/CommandIrisObjectXAY.java
+++ b/src/main/java/com/volmit/iris/command/CommandIrisObjectXAY.java
@@ -8,7 +8,7 @@ import org.bukkit.util.Vector;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
-import com.volmit.iris.WandManager;
+import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.Cuboid;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
diff --git a/src/main/java/com/volmit/iris/command/CommandIrisObjectXPY.java b/src/main/java/com/volmit/iris/command/CommandIrisObjectXPY.java
index b759c6d6a..53b470a64 100644
--- a/src/main/java/com/volmit/iris/command/CommandIrisObjectXPY.java
+++ b/src/main/java/com/volmit/iris/command/CommandIrisObjectXPY.java
@@ -8,7 +8,7 @@ import org.bukkit.util.Vector;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
-import com.volmit.iris.WandManager;
+import com.volmit.iris.manager.WandManager;
import com.volmit.iris.util.Cuboid;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
diff --git a/src/main/java/com/volmit/iris/command/CommandIrisStructureClose.java b/src/main/java/com/volmit/iris/command/CommandIrisStructureClose.java
index 74404c1ec..37701e90c 100644
--- a/src/main/java/com/volmit/iris/command/CommandIrisStructureClose.java
+++ b/src/main/java/com/volmit/iris/command/CommandIrisStructureClose.java
@@ -4,9 +4,9 @@ import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
+import com.volmit.iris.structure.StructureTemplate;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
-import com.volmit.iris.util.StructureTemplate;
public class CommandIrisStructureClose extends MortarCommand
{
diff --git a/src/main/java/com/volmit/iris/command/CommandIrisStructureCreate.java b/src/main/java/com/volmit/iris/command/CommandIrisStructureCreate.java
index 5797ce6c8..181edf2a2 100644
--- a/src/main/java/com/volmit/iris/command/CommandIrisStructureCreate.java
+++ b/src/main/java/com/volmit/iris/command/CommandIrisStructureCreate.java
@@ -4,9 +4,9 @@ import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
+import com.volmit.iris.structure.StructureTemplate;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
-import com.volmit.iris.util.StructureTemplate;
public class CommandIrisStructureCreate extends MortarCommand
{
diff --git a/src/main/java/com/volmit/iris/command/CommandIrisStructureExpand.java b/src/main/java/com/volmit/iris/command/CommandIrisStructureExpand.java
index 109514bbe..44e6e0451 100644
--- a/src/main/java/com/volmit/iris/command/CommandIrisStructureExpand.java
+++ b/src/main/java/com/volmit/iris/command/CommandIrisStructureExpand.java
@@ -4,9 +4,9 @@ import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
+import com.volmit.iris.structure.StructureTemplate;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
-import com.volmit.iris.util.StructureTemplate;
public class CommandIrisStructureExpand extends MortarCommand
{
diff --git a/src/main/java/com/volmit/iris/command/CommandIrisStructureMore.java b/src/main/java/com/volmit/iris/command/CommandIrisStructureMore.java
index 9a18452cd..d46145467 100644
--- a/src/main/java/com/volmit/iris/command/CommandIrisStructureMore.java
+++ b/src/main/java/com/volmit/iris/command/CommandIrisStructureMore.java
@@ -4,9 +4,9 @@ import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
+import com.volmit.iris.structure.StructureTemplate;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
-import com.volmit.iris.util.StructureTemplate;
public class CommandIrisStructureMore extends MortarCommand
{
diff --git a/src/main/java/com/volmit/iris/command/CommandIrisStructureOpen.java b/src/main/java/com/volmit/iris/command/CommandIrisStructureOpen.java
index 008584d6c..a585a26fa 100644
--- a/src/main/java/com/volmit/iris/command/CommandIrisStructureOpen.java
+++ b/src/main/java/com/volmit/iris/command/CommandIrisStructureOpen.java
@@ -5,9 +5,9 @@ import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.object.IrisStructure;
+import com.volmit.iris.structure.StructureTemplate;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
-import com.volmit.iris.util.StructureTemplate;
public class CommandIrisStructureOpen extends MortarCommand
{
diff --git a/src/main/java/com/volmit/iris/command/CommandIrisStructureSave.java b/src/main/java/com/volmit/iris/command/CommandIrisStructureSave.java
index ace333495..a4e928d1d 100644
--- a/src/main/java/com/volmit/iris/command/CommandIrisStructureSave.java
+++ b/src/main/java/com/volmit/iris/command/CommandIrisStructureSave.java
@@ -4,9 +4,9 @@ import org.bukkit.entity.Player;
import com.volmit.iris.Iris;
import com.volmit.iris.IrisSettings;
+import com.volmit.iris.structure.StructureTemplate;
import com.volmit.iris.util.MortarCommand;
import com.volmit.iris.util.MortarSender;
-import com.volmit.iris.util.StructureTemplate;
public class CommandIrisStructureSave extends MortarCommand
{
diff --git a/src/main/java/com/volmit/iris/edit/BlockEditor.java b/src/main/java/com/volmit/iris/edit/BlockEditor.java
new file mode 100644
index 000000000..7e809efc9
--- /dev/null
+++ b/src/main/java/com/volmit/iris/edit/BlockEditor.java
@@ -0,0 +1,17 @@
+package com.volmit.iris.edit;
+
+import java.io.Closeable;
+
+import org.bukkit.block.data.BlockData;
+
+public interface BlockEditor extends Closeable
+{
+ public long last();
+
+ public void set(int x, int y, int z, BlockData d);
+
+ public BlockData get(int x, int y, int z);
+
+ @Override
+ public void close();
+}
diff --git a/src/main/java/com/volmit/iris/edit/BukkitBlockEditor.java b/src/main/java/com/volmit/iris/edit/BukkitBlockEditor.java
new file mode 100644
index 000000000..b4df1f3c1
--- /dev/null
+++ b/src/main/java/com/volmit/iris/edit/BukkitBlockEditor.java
@@ -0,0 +1,40 @@
+package com.volmit.iris.edit;
+
+import org.bukkit.World;
+import org.bukkit.block.data.BlockData;
+
+import com.volmit.iris.util.M;
+
+public class BukkitBlockEditor implements BlockEditor
+{
+ private final World world;
+
+ public BukkitBlockEditor(World world)
+ {
+ this.world = world;
+ }
+
+ @Override
+ public void set(int x, int y, int z, BlockData d)
+ {
+ world.getBlockAt(x, y, z).setBlockData(d, false);
+ }
+
+ @Override
+ public BlockData get(int x, int y, int z)
+ {
+ return world.getBlockAt(x, y, z).getBlockData();
+ }
+
+ @Override
+ public void close()
+ {
+
+ }
+
+ @Override
+ public long last()
+ {
+ return M.ms();
+ }
+}
diff --git a/src/main/java/com/volmit/iris/edit/WEBlockEditor.java b/src/main/java/com/volmit/iris/edit/WEBlockEditor.java
new file mode 100644
index 000000000..274480d03
--- /dev/null
+++ b/src/main/java/com/volmit/iris/edit/WEBlockEditor.java
@@ -0,0 +1,51 @@
+package com.volmit.iris.edit;
+
+import org.bukkit.World;
+import org.bukkit.block.data.BlockData;
+
+import com.sk89q.worldedit.EditSession;
+import com.sk89q.worldedit.WorldEdit;
+import com.sk89q.worldedit.bukkit.BukkitAdapter;
+import com.sk89q.worldedit.math.BlockVector3;
+import com.volmit.iris.util.M;
+
+public class WEBlockEditor implements BlockEditor
+{
+ private final World world;
+ private final EditSession es;
+ private long last;
+
+ public WEBlockEditor(World world)
+ {
+ last = M.ms();
+ this.world = world;
+ es = WorldEdit.getInstance().newEditSessionBuilder().world(BukkitAdapter.adapt(world)).build();
+ }
+
+ @Override
+ public void set(int x, int y, int z, BlockData d)
+ {
+ last = M.ms();
+ es.rawSetBlock(BlockVector3.at(x, y, z), BukkitAdapter.adapt(d));
+ world.getBlockAt(x, y, z).setBlockData(d, false);
+ }
+
+ @Override
+ public BlockData get(int x, int y, int z)
+ {
+ return world.getBlockAt(x, y, z).getBlockData();
+ }
+
+ @Override
+ public void close()
+ {
+ es.close();
+ return;
+ }
+
+ @Override
+ public long last()
+ {
+ return last;
+ }
+}
diff --git a/src/main/java/com/volmit/iris/gen/ContextualTerrainProvider.java b/src/main/java/com/volmit/iris/gen/ContextualTerrainProvider.java
index 02e0e56f1..cc16e36a2 100644
--- a/src/main/java/com/volmit/iris/gen/ContextualTerrainProvider.java
+++ b/src/main/java/com/volmit/iris/gen/ContextualTerrainProvider.java
@@ -22,14 +22,14 @@ import org.bukkit.event.world.ChunkUnloadEvent;
import org.bukkit.event.world.WorldUnloadEvent;
import com.volmit.iris.Iris;
-import com.volmit.iris.IrisContext;
-import com.volmit.iris.IrisDataManager;
-import com.volmit.iris.IrisMetrics;
import com.volmit.iris.gen.atomics.AtomicCache;
import com.volmit.iris.gen.atomics.AtomicMulticache;
+import com.volmit.iris.gen.scaffold.IrisContext;
+import com.volmit.iris.gen.scaffold.IrisMetrics;
import com.volmit.iris.gen.scaffold.TerrainChunk;
import com.volmit.iris.gen.scaffold.TerrainProvider;
import com.volmit.iris.gen.scaffold.TerrainTarget;
+import com.volmit.iris.manager.IrisDataManager;
import com.volmit.iris.noise.CNG;
import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.object.IrisDimension;
diff --git a/src/main/java/com/volmit/iris/gen/IrisTerrainProvider.java b/src/main/java/com/volmit/iris/gen/IrisTerrainProvider.java
index 350c862a2..3fe2c0afc 100644
--- a/src/main/java/com/volmit/iris/gen/IrisTerrainProvider.java
+++ b/src/main/java/com/volmit/iris/gen/IrisTerrainProvider.java
@@ -14,9 +14,9 @@ import org.bukkit.event.entity.EntitySpawnEvent;
import org.bukkit.inventory.ItemStack;
import com.volmit.iris.Iris;
-import com.volmit.iris.IrisContext;
import com.volmit.iris.IrisSettings;
import com.volmit.iris.gen.atomics.AtomicRegionData;
+import com.volmit.iris.gen.scaffold.IrisContext;
import com.volmit.iris.gen.scaffold.IrisGenConfiguration;
import com.volmit.iris.gen.scaffold.TerrainChunk;
import com.volmit.iris.gen.scaffold.TerrainTarget;
diff --git a/src/main/java/com/volmit/iris/IrisContext.java b/src/main/java/com/volmit/iris/gen/scaffold/IrisContext.java
similarity index 90%
rename from src/main/java/com/volmit/iris/IrisContext.java
rename to src/main/java/com/volmit/iris/gen/scaffold/IrisContext.java
index 719450a68..7e4ce81b1 100644
--- a/src/main/java/com/volmit/iris/IrisContext.java
+++ b/src/main/java/com/volmit/iris/gen/scaffold/IrisContext.java
@@ -1,6 +1,5 @@
-package com.volmit.iris;
+package com.volmit.iris.gen.scaffold;
-import com.volmit.iris.gen.scaffold.TerrainTarget;
import com.volmit.iris.object.IrisBiome;
import com.volmit.iris.object.IrisDimension;
import com.volmit.iris.object.IrisRegion;
diff --git a/src/main/java/com/volmit/iris/IrisMetrics.java b/src/main/java/com/volmit/iris/gen/scaffold/IrisMetrics.java
similarity index 92%
rename from src/main/java/com/volmit/iris/IrisMetrics.java
rename to src/main/java/com/volmit/iris/gen/scaffold/IrisMetrics.java
index fa1b8719f..6ed900c69 100644
--- a/src/main/java/com/volmit/iris/IrisMetrics.java
+++ b/src/main/java/com/volmit/iris/gen/scaffold/IrisMetrics.java
@@ -1,5 +1,6 @@
-package com.volmit.iris;
+package com.volmit.iris.gen.scaffold;
+import com.volmit.iris.Iris;
import com.volmit.iris.util.RollingSequence;
import lombok.Data;
diff --git a/src/main/java/com/volmit/iris/manager/EditManager.java b/src/main/java/com/volmit/iris/manager/EditManager.java
new file mode 100644
index 000000000..89d1f79a0
--- /dev/null
+++ b/src/main/java/com/volmit/iris/manager/EditManager.java
@@ -0,0 +1,81 @@
+package com.volmit.iris.manager;
+
+import org.bukkit.Bukkit;
+import org.bukkit.World;
+import org.bukkit.block.data.BlockData;
+import org.bukkit.event.EventHandler;
+import org.bukkit.event.Listener;
+import org.bukkit.event.world.WorldUnloadEvent;
+
+import com.volmit.iris.Iris;
+import com.volmit.iris.edit.BlockEditor;
+import com.volmit.iris.edit.BukkitBlockEditor;
+import com.volmit.iris.edit.WEBlockEditor;
+import com.volmit.iris.util.KMap;
+import com.volmit.iris.util.M;
+
+public class EditManager implements Listener
+{
+ private KMap editors;
+
+ public EditManager()
+ {
+ this.editors = new KMap<>();
+ Iris.instance.registerListener(this);
+ Bukkit.getScheduler().scheduleSyncRepeatingTask(Iris.instance, this::update, 0, 20);
+ }
+
+ public BlockData get(World world, int x, int y, int z)
+ {
+ return open(world).get(x, y, z);
+ }
+
+ public void set(World world, int x, int y, int z, BlockData d)
+ {
+ open(world).set(x, y, z, d);
+ }
+
+ @EventHandler
+ public void on(WorldUnloadEvent e)
+ {
+ if(editors.containsKey(e.getWorld()))
+ {
+ editors.remove(e.getWorld()).close();
+ }
+ }
+
+ public void update()
+ {
+ for(World i : editors.k())
+ {
+ if(M.ms() - editors.get(i).last() > 1000)
+ {
+ editors.remove(i).close();
+ }
+ }
+ }
+
+ public BlockEditor open(World world)
+ {
+ if(editors.containsKey(world))
+ {
+ return editors.get(world);
+ }
+
+ BlockEditor e = null;
+
+ if(Bukkit.getPluginManager().isPluginEnabled("WorldEdit"))
+ {
+ e = new WEBlockEditor(world);
+ }
+
+ else
+ {
+ e = new BukkitBlockEditor(world);
+ }
+
+ editors.put(world, e);
+
+ return e;
+ }
+}
diff --git a/src/main/java/com/volmit/iris/IrisBoardManager.java b/src/main/java/com/volmit/iris/manager/IrisBoardManager.java
similarity index 98%
rename from src/main/java/com/volmit/iris/IrisBoardManager.java
rename to src/main/java/com/volmit/iris/manager/IrisBoardManager.java
index 4e64244b9..5a0075238 100644
--- a/src/main/java/com/volmit/iris/IrisBoardManager.java
+++ b/src/main/java/com/volmit/iris/manager/IrisBoardManager.java
@@ -1,4 +1,4 @@
-package com.volmit.iris;
+package com.volmit.iris.manager;
import java.util.List;
@@ -8,6 +8,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerChangedWorldEvent;
+import com.volmit.iris.Iris;
import com.volmit.iris.gen.IrisTerrainProvider;
import com.volmit.iris.gen.provisions.ProvisionBukkit;
import com.volmit.iris.noise.CNG;
diff --git a/src/main/java/com/volmit/iris/IrisDataManager.java b/src/main/java/com/volmit/iris/manager/IrisDataManager.java
similarity index 99%
rename from src/main/java/com/volmit/iris/IrisDataManager.java
rename to src/main/java/com/volmit/iris/manager/IrisDataManager.java
index 6f538229d..e6bb968b7 100644
--- a/src/main/java/com/volmit/iris/IrisDataManager.java
+++ b/src/main/java/com/volmit/iris/manager/IrisDataManager.java
@@ -1,4 +1,4 @@
-package com.volmit.iris;
+package com.volmit.iris.manager;
import java.io.File;
diff --git a/src/main/java/com/volmit/iris/IrisHotloadManager.java b/src/main/java/com/volmit/iris/manager/IrisHotloadManager.java
similarity index 94%
rename from src/main/java/com/volmit/iris/IrisHotloadManager.java
rename to src/main/java/com/volmit/iris/manager/IrisHotloadManager.java
index baa2a0311..0b81e6033 100644
--- a/src/main/java/com/volmit/iris/IrisHotloadManager.java
+++ b/src/main/java/com/volmit/iris/manager/IrisHotloadManager.java
@@ -1,10 +1,13 @@
-package com.volmit.iris;
+package com.volmit.iris.manager;
import java.io.File;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
+import com.volmit.iris.Iris;
+import com.volmit.iris.IrisSettings;
+import com.volmit.iris.gen.scaffold.IrisContext;
import com.volmit.iris.util.ChronoLatch;
import com.volmit.iris.util.FolderWatcher;
import com.volmit.iris.util.J;
diff --git a/src/main/java/com/volmit/iris/ProjectManager.java b/src/main/java/com/volmit/iris/manager/ProjectManager.java
similarity index 99%
rename from src/main/java/com/volmit/iris/ProjectManager.java
rename to src/main/java/com/volmit/iris/manager/ProjectManager.java
index 8034dfc91..972b5d7ca 100644
--- a/src/main/java/com/volmit/iris/ProjectManager.java
+++ b/src/main/java/com/volmit/iris/manager/ProjectManager.java
@@ -1,4 +1,4 @@
-package com.volmit.iris;
+package com.volmit.iris.manager;
import java.awt.Desktop;
import java.awt.GraphicsEnvironment;
@@ -26,6 +26,8 @@ import org.zeroturnaround.zip.commons.FileUtils;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
+import com.volmit.iris.Iris;
+import com.volmit.iris.IrisSettings;
import com.volmit.iris.gen.IrisTerrainProvider;
import com.volmit.iris.gen.nms.NMSCreator;
import com.volmit.iris.gen.provisions.ProvisionBukkit;
diff --git a/src/main/java/com/volmit/iris/StructureManager.java b/src/main/java/com/volmit/iris/manager/StructureManager.java
similarity index 89%
rename from src/main/java/com/volmit/iris/StructureManager.java
rename to src/main/java/com/volmit/iris/manager/StructureManager.java
index 3fb14351b..b4949d6be 100644
--- a/src/main/java/com/volmit/iris/StructureManager.java
+++ b/src/main/java/com/volmit/iris/manager/StructureManager.java
@@ -1,9 +1,9 @@
-package com.volmit.iris;
+package com.volmit.iris.manager;
import org.bukkit.entity.Player;
+import com.volmit.iris.structure.StructureTemplate;
import com.volmit.iris.util.KList;
-import com.volmit.iris.util.StructureTemplate;
public class StructureManager
{
diff --git a/src/main/java/com/volmit/iris/WandManager.java b/src/main/java/com/volmit/iris/manager/WandManager.java
similarity index 99%
rename from src/main/java/com/volmit/iris/WandManager.java
rename to src/main/java/com/volmit/iris/manager/WandManager.java
index 9e3c345ab..0747aa06c 100644
--- a/src/main/java/com/volmit/iris/WandManager.java
+++ b/src/main/java/com/volmit/iris/manager/WandManager.java
@@ -1,4 +1,4 @@
-package com.volmit.iris;
+package com.volmit.iris.manager;
import java.awt.Color;
import java.util.Iterator;
@@ -22,6 +22,7 @@ import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.util.BlockVector;
import org.bukkit.util.Vector;
+import com.volmit.iris.Iris;
import com.volmit.iris.object.IrisObject;
import com.volmit.iris.util.C;
import com.volmit.iris.util.Cuboid;
diff --git a/src/main/java/com/volmit/iris/util/StructureTemplate.java b/src/main/java/com/volmit/iris/structure/StructureTemplate.java
similarity index 95%
rename from src/main/java/com/volmit/iris/util/StructureTemplate.java
rename to src/main/java/com/volmit/iris/structure/StructureTemplate.java
index 0c2c56dd5..f4d23005b 100644
--- a/src/main/java/com/volmit/iris/util/StructureTemplate.java
+++ b/src/main/java/com/volmit/iris/structure/StructureTemplate.java
@@ -1,4 +1,4 @@
-package com.volmit.iris.util;
+package com.volmit.iris.structure;
import java.io.File;
import java.util.Iterator;
@@ -38,6 +38,23 @@ import com.volmit.iris.object.IrisStructureTile;
import com.volmit.iris.object.NoiseStyle;
import com.volmit.iris.object.StructureTileCondition;
import com.volmit.iris.object.TileResult;
+import com.volmit.iris.util.B;
+import com.volmit.iris.util.C;
+import com.volmit.iris.util.ChronoLatch;
+import com.volmit.iris.util.Cuboid;
+import com.volmit.iris.util.Form;
+import com.volmit.iris.util.IO;
+import com.volmit.iris.util.IObjectPlacer;
+import com.volmit.iris.util.J;
+import com.volmit.iris.util.JSONObject;
+import com.volmit.iris.util.KMap;
+import com.volmit.iris.util.MaterialBlock;
+import com.volmit.iris.util.RNG;
+import com.volmit.iris.util.UIElement;
+import com.volmit.iris.util.UIStaticDecorator;
+import com.volmit.iris.util.UIWindow;
+import com.volmit.iris.util.Window;
+import com.volmit.iris.util.WindowResolution;
import lombok.Data;
@@ -64,6 +81,7 @@ public class StructureTemplate implements Listener, IObjectPlacer
private KMap updates = new KMap<>();
private File folder;
private CNG variants;
+ private boolean quiet = true;
private KMap forceVariant = new KMap<>();
public StructureTemplate(String name, String dimension, Player worker, Location c, int size, int w, int h, boolean use3d)
@@ -74,7 +92,7 @@ public class StructureTemplate implements Listener, IObjectPlacer
folder = Iris.instance.getDataFolder("packs", dimension);
gLatch = new ChronoLatch(250);
focus = center;
- dirtyLatch = new ChronoLatch(2350);
+ dirtyLatch = new ChronoLatch(250);
task = Bukkit.getScheduler().scheduleSyncRepeatingTask(Iris.instance, this::tick, 0, 0);
this.world = c.getWorld();
this.center = c.clone();
@@ -143,6 +161,8 @@ public class StructureTemplate implements Listener, IObjectPlacer
{
Iris.info("Loading existing structure");
+ // TODO load input properties
+
for(IrisStructureTile i : structure.getTiles().copy())
{
String realType = i.getForceObjects().get(1).getLoadKey().replaceAll("\\Q-1\\E", "");
@@ -354,11 +374,15 @@ public class StructureTemplate implements Listener, IObjectPlacer
if(dirtyLatch.couldFlip())
{
- int u = 3;
- while(updates.size() > 0 && u-- > 0)
- {
- runClosestTo();
- }
+ updateAll();
+ }
+ }
+
+ public void updateAll()
+ {
+ while(updates.size() > 0)
+ {
+ runClosestTo();
}
}
@@ -386,6 +410,11 @@ public class StructureTemplate implements Listener, IObjectPlacer
}
private void mod(Location l)
+ {
+ mod(l, true);
+ }
+
+ private void mod(Location l, boolean u)
{
if(!isWithinBounds(l))
{
@@ -538,8 +567,11 @@ public class StructureTemplate implements Listener, IObjectPlacer
}
r.getTile().getForceObjects().get(getVariant(c, r.getTile())).place(bottomCenter.getBlockX(), bottomCenter.getBlockY(), bottomCenter.getBlockZ(), this, r.getPlacement(), rng);
- center.getWorld().playSound(center, Sound.BLOCK_ANCIENT_DEBRIS_BREAK, 1f, 0.35f);
- center.getWorld().spawnParticle(Particle.FLASH, center.getX(), center.getY(), center.getZ(), 1);
+ if(!quiet)
+ {
+ center.getWorld().playSound(center, Sound.ENTITY_SHULKER_BULLET_HIT, 1f, 1.6f);
+ center.getWorld().spawnParticle(Particle.FLASH, center.getX(), center.getY(), center.getZ(), 1);
+ }
}
public boolean isWithinBounds(Location l)
@@ -774,7 +806,7 @@ public class StructureTemplate implements Listener, IObjectPlacer
return;
}
- world.getBlockAt(x, y, z).setBlockData(d, false);
+ Iris.edit.set(world, x, y, z, d);
}
@Override
@@ -1068,7 +1100,10 @@ public class StructureTemplate implements Listener, IObjectPlacer
@EventHandler
public void on(BlockBreakEvent e)
{
- Bukkit.getScheduler().scheduleSyncDelayedTask(Iris.instance, () -> mod(e.getBlock().getLocation()), 5);
+ quiet = false;
+ mod(e.getBlock().getLocation(), false);
+ updateAll();
+ quiet = true;
}
@EventHandler
@@ -1134,7 +1169,10 @@ public class StructureTemplate implements Listener, IObjectPlacer
@EventHandler
public void on(BlockPlaceEvent e)
{
- Bukkit.getScheduler().scheduleSyncDelayedTask(Iris.instance, () -> mod(e.getBlock().getLocation()), 5);
+ quiet = false;
+ mod(e.getBlock().getLocation(), false);
+ updateAll();
+ quiet = true;
}
public void more()