diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..683051e --- /dev/null +++ b/.travis.yml @@ -0,0 +1,8 @@ +sudo: false +dist: trusty +language: java +jdk: + - oraclejdk8 +cache: + directories: + - '$HOME/.m2/repository' diff --git a/README.md b/README.md index b0318a2..7627d35 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ How to include WorldEditWrapper into your maven project: org.codemc.worldguardwrapper worldguardwrapper - 1.0.3-SNAPSHOT + 1.1.0-SNAPSHOT ``` @@ -34,7 +34,7 @@ Remember to include/relocate the library into your final jar, example: org.apache.maven.plugins maven-shade-plugin - 3.2.0 + 3.2.1 package diff --git a/api/pom.xml b/api/pom.xml index 629598e..e16bd4b 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -7,7 +7,7 @@ org.codemc.worldguardwrapper worldguardwrapper-parent - 1.0.4-SNAPSHOT + 1.1.0-SNAPSHOT worldguardwrapper-api diff --git a/api/src/main/java/org/codemc/worldguardwrapper/event/DamageEntityEvent.java b/api/src/main/java/org/codemc/worldguardwrapper/event/WrappedDamageEntityEvent.java similarity index 90% rename from api/src/main/java/org/codemc/worldguardwrapper/event/DamageEntityEvent.java rename to api/src/main/java/org/codemc/worldguardwrapper/event/WrappedDamageEntityEvent.java index f0c2ccf..de980e3 100644 --- a/api/src/main/java/org/codemc/worldguardwrapper/event/DamageEntityEvent.java +++ b/api/src/main/java/org/codemc/worldguardwrapper/event/WrappedDamageEntityEvent.java @@ -10,7 +10,7 @@ import org.bukkit.event.HandlerList; @RequiredArgsConstructor @Getter -public class DamageEntityEvent extends AbstractWrappedEvent { +public class WrappedDamageEntityEvent extends AbstractWrappedEvent { private static final HandlerList handlers = new HandlerList(); diff --git a/api/src/main/java/org/codemc/worldguardwrapper/event/DisallowedPVPEvent.java b/api/src/main/java/org/codemc/worldguardwrapper/event/WrappedDisallowedPVPEvent.java similarity index 89% rename from api/src/main/java/org/codemc/worldguardwrapper/event/DisallowedPVPEvent.java rename to api/src/main/java/org/codemc/worldguardwrapper/event/WrappedDisallowedPVPEvent.java index 3a150fd..8903173 100644 --- a/api/src/main/java/org/codemc/worldguardwrapper/event/DisallowedPVPEvent.java +++ b/api/src/main/java/org/codemc/worldguardwrapper/event/WrappedDisallowedPVPEvent.java @@ -8,7 +8,7 @@ import org.bukkit.event.HandlerList; @RequiredArgsConstructor @Getter -public class DisallowedPVPEvent extends AbstractWrappedEvent { +public class WrappedDisallowedPVPEvent extends AbstractWrappedEvent { private static final HandlerList handlers = new HandlerList(); diff --git a/api/src/main/java/org/codemc/worldguardwrapper/event/UseBlockEvent.java b/api/src/main/java/org/codemc/worldguardwrapper/event/WrappedUseBlockEvent.java similarity index 92% rename from api/src/main/java/org/codemc/worldguardwrapper/event/UseBlockEvent.java rename to api/src/main/java/org/codemc/worldguardwrapper/event/WrappedUseBlockEvent.java index 363ad76..9edc76d 100644 --- a/api/src/main/java/org/codemc/worldguardwrapper/event/UseBlockEvent.java +++ b/api/src/main/java/org/codemc/worldguardwrapper/event/WrappedUseBlockEvent.java @@ -13,7 +13,7 @@ import java.util.List; @RequiredArgsConstructor @Getter -public class UseBlockEvent extends AbstractWrappedEvent { +public class WrappedUseBlockEvent extends AbstractWrappedEvent { private static final HandlerList handlers = new HandlerList(); diff --git a/api/src/main/java/org/codemc/worldguardwrapper/event/UseEntityEvent.java b/api/src/main/java/org/codemc/worldguardwrapper/event/WrappedUseEntityEvent.java similarity index 91% rename from api/src/main/java/org/codemc/worldguardwrapper/event/UseEntityEvent.java rename to api/src/main/java/org/codemc/worldguardwrapper/event/WrappedUseEntityEvent.java index 7f903ea..03bb067 100644 --- a/api/src/main/java/org/codemc/worldguardwrapper/event/UseEntityEvent.java +++ b/api/src/main/java/org/codemc/worldguardwrapper/event/WrappedUseEntityEvent.java @@ -10,7 +10,7 @@ import org.bukkit.event.HandlerList; @RequiredArgsConstructor @Getter -public class UseEntityEvent extends AbstractWrappedEvent { +public class WrappedUseEntityEvent extends AbstractWrappedEvent { private static final HandlerList handlers = new HandlerList(); diff --git a/api/src/main/java/org/codemc/worldguardwrapper/flag/IWrappedFlag.java b/api/src/main/java/org/codemc/worldguardwrapper/flag/IWrappedFlag.java new file mode 100644 index 0000000..f2f45f2 --- /dev/null +++ b/api/src/main/java/org/codemc/worldguardwrapper/flag/IWrappedFlag.java @@ -0,0 +1,11 @@ +package org.codemc.worldguardwrapper.flag; + +import java.util.Optional; + +public interface IWrappedFlag { + + String getName(); + + Optional getDefaultValue(); + +} diff --git a/api/src/main/java/org/codemc/worldguardwrapper/flag/WrappedState.java b/api/src/main/java/org/codemc/worldguardwrapper/flag/WrappedState.java new file mode 100644 index 0000000..0901810 --- /dev/null +++ b/api/src/main/java/org/codemc/worldguardwrapper/flag/WrappedState.java @@ -0,0 +1,9 @@ +package org.codemc.worldguardwrapper.flag; + +public enum WrappedState { + ALLOW, + DENY; + + WrappedState() { + } +} diff --git a/api/src/main/java/org/codemc/worldguardwrapper/flags/AbstractWrappedFlag.java b/api/src/main/java/org/codemc/worldguardwrapper/flags/AbstractWrappedFlag.java deleted file mode 100644 index 6a4febf..0000000 --- a/api/src/main/java/org/codemc/worldguardwrapper/flags/AbstractWrappedFlag.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.codemc.worldguardwrapper.flags; - -import lombok.AllArgsConstructor; -import lombok.NonNull; -import lombok.RequiredArgsConstructor; -import org.bukkit.entity.Player; - -@AllArgsConstructor -@RequiredArgsConstructor -public abstract class AbstractWrappedFlag { - @NonNull - private String name; - @NonNull - private Class type; - private T defaultValue; - - /** - * Get the name of this flag. - * - * @return The name - */ - public String getName() { - return name; - } - - /** - * Get the type of this flag's value. - * - * @return The type - */ - public Class getType() { - return type; - } - - /** - * Get the default value of this flag. - * - * @return The default value (may be {@code null}) - */ - public T getDefaultValue() { - return defaultValue; - } - - /** - * Convert the value stored in this flag into a type that can be - * serialized into YAML. - * - * @param value The value - * @return The serialized type - */ - public abstract Object serialize(T value); - - /** - * Convert a raw object that was loaded (from a YAML file, for example) into the - * type that this flag uses. - * - * @param serialized The raw object - * @return The deserialized type - */ - public abstract T deserialize(Object serialized); - - /** - * Parse a given input to force it to a type compatible with the flag. - * - * @param player Player who entered the string. - * @param userInput Input string (e.g. a player input) - * @return A type compatible with the flag - */ - public abstract T parse(Player player, String userInput); - -} diff --git a/api/src/main/java/org/codemc/worldguardwrapper/flags/BooleanFlag.java b/api/src/main/java/org/codemc/worldguardwrapper/flags/BooleanFlag.java deleted file mode 100644 index cf96232..0000000 --- a/api/src/main/java/org/codemc/worldguardwrapper/flags/BooleanFlag.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.codemc.worldguardwrapper.flags; - -import org.bukkit.entity.Player; - -/** - * A flag that stores a boolean. - */ -public class BooleanFlag extends AbstractWrappedFlag { - - public BooleanFlag(String name) { - this(name, false); - } - - public BooleanFlag(String name, boolean defaultValue) { - super(name, boolean.class, defaultValue); - } - - @Override - public Object serialize(Boolean value) { - return value; - } - - @Override - public Boolean deserialize(Object serialized) { - return (Boolean) serialized; - } - - @Override - public Boolean parse(Player player, String userInput) { - if (userInput.equalsIgnoreCase("true") || userInput.equalsIgnoreCase("yes") - || userInput.equalsIgnoreCase("on") - || userInput.equalsIgnoreCase("1")) { - return true; - } else if (userInput.equalsIgnoreCase("false") || userInput.equalsIgnoreCase("no") - || userInput.equalsIgnoreCase("off") - || userInput.equalsIgnoreCase("0")) { - return false; - } else { - return null; - } - } - -} diff --git a/api/src/main/java/org/codemc/worldguardwrapper/flags/DoubleFlag.java b/api/src/main/java/org/codemc/worldguardwrapper/flags/DoubleFlag.java deleted file mode 100644 index e2b182e..0000000 --- a/api/src/main/java/org/codemc/worldguardwrapper/flags/DoubleFlag.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.codemc.worldguardwrapper.flags; - -import org.bukkit.entity.Player; - -/** - * A flag that stores a double. - */ -public class DoubleFlag extends AbstractWrappedFlag { - - public DoubleFlag(String name) { - this(name, 0d); - } - - public DoubleFlag(String name, double defaultValue) { - super(name, double.class, defaultValue); - } - - @Override - public Object serialize(Double value) { - return value; - } - - @Override - public Double deserialize(Object serialized) { - if (serialized instanceof Number) { - return ((Number) serialized).doubleValue(); - } else { - return null; - } - } - - @Override - public Double parse(Player player, String userInput) { - return Double.parseDouble(userInput); - } - -} diff --git a/api/src/main/java/org/codemc/worldguardwrapper/flags/EnumFlag.java b/api/src/main/java/org/codemc/worldguardwrapper/flags/EnumFlag.java deleted file mode 100644 index 454f49c..0000000 --- a/api/src/main/java/org/codemc/worldguardwrapper/flags/EnumFlag.java +++ /dev/null @@ -1,47 +0,0 @@ -package org.codemc.worldguardwrapper.flags; - -import org.bukkit.entity.Player; - -/** - * A flag that stores an enum value. - */ -public class EnumFlag> extends AbstractWrappedFlag { - - public EnumFlag(String name, Class enumClass) { - this(name, enumClass, null); - } - - public EnumFlag(String name, Class enumClass, T defaultValue) { - super(name, enumClass, defaultValue); - } - - /** - * Get the enum class. - * TODO: really needed? we already have getType() -Gab - * - * @return The enum class - */ - public Class getEnumClass() { - return getType(); - } - - @Override - public Object serialize(T value) { - return value.name(); - } - - @Override - public T deserialize(Object serialized) { - if (serialized instanceof String) { - return Enum.valueOf(getEnumClass(), (String) serialized); - } else { - return null; - } - } - - @Override - public T parse(Player player, String userInput) { - return Enum.valueOf(getEnumClass(), userInput); - } - -} diff --git a/api/src/main/java/org/codemc/worldguardwrapper/flags/IntegerFlag.java b/api/src/main/java/org/codemc/worldguardwrapper/flags/IntegerFlag.java deleted file mode 100644 index 23c467f..0000000 --- a/api/src/main/java/org/codemc/worldguardwrapper/flags/IntegerFlag.java +++ /dev/null @@ -1,37 +0,0 @@ -package org.codemc.worldguardwrapper.flags; - -import org.bukkit.entity.Player; - -/** - * A flag that stores an integer. - */ -public class IntegerFlag extends AbstractWrappedFlag { - - public IntegerFlag(String name) { - this(name, 0); - } - - public IntegerFlag(String name, int defaultValue) { - super(name, int.class, defaultValue); - } - - @Override - public Object serialize(Integer value) { - return value; - } - - @Override - public Integer deserialize(Object serialized) { - if (serialized instanceof Number) { - return ((Number) serialized).intValue(); - } else { - return null; - } - } - - @Override - public Integer parse(Player player, String userInput) { - return Integer.parseInt(userInput); - } - -} diff --git a/api/src/main/java/org/codemc/worldguardwrapper/flags/LocationFlag.java b/api/src/main/java/org/codemc/worldguardwrapper/flags/LocationFlag.java deleted file mode 100644 index 371a68e..0000000 --- a/api/src/main/java/org/codemc/worldguardwrapper/flags/LocationFlag.java +++ /dev/null @@ -1,100 +0,0 @@ -package org.codemc.worldguardwrapper.flags; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.Player; - -import java.util.HashMap; -import java.util.Map; - -/** - * A flag that stores a bukkit location. - */ -public class LocationFlag extends AbstractWrappedFlag { - - public LocationFlag(String name) { - this(name, null); - } - - public LocationFlag(String name, Location defaultValue) { - super(name, Location.class, defaultValue); - } - - @Override - public Object serialize(Location value) { - Map map = new HashMap<>(); - - map.put("world", value.getWorld().getName()); - map.put("x", value.getX()); - map.put("y", value.getY()); - map.put("z", value.getZ()); - map.put("yaw", value.getYaw()); - map.put("pitch", value.getPitch()); - - return map; - } - - @Override - public Location deserialize(Object serialized) { - if (serialized instanceof Map) { - Map map = (Map) serialized; - - Object worldName = map.get("world"); - if (worldName == null) return null; - - Object x = map.get("x"); - if (x == null) return null; - - Object y = map.get("y"); - if (y == null) return null; - - Object z = map.get("z"); - if (z == null) return null; - - Object yaw = map.get("yaw"); - if (yaw == null) return null; - - Object pitch = map.get("pitch"); - if (pitch == null) return null; - - World world = Bukkit.getWorld(String.valueOf(worldName)); - if (world == null) return null; - - return new Location(world, toNumber(x), toNumber(y), toNumber(z), - (float) toNumber(yaw), (float) toNumber(pitch)); - } - return null; - } - - @Override - public Location parse(Player player, String userInput) { - if ("here".equalsIgnoreCase(userInput)) { - return player.getLocation(); - } else if ("none".equalsIgnoreCase(userInput)) { - return null; - } else { - String[] split = userInput.split(","); - if (split.length >= 3) { - final World world = player.getWorld(); - final double x = Double.parseDouble(split[0]); - final double y = Double.parseDouble(split[1]); - final double z = Double.parseDouble(split[2]); - final float yaw = split.length < 4 ? 0 : Float.parseFloat(split[3]); - final float pitch = split.length < 5 ? 0 : Float.parseFloat(split[4]); - - return new Location(world, x, y, z, yaw, pitch); - } - } - return null; - } - - private double toNumber(Object o) { - if (o instanceof Number) { - return ((Number) o).doubleValue(); - } else { - return 0; - } - } - -} diff --git a/api/src/main/java/org/codemc/worldguardwrapper/flags/SetFlag.java b/api/src/main/java/org/codemc/worldguardwrapper/flags/SetFlag.java deleted file mode 100644 index d9abae6..0000000 --- a/api/src/main/java/org/codemc/worldguardwrapper/flags/SetFlag.java +++ /dev/null @@ -1,77 +0,0 @@ -package org.codemc.worldguardwrapper.flags; - -import org.bukkit.entity.Player; - -import java.util.*; - -/** - * A flag that stores a set of values of the sub flag's type. - */ -public class SetFlag extends AbstractWrappedFlag> { - - private AbstractWrappedFlag subFlag; - - public SetFlag(String name, AbstractWrappedFlag subFlag) { - this(name, new HashSet<>(), subFlag); - } - - @SuppressWarnings("unchecked") - public SetFlag(String name, Set defaultValue, AbstractWrappedFlag subFlag) { - super(name, (Class>) defaultValue.getClass(), defaultValue); - this.subFlag = subFlag; - } - - /** - * Get the type of values stored in this flag. - * - * @return The stored flag type. - */ - public AbstractWrappedFlag getSubType() { - return subFlag; - } - - @Override - public Set deserialize(Object o) { - if (o instanceof Collection) { - Collection collection = (Collection) o; - Set items = new HashSet(); - - for (Object sub : collection) { - T item = subFlag.deserialize(sub); - if (item != null) { - items.add(item); - } - } - - return items; - } else { - return null; - } - } - - @Override - public Object serialize(Set o) { - List list = new ArrayList(); - for (T item : o) { - list.add(subFlag.serialize(item)); - } - - return list; - } - - @Override - public Set parse(Player player, String userInput) { - if (userInput.isEmpty()) { - return new HashSet<>(); - } else { - Set items = new HashSet<>(); - - for (String str : userInput.split(",")) { - items.add(subFlag.parse(player, str)); - } - - return items; - } - } - -} diff --git a/api/src/main/java/org/codemc/worldguardwrapper/flags/StringFlag.java b/api/src/main/java/org/codemc/worldguardwrapper/flags/StringFlag.java deleted file mode 100644 index 7871931..0000000 --- a/api/src/main/java/org/codemc/worldguardwrapper/flags/StringFlag.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.codemc.worldguardwrapper.flags; - -import org.bukkit.entity.Player; - -/** - * A flag that stores a string. - */ -public class StringFlag extends AbstractWrappedFlag { - - public StringFlag(String name) { - this(name, ""); - } - - public StringFlag(String name, String defaultValue) { - super(name, String.class, defaultValue); - } - - @Override - public Object serialize(String value) { - return value; - } - - @Override - public String deserialize(Object serialized) { - return (String) serialized; - } - - @Override - public String parse(Player player, String userInput) { - return userInput; - } - -} diff --git a/implementation/interface/src/main/java/org/codemc/worldguardwrapper/implementation/IWorldGuardImplementation.java b/api/src/main/java/org/codemc/worldguardwrapper/implementation/IWorldGuardImplementation.java similarity index 55% rename from implementation/interface/src/main/java/org/codemc/worldguardwrapper/implementation/IWorldGuardImplementation.java rename to api/src/main/java/org/codemc/worldguardwrapper/implementation/IWorldGuardImplementation.java index 3fbecf0..631cd86 100644 --- a/implementation/interface/src/main/java/org/codemc/worldguardwrapper/implementation/IWorldGuardImplementation.java +++ b/api/src/main/java/org/codemc/worldguardwrapper/implementation/IWorldGuardImplementation.java @@ -5,8 +5,8 @@ import org.bukkit.Location; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; -import org.codemc.worldguardwrapper.flags.AbstractWrappedFlag; -import org.codemc.worldguardwrapper.region.WrappedRegion; +import org.codemc.worldguardwrapper.flag.IWrappedFlag; +import org.codemc.worldguardwrapper.region.IWrappedRegion; import java.util.*; @@ -26,36 +26,6 @@ public interface IWorldGuardImplementation { */ int getApiVersion(); - /** - * Query a StateFlag's value for a given player at a given location. - * - * @param player The player - * @param location The location - * @param flagName The flag's name - * @return The flag's value - */ - Optional queryStateFlag(Player player, @NonNull Location location, @NonNull String flagName); - - /** - * Register a {@code StateFlag}. - * - * @param flagName The name of the flag - * @param defaultValue The flag's default value - * @return Whether the flag has been registered - */ - boolean registerStateFlag(@NonNull String flagName, @NonNull Boolean defaultValue); - - /** - * Query a flag's value for a given player at a given location. - * - * @param player The player - * @param location The location - * @param flagName The name of the flag - * @param type The type of the flag's value - * @return The flag's value - */ - Optional queryFlag(Player player, @NonNull Location location, @NonNull String flagName, Class type); - /** * Query a flag's value for a given player at a given location. * @@ -64,17 +34,36 @@ public interface IWorldGuardImplementation { * @param flag The flag * @return The flag's value */ - default Optional queryFlag(Player player, @NonNull Location location, @NonNull AbstractWrappedFlag flag) { - return queryFlag(player, location, flag.getName(), flag.getType()); - } + Optional queryFlag(Player player, @NonNull Location location, @NonNull IWrappedFlag flag); /** - * Register a flag to WorldGuard's flag registry. + * Returns the flag with the given name. * - * @param flag The flag to register - * @return Whether the flag has been registered + * @param name The flag name + * @return The flag, empty if it doesn't exists */ - boolean registerFlag(@NonNull AbstractWrappedFlag flag); + Optional> getFlag(@NonNull String name); + + /** + * Registers a flag to WorldGuard's flag registry. + * + * @param name The flag name + * @param type The flag type + * @param defaultValue the flag default value (if supported by the type), can be null + * @return The created flag, empty if a name conflict occurred + */ + Optional> registerFlag(@NonNull String name, @NonNull Class type, T defaultValue); + + /** + * Registers a flag to WorldGuard's flag registry. + * + * @param name The flag name + * @param type The flag type + * @return The created flag, empty if a name conflict occurred + */ + default Optional> registerFlag(@NonNull String name, @NonNull Class type) { + return registerFlag(name, type, null); + } /** * Get a region by its ID. @@ -83,7 +72,7 @@ public interface IWorldGuardImplementation { * @param id ID of the region * @return The region */ - Optional getRegion(@NonNull World world, @NonNull String id); + Optional getRegion(@NonNull World world, @NonNull String id); /** * Get an unmodifiable map of regions containing the state of the @@ -95,7 +84,7 @@ public interface IWorldGuardImplementation { * @param world The world * @return A map of regions */ - Map getRegions(@NonNull World world); + Map getRegions(@NonNull World world); /** * Get a set of regions at the given location. @@ -103,7 +92,7 @@ public interface IWorldGuardImplementation { * @param location The location * @return A set of regions */ - Set getRegions(@NonNull Location location); + Set getRegions(@NonNull Location location); /** @@ -113,7 +102,7 @@ public interface IWorldGuardImplementation { * @param maximum The maximum location of the area * @return A set of regions */ - Set getRegions(@NonNull Location minimum, @NonNull Location maximum); + Set getRegions(@NonNull Location minimum, @NonNull Location maximum); /** * Add a region. If only two points are given, a cuboid region will be created. @@ -124,7 +113,7 @@ public interface IWorldGuardImplementation { * @param maxY The maximum y coordinate * @return The added region */ - Optional addRegion(@NonNull String id, @NonNull List points, int minY, int maxY); + Optional addRegion(@NonNull String id, @NonNull List points, int minY, int maxY); /** * Add a cuboid region. @@ -134,7 +123,7 @@ public interface IWorldGuardImplementation { * @param point2 The second point of the region * @return The added region */ - default Optional addCuboidRegion(@NonNull String id, @NonNull Location point1, @NonNull Location point2) { + default Optional addCuboidRegion(@NonNull String id, @NonNull Location point1, @NonNull Location point2) { return addRegion(id, Arrays.asList(point1, point2), 0, 0); } @@ -145,6 +134,6 @@ public interface IWorldGuardImplementation { * @param id The region ID * @return A list of removed regions where the first entry is the region specified by {@code id} */ - Optional> removeRegion(@NonNull World world, @NonNull String id); + Optional> removeRegion(@NonNull World world, @NonNull String id); } diff --git a/api/src/main/java/org/codemc/worldguardwrapper/region/PlayerDomain.java b/api/src/main/java/org/codemc/worldguardwrapper/region/IWrappedDomain.java similarity index 89% rename from api/src/main/java/org/codemc/worldguardwrapper/region/PlayerDomain.java rename to api/src/main/java/org/codemc/worldguardwrapper/region/IWrappedDomain.java index 6707682..2a877b2 100644 --- a/api/src/main/java/org/codemc/worldguardwrapper/region/PlayerDomain.java +++ b/api/src/main/java/org/codemc/worldguardwrapper/region/IWrappedDomain.java @@ -3,7 +3,7 @@ package org.codemc.worldguardwrapper.region; import java.util.Set; import java.util.UUID; -public interface PlayerDomain { +public interface IWrappedDomain { Set getPlayers(); diff --git a/api/src/main/java/org/codemc/worldguardwrapper/region/IWrappedRegion.java b/api/src/main/java/org/codemc/worldguardwrapper/region/IWrappedRegion.java new file mode 100644 index 0000000..d1e937d --- /dev/null +++ b/api/src/main/java/org/codemc/worldguardwrapper/region/IWrappedRegion.java @@ -0,0 +1,30 @@ +package org.codemc.worldguardwrapper.region; + +import org.bukkit.Location; +import org.codemc.worldguardwrapper.flag.IWrappedFlag; +import org.codemc.worldguardwrapper.selection.ISelection; + +import java.util.Map; +import java.util.Optional; + +public interface IWrappedRegion { + + ISelection getSelection(); + + String getId(); + + Optional getFlag(IWrappedFlag flag); + + void setFlag(IWrappedFlag flag, T value); + + Map, Object> getFlags(); + + int getPriority(); + + IWrappedDomain getOwners(); + + IWrappedDomain getMembers(); + + boolean contains(Location location); + +} diff --git a/api/src/main/java/org/codemc/worldguardwrapper/region/WrappedRegion.java b/api/src/main/java/org/codemc/worldguardwrapper/region/WrappedRegion.java deleted file mode 100644 index ffe96dc..0000000 --- a/api/src/main/java/org/codemc/worldguardwrapper/region/WrappedRegion.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.codemc.worldguardwrapper.region; - -import org.bukkit.Location; -import org.codemc.worldguardwrapper.selection.Selection; - -import java.util.Map; -import java.util.Optional; - -public interface WrappedRegion { - - Selection getSelection(); - - String getId(); - - Optional getFlag(String name); - - Map getFlags(); - - int getPriority(); - - PlayerDomain getOwners(); - - PlayerDomain getMembers(); - - boolean contains(Location location); - -} diff --git a/api/src/main/java/org/codemc/worldguardwrapper/selection/CuboidSelection.java b/api/src/main/java/org/codemc/worldguardwrapper/selection/ICuboidSelection.java similarity index 72% rename from api/src/main/java/org/codemc/worldguardwrapper/selection/CuboidSelection.java rename to api/src/main/java/org/codemc/worldguardwrapper/selection/ICuboidSelection.java index 384af0c..433cae4 100644 --- a/api/src/main/java/org/codemc/worldguardwrapper/selection/CuboidSelection.java +++ b/api/src/main/java/org/codemc/worldguardwrapper/selection/ICuboidSelection.java @@ -2,7 +2,7 @@ package org.codemc.worldguardwrapper.selection; import org.bukkit.Location; -public interface CuboidSelection extends Selection { +public interface ICuboidSelection extends ISelection { Location getMinimumPoint(); diff --git a/api/src/main/java/org/codemc/worldguardwrapper/selection/PolygonalSelection.java b/api/src/main/java/org/codemc/worldguardwrapper/selection/IPolygonalSelection.java similarity index 76% rename from api/src/main/java/org/codemc/worldguardwrapper/selection/PolygonalSelection.java rename to api/src/main/java/org/codemc/worldguardwrapper/selection/IPolygonalSelection.java index 29a2192..f115381 100644 --- a/api/src/main/java/org/codemc/worldguardwrapper/selection/PolygonalSelection.java +++ b/api/src/main/java/org/codemc/worldguardwrapper/selection/IPolygonalSelection.java @@ -4,7 +4,7 @@ import org.bukkit.Location; import java.util.Set; -public interface PolygonalSelection extends Selection { +public interface IPolygonalSelection extends ISelection { Set getPoints(); diff --git a/api/src/main/java/org/codemc/worldguardwrapper/selection/Selection.java b/api/src/main/java/org/codemc/worldguardwrapper/selection/ISelection.java similarity index 62% rename from api/src/main/java/org/codemc/worldguardwrapper/selection/Selection.java rename to api/src/main/java/org/codemc/worldguardwrapper/selection/ISelection.java index fc7b2f0..0f10b71 100644 --- a/api/src/main/java/org/codemc/worldguardwrapper/selection/Selection.java +++ b/api/src/main/java/org/codemc/worldguardwrapper/selection/ISelection.java @@ -1,4 +1,4 @@ package org.codemc.worldguardwrapper.selection; -public interface Selection { +public interface ISelection { } diff --git a/implementation/interface/pom.xml b/implementation/interface/pom.xml deleted file mode 100644 index 79e9ab0..0000000 --- a/implementation/interface/pom.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - 4.0.0 - - - org.codemc.worldguardwrapper - worldguardwrapper-implementation - 1.0.4-SNAPSHOT - - - worldguardwrapper-implementation-interface - - WorldGuardWrapper-Implementation-Interface - - - - ${project.groupId} - worldguardwrapper-api - 1.0.4-SNAPSHOT - - - diff --git a/implementation/pom.xml b/implementation/pom.xml index 470b738..225c932 100644 --- a/implementation/pom.xml +++ b/implementation/pom.xml @@ -7,14 +7,13 @@ org.codemc.worldguardwrapper worldguardwrapper-parent - 1.0.4-SNAPSHOT + 1.1.0-SNAPSHOT worldguardwrapper-implementation pom - interface v6 v7 @@ -29,6 +28,9 @@ sk89q-repo http://maven.sk89q.com/repo/ + + always + diff --git a/implementation/v6/pom.xml b/implementation/v6/pom.xml index 8351242..a7b8917 100644 --- a/implementation/v6/pom.xml +++ b/implementation/v6/pom.xml @@ -7,7 +7,7 @@ org.codemc.worldguardwrapper worldguardwrapper-implementation - 1.0.4-SNAPSHOT + 1.1.0-SNAPSHOT worldguardwrapper-implementation-v6 @@ -17,8 +17,9 @@ ${project.groupId} - worldguardwrapper-implementation-interface - 1.0.4-SNAPSHOT + worldguardwrapper-api + 1.1.0-SNAPSHOT + provided com.sk89q.worldguard @@ -48,10 +49,6 @@ org.yaml snakeyaml - - com.google.code.findbugs - jsr305 - com.thoughtworks.paranamer paranamer 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 0f66287..ee659b0 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 @@ -1,14 +1,9 @@ package org.codemc.worldguardwrapper.implementation.v6; -import com.sk89q.worldedit.BlockVector; -import com.sk89q.worldedit.BlockVector2D; import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.flags.Flag; -import com.sk89q.worldguard.protection.flags.FlagContext; -import com.sk89q.worldguard.protection.flags.InvalidFlagFormat; -import com.sk89q.worldguard.protection.flags.StateFlag; +import com.sk89q.worldguard.protection.flags.*; import com.sk89q.worldguard.protection.flags.registry.FlagConflictException; import com.sk89q.worldguard.protection.flags.registry.FlagRegistry; import com.sk89q.worldguard.protection.managers.RegionManager; @@ -21,13 +16,14 @@ import org.bukkit.Location; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; -import org.codemc.worldguardwrapper.flags.AbstractWrappedFlag; +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.region.PlayerDomain; -import org.codemc.worldguardwrapper.region.WrappedRegion; -import org.codemc.worldguardwrapper.selection.CuboidSelection; -import org.codemc.worldguardwrapper.selection.PolygonalSelection; -import org.codemc.worldguardwrapper.selection.Selection; +import org.codemc.worldguardwrapper.implementation.v6.flag.WrappedFlag; +import org.codemc.worldguardwrapper.implementation.v6.region.WrappedRegion; +import org.codemc.worldguardwrapper.implementation.v6.utility.WorldGuardVectorUtilities; +import org.codemc.worldguardwrapper.region.IWrappedRegion; import java.util.*; import java.util.stream.Collectors; @@ -52,7 +48,7 @@ public class WorldGuardImplementation implements IWorldGuardImplementation { private Optional getApplicableRegions(@NonNull Location minimum, @NonNull Location maximum) { return getWorldManager(minimum.getWorld()).map(manager -> manager.getApplicableRegions( - new ProtectedCuboidRegion("temp", toBlockVector(minimum), toBlockVector(maximum)))); + new ProtectedCuboidRegion("temp", WorldGuardVectorUtilities.toBlockVector(minimum), WorldGuardVectorUtilities.toBlockVector(maximum)))); } private Optional queryValue(Player player, @NonNull Location location, @NonNull Flag flag) { @@ -60,164 +56,6 @@ public class WorldGuardImplementation implements IWorldGuardImplementation { .orElse(null), flag)); } - private Optional queryState(Player player, @NonNull Location location, @NonNull StateFlag... stateFlags) { - return getApplicableRegions(location).map(applicableRegions -> applicableRegions.queryState(wrapPlayer(player) - .orElse(null), stateFlags)); - } - - private BlockVector toBlockVector(Location location) { - return new BlockVector(location.getX(), location.getY(), location.getZ()); - } - - private Location fromBlockVector(World world, BlockVector vector) { - return new Location(world, vector.getX(), vector.getY(), vector.getZ()); - } - - private List toBlockVector2DList(List locations) { - return locations.stream().map(location -> new BlockVector2D(location.getX(), location.getZ())).collect(Collectors.toList()); - } - - private WrappedRegion toRegion(World world, ProtectedRegion region) { - return new WrappedRegion() { - - @Override - public Selection getSelection() { - if (region instanceof PolygonalSelection) { - return new PolygonalSelection() { - - @Override - public Set getPoints() { - return region.getPoints().stream() - .map(vector -> new BlockVector(vector.toVector())) - .map(vector -> fromBlockVector(world, vector)) - .collect(Collectors.toSet()); - } - - @Override - public int getMinimumY() { - return ((PolygonalSelection) region).getMinimumY(); - } - - @Override - public int getMaximumY() { - return ((PolygonalSelection) region).getMaximumY(); - } - }; - } - return new CuboidSelection() { - - @Override - public Location getMinimumPoint() { - return fromBlockVector(world, region.getMinimumPoint()); - } - - @Override - public Location getMaximumPoint() { - return fromBlockVector(world, region.getMaximumPoint()); - } - }; - } - - @Override - public String getId() { - return region.getId(); - } - - @Override - public Map getFlags() { - Map map = new HashMap<>(); - region.getFlags().forEach((flag, value) -> map.put(flag.getName(), value)); - return map; - } - - @Override - public Optional getFlag(String name) { - return Optional.ofNullable(flagRegistry.get(name)) - .map(region::getFlag); - } - - @Override - public int getPriority() { - return region.getPriority(); - } - - @Override - public PlayerDomain getOwners() { - return new PlayerDomain() { - @Override - public Set getPlayers() { - return region.getOwners().getUniqueIds(); - } - - @Override - public void addPlayer(UUID uuid) { - region.getOwners().addPlayer(uuid); - } - - @Override - public void removePlayer(UUID uuid) { - region.getOwners().removePlayer(uuid); - } - - @Override - public Set getGroups() { - return region.getOwners().getGroups(); - } - - @Override - public void addGroup(String name) { - region.getOwners().addGroup(name); - } - - @Override - public void removeGroup(String name) { - region.getOwners().removeGroup(name); - } - }; - } - - @Override - public PlayerDomain getMembers() { - return new PlayerDomain() { - @Override - public Set getPlayers() { - return region.getMembers().getUniqueIds(); - } - - @Override - public void addPlayer(UUID uuid) { - region.getMembers().addPlayer(uuid); - } - - @Override - public void removePlayer(UUID uuid) { - region.getMembers().removePlayer(uuid); - } - - @Override - public Set getGroups() { - return region.getMembers().getGroups(); - } - - @Override - public void addGroup(String name) { - region.getMembers().addGroup(name); - } - - @Override - public void removeGroup(String name) { - region.getMembers().removeGroup(name); - } - }; - } - - @Override - public boolean contains(Location location) { - return region.contains(toBlockVector(location)); - } - }; - } - @Override public JavaPlugin getWorldGuardPlugin() { return WorldGuardPlugin.inst(); @@ -229,132 +67,113 @@ public class WorldGuardImplementation implements IWorldGuardImplementation { } @Override - public Optional queryStateFlag(Player player, @NonNull Location location, @NonNull String flagId) { - Flag flag = flagRegistry.get(flagId); - if (!(flag instanceof StateFlag)) { - return Optional.empty(); - } - return queryState(player, location, (StateFlag) flag).map(state -> state == StateFlag.State.ALLOW); + public Optional queryFlag(Player player, Location location, IWrappedFlag flag) { + Flag wrappedFlag = ((WrappedFlag) flag).getHandle(); + return queryValue(player, location, wrappedFlag); } @Override - public boolean registerStateFlag(@NonNull String flagId, @NonNull Boolean defaultValue) { - try { - flagRegistry.register(new StateFlag(flagId, defaultValue)); - return true; - } catch (FlagConflictException ignored) { - } - return false; + public Optional> getFlag(String name) { + return Optional.ofNullable(flagRegistry.get(name)) + .map(WrappedFlag::new); } - @Override @SuppressWarnings("unchecked") - public Optional queryFlag(Player player, Location location, String flagName, Class type) { - Flag flag = flagRegistry.get(flagName); - Object value = queryValue(player, location, flag).orElse(null); - if (type.isInstance(value)) { - return Optional.of((T) value); + @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); + } else if (type.equals(Double.class) || type.equals(double.class)) { + wrappedFlag = (Flag) new DoubleFlag(name); + } else if (type.equals(Enum.class)) { + wrappedFlag = new EnumFlag(name, type); + } else if (type.equals(Integer.class) || type.equals(int.class)) { + wrappedFlag = (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); + } else if (type.equals(String.class)) { + wrappedFlag = (Flag) new StringFlag(name, (String) defaultValue); + } else if (type.equals(Vector.class)) { + wrappedFlag = (Flag) new VectorFlag(name); + } else { + throw new IllegalArgumentException("Unsupported flag type " + type.getName()); + } + try { + flagRegistry.register(wrappedFlag); + return Optional.of(new WrappedFlag<>(wrappedFlag)); + } catch (FlagConflictException ignored) { } return Optional.empty(); } @Override - public boolean registerFlag(AbstractWrappedFlag flag) { - Flag wgFlag = new Flag(flag.getName()) { - @Override - public T getDefault() { - return flag.getDefaultValue(); - } - - @Override - public Object marshal(T o) { - return flag.serialize(o); - } - - @Override - public T unmarshal(Object o) { - return flag.deserialize(o); - } - - @Override - public T parseInput(FlagContext context) throws InvalidFlagFormat { - return flag.parse(context.getPlayerSender(), context.getUserInput()); - } - }; - - try { - flagRegistry.register(wgFlag); - return true; - } catch (FlagConflictException ignored) { - } - return false; + public Optional getRegion(World world, String id) { + return getWorldManager(world).map(regionManager -> new WrappedRegion(world, regionManager.getRegion(id))); } @Override - public Optional getRegion(World world, String id) { - return getWorldManager(world).map(regionManager -> toRegion(world, regionManager.getRegion(id))); - } - - @Override - public Map getRegions(World world) { + public Map getRegions(World world) { RegionManager regionManager = plugin.getRegionManager(world); Map regions = regionManager.getRegions(); - Map map = new HashMap<>(); - regions.forEach((name, region) -> map.put(name, toRegion(world, region))); + Map map = new HashMap<>(); + regions.forEach((name, region) -> map.put(name, new WrappedRegion(world, region))); return map; } @Override - public Set getRegions(Location location) { + public Set getRegions(Location location) { ApplicableRegionSet regionSet = getApplicableRegions(location).orElse(null); - Set set = new HashSet<>(); + Set set = new HashSet<>(); if (regionSet == null) { return set; } - regionSet.forEach(region -> set.add(toRegion(location.getWorld(), region))); + regionSet.forEach(region -> set.add(new WrappedRegion(location.getWorld(), region))); return set; } @Override - public Set getRegions(Location minimum, Location maximum) { + public Set getRegions(Location minimum, Location maximum) { ApplicableRegionSet regionSet = getApplicableRegions(minimum, maximum).orElse(null); - Set set = new HashSet<>(); + Set set = new HashSet<>(); if (regionSet == null) { return set; } - regionSet.forEach(region -> set.add(toRegion(minimum.getWorld(), region))); + regionSet.forEach(region -> set.add(new WrappedRegion(minimum.getWorld(), region))); return set; } @Override - public Optional addRegion(String id, List points, int minY, int maxY) { + public Optional addRegion(String id, List points, int minY, int maxY) { ProtectedRegion region; World world = points.get(0).getWorld(); if (points.size() == 2) { - region = new ProtectedCuboidRegion(id, toBlockVector(points.get(0)), toBlockVector(points.get(1))); + region = new ProtectedCuboidRegion(id, WorldGuardVectorUtilities.toBlockVector(points.get(0)), WorldGuardVectorUtilities.toBlockVector(points.get(1))); } else { - region = new ProtectedPolygonalRegion(id, toBlockVector2DList(points), minY, maxY); + region = new ProtectedPolygonalRegion(id, WorldGuardVectorUtilities.toBlockVector2DList(points), minY, maxY); } Optional manager = getWorldManager(world); if (manager.isPresent()) { manager.get().addRegion(region); - return Optional.of(toRegion(world, region)); + return Optional.of(new WrappedRegion(world, region)); } else { return Optional.empty(); } } @Override - public Optional> removeRegion(World world, String id) { + public Optional> removeRegion(World world, String id) { Optional> set = getWorldManager(world).map(manager -> manager.removeRegion(id)); - return set.map(protectedRegions -> protectedRegions.stream().map(region -> toRegion(world, region)) + return set.map(protectedRegions -> protectedRegions.stream().map(region -> new WrappedRegion(world, region)) .collect(Collectors.toSet())); } diff --git a/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/EventListener.java b/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/event/EventListener.java similarity index 87% rename from implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/EventListener.java rename to implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/event/EventListener.java index 40aa4f9..b3587cd 100644 --- a/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/EventListener.java +++ b/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/event/EventListener.java @@ -1,4 +1,4 @@ -package org.codemc.worldguardwrapper.implementation.v6; +package org.codemc.worldguardwrapper.implementation.v6.event; import com.sk89q.worldguard.bukkit.event.block.UseBlockEvent; import com.sk89q.worldguard.bukkit.event.entity.DamageEntityEvent; @@ -7,11 +7,11 @@ import com.sk89q.worldguard.protection.events.DisallowedPVPEvent; import lombok.NoArgsConstructor; import org.bukkit.Bukkit; import org.bukkit.entity.Player; +import org.bukkit.event.Event.Result; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.bukkit.event.Event.Result; -import org.codemc.worldguardwrapper.event.AbstractWrappedEvent; +import org.codemc.worldguardwrapper.event.*; @NoArgsConstructor public class EventListener implements Listener { @@ -24,7 +24,7 @@ public class EventListener implements Listener { return; } - AbstractWrappedEvent event = new org.codemc.worldguardwrapper.event.UseBlockEvent( + AbstractWrappedEvent event = new WrappedUseBlockEvent( worldGuardEvent.getOriginalEvent(), player, worldGuardEvent.getWorld(), worldGuardEvent.getBlocks(), @@ -46,7 +46,7 @@ public class EventListener implements Listener { return; } - AbstractWrappedEvent event = new org.codemc.worldguardwrapper.event.UseEntityEvent( + AbstractWrappedEvent event = new WrappedUseEntityEvent( worldGuardEvent.getOriginalEvent(), player, worldGuardEvent.getTarget(), @@ -68,7 +68,7 @@ public class EventListener implements Listener { return; } - AbstractWrappedEvent event = new org.codemc.worldguardwrapper.event.DamageEntityEvent( + AbstractWrappedEvent event = new WrappedDamageEntityEvent( worldGuardEvent.getOriginalEvent(), player, worldGuardEvent.getTarget(), @@ -84,7 +84,7 @@ public class EventListener implements Listener { @EventHandler(priority = EventPriority.LOW) public void onDisallowedPVP(DisallowedPVPEvent worldGuardEvent) { - AbstractWrappedEvent event = new org.codemc.worldguardwrapper.event.DisallowedPVPEvent( + AbstractWrappedEvent event = new WrappedDisallowedPVPEvent( worldGuardEvent.getAttacker(), worldGuardEvent.getDefender(), worldGuardEvent.getCause()); 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/WrappedFlag.java new file mode 100644 index 0000000..75ab934 --- /dev/null +++ b/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/flag/WrappedFlag.java @@ -0,0 +1,26 @@ +package org.codemc.worldguardwrapper.implementation.v6.flag; + +import com.sk89q.worldguard.protection.flags.Flag; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.codemc.worldguardwrapper.flag.IWrappedFlag; + +import java.util.Optional; + +@AllArgsConstructor +@Getter +public class WrappedFlag implements IWrappedFlag { + + private final Flag handle; + + @Override + public String getName() { + return handle.getName(); + } + + @Override + public Optional getDefaultValue() { + return Optional.ofNullable(handle.getDefault()); + } + +} diff --git a/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/region/WrappedRegion.java b/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/region/WrappedRegion.java new file mode 100644 index 0000000..1fd74b6 --- /dev/null +++ b/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/region/WrappedRegion.java @@ -0,0 +1,174 @@ +package org.codemc.worldguardwrapper.implementation.v6.region; + +import com.sk89q.worldedit.BlockVector; +import com.sk89q.worldguard.protection.flags.Flag; +import com.sk89q.worldguard.protection.regions.ProtectedRegion; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.bukkit.Location; +import org.bukkit.World; +import org.codemc.worldguardwrapper.flag.IWrappedFlag; +import org.codemc.worldguardwrapper.implementation.v6.flag.WrappedFlag; +import org.codemc.worldguardwrapper.implementation.v6.utility.WorldGuardVectorUtilities; +import org.codemc.worldguardwrapper.region.IWrappedDomain; +import org.codemc.worldguardwrapper.region.IWrappedRegion; +import org.codemc.worldguardwrapper.selection.ICuboidSelection; +import org.codemc.worldguardwrapper.selection.IPolygonalSelection; +import org.codemc.worldguardwrapper.selection.ISelection; + +import java.util.*; +import java.util.stream.Collectors; + +@AllArgsConstructor +@Getter +public class WrappedRegion implements IWrappedRegion { + + private final World world; + private final ProtectedRegion handle; + + @Override + public ISelection getSelection() { + if (handle instanceof IPolygonalSelection) { + return new IPolygonalSelection() { + + @Override + public Set getPoints() { + return handle.getPoints().stream() + .map(vector -> new BlockVector(vector.toVector())) + .map(vector -> WorldGuardVectorUtilities.fromBlockVector(world, vector)) + .collect(Collectors.toSet()); + } + + @Override + public int getMinimumY() { + return ((IPolygonalSelection) handle).getMinimumY(); + } + + @Override + public int getMaximumY() { + return ((IPolygonalSelection) handle).getMaximumY(); + } + }; + } + return new ICuboidSelection() { + + @Override + public Location getMinimumPoint() { + return WorldGuardVectorUtilities.fromBlockVector(world, handle.getMinimumPoint()); + } + + @Override + public Location getMaximumPoint() { + return WorldGuardVectorUtilities.fromBlockVector(world, handle.getMaximumPoint()); + } + }; + } + + @Override + public String getId() { + return handle.getId(); + } + + @SuppressWarnings("unchecked") + @Override + public Optional getFlag(IWrappedFlag flag) { + Flag wrappedFlag = ((WrappedFlag) flag).getHandle(); + return Optional.ofNullable(handle.getFlag(wrappedFlag)) + .map(value -> (T) value); + } + + @SuppressWarnings("unchecked") + @Override + public void setFlag(IWrappedFlag flag, T value) { + Flag wrappedFlag = ((WrappedFlag) flag).getHandle(); + handle.setFlag(wrappedFlag, value); + } + + @Override + public Map, Object> getFlags() { + Map, Object> map = new HashMap<>(); + handle.getFlags().forEach((flag, value) -> map.put(new WrappedFlag<>(flag), value)); + return map; + } + + @Override + public int getPriority() { + return handle.getPriority(); + } + + @Override + public IWrappedDomain getOwners() { + return new IWrappedDomain() { + @Override + public Set getPlayers() { + return handle.getOwners().getUniqueIds(); + } + + @Override + public void addPlayer(UUID uuid) { + handle.getOwners().addPlayer(uuid); + } + + @Override + public void removePlayer(UUID uuid) { + handle.getOwners().removePlayer(uuid); + } + + @Override + public Set getGroups() { + return handle.getOwners().getGroups(); + } + + @Override + public void addGroup(String name) { + handle.getOwners().addGroup(name); + } + + @Override + public void removeGroup(String name) { + handle.getOwners().removeGroup(name); + } + }; + } + + @Override + public IWrappedDomain getMembers() { + return new IWrappedDomain() { + @Override + public Set getPlayers() { + return handle.getMembers().getUniqueIds(); + } + + @Override + public void addPlayer(UUID uuid) { + handle.getMembers().addPlayer(uuid); + } + + @Override + public void removePlayer(UUID uuid) { + handle.getMembers().removePlayer(uuid); + } + + @Override + public Set getGroups() { + return handle.getMembers().getGroups(); + } + + @Override + public void addGroup(String name) { + handle.getMembers().addGroup(name); + } + + @Override + public void removeGroup(String name) { + handle.getMembers().removeGroup(name); + } + }; + } + + @Override + public boolean contains(Location location) { + return handle.contains(WorldGuardVectorUtilities.toBlockVector(location)); + } + +} diff --git a/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/utility/WorldGuardVectorUtilities.java b/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/utility/WorldGuardVectorUtilities.java new file mode 100644 index 0000000..988fb8c --- /dev/null +++ b/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/utility/WorldGuardVectorUtilities.java @@ -0,0 +1,26 @@ +package org.codemc.worldguardwrapper.implementation.v6.utility; + +import com.sk89q.worldedit.BlockVector; +import com.sk89q.worldedit.BlockVector2D; +import lombok.experimental.UtilityClass; +import org.bukkit.Location; +import org.bukkit.World; + +import java.util.List; +import java.util.stream.Collectors; + +@UtilityClass +public class WorldGuardVectorUtilities { + + public BlockVector toBlockVector(Location location) { + return new BlockVector(location.getX(), location.getY(), location.getZ()); + } + + public Location fromBlockVector(World world, BlockVector vector) { + return new Location(world, vector.getX(), vector.getY(), vector.getZ()); + } + + public List toBlockVector2DList(List locations) { + return locations.stream().map(location -> new BlockVector2D(location.getX(), location.getZ())).collect(Collectors.toList()); + } +} diff --git a/implementation/v7/pom.xml b/implementation/v7/pom.xml index fcf4d49..e0daafc 100644 --- a/implementation/v7/pom.xml +++ b/implementation/v7/pom.xml @@ -7,7 +7,7 @@ org.codemc.worldguardwrapper worldguardwrapper-implementation - 1.0.4-SNAPSHOT + 1.1.0-SNAPSHOT worldguardwrapper-implementation-v7 @@ -17,13 +17,14 @@ ${project.groupId} - worldguardwrapper-implementation-interface - 1.0.4-SNAPSHOT + worldguardwrapper-api + 1.1.0-SNAPSHOT + provided com.sk89q.worldguard worldguard-legacy - 7.0.0-20181117.063337-9 + 7.0.0-SNAPSHOT provided @@ -34,14 +35,10 @@ com.sk89q commandbook - - - - com.sk89q.worldguard - worldguard-core - 7.0.0-20181117.063337-9 - provided - + + com.sk89q + dummypermscompat + com.sk89q.intake intake @@ -50,10 +47,6 @@ com.sk89q squirrelid - - org.flywaydb - flyway-core - org.khelekore prtree @@ -67,88 +60,20 @@ json-simple - com.google.code.findbugs - jsr305 - - - - - com.sk89q.worldedit - worldedit-bukkit - 7.0.0-20181118.055910-28 - provided - - - com.sk89q - dummypermscompat - - - org.bukkit - bukkit - - - org.bstats - bstats-bukkit + org.flywaydb + flyway-core io.papermc paperlib - net.milkbowl.vault - VaultAPI + org.bstats.bStats-Metrics + bstats-bukkit - org.mockito - mockito-core - - - - - com.sk89q.worldedit - worldedit-core - 7.0.0-20181118.055910-28 - provided - - - de.schlichtherle - truezip - - - rhino - js - - - org.yaml - snakeyaml - - - com.google.guava - guava - - - com.sk89q - jchronic - - - com.google.code.findbugs - jsr305 - - - com.thoughtworks.paranamer - paranamer - - - com.google.code.gson - gson - - - com.sk89q.lib - jlibnoise - - - org.mockito - mockito-core + org.bstats + bstats-bukkit diff --git a/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/WorldGuardImplementation.java b/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/WorldGuardImplementation.java index 98a26a7..a5ee466 100644 --- a/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/WorldGuardImplementation.java +++ b/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/WorldGuardImplementation.java @@ -7,53 +7,41 @@ import com.sk89q.worldguard.LocalPlayer; import com.sk89q.worldguard.WorldGuard; import com.sk89q.worldguard.bukkit.WorldGuardPlugin; import com.sk89q.worldguard.protection.ApplicableRegionSet; -import com.sk89q.worldguard.protection.flags.Flag; -import com.sk89q.worldguard.protection.flags.FlagContext; -import com.sk89q.worldguard.protection.flags.InvalidFlagFormat; -import com.sk89q.worldguard.protection.flags.StateFlag; +import com.sk89q.worldguard.protection.flags.*; import com.sk89q.worldguard.protection.flags.registry.FlagConflictException; import com.sk89q.worldguard.protection.flags.registry.FlagRegistry; import com.sk89q.worldguard.protection.managers.RegionManager; import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion; import com.sk89q.worldguard.protection.regions.ProtectedPolygonalRegion; import com.sk89q.worldguard.protection.regions.ProtectedRegion; +import lombok.NoArgsConstructor; import lombok.NonNull; -import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; -import org.codemc.worldguardwrapper.flags.AbstractWrappedFlag; +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.region.PlayerDomain; -import org.codemc.worldguardwrapper.region.WrappedRegion; -import org.codemc.worldguardwrapper.selection.CuboidSelection; -import org.codemc.worldguardwrapper.selection.PolygonalSelection; -import org.codemc.worldguardwrapper.selection.Selection; +import org.codemc.worldguardwrapper.implementation.v7.flag.WrappedFlag; +import org.codemc.worldguardwrapper.implementation.v7.region.WrappedRegion; +import org.codemc.worldguardwrapper.region.IWrappedRegion; import java.util.*; import java.util.stream.Collectors; +@NoArgsConstructor public class WorldGuardImplementation implements IWorldGuardImplementation { - private final WorldGuard core; - private final FlagRegistry flagRegistry; - private final WorldGuardPlugin plugin; - - public WorldGuardImplementation() { - core = WorldGuard.getInstance(); - flagRegistry = core.getFlagRegistry(); - plugin = WorldGuardPlugin.inst(); - } + private final WorldGuard core = WorldGuard.getInstance(); + private final FlagRegistry flagRegistry = core.getFlagRegistry(); + private final WorldGuardPlugin plugin = WorldGuardPlugin.inst(); private Optional wrapPlayer(Player player) { return Optional.ofNullable(player).map(bukkitPlayer -> plugin.wrapPlayer(player)); } - private Optional getPlayer(LocalPlayer player) { - return Optional.ofNullable(Bukkit.getPlayer(player.getUniqueId())); - } - private Optional getWorldManager(@NonNull World world) { return Optional.ofNullable(core.getPlatform().getRegionContainer().get(BukkitAdapter.adapt(world))); } @@ -72,152 +60,6 @@ public class WorldGuardImplementation implements IWorldGuardImplementation { .orElse(null), flag)); } - private Optional queryState(Player player, @NonNull Location location, @NonNull StateFlag... stateFlags) { - return getApplicableRegions(location).map(applicableRegions -> applicableRegions.queryState(wrapPlayer(player) - .orElse(null), stateFlags)); - } - - private WrappedRegion toRegion(World world, ProtectedRegion region) { - return new WrappedRegion() { - - @Override - public Selection getSelection() { - if (region instanceof PolygonalSelection) { - return new PolygonalSelection() { - - @Override - public Set getPoints() { - return region.getPoints().stream() - .map(BlockVector2::toBlockVector3) - .map(vector -> BukkitAdapter.adapt(world, vector)) - .collect(Collectors.toSet()); - } - - @Override - public int getMinimumY() { - return ((PolygonalSelection) region).getMinimumY(); - } - - @Override - public int getMaximumY() { - return ((PolygonalSelection) region).getMaximumY(); - } - }; - } - return new CuboidSelection() { - - @Override - public Location getMinimumPoint() { - return BukkitAdapter.adapt(world, region.getMinimumPoint()); - } - - @Override - public Location getMaximumPoint() { - return BukkitAdapter.adapt(world, region.getMaximumPoint()); - } - }; - } - - @Override - public String getId() { - return region.getId(); - } - - @Override - public Map getFlags() { - Map map = new HashMap<>(); - region.getFlags().forEach((flag, value) -> map.put(flag.getName(), value)); - return map; - } - - @Override - public Optional getFlag(String name) { - return Optional.ofNullable(flagRegistry.get(name)) - .map(region::getFlag); - } - - @Override - public int getPriority() { - return region.getPriority(); - } - - @Override - public PlayerDomain getOwners() { - return new PlayerDomain() { - @Override - public Set getPlayers() { - return region.getOwners().getUniqueIds(); - } - - @Override - public void addPlayer(UUID uuid) { - region.getOwners().addPlayer(uuid); - } - - @Override - public void removePlayer(UUID uuid) { - region.getOwners().removePlayer(uuid); - } - - @Override - public Set getGroups() { - return region.getOwners().getGroups(); - } - - @Override - public void addGroup(String name) { - region.getOwners().addGroup(name); - } - - @Override - public void removeGroup(String name) { - region.getOwners().removeGroup(name); - } - }; - } - - @Override - public PlayerDomain getMembers() { - return new PlayerDomain() { - @Override - public Set getPlayers() { - return region.getMembers().getUniqueIds(); - } - - @Override - public void addPlayer(UUID uuid) { - region.getMembers().addPlayer(uuid); - } - - @Override - public void removePlayer(UUID uuid) { - region.getMembers().removePlayer(uuid); - } - - @Override - public Set getGroups() { - return region.getMembers().getGroups(); - } - - @Override - public void addGroup(String name) { - region.getMembers().addGroup(name); - } - - @Override - public void removeGroup(String name) { - region.getMembers().removeGroup(name); - } - }; - } - - @Override - public boolean contains(Location location) { - return region.contains(BukkitAdapter.asBlockVector(location)); - } - }; - } - @Override public JavaPlugin getWorldGuardPlugin() { return WorldGuardPlugin.inst(); @@ -229,113 +71,94 @@ public class WorldGuardImplementation implements IWorldGuardImplementation { } @Override - public Optional queryStateFlag(Player player, @NonNull Location location, @NonNull String flagId) { - Flag flag = flagRegistry.get(flagId); - if (!(flag instanceof StateFlag)) { - return Optional.empty(); - } - return queryState(player, location, (StateFlag) flag).map(state -> state == StateFlag.State.ALLOW); + public Optional queryFlag(Player player, Location location, IWrappedFlag flag) { + Flag wrappedFlag = ((WrappedFlag) flag).getHandle(); + return queryValue(player, location, wrappedFlag); } @Override - public boolean registerStateFlag(@NonNull String flagId, @NonNull Boolean defaultValue) { - try { - flagRegistry.register(new StateFlag(flagId, defaultValue)); - return true; - } catch (FlagConflictException ignored) { - } - return false; + public Optional> getFlag(String name) { + return Optional.ofNullable(flagRegistry.get(name)) + .map(WrappedFlag::new); } - @Override @SuppressWarnings("unchecked") - public Optional queryFlag(Player player, Location location, String flagName, Class type) { - Flag flag = flagRegistry.get(flagName); - Object value = queryValue(player, location, flag).orElse(null); - if (type.isInstance(value)) { - return Optional.of((T) value); + @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); + } else if (type.equals(Double.class) || type.equals(double.class)) { + wrappedFlag = (Flag) new DoubleFlag(name); + } else if (type.equals(Enum.class)) { + wrappedFlag = new EnumFlag(name, type); + } else if (type.equals(Integer.class) || type.equals(int.class)) { + wrappedFlag = (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); + } else if (type.equals(String.class)) { + wrappedFlag = (Flag) new StringFlag(name, (String) defaultValue); + } else if (type.equals(Vector.class)) { + wrappedFlag = (Flag) new VectorFlag(name); + } else { + throw new IllegalArgumentException("Unsupported flag type " + type.getName()); + } + try { + flagRegistry.register(wrappedFlag); + return Optional.of(new WrappedFlag<>(wrappedFlag)); + } catch (FlagConflictException ignored) { } return Optional.empty(); } @Override - public boolean registerFlag(AbstractWrappedFlag flag) { - Flag wgFlag = new Flag(flag.getName()) { - @Override - public T getDefault() { - return flag.getDefaultValue(); - } - - @Override - public Object marshal(T o) { - return flag.serialize(o); - } - - @Override - public T unmarshal(Object o) { - return flag.deserialize(o); - } - - @Override - public T parseInput(FlagContext context) throws InvalidFlagFormat { - return flag.parse(getPlayer(context.getPlayerSender()).orElse(null), context.getUserInput()); - } - }; - - try { - flagRegistry.register(wgFlag); - return true; - } catch (FlagConflictException ignored) { - } - return false; - } - - @Override - public Optional getRegion(World world, String id) { + public Optional getRegion(World world, String id) { return getWorldManager(world) .map(regionManager -> regionManager.getRegion(id)) - .map(region -> toRegion(world, region)); + .map(region -> new WrappedRegion(world, region)); } @Override - public Map getRegions(World world) { + public Map getRegions(World world) { RegionManager regionManager = core.getPlatform().getRegionContainer().get(new BukkitWorld(world)); if (regionManager == null) { return Collections.emptyMap(); } Map regions = regionManager.getRegions(); - Map map = new HashMap<>(); - regions.forEach((name, region) -> map.put(name, toRegion(world, region))); + Map map = new HashMap<>(); + regions.forEach((name, region) -> map.put(name, new WrappedRegion(world, region))); return map; } @Override - public Set getRegions(Location location) { + public Set getRegions(Location location) { ApplicableRegionSet regionSet = getApplicableRegions(location).orElse(null); if (regionSet == null) { return Collections.emptySet(); } return regionSet.getRegions().stream() - .map(region -> toRegion(location.getWorld(), region)) + .map(region -> new WrappedRegion(location.getWorld(), region)) .collect(Collectors.toSet()); } @Override - public Set getRegions(Location minimum, Location maximum) { + public Set getRegions(Location minimum, Location maximum) { ApplicableRegionSet regionSet = getApplicableRegions(minimum, maximum).orElse(null); if (regionSet == null) { return Collections.emptySet(); } return regionSet.getRegions().stream() - .map(region -> toRegion(minimum.getWorld(), region)) + .map(region -> new WrappedRegion(minimum.getWorld(), region)) .collect(Collectors.toSet()); } @Override - public Optional addRegion(String id, List points, int minY, int maxY) { + public Optional addRegion(String id, List points, int minY, int maxY) { ProtectedRegion region; World world = points.get(0).getWorld(); if (points.size() == 2) { @@ -352,16 +175,16 @@ public class WorldGuardImplementation implements IWorldGuardImplementation { Optional manager = getWorldManager(world); if (manager.isPresent()) { manager.get().addRegion(region); - return Optional.of(toRegion(world, region)); + return Optional.of(new WrappedRegion(world, region)); } else { return Optional.empty(); } } @Override - public Optional> removeRegion(World world, String id) { + public Optional> removeRegion(World world, String id) { Optional> set = getWorldManager(world).map(manager -> manager.removeRegion(id)); return set.map(protectedRegions -> protectedRegions.stream() - .map(region -> toRegion(world, region)).collect(Collectors.toSet())); + .map(region -> new WrappedRegion(world, region)).collect(Collectors.toSet())); } } diff --git a/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/EventListener.java b/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/event/EventListener.java similarity index 87% rename from implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/EventListener.java rename to implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/event/EventListener.java index 9da9cba..c551607 100644 --- a/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/EventListener.java +++ b/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/event/EventListener.java @@ -1,4 +1,4 @@ -package org.codemc.worldguardwrapper.implementation.v7; +package org.codemc.worldguardwrapper.implementation.v7.event; import com.sk89q.worldguard.bukkit.event.block.UseBlockEvent; import com.sk89q.worldguard.bukkit.event.entity.DamageEntityEvent; @@ -11,7 +11,7 @@ import org.bukkit.event.Event.Result; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; -import org.codemc.worldguardwrapper.event.AbstractWrappedEvent; +import org.codemc.worldguardwrapper.event.*; @NoArgsConstructor public class EventListener implements Listener { @@ -24,7 +24,7 @@ public class EventListener implements Listener { return; } - AbstractWrappedEvent event = new org.codemc.worldguardwrapper.event.UseBlockEvent( + AbstractWrappedEvent event = new WrappedUseBlockEvent( worldGuardEvent.getOriginalEvent(), player, worldGuardEvent.getWorld(), worldGuardEvent.getBlocks(), @@ -46,7 +46,7 @@ public class EventListener implements Listener { return; } - AbstractWrappedEvent event = new org.codemc.worldguardwrapper.event.UseEntityEvent( + AbstractWrappedEvent event = new WrappedUseEntityEvent( worldGuardEvent.getOriginalEvent(), player, worldGuardEvent.getTarget(), @@ -68,7 +68,7 @@ public class EventListener implements Listener { return; } - AbstractWrappedEvent event = new org.codemc.worldguardwrapper.event.DamageEntityEvent( + AbstractWrappedEvent event = new WrappedDamageEntityEvent( worldGuardEvent.getOriginalEvent(), player, worldGuardEvent.getTarget(), @@ -84,7 +84,7 @@ public class EventListener implements Listener { @EventHandler(priority = EventPriority.LOW) public void onDisallowedPVP(DisallowedPVPEvent worldGuardEvent) { - AbstractWrappedEvent event = new org.codemc.worldguardwrapper.event.DisallowedPVPEvent( + AbstractWrappedEvent event = new WrappedDisallowedPVPEvent( worldGuardEvent.getAttacker(), worldGuardEvent.getDefender(), worldGuardEvent.getCause()); diff --git a/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/flag/WrappedFlag.java b/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/flag/WrappedFlag.java new file mode 100644 index 0000000..9aaab3f --- /dev/null +++ b/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/flag/WrappedFlag.java @@ -0,0 +1,26 @@ +package org.codemc.worldguardwrapper.implementation.v7.flag; + +import com.sk89q.worldguard.protection.flags.Flag; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.codemc.worldguardwrapper.flag.IWrappedFlag; + +import java.util.Optional; + +@AllArgsConstructor +@Getter +public class WrappedFlag implements IWrappedFlag { + + private final Flag handle; + + @Override + public String getName() { + return handle.getName(); + } + + @Override + public Optional getDefaultValue() { + return Optional.ofNullable(handle.getDefault()); + } + +} diff --git a/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/region/WrappedRegion.java b/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/region/WrappedRegion.java new file mode 100644 index 0000000..bd7a7e6 --- /dev/null +++ b/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/region/WrappedRegion.java @@ -0,0 +1,174 @@ +package org.codemc.worldguardwrapper.implementation.v7.region; + +import com.sk89q.worldedit.bukkit.BukkitAdapter; +import com.sk89q.worldedit.math.BlockVector2; +import com.sk89q.worldguard.protection.flags.Flag; +import com.sk89q.worldguard.protection.regions.ProtectedRegion; +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.bukkit.Location; +import org.bukkit.World; +import org.codemc.worldguardwrapper.flag.IWrappedFlag; +import org.codemc.worldguardwrapper.implementation.v7.flag.WrappedFlag; +import org.codemc.worldguardwrapper.region.IWrappedDomain; +import org.codemc.worldguardwrapper.region.IWrappedRegion; +import org.codemc.worldguardwrapper.selection.ICuboidSelection; +import org.codemc.worldguardwrapper.selection.IPolygonalSelection; +import org.codemc.worldguardwrapper.selection.ISelection; + +import java.util.*; +import java.util.stream.Collectors; + +@AllArgsConstructor +@Getter +public class WrappedRegion implements IWrappedRegion { + + private final World world; + private final ProtectedRegion handle; + + @Override + public ISelection getSelection() { + if (handle instanceof IPolygonalSelection) { + return new IPolygonalSelection() { + + @Override + public Set getPoints() { + return handle.getPoints().stream() + .map(BlockVector2::toBlockVector3) + .map(vector -> BukkitAdapter.adapt(world, vector)) + .collect(Collectors.toSet()); + } + + @Override + public int getMinimumY() { + return ((IPolygonalSelection) handle).getMinimumY(); + } + + @Override + public int getMaximumY() { + return ((IPolygonalSelection) handle).getMaximumY(); + } + }; + } + return new ICuboidSelection() { + + @Override + public Location getMinimumPoint() { + return BukkitAdapter.adapt(world, handle.getMinimumPoint()); + } + + @Override + public Location getMaximumPoint() { + return BukkitAdapter.adapt(world, handle.getMaximumPoint()); + } + }; + } + + @Override + public String getId() { + return handle.getId(); + } + + @SuppressWarnings("unchecked") + @Override + public Optional getFlag(IWrappedFlag flag) { + Flag wrappedFlag = ((WrappedFlag) flag).getHandle(); + return Optional.ofNullable(handle.getFlag(wrappedFlag)) + .map(value -> (T) value); + } + + @SuppressWarnings("unchecked") + @Override + public void setFlag(IWrappedFlag flag, T value) { + Flag wrappedFlag = ((WrappedFlag) flag).getHandle(); + handle.setFlag(wrappedFlag, value); + } + + @Override + public Map, Object> getFlags() { + Map, Object> map = new HashMap<>(); + handle.getFlags().forEach((flag, value) -> map.put(new WrappedFlag<>(flag), value)); + return map; + } + + @Override + public int getPriority() { + return handle.getPriority(); + } + + @Override + public IWrappedDomain getOwners() { + return new IWrappedDomain() { + @Override + public Set getPlayers() { + return handle.getOwners().getUniqueIds(); + } + + @Override + public void addPlayer(UUID uuid) { + handle.getOwners().addPlayer(uuid); + } + + @Override + public void removePlayer(UUID uuid) { + handle.getOwners().removePlayer(uuid); + } + + @Override + public Set getGroups() { + return handle.getOwners().getGroups(); + } + + @Override + public void addGroup(String name) { + handle.getOwners().addGroup(name); + } + + @Override + public void removeGroup(String name) { + handle.getOwners().removeGroup(name); + } + }; + } + + @Override + public IWrappedDomain getMembers() { + return new IWrappedDomain() { + @Override + public Set getPlayers() { + return handle.getMembers().getUniqueIds(); + } + + @Override + public void addPlayer(UUID uuid) { + handle.getMembers().addPlayer(uuid); + } + + @Override + public void removePlayer(UUID uuid) { + handle.getMembers().removePlayer(uuid); + } + + @Override + public Set getGroups() { + return handle.getMembers().getGroups(); + } + + @Override + public void addGroup(String name) { + handle.getMembers().addGroup(name); + } + + @Override + public void removeGroup(String name) { + handle.getMembers().removeGroup(name); + } + }; + } + + @Override + public boolean contains(Location location) { + return handle.contains(BukkitAdapter.asBlockVector(location)); + } + +} diff --git a/library/pom.xml b/library/pom.xml index d22b693..5c61084 100644 --- a/library/pom.xml +++ b/library/pom.xml @@ -7,7 +7,7 @@ org.codemc.worldguardwrapper worldguardwrapper-parent - 1.0.4-SNAPSHOT + 1.1.0-SNAPSHOT worldguardwrapper @@ -15,17 +15,22 @@ WorldGuardWrapper-Library + + ${project.groupId} + worldguardwrapper-api + 1.1.0-SNAPSHOT + ${project.groupId} worldguardwrapper-implementation-v6 - 1.0.4-SNAPSHOT - true + 1.1.0-SNAPSHOT + runtime ${project.groupId} worldguardwrapper-implementation-v7 - 1.0.4-SNAPSHOT - true + 1.1.0-SNAPSHOT + runtime diff --git a/library/src/main/java/org/codemc/worldguardwrapper/WorldGuardWrapper.java b/library/src/main/java/org/codemc/worldguardwrapper/WorldGuardWrapper.java index c96e832..42fe80d 100644 --- a/library/src/main/java/org/codemc/worldguardwrapper/WorldGuardWrapper.java +++ b/library/src/main/java/org/codemc/worldguardwrapper/WorldGuardWrapper.java @@ -27,13 +27,20 @@ public class WorldGuardWrapper implements IWorldGuardImplementation { private Listener eventListener; private WorldGuardWrapper() { + String version; try { Class.forName("com.sk89q.worldguard.WorldGuard"); - delegate = new org.codemc.worldguardwrapper.implementation.v7.WorldGuardImplementation(); - eventListener = new org.codemc.worldguardwrapper.implementation.v7.EventListener(); + version = "v7"; } catch (ClassNotFoundException e) { - delegate = new org.codemc.worldguardwrapper.implementation.v6.WorldGuardImplementation(); - eventListener = new org.codemc.worldguardwrapper.implementation.v6.EventListener(); + version = "v6"; + } + try { + delegate = (IWorldGuardImplementation) Class.forName("org.codemc.worldguardwrapper.implementation." + + version + ".WorldGuardImplementation").newInstance(); + eventListener = (Listener) Class.forName("new org.codemc.worldguardwrapper.implementation." + + version + ".event.EventListener").newInstance(); + } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { + throw new RuntimeException("Unable to initialize WorldGuard implementation " + version, e); } } diff --git a/pom.xml b/pom.xml index 0630e94..00d116b 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.codemc.worldguardwrapper worldguardwrapper-parent - 1.0.4-SNAPSHOT + 1.1.0-SNAPSHOT pom @@ -149,10 +149,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.2.0 - - false - + 3.2.1 org.apache.maven.plugins