mirror of
				https://github.com/CodeMC/WorldGuardWrapper.git
				synced 2025-10-31 07:02:36 +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