forked from SteamWar/SteamWar
Add WorldEditSelectionSaver
This commit is contained in:
@@ -19,17 +19,21 @@
|
||||
|
||||
package de.steamwar.bausystem.utils;
|
||||
|
||||
import com.comphenix.tinyprotocol.Reflection;
|
||||
import com.sk89q.worldedit.EditSession;
|
||||
import com.sk89q.worldedit.IncompleteRegionException;
|
||||
import com.sk89q.worldedit.LocalSession;
|
||||
import com.sk89q.worldedit.WorldEdit;
|
||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||
import com.sk89q.worldedit.extension.factory.PatternFactory;
|
||||
import com.sk89q.worldedit.extension.platform.permission.ActorSelectorLimits;
|
||||
import com.sk89q.worldedit.function.mask.Mask;
|
||||
import com.sk89q.worldedit.function.pattern.Pattern;
|
||||
import com.sk89q.worldedit.internal.registry.InputParser;
|
||||
import com.sk89q.worldedit.math.BlockVector3;
|
||||
import com.sk89q.worldedit.regions.Region;
|
||||
import com.sk89q.worldedit.regions.RegionSelector;
|
||||
import com.sk89q.worldedit.regions.selector.limit.SelectorLimits;
|
||||
import de.steamwar.bausystem.shared.Pair;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.experimental.UtilityClass;
|
||||
@@ -37,6 +41,9 @@ import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@UtilityClass
|
||||
public class WorldEditUtils {
|
||||
|
||||
@@ -77,6 +84,31 @@ public class WorldEditUtils {
|
||||
return WorldEdit.getInstance().getPatternFactory();
|
||||
}
|
||||
|
||||
public Pair<Class<? extends RegionSelector>, List<Location>> getVertices(Player player) {
|
||||
RegionSelector regionSelector = WorldEdit.getInstance()
|
||||
.getSessionManager()
|
||||
.get(BukkitAdapter.adapt(player))
|
||||
.getRegionSelector(BukkitAdapter.adapt(player.getWorld()));
|
||||
return new Pair<>(regionSelector.getClass(), regionSelector.getVertices().stream().map(blockVector3 -> adapt(player.getWorld(), blockVector3)).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
public void setVertices(Player player, Class<? extends RegionSelector> clazz, List<Location> vertices) {
|
||||
LocalSession localSession = WorldEdit.getInstance()
|
||||
.getSessionManager()
|
||||
.get(BukkitAdapter.adapt(player));
|
||||
|
||||
RegionSelector regionSelector = (RegionSelector) Reflection.newInstance(clazz);
|
||||
localSession.setRegionSelector(BukkitAdapter.adapt(player.getWorld()), regionSelector);
|
||||
|
||||
if (vertices.isEmpty()) return;
|
||||
|
||||
SelectorLimits selectorLimits = ActorSelectorLimits.forActor(BukkitAdapter.adapt(player));
|
||||
regionSelector.selectPrimary(BukkitAdapter.adapt(vertices.get(0)).toBlockPoint(), selectorLimits);
|
||||
for (int i = 1; i < vertices.size(); i++) {
|
||||
regionSelector.selectSecondary(BukkitAdapter.adapt(vertices.get(0)).toBlockPoint(), selectorLimits);
|
||||
}
|
||||
}
|
||||
|
||||
public Pair<Location, Location> getSelection(Player player) {
|
||||
RegionSelector regionSelector = WorldEdit.getInstance()
|
||||
.getSessionManager()
|
||||
|
||||
Reference in New Issue
Block a user