diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index a217b34..e3f81b9 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -1,7 +1,7 @@
version: 2
updates:
-- package-ecosystem: maven
- directory: "/"
- schedule:
- interval: daily
- open-pull-requests-limit: 10
+ - package-ecosystem: maven
+ directory: "/"
+ schedule:
+ interval: daily
+ open-pull-requests-limit: 10
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
index cd8d828..e313fea 100644
--- 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
@@ -1,7 +1,6 @@
package org.codemc.worldguardwrapper.implementation.legacy.flag;
import com.sk89q.worldguard.protection.flags.Flag;
-
import org.bukkit.Location;
import org.bukkit.util.Vector;
import org.codemc.worldguardwrapper.implementation.legacy.utility.WorldGuardFlagUtilities;
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
index 9347a70..16d2257 100644
--- 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
@@ -10,20 +10,16 @@ import lombok.Getter;
import org.bukkit.Location;
import org.bukkit.World;
import org.codemc.worldguardwrapper.flag.IWrappedFlag;
+import org.codemc.worldguardwrapper.implementation.legacy.flag.AbstractWrappedFlag;
import org.codemc.worldguardwrapper.implementation.legacy.utility.WorldGuardFlagUtilities;
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.HashMap;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
-import java.util.UUID;
+import java.util.*;
import java.util.stream.Collectors;
@AllArgsConstructor
diff --git a/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/utility/WorldGuardFlagUtilities.java b/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/utility/WorldGuardFlagUtilities.java
index 9bd623f..d8af0c9 100644
--- a/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/utility/WorldGuardFlagUtilities.java
+++ b/implementation/legacy/src/main/java/org/codemc/worldguardwrapper/implementation/legacy/utility/WorldGuardFlagUtilities.java
@@ -4,7 +4,7 @@ import com.google.common.collect.Maps;
import com.sk89q.worldedit.bukkit.BukkitWorld;
import com.sk89q.worldguard.protection.flags.Flag;
import com.sk89q.worldguard.protection.flags.StateFlag;
-
+import lombok.experimental.UtilityClass;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
@@ -15,8 +15,6 @@ import org.codemc.worldguardwrapper.implementation.legacy.flag.AbstractWrappedFl
import org.codemc.worldguardwrapper.implementation.legacy.flag.WrappedPrimitiveFlag;
import org.codemc.worldguardwrapper.implementation.legacy.flag.WrappedStatusFlag;
-import lombok.experimental.UtilityClass;
-
import java.util.Map;
@UtilityClass
diff --git a/implementation/pom.xml b/implementation/pom.xml
index fc68cd4..64787ea 100644
--- a/implementation/pom.xml
+++ b/implementation/pom.xml
@@ -24,4 +24,11 @@
true
+
+
+
+ org.javassist
+ javassist
+
+
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 302135e..53d830e 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,7 +1,5 @@
package org.codemc.worldguardwrapper.implementation.v6;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterators;
import com.sk89q.minecraft.util.commands.CommandException;
import com.sk89q.worldedit.BlockVector;
@@ -18,9 +16,9 @@ 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 com.sk89q.worldguard.session.MoveType;
import com.sk89q.worldguard.session.Session;
import com.sk89q.worldguard.session.handler.Handler;
+import javassist.util.proxy.ProxyFactory;
import lombok.NonNull;
import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
@@ -33,6 +31,7 @@ import org.codemc.worldguardwrapper.flag.WrappedState;
import org.codemc.worldguardwrapper.handler.IHandler;
import org.codemc.worldguardwrapper.implementation.IWorldGuardImplementation;
import org.codemc.worldguardwrapper.implementation.v6.flag.AbstractWrappedFlag;
+import org.codemc.worldguardwrapper.implementation.v6.handler.ProxyHandler;
import org.codemc.worldguardwrapper.implementation.v6.region.WrappedRegion;
import org.codemc.worldguardwrapper.implementation.v6.utility.WorldGuardFlagUtilities;
import org.codemc.worldguardwrapper.implementation.v6.utility.WorldGuardVectorUtilities;
@@ -42,7 +41,8 @@ import org.codemc.worldguardwrapper.selection.ICuboidSelection;
import org.codemc.worldguardwrapper.selection.IPolygonalSelection;
import org.codemc.worldguardwrapper.selection.ISelection;
-import javax.annotation.Nullable;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
import java.util.*;
import java.util.function.Supplier;
import java.util.stream.Collectors;
@@ -86,7 +86,7 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
.orElse(null), flag));
}
- private IWrappedRegionSet wrapRegionSet(@NonNull World world, @NonNull ApplicableRegionSet regionSet) {
+ public IWrappedRegionSet wrapRegionSet(@NonNull World world, @NonNull ApplicableRegionSet regionSet) {
return new IWrappedRegionSet() {
@SuppressWarnings("NullableProblems")
@@ -156,43 +156,29 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
@Override
public void registerHandler(Supplier factory) {
+ ProxyFactory proxyFactory = new ProxyFactory();
+ proxyFactory.setUseCache(false);
+ proxyFactory.setSuperclass(ProxyHandler.class);
+
+ Class extends ProxyHandler> handlerClass;
+ Constructor extends ProxyHandler> handlerConstructor;
+ try {
+ //noinspection unchecked
+ handlerClass = (Class extends ProxyHandler>) proxyFactory.createClass();
+ handlerConstructor = handlerClass.getDeclaredConstructor(WorldGuardImplementation.class, IHandler.class, Session.class);
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+
worldGuardPlugin.getSessionManager().registerHandler(new Handler.Factory() {
@Override
public Handler create(Session session) {
IHandler handler = factory.get();
- return new Handler(session) {
- @Override
- public void initialize(Player player, Location current, ApplicableRegionSet set) {
- handler.initialize(player, current, wrapRegionSet(current.getWorld(), set));
- }
-
- @Override
- public boolean testMoveTo(Player player, Location from, Location to, ApplicableRegionSet toSet, MoveType moveType) {
- return handler.testMoveTo(player, from, to, wrapRegionSet(to.getWorld(), toSet), moveType.name());
- }
-
- @Override
- public boolean onCrossBoundary(Player player, Location from, Location to, ApplicableRegionSet toSet, Set entered, Set exited, MoveType moveType) {
- Set mappedEntered = ImmutableSet.copyOf(Collections2.transform(entered, region -> new WrappedRegion(to.getWorld(), region)));
- Set mappedExited = ImmutableSet.copyOf(Collections2.transform(exited, region -> new WrappedRegion(from.getWorld(), region)));
- return handler.onCrossBoundary(player, from, to, wrapRegionSet(to.getWorld(), toSet), mappedEntered, mappedExited, moveType.name());
- }
-
- @Override
- public void tick(Player player, ApplicableRegionSet set) {
- handler.tick(player, wrapRegionSet(player.getWorld(), set));
- }
-
- @Nullable
- @Override
- public StateFlag.State getInvincibility(Player player) {
- WrappedState state = handler.getInvincibility(player);
- if (state == null) {
- return null;
- }
- return state == WrappedState.ALLOW ? StateFlag.State.ALLOW : StateFlag.State.DENY;
- }
- };
+ try {
+ return handlerConstructor.newInstance(WorldGuardImplementation.this, handler, session);
+ } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) {
+ throw new RuntimeException(e);
+ }
}
}, null);
}
diff --git a/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/flag/WrappedPrimitiveFlag.java b/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/flag/WrappedPrimitiveFlag.java
index 0b13aff..3e115f2 100644
--- a/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/flag/WrappedPrimitiveFlag.java
+++ b/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/flag/WrappedPrimitiveFlag.java
@@ -1,7 +1,6 @@
package org.codemc.worldguardwrapper.implementation.v6.flag;
import com.sk89q.worldguard.protection.flags.Flag;
-
import org.bukkit.Location;
import org.bukkit.util.Vector;
import org.codemc.worldguardwrapper.implementation.v6.utility.WorldGuardFlagUtilities;
diff --git a/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/handler/ProxyHandler.java b/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/handler/ProxyHandler.java
new file mode 100644
index 0000000..c3c6740
--- /dev/null
+++ b/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/handler/ProxyHandler.java
@@ -0,0 +1,64 @@
+package org.codemc.worldguardwrapper.implementation.v6.handler;
+
+import com.google.common.collect.Collections2;
+import com.google.common.collect.ImmutableSet;
+import com.sk89q.worldguard.protection.ApplicableRegionSet;
+import com.sk89q.worldguard.protection.flags.StateFlag;
+import com.sk89q.worldguard.protection.regions.ProtectedRegion;
+import com.sk89q.worldguard.session.MoveType;
+import com.sk89q.worldguard.session.Session;
+import com.sk89q.worldguard.session.handler.Handler;
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+import org.codemc.worldguardwrapper.flag.WrappedState;
+import org.codemc.worldguardwrapper.handler.IHandler;
+import org.codemc.worldguardwrapper.implementation.v6.WorldGuardImplementation;
+import org.codemc.worldguardwrapper.implementation.v6.region.WrappedRegion;
+import org.codemc.worldguardwrapper.region.IWrappedRegion;
+
+import javax.annotation.Nullable;
+import java.util.Set;
+
+public class ProxyHandler extends Handler {
+
+ private final WorldGuardImplementation implementation;
+ private final IHandler handler;
+
+ public ProxyHandler(WorldGuardImplementation implementation, IHandler handler, Session session) {
+ super(session);
+ this.implementation = implementation;
+ this.handler = handler;
+ }
+
+ @Override
+ public void initialize(Player player, Location current, ApplicableRegionSet set) {
+ handler.initialize(player, current, implementation.wrapRegionSet(current.getWorld(), set));
+ }
+
+ @Override
+ public boolean testMoveTo(Player player, Location from, Location to, ApplicableRegionSet toSet, MoveType moveType) {
+ return handler.testMoveTo(player, from, to, implementation.wrapRegionSet(to.getWorld(), toSet), moveType.name());
+ }
+
+ @Override
+ public boolean onCrossBoundary(Player player, Location from, Location to, ApplicableRegionSet toSet, Set entered, Set exited, MoveType moveType) {
+ Set mappedEntered = ImmutableSet.copyOf(Collections2.transform(entered, region -> new WrappedRegion(to.getWorld(), region)));
+ Set mappedExited = ImmutableSet.copyOf(Collections2.transform(exited, region -> new WrappedRegion(from.getWorld(), region)));
+ return handler.onCrossBoundary(player, from, to, implementation.wrapRegionSet(to.getWorld(), toSet), mappedEntered, mappedExited, moveType.name());
+ }
+
+ @Override
+ public void tick(Player player, ApplicableRegionSet set) {
+ handler.tick(player, implementation.wrapRegionSet(player.getWorld(), set));
+ }
+
+ @Nullable
+ @Override
+ public StateFlag.State getInvincibility(Player player) {
+ WrappedState state = handler.getInvincibility(player);
+ if (state == null) {
+ return null;
+ }
+ return state == WrappedState.ALLOW ? StateFlag.State.ALLOW : StateFlag.State.DENY;
+ }
+}
diff --git a/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/utility/WorldGuardFlagUtilities.java b/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/utility/WorldGuardFlagUtilities.java
index 4bc66dc..46487a5 100644
--- a/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/utility/WorldGuardFlagUtilities.java
+++ b/implementation/v6/src/main/java/org/codemc/worldguardwrapper/implementation/v6/utility/WorldGuardFlagUtilities.java
@@ -4,7 +4,7 @@ import com.google.common.collect.Maps;
import com.sk89q.worldedit.bukkit.BukkitWorld;
import com.sk89q.worldguard.protection.flags.Flag;
import com.sk89q.worldguard.protection.flags.StateFlag;
-
+import lombok.experimental.UtilityClass;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.util.Vector;
@@ -14,8 +14,6 @@ import org.codemc.worldguardwrapper.implementation.v6.flag.AbstractWrappedFlag;
import org.codemc.worldguardwrapper.implementation.v6.flag.WrappedPrimitiveFlag;
import org.codemc.worldguardwrapper.implementation.v6.flag.WrappedStatusFlag;
-import lombok.experimental.UtilityClass;
-
import java.util.Map;
@UtilityClass
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 c8c4e9b..a8d8915 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
@@ -1,7 +1,5 @@
package org.codemc.worldguardwrapper.implementation.v7;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterators;
import com.sk89q.minecraft.util.commands.CommandException;
import com.sk89q.worldedit.IncompleteRegionException;
@@ -23,9 +21,9 @@ 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 com.sk89q.worldguard.session.MoveType;
import com.sk89q.worldguard.session.Session;
import com.sk89q.worldguard.session.handler.Handler;
+import javassist.util.proxy.ProxyFactory;
import lombok.NonNull;
import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
@@ -38,6 +36,7 @@ import org.codemc.worldguardwrapper.flag.WrappedState;
import org.codemc.worldguardwrapper.handler.IHandler;
import org.codemc.worldguardwrapper.implementation.IWorldGuardImplementation;
import org.codemc.worldguardwrapper.implementation.v7.flag.AbstractWrappedFlag;
+import org.codemc.worldguardwrapper.implementation.v7.handler.ProxyHandler;
import org.codemc.worldguardwrapper.implementation.v7.region.WrappedRegion;
import org.codemc.worldguardwrapper.implementation.v7.utility.WorldGuardFlagUtilities;
import org.codemc.worldguardwrapper.region.IWrappedRegion;
@@ -46,7 +45,8 @@ import org.codemc.worldguardwrapper.selection.ICuboidSelection;
import org.codemc.worldguardwrapper.selection.IPolygonalSelection;
import org.codemc.worldguardwrapper.selection.ISelection;
-import javax.annotation.Nullable;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
import java.util.*;
import java.util.function.Supplier;
import java.util.stream.Collectors;
@@ -92,7 +92,7 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
.orElse(null), flag));
}
- private IWrappedRegionSet wrapRegionSet(@NonNull World world, @NonNull ApplicableRegionSet regionSet) {
+ public IWrappedRegionSet wrapRegionSet(@NonNull World world, @NonNull ApplicableRegionSet regionSet) {
return new IWrappedRegionSet() {
@SuppressWarnings("NullableProblems")
@@ -162,53 +162,29 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
@Override
public void registerHandler(Supplier factory) {
+ ProxyFactory proxyFactory = new ProxyFactory();
+ proxyFactory.setUseCache(false);
+ proxyFactory.setSuperclass(ProxyHandler.class);
+
+ Class extends ProxyHandler> handlerClass;
+ Constructor extends ProxyHandler> handlerConstructor;
+ try {
+ //noinspection unchecked
+ handlerClass = (Class extends ProxyHandler>) proxyFactory.createClass();
+ handlerConstructor = handlerClass.getDeclaredConstructor(WorldGuardImplementation.class, IHandler.class, Session.class);
+ } catch (NoSuchMethodException e) {
+ throw new RuntimeException(e);
+ }
+
core.getPlatform().getSessionManager().registerHandler(new Handler.Factory() {
@Override
public Handler create(Session session) {
IHandler handler = factory.get();
- return new Handler(session) {
- @Override
- public void initialize(LocalPlayer player, com.sk89q.worldedit.util.Location current, ApplicableRegionSet set) {
- Player bukkitPlayer = BukkitAdapter.adapt(player);
- Location bukkitLocation = BukkitAdapter.adapt(current);
- handler.initialize(bukkitPlayer, bukkitLocation, wrapRegionSet(bukkitLocation.getWorld(), set));
- }
-
- @Override
- public boolean testMoveTo(LocalPlayer player, com.sk89q.worldedit.util.Location from, com.sk89q.worldedit.util.Location to, ApplicableRegionSet toSet, MoveType moveType) {
- Player bukkitPlayer = BukkitAdapter.adapt(player);
- Location bukkitFrom = BukkitAdapter.adapt(from);
- Location bukkitTo = BukkitAdapter.adapt(to);
- return handler.testMoveTo(bukkitPlayer, bukkitFrom, bukkitTo, wrapRegionSet(bukkitTo.getWorld(), toSet), moveType.name());
- }
-
- @Override
- public boolean onCrossBoundary(LocalPlayer player, com.sk89q.worldedit.util.Location from, com.sk89q.worldedit.util.Location to, ApplicableRegionSet toSet, Set entered, Set exited, MoveType moveType) {
- Player bukkitPlayer = BukkitAdapter.adapt(player);
- Location bukkitFrom = BukkitAdapter.adapt(from);
- Location bukkitTo = BukkitAdapter.adapt(to);
- Set mappedEntered = ImmutableSet.copyOf(Collections2.transform(entered, region -> new WrappedRegion(bukkitTo.getWorld(), region)));
- Set mappedExited = ImmutableSet.copyOf(Collections2.transform(exited, region -> new WrappedRegion(bukkitFrom.getWorld(), region)));
- return handler.onCrossBoundary(bukkitPlayer, bukkitFrom, bukkitTo, wrapRegionSet(bukkitTo.getWorld(), toSet), mappedEntered, mappedExited, moveType.name());
- }
-
- @Override
- public void tick(LocalPlayer player, ApplicableRegionSet set) {
- Player bukkitPlayer = BukkitAdapter.adapt(player);
- handler.tick(bukkitPlayer, wrapRegionSet(bukkitPlayer.getWorld(), set));
- }
-
- @Nullable
- @Override
- public StateFlag.State getInvincibility(LocalPlayer player) {
- Player bukkitPlayer = BukkitAdapter.adapt(player);
- WrappedState state = handler.getInvincibility(bukkitPlayer);
- if (state == null) {
- return null;
- }
- return state == WrappedState.ALLOW ? StateFlag.State.ALLOW : StateFlag.State.DENY;
- }
- };
+ try {
+ return handlerConstructor.newInstance(WorldGuardImplementation.this, handler, session);
+ } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) {
+ throw new RuntimeException(e);
+ }
}
}, null);
}
diff --git a/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/flag/WrappedPrimitiveFlag.java b/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/flag/WrappedPrimitiveFlag.java
index 4874fc1..bfc65bc 100644
--- a/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/flag/WrappedPrimitiveFlag.java
+++ b/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/flag/WrappedPrimitiveFlag.java
@@ -3,7 +3,6 @@ package org.codemc.worldguardwrapper.implementation.v7.flag;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.math.Vector3;
import com.sk89q.worldguard.protection.flags.Flag;
-
import org.bukkit.Location;
import org.bukkit.util.Vector;
import org.codemc.worldguardwrapper.implementation.v7.utility.WorldGuardFlagUtilities;
diff --git a/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/handler/ProxyHandler.java b/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/handler/ProxyHandler.java
new file mode 100644
index 0000000..af8008f
--- /dev/null
+++ b/implementation/v7/src/main/java/org/codemc/worldguardwrapper/implementation/v7/handler/ProxyHandler.java
@@ -0,0 +1,76 @@
+package org.codemc.worldguardwrapper.implementation.v7.handler;
+
+import com.google.common.collect.Collections2;
+import com.google.common.collect.ImmutableSet;
+import com.sk89q.worldedit.bukkit.BukkitAdapter;
+import com.sk89q.worldguard.LocalPlayer;
+import com.sk89q.worldguard.protection.ApplicableRegionSet;
+import com.sk89q.worldguard.protection.flags.StateFlag;
+import com.sk89q.worldguard.protection.regions.ProtectedRegion;
+import com.sk89q.worldguard.session.MoveType;
+import com.sk89q.worldguard.session.Session;
+import com.sk89q.worldguard.session.handler.Handler;
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+import org.codemc.worldguardwrapper.flag.WrappedState;
+import org.codemc.worldguardwrapper.handler.IHandler;
+import org.codemc.worldguardwrapper.implementation.v7.WorldGuardImplementation;
+import org.codemc.worldguardwrapper.implementation.v7.region.WrappedRegion;
+import org.codemc.worldguardwrapper.region.IWrappedRegion;
+
+import javax.annotation.Nullable;
+import java.util.Set;
+
+public class ProxyHandler extends Handler {
+
+ private final WorldGuardImplementation implementation;
+ private final IHandler handler;
+
+ public ProxyHandler(WorldGuardImplementation implementation, IHandler handler, Session session) {
+ super(session);
+ this.implementation = implementation;
+ this.handler = handler;
+ }
+
+ @Override
+ public void initialize(LocalPlayer player, com.sk89q.worldedit.util.Location current, ApplicableRegionSet set) {
+ Player bukkitPlayer = BukkitAdapter.adapt(player);
+ Location bukkitLocation = BukkitAdapter.adapt(current);
+ handler.initialize(bukkitPlayer, bukkitLocation, implementation.wrapRegionSet(bukkitLocation.getWorld(), set));
+ }
+
+ @Override
+ public boolean testMoveTo(LocalPlayer player, com.sk89q.worldedit.util.Location from, com.sk89q.worldedit.util.Location to, ApplicableRegionSet toSet, MoveType moveType) {
+ Player bukkitPlayer = BukkitAdapter.adapt(player);
+ Location bukkitFrom = BukkitAdapter.adapt(from);
+ Location bukkitTo = BukkitAdapter.adapt(to);
+ return handler.testMoveTo(bukkitPlayer, bukkitFrom, bukkitTo, implementation.wrapRegionSet(bukkitTo.getWorld(), toSet), moveType.name());
+ }
+
+ @Override
+ public boolean onCrossBoundary(LocalPlayer player, com.sk89q.worldedit.util.Location from, com.sk89q.worldedit.util.Location to, ApplicableRegionSet toSet, Set entered, Set exited, MoveType moveType) {
+ Player bukkitPlayer = BukkitAdapter.adapt(player);
+ Location bukkitFrom = BukkitAdapter.adapt(from);
+ Location bukkitTo = BukkitAdapter.adapt(to);
+ Set mappedEntered = ImmutableSet.copyOf(Collections2.transform(entered, region -> new WrappedRegion(bukkitTo.getWorld(), region)));
+ Set mappedExited = ImmutableSet.copyOf(Collections2.transform(exited, region -> new WrappedRegion(bukkitFrom.getWorld(), region)));
+ return handler.onCrossBoundary(bukkitPlayer, bukkitFrom, bukkitTo, implementation.wrapRegionSet(bukkitTo.getWorld(), toSet), mappedEntered, mappedExited, moveType.name());
+ }
+
+ @Override
+ public void tick(LocalPlayer player, ApplicableRegionSet set) {
+ Player bukkitPlayer = BukkitAdapter.adapt(player);
+ handler.tick(bukkitPlayer, implementation.wrapRegionSet(bukkitPlayer.getWorld(), set));
+ }
+
+ @Nullable
+ @Override
+ public StateFlag.State getInvincibility(LocalPlayer player) {
+ Player bukkitPlayer = BukkitAdapter.adapt(player);
+ WrappedState state = handler.getInvincibility(bukkitPlayer);
+ if (state == null) {
+ return null;
+ }
+ return state == WrappedState.ALLOW ? StateFlag.State.ALLOW : StateFlag.State.DENY;
+ }
+}
diff --git a/library/pom.xml b/library/pom.xml
index 22144aa..3a208e2 100644
--- a/library/pom.xml
+++ b/library/pom.xml
@@ -19,21 +19,25 @@
${project.groupId}
worldguardwrapper-api
1.2.0-SNAPSHOT
+ true
${project.groupId}
worldguardwrapper-implementation-legacy
1.2.0-SNAPSHOT
+ true
${project.groupId}
worldguardwrapper-implementation-v6
1.2.0-SNAPSHOT
+ true
${project.groupId}
worldguardwrapper-implementation-v7
1.2.0-SNAPSHOT
+ true
@@ -42,6 +46,14 @@
org.apache.maven.plugins
maven-shade-plugin
+
+
+
+ javassist
+ org.codemc.worldguardwrapper.shaded.javassist
+
+
+
package
diff --git a/pom.xml b/pom.xml
index 47bdb49..0e5001c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -61,36 +61,55 @@
+
+
+
+ org.spigotmc
+ spigot-api
+ ${spigot-api.version}
+ provided
+
+
+ com.googlecode.json-simple
+ json-simple
+
+
+ com.google.code.gson
+ gson
+
+
+ org.yaml
+ snakeyaml
+
+
+ net.md-5
+ bungeecord-chat
+
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.16
+ provided
+
+
+ org.javassist
+ javassist
+ 3.27.0-GA
+ true
+
+
+
+
org.spigotmc
spigot-api
- ${spigot-api.version}
- provided
-
-
- com.googlecode.json-simple
- json-simple
-
-
- com.google.code.gson
- gson
-
-
- org.yaml
- snakeyaml
-
-
- net.md-5
- bungeecord-chat
-
-
org.projectlombok
lombok
- 1.18.16
- provided
@@ -150,6 +169,9 @@
org.apache.maven.plugins
maven-shade-plugin
3.2.4
+
+ false
+
org.apache.maven.plugins