geforkt von Mirrors/FastAsyncWorldEdit
Added selection setting API.
Dieser Commit ist enthalten in:
Ursprung
fd2de1d264
Commit
fc3531ce89
@ -353,6 +353,13 @@ public class WorldEditPlugin extends JavaPlugin {
|
|||||||
* @return the selection or null if there was none
|
* @return the selection or null if there was none
|
||||||
*/
|
*/
|
||||||
public Selection getSelection(Player player) {
|
public Selection getSelection(Player player) {
|
||||||
|
if (player == null) {
|
||||||
|
throw new IllegalArgumentException("Null player not allowed");
|
||||||
|
}
|
||||||
|
if (!player.isOnline()) {
|
||||||
|
throw new IllegalArgumentException("Offline player not allowed");
|
||||||
|
}
|
||||||
|
|
||||||
LocalSession session = controller.getSession(wrapPlayer(player));
|
LocalSession session = controller.getSession(wrapPlayer(player));
|
||||||
RegionSelector selector = session.getRegionSelector();
|
RegionSelector selector = session.getRegionSelector();
|
||||||
|
|
||||||
@ -361,9 +368,9 @@ public class WorldEditPlugin extends JavaPlugin {
|
|||||||
World world = ((BukkitWorld) session.getSelectionWorld()).getWorld();
|
World world = ((BukkitWorld) session.getSelectionWorld()).getWorld();
|
||||||
|
|
||||||
if (region instanceof CuboidRegion) {
|
if (region instanceof CuboidRegion) {
|
||||||
return new CuboidSelection(world, (CuboidRegion)region);
|
return new CuboidSelection(world, selector, (CuboidRegion)region);
|
||||||
} else if (region instanceof Polygonal2DRegion) {
|
} else if (region instanceof Polygonal2DRegion) {
|
||||||
return new Polygonal2DSelection(world, (Polygonal2DRegion)region);
|
return new Polygonal2DSelection(world, selector, (Polygonal2DRegion)region);
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -371,4 +378,27 @@ public class WorldEditPlugin extends JavaPlugin {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the region selection for a player.
|
||||||
|
*
|
||||||
|
* @param player
|
||||||
|
* @param selection
|
||||||
|
*/
|
||||||
|
public void setSelection(Player player, Selection selection) {
|
||||||
|
if (player == null) {
|
||||||
|
throw new IllegalArgumentException("Null player not allowed");
|
||||||
|
}
|
||||||
|
if (!player.isOnline()) {
|
||||||
|
throw new IllegalArgumentException("Offline player not allowed");
|
||||||
|
}
|
||||||
|
if (selection == null) {
|
||||||
|
throw new IllegalArgumentException("Null selection not allowed");
|
||||||
|
}
|
||||||
|
|
||||||
|
LocalSession session = controller.getSession(wrapPlayer(player));
|
||||||
|
RegionSelector sel = selection.getRegionSelector();
|
||||||
|
session.setRegionSelector(new BukkitWorld(player.getWorld()), sel);
|
||||||
|
session.dispatchCUISelection(wrapPlayer(player));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,16 +19,48 @@
|
|||||||
|
|
||||||
package com.sk89q.worldedit.bukkit.selections;
|
package com.sk89q.worldedit.bukkit.selections;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
import com.sk89q.worldedit.IncompleteRegionException;
|
||||||
|
import com.sk89q.worldedit.Vector;
|
||||||
|
import com.sk89q.worldedit.bukkit.BukkitUtil;
|
||||||
import com.sk89q.worldedit.regions.*;
|
import com.sk89q.worldedit.regions.*;
|
||||||
|
|
||||||
public class CuboidSelection extends RegionSelection {
|
public class CuboidSelection extends RegionSelection {
|
||||||
|
|
||||||
protected CuboidRegion cuboid;
|
protected CuboidRegion cuboid;
|
||||||
|
|
||||||
public CuboidSelection(World world, CuboidRegion region) {
|
public CuboidSelection(World world, Location pt1, Location pt2) {
|
||||||
super(world, region);
|
this(world, BukkitUtil.toVector(pt1), BukkitUtil.toVector(pt2));
|
||||||
this.world = world;
|
}
|
||||||
|
|
||||||
|
public CuboidSelection(World world, Vector pt1, Vector pt2) {
|
||||||
|
super(world);
|
||||||
|
|
||||||
|
if (pt1 == null) {
|
||||||
|
throw new IllegalArgumentException("Null point 1 not permitted");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pt2 == null) {
|
||||||
|
throw new IllegalArgumentException("Null point 2 not permitted");
|
||||||
|
}
|
||||||
|
|
||||||
|
CuboidRegionSelector sel = new CuboidRegionSelector();
|
||||||
|
sel.selectPrimary(pt1);
|
||||||
|
sel.selectSecondary(pt2);
|
||||||
|
|
||||||
|
try {
|
||||||
|
cuboid = sel.getRegion();
|
||||||
|
} catch (IncompleteRegionException e) {
|
||||||
|
throw new RuntimeException("IncompleteRegionException unexpectedly thrown");
|
||||||
|
}
|
||||||
|
|
||||||
|
setRegionSelector(sel);
|
||||||
|
setRegion(cuboid);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CuboidSelection(World world, RegionSelector sel, CuboidRegion region) {
|
||||||
|
super(world, sel, region);
|
||||||
this.cuboid = region;
|
this.cuboid = region;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
package com.sk89q.worldedit.bukkit.selections;
|
package com.sk89q.worldedit.bukkit.selections;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import com.sk89q.worldedit.BlockVector2D;
|
import com.sk89q.worldedit.BlockVector2D;
|
||||||
@ -28,13 +29,38 @@ public class Polygonal2DSelection extends RegionSelection {
|
|||||||
|
|
||||||
protected Polygonal2DRegion poly2d;
|
protected Polygonal2DRegion poly2d;
|
||||||
|
|
||||||
public Polygonal2DSelection(World world, Polygonal2DRegion region) {
|
public Polygonal2DSelection(World world, RegionSelector sel, Polygonal2DRegion region) {
|
||||||
super(world, region);
|
super(world, sel, region);
|
||||||
this.world = world;
|
|
||||||
this.poly2d = region;
|
this.poly2d = region;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Polygonal2DSelection(World world, List<BlockVector2D> points, int minY, int maxY) {
|
||||||
|
super(world);
|
||||||
|
|
||||||
|
minY = Math.min(Math.max(0, minY), 127);
|
||||||
|
maxY = Math.min(Math.max(0, maxY), 127);
|
||||||
|
|
||||||
|
Polygonal2DRegionSelector sel = new Polygonal2DRegionSelector();
|
||||||
|
poly2d = sel.getIncompleteRegion();
|
||||||
|
|
||||||
|
for (BlockVector2D pt : points) {
|
||||||
|
if (pt == null) {
|
||||||
|
throw new IllegalArgumentException("Null point not permitted");
|
||||||
|
}
|
||||||
|
|
||||||
|
poly2d.addPoint(pt);
|
||||||
|
}
|
||||||
|
|
||||||
|
poly2d.setMinimumY(minY);
|
||||||
|
poly2d.setMaximumY(maxY);
|
||||||
|
|
||||||
|
sel.learnChanges();
|
||||||
|
|
||||||
|
setRegionSelector(sel);
|
||||||
|
setRegion(poly2d);
|
||||||
|
}
|
||||||
|
|
||||||
public List<BlockVector2D> getNativePoints() {
|
public List<BlockVector2D> getNativePoints() {
|
||||||
return poly2d.getPoints();
|
return Collections.unmodifiableList(poly2d.getPoints());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,15 +25,38 @@ import org.bukkit.Location;
|
|||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import com.sk89q.worldedit.Vector;
|
import com.sk89q.worldedit.Vector;
|
||||||
import com.sk89q.worldedit.regions.Region;
|
import com.sk89q.worldedit.regions.Region;
|
||||||
|
import com.sk89q.worldedit.regions.RegionSelector;
|
||||||
|
|
||||||
public abstract class RegionSelection implements Selection {
|
public abstract class RegionSelection implements Selection {
|
||||||
|
|
||||||
protected World world;
|
private World world;
|
||||||
protected Region region;
|
private RegionSelector selector;
|
||||||
|
private Region region;
|
||||||
|
|
||||||
public RegionSelection(World world, Region region) {
|
public RegionSelection(World world) {
|
||||||
|
this.world = world;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RegionSelection(World world, RegionSelector selector, Region region) {
|
||||||
this.world = world;
|
this.world = world;
|
||||||
this.region = region;
|
this.region = region;
|
||||||
|
this.selector = selector;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Region getRegion() {
|
||||||
|
return region;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setRegion(Region region) {
|
||||||
|
this.region = region;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RegionSelector getRegionSelector() {
|
||||||
|
return selector;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setRegionSelector(RegionSelector selector) {
|
||||||
|
this.selector = selector;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -22,6 +22,7 @@ package com.sk89q.worldedit.bukkit.selections;
|
|||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import com.sk89q.worldedit.Vector;
|
import com.sk89q.worldedit.Vector;
|
||||||
|
import com.sk89q.worldedit.regions.RegionSelector;
|
||||||
|
|
||||||
public interface Selection {
|
public interface Selection {
|
||||||
/**
|
/**
|
||||||
@ -52,6 +53,13 @@ public interface Selection {
|
|||||||
*/
|
*/
|
||||||
public Vector getNativeMaximumPoint();
|
public Vector getNativeMaximumPoint();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the region selector. This is for internal use.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public RegionSelector getRegionSelector();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the world.
|
* Get the world.
|
||||||
*
|
*
|
||||||
|
@ -106,7 +106,7 @@ public class CuboidRegionSelector implements RegionSelector, CUIPointBasedRegion
|
|||||||
return pos1 != null && pos2 != null;
|
return pos1 != null && pos2 != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Region getRegion() throws IncompleteRegionException {
|
public CuboidRegion getRegion() throws IncompleteRegionException {
|
||||||
if (pos1 == null || pos2 == null) {
|
if (pos1 == null || pos2 == null) {
|
||||||
throw new IncompleteRegionException();
|
throw new IncompleteRegionException();
|
||||||
}
|
}
|
||||||
@ -114,6 +114,10 @@ public class CuboidRegionSelector implements RegionSelector, CUIPointBasedRegion
|
|||||||
return region;
|
return region;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CuboidRegion getIncompleteRegion() {
|
||||||
|
return region;
|
||||||
|
}
|
||||||
|
|
||||||
public void learnChanges() {
|
public void learnChanges() {
|
||||||
pos1 = region.getPos1().toBlockVector();
|
pos1 = region.getPos1().toBlockVector();
|
||||||
pos2 = region.getPos2().toBlockVector();
|
pos2 = region.getPos2().toBlockVector();
|
||||||
|
@ -143,6 +143,28 @@ public class Polygonal2DRegion implements Region {
|
|||||||
recalculate();
|
recalculate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the minimum Y.
|
||||||
|
*
|
||||||
|
* @param y
|
||||||
|
*/
|
||||||
|
public void setMinimumY(int y) {
|
||||||
|
hasY = true;
|
||||||
|
minY = y;
|
||||||
|
recalculate();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Se the maximum Y.
|
||||||
|
*
|
||||||
|
* @param y
|
||||||
|
*/
|
||||||
|
public void setMaximumY(int y) {
|
||||||
|
hasY = true;
|
||||||
|
maxY = y;
|
||||||
|
recalculate();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the lower point of a region.
|
* Get the lower point of a region.
|
||||||
*
|
*
|
||||||
|
@ -87,7 +87,7 @@ public class Polygonal2DRegionSelector implements RegionSelector {
|
|||||||
return pos1;
|
return pos1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Region getRegion() throws IncompleteRegionException {
|
public Polygonal2DRegion getRegion() throws IncompleteRegionException {
|
||||||
if (!isDefined()) {
|
if (!isDefined()) {
|
||||||
throw new IncompleteRegionException();
|
throw new IncompleteRegionException();
|
||||||
}
|
}
|
||||||
@ -95,11 +95,18 @@ public class Polygonal2DRegionSelector implements RegionSelector {
|
|||||||
return region;
|
return region;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Polygonal2DRegion getIncompleteRegion() {
|
||||||
|
return region;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isDefined() {
|
public boolean isDefined() {
|
||||||
return region.size() > 2;
|
return region.size() > 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void learnChanges() {
|
public void learnChanges() {
|
||||||
|
BlockVector2D pt = region.getPoints().get(0);
|
||||||
|
pos1 = new BlockVector(pt.getBlockX(),
|
||||||
|
region.getMinimumPoint().getBlockY(), pt.getBlockZ());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clear() {
|
public void clear() {
|
||||||
@ -125,4 +132,8 @@ public class Polygonal2DRegionSelector implements RegionSelector {
|
|||||||
return region.getArea();
|
return region.getArea();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getPointCount() {
|
||||||
|
return region.getPoints().size();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -93,6 +93,13 @@ public interface RegionSelector {
|
|||||||
*/
|
*/
|
||||||
public Region getRegion() throws IncompleteRegionException;
|
public Region getRegion() throws IncompleteRegionException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the region even if it's not fully defined.
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public Region getIncompleteRegion();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns whether the region has been fully defined.
|
* Returns whether the region has been fully defined.
|
||||||
*
|
*
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren