forked from clone/WorldGuardWrapper
		
	Allow adding regions
+ Added WrappedRegion#contains
This commit is contained in:
		
							parent
							
								
									2b70f54d05
								
							
						
					
					
						commit
						e43eed1821
					
				|  | @ -3,6 +3,8 @@ package org.codemc.worldguardwrapper.region; | ||||||
| import java.util.Map; | import java.util.Map; | ||||||
| import java.util.Optional; | import java.util.Optional; | ||||||
| 
 | 
 | ||||||
|  | import org.bukkit.Location; | ||||||
|  | 
 | ||||||
| public interface WrappedRegion { | public interface WrappedRegion { | ||||||
| 
 | 
 | ||||||
|     String getId(); |     String getId(); | ||||||
|  | @ -13,4 +15,6 @@ public interface WrappedRegion { | ||||||
| 
 | 
 | ||||||
|     int getPriority(); |     int getPriority(); | ||||||
| 
 | 
 | ||||||
|  |     boolean contains(Location location); | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -8,6 +8,8 @@ import org.bukkit.plugin.java.JavaPlugin; | ||||||
| import org.codemc.worldguardwrapper.flags.AbstractWrappedFlag; | import org.codemc.worldguardwrapper.flags.AbstractWrappedFlag; | ||||||
| import org.codemc.worldguardwrapper.region.WrappedRegion; | import org.codemc.worldguardwrapper.region.WrappedRegion; | ||||||
| 
 | 
 | ||||||
|  | import java.util.Arrays; | ||||||
|  | import java.util.List; | ||||||
| import java.util.Map; | import java.util.Map; | ||||||
| import java.util.Optional; | import java.util.Optional; | ||||||
| import java.util.Set; | import java.util.Set; | ||||||
|  | @ -85,7 +87,7 @@ public interface IWorldGuardImplementation { | ||||||
|      * @param id    ID of the region |      * @param id    ID of the region | ||||||
|      * @return The region |      * @return The region | ||||||
|      */ |      */ | ||||||
|     Optional<WrappedRegion> getRegion(World world, String id); |     Optional<WrappedRegion> getRegion(@NonNull World world, @NonNull String id); | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * Get an unmodifiable map of regions containing the state of the |      * Get an unmodifiable map of regions containing the state of the | ||||||
|  | @ -97,7 +99,7 @@ public interface IWorldGuardImplementation { | ||||||
|      * @param world The world |      * @param world The world | ||||||
|      * @return A map of regions |      * @return A map of regions | ||||||
|      */ |      */ | ||||||
|     Map<String, WrappedRegion> getRegions(World world); |     Map<String, WrappedRegion> getRegions(@NonNull World world); | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * Get a set of regions at the given location. |      * Get a set of regions at the given location. | ||||||
|  | @ -105,6 +107,29 @@ public interface IWorldGuardImplementation { | ||||||
|      * @param location The location |      * @param location The location | ||||||
|      * @return A set of regions |      * @return A set of regions | ||||||
|      */ |      */ | ||||||
|     Set<WrappedRegion> getRegions(Location location); |     Set<WrappedRegion> getRegions(@NonNull Location location); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Add a region. If only two points are given, a cuboid region will be created. | ||||||
|  |      *  | ||||||
|  |      * @param id     The region ID | ||||||
|  |      * @param points A {@link List} of points that the region should contain | ||||||
|  |      * @param minY   The minimum y coordinate | ||||||
|  |      * @param maxY   The maximum y coordinate | ||||||
|  |      * @return The added region | ||||||
|  |      */ | ||||||
|  |     Optional<WrappedRegion> addRegion(@NonNull String id, @NonNull List<Location> points, int minY, int maxY); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Add a cuboid region. | ||||||
|  |      *  | ||||||
|  |      * @param id     The region ID | ||||||
|  |      * @param point1 The first point of the region | ||||||
|  |      * @param point2 The second point of the region | ||||||
|  |      * @return The added region | ||||||
|  |      */ | ||||||
|  |     default Optional<WrappedRegion> addCuboidRegion(@NonNull String id, @NonNull Location point1, @NonNull Location point2) { | ||||||
|  |         return addRegion(id, Arrays.asList(point1, point2), 0, 0); | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -1,5 +1,7 @@ | ||||||
| package org.codemc.worldguardwrapper.implementation.v6; | package org.codemc.worldguardwrapper.implementation.v6; | ||||||
| 
 | 
 | ||||||
|  | import com.sk89q.worldedit.BlockVector; | ||||||
|  | import com.sk89q.worldedit.BlockVector2D; | ||||||
| import com.sk89q.worldguard.LocalPlayer; | import com.sk89q.worldguard.LocalPlayer; | ||||||
| import com.sk89q.worldguard.bukkit.WorldGuardPlugin; | import com.sk89q.worldguard.bukkit.WorldGuardPlugin; | ||||||
| import com.sk89q.worldguard.protection.ApplicableRegionSet; | import com.sk89q.worldguard.protection.ApplicableRegionSet; | ||||||
|  | @ -10,6 +12,8 @@ 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.ProtectedCuboidRegion; | ||||||
|  | import com.sk89q.worldguard.protection.regions.ProtectedPolygonalRegion; | ||||||
| import com.sk89q.worldguard.protection.regions.ProtectedRegion; | import com.sk89q.worldguard.protection.regions.ProtectedRegion; | ||||||
| import lombok.NoArgsConstructor; | import lombok.NoArgsConstructor; | ||||||
| import lombok.NonNull; | import lombok.NonNull; | ||||||
|  | @ -22,6 +26,7 @@ import org.codemc.worldguardwrapper.implementation.IWorldGuardImplementation; | ||||||
| import org.codemc.worldguardwrapper.region.WrappedRegion; | import org.codemc.worldguardwrapper.region.WrappedRegion; | ||||||
| 
 | 
 | ||||||
| import java.util.*; | import java.util.*; | ||||||
|  | import java.util.stream.Collectors; | ||||||
| 
 | 
 | ||||||
| @NoArgsConstructor | @NoArgsConstructor | ||||||
| public class WorldGuardImplementation implements IWorldGuardImplementation { | public class WorldGuardImplementation implements IWorldGuardImplementation { | ||||||
|  | @ -49,6 +54,14 @@ public class WorldGuardImplementation implements IWorldGuardImplementation { | ||||||
|         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 BlockVector toBlockVector(Location location) { | ||||||
|  |         return new BlockVector(location.getX(), location.getY(), location.getZ()); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private List<BlockVector2D> toBlockVector2DList(List<Location> locations) { | ||||||
|  |         return locations.stream().map(location -> new BlockVector2D(location.getX(), location.getZ())).collect(Collectors.toList()); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     private WrappedRegion toRegion(ProtectedRegion region) { |     private WrappedRegion toRegion(ProtectedRegion region) { | ||||||
|         return new WrappedRegion() { |         return new WrappedRegion() { | ||||||
| 
 | 
 | ||||||
|  | @ -75,6 +88,11 @@ public class WorldGuardImplementation implements IWorldGuardImplementation { | ||||||
|                 return region.getPriority(); |                 return region.getPriority(); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  |             @Override | ||||||
|  |             public boolean contains(Location location) { | ||||||
|  |                 return region.contains(toBlockVector(location)); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|         }; |         }; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -179,4 +197,22 @@ public class WorldGuardImplementation implements IWorldGuardImplementation { | ||||||
|         return set; |         return set; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     @Override | ||||||
|  |     public Optional<WrappedRegion> addRegion(String id, List<Location> points, int minY, int maxY) { | ||||||
|  |         ProtectedRegion region; | ||||||
|  |         if (points.size() == 2) { | ||||||
|  |             region = new ProtectedCuboidRegion(id, toBlockVector(points.get(0)), toBlockVector(points.get(1))); | ||||||
|  |         } else { | ||||||
|  |             region = new ProtectedPolygonalRegion(id, toBlockVector2DList(points), minY, maxY); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         Optional<RegionManager> manager = getWorldManager(points.get(0).getWorld()); | ||||||
|  |         if (manager.isPresent()) { | ||||||
|  |             manager.get().addRegion(region); | ||||||
|  |             return Optional.of(toRegion(region)); | ||||||
|  |         } else { | ||||||
|  |             return Optional.empty(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -2,6 +2,8 @@ package org.codemc.worldguardwrapper.implementation.v7; | ||||||
| 
 | 
 | ||||||
| import com.sk89q.worldedit.bukkit.BukkitAdapter; | import com.sk89q.worldedit.bukkit.BukkitAdapter; | ||||||
| import com.sk89q.worldedit.bukkit.BukkitWorld; | import com.sk89q.worldedit.bukkit.BukkitWorld; | ||||||
|  | import com.sk89q.worldedit.math.BlockVector2; | ||||||
|  | import com.sk89q.worldedit.math.BlockVector3; | ||||||
| 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; | ||||||
|  | @ -13,6 +15,8 @@ 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.ProtectedCuboidRegion; | ||||||
|  | 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.Bukkit; | import org.bukkit.Bukkit; | ||||||
|  | @ -63,6 +67,14 @@ public class WorldGuardImplementation implements IWorldGuardImplementation { | ||||||
|         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 BlockVector3 toBlockVector3(Location location) { | ||||||
|  |         return BlockVector3.at(location.getX(), location.getY(), location.getZ()); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private List<BlockVector2> toBlockVector2List(List<Location> locations) { | ||||||
|  |         return locations.stream().map(location -> BlockVector2.at(location.getX(), location.getZ())).collect(Collectors.toList()); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     private WrappedRegion toRegion(ProtectedRegion region) { |     private WrappedRegion toRegion(ProtectedRegion region) { | ||||||
|         return new WrappedRegion() { |         return new WrappedRegion() { | ||||||
| 
 | 
 | ||||||
|  | @ -89,6 +101,11 @@ public class WorldGuardImplementation implements IWorldGuardImplementation { | ||||||
|                 return region.getPriority(); |                 return region.getPriority(); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|  |             @Override | ||||||
|  |             public boolean contains(Location location) { | ||||||
|  |                 return region.contains(toBlockVector3(location)); | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|         }; |         }; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -195,4 +212,22 @@ public class WorldGuardImplementation implements IWorldGuardImplementation { | ||||||
|                 .map(this::toRegion) |                 .map(this::toRegion) | ||||||
|                 .collect(Collectors.toSet()); |                 .collect(Collectors.toSet()); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public Optional<WrappedRegion> addRegion(String id, List<Location> points, int minY, int maxY) { | ||||||
|  |         ProtectedRegion region; | ||||||
|  |         if (points.size() == 2) { | ||||||
|  |             region = new ProtectedCuboidRegion(id, toBlockVector3(points.get(0)), toBlockVector3(points.get(1))); | ||||||
|  |         } else { | ||||||
|  |             region = new ProtectedPolygonalRegion(id, toBlockVector2List(points), minY, maxY); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         Optional<RegionManager> manager = getWorldManager(points.get(0).getWorld()); | ||||||
|  |         if (manager.isPresent()) { | ||||||
|  |             manager.get().addRegion(region); | ||||||
|  |             return Optional.of(toRegion(region)); | ||||||
|  |         } else { | ||||||
|  |             return Optional.empty(); | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user