();
+ for (Player p : Bukkit.getWorld(world).getPlayers()) {
+ if (contains(p))
+ players.add(p);
+ }
+ return players;
+ }
+
+ /**
+ * Sets the location of the region
+ *
+ * Handles min and max corner sorting automatically
+ *
+ * @param loc1
+ * first corner
+ * @param loc2
+ * second corner
+ */
+ public void setLocation(Location loc1, Location loc2) {
+ setLocation(loc1.getWorld().getName(), loc1.getBlockX(), loc1.getBlockY(), loc1.getBlockZ(), loc2.getBlockX(), loc2.getBlockY(), loc2.getBlockZ());
+ }
+
+ /**
+ * Sets the location of the region
+ *
+ * Handles min and max corner sorting automatically
+ *
+ * @param world
+ * world name
+ * @param x1
+ * first x coordinate
+ * @param y1
+ * first y coordinate
+ * @param z1
+ * first z coordinate
+ * @param x2
+ * second x coordinate
+ * @param y2
+ * second y coordinate
+ * @param z2
+ * second z coordinate
+ */
+ public void setLocation(String world, int x1, int y1, int z1, int x2, int y2, int z2) {
+ this.world = world;
+ this.x1 = Math.min(x1, x2);
+ this.x2 = Math.max(x1, x2);
+ this.y1 = Math.min(y1, y2);
+ this.y2 = Math.max(y1, y2);
+ this.z1 = Math.min(z1, z2);
+ this.z2 = Math.max(z1, z2);
+ }
+
+ @Override
+ public int hashCode() {
+ return name.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof CuboidRegion) {
+ return ((CuboidRegion) obj).getName().equals(getName());
+ }
+ return super.equals(obj);
+ }
+
+ @Override
+ public String toString() {
+ return name;
+ }
+
+ public Iterator iterator() {
+ return new CuboidIterator(world, x1, y1, z1, x2, y2, z2);
+ }
+
+ /**
+ * Class to handle location iteration for CuboidRegions
+ *
+ * @author Kerem Celik
+ *
+ */
+ public class CuboidIterator implements Iterator {
+ private int baseX, baseY, baseZ;
+ private int x, y, z;
+ private int sizeX, sizeY, sizeZ;
+ private String world;
+
+ public CuboidIterator(String world, int x1, int y1, int z1, int x2, int y2, int z2) {
+ this.world = world;
+ baseX = x1;
+ baseY = y1;
+ baseZ = z1;
+ sizeX = Math.abs(x2 - x1) + 1;
+ sizeY = Math.abs(y2 - y1) + 1;
+ sizeZ = Math.abs(z2 - z1) + 1;
+ x = y = z = 0;
+ }
+
+ public boolean hasNext() {
+ return x < sizeX && y < sizeY && z < sizeZ;
+ }
+
+ public Location next() {
+ Location b = new Location(Bukkit.getWorld(world), baseX + x, baseY + y, baseZ + z);
+ if (++x >= sizeX) {
+ x = 0;
+ if (++y >= sizeY) {
+ y = 0;
+ ++z;
+ }
+ }
+ return b;
+ }
+
+ public void remove() {}
+ }
+
+}
\ No newline at end of file
diff --git a/stark/bukkit/src/main/kotlin/net/evilblock/stark/util/enchantment/EnchantmentWrapper.kt b/stark/bukkit/src/main/kotlin/net/evilblock/stark/util/enchantment/EnchantmentWrapper.kt
new file mode 100644
index 0000000..d38e900
--- /dev/null
+++ b/stark/bukkit/src/main/kotlin/net/evilblock/stark/util/enchantment/EnchantmentWrapper.kt
@@ -0,0 +1,107 @@
+package net.evilblock.stark.util.enchantment
+
+import org.bukkit.enchantments.Enchantment
+import org.bukkit.enchantments.EnchantmentTarget
+import org.bukkit.inventory.ItemStack
+
+enum class EnchantmentWrapper constructor(val friendlyName: String, parse: Array) {
+
+ PROTECTION_ENVIRONMENTAL("Protection", arrayOf("p", "prot", "protect")),
+ PROTECTION_FIRE("Fire Protection", arrayOf