From 3820b53d2929cf301a3f62374aa7c9637f20fb43 Mon Sep 17 00:00:00 2001 From: Olof Larsson Date: Fri, 8 Apr 2011 21:01:46 +0200 Subject: [PATCH] Added a radius to safe claim --- src/org/mcteam/factions/FLocation.java | 17 +++++++++++- src/org/mcteam/factions/Factions.java | 3 +++ .../factions/commands/FCommandSafeclaim.java | 26 ++++++++++++++++--- src/org/mcteam/factions/util/MiscUtil.java | 25 ++++++++++++++++++ 4 files changed, 66 insertions(+), 5 deletions(-) create mode 100644 src/org/mcteam/factions/util/MiscUtil.java diff --git a/src/org/mcteam/factions/FLocation.java b/src/org/mcteam/factions/FLocation.java index 39585b4b..cf870c25 100644 --- a/src/org/mcteam/factions/FLocation.java +++ b/src/org/mcteam/factions/FLocation.java @@ -1,8 +1,11 @@ package org.mcteam.factions; +import java.util.HashSet; + import org.bukkit.Location; import org.bukkit.block.Block; import org.bukkit.entity.Player; +import org.mcteam.factions.util.MiscUtil; public class FLocation { @@ -80,13 +83,25 @@ public class FLocation { } //----------------------------------------------// - // Misc + // Misc Geometry //----------------------------------------------// public FLocation getRelative(int dx, int dz) { return new FLocation(this.worldName, this.x + dx, this.z + dz); } + public static HashSet getArea(FLocation from, FLocation to) { + HashSet ret = new HashSet(); + + for (long x : MiscUtil.range(from.getX(), to.getX())) { + for (long z : MiscUtil.range(from.getZ(), to.getZ())) { + ret.add(new FLocation(from.getWorldName(), (int)x, (int)z)); + } + } + + return ret; + } + //----------------------------------------------// // Comparison //----------------------------------------------// diff --git a/src/org/mcteam/factions/Factions.java b/src/org/mcteam/factions/Factions.java index 7553d417..2d69fb24 100644 --- a/src/org/mcteam/factions/Factions.java +++ b/src/org/mcteam/factions/Factions.java @@ -52,6 +52,7 @@ import org.mcteam.factions.gson.GsonBuilder; import org.mcteam.factions.listeners.FactionsBlockListener; import org.mcteam.factions.listeners.FactionsEntityListener; import org.mcteam.factions.listeners.FactionsPlayerListener; +import org.mcteam.factions.util.MiscUtil; import com.nijiko.permissions.PermissionHandler; @@ -94,6 +95,8 @@ public class Factions extends JavaPlugin { log("=== INIT START ==="); long timeInitStart = System.currentTimeMillis(); + log("asdfasdas"+MiscUtil.range(-1, 1)); + // Add the commands commands.add(new FCommandHelp()); commands.add(new FCommandAdmin()); diff --git a/src/org/mcteam/factions/commands/FCommandSafeclaim.java b/src/org/mcteam/factions/commands/FCommandSafeclaim.java index 3053903d..a93587f8 100644 --- a/src/org/mcteam/factions/commands/FCommandSafeclaim.java +++ b/src/org/mcteam/factions/commands/FCommandSafeclaim.java @@ -6,13 +6,14 @@ import org.mcteam.factions.FLocation; import org.mcteam.factions.Faction; import org.mcteam.factions.Factions; - public class FCommandSafeclaim extends FBaseCommand { public FCommandSafeclaim() { aliases.add("safeclaim"); aliases.add("safe"); + optionalParameters.add("radius"); + helpDescription = "Claim land for the safezone"; } @@ -22,9 +23,26 @@ public class FCommandSafeclaim extends FBaseCommand { } public void perform() { - FLocation flocation = new FLocation(me); - Board.setFactionAt(Faction.getSafeZone(), flocation); - sendMessage("This land is now a safe zone"); + // The current location of the player + FLocation playerFlocation = new FLocation(me); + + // Was a radius set? + if (parameters.size() > 0) { + int radius = Integer.parseInt(parameters.get(0)); + + FLocation from = playerFlocation.getRelative(radius, radius); + FLocation to = playerFlocation.getRelative(-radius, -radius); + + for (FLocation locToClaim : FLocation.getArea(from, to)) { + Board.setFactionAt(Faction.getSafeZone(), locToClaim); + } + + sendMessage("You claimed "+(1+radius*2)*(1+radius*2)+" chunks for the safe zone."); + + } else { + Board.setFactionAt(Faction.getSafeZone(), playerFlocation); + sendMessage("This land is now a safe zone"); + } } } diff --git a/src/org/mcteam/factions/util/MiscUtil.java b/src/org/mcteam/factions/util/MiscUtil.java new file mode 100644 index 00000000..1f066015 --- /dev/null +++ b/src/org/mcteam/factions/util/MiscUtil.java @@ -0,0 +1,25 @@ +package org.mcteam.factions.util; + +public class MiscUtil { + + // Inclusive range + public static long[] range(long start, long end) { + long[] values = new long[(int) Math.abs(end - start) + 1]; + + if (end < start) { + long oldstart = start; + start = end; + end = oldstart; + } + + + + for (long i = start; i <= end; i++) { + values[(int) (i - start)] = i; + } + + return values; + } + +} +