diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/JigsawPieceHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/JigsawPieceHandler.java
new file mode 100644
index 000000000..d30c4670a
--- /dev/null
+++ b/src/main/java/com/volmit/iris/util/decree/handlers/JigsawPieceHandler.java
@@ -0,0 +1,92 @@
+/*
+ * Iris is a World Generator for Minecraft Bukkit Servers
+ * Copyright (c) 2021 Arcane Arts (Volmit Software)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package com.volmit.iris.util.decree.handlers;
+
+import com.volmit.iris.Iris;
+import com.volmit.iris.core.loader.IrisData;
+import com.volmit.iris.engine.object.IrisJigsawPiece;
+import com.volmit.iris.engine.object.IrisJigsawStructure;
+import com.volmit.iris.util.collection.KList;
+import com.volmit.iris.util.collection.KMap;
+import com.volmit.iris.util.decree.DecreeParameterHandler;
+import com.volmit.iris.util.decree.exceptions.DecreeParsingException;
+import com.volmit.iris.util.decree.exceptions.DecreeWhichException;
+
+import java.io.File;
+import java.util.stream.Collectors;
+
+public class JigsawPieceHandler implements DecreeParameterHandler {
+ @Override
+ public KList getPossibilities() {
+ KMap p = new KMap<>();
+
+ //noinspection ConstantConditions
+ for (File i : Iris.instance.getDataFolder("packs").listFiles()) {
+ if (i.isDirectory()) {
+ IrisData data = IrisData.get(i);
+ for (IrisJigsawPiece j : data.getJigsawPieceLoader().loadAll(data.getJigsawPieceLoader().getPossibleKeys())) {
+ p.putIfAbsent(j.getLoadKey(), j);
+ }
+
+ data.close();
+ }
+ }
+
+ return p.v();
+ }
+
+ @Override
+ public String toString(IrisJigsawPiece dim) {
+ return dim.getLoadKey();
+ }
+
+ @Override
+ public IrisJigsawPiece parse(String in, boolean force) throws DecreeParsingException, DecreeWhichException {
+ if (in.equals("null")) {
+ return null;
+ }
+ KList options = getPossibilities(in);
+
+ if (options.isEmpty()) {
+ throw new DecreeParsingException("Unable to find Jigsaw Piece \"" + in + "\"");
+ } else if (options.size() > 1) {
+ if (force) {
+ try {
+ return options.stream().filter((i) -> toString(i).equalsIgnoreCase(in)).collect(Collectors.toList()).get(0);
+ } catch (Throwable e) {
+ throw new DecreeParsingException("Unable to filter which Jigsaw Piece \"" + in + "\"");
+ }
+ } else {
+ throw new DecreeWhichException();
+ }
+ }
+
+ return options.get(0);
+ }
+
+ @Override
+ public boolean supports(Class> type) {
+ return type.equals(IrisJigsawPiece.class);
+ }
+
+ @Override
+ public String getRandomDefault() {
+ return "jigsaw-piece";
+ }
+}
diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/JigsawStructureHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/JigsawStructureHandler.java
new file mode 100644
index 000000000..4a630ead4
--- /dev/null
+++ b/src/main/java/com/volmit/iris/util/decree/handlers/JigsawStructureHandler.java
@@ -0,0 +1,92 @@
+/*
+ * Iris is a World Generator for Minecraft Bukkit Servers
+ * Copyright (c) 2021 Arcane Arts (Volmit Software)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+package com.volmit.iris.util.decree.handlers;
+
+import com.volmit.iris.Iris;
+import com.volmit.iris.core.loader.IrisData;
+import com.volmit.iris.engine.object.IrisJigsawStructure;
+import com.volmit.iris.engine.object.IrisRegion;
+import com.volmit.iris.util.collection.KList;
+import com.volmit.iris.util.collection.KMap;
+import com.volmit.iris.util.decree.DecreeParameterHandler;
+import com.volmit.iris.util.decree.exceptions.DecreeParsingException;
+import com.volmit.iris.util.decree.exceptions.DecreeWhichException;
+
+import java.io.File;
+import java.util.stream.Collectors;
+
+public class JigsawStructureHandler implements DecreeParameterHandler {
+ @Override
+ public KList getPossibilities() {
+ KMap p = new KMap<>();
+
+ //noinspection ConstantConditions
+ for (File i : Iris.instance.getDataFolder("packs").listFiles()) {
+ if (i.isDirectory()) {
+ IrisData data = IrisData.get(i);
+ for (IrisJigsawStructure j : data.getJigsawStructureLoader().loadAll(data.getJigsawStructureLoader().getPossibleKeys())) {
+ p.putIfAbsent(j.getLoadKey(), j);
+ }
+
+ data.close();
+ }
+ }
+
+ return p.v();
+ }
+
+ @Override
+ public String toString(IrisJigsawStructure dim) {
+ return dim.getLoadKey();
+ }
+
+ @Override
+ public IrisJigsawStructure parse(String in, boolean force) throws DecreeParsingException, DecreeWhichException {
+ if (in.equals("null")) {
+ return null;
+ }
+ KList options = getPossibilities(in);
+
+ if (options.isEmpty()) {
+ throw new DecreeParsingException("Unable to find Jigsaw Structure \"" + in + "\"");
+ } else if (options.size() > 1) {
+ if (force) {
+ try {
+ return options.stream().filter((i) -> toString(i).equalsIgnoreCase(in)).collect(Collectors.toList()).get(0);
+ } catch (Throwable e) {
+ throw new DecreeParsingException("Unable to filter which Jigsaw Structure \"" + in + "\"");
+ }
+ } else {
+ throw new DecreeWhichException();
+ }
+ }
+
+ return options.get(0);
+ }
+
+ @Override
+ public boolean supports(Class> type) {
+ return type.equals(IrisJigsawStructure.class);
+ }
+
+ @Override
+ public String getRandomDefault() {
+ return "jigsaw-structure";
+ }
+}