forked from clone/WorldGuardWrapper
Implement session handlers (v6+), region sets, bump version
This commit is contained in:
parent
ef4204a426
commit
c9c6d343bd
|
@ -7,7 +7,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.codemc.worldguardwrapper</groupId>
|
<groupId>org.codemc.worldguardwrapper</groupId>
|
||||||
<artifactId>worldguardwrapper-parent</artifactId>
|
<artifactId>worldguardwrapper-parent</artifactId>
|
||||||
<version>1.1.9-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>worldguardwrapper-api</artifactId>
|
<artifactId>worldguardwrapper-api</artifactId>
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
package org.codemc.worldguardwrapper.handler;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.codemc.worldguardwrapper.flag.WrappedState;
|
||||||
|
import org.codemc.worldguardwrapper.region.IWrappedRegion;
|
||||||
|
import org.codemc.worldguardwrapper.region.IWrappedRegionSet;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public interface IHandler {
|
||||||
|
|
||||||
|
default void initialize(Player player, Location current, IWrappedRegionSet regionSet) {
|
||||||
|
}
|
||||||
|
|
||||||
|
default boolean testMoveTo(Player player, Location from, Location to, IWrappedRegionSet regionSet, String moveType) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
default boolean onCrossBoundary(Player player, Location from, Location to, IWrappedRegionSet toSet,
|
||||||
|
Set<IWrappedRegion> entered, Set<IWrappedRegion> exited, String moveType) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
default void tick(Player player, IWrappedRegionSet regionSet) {
|
||||||
|
}
|
||||||
|
|
||||||
|
default WrappedState getInvincibility(Player player) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -6,12 +6,15 @@ import org.bukkit.World;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import org.codemc.worldguardwrapper.flag.IWrappedFlag;
|
import org.codemc.worldguardwrapper.flag.IWrappedFlag;
|
||||||
|
import org.codemc.worldguardwrapper.handler.IHandler;
|
||||||
import org.codemc.worldguardwrapper.region.IWrappedRegion;
|
import org.codemc.worldguardwrapper.region.IWrappedRegion;
|
||||||
|
import org.codemc.worldguardwrapper.region.IWrappedRegionSet;
|
||||||
import org.codemc.worldguardwrapper.selection.ICuboidSelection;
|
import org.codemc.worldguardwrapper.selection.ICuboidSelection;
|
||||||
import org.codemc.worldguardwrapper.selection.IPolygonalSelection;
|
import org.codemc.worldguardwrapper.selection.IPolygonalSelection;
|
||||||
import org.codemc.worldguardwrapper.selection.ISelection;
|
import org.codemc.worldguardwrapper.selection.ISelection;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public interface IWorldGuardImplementation {
|
public interface IWorldGuardImplementation {
|
||||||
|
|
||||||
|
@ -29,6 +32,8 @@ public interface IWorldGuardImplementation {
|
||||||
*/
|
*/
|
||||||
int getApiVersion();
|
int getApiVersion();
|
||||||
|
|
||||||
|
void registerHandler(Supplier<IHandler> factory);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Query a flag's value for a given player at a given location.
|
* Query a flag's value for a given player at a given location.
|
||||||
*
|
*
|
||||||
|
@ -117,6 +122,14 @@ public interface IWorldGuardImplementation {
|
||||||
*/
|
*/
|
||||||
Set<IWrappedRegion> getRegions(@NonNull Location minimum, @NonNull Location maximum);
|
Set<IWrappedRegion> getRegions(@NonNull Location minimum, @NonNull Location maximum);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the applicable region set at the given location-
|
||||||
|
*
|
||||||
|
* @param location The location
|
||||||
|
* @return The region set
|
||||||
|
*/
|
||||||
|
Optional<IWrappedRegionSet> getRegionSet(@NonNull Location location);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a region. If only two points are given, a cuboid region will be created.
|
* Add a region. If only two points are given, a cuboid region will be created.
|
||||||
*
|
*
|
||||||
|
@ -142,7 +155,7 @@ public interface IWorldGuardImplementation {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a region for the given selection.
|
* Add a region for the given selection.
|
||||||
*
|
*
|
||||||
* @param id The region ID
|
* @param id The region ID
|
||||||
* @param selection The selection for the region's volume
|
* @param selection The selection for the region's volume
|
||||||
* @return The added region
|
* @return The added region
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
package org.codemc.worldguardwrapper.region;
|
||||||
|
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
|
import org.codemc.worldguardwrapper.flag.IWrappedFlag;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
public interface IWrappedRegionSet extends Iterable<IWrappedRegion> {
|
||||||
|
|
||||||
|
boolean isVirtual();
|
||||||
|
|
||||||
|
<V> Optional<V> queryValue(OfflinePlayer subject, IWrappedFlag<V> flag);
|
||||||
|
|
||||||
|
<V> Collection<V> queryAllValues(OfflinePlayer subject, IWrappedFlag<V> flag);
|
||||||
|
|
||||||
|
boolean isOwnerOfAll(OfflinePlayer player);
|
||||||
|
|
||||||
|
boolean isMemberOfAll(OfflinePlayer player);
|
||||||
|
|
||||||
|
int size();
|
||||||
|
|
||||||
|
Set<IWrappedRegion> getRegions();
|
||||||
|
|
||||||
|
}
|
|
@ -7,7 +7,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.codemc.worldguardwrapper</groupId>
|
<groupId>org.codemc.worldguardwrapper</groupId>
|
||||||
<artifactId>worldguardwrapper-implementation</artifactId>
|
<artifactId>worldguardwrapper-implementation</artifactId>
|
||||||
<version>1.1.9-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>worldguardwrapper-implementation-legacy</artifactId>
|
<artifactId>worldguardwrapper-implementation-legacy</artifactId>
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.groupId}</groupId>
|
<groupId>${project.groupId}</groupId>
|
||||||
<artifactId>worldguardwrapper-api</artifactId>
|
<artifactId>worldguardwrapper-api</artifactId>
|
||||||
<version>1.1.9-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package org.codemc.worldguardwrapper.implementation.legacy;
|
package org.codemc.worldguardwrapper.implementation.legacy;
|
||||||
|
|
||||||
|
import com.google.common.collect.Iterators;
|
||||||
import com.sk89q.minecraft.util.commands.CommandException;
|
import com.sk89q.minecraft.util.commands.CommandException;
|
||||||
import com.sk89q.worldedit.BlockVector;
|
import com.sk89q.worldedit.BlockVector;
|
||||||
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
|
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
|
||||||
|
@ -16,21 +17,25 @@ import com.sk89q.worldguard.protection.regions.ProtectedPolygonalRegion;
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import org.codemc.worldguardwrapper.flag.IWrappedFlag;
|
import org.codemc.worldguardwrapper.flag.IWrappedFlag;
|
||||||
|
import org.codemc.worldguardwrapper.handler.IHandler;
|
||||||
import org.codemc.worldguardwrapper.implementation.IWorldGuardImplementation;
|
import org.codemc.worldguardwrapper.implementation.IWorldGuardImplementation;
|
||||||
import org.codemc.worldguardwrapper.implementation.legacy.flag.AbstractWrappedFlag;
|
import org.codemc.worldguardwrapper.implementation.legacy.flag.AbstractWrappedFlag;
|
||||||
import org.codemc.worldguardwrapper.implementation.legacy.region.WrappedRegion;
|
import org.codemc.worldguardwrapper.implementation.legacy.region.WrappedRegion;
|
||||||
import org.codemc.worldguardwrapper.implementation.legacy.utility.WorldGuardFlagUtilities;
|
import org.codemc.worldguardwrapper.implementation.legacy.utility.WorldGuardFlagUtilities;
|
||||||
import org.codemc.worldguardwrapper.implementation.legacy.utility.WorldGuardVectorUtilities;
|
import org.codemc.worldguardwrapper.implementation.legacy.utility.WorldGuardVectorUtilities;
|
||||||
import org.codemc.worldguardwrapper.region.IWrappedRegion;
|
import org.codemc.worldguardwrapper.region.IWrappedRegion;
|
||||||
|
import org.codemc.worldguardwrapper.region.IWrappedRegionSet;
|
||||||
import org.codemc.worldguardwrapper.selection.ICuboidSelection;
|
import org.codemc.worldguardwrapper.selection.ICuboidSelection;
|
||||||
import org.codemc.worldguardwrapper.selection.IPolygonalSelection;
|
import org.codemc.worldguardwrapper.selection.IPolygonalSelection;
|
||||||
import org.codemc.worldguardwrapper.selection.ISelection;
|
import org.codemc.worldguardwrapper.selection.ISelection;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.function.Supplier;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class WorldGuardImplementation implements IWorldGuardImplementation {
|
public class WorldGuardImplementation implements IWorldGuardImplementation {
|
||||||
|
@ -47,8 +52,9 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Optional<LocalPlayer> wrapPlayer(Player player) {
|
private Optional<LocalPlayer> wrapPlayer(OfflinePlayer player) {
|
||||||
return Optional.ofNullable(player).map(bukkitPlayer -> worldGuardPlugin.wrapPlayer(player));
|
return Optional.ofNullable(player).map(bukkitPlayer -> bukkitPlayer.isOnline() ?
|
||||||
|
worldGuardPlugin.wrapPlayer((Player) bukkitPlayer) : worldGuardPlugin.wrapOfflinePlayer(bukkitPlayer));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Optional<RegionManager> getWorldManager(@NonNull World world) {
|
private Optional<RegionManager> getWorldManager(@NonNull World world) {
|
||||||
|
@ -69,6 +75,64 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
|
||||||
.orElse(null), flag));
|
.orElse(null), flag));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private IWrappedRegionSet wrapRegionSet(@NonNull World world, @NonNull ApplicableRegionSet regionSet) {
|
||||||
|
return new IWrappedRegionSet() {
|
||||||
|
|
||||||
|
@SuppressWarnings("NullableProblems")
|
||||||
|
@Override
|
||||||
|
public Iterator<IWrappedRegion> iterator() {
|
||||||
|
return Iterators.transform(regionSet.iterator(), region -> new WrappedRegion(world, region));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isVirtual() {
|
||||||
|
return regionSet.isVirtual();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <V> Optional<V> queryValue(OfflinePlayer subject, IWrappedFlag<V> flag) {
|
||||||
|
LocalPlayer subjectHandle = wrapPlayer(subject).orElse(null);
|
||||||
|
AbstractWrappedFlag<V> wrappedFlag = (AbstractWrappedFlag<V>) flag;
|
||||||
|
return Optional.ofNullable(regionSet.queryValue(subjectHandle, wrappedFlag.getHandle()))
|
||||||
|
.flatMap(wrappedFlag::fromWGValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <V> Collection<V> queryAllValues(OfflinePlayer subject, IWrappedFlag<V> flag) {
|
||||||
|
LocalPlayer subjectHandle = wrapPlayer(subject).orElse(null);
|
||||||
|
AbstractWrappedFlag<V> wrappedFlag = (AbstractWrappedFlag<V>) flag;
|
||||||
|
return regionSet.queryAllValues(subjectHandle, wrappedFlag.getHandle()).stream()
|
||||||
|
.map(wrappedFlag::fromWGValue)
|
||||||
|
.filter(Optional::isPresent)
|
||||||
|
.map(Optional::get)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isOwnerOfAll(OfflinePlayer player) {
|
||||||
|
LocalPlayer playerHandle = wrapPlayer(player).orElse(null);
|
||||||
|
return regionSet.isOwnerOfAll(playerHandle);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isMemberOfAll(OfflinePlayer player) {
|
||||||
|
LocalPlayer playerHandle = wrapPlayer(player).orElse(null);
|
||||||
|
return regionSet.isMemberOfAll(playerHandle);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int size() {
|
||||||
|
return regionSet.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<IWrappedRegion> getRegions() {
|
||||||
|
return regionSet.getRegions().stream()
|
||||||
|
.map(region -> new WrappedRegion(world, region)).collect(Collectors.toSet());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JavaPlugin getWorldGuardPlugin() {
|
public JavaPlugin getWorldGuardPlugin() {
|
||||||
return WorldGuardPlugin.inst();
|
return WorldGuardPlugin.inst();
|
||||||
|
@ -79,6 +143,11 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
|
||||||
return -6;
|
return -6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerHandler(Supplier<IHandler> factory) {
|
||||||
|
throw new UnsupportedOperationException("Custom flag handlers aren't supported in this version of WorldGuard!");
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T> Optional<IWrappedFlag<T>> getFlag(String name, Class<T> type) {
|
public <T> Optional<IWrappedFlag<T>> getFlag(String name, Class<T> type) {
|
||||||
for (Flag<?> currentFlag : DefaultFlag.getFlags()) {
|
for (Flag<?> currentFlag : DefaultFlag.getFlags()) {
|
||||||
|
@ -92,7 +161,8 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
|
||||||
@Override
|
@Override
|
||||||
public <T> Optional<T> queryFlag(Player player, Location location, IWrappedFlag<T> flag) {
|
public <T> Optional<T> queryFlag(Player player, Location location, IWrappedFlag<T> flag) {
|
||||||
AbstractWrappedFlag<T> wrappedFlag = (AbstractWrappedFlag<T>) flag;
|
AbstractWrappedFlag<T> wrappedFlag = (AbstractWrappedFlag<T>) flag;
|
||||||
return queryValue(player, location, wrappedFlag.getHandle()).flatMap(value -> wrappedFlag.fromWGValue(value));
|
|
||||||
|
return queryValue(player, location, wrappedFlag.getHandle()).flatMap(wrappedFlag::fromWGValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -118,7 +188,7 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
|
||||||
Map.Entry<IWrappedFlag<?>, Object> wrapped = WorldGuardFlagUtilities.wrap(flag, value);
|
Map.Entry<IWrappedFlag<?>, Object> wrapped = WorldGuardFlagUtilities.wrap(flag, value);
|
||||||
flags.put(wrapped.getKey(), wrapped.getValue());
|
flags.put(wrapped.getKey(), wrapped.getValue());
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
continue; // Unsupported flag type
|
// Unsupported flag type
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -176,6 +246,11 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
|
||||||
return set;
|
return set;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<IWrappedRegionSet> getRegionSet(@NonNull Location location) {
|
||||||
|
return getApplicableRegions(location).map(regionSet -> wrapRegionSet(location.getWorld(), regionSet));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<IWrappedRegion> addRegion(String id, List<Location> points, int minY, int maxY) {
|
public Optional<IWrappedRegion> addRegion(String id, List<Location> points, int minY, int maxY) {
|
||||||
ProtectedRegion region;
|
ProtectedRegion region;
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.codemc.worldguardwrapper</groupId>
|
<groupId>org.codemc.worldguardwrapper</groupId>
|
||||||
<artifactId>worldguardwrapper-parent</artifactId>
|
<artifactId>worldguardwrapper-parent</artifactId>
|
||||||
<version>1.1.9-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>worldguardwrapper-implementation</artifactId>
|
<artifactId>worldguardwrapper-implementation</artifactId>
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.codemc.worldguardwrapper</groupId>
|
<groupId>org.codemc.worldguardwrapper</groupId>
|
||||||
<artifactId>worldguardwrapper-implementation</artifactId>
|
<artifactId>worldguardwrapper-implementation</artifactId>
|
||||||
<version>1.1.9-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>worldguardwrapper-implementation-v6</artifactId>
|
<artifactId>worldguardwrapper-implementation-v6</artifactId>
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.groupId}</groupId>
|
<groupId>${project.groupId}</groupId>
|
||||||
<artifactId>worldguardwrapper-api</artifactId>
|
<artifactId>worldguardwrapper-api</artifactId>
|
||||||
<version>1.1.9-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
package org.codemc.worldguardwrapper.implementation.v6;
|
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.minecraft.util.commands.CommandException;
|
||||||
import com.sk89q.worldedit.BlockVector;
|
import com.sk89q.worldedit.BlockVector;
|
||||||
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
|
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
|
||||||
|
@ -15,25 +18,33 @@ import com.sk89q.worldguard.protection.managers.RegionManager;
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
|
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedPolygonalRegion;
|
import com.sk89q.worldguard.protection.regions.ProtectedPolygonalRegion;
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
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 lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
import org.codemc.worldguardwrapper.flag.IWrappedFlag;
|
import org.codemc.worldguardwrapper.flag.IWrappedFlag;
|
||||||
import org.codemc.worldguardwrapper.flag.WrappedState;
|
import org.codemc.worldguardwrapper.flag.WrappedState;
|
||||||
|
import org.codemc.worldguardwrapper.handler.IHandler;
|
||||||
import org.codemc.worldguardwrapper.implementation.IWorldGuardImplementation;
|
import org.codemc.worldguardwrapper.implementation.IWorldGuardImplementation;
|
||||||
import org.codemc.worldguardwrapper.implementation.v6.flag.AbstractWrappedFlag;
|
import org.codemc.worldguardwrapper.implementation.v6.flag.AbstractWrappedFlag;
|
||||||
import org.codemc.worldguardwrapper.implementation.v6.region.WrappedRegion;
|
import org.codemc.worldguardwrapper.implementation.v6.region.WrappedRegion;
|
||||||
import org.codemc.worldguardwrapper.implementation.v6.utility.WorldGuardFlagUtilities;
|
import org.codemc.worldguardwrapper.implementation.v6.utility.WorldGuardFlagUtilities;
|
||||||
import org.codemc.worldguardwrapper.implementation.v6.utility.WorldGuardVectorUtilities;
|
import org.codemc.worldguardwrapper.implementation.v6.utility.WorldGuardVectorUtilities;
|
||||||
import org.codemc.worldguardwrapper.region.IWrappedRegion;
|
import org.codemc.worldguardwrapper.region.IWrappedRegion;
|
||||||
|
import org.codemc.worldguardwrapper.region.IWrappedRegionSet;
|
||||||
import org.codemc.worldguardwrapper.selection.ICuboidSelection;
|
import org.codemc.worldguardwrapper.selection.ICuboidSelection;
|
||||||
import org.codemc.worldguardwrapper.selection.IPolygonalSelection;
|
import org.codemc.worldguardwrapper.selection.IPolygonalSelection;
|
||||||
import org.codemc.worldguardwrapper.selection.ISelection;
|
import org.codemc.worldguardwrapper.selection.ISelection;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.function.Supplier;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class WorldGuardImplementation implements IWorldGuardImplementation {
|
public class WorldGuardImplementation implements IWorldGuardImplementation {
|
||||||
|
@ -52,8 +63,9 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
|
||||||
flagRegistry = worldGuardPlugin.getFlagRegistry();
|
flagRegistry = worldGuardPlugin.getFlagRegistry();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Optional<LocalPlayer> wrapPlayer(Player player) {
|
private Optional<LocalPlayer> wrapPlayer(OfflinePlayer player) {
|
||||||
return Optional.ofNullable(player).map(bukkitPlayer -> worldGuardPlugin.wrapPlayer(player));
|
return Optional.ofNullable(player).map(bukkitPlayer -> bukkitPlayer.isOnline() ?
|
||||||
|
worldGuardPlugin.wrapPlayer((Player) bukkitPlayer) : worldGuardPlugin.wrapOfflinePlayer(bukkitPlayer));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Optional<RegionManager> getWorldManager(@NonNull World world) {
|
private Optional<RegionManager> getWorldManager(@NonNull World world) {
|
||||||
|
@ -74,6 +86,64 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
|
||||||
.orElse(null), flag));
|
.orElse(null), flag));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private IWrappedRegionSet wrapRegionSet(@NonNull World world, @NonNull ApplicableRegionSet regionSet) {
|
||||||
|
return new IWrappedRegionSet() {
|
||||||
|
|
||||||
|
@SuppressWarnings("NullableProblems")
|
||||||
|
@Override
|
||||||
|
public Iterator<IWrappedRegion> iterator() {
|
||||||
|
return Iterators.transform(regionSet.iterator(), region -> new WrappedRegion(world, region));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isVirtual() {
|
||||||
|
return regionSet.isVirtual();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <V> Optional<V> queryValue(OfflinePlayer subject, IWrappedFlag<V> flag) {
|
||||||
|
LocalPlayer subjectHandle = wrapPlayer(subject).orElse(null);
|
||||||
|
AbstractWrappedFlag<V> wrappedFlag = (AbstractWrappedFlag<V>) flag;
|
||||||
|
return Optional.ofNullable(regionSet.queryValue(subjectHandle, wrappedFlag.getHandle()))
|
||||||
|
.flatMap(wrappedFlag::fromWGValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <V> Collection<V> queryAllValues(OfflinePlayer subject, IWrappedFlag<V> flag) {
|
||||||
|
LocalPlayer subjectHandle = wrapPlayer(subject).orElse(null);
|
||||||
|
AbstractWrappedFlag<V> wrappedFlag = (AbstractWrappedFlag<V>) flag;
|
||||||
|
return regionSet.queryAllValues(subjectHandle, wrappedFlag.getHandle()).stream()
|
||||||
|
.map(wrappedFlag::fromWGValue)
|
||||||
|
.filter(Optional::isPresent)
|
||||||
|
.map(Optional::get)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isOwnerOfAll(OfflinePlayer player) {
|
||||||
|
LocalPlayer playerHandle = wrapPlayer(player).orElse(null);
|
||||||
|
return regionSet.isOwnerOfAll(playerHandle);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isMemberOfAll(OfflinePlayer player) {
|
||||||
|
LocalPlayer playerHandle = wrapPlayer(player).orElse(null);
|
||||||
|
return regionSet.isMemberOfAll(playerHandle);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int size() {
|
||||||
|
return regionSet.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<IWrappedRegion> getRegions() {
|
||||||
|
return regionSet.getRegions().stream()
|
||||||
|
.map(region -> new WrappedRegion(world, region)).collect(Collectors.toSet());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JavaPlugin getWorldGuardPlugin() {
|
public JavaPlugin getWorldGuardPlugin() {
|
||||||
return WorldGuardPlugin.inst();
|
return WorldGuardPlugin.inst();
|
||||||
|
@ -84,6 +154,49 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
|
||||||
return 6;
|
return 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerHandler(Supplier<IHandler> factory) {
|
||||||
|
worldGuardPlugin.getSessionManager().registerHandler(new Handler.Factory<Handler>() {
|
||||||
|
@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<ProtectedRegion> entered, Set<ProtectedRegion> exited, MoveType moveType) {
|
||||||
|
Set<IWrappedRegion> mappedEntered = ImmutableSet.copyOf(Collections2.transform(entered, region -> new WrappedRegion(to.getWorld(), region)));
|
||||||
|
Set<IWrappedRegion> 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;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}, null);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T> Optional<IWrappedFlag<T>> getFlag(String name, Class<T> type) {
|
public <T> Optional<IWrappedFlag<T>> getFlag(String name, Class<T> type) {
|
||||||
return Optional.ofNullable(flagRegistry.get(name))
|
return Optional.ofNullable(flagRegistry.get(name))
|
||||||
|
@ -93,7 +206,7 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
|
||||||
@Override
|
@Override
|
||||||
public <T> Optional<T> queryFlag(Player player, Location location, IWrappedFlag<T> flag) {
|
public <T> Optional<T> queryFlag(Player player, Location location, IWrappedFlag<T> flag) {
|
||||||
AbstractWrappedFlag<T> wrappedFlag = (AbstractWrappedFlag<T>) flag;
|
AbstractWrappedFlag<T> wrappedFlag = (AbstractWrappedFlag<T>) flag;
|
||||||
return queryValue(player, location, wrappedFlag.getHandle()).flatMap(value -> wrappedFlag.fromWGValue(value));
|
return queryValue(player, location, wrappedFlag.getHandle()).flatMap(wrappedFlag::fromWGValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -119,7 +232,7 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
|
||||||
Map.Entry<IWrappedFlag<?>, Object> wrapped = WorldGuardFlagUtilities.wrap(flag, value);
|
Map.Entry<IWrappedFlag<?>, Object> wrapped = WorldGuardFlagUtilities.wrap(flag, value);
|
||||||
flags.put(wrapped.getKey(), wrapped.getValue());
|
flags.put(wrapped.getKey(), wrapped.getValue());
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
continue; // Unsupported flag type
|
// Unsupported flag type
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -128,7 +241,7 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
|
||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||||
@Override
|
@Override
|
||||||
public <T> Optional<IWrappedFlag<T>> registerFlag(String name, Class<T> type, T defaultValue) {
|
public <T> Optional<IWrappedFlag<T>> registerFlag(String name, Class<T> type, T defaultValue) {
|
||||||
final Flag<?> flag;
|
final Flag<?> flag;
|
||||||
|
@ -203,6 +316,11 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
|
||||||
return set;
|
return set;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<IWrappedRegionSet> getRegionSet(@NonNull Location location) {
|
||||||
|
return getApplicableRegions(location).map(regionSet -> wrapRegionSet(location.getWorld(), regionSet));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<IWrappedRegion> addRegion(String id, List<Location> points, int minY, int maxY) {
|
public Optional<IWrappedRegion> addRegion(String id, List<Location> points, int minY, int maxY) {
|
||||||
ProtectedRegion region;
|
ProtectedRegion region;
|
||||||
|
|
|
@ -65,6 +65,7 @@ public class WorldGuardFlagUtilities {
|
||||||
|
|
||||||
public Map.Entry<IWrappedFlag<?>, Object> wrap(Flag<?> flag, Object value) {
|
public Map.Entry<IWrappedFlag<?>, Object> wrap(Flag<?> flag, Object value) {
|
||||||
IWrappedFlag<?> wrappedFlag = wrapFixType(flag, value.getClass());
|
IWrappedFlag<?> wrappedFlag = wrapFixType(flag, value.getClass());
|
||||||
|
//noinspection OptionalGetWithoutIsPresent
|
||||||
Object wrappedValue = ((AbstractWrappedFlag<?>) wrappedFlag).fromWGValue(value).get(); // value is non-null
|
Object wrappedValue = ((AbstractWrappedFlag<?>) wrappedFlag).fromWGValue(value).get(); // value is non-null
|
||||||
return Maps.immutableEntry(wrappedFlag, wrappedValue);
|
return Maps.immutableEntry(wrappedFlag, wrappedValue);
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.codemc.worldguardwrapper</groupId>
|
<groupId>org.codemc.worldguardwrapper</groupId>
|
||||||
<artifactId>worldguardwrapper-implementation</artifactId>
|
<artifactId>worldguardwrapper-implementation</artifactId>
|
||||||
<version>1.1.9-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>worldguardwrapper-implementation-v7</artifactId>
|
<artifactId>worldguardwrapper-implementation-v7</artifactId>
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.groupId}</groupId>
|
<groupId>${project.groupId}</groupId>
|
||||||
<artifactId>worldguardwrapper-api</artifactId>
|
<artifactId>worldguardwrapper-api</artifactId>
|
||||||
<version>1.1.9-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
package org.codemc.worldguardwrapper.implementation.v7;
|
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.minecraft.util.commands.CommandException;
|
||||||
import com.sk89q.worldedit.IncompleteRegionException;
|
import com.sk89q.worldedit.IncompleteRegionException;
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
|
@ -20,24 +23,32 @@ import com.sk89q.worldguard.protection.managers.RegionManager;
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
|
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedPolygonalRegion;
|
import com.sk89q.worldguard.protection.regions.ProtectedPolygonalRegion;
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
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 lombok.NonNull;
|
import lombok.NonNull;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
import org.codemc.worldguardwrapper.flag.IWrappedFlag;
|
import org.codemc.worldguardwrapper.flag.IWrappedFlag;
|
||||||
import org.codemc.worldguardwrapper.flag.WrappedState;
|
import org.codemc.worldguardwrapper.flag.WrappedState;
|
||||||
|
import org.codemc.worldguardwrapper.handler.IHandler;
|
||||||
import org.codemc.worldguardwrapper.implementation.IWorldGuardImplementation;
|
import org.codemc.worldguardwrapper.implementation.IWorldGuardImplementation;
|
||||||
import org.codemc.worldguardwrapper.implementation.v7.flag.AbstractWrappedFlag;
|
import org.codemc.worldguardwrapper.implementation.v7.flag.AbstractWrappedFlag;
|
||||||
import org.codemc.worldguardwrapper.implementation.v7.region.WrappedRegion;
|
import org.codemc.worldguardwrapper.implementation.v7.region.WrappedRegion;
|
||||||
import org.codemc.worldguardwrapper.implementation.v7.utility.WorldGuardFlagUtilities;
|
import org.codemc.worldguardwrapper.implementation.v7.utility.WorldGuardFlagUtilities;
|
||||||
import org.codemc.worldguardwrapper.region.IWrappedRegion;
|
import org.codemc.worldguardwrapper.region.IWrappedRegion;
|
||||||
|
import org.codemc.worldguardwrapper.region.IWrappedRegionSet;
|
||||||
import org.codemc.worldguardwrapper.selection.ICuboidSelection;
|
import org.codemc.worldguardwrapper.selection.ICuboidSelection;
|
||||||
import org.codemc.worldguardwrapper.selection.IPolygonalSelection;
|
import org.codemc.worldguardwrapper.selection.IPolygonalSelection;
|
||||||
import org.codemc.worldguardwrapper.selection.ISelection;
|
import org.codemc.worldguardwrapper.selection.ISelection;
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.function.Supplier;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class WorldGuardImplementation implements IWorldGuardImplementation {
|
public class WorldGuardImplementation implements IWorldGuardImplementation {
|
||||||
|
@ -58,8 +69,9 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Optional<LocalPlayer> wrapPlayer(Player player) {
|
private Optional<LocalPlayer> wrapPlayer(OfflinePlayer player) {
|
||||||
return Optional.ofNullable(player).map(bukkitPlayer -> worldGuardPlugin.wrapPlayer(player));
|
return Optional.ofNullable(player).map(bukkitPlayer -> bukkitPlayer.isOnline() ?
|
||||||
|
worldGuardPlugin.wrapPlayer((Player) bukkitPlayer) : worldGuardPlugin.wrapOfflinePlayer(bukkitPlayer));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Optional<RegionManager> getWorldManager(@NonNull World world) {
|
private Optional<RegionManager> getWorldManager(@NonNull World world) {
|
||||||
|
@ -80,6 +92,64 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
|
||||||
.orElse(null), flag));
|
.orElse(null), flag));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private IWrappedRegionSet wrapRegionSet(@NonNull World world, @NonNull ApplicableRegionSet regionSet) {
|
||||||
|
return new IWrappedRegionSet() {
|
||||||
|
|
||||||
|
@SuppressWarnings("NullableProblems")
|
||||||
|
@Override
|
||||||
|
public Iterator<IWrappedRegion> iterator() {
|
||||||
|
return Iterators.transform(regionSet.iterator(), region -> new WrappedRegion(world, region));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isVirtual() {
|
||||||
|
return regionSet.isVirtual();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <V> Optional<V> queryValue(OfflinePlayer subject, IWrappedFlag<V> flag) {
|
||||||
|
LocalPlayer subjectHandle = wrapPlayer(subject).orElse(null);
|
||||||
|
AbstractWrappedFlag<V> wrappedFlag = (AbstractWrappedFlag<V>) flag;
|
||||||
|
return Optional.ofNullable(regionSet.queryValue(subjectHandle, wrappedFlag.getHandle()))
|
||||||
|
.flatMap(wrappedFlag::fromWGValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <V> Collection<V> queryAllValues(OfflinePlayer subject, IWrappedFlag<V> flag) {
|
||||||
|
LocalPlayer subjectHandle = wrapPlayer(subject).orElse(null);
|
||||||
|
AbstractWrappedFlag<V> wrappedFlag = (AbstractWrappedFlag<V>) flag;
|
||||||
|
return regionSet.queryAllValues(subjectHandle, wrappedFlag.getHandle()).stream()
|
||||||
|
.map(wrappedFlag::fromWGValue)
|
||||||
|
.filter(Optional::isPresent)
|
||||||
|
.map(Optional::get)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isOwnerOfAll(OfflinePlayer player) {
|
||||||
|
LocalPlayer playerHandle = wrapPlayer(player).orElse(null);
|
||||||
|
return regionSet.isOwnerOfAll(playerHandle);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isMemberOfAll(OfflinePlayer player) {
|
||||||
|
LocalPlayer playerHandle = wrapPlayer(player).orElse(null);
|
||||||
|
return regionSet.isMemberOfAll(playerHandle);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int size() {
|
||||||
|
return regionSet.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<IWrappedRegion> getRegions() {
|
||||||
|
return regionSet.getRegions().stream()
|
||||||
|
.map(region -> new WrappedRegion(world, region)).collect(Collectors.toSet());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JavaPlugin getWorldGuardPlugin() {
|
public JavaPlugin getWorldGuardPlugin() {
|
||||||
return WorldGuardPlugin.inst();
|
return WorldGuardPlugin.inst();
|
||||||
|
@ -90,6 +160,59 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
|
||||||
return 7;
|
return 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void registerHandler(Supplier<IHandler> factory) {
|
||||||
|
core.getPlatform().getSessionManager().registerHandler(new Handler.Factory<Handler>() {
|
||||||
|
@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<ProtectedRegion> entered, Set<ProtectedRegion> exited, MoveType moveType) {
|
||||||
|
Player bukkitPlayer = BukkitAdapter.adapt(player);
|
||||||
|
Location bukkitFrom = BukkitAdapter.adapt(from);
|
||||||
|
Location bukkitTo = BukkitAdapter.adapt(to);
|
||||||
|
Set<IWrappedRegion> mappedEntered = ImmutableSet.copyOf(Collections2.transform(entered, region -> new WrappedRegion(bukkitTo.getWorld(), region)));
|
||||||
|
Set<IWrappedRegion> 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;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}, null);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T> Optional<IWrappedFlag<T>> getFlag(String name, Class<T> type) {
|
public <T> Optional<IWrappedFlag<T>> getFlag(String name, Class<T> type) {
|
||||||
return Optional.ofNullable(flagRegistry.get(name))
|
return Optional.ofNullable(flagRegistry.get(name))
|
||||||
|
@ -99,7 +222,7 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
|
||||||
@Override
|
@Override
|
||||||
public <T> Optional<T> queryFlag(Player player, Location location, IWrappedFlag<T> flag) {
|
public <T> Optional<T> queryFlag(Player player, Location location, IWrappedFlag<T> flag) {
|
||||||
AbstractWrappedFlag<T> wrappedFlag = (AbstractWrappedFlag<T>) flag;
|
AbstractWrappedFlag<T> wrappedFlag = (AbstractWrappedFlag<T>) flag;
|
||||||
return queryValue(player, location, wrappedFlag.getHandle()).flatMap(value -> wrappedFlag.fromWGValue(value));
|
return queryValue(player, location, wrappedFlag.getHandle()).flatMap(wrappedFlag::fromWGValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -125,7 +248,7 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
|
||||||
Map.Entry<IWrappedFlag<?>, Object> wrapped = WorldGuardFlagUtilities.wrap(flag, value);
|
Map.Entry<IWrappedFlag<?>, Object> wrapped = WorldGuardFlagUtilities.wrap(flag, value);
|
||||||
flags.put(wrapped.getKey(), wrapped.getValue());
|
flags.put(wrapped.getKey(), wrapped.getValue());
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
continue; // Unsupported flag type
|
// Unsupported flag type
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -134,7 +257,7 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
|
||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings({"unchecked", "rawtypes"})
|
||||||
@Override
|
@Override
|
||||||
public <T> Optional<IWrappedFlag<T>> registerFlag(String name, Class<T> type, T defaultValue) {
|
public <T> Optional<IWrappedFlag<T>> registerFlag(String name, Class<T> type, T defaultValue) {
|
||||||
final Flag<?> flag;
|
final Flag<?> flag;
|
||||||
|
@ -209,6 +332,11 @@ public class WorldGuardImplementation implements IWorldGuardImplementation {
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<IWrappedRegionSet> getRegionSet(@NonNull Location location) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Optional<IWrappedRegion> addRegion(String id, List<Location> points, int minY, int maxY) {
|
public Optional<IWrappedRegion> addRegion(String id, List<Location> points, int minY, int maxY) {
|
||||||
ProtectedRegion region;
|
ProtectedRegion region;
|
||||||
|
|
|
@ -4,7 +4,7 @@ import com.google.common.collect.Maps;
|
||||||
import com.sk89q.worldedit.math.Vector3;
|
import com.sk89q.worldedit.math.Vector3;
|
||||||
import com.sk89q.worldguard.protection.flags.Flag;
|
import com.sk89q.worldguard.protection.flags.Flag;
|
||||||
import com.sk89q.worldguard.protection.flags.StateFlag;
|
import com.sk89q.worldguard.protection.flags.StateFlag;
|
||||||
|
import lombok.experimental.UtilityClass;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
import org.codemc.worldguardwrapper.flag.IWrappedFlag;
|
import org.codemc.worldguardwrapper.flag.IWrappedFlag;
|
||||||
|
@ -13,10 +13,7 @@ import org.codemc.worldguardwrapper.implementation.v7.flag.AbstractWrappedFlag;
|
||||||
import org.codemc.worldguardwrapper.implementation.v7.flag.WrappedPrimitiveFlag;
|
import org.codemc.worldguardwrapper.implementation.v7.flag.WrappedPrimitiveFlag;
|
||||||
import org.codemc.worldguardwrapper.implementation.v7.flag.WrappedStatusFlag;
|
import org.codemc.worldguardwrapper.implementation.v7.flag.WrappedStatusFlag;
|
||||||
|
|
||||||
import lombok.experimental.UtilityClass;
|
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
@UtilityClass
|
@UtilityClass
|
||||||
public class WorldGuardFlagUtilities {
|
public class WorldGuardFlagUtilities {
|
||||||
|
@ -65,6 +62,7 @@ public class WorldGuardFlagUtilities {
|
||||||
|
|
||||||
public Map.Entry<IWrappedFlag<?>, Object> wrap(Flag<?> flag, Object value) {
|
public Map.Entry<IWrappedFlag<?>, Object> wrap(Flag<?> flag, Object value) {
|
||||||
IWrappedFlag<?> wrappedFlag = wrapFixType(flag, value.getClass());
|
IWrappedFlag<?> wrappedFlag = wrapFixType(flag, value.getClass());
|
||||||
|
//noinspection OptionalGetWithoutIsPresent
|
||||||
Object wrappedValue = ((AbstractWrappedFlag<?>) wrappedFlag).fromWGValue(value).get(); // value is non-null
|
Object wrappedValue = ((AbstractWrappedFlag<?>) wrappedFlag).fromWGValue(value).get(); // value is non-null
|
||||||
return Maps.immutableEntry(wrappedFlag, wrappedValue);
|
return Maps.immutableEntry(wrappedFlag, wrappedValue);
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<parent>
|
<parent>
|
||||||
<groupId>org.codemc.worldguardwrapper</groupId>
|
<groupId>org.codemc.worldguardwrapper</groupId>
|
||||||
<artifactId>worldguardwrapper-parent</artifactId>
|
<artifactId>worldguardwrapper-parent</artifactId>
|
||||||
<version>1.1.9-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<artifactId>worldguardwrapper</artifactId>
|
<artifactId>worldguardwrapper</artifactId>
|
||||||
|
@ -18,22 +18,22 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.groupId}</groupId>
|
<groupId>${project.groupId}</groupId>
|
||||||
<artifactId>worldguardwrapper-api</artifactId>
|
<artifactId>worldguardwrapper-api</artifactId>
|
||||||
<version>1.1.9-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.groupId}</groupId>
|
<groupId>${project.groupId}</groupId>
|
||||||
<artifactId>worldguardwrapper-implementation-legacy</artifactId>
|
<artifactId>worldguardwrapper-implementation-legacy</artifactId>
|
||||||
<version>1.1.9-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.groupId}</groupId>
|
<groupId>${project.groupId}</groupId>
|
||||||
<artifactId>worldguardwrapper-implementation-v6</artifactId>
|
<artifactId>worldguardwrapper-implementation-v6</artifactId>
|
||||||
<version>1.1.9-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>${project.groupId}</groupId>
|
<groupId>${project.groupId}</groupId>
|
||||||
<artifactId>worldguardwrapper-implementation-v7</artifactId>
|
<artifactId>worldguardwrapper-implementation-v7</artifactId>
|
||||||
<version>1.1.9-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|
6
pom.xml
6
pom.xml
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
<groupId>org.codemc.worldguardwrapper</groupId>
|
<groupId>org.codemc.worldguardwrapper</groupId>
|
||||||
<artifactId>worldguardwrapper-parent</artifactId>
|
<artifactId>worldguardwrapper-parent</artifactId>
|
||||||
<version>1.1.9-SNAPSHOT</version>
|
<version>1.2.0-SNAPSHOT</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
|
@ -51,7 +51,7 @@
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
|
||||||
<java.version>1.8</java.version>
|
<java.version>1.8</java.version>
|
||||||
<spigot-api.version>1.15.2-R0.1-SNAPSHOT</spigot-api.version>
|
<spigot-api.version>1.16.3-R0.1-SNAPSHOT</spigot-api.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<repositories>
|
<repositories>
|
||||||
|
@ -89,7 +89,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.projectlombok</groupId>
|
<groupId>org.projectlombok</groupId>
|
||||||
<artifactId>lombok</artifactId>
|
<artifactId>lombok</artifactId>
|
||||||
<version>1.18.12</version>
|
<version>1.18.16</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user