Created
February 13, 2016 20:40
-
-
Save hugo4715/2a9dadc3fb176e4b2524 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package fr.hugo4715.paytoprotect; | |
import java.util.ArrayList; | |
import java.util.Iterator; | |
import java.util.List; | |
import org.bukkit.Bukkit; | |
import org.bukkit.Location; | |
import org.bukkit.Material; | |
import org.bukkit.World; | |
import org.bukkit.block.Block; | |
import org.bukkit.entity.Player; | |
import org.bukkit.util.Vector; | |
public class Cuboid implements Iterable<Block>, Cloneable { | |
protected String worldName; | |
protected final Vector minimumPoint, maximumPoint; | |
public Cuboid(Location loc1, Location loc2) { | |
if (loc1 != null && loc2 != null) { | |
if (loc1.getWorld() != null && loc2.getWorld() != null) { | |
if (!loc1.getWorld().getUID().equals(loc2.getWorld().getUID())) | |
throw new IllegalStateException("Pas le meme monde"); | |
} else { | |
throw new NullPointerException("world(loc1) or world(loc2) is invalid"); | |
} | |
this.worldName = loc1.getWorld().getName(); | |
double xPos1 = Math.min(loc1.getX(), loc2.getX()); | |
double yPos1 = Math.min(loc1.getY(), loc2.getY()); | |
double zPos1 = Math.min(loc1.getZ(), loc2.getZ()); | |
double xPos2 = Math.max(loc1.getX(), loc2.getX()); | |
double yPos2 = Math.max(loc1.getY(), loc2.getY()); | |
double zPos2 = Math.max(loc1.getZ(), loc2.getZ()); | |
this.minimumPoint = new Vector(xPos1, yPos1, zPos1); | |
this.maximumPoint = new Vector(xPos2, yPos2, zPos2); | |
} else { | |
throw new NullPointerException("loc1 or loc2 is invalid"); | |
} | |
} | |
public boolean containsLocation(Location location) { | |
return location != null && location.getWorld().getName().equals(this.worldName) && location.toVector().isInAABB(this.minimumPoint, this.maximumPoint); | |
} | |
public List<Block> getBlocks() { | |
List<Block> blockList = new ArrayList<>(); | |
World world = this.getWorld(); | |
if (world != null) { | |
for (int x = this.minimumPoint.getBlockX(); x <= this.maximumPoint.getBlockX(); x++) { | |
for (int y = this.minimumPoint.getBlockY(); y <= this.maximumPoint.getBlockY() && y <= world.getMaxHeight(); y++) { | |
for (int z = this.minimumPoint.getBlockZ(); z <= this.maximumPoint.getBlockZ(); z++) { | |
blockList.add(world.getBlockAt(x, y, z)); | |
} | |
} | |
} | |
} | |
return blockList; | |
} | |
public void setType(Material m) { | |
World world = this.getWorld(); | |
if (world != null) { | |
for (int x = this.minimumPoint.getBlockX(); x <= this.maximumPoint.getBlockX(); x++) { | |
for (int z = this.minimumPoint.getBlockZ(); z <= this.maximumPoint.getBlockZ(); z++) { | |
for (int y = this.minimumPoint.getBlockY(); y <= this.maximumPoint.getBlockY(); y++){ | |
Location loc = new Location(world, x, y, z); | |
loc.getBlock().setType(m); | |
} | |
} | |
} | |
} | |
} | |
public Location getLowerLocation() { | |
return this.minimumPoint.toLocation(this.getWorld()); | |
} | |
public double getLowerX() { | |
return this.minimumPoint.getX(); | |
} | |
public double getLowerY() { | |
return this.minimumPoint.getY(); | |
} | |
public double getLowerZ() { | |
return this.minimumPoint.getZ(); | |
} | |
public Location getUpperLocation() { | |
return this.maximumPoint.toLocation(this.getWorld()); | |
} | |
public double getUpperX() { | |
return this.maximumPoint.getX(); | |
} | |
public double getUpperY() { | |
return this.maximumPoint.getY(); | |
} | |
public double getUpperZ() { | |
return this.maximumPoint.getZ(); | |
} | |
public Location getCenter() { | |
int x1 = (int) (this.getUpperX() + 1); | |
int y1 = (int) (this.getUpperY() + 1); | |
int z1 = (int) (this.getUpperZ() + 1); | |
return new Location(this.getWorld(), this.getLowerX() + (x1 - this.getLowerX()) / 2.0, this.getLowerY() + (y1 - this.getLowerY()) / 2.0, this.getLowerZ() + (z1 - this.getLowerZ()) / 2.0); | |
} | |
public boolean isInArena(Player player){ | |
return containsLocation(player.getLocation()); | |
} | |
public World getWorld() { | |
World world = Bukkit.getServer().getWorld(this.worldName); | |
if (world == null) throw new NullPointerException("World '" + this.worldName + "' is not loaded."); | |
return world; | |
} | |
@Override | |
public Iterator<Block> iterator() { | |
return null; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment