From a88cab6cc957df8521a413c14940b4b3baa1562a Mon Sep 17 00:00:00 2001 From: Gabriele C Date: Sat, 23 Feb 2019 01:00:04 +0100 Subject: [PATCH] Add legacy (WG 6.1) support --- README.md | 2 +- api/pom.xml | 2 +- implementation/legacy/pom.xml | 41 ++++ .../legacy/WorldGuardImplementation.java | 185 ++++++++++++++++++ .../legacy/event/EventListener.java | 100 ++++++++++ .../legacy/flag/AbstractWrappedFlag.java | 30 +++ .../legacy/flag/WrappedPrimitiveFlag.java | 23 +++ .../legacy/flag/WrappedStatusFlag.java | 28 +++ .../legacy/region/WrappedRegion.java | 169 ++++++++++++++++ .../utility/WorldGuardVectorUtilities.java | 27 +++ implementation/pom.xml | 3 +- implementation/v6/pom.xml | 4 +- implementation/v7/pom.xml | 4 +- implementation/v7fawe/pom.xml | 4 +- library/pom.xml | 15 +- .../worldguardwrapper/WorldGuardWrapper.java | 16 +- pom.xml | 2 +- 17 files changed, 636 insertions(+), 19 deletions(-) create mode 100644 implementation/legacy/pom.xml create mode 100644 implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/WorldGuardImplementation.java create mode 100644 implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/event/EventListener.java create mode 100644 implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/flag/AbstractWrappedFlag.java create mode 100644 implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/flag/WrappedPrimitiveFlag.java create mode 100644 implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/flag/WrappedStatusFlag.java create mode 100644 implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/region/WrappedRegion.java create mode 100644 implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/utility/WorldGuardVectorUtilities.java diff --git a/README.md b/README.md index 3d6d2e0..a8544fd 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.2-SNAPSHOT + 1.1.4-SNAPSHOT ``` diff --git a/api/pom.xml b/api/pom.xml index 1d9e419..fa907b1 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -7,7 +7,7 @@ org.codemc.worldguardwrapper worldguardwrapper-parent - 1.1.3-SNAPSHOT + 1.1.4-SNAPSHOT worldguardwrapper-api diff --git a/implementation/legacy/pom.xml b/implementation/legacy/pom.xml new file mode 100644 index 0000000..ffbac0a --- /dev/null +++ b/implementation/legacy/pom.xml @@ -0,0 +1,41 @@ + + + 4.0.0 + + + org.codemc.worldguardwrapper + worldguardwrapper-implementation + 1.1.4-SNAPSHOT + + + worldguardwrapper-implementation-legacy + + WorldGuardWrapper-Implementation-Legacy + + + + sk89q-repo + http://maven.sk89q.com/repo/ + + always + + + + + + + ${project.groupId} + worldguardwrapper-api + 1.1.4-SNAPSHOT + provided + + + com.sk89q + worldguard + 6.1 + provided + + + diff --git a/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/WorldGuardImplementation.java b/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/WorldGuardImplementation.java new file mode 100644 index 0000000..ed6ac18 --- /dev/null +++ b/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/WorldGuardImplementation.java @@ -0,0 +1,185 @@ +package org.codemc.worldguardwrapper.implementation.legacy; + +import com.sk89q.worldguard.LocalPlayer; +import com.sk89q.worldguard.bukkit.WorldGuardPlugin; +import com.sk89q.worldguard.protection.ApplicableRegionSet; +import com.sk89q.worldguard.protection.flags.DefaultFlag; +import com.sk89q.worldguard.protection.flags.Flag; +import com.sk89q.worldguard.protection.flags.StateFlag; +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.Location; +import org.bukkit.World; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; +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.legacy.flag.AbstractWrappedFlag; +import org.codemc.worldguardwrapper.implementation.legacy.flag.WrappedPrimitiveFlag; +import org.codemc.worldguardwrapper.implementation.legacy.flag.WrappedStatusFlag; +import org.codemc.worldguardwrapper.implementation.legacy.region.WrappedRegion; +import org.codemc.worldguardwrapper.implementation.legacy.utility.WorldGuardVectorUtilities; +import org.codemc.worldguardwrapper.region.IWrappedRegion; + +import java.util.*; +import java.util.stream.Collectors; + +@NoArgsConstructor +public class WorldGuardImplementation implements IWorldGuardImplementation { + + private final WorldGuardPlugin plugin = WorldGuardPlugin.inst(); + + private Optional wrapPlayer(Player player) { + return Optional.ofNullable(player).map(bukkitPlayer -> plugin.wrapPlayer(player)); + } + + private Optional getWorldManager(@NonNull World world) { + return Optional.ofNullable(plugin.getRegionManager(world)); + } + + private Optional getApplicableRegions(@NonNull Location location) { + return getWorldManager(location.getWorld()).map(manager -> manager.getApplicableRegions(location)); + } + + private Optional getApplicableRegions(@NonNull Location minimum, @NonNull Location maximum) { + return getWorldManager(minimum.getWorld()).map(manager -> manager.getApplicableRegions( + new ProtectedCuboidRegion("temp", WorldGuardVectorUtilities.toBlockVector(minimum), WorldGuardVectorUtilities.toBlockVector(maximum)))); + } + + private Optional queryValue(Player player, @NonNull Location location, @NonNull Flag flag) { + return getApplicableRegions(location).map(applicableRegions -> applicableRegions.queryValue(wrapPlayer(player) + .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(); + } + + @Override + public int getApiVersion() { + return -6; + } + + @Override + public Optional> getFlag(String name, Class type) { + for (Flag currentFlag : DefaultFlag.getFlags()) { + if (currentFlag.getName().equalsIgnoreCase(name)) { + return Optional.of(wrap(currentFlag, type)); + } + } + return Optional.empty(); + } + + @Override + public Optional queryFlag(Player player, Location location, IWrappedFlag flag) { + AbstractWrappedFlag wrappedFlag = (AbstractWrappedFlag) flag; + return wrappedFlag.fromWGValue(queryValue(player, location, wrappedFlag.getHandle())); + } + + @Override + public Optional> registerFlag(String name, Class type, T defaultValue) { + throw new UnsupportedOperationException("Custom flags aren't supported in this version of WorldGuard!"); + } + + @Override + public Optional getRegion(World world, String id) { + return getWorldManager(world).map(regionManager -> new WrappedRegion(world, regionManager.getRegion(id))); + } + + @Override + 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, new WrappedRegion(world, region))); + + return map; + } + + @Override + public Set getRegions(Location location) { + ApplicableRegionSet regionSet = getApplicableRegions(location).orElse(null); + Set set = new HashSet<>(); + + if (regionSet == null) { + return set; + } + + regionSet.forEach(region -> set.add(new WrappedRegion(location.getWorld(), region))); + return set; + } + + @Override + public Set getRegions(Location minimum, Location maximum) { + ApplicableRegionSet regionSet = getApplicableRegions(minimum, maximum).orElse(null); + Set set = new HashSet<>(); + + if (regionSet == null) { + return set; + } + + regionSet.forEach(region -> set.add(new WrappedRegion(minimum.getWorld(), region))); + return set; + } + + @Override + 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, WorldGuardVectorUtilities.toBlockVector(points.get(0)), WorldGuardVectorUtilities.toBlockVector(points.get(1))); + } else { + region = new ProtectedPolygonalRegion(id, WorldGuardVectorUtilities.toBlockVector2DList(points), minY, maxY); + } + + Optional manager = getWorldManager(world); + if (manager.isPresent()) { + manager.get().addRegion(region); + return Optional.of(new WrappedRegion(world, region)); + } else { + return Optional.empty(); + } + } + + @Override + public Optional> removeRegion(World world, String id) { + Optional> set = getWorldManager(world).map(manager -> manager.removeRegion(id)); + return set.map(protectedRegions -> protectedRegions.stream().map(region -> new WrappedRegion(world, region)) + .collect(Collectors.toSet())); + } + +} diff --git a/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/event/EventListener.java b/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/event/EventListener.java new file mode 100644 index 0000000..c5642f7 --- /dev/null +++ b/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/event/EventListener.java @@ -0,0 +1,100 @@ +package org.codemc.worldguardwrapper.implementation.legacy.event; + +import com.sk89q.worldguard.bukkit.event.block.UseBlockEvent; +import com.sk89q.worldguard.bukkit.event.entity.DamageEntityEvent; +import com.sk89q.worldguard.bukkit.event.entity.UseEntityEvent; +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.codemc.worldguardwrapper.event.*; + +@NoArgsConstructor +public class EventListener implements Listener { + + @EventHandler(priority = EventPriority.LOW) + public void onUseBlock(UseBlockEvent worldGuardEvent) { + Player player = worldGuardEvent.getCause().getFirstPlayer(); + if (player == null) { + // Only forward player events for now + return; + } + + AbstractWrappedEvent event = new WrappedUseBlockEvent( + worldGuardEvent.getOriginalEvent(), + player, worldGuardEvent.getWorld(), + worldGuardEvent.getBlocks(), + worldGuardEvent.getEffectiveMaterial()); + Bukkit.getServer().getPluginManager().callEvent(event); + + if (event.getResult() != Result.DEFAULT) { + // DEFAULT = Result probably has not been touched by the handler, + // so don't touch the original result either. + worldGuardEvent.setResult(event.getResult()); + } + } + + @EventHandler(priority = EventPriority.LOW) + public void onUseEntity(UseEntityEvent worldGuardEvent) { + Player player = worldGuardEvent.getCause().getFirstPlayer(); + if (player == null) { + // Only forward player events for now + return; + } + + AbstractWrappedEvent event = new WrappedUseEntityEvent( + worldGuardEvent.getOriginalEvent(), + player, + worldGuardEvent.getTarget(), + worldGuardEvent.getEntity()); + Bukkit.getServer().getPluginManager().callEvent(event); + + if (event.getResult() != Result.DEFAULT) { + // DEFAULT = Result probably has not been touched by the handler, + // so don't touch the original result either. + worldGuardEvent.setResult(event.getResult()); + } + } + + @EventHandler(priority = EventPriority.LOW) + public void onDamageEntity(DamageEntityEvent worldGuardEvent) { + Player player = worldGuardEvent.getCause().getFirstPlayer(); + if (player == null) { + // Only forward player events for now + return; + } + + AbstractWrappedEvent event = new WrappedDamageEntityEvent( + worldGuardEvent.getOriginalEvent(), + player, + worldGuardEvent.getTarget(), + worldGuardEvent.getEntity()); + Bukkit.getServer().getPluginManager().callEvent(event); + + if (event.getResult() != Result.DEFAULT) { + // DEFAULT = Result probably has not been touched by the handler, + // so don't touch the original result either. + worldGuardEvent.setResult(event.getResult()); + } + } + + @EventHandler(priority = EventPriority.LOW) + public void onDisallowedPVP(DisallowedPVPEvent worldGuardEvent) { + AbstractWrappedEvent event = new WrappedDisallowedPVPEvent( + worldGuardEvent.getAttacker(), + worldGuardEvent.getDefender(), + worldGuardEvent.getCause()); + Bukkit.getServer().getPluginManager().callEvent(event); + + if (event.getResult() != Result.DEFAULT) { + // DEFAULT = Result probably has not been touched by the handler, + // so don't touch the original result either. + worldGuardEvent.setCancelled(event.getResult() == Result.DENY); + } + } + +} diff --git a/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/flag/AbstractWrappedFlag.java b/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/flag/AbstractWrappedFlag.java new file mode 100644 index 0000000..af0080d --- /dev/null +++ b/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/flag/AbstractWrappedFlag.java @@ -0,0 +1,30 @@ +package org.codemc.worldguardwrapper.implementation.legacy.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 abstract class AbstractWrappedFlag implements IWrappedFlag { + + private final Flag handle; + + @Override + public String getName() { + return handle.getName(); + } + + public abstract Optional fromWGValue(Object value); + + public abstract Optional fromWrapperValue(T value); + + @Override + public Optional getDefaultValue() { + return fromWGValue(handle.getDefault()); + } + +} diff --git a/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/flag/WrappedPrimitiveFlag.java b/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/flag/WrappedPrimitiveFlag.java new file mode 100644 index 0000000..154d99c --- /dev/null +++ b/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/flag/WrappedPrimitiveFlag.java @@ -0,0 +1,23 @@ +package org.codemc.worldguardwrapper.implementation.legacy.flag; + +import com.sk89q.worldguard.protection.flags.Flag; + +import java.util.Optional; + +public class WrappedPrimitiveFlag extends AbstractWrappedFlag { + + public WrappedPrimitiveFlag(Flag handle) { + super(handle); + } + + @Override + public Optional fromWGValue(Object value) { + return Optional.ofNullable((T) value); + } + + @Override + public Optional fromWrapperValue(T value) { + return Optional.ofNullable(value); + } + +} diff --git a/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/flag/WrappedStatusFlag.java b/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/flag/WrappedStatusFlag.java new file mode 100644 index 0000000..8082790 --- /dev/null +++ b/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/flag/WrappedStatusFlag.java @@ -0,0 +1,28 @@ +package org.codemc.worldguardwrapper.implementation.legacy.flag; + +import com.sk89q.worldguard.protection.flags.Flag; +import com.sk89q.worldguard.protection.flags.StateFlag; +import org.codemc.worldguardwrapper.flag.IWrappedStatusFlag; +import org.codemc.worldguardwrapper.flag.WrappedState; + +import java.util.Optional; + +public class WrappedStatusFlag extends AbstractWrappedFlag implements IWrappedStatusFlag { + + public WrappedStatusFlag(Flag handle) { + super(handle); + } + + @Override + public Optional fromWGValue(Object value) { + return Optional.ofNullable(value) + .map(state -> state == StateFlag.State.ALLOW ? WrappedState.ALLOW : WrappedState.DENY); + } + + @Override + public Optional fromWrapperValue(WrappedState value) { + return Optional.ofNullable(value) + .map(state -> state == WrappedState.ALLOW ? StateFlag.State.ALLOW : StateFlag.State.DENY); + } + +} diff --git a/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/region/WrappedRegion.java b/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/region/WrappedRegion.java new file mode 100644 index 0000000..20f3d46 --- /dev/null +++ b/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/region/WrappedRegion.java @@ -0,0 +1,169 @@ +package org.codemc.worldguardwrapper.implementation.legacy.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.legacy.utility.WorldGuardVectorUtilities; +import org.codemc.worldguardwrapper.implementation.legacy.flag.AbstractWrappedFlag; +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.Optional; +import java.util.Set; +import java.util.UUID; +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) { + AbstractWrappedFlag wrappedFlag = (AbstractWrappedFlag) flag; + return Optional.ofNullable(handle.getFlag(wrappedFlag.getHandle())) + .map(value -> (T) wrappedFlag.fromWGValue(value)); + } + + @SuppressWarnings("unchecked") + @Override + public void setFlag(IWrappedFlag flag, T value) { + AbstractWrappedFlag wrappedFlag = (AbstractWrappedFlag) flag; + handle.setFlag((Flag) wrappedFlag.getHandle(), wrappedFlag.fromWrapperValue(value).orElse(null)); + } + + @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/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/utility/WorldGuardVectorUtilities.java b/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/utility/WorldGuardVectorUtilities.java new file mode 100644 index 0000000..e517a01 --- /dev/null +++ b/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/utility/WorldGuardVectorUtilities.java @@ -0,0 +1,27 @@ +package org.codemc.worldguardwrapper.implementation.legacy.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/pom.xml b/implementation/pom.xml index 12ca5d3..f83e855 100644 --- a/implementation/pom.xml +++ b/implementation/pom.xml @@ -7,13 +7,14 @@ org.codemc.worldguardwrapper worldguardwrapper-parent - 1.1.3-SNAPSHOT + 1.1.4-SNAPSHOT worldguardwrapper-implementation pom + legacy v6 v7 v7fawe diff --git a/implementation/v6/pom.xml b/implementation/v6/pom.xml index 13a0850..e938f06 100644 --- a/implementation/v6/pom.xml +++ b/implementation/v6/pom.xml @@ -7,7 +7,7 @@ org.codemc.worldguardwrapper worldguardwrapper-implementation - 1.1.3-SNAPSHOT + 1.1.4-SNAPSHOT worldguardwrapper-implementation-v6 @@ -28,7 +28,7 @@ ${project.groupId} worldguardwrapper-api - 1.1.3-SNAPSHOT + 1.1.4-SNAPSHOT provided diff --git a/implementation/v7/pom.xml b/implementation/v7/pom.xml index e33e671..31fdf83 100644 --- a/implementation/v7/pom.xml +++ b/implementation/v7/pom.xml @@ -7,7 +7,7 @@ org.codemc.worldguardwrapper worldguardwrapper-implementation - 1.1.3-SNAPSHOT + 1.1.4-SNAPSHOT worldguardwrapper-implementation-v7 @@ -28,7 +28,7 @@ ${project.groupId} worldguardwrapper-api - 1.1.3-SNAPSHOT + 1.1.4-SNAPSHOT provided diff --git a/implementation/v7fawe/pom.xml b/implementation/v7fawe/pom.xml index fea0c9a..1c8a0e8 100644 --- a/implementation/v7fawe/pom.xml +++ b/implementation/v7fawe/pom.xml @@ -7,7 +7,7 @@ org.codemc.worldguardwrapper worldguardwrapper-implementation - 1.1.3-SNAPSHOT + 1.1.4-SNAPSHOT worldguardwrapper-implementation-v7-fawe @@ -35,7 +35,7 @@ ${project.groupId} worldguardwrapper-api - 1.1.3-SNAPSHOT + 1.1.4-SNAPSHOT provided diff --git a/library/pom.xml b/library/pom.xml index 96f2a08..95887ec 100644 --- a/library/pom.xml +++ b/library/pom.xml @@ -7,7 +7,7 @@ org.codemc.worldguardwrapper worldguardwrapper-parent - 1.1.3-SNAPSHOT + 1.1.4-SNAPSHOT worldguardwrapper @@ -18,22 +18,27 @@ ${project.groupId} worldguardwrapper-api - 1.1.3-SNAPSHOT + 1.1.4-SNAPSHOT + + + ${project.groupId} + worldguardwrapper-implementation-legacy + 1.1.4-SNAPSHOT ${project.groupId} worldguardwrapper-implementation-v6 - 1.1.3-SNAPSHOT + 1.1.4-SNAPSHOT ${project.groupId} worldguardwrapper-implementation-v7 - 1.1.3-SNAPSHOT + 1.1.4-SNAPSHOT ${project.groupId} worldguardwrapper-implementation-v7-fawe - 1.1.3-SNAPSHOT + 1.1.4-SNAPSHOT diff --git a/library/src/main/java/org/codemc/worldguardwrapper/WorldGuardWrapper.java b/library/src/main/java/org/codemc/worldguardwrapper/WorldGuardWrapper.java index c607e95..bae2be2 100644 --- a/library/src/main/java/org/codemc/worldguardwrapper/WorldGuardWrapper.java +++ b/library/src/main/java/org/codemc/worldguardwrapper/WorldGuardWrapper.java @@ -27,16 +27,24 @@ public class WorldGuardWrapper implements IWorldGuardImplementation { private Listener listener; private WorldGuardWrapper() { - boolean legacy; + int targetVersion; try { Class.forName("com.sk89q.worldguard.WorldGuard"); - legacy = false; + targetVersion = 7; } catch (ClassNotFoundException e) { - legacy = true; + try { + Class.forName("com.sk89q.worldguard.protection.flags.registry.FlagRegistry"); + targetVersion = 6; + } catch (ClassNotFoundException e1) { + targetVersion = -6; + } } - if (legacy) { + if (targetVersion == 6) { implementation = new org.codemc.worldguardwrapper.implementation.v6.WorldGuardImplementation(); listener = new org.codemc.worldguardwrapper.implementation.v6.event.EventListener(); + } else if (targetVersion == -6) { + implementation = new org.codemc.worldguardwrapper.implementation.legacy.WorldGuardImplementation(); + listener = new org.codemc.worldguardwrapper.implementation.legacy.event.EventListener(); } else { if (Bukkit.getPluginManager().isPluginEnabled("FastAsyncWorldEdit")) { implementation = new org.codemc.worldguardwrapper.implementation.v7fawe.WorldGuardImplementation(); diff --git a/pom.xml b/pom.xml index 17ec306..7dbfca3 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.codemc.worldguardwrapper worldguardwrapper-parent - 1.1.3-SNAPSHOT + 1.1.4-SNAPSHOT pom