001package fr.aumgn.dac2.shape.worldedit; 002 003import java.util.List; 004 005import com.sk89q.worldedit.BlockVector2D; 006import com.sk89q.worldedit.regions.CylinderRegion; 007import com.sk89q.worldedit.regions.EllipsoidRegion; 008import com.sk89q.worldedit.regions.Polygonal2DRegion; 009import com.sk89q.worldedit.regions.Region; 010import com.sk89q.worldedit.regions.CuboidRegion; 011 012import fr.aumgn.bukkitutils.geom.Vector; 013import fr.aumgn.bukkitutils.geom.Vector2D; 014import fr.aumgn.dac2.DAC; 015import fr.aumgn.dac2.exceptions.WERegionNotSupported; 016import fr.aumgn.dac2.shape.CuboidShape; 017import fr.aumgn.dac2.shape.CylinderShape; 018import fr.aumgn.dac2.shape.EllipsoidShape; 019import fr.aumgn.dac2.shape.PolygonalShape; 020import fr.aumgn.dac2.shape.Shape; 021 022public class WEShapeUtils { 023 024 public static Shape getShape(DAC dac, Region region) { 025 if (region instanceof CuboidRegion) { 026 CuboidRegion cuboid = (CuboidRegion) region; 027 return new CuboidShape(we2bu(cuboid.getMinimumPoint()), 028 we2bu(cuboid.getMaximumPoint())); 029 } else if (region instanceof Polygonal2DRegion) { 030 Polygonal2DRegion poly = (Polygonal2DRegion) region; 031 List<BlockVector2D> wePoints = poly.getPoints(); 032 Vector2D[] points = new Vector2D[wePoints.size()]; 033 int i = 0; 034 for (BlockVector2D wePoint : wePoints) { 035 points[i] = we2bu(wePoint); 036 i++; 037 } 038 return new PolygonalShape(poly.getMinimumY(), poly.getMaximumY(), 039 points); 040 } else if (region instanceof CylinderRegion) { 041 CylinderRegion cyl = (CylinderRegion) region; 042 return new CylinderShape(we2bu(cyl.getCenter().toVector2D()), 043 we2bu(cyl.getRadius()), cyl.getMinimumY(), 044 cyl.getMaximumY()); 045 } else if (region instanceof EllipsoidRegion) { 046 EllipsoidRegion ellipsoid = (EllipsoidRegion) region; 047 return new EllipsoidShape(we2bu(ellipsoid.getCenter()), 048 we2bu(ellipsoid.getRadius())); 049 } else { 050 throw new WERegionNotSupported(dac, region.getClass()); 051 } 052 } 053 054 public static Vector we2bu(com.sk89q.worldedit.Vector vector) { 055 return new Vector(vector.getX(), vector.getY(), vector.getZ()); 056 } 057 058 public static com.sk89q.worldedit.Vector bu2we(Vector vector) { 059 return new com.sk89q.worldedit.Vector( 060 vector.getX(), vector.getY(), vector.getZ()); 061 } 062 063 public static Vector2D we2bu(com.sk89q.worldedit.Vector2D vector) { 064 return new Vector2D(vector.getX(), vector.getZ()); 065 } 066 067 public static com.sk89q.worldedit.Vector2D bu2we(Vector2D vector) { 068 return new com.sk89q.worldedit.Vector2D(vector.getX(), vector.getZ()); 069 } 070 071 public static BlockVector2D bu2blockwe(Vector2D pt) { 072 return new BlockVector2D(pt.getX(), pt.getZ()); 073 } 074 075 private WEShapeUtils() { 076 } 077}