diff --git a/src/main/java/com/volmit/iris/core/decrees/DecSettings.java b/src/main/java/com/volmit/iris/core/decrees/DecSettings.java
new file mode 100644
index 000000000..b7efbc37f
--- /dev/null
+++ b/src/main/java/com/volmit/iris/core/decrees/DecSettings.java
@@ -0,0 +1,26 @@
+/*
+ * 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.core.decrees;
+
+import com.volmit.iris.util.decree.DecreeExecutor;
+
+public class DecSettings implements DecreeExecutor
+{
+
+}
diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/BlockVectorHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/BlockVectorHandler.java
new file mode 100644
index 000000000..b499295f3
--- /dev/null
+++ b/src/main/java/com/volmit/iris/util/decree/handlers/BlockVectorHandler.java
@@ -0,0 +1,141 @@
+/*
+ * 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.util.collection.KList;
+import com.volmit.iris.util.decree.DecreeContext;
+import com.volmit.iris.util.decree.DecreeParameterHandler;
+import com.volmit.iris.util.decree.DecreeSystem;
+import com.volmit.iris.util.decree.exceptions.DecreeParsingException;
+import com.volmit.iris.util.decree.exceptions.DecreeWhichException;
+import com.volmit.iris.util.format.Form;
+import com.volmit.iris.util.math.M;
+import com.volmit.iris.util.plugin.VolmitSender;
+import org.bukkit.FluidCollisionMode;
+import org.bukkit.entity.Player;
+import org.bukkit.util.BlockVector;
+import org.bukkit.util.Vector;
+
+public class BlockVectorHandler implements DecreeParameterHandler {
+ @Override
+ public KList getPossibilities() {
+ KList vx = new KList<>();
+ VolmitSender s = DecreeContext.get();
+
+ if(s.isPlayer())
+ {
+ vx.add(s.player().getLocation().toVector().toBlockVector());
+ }
+
+ return vx;
+ }
+
+ @Override
+ public String toString(BlockVector v) {
+ if(v.getY() == 0)
+ {
+ return Form.f(v.getBlockX(), 2)+ "," + Form.f(v.getBlockZ(), 2);
+ }
+
+ return Form.f(v.getBlockX(), 2) + "," + Form.f(v.getBlockY(), 2) + "," + Form.f(v.getBlockZ(), 2);
+ }
+
+ @Override
+ public BlockVector parse(String in) throws DecreeParsingException, DecreeWhichException {
+ try {
+ if (in.contains(","))
+ {
+ String[] comp = in.split("\\Q,\\E");
+
+ if(comp.length == 2)
+ {
+ return new BlockVector(Integer.parseInt(comp[0].trim()), 0, Integer.parseInt(comp[1].trim()));
+ }
+
+ else if(comp.length == 3)
+ {
+ return new BlockVector(Integer.parseInt(comp[0].trim()),
+ Integer.parseInt(comp[1].trim()),
+ Integer.parseInt(comp[2].trim()));
+ }
+
+ else
+ {
+ throw new DecreeParsingException("Could not parse components for vector. You have " + comp.length + " components. Expected 2 or 3.");
+ }
+ }
+
+ else if(in.equalsIgnoreCase("here") ||in.equalsIgnoreCase("me") ||in.equalsIgnoreCase("self"))
+ {
+ if(!DecreeContext.get().isPlayer())
+ {
+ throw new DecreeParsingException("You cannot specify me,self,here as a console.");
+ }
+
+ return DecreeContext.get().player().getLocation().toVector().toBlockVector();
+ }
+
+ else if(in.equalsIgnoreCase("look") ||in.equalsIgnoreCase("cursor") ||in.equalsIgnoreCase("crosshair"))
+ {
+ if(!DecreeContext.get().isPlayer())
+ {
+ throw new DecreeParsingException("You cannot specify look,cursor,crosshair as a console.");
+ }
+
+ return DecreeContext.get().player().getTargetBlockExact(256, FluidCollisionMode.NEVER).getLocation().toVector().toBlockVector();
+ }
+
+ else if(in.trim().toLowerCase().startsWith("player:"))
+ {
+ String v = in.trim().split("\\Q:\\E")[1];
+
+
+ KList> px = DecreeSystem.getHandler(Player.class).getPossibilities(v);
+
+ if(px != null && px.isNotEmpty())
+ {
+ return ((Player)px.get(0)).getLocation().toVector().toBlockVector();
+ }
+
+ else if(px == null || px.isEmpty())
+ {
+ throw new DecreeParsingException("Cannot find player: " + v);
+ }
+ }
+ }
+
+ catch(Throwable e)
+ {
+ throw new DecreeParsingException("Unable to get Vector for \"" + in + "\" because of an uncaught exception: " + e);
+ }
+
+ return null;
+ }
+
+ @Override
+ public boolean supports(Class> type) {
+ return type.equals(BlockVector.class);
+ }
+
+ @Override
+ public String getRandomDefault()
+ {
+ return M.r(0.5) ? "0,0" : "0,0,0";
+ }
+}
diff --git a/src/main/java/com/volmit/iris/util/decree/handlers/VectorHandler.java b/src/main/java/com/volmit/iris/util/decree/handlers/VectorHandler.java
new file mode 100644
index 000000000..3203f8389
--- /dev/null
+++ b/src/main/java/com/volmit/iris/util/decree/handlers/VectorHandler.java
@@ -0,0 +1,145 @@
+/*
+ * 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.util.collection.KList;
+import com.volmit.iris.util.decree.DecreeContext;
+import com.volmit.iris.util.decree.DecreeParameterHandler;
+import com.volmit.iris.util.decree.DecreeSystem;
+import com.volmit.iris.util.decree.exceptions.DecreeParsingException;
+import com.volmit.iris.util.decree.exceptions.DecreeWhichException;
+import com.volmit.iris.util.format.Form;
+import com.volmit.iris.util.math.M;
+import com.volmit.iris.util.plugin.VolmitSender;
+import org.bukkit.Bukkit;
+import org.bukkit.FluidCollisionMode;
+import org.bukkit.World;
+import org.bukkit.entity.Player;
+import org.bukkit.util.BlockVector;
+import org.bukkit.util.Vector;
+
+import java.util.Locale;
+
+public class VectorHandler implements DecreeParameterHandler {
+ @Override
+ public KList getPossibilities() {
+ KList vx = new KList<>();
+ VolmitSender s = DecreeContext.get();
+
+ if(s.isPlayer())
+ {
+ vx.add(s.player().getLocation().toVector());
+ }
+
+ return vx;
+ }
+
+ @Override
+ public String toString(Vector v) {
+ if(v.getY() == 0)
+ {
+ return Form.f(v.getX(), 2)+ "," + Form.f(v.getZ(), 2);
+ }
+
+ return Form.f(v.getX(), 2) + "," + Form.f(v.getY(), 2) + "," + Form.f(v.getZ(), 2);
+ }
+
+ @Override
+ public Vector parse(String in) throws DecreeParsingException, DecreeWhichException {
+ try {
+ if (in.contains(","))
+ {
+ String[] comp = in.split("\\Q,\\E");
+
+ if(comp.length == 2)
+ {
+ return new BlockVector(Double.parseDouble(comp[0].trim()), 0, Double.parseDouble(comp[1].trim()));
+ }
+
+ else if(comp.length == 3)
+ {
+ return new BlockVector(Double.parseDouble(comp[0].trim()),
+ Double.parseDouble(comp[1].trim()),
+ Double.parseDouble(comp[2].trim()));
+ }
+
+ else
+ {
+ throw new DecreeParsingException("Could not parse components for vector. You have " + comp.length + " components. Expected 2 or 3.");
+ }
+ }
+
+ else if(in.equalsIgnoreCase("here") ||in.equalsIgnoreCase("me") ||in.equalsIgnoreCase("self"))
+ {
+ if(!DecreeContext.get().isPlayer())
+ {
+ throw new DecreeParsingException("You cannot specify me,self,here as a console.");
+ }
+
+ return DecreeContext.get().player().getLocation().toVector();
+ }
+
+ else if(in.equalsIgnoreCase("look") ||in.equalsIgnoreCase("cursor") ||in.equalsIgnoreCase("crosshair"))
+ {
+ if(!DecreeContext.get().isPlayer())
+ {
+ throw new DecreeParsingException("You cannot specify look,cursor,crosshair as a console.");
+ }
+
+ return DecreeContext.get().player().getTargetBlockExact(256, FluidCollisionMode.NEVER).getLocation().toVector();
+ }
+
+ else if(in.trim().toLowerCase().startsWith("player:"))
+ {
+ String v = in.trim().split("\\Q:\\E")[1];
+
+
+ KList> px = DecreeSystem.getHandler(Player.class).getPossibilities(v);
+
+ if(px != null && px.isNotEmpty())
+ {
+ return ((Player)px.get(0)).getLocation().toVector();
+ }
+
+ else if(px == null || px.isEmpty())
+ {
+ throw new DecreeParsingException("Cannot find player: " + v);
+ }
+ }
+ }
+
+ catch(Throwable e)
+ {
+ throw new DecreeParsingException("Unable to get Vector for \"" + in + "\" because of an uncaught exception: " + e);
+ }
+
+ return null;
+ }
+
+ @Override
+ public boolean supports(Class> type) {
+ return type.equals(Vector.class);
+ }
+
+ @Override
+ public String getRandomDefault()
+ {
+ return M.r(0.5) ? "0,0" : "0,0,0";
+ }
+}
diff --git a/src/main/java/com/volmit/iris/util/format/Form.java b/src/main/java/com/volmit/iris/util/format/Form.java
index 7f7c80022..217db0fea 100644
--- a/src/main/java/com/volmit/iris/util/format/Form.java
+++ b/src/main/java/com/volmit/iris/util/format/Form.java
@@ -874,7 +874,7 @@ public class Form {
DF = new DecimalFormat(form);
- return DF.format(i);
+ return DF.format(i).replaceAll("\\Q,\\E", ".");
}
/**