mirror of
https://github.com/CodeMC/WorldGuardWrapper.git
synced 2025-01-18 12:12:37 +01:00
Add basic region getters
Only supports names and flags for now.
This commit is contained in:
parent
ad9ff41b7b
commit
ae7fcbb8aa
|
@ -0,0 +1,18 @@
|
||||||
|
package org.codemc.worldguardwrapper.implementation;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
@AllArgsConstructor
|
||||||
|
public abstract class AbstractRegion {
|
||||||
|
|
||||||
|
private String id;
|
||||||
|
|
||||||
|
public abstract Object getFlag(String name);
|
||||||
|
|
||||||
|
public abstract Map<String, Object> getFlags();
|
||||||
|
|
||||||
|
}
|
|
@ -1,8 +1,11 @@
|
||||||
package org.codemc.worldguardwrapper.implementation;
|
package org.codemc.worldguardwrapper.implementation;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
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;
|
||||||
|
|
||||||
|
@ -73,4 +76,33 @@ public interface IWorldGuardImplementation {
|
||||||
* @return Whether the flag has been registered
|
* @return Whether the flag has been registered
|
||||||
*/
|
*/
|
||||||
<T> boolean registerFlag(@NonNull AbstractFlag<T> flag);
|
<T> boolean registerFlag(@NonNull AbstractFlag<T> flag);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a region by its ID.
|
||||||
|
*
|
||||||
|
* @param world The world
|
||||||
|
* @param id ID of the region
|
||||||
|
* @return The region
|
||||||
|
*/
|
||||||
|
Optional<AbstractRegion> getRegion(World world, String id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get an unmodifiable map of regions containing the state of the
|
||||||
|
* index at the time of call.
|
||||||
|
*
|
||||||
|
* <p>This call is relatively heavy (and may block other threads),
|
||||||
|
* so refrain from calling it frequently.</p>
|
||||||
|
*
|
||||||
|
* @param world The world
|
||||||
|
* @return A map of regions
|
||||||
|
*/
|
||||||
|
Map<String, AbstractRegion> getRegions(World world);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get a set of regions at the given location.
|
||||||
|
*
|
||||||
|
* @param location The location
|
||||||
|
* @return A set of regions
|
||||||
|
*/
|
||||||
|
Set<AbstractRegion> getRegions(Location location);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
package org.codemc.worldguardwrapper.implementation.v6;
|
package org.codemc.worldguardwrapper.implementation.v6;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import com.sk89q.worldguard.LocalPlayer;
|
import com.sk89q.worldguard.LocalPlayer;
|
||||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||||
|
@ -12,12 +16,14 @@ import com.sk89q.worldguard.protection.flags.StateFlag;
|
||||||
import com.sk89q.worldguard.protection.flags.registry.FlagConflictException;
|
import com.sk89q.worldguard.protection.flags.registry.FlagConflictException;
|
||||||
import com.sk89q.worldguard.protection.flags.registry.FlagRegistry;
|
import com.sk89q.worldguard.protection.flags.registry.FlagRegistry;
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
import com.sk89q.worldguard.protection.managers.RegionManager;
|
||||||
|
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
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.implementation.AbstractFlag;
|
import org.codemc.worldguardwrapper.implementation.AbstractFlag;
|
||||||
|
import org.codemc.worldguardwrapper.implementation.AbstractRegion;
|
||||||
import org.codemc.worldguardwrapper.implementation.AbstractWorldGuardImplementation;
|
import org.codemc.worldguardwrapper.implementation.AbstractWorldGuardImplementation;
|
||||||
|
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
|
@ -52,6 +58,22 @@ public class WorldGuardImplementation extends AbstractWorldGuardImplementation {
|
||||||
return getApplicableRegions(location).map(applicableRegions -> applicableRegions.queryState(wrapPlayer(player).orElse(null), stateFlags));
|
return getApplicableRegions(location).map(applicableRegions -> applicableRegions.queryState(wrapPlayer(player).orElse(null), stateFlags));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private AbstractRegion toRegion(ProtectedRegion region) {
|
||||||
|
return new AbstractRegion(region.getId()) {
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> getFlags() {
|
||||||
|
Map<String, Object> map = new HashMap<>();
|
||||||
|
region.getFlags().forEach((flag, value) -> map.put(flag.getName(), value));
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getFlag(String name) {
|
||||||
|
return region.getFlag(flagRegistry.get(name));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JavaPlugin getWorldGuardPlugin() {
|
public JavaPlugin getWorldGuardPlugin() {
|
||||||
return WorldGuardPlugin.inst();
|
return WorldGuardPlugin.inst();
|
||||||
|
@ -123,4 +145,33 @@ public class WorldGuardImplementation extends AbstractWorldGuardImplementation {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<AbstractRegion> getRegion(World world, String id) {
|
||||||
|
return getWorldManager(world).map(regionManager -> toRegion(regionManager.getRegion(id)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, AbstractRegion> getRegions(World world) {
|
||||||
|
RegionManager regionManager = plugin.getRegionManager(world);
|
||||||
|
Map<String, ProtectedRegion> regions = regionManager.getRegions();
|
||||||
|
|
||||||
|
Map<String, AbstractRegion> map = new HashMap<>();
|
||||||
|
regions.forEach((name, region) -> map.put(name, toRegion(region)));
|
||||||
|
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<AbstractRegion> getRegions(Location location) {
|
||||||
|
ApplicableRegionSet regionSet = getApplicableRegions(location).orElse(null);
|
||||||
|
Set<AbstractRegion> set = new HashSet<>();
|
||||||
|
|
||||||
|
if (regionSet == null) {
|
||||||
|
return set;
|
||||||
|
}
|
||||||
|
|
||||||
|
regionSet.forEach(region -> set.add(toRegion(region)));
|
||||||
|
return set;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,13 @@
|
||||||
package org.codemc.worldguardwrapper.implementation.v7;
|
package org.codemc.worldguardwrapper.implementation.v7;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
|
import com.sk89q.worldedit.bukkit.BukkitWorld;
|
||||||
import com.sk89q.worldguard.LocalPlayer;
|
import com.sk89q.worldguard.LocalPlayer;
|
||||||
import com.sk89q.worldguard.WorldGuard;
|
import com.sk89q.worldguard.WorldGuard;
|
||||||
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||||
|
@ -15,6 +20,7 @@ import com.sk89q.worldguard.protection.flags.StateFlag;
|
||||||
import com.sk89q.worldguard.protection.flags.registry.FlagConflictException;
|
import com.sk89q.worldguard.protection.flags.registry.FlagConflictException;
|
||||||
import com.sk89q.worldguard.protection.flags.registry.FlagRegistry;
|
import com.sk89q.worldguard.protection.flags.registry.FlagRegistry;
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
import com.sk89q.worldguard.protection.managers.RegionManager;
|
||||||
|
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
||||||
import com.sk89q.worldguard.protection.regions.RegionContainer;
|
import com.sk89q.worldguard.protection.regions.RegionContainer;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
@ -23,6 +29,7 @@ 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.implementation.AbstractFlag;
|
import org.codemc.worldguardwrapper.implementation.AbstractFlag;
|
||||||
|
import org.codemc.worldguardwrapper.implementation.AbstractRegion;
|
||||||
import org.codemc.worldguardwrapper.implementation.AbstractWorldGuardImplementation;
|
import org.codemc.worldguardwrapper.implementation.AbstractWorldGuardImplementation;
|
||||||
|
|
||||||
import lombok.NonNull;
|
import lombok.NonNull;
|
||||||
|
@ -65,6 +72,22 @@ public class WorldGuardImplementation extends AbstractWorldGuardImplementation {
|
||||||
return getApplicableRegions(location).map(applicableRegions -> applicableRegions.queryState(wrapPlayer(player).orElse(null), stateFlags));
|
return getApplicableRegions(location).map(applicableRegions -> applicableRegions.queryState(wrapPlayer(player).orElse(null), stateFlags));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private AbstractRegion toRegion(ProtectedRegion region) {
|
||||||
|
return new AbstractRegion(region.getId()) {
|
||||||
|
@Override
|
||||||
|
public Map<String, Object> getFlags() {
|
||||||
|
Map<String, Object> map = new HashMap<>();
|
||||||
|
region.getFlags().forEach((flag, value) -> map.put(flag.getName(), value));
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getFlag(String name) {
|
||||||
|
return region.getFlag(flagRegistry.get(name));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JavaPlugin getWorldGuardPlugin() {
|
public JavaPlugin getWorldGuardPlugin() {
|
||||||
return WorldGuardPlugin.inst();
|
return WorldGuardPlugin.inst();
|
||||||
|
@ -136,4 +159,33 @@ public class WorldGuardImplementation extends AbstractWorldGuardImplementation {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<AbstractRegion> getRegion(World world, String id) {
|
||||||
|
return getWorldManager(world).map(regionManager -> toRegion(regionManager.getRegion(id)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, AbstractRegion> getRegions(World world) {
|
||||||
|
RegionManager regionManager = container.get(new BukkitWorld(world));
|
||||||
|
Map<String, ProtectedRegion> regions = regionManager.getRegions();
|
||||||
|
|
||||||
|
Map<String, AbstractRegion> map = new HashMap<>();
|
||||||
|
regions.forEach((name, region) -> map.put(name, toRegion(region)));
|
||||||
|
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Set<AbstractRegion> getRegions(Location location) {
|
||||||
|
ApplicableRegionSet regionSet = getApplicableRegions(location).orElse(null);
|
||||||
|
Set<AbstractRegion> set = new HashSet<>();
|
||||||
|
|
||||||
|
if (regionSet == null) {
|
||||||
|
return set;
|
||||||
|
}
|
||||||
|
|
||||||
|
regionSet.forEach(region -> set.add(toRegion(region)));
|
||||||
|
return set;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user