package com.plotsquared.core.util; import com.plotsquared.core.PlotSquared; import com.plotsquared.core.config.Settings; import com.plotsquared.core.plot.flag.implementations.DoneFlag; import com.plotsquared.core.plot.flag.implementations.NoWorldeditFlag; import com.plotsquared.core.location.Location; import com.plotsquared.core.plot.Plot; import com.plotsquared.core.plot.PlotArea; import com.plotsquared.core.player.PlotPlayer; import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.regions.CuboidRegion; import java.util.HashSet; import java.util.Set; import java.util.UUID; public class WEManager { public static boolean maskContains(Set mask, int x, int y, int z) { for (CuboidRegion region : mask) { if (RegionUtil.contains(region, x, y, z)) { return true; } } return false; } public static boolean maskContains(Set mask, int x, int z) { for (CuboidRegion region : mask) { if (RegionUtil.contains(region, x, z)) { return true; } } return false; } public static boolean maskContains(Set mask, double dx, double dy, double dz) { int x = Math.toIntExact(Math.round(dx >= 0 ? dx - 0.5 : dx + 0.5)); int y = Math.toIntExact(Math.round(dy - 0.5)); int z = Math.toIntExact(Math.round(dz >= 0 ? dz - 0.5 : dz + 0.5)); for (CuboidRegion region : mask) { if (RegionUtil.contains(region, x, y, z)) { return true; } } return false; } public static boolean maskContains(Set mask, double dx, double dz) { int x = Math.toIntExact(Math.round(dx >= 0 ? dx - 0.5 : dx + 0.5)); int z = Math.toIntExact(Math.round(dz >= 0 ? dz - 0.5 : dz + 0.5)); for (CuboidRegion region : mask) { if (RegionUtil.contains(region, x, z)) { return true; } } return false; } public static HashSet getMask(PlotPlayer player) { HashSet regions = new HashSet<>(); UUID uuid = player.getUUID(); Location location = player.getLocation(); String world = location.getWorld(); if (!PlotSquared.get().hasPlotArea(world)) { regions.add(RegionUtil .createRegion(Integer.MIN_VALUE, Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE)); return regions; } PlotArea area = player.getApplicablePlotArea(); if (area == null) { return regions; } boolean allowMember = player.hasPermission("plots.worldedit.member"); Plot plot = player.getCurrentPlot(); if (plot == null) { plot = player.getMeta("WorldEditRegionPlot"); } if (plot != null && (!Settings.Done.RESTRICT_BUILDING || !DoneFlag.isDone(plot)) && ( (allowMember && plot.isAdded(uuid)) || (!allowMember && (plot.isOwner(uuid)) || plot .getTrusted().contains(uuid))) && !plot.getFlag(NoWorldeditFlag.class)) { for (CuboidRegion region : plot.getRegions()) { BlockVector3 pos1 = region.getMinimumPoint().withY(area.getMinBuildHeight()); BlockVector3 pos2 = region.getMaximumPoint().withY(area.getMaxBuildHeight()); CuboidRegion copy = new CuboidRegion(pos1, pos2); regions.add(copy); } player.setMeta("WorldEditRegionPlot", plot); } return regions; } public static boolean intersects(CuboidRegion region1, CuboidRegion region2) { return RegionUtil.intersects(region1, region2); } public static boolean regionContains(CuboidRegion selection, HashSet mask) { for (CuboidRegion region : mask) { if (intersects(region, selection)) { return true; } } return false; } }