Added radius claim
This commit is contained in:
parent
bf2ff7f0ed
commit
5db20e9625
@ -1,8 +1,12 @@
|
|||||||
package com.massivecraft.factions;
|
package com.massivecraft.factions;
|
||||||
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
import java.util.LinkedHashSet;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@ -64,6 +68,11 @@ public class FLocation
|
|||||||
{
|
{
|
||||||
return worldName;
|
return worldName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public World getWorld()
|
||||||
|
{
|
||||||
|
return Bukkit.getWorld(worldName);
|
||||||
|
}
|
||||||
|
|
||||||
public void setWorldName(String worldName)
|
public void setWorldName(String worldName)
|
||||||
{
|
{
|
||||||
@ -104,10 +113,46 @@ public class FLocation
|
|||||||
// Misc Geometry
|
// Misc Geometry
|
||||||
//----------------------------------------------//
|
//----------------------------------------------//
|
||||||
|
|
||||||
public FLocation getRelative(int dx, int dz) {
|
public FLocation getRelative(int dx, int dz)
|
||||||
|
{
|
||||||
return new FLocation(this.worldName, this.x + dx, this.z + dz);
|
return new FLocation(this.worldName, this.x + dx, this.z + dz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double getDistanceTo(FLocation that)
|
||||||
|
{
|
||||||
|
double dx = that.x - this.x;
|
||||||
|
double dz = that.z - this.z;
|
||||||
|
return Math.sqrt(dx*dx+dz*dz);
|
||||||
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------//
|
||||||
|
// Some Geometry
|
||||||
|
//----------------------------------------------//
|
||||||
|
public Set<FLocation> getCircle(double radius)
|
||||||
|
{
|
||||||
|
Set<FLocation> ret = new LinkedHashSet<FLocation>();
|
||||||
|
if (radius <= 0) return ret;
|
||||||
|
|
||||||
|
int xfrom = (int) Math.floor(this.x - radius);
|
||||||
|
int xto = (int) Math.ceil(this.x + radius);
|
||||||
|
int zfrom = (int) Math.floor(this.z - radius);
|
||||||
|
int zto = (int) Math.ceil(this.z + radius);
|
||||||
|
|
||||||
|
for (int x=xfrom; x<=xto; x++)
|
||||||
|
{
|
||||||
|
for (int z=zfrom; z<=zto; z++)
|
||||||
|
{
|
||||||
|
FLocation potential = new FLocation(this.worldName, x, z);
|
||||||
|
if (this.getDistanceTo(potential) <= radius)
|
||||||
|
{
|
||||||
|
ret.add(potential);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
public static HashSet<FLocation> getArea(FLocation from, FLocation to)
|
public static HashSet<FLocation> getArea(FLocation from, FLocation to)
|
||||||
{
|
{
|
||||||
HashSet<FLocation> ret = new HashSet<FLocation>();
|
HashSet<FLocation> ret = new HashSet<FLocation>();
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
package com.massivecraft.factions.cmd;
|
package com.massivecraft.factions.cmd;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.bukkit.Location;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.FLocation;
|
||||||
import com.massivecraft.factions.Faction;
|
import com.massivecraft.factions.Faction;
|
||||||
import com.massivecraft.factions.struct.Permission;
|
import com.massivecraft.factions.struct.Permission;
|
||||||
|
|
||||||
@ -13,6 +18,7 @@ public class CmdClaim extends FCommand
|
|||||||
|
|
||||||
//this.requiredArgs.add("");
|
//this.requiredArgs.add("");
|
||||||
this.optionalArgs.put("faction", "your");
|
this.optionalArgs.put("faction", "your");
|
||||||
|
this.optionalArgs.put("radius", "1");
|
||||||
|
|
||||||
this.permission = Permission.CLAIM.node;
|
this.permission = Permission.CLAIM.node;
|
||||||
this.disableOnLock = true;
|
this.disableOnLock = true;
|
||||||
@ -28,8 +34,23 @@ public class CmdClaim extends FCommand
|
|||||||
@Override
|
@Override
|
||||||
public void perform()
|
public void perform()
|
||||||
{
|
{
|
||||||
|
// Read and validate input
|
||||||
Faction forFaction = this.argAsFaction(0, myFaction);
|
Faction forFaction = this.argAsFaction(0, myFaction);
|
||||||
fme.attemptClaim(forFaction, me.getLocation(), true);
|
double radius = this.argAsDouble(1, 1d);
|
||||||
|
radius -= 0.5;
|
||||||
|
if (radius <= 0)
|
||||||
|
{
|
||||||
|
msg("<b>That radius is to small.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the FLocations
|
||||||
|
Set<FLocation> flocs = new FLocation(me).getCircle(radius);
|
||||||
|
p.log(flocs);
|
||||||
|
for (FLocation floc : flocs)
|
||||||
|
{
|
||||||
|
fme.attemptClaim(forFaction, new Location(floc.getWorld(), floc.getX()*16, 1, floc.getZ()*16), true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user