From c5d9412c6c7a9b9e9569787d492e0539c1b17f2d Mon Sep 17 00:00:00 2001
From: matt <4009945+MattBDev@users.noreply.github.com>
Date: Tue, 19 Feb 2019 22:57:35 -0500
Subject: [PATCH] Cleaning and API Addition Begins the process of removing
 "magic values" for directions in the plugin.
Signed-off-by: matt <4009945+MattBDev@users.noreply.github.com>
---
 .../plotsquared/plot/object/Direction.java    | 26 +++++++++
 .../plotsquared/plot/object/Plot.java         | 57 +++++++++----------
 2 files changed, 53 insertions(+), 30 deletions(-)
 create mode 100644 Core/src/main/java/com/github/intellectualsites/plotsquared/plot/object/Direction.java
diff --git a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/object/Direction.java b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/object/Direction.java
new file mode 100644
index 000000000..0c7de4905
--- /dev/null
+++ b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/object/Direction.java
@@ -0,0 +1,26 @@
+package com.github.intellectualsites.plotsquared.plot.object;
+
+public enum Direction {
+    NORTH(0, "north"), EAST(1, "east"), SOUTH(2, "south"), WEST(3, "west"), NORTHEAST(4,
+        "northeast"), SOUTHEAST(5, "southeast"), SOUTHWEST(6, "southwest"), NORTHWEST(7,
+        "northwest"),
+    ;
+
+
+    private int index;
+    private String name;
+
+    Direction(int index, String name) {
+
+        this.index = index;
+        this.name = name;
+    }
+
+    public int getIndex() {
+        return index;
+    }
+
+    public String getName() {
+        return name;
+    }
+}
diff --git a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/object/Plot.java b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/object/Plot.java
index 6a7713e3c..15954f8a3 100644
--- a/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/object/Plot.java
+++ b/Core/src/main/java/com/github/intellectualsites/plotsquared/plot/object/Plot.java
@@ -546,23 +546,24 @@ public class Plot {
      * 6 = south-west
      * 7 = north-west
      * ----------
+     * //todo these artificial values are way too confusing.
      * Note: A plot that is merged north and east will not be merged northeast if the northeast plot is not part of the same group
      *
-     * @param direction direction to check for merged plot
+     * @param dir direction to check for merged plot
      * @return true if merged in that direction
      */
-    public boolean getMerged(int direction) {
+    public boolean getMerged(int dir) {
         if (this.settings == null) {
             return false;
         }
-        switch (direction) {
+        switch (dir) {
             case 0:
             case 1:
             case 2:
             case 3:
-                return this.getSettings().getMerged(direction);
+                return this.getSettings().getMerged(dir);
             case 7:
-                int i = direction - 4;
+                int i = dir - 4;
                 int i2 = 0;
                 if (this.getSettings().getMerged(i2)) {
                     if (this.getSettings().getMerged(i)) {
@@ -577,8 +578,8 @@ public class Plot {
             case 4:
             case 5:
             case 6:
-                i = direction - 4;
-                i2 = direction - 3;
+                i = dir - 4;
+                i2 = dir - 3;
                 return this.getSettings().getMerged(i2) && this.getSettings().getMerged(i)
                     && this.area.getPlotAbs(this.id.getRelative(i)).getMerged(i2) && this.area
                     .getPlotAbs(this.id.getRelative(i2)).getMerged(i);
@@ -954,7 +955,7 @@ public class Plot {
      *
      * @param name name
      */
-    public void setSign(final String name) {
+    public void setSign(@Nonnull String name) {
         if (!isLoaded()) {
             return;
         }
@@ -962,10 +963,6 @@ public class Plot {
             TaskManager.runTask(() -> Plot.this.setSign(name));
             return;
         }
-        if (name == null) {
-            PlotSquared.log("Attempted to add null name to sign at plot: " + getId());
-            return;
-        }
         PlotManager manager = this.area.getPlotManager();
         if (this.area.ALLOW_SIGNS) {
             Location loc = manager.getSignLoc(this.area, this);
@@ -1393,7 +1390,12 @@ public class Plot {
             this.setSign("unknown");
             return;
         }
-        this.setSign(UUIDHandler.getName(this.owner));
+        String name = UUIDHandler.getName(this.owner);
+        if (name == null) {
+            this.setSign("unknown");
+        } else {
+            this.setSign(name);
+        }
     }
 
     /**
@@ -1471,10 +1473,7 @@ public class Plot {
      * @param notify notify
      * @return true if plot was created successfully
      */
-    public boolean create(final UUID uuid, final boolean notify) {
-        if (uuid == null) {
-            throw new IllegalArgumentException("UUID cannot be null");
-        }
+    public boolean create(@Nonnull UUID uuid, final boolean notify) {
         this.owner = uuid;
         Plot existing = this.area.getOwnedPlotAbs(this.id);
         if (existing != null) {
@@ -1526,9 +1525,7 @@ public class Plot {
     //TODO Better documentation needed.
 
     /**
-     * Return the top location for the plot.
-     *
-     * @return
+     * Returns the top location for the plot.
      */
     public Location getTopAbs() {
         Location top = this.area.getPlotManager().getPlotTopLocAbs(this.area, this.id);
@@ -1539,7 +1536,7 @@ public class Plot {
     //TODO Better documentation needed.
 
     /**
-     * Return the bottom location for the plot.
+     * Returns the bottom location for the plot.
      */
     public Location getBottomAbs() {
         Location loc = this.area.getPlotManager().getPlotBottomLocAbs(this.area, this.id);
@@ -1623,11 +1620,11 @@ public class Plot {
         if (!this.isMerged()) {
             return top;
         }
-        if (this.getMerged(2)) {
-            top.setZ(this.getRelative(2).getBottomAbs().getZ() - 1);
+        if (this.getMerged(Direction.SOUTH.getIndex())) {
+            top.setZ(this.getRelative(Direction.SOUTH.getIndex()).getBottomAbs().getZ() - 1);
         }
-        if (this.getMerged(1)) {
-            top.setX(this.getRelative(1).getBottomAbs().getX() - 1);
+        if (this.getMerged(Direction.EAST.getIndex())) {
+            top.setX(this.getRelative(Direction.SOUTH.getIndex()).getBottomAbs().getX() - 1);
         }
         return top;
     }
@@ -1644,11 +1641,11 @@ public class Plot {
         if (!this.isMerged()) {
             return bot;
         }
-        if (this.getMerged(0)) {
-            bot.setZ(this.getRelative(0).getTopAbs().getZ() + 1);
+        if (this.getMerged(Direction.NORTH.getIndex())) {
+            bot.setZ(this.getRelative(Direction.NORTH.getIndex()).getTopAbs().getZ() + 1);
         }
-        if (this.getMerged(3)) {
-            bot.setX(this.getRelative(3).getTopAbs().getX() + 1);
+        if (this.getMerged(Direction.WEST.getIndex())) {
+            bot.setX(this.getRelative(Direction.WEST.getIndex()).getTopAbs().getX() + 1);
         }
         return bot;
     }
@@ -1677,7 +1674,7 @@ public class Plot {
             if (this.area.TERRAIN == 3) {
                 return;
             }
-            Plot other = this.getRelative(1);
+            Plot other = this.getRelative(Direction.EAST.getIndex());
             Location bot = other.getBottomAbs();
             Location top = this.getTopAbs();
             Location pos1 = new Location(this.getWorldName(), top.getX(), 0, bot.getZ());