diff --git a/README.md b/README.md
index 7627d35..3d6d2e0 100644
--- a/README.md
+++ b/README.md
@@ -21,7 +21,7 @@ How to include WorldEditWrapper into your maven project:
org.codemc.worldguardwrapper
worldguardwrapper
- 1.1.0-SNAPSHOT
+ 1.1.2-SNAPSHOT
```
diff --git a/api/pom.xml b/api/pom.xml
index 6bb8969..ce72445 100644
--- a/api/pom.xml
+++ b/api/pom.xml
@@ -7,7 +7,7 @@
org.codemc.worldguardwrapper
worldguardwrapper-parent
- 1.1.1-SNAPSHOT
+ 1.1.2-SNAPSHOT
worldguardwrapper-api
diff --git a/api/src/main/java/org/codemc/worldguardwrapper/flag/IWrappedStatusFlag.java b/api/src/main/java/org/codemc/worldguardwrapper/flag/IWrappedStatusFlag.java
new file mode 100644
index 0000000..c5c5a80
--- /dev/null
+++ b/api/src/main/java/org/codemc/worldguardwrapper/flag/IWrappedStatusFlag.java
@@ -0,0 +1,4 @@
+package org.codemc.worldguardwrapper.flag;
+
+public interface IWrappedStatusFlag extends IWrappedFlag {
+}
diff --git a/api/src/main/java/org/codemc/worldguardwrapper/region/IWrappedRegion.java b/api/src/main/java/org/codemc/worldguardwrapper/region/IWrappedRegion.java
index d1e937d..8d7df85 100644
--- a/api/src/main/java/org/codemc/worldguardwrapper/region/IWrappedRegion.java
+++ b/api/src/main/java/org/codemc/worldguardwrapper/region/IWrappedRegion.java
@@ -17,8 +17,6 @@ public interface IWrappedRegion {
void setFlag(IWrappedFlag flag, T value);
- Map, Object> getFlags();
-
int getPriority();
IWrappedDomain getOwners();
diff --git a/implementation/pom.xml b/implementation/pom.xml
index 46d1d76..6675187 100644
--- a/implementation/pom.xml
+++ b/implementation/pom.xml
@@ -7,7 +7,7 @@
org.codemc.worldguardwrapper
worldguardwrapper-parent
- 1.1.1-SNAPSHOT
+ 1.1.2-SNAPSHOT
worldguardwrapper-implementation
diff --git a/implementation/v6/pom.xml b/implementation/v6/pom.xml
index e13e992..6d90abc 100644
--- a/implementation/v6/pom.xml
+++ b/implementation/v6/pom.xml
@@ -7,7 +7,7 @@
org.codemc.worldguardwrapper
worldguardwrapper-implementation
- 1.1.1-SNAPSHOT
+ 1.1.2-SNAPSHOT
worldguardwrapper-implementation-v6
@@ -18,7 +18,7 @@
${project.groupId}
worldguardwrapper-api
- 1.1.1-SNAPSHOT
+ 1.1.2-SNAPSHOT
provided
diff --git a/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/WorldGuardImplementation.java b/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/WorldGuardImplementation.java
index f11ddb4..78ac6c4 100644
--- a/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/WorldGuardImplementation.java
+++ b/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/WorldGuardImplementation.java
@@ -20,7 +20,9 @@ import org.bukkit.util.Vector;
import org.codemc.worldguardwrapper.flag.IWrappedFlag;
import org.codemc.worldguardwrapper.flag.WrappedState;
import org.codemc.worldguardwrapper.implementation.IWorldGuardImplementation;
-import org.codemc.worldguardwrapper.implementation.v6.flag.WrappedFlag;
+import org.codemc.worldguardwrapper.implementation.v6.flag.WrappedPrimitiveFlag;
+import org.codemc.worldguardwrapper.implementation.v6.flag.AbstractWrappedFlag;
+import org.codemc.worldguardwrapper.implementation.v6.flag.WrappedStatusFlag;
import org.codemc.worldguardwrapper.implementation.v6.region.WrappedRegion;
import org.codemc.worldguardwrapper.implementation.v6.utility.WorldGuardVectorUtilities;
import org.codemc.worldguardwrapper.region.IWrappedRegion;
@@ -56,6 +58,32 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
.orElse(null), flag));
}
+ // TODO: find a better way to define wrapper mappings and register mappings
+ @SuppressWarnings("unchecked")
+ private IWrappedFlag wrap(Flag> flag, Class type) {
+ final IWrappedFlag wrappedFlag;
+ if (type.equals(WrappedState.class)) {
+ wrappedFlag = (IWrappedFlag) new WrappedStatusFlag((Flag) flag);
+ } else if (type.equals(Boolean.class) || type.equals(boolean.class)) {
+ wrappedFlag = new WrappedPrimitiveFlag(flag);
+ } else if (type.equals(Double.class) || type.equals(double.class)) {
+ wrappedFlag = new WrappedPrimitiveFlag(flag);
+ } else if (type.equals(Enum.class)) {
+ wrappedFlag = new WrappedPrimitiveFlag(flag);
+ } else if (type.equals(Integer.class) || type.equals(int.class)) {
+ wrappedFlag = new WrappedPrimitiveFlag(flag);
+ } else if (type.equals(Location.class)) {
+ wrappedFlag = new WrappedPrimitiveFlag(flag);
+ } else if (type.equals(String.class)) {
+ wrappedFlag = new WrappedPrimitiveFlag(flag);
+ } else if (type.equals(Vector.class)) {
+ wrappedFlag = new WrappedPrimitiveFlag(flag);
+ } else {
+ throw new IllegalArgumentException("Unsupported flag type " + type.getName());
+ }
+ return wrappedFlag;
+ }
+
@Override
public JavaPlugin getWorldGuardPlugin() {
return WorldGuardPlugin.inst();
@@ -66,46 +94,44 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
return 6;
}
- @Override
- public Optional queryFlag(Player player, Location location, IWrappedFlag flag) {
- Flag wrappedFlag = ((WrappedFlag) flag).getHandle();
- return queryValue(player, location, wrappedFlag);
- }
-
-
- @SuppressWarnings("unchecked")
@Override
public Optional> getFlag(String name, Class type) {
return Optional.ofNullable(flagRegistry.get(name))
- .map(flag -> (IWrappedFlag) new WrappedFlag(flag));
+ .map(flag -> wrap(flag, type));
+ }
+
+ @Override
+ public Optional queryFlag(Player player, Location location, IWrappedFlag flag) {
+ AbstractWrappedFlag wrappedFlag = (AbstractWrappedFlag) flag;
+ return wrappedFlag.fromWGValue(queryValue(player, location, wrappedFlag.getHandle()));
}
@SuppressWarnings("unchecked")
@Override
public Optional> registerFlag(String name, Class type, T defaultValue) {
- final Flag wrappedFlag;
- if (type.equals(Boolean.class) || type.equals(boolean.class)) {
- wrappedFlag = (Flag) new BooleanFlag(name);
+ final Flag> flag;
+ if (type.equals(WrappedState.class)) {
+ flag = new StateFlag(name, defaultValue == WrappedState.ALLOW);
+ } else if (type.equals(Boolean.class) || type.equals(boolean.class)) {
+ flag = new BooleanFlag(name);
} else if (type.equals(Double.class) || type.equals(double.class)) {
- wrappedFlag = (Flag) new DoubleFlag(name);
+ flag = new DoubleFlag(name);
} else if (type.equals(Enum.class)) {
- wrappedFlag = new EnumFlag(name, type);
+ flag = new EnumFlag(name, type);
} else if (type.equals(Integer.class) || type.equals(int.class)) {
- wrappedFlag = (Flag) new IntegerFlag(name);
+ flag = new IntegerFlag(name);
} else if (type.equals(Location.class)) {
- wrappedFlag = (Flag) new LocationFlag(name);
- } else if (type.equals(WrappedState.class)) {
- wrappedFlag = (Flag) new StateFlag(name, defaultValue == WrappedState.ALLOW);
+ flag = new LocationFlag(name);
} else if (type.equals(String.class)) {
- wrappedFlag = (Flag) new StringFlag(name, (String) defaultValue);
+ flag = new StringFlag(name, (String) defaultValue);
} else if (type.equals(Vector.class)) {
- wrappedFlag = (Flag) new VectorFlag(name);
+ flag = new VectorFlag(name);
} else {
throw new IllegalArgumentException("Unsupported flag type " + type.getName());
}
try {
- flagRegistry.register(wrappedFlag);
- return Optional.of(new WrappedFlag<>(wrappedFlag));
+ flagRegistry.register(flag);
+ return Optional.of(wrap(flag, type));
} catch (FlagConflictException ignored) {
}
return Optional.empty();
diff --git a/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/flag/WrappedFlag.java b/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/flag/AbstractWrappedFlag.java
similarity index 60%
rename from implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/flag/WrappedFlag.java
rename to implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/flag/AbstractWrappedFlag.java
index 75ab934..c543dd0 100644
--- a/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/flag/WrappedFlag.java
+++ b/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/flag/AbstractWrappedFlag.java
@@ -9,18 +9,22 @@ import java.util.Optional;
@AllArgsConstructor
@Getter
-public class WrappedFlag implements IWrappedFlag {
+public abstract class AbstractWrappedFlag implements IWrappedFlag {
- private final Flag handle;
+ private final Flag> handle;
@Override
public String getName() {
return handle.getName();
}
+ public abstract Optional fromWGValue(Object value);
+
+ public abstract Optional