Reformat before I go crazy.

This commit is contained in:
drtshock 2014-04-04 13:55:21 -05:00
parent 0c3ea377dd
commit 814e439705
124 changed files with 11302 additions and 13164 deletions

View File

@ -1,94 +1,75 @@
package com.massivecraft.factions;
import java.io.*;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
import org.bukkit.ChatColor;
import org.bukkit.craftbukkit.libs.com.google.gson.reflect.TypeToken;
import com.massivecraft.factions.integration.LWCFeatures;
import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.util.AsciiCompass;
import com.massivecraft.factions.zcore.util.DiscUtil;
import org.bukkit.ChatColor;
import org.bukkit.craftbukkit.libs.com.google.gson.reflect.TypeToken;
import java.io.File;
import java.lang.reflect.Type;
import java.util.*;
import java.util.Map.Entry;
public class Board
{
public class Board {
private static transient File file = new File(P.p.getDataFolder(), "board.json");
private static transient HashMap<FLocation, String> flocationIds = new HashMap<FLocation, String>();
//----------------------------------------------//
// Get and Set
//----------------------------------------------//
public static String getIdAt(FLocation flocation)
{
if ( ! flocationIds.containsKey(flocation))
{
public static String getIdAt(FLocation flocation) {
if (!flocationIds.containsKey(flocation)) {
return "0";
}
return flocationIds.get(flocation);
}
public static Faction getFactionAt(FLocation flocation)
{
public static Faction getFactionAt(FLocation flocation) {
return Factions.i.get(getIdAt(flocation));
}
public static void setIdAt(String id, FLocation flocation)
{
public static void setIdAt(String id, FLocation flocation) {
clearOwnershipAt(flocation);
if (id == "0")
{
if (id == "0") {
removeAt(flocation);
}
flocationIds.put(flocation, id);
}
public static void setFactionAt(Faction faction, FLocation flocation)
{
public static void setFactionAt(Faction faction, FLocation flocation) {
setIdAt(faction.getId(), flocation);
}
public static void removeAt(FLocation flocation)
{
public static void removeAt(FLocation flocation) {
clearOwnershipAt(flocation);
flocationIds.remove(flocation);
}
// not to be confused with claims, ownership referring to further member-specific ownership of a claim
public static void clearOwnershipAt(FLocation flocation)
{
public static void clearOwnershipAt(FLocation flocation) {
Faction faction = getFactionAt(flocation);
if (faction != null && faction.isNormal())
{
if (faction != null && faction.isNormal()) {
faction.clearClaimOwnership(flocation);
}
}
public static void unclaimAll(String factionId)
{
public static void unclaimAll(String factionId) {
Faction faction = Factions.i.get(factionId);
if (faction != null && faction.isNormal())
{
if (faction != null && faction.isNormal()) {
faction.clearAllClaimOwnership();
}
Iterator<Entry<FLocation, String>> iter = flocationIds.entrySet().iterator();
while (iter.hasNext())
{
while (iter.hasNext()) {
Entry<FLocation, String> entry = iter.next();
if (entry.getValue().equals(factionId))
{
if(Conf.onUnclaimResetLwcLocks && LWCFeatures.getEnabled())
{
if (entry.getValue().equals(factionId)) {
if (Conf.onUnclaimResetLwcLocks && LWCFeatures.getEnabled()) {
LWCFeatures.clearAllChests(entry.getKey());
}
iter.remove();
@ -98,8 +79,7 @@ public class Board
// Is this coord NOT completely surrounded by coords claimed by the same faction?
// Simpler: Is there any nearby coord with a faction other than the faction here?
public static boolean isBorderLocation(FLocation flocation)
{
public static boolean isBorderLocation(FLocation flocation) {
Faction faction = getFactionAt(flocation);
FLocation a = flocation.getRelative(1, 0);
FLocation b = flocation.getRelative(-1, 0);
@ -109,8 +89,7 @@ public class Board
}
// Is this coord connected to any coord claimed by the specified faction?
public static boolean isConnectedLocation(FLocation flocation, Faction faction)
{
public static boolean isConnectedLocation(FLocation flocation, Faction faction) {
FLocation a = flocation.getRelative(1, 0);
FLocation b = flocation.getRelative(-1, 0);
FLocation c = flocation.getRelative(0, 1);
@ -123,18 +102,15 @@ public class Board
// Cleaner. Remove orphaned foreign keys
//----------------------------------------------//
public static void clean()
{
public static void clean() {
Iterator<Entry<FLocation, String>> iter = flocationIds.entrySet().iterator();
while (iter.hasNext()) {
Entry<FLocation, String> entry = iter.next();
if ( ! Factions.i.exists(entry.getValue()))
{
if(Conf.onUnclaimResetLwcLocks && LWCFeatures.getEnabled())
{
if (!Factions.i.exists(entry.getValue())) {
if (Conf.onUnclaimResetLwcLocks && LWCFeatures.getEnabled()) {
LWCFeatures.clearAllChests(entry.getKey());
}
P.p.log("Board cleaner removed "+entry.getValue()+" from "+entry.getKey());
P.p.log("Board cleaner removed " + entry.getValue() + " from " + entry.getKey());
iter.remove();
}
}
@ -144,33 +120,27 @@ public class Board
// Coord count
//----------------------------------------------//
public static int getFactionCoordCount(String factionId)
{
public static int getFactionCoordCount(String factionId) {
int ret = 0;
for (String thatFactionId : flocationIds.values())
{
if(thatFactionId.equals(factionId))
{
for (String thatFactionId : flocationIds.values()) {
if (thatFactionId.equals(factionId)) {
ret += 1;
}
}
return ret;
}
public static int getFactionCoordCount(Faction faction)
{
public static int getFactionCoordCount(Faction faction) {
return getFactionCoordCount(faction.getId());
}
public static int getFactionCoordCountInWorld(Faction faction, String worldName)
{
public static int getFactionCoordCountInWorld(Faction faction, String worldName) {
String factionId = faction.getId();
int ret = 0;
Iterator<Entry<FLocation, String>> iter = flocationIds.entrySet().iterator();
while (iter.hasNext()) {
Entry<FLocation, String> entry = iter.next();
if (entry.getValue().equals(factionId) && entry.getKey().getWorldName().equals(worldName))
{
if (entry.getValue().equals(factionId) && entry.getKey().getWorldName().equals(worldName)) {
ret += 1;
}
}
@ -182,15 +152,13 @@ public class Board
//----------------------------------------------//
/**
* The map is relative to a coord and a faction
* north is in the direction of decreasing x
* east is in the direction of decreasing z
* The map is relative to a coord and a faction north is in the direction of decreasing x east is in the direction
* of decreasing z
*/
public static ArrayList<String> getMap(Faction faction, FLocation flocation, double inDegrees)
{
public static ArrayList<String> getMap(Faction faction, FLocation flocation, double inDegrees) {
ArrayList<String> ret = new ArrayList<String>();
Faction factionLoc = getFactionAt(flocation);
ret.add(P.p.txt.titleize("("+flocation.getCoordString()+") "+factionLoc.getTag(faction)));
ret.add(P.p.txt.titleize("(" + flocation.getCoordString() + ") " + factionLoc.getTag(faction)));
int halfWidth = Conf.mapWidth / 2;
int halfHeight = Conf.mapHeight / 2;
@ -198,8 +166,7 @@ public class Board
int width = halfWidth * 2 + 1;
int height = halfHeight * 2 + 1;
if (Conf.showMapFactionKey)
{
if (Conf.showMapFactionKey) {
height--;
}
@ -207,34 +174,23 @@ public class Board
int chrIdx = 0;
// For each row
for (int dz = 0; dz < height; dz++)
{
for (int dz = 0; dz < height; dz++) {
// Draw and add that row
String row = "";
for (int dx = 0; dx < width; dx++)
{
if(dx == halfWidth && dz == halfHeight)
{
row += ChatColor.AQUA+"+";
}
else
{
for (int dx = 0; dx < width; dx++) {
if (dx == halfWidth && dz == halfHeight) {
row += ChatColor.AQUA + "+";
} else {
FLocation flocationHere = topLeft.getRelative(dx, dz);
Faction factionHere = getFactionAt(flocationHere);
Relation relation = faction.getRelationTo(factionHere);
if (factionHere.isNone())
{
row += ChatColor.GRAY+"-";
}
else if (factionHere.isSafeZone())
{
row += Conf.colorPeaceful+"+";
}
else if (factionHere.isWarZone())
{
row += ChatColor.DARK_RED+"+";
}
else if
if (factionHere.isNone()) {
row += ChatColor.GRAY + "-";
} else if (factionHere.isSafeZone()) {
row += Conf.colorPeaceful + "+";
} else if (factionHere.isWarZone()) {
row += ChatColor.DARK_RED + "+";
} else if
(
factionHere == faction
||
@ -245,16 +201,13 @@ public class Board
(Conf.showNeutralFactionsOnMap && relation.equals(Relation.NEUTRAL))
||
(Conf.showEnemyFactionsOnMap && relation.equals(Relation.ENEMY))
)
{
) {
if (!fList.containsKey(factionHere.getTag()))
fList.put(factionHere.getTag(), Conf.mapKeyChrs[chrIdx++]);
char tag = fList.get(factionHere.getTag());
row += factionHere.getColorTo(faction) + "" + tag;
}
else
{
row += ChatColor.GRAY+"-";
} else {
row += ChatColor.GRAY + "-";
}
}
}
@ -265,16 +218,14 @@ public class Board
ArrayList<String> asciiCompass = AsciiCompass.getAsciiCompass(inDegrees, ChatColor.RED, P.p.txt.parse("<a>"));
// Add the compass
ret.set(1, asciiCompass.get(0)+ret.get(1).substring(3*3));
ret.set(2, asciiCompass.get(1)+ret.get(2).substring(3*3));
ret.set(3, asciiCompass.get(2)+ret.get(3).substring(3*3));
ret.set(1, asciiCompass.get(0) + ret.get(1).substring(3 * 3));
ret.set(2, asciiCompass.get(1) + ret.get(2).substring(3 * 3));
ret.set(3, asciiCompass.get(2) + ret.get(3).substring(3 * 3));
// Add the faction key
if (Conf.showMapFactionKey)
{
if (Conf.showMapFactionKey) {
String fRow = "";
for(String key : fList.keySet())
{
for (String key : fList.keySet()) {
fRow += String.format("%s%s: %s ", ChatColor.GRAY, fList.get(key), key);
}
ret.add(fRow);
@ -288,21 +239,18 @@ public class Board
// Persistance
// -------------------------------------------- //
public static Map<String,Map<String,String>> dumpAsSaveFormat()
{
Map<String,Map<String,String>> worldCoordIds = new HashMap<String,Map<String,String>>();
public static Map<String, Map<String, String>> dumpAsSaveFormat() {
Map<String, Map<String, String>> worldCoordIds = new HashMap<String, Map<String, String>>();
String worldName, coords;
String id;
for (Entry<FLocation, String> entry : flocationIds.entrySet())
{
for (Entry<FLocation, String> entry : flocationIds.entrySet()) {
worldName = entry.getKey().getWorldName();
coords = entry.getKey().getCoordString();
id = entry.getValue();
if ( ! worldCoordIds.containsKey(worldName))
{
worldCoordIds.put(worldName, new TreeMap<String,String>());
if (!worldCoordIds.containsKey(worldName)) {
worldCoordIds.put(worldName, new TreeMap<String, String>());
}
worldCoordIds.get(worldName).put(coords, id);
@ -311,8 +259,7 @@ public class Board
return worldCoordIds;
}
public static void loadFromSaveFormat(Map<String,Map<String,String>> worldCoordIds)
{
public static void loadFromSaveFormat(Map<String, Map<String, String>> worldCoordIds) {
flocationIds.clear();
String worldName;
@ -320,11 +267,9 @@ public class Board
int x, z;
String factionId;
for (Entry<String,Map<String,String>> entry : worldCoordIds.entrySet())
{
for (Entry<String, Map<String, String>> entry : worldCoordIds.entrySet()) {
worldName = entry.getKey();
for (Entry<String,String> entry2 : entry.getValue().entrySet())
{
for (Entry<String, String> entry2 : entry.getValue().entrySet()) {
coords = entry2.getKey().trim().split("[,\\s]+");
x = Integer.parseInt(coords[0]);
z = Integer.parseInt(coords[1]);
@ -334,16 +279,12 @@ public class Board
}
}
public static boolean save()
{
public static boolean save() {
//Factions.log("Saving board to disk");
try
{
try {
DiscUtil.write(file, P.p.gson.toJson(dumpAsSaveFormat()));
}
catch (Exception e)
{
} catch (Exception e) {
e.printStackTrace();
P.p.log("Failed to save the board to disk.");
return false;
@ -352,25 +293,21 @@ public class Board
return true;
}
public static boolean load()
{
public static boolean load() {
P.p.log("Loading board from disk");
if ( ! file.exists())
{
if (!file.exists()) {
P.p.log("No board to load from disk. Creating new file.");
save();
return true;
}
try
{
Type type = new TypeToken<Map<String,Map<String,String>>>(){}.getType();
Map<String,Map<String,String>> worldCoordIds = P.p.gson.fromJson(DiscUtil.read(file), type);
try {
Type type = new TypeToken<Map<String, Map<String, String>>>() {
}.getType();
Map<String, Map<String, String>> worldCoordIds = P.p.gson.fromJson(DiscUtil.read(file), type);
loadFromSaveFormat(worldCoordIds);
}
catch (Exception e)
{
} catch (Exception e) {
e.printStackTrace();
P.p.log("Failed to load the board from disk.");
return false;

View File

@ -1,12 +1,11 @@
package com.massivecraft.factions;
import java.util.*;
import org.bukkit.*;
import org.bukkit.entity.EntityType;
public class Conf
{
import java.util.*;
public class Conf {
public static List<String> baseCommandAliases = new ArrayList<String>();
public static boolean allowNoSlashCommand = true;
@ -65,9 +64,9 @@ public class Conf
public static int chatTagInsertIndex = 1;
public static boolean chatTagPadBefore = false;
public static boolean chatTagPadAfter = true;
public static String chatTagFormat = "%s"+ChatColor.WHITE;
public static String factionChatFormat = "%s:"+ChatColor.WHITE+" %s";
public static String allianceChatFormat = ChatColor.LIGHT_PURPLE+"%s:"+ChatColor.WHITE+" %s";
public static String chatTagFormat = "%s" + ChatColor.WHITE;
public static String factionChatFormat = "%s:" + ChatColor.WHITE + " %s";
public static String allianceChatFormat = ChatColor.LIGHT_PURPLE + "%s:" + ChatColor.WHITE + " %s";
public static boolean broadcastDescriptionChanges = false;
@ -289,8 +288,7 @@ public class Conf
public static transient int mapWidth = 39;
public static transient char[] mapKeyChrs = "\\/#?$%=&^ABCDEFGHJKLMNOPQRSTUVWXYZ1234567890abcdeghjmnopqrsuvwxyz".toCharArray();
static
{
static {
baseCommandAliases.add("f");
territoryEnemyDenyCommands.add("home");
@ -373,12 +371,12 @@ public class Conf
// Persistance
// -------------------------------------------- //
private static transient Conf i = new Conf();
public static void load()
{
public static void load() {
P.p.persist.loadOrSaveDefault(i, Conf.class, "conf");
}
public static void save()
{
public static void save() {
P.p.persist.save(i);
}
}

View File

@ -1,19 +1,17 @@
package com.massivecraft.factions;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
import com.massivecraft.factions.util.MiscUtil;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import com.massivecraft.factions.util.MiscUtil;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;
public class FLocation
{
public class FLocation {
private String worldName = "world";
private int x = 0;
@ -23,35 +21,29 @@ public class FLocation
// Constructors
//----------------------------------------------//
public FLocation()
{
public FLocation() {
}
public FLocation(String worldName, int x, int z)
{
public FLocation(String worldName, int x, int z) {
this.worldName = worldName;
this.x = x;
this.z = z;
}
public FLocation(Location location)
{
this( location.getWorld().getName(), blockToChunk(location.getBlockX()), blockToChunk(location.getBlockZ()) );
public FLocation(Location location) {
this(location.getWorld().getName(), blockToChunk(location.getBlockX()), blockToChunk(location.getBlockZ()));
}
public FLocation(Player player)
{
public FLocation(Player player) {
this(player.getLocation());
}
public FLocation(FPlayer fplayer)
{
public FLocation(FPlayer fplayer) {
this(fplayer.getPlayer());
}
public FLocation(Block block)
{
public FLocation(Block block) {
this(block.getLocation());
}
@ -59,49 +51,41 @@ public class FLocation
// Getters and Setters
//----------------------------------------------//
public String getWorldName()
{
public String getWorldName() {
return worldName;
}
public World getWorld()
{
public World getWorld() {
return Bukkit.getWorld(worldName);
}
public void setWorldName(String worldName)
{
public void setWorldName(String worldName) {
this.worldName = worldName;
}
public long getX()
{
public long getX() {
return x;
}
public void setX(int x)
{
public void setX(int x) {
this.x = x;
}
public long getZ()
{
public long getZ() {
return z;
}
public void setZ(int z)
{
public void setZ(int z) {
this.z = z;
}
public String getCoordString()
{
return ""+x+","+z;
public String getCoordString() {
return "" + x + "," + z;
}
@Override
public String toString() {
return "["+this.getWorldName()+","+this.getCoordString()+"]";
return "[" + this.getWorldName() + "," + this.getCoordString() + "]";
}
//----------------------------------------------//
@ -109,33 +93,27 @@ public class FLocation
//----------------------------------------------//
// bit-shifting is used because it's much faster than standard division and multiplication
public static int blockToChunk(int blockVal)
{ // 1 chunk is 16x16 blocks
public static int blockToChunk(int blockVal) { // 1 chunk is 16x16 blocks
return blockVal >> 4; // ">> 4" == "/ 16"
}
public static int blockToRegion(int blockVal)
{ // 1 region is 512x512 blocks
public static int blockToRegion(int blockVal) { // 1 region is 512x512 blocks
return blockVal >> 9; // ">> 9" == "/ 512"
}
public static int chunkToRegion(int chunkVal)
{ // 1 region is 32x32 chunks
public static int chunkToRegion(int chunkVal) { // 1 region is 32x32 chunks
return chunkVal >> 5; // ">> 5" == "/ 32"
}
public static int chunkToBlock(int chunkVal)
{
public static int chunkToBlock(int chunkVal) {
return chunkVal << 4; // "<< 4" == "* 16"
}
public static int regionToBlock(int regionVal)
{
public static int regionToBlock(int regionVal) {
return regionVal << 9; // "<< 9" == "* 512"
}
public static int regionToChunk(int regionVal)
{
public static int regionToChunk(int regionVal) {
return regionVal << 5; // "<< 5" == "* 32"
}
@ -143,23 +121,20 @@ public class FLocation
// 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);
}
public double getDistanceTo(FLocation that)
{
public double getDistanceTo(FLocation that) {
double dx = that.x - this.x;
double dz = that.z - this.z;
return Math.sqrt(dx*dx+dz*dz);
return Math.sqrt(dx * dx + dz * dz);
}
//----------------------------------------------//
// Some Geometry
//----------------------------------------------//
public Set<FLocation> getCircle(double radius)
{
public Set<FLocation> getCircle(double radius) {
Set<FLocation> ret = new LinkedHashSet<FLocation>();
if (radius <= 0) return ret;
@ -168,10 +143,8 @@ public class FLocation
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++)
{
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);
@ -181,15 +154,12 @@ public class FLocation
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>();
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));
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));
}
}
@ -201,21 +171,19 @@ public class FLocation
//----------------------------------------------//
@Override
public int hashCode()
{
public int hashCode() {
// should be fast, with good range and few hash collisions: (x * 512) + z + worldName.hashCode
return (this.x << 9) + this.z + (this.worldName != null ? this.worldName.hashCode() : 0);
}
@Override
public boolean equals(Object obj)
{
public boolean equals(Object obj) {
if (obj == this)
return true;
if (!(obj instanceof FLocation))
return false;
FLocation that = (FLocation) obj;
return this.x == that.x && this.z == that.z && ( this.worldName==null ? that.worldName==null : this.worldName.equals(that.worldName) );
return this.x == that.x && this.z == that.z && (this.worldName == null ? that.worldName == null : this.worldName.equals(that.worldName));
}
}

View File

@ -1,13 +1,5 @@
package com.massivecraft.factions;
import java.util.HashSet;
import java.util.Set;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import com.massivecraft.factions.event.FPlayerLeaveEvent;
import com.massivecraft.factions.event.LandClaimEvent;
import com.massivecraft.factions.iface.EconomyParticipator;
@ -22,31 +14,49 @@ import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.util.RelationUtil;
import com.massivecraft.factions.zcore.persist.PlayerEntity;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import java.util.HashSet;
import java.util.Set;
/**
* Logged in players always have exactly one FPlayer instance.
* Logged out players may or may not have an FPlayer instance. They will always have one if they are part of a faction.
* This is because only players with a faction are saved to disk (in order to not waste disk space).
*
* Logged in players always have exactly one FPlayer instance. Logged out players may or may not have an FPlayer
* instance. They will always have one if they are part of a faction. This is because only players with a faction are
* saved to disk (in order to not waste disk space).
* <p/>
* The FPlayer is linked to a minecraft player using the player name.
*
* The same instance is always returned for the same player.
* This means you can use the == operator. No .equals method necessary.
* <p/>
* The same instance is always returned for the same player. This means you can use the == operator. No .equals method
* necessary.
*/
public class FPlayer extends PlayerEntity implements EconomyParticipator
{
public class FPlayer extends PlayerEntity implements EconomyParticipator {
//private transient String playerName;
private transient FLocation lastStoodAt = new FLocation(); // Where did this player stand the last time we checked?
// FIELD: factionId
private String factionId;
public Faction getFaction() { if(this.factionId == null) {return null;} return Factions.i.get(this.factionId); }
public String getFactionId() { return this.factionId; }
public boolean hasFaction() { return ! factionId.equals("0"); }
public void setFaction(Faction faction)
{
public Faction getFaction() {
if (this.factionId == null) {
return null;
}
return Factions.i.get(this.factionId);
}
public String getFactionId() {
return this.factionId;
}
public boolean hasFaction() {
return !factionId.equals("0");
}
public void setFaction(Faction faction) {
Faction oldFaction = this.getFaction();
if (oldFaction != null) oldFaction.removeFPlayer(this);
faction.addFPlayer(this);
@ -56,8 +66,15 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
// FIELD: role
private Role role;
public Role getRole() { return this.role; }
public void setRole(Role role) { this.role = role; SpoutFeatures.updateAppearances(this.getPlayer()); }
public Role getRole() {
return this.role;
}
public void setRole(Role role) {
this.role = role;
SpoutFeatures.updateAppearances(this.getPlayer());
}
// FIELD: title
private String title;
@ -68,8 +85,14 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
// FIELD: powerBoost
// special increase/decrease to min and max power for this player
private double powerBoost;
public double getPowerBoost() { return this.powerBoost; }
public void setPowerBoost(double powerBoost) { this.powerBoost = powerBoost; }
public double getPowerBoost() {
return this.powerBoost;
}
public void setPowerBoost(double powerBoost) {
this.powerBoost = powerBoost;
}
// FIELD: lastPowerUpdateTime
private long lastPowerUpdateTime;
@ -82,15 +105,14 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
// FIELD: autoClaimEnabled
private transient Faction autoClaimFor;
public Faction getAutoClaimFor()
{
public Faction getAutoClaimFor() {
return autoClaimFor;
}
public void setAutoClaimFor(Faction faction)
{
public void setAutoClaimFor(Faction faction) {
this.autoClaimFor = faction;
if (this.autoClaimFor != null)
{
if (this.autoClaimFor != null) {
// TODO: merge these into same autoclaim
this.autoSafeZoneEnabled = false;
this.autoWarZoneEnabled = false;
@ -99,12 +121,14 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
// FIELD: autoSafeZoneEnabled
private transient boolean autoSafeZoneEnabled;
public boolean isAutoSafeClaimEnabled() { return autoSafeZoneEnabled; }
public void setIsAutoSafeClaimEnabled(boolean enabled)
{
public boolean isAutoSafeClaimEnabled() {
return autoSafeZoneEnabled;
}
public void setIsAutoSafeClaimEnabled(boolean enabled) {
this.autoSafeZoneEnabled = enabled;
if (enabled)
{
if (enabled) {
this.autoClaimFor = null;
this.autoWarZoneEnabled = false;
}
@ -112,20 +136,28 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
// FIELD: autoWarZoneEnabled
private transient boolean autoWarZoneEnabled;
public boolean isAutoWarClaimEnabled() { return autoWarZoneEnabled; }
public void setIsAutoWarClaimEnabled(boolean enabled)
{
public boolean isAutoWarClaimEnabled() {
return autoWarZoneEnabled;
}
public void setIsAutoWarClaimEnabled(boolean enabled) {
this.autoWarZoneEnabled = enabled;
if (enabled)
{
if (enabled) {
this.autoClaimFor = null;
this.autoSafeZoneEnabled = false;
}
}
private transient boolean isAdminBypassing = false;
public boolean isAdminBypassing() { return this.isAdminBypassing; }
public void setIsAdminBypassing(boolean val) { this.isAdminBypassing = val; }
public boolean isAdminBypassing() {
return this.isAdminBypassing;
}
public void setIsAdminBypassing(boolean val) {
this.isAdminBypassing = val;
}
// FIELD: loginPvpDisabled
private transient boolean loginPvpDisabled;
@ -135,11 +167,13 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
// FIELD: chatMode
private ChatMode chatMode;
public void setChatMode(ChatMode chatMode) { this.chatMode = chatMode; }
public ChatMode getChatMode()
{
if(this.factionId.equals("0") || ! Conf.factionOnlyChat)
{
public void setChatMode(ChatMode chatMode) {
this.chatMode = chatMode;
}
public ChatMode getChatMode() {
if (this.factionId.equals("0") || !Conf.factionOnlyChat) {
this.chatMode = ChatMode.PUBLIC;
}
return chatMode;
@ -147,19 +181,26 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
// FIELD: chatSpy
private transient boolean spyingChat = false;
public void setSpyingChat(boolean chatSpying) { this.spyingChat = chatSpying; }
public boolean isSpyingChat() { return spyingChat; }
public void setSpyingChat(boolean chatSpying) {
this.spyingChat = chatSpying;
}
public boolean isSpyingChat() {
return spyingChat;
}
// FIELD: account
public String getAccountId() { return this.getId(); }
public String getAccountId() {
return this.getId();
}
// -------------------------------------------- //
// Construct
// -------------------------------------------- //
// GSON need this noarg constructor.
public FPlayer()
{
public FPlayer() {
this.resetFactionData(false);
this.power = Conf.powerPlayerStarting;
this.lastPowerUpdateTime = System.currentTimeMillis();
@ -172,21 +213,17 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
this.deleteMe = false;
this.powerBoost = 0.0;
if ( ! Conf.newPlayerStartingFactionID.equals("0") && Factions.i.exists(Conf.newPlayerStartingFactionID))
{
if (!Conf.newPlayerStartingFactionID.equals("0") && Factions.i.exists(Conf.newPlayerStartingFactionID)) {
this.factionId = Conf.newPlayerStartingFactionID;
}
}
public final void resetFactionData(boolean doSpoutUpdate)
{
public final void resetFactionData(boolean doSpoutUpdate) {
// clean up any territory ownership in old faction, if there is one
if (Factions.i.exists(this.getFactionId()))
{
if (Factions.i.exists(this.getFactionId())) {
Faction currentFaction = this.getFaction();
currentFaction.removeFPlayer(this);
if (currentFaction.isNormal())
{
if (currentFaction.isNormal()) {
currentFaction.clearClaimOwnership(this.getId());
}
}
@ -197,14 +234,12 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
this.title = "";
this.autoClaimFor = null;
if (doSpoutUpdate)
{
if (doSpoutUpdate) {
SpoutFeatures.updateAppearances(this.getPlayer());
}
}
public void resetFactionData()
{
public void resetFactionData() {
this.resetFactionData(true);
}
@ -213,62 +248,48 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
// -------------------------------------------- //
public long getLastLoginTime()
{
public long getLastLoginTime() {
return lastLoginTime;
}
public void setLastLoginTime(long lastLoginTime)
{
public void setLastLoginTime(long lastLoginTime) {
losePowerFromBeingOffline();
this.lastLoginTime = lastLoginTime;
this.lastPowerUpdateTime = lastLoginTime;
if (Conf.noPVPDamageToOthersForXSecondsAfterLogin > 0)
{
if (Conf.noPVPDamageToOthersForXSecondsAfterLogin > 0) {
this.loginPvpDisabled = true;
}
}
public boolean isMapAutoUpdating()
{
public boolean isMapAutoUpdating() {
return mapAutoUpdating;
}
public void setMapAutoUpdating(boolean mapAutoUpdating)
{
public void setMapAutoUpdating(boolean mapAutoUpdating) {
this.mapAutoUpdating = mapAutoUpdating;
}
public boolean hasLoginPvpDisabled()
{
if (!loginPvpDisabled)
{
public boolean hasLoginPvpDisabled() {
if (!loginPvpDisabled) {
return false;
}
if (this.lastLoginTime + (Conf.noPVPDamageToOthersForXSecondsAfterLogin * 1000) < System.currentTimeMillis())
{
if (this.lastLoginTime + (Conf.noPVPDamageToOthersForXSecondsAfterLogin * 1000) < System.currentTimeMillis()) {
this.loginPvpDisabled = false;
return false;
}
return true;
}
public FLocation getLastStoodAt()
{
public FLocation getLastStoodAt() {
return this.lastStoodAt;
}
public void setLastStoodAt(FLocation flocation)
{
public void setLastStoodAt(FLocation flocation) {
this.lastStoodAt = flocation;
}
public void markForDeletion(boolean delete)
{
public void markForDeletion(boolean delete) {
deleteMe = delete;
}
@ -278,25 +299,20 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
// Base:
public String getTitle()
{
public String getTitle() {
return this.title;
}
public void setTitle(String title)
{
public void setTitle(String title) {
this.title = title;
}
public String getName()
{
public String getName() {
return this.getId(); // TODO: ... display name or remove completeley
}
public String getTag()
{
if ( ! this.hasFaction())
{
public String getTag() {
if (!this.hasFaction()) {
return "";
}
return this.getFaction().getTag();
@ -304,36 +320,32 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
// Base concatenations:
public String getNameAndSomething(String something)
{
public String getNameAndSomething(String something) {
String ret = this.role.getPrefix();
if (something.length() > 0) {
ret += something+" ";
ret += something + " ";
}
ret += this.getName();
return ret;
}
public String getNameAndTitle()
{
public String getNameAndTitle() {
return this.getNameAndSomething(this.getTitle());
}
public String getNameAndTag()
{
public String getNameAndTag() {
return this.getNameAndSomething(this.getTag());
}
// Colored concatenations:
// These are used in information messages
public String getNameAndTitle(Faction faction)
{
return this.getColorTo(faction)+this.getNameAndTitle();
public String getNameAndTitle(Faction faction) {
return this.getColorTo(faction) + this.getNameAndTitle();
}
public String getNameAndTitle(FPlayer fplayer)
{
return this.getColorTo(fplayer)+this.getNameAndTitle();
public String getNameAndTitle(FPlayer fplayer) {
return this.getColorTo(fplayer) + this.getNameAndTitle();
}
/*public String getNameAndTag(Faction faction)
@ -368,33 +380,29 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
// Chat Tag:
// These are injected into the format of global chat messages.
public String getChatTag()
{
if ( ! this.hasFaction()) {
public String getChatTag() {
if (!this.hasFaction()) {
return "";
}
return String.format(Conf.chatTagFormat, this.role.getPrefix()+this.getTag());
return String.format(Conf.chatTagFormat, this.role.getPrefix() + this.getTag());
}
// Colored Chat Tag
public String getChatTag(Faction faction)
{
if ( ! this.hasFaction()) {
public String getChatTag(Faction faction) {
if (!this.hasFaction()) {
return "";
}
return this.getRelationTo(faction).getColor()+getChatTag();
return this.getRelationTo(faction).getColor() + getChatTag();
}
public String getChatTag(FPlayer fplayer)
{
if ( ! this.hasFaction())
{
public String getChatTag(FPlayer fplayer) {
if (!this.hasFaction()) {
return "";
}
return this.getColorTo(fplayer)+getChatTag();
return this.getColorTo(fplayer) + getChatTag();
}
// -------------------------------
@ -402,48 +410,40 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
// -------------------------------
@Override
public String describeTo(RelationParticipator that, boolean ucfirst)
{
public String describeTo(RelationParticipator that, boolean ucfirst) {
return RelationUtil.describeThatToMe(this, that, ucfirst);
}
@Override
public String describeTo(RelationParticipator that)
{
public String describeTo(RelationParticipator that) {
return RelationUtil.describeThatToMe(this, that);
}
@Override
public Relation getRelationTo(RelationParticipator rp)
{
public Relation getRelationTo(RelationParticipator rp) {
return RelationUtil.getRelationTo(this, rp);
}
@Override
public Relation getRelationTo(RelationParticipator rp, boolean ignorePeaceful)
{
public Relation getRelationTo(RelationParticipator rp, boolean ignorePeaceful) {
return RelationUtil.getRelationTo(this, rp, ignorePeaceful);
}
public Relation getRelationToLocation()
{
public Relation getRelationToLocation() {
return Board.getFactionAt(new FLocation(this)).getRelationTo(this);
}
@Override
public ChatColor getColorTo(RelationParticipator rp)
{
public ChatColor getColorTo(RelationParticipator rp) {
return RelationUtil.getColorOfThatToMe(this, rp);
}
//----------------------------------------------//
// Health
//----------------------------------------------//
public void heal(int amnt)
{
public void heal(int amnt) {
Player player = this.getPlayer();
if (player == null)
{
if (player == null) {
return;
}
player.setHealth(player.getHealth() + amnt);
@ -453,14 +453,12 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
//----------------------------------------------//
// Power
//----------------------------------------------//
public double getPower()
{
public double getPower() {
this.updatePower();
return this.power;
}
protected void alterPower(double delta)
{
protected void alterPower(double delta) {
this.power += delta;
if (this.power > this.getPowerMax())
this.power = this.getPowerMax();
@ -468,38 +466,30 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
this.power = this.getPowerMin();
}
public double getPowerMax()
{
public double getPowerMax() {
return Conf.powerPlayerMax + this.powerBoost;
}
public double getPowerMin()
{
public double getPowerMin() {
return Conf.powerPlayerMin + this.powerBoost;
}
public int getPowerRounded()
{
public int getPowerRounded() {
return (int) Math.round(this.getPower());
}
public int getPowerMaxRounded()
{
public int getPowerMaxRounded() {
return (int) Math.round(this.getPowerMax());
}
public int getPowerMinRounded()
{
public int getPowerMinRounded() {
return (int) Math.round(this.getPowerMin());
}
protected void updatePower()
{
if (this.isOffline())
{
protected void updatePower() {
if (this.isOffline()) {
losePowerFromBeingOffline();
if (!Conf.powerRegenOffline)
{
if (!Conf.powerRegenOffline) {
return;
}
}
@ -508,31 +498,28 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
this.lastPowerUpdateTime = now;
Player thisPlayer = this.getPlayer();
if (thisPlayer != null && thisPlayer.isDead()) return; // don't let dead players regain power until they respawn
if (thisPlayer != null && thisPlayer.isDead())
return; // don't let dead players regain power until they respawn
int millisPerMinute = 60*1000;
int millisPerMinute = 60 * 1000;
this.alterPower(millisPassed * Conf.powerPerMinute / millisPerMinute);
}
protected void losePowerFromBeingOffline()
{
if (Conf.powerOfflineLossPerDay > 0.0 && this.power > Conf.powerOfflineLossLimit)
{
protected void losePowerFromBeingOffline() {
if (Conf.powerOfflineLossPerDay > 0.0 && this.power > Conf.powerOfflineLossLimit) {
long now = System.currentTimeMillis();
long millisPassed = now - this.lastPowerUpdateTime;
this.lastPowerUpdateTime = now;
double loss = millisPassed * Conf.powerOfflineLossPerDay / (24*60*60*1000);
if (this.power - loss < Conf.powerOfflineLossLimit)
{
double loss = millisPassed * Conf.powerOfflineLossPerDay / (24 * 60 * 60 * 1000);
if (this.power - loss < Conf.powerOfflineLossLimit) {
loss = this.power;
}
this.alterPower(-loss);
}
}
public void onDeath()
{
public void onDeath() {
this.updatePower();
this.alterPower(-Conf.powerPerDeath);
}
@ -540,43 +527,35 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
//----------------------------------------------//
// Territory
//----------------------------------------------//
public boolean isInOwnTerritory()
{
public boolean isInOwnTerritory() {
return Board.getFactionAt(new FLocation(this)) == this.getFaction();
}
public boolean isInOthersTerritory()
{
public boolean isInOthersTerritory() {
Faction factionHere = Board.getFactionAt(new FLocation(this));
return factionHere != null && factionHere.isNormal() && factionHere != this.getFaction();
}
public boolean isInAllyTerritory()
{
public boolean isInAllyTerritory() {
return Board.getFactionAt(new FLocation(this)).getRelationTo(this).isAlly();
}
public boolean isInNeutralTerritory()
{
public boolean isInNeutralTerritory() {
return Board.getFactionAt(new FLocation(this)).getRelationTo(this).isNeutral();
}
public boolean isInEnemyTerritory()
{
public boolean isInEnemyTerritory() {
return Board.getFactionAt(new FLocation(this)).getRelationTo(this).isEnemy();
}
public void sendFactionHereMessage()
{
if (SpoutFeatures.updateTerritoryDisplay(this))
{
public void sendFactionHereMessage() {
if (SpoutFeatures.updateTerritoryDisplay(this)) {
return;
}
Faction factionHere = Board.getFactionAt(this.getLastStoodAt());
String msg = P.p.txt.parse("<i>")+" ~ "+factionHere.getTag(this);
if (factionHere.getDescription().length() > 0)
{
msg += " - "+factionHere.getDescription();
String msg = P.p.txt.parse("<i>") + " ~ " + factionHere.getTag(this);
if (factionHere.getDescription().length() > 0) {
msg += " - " + factionHere.getDescription();
}
this.sendMessage(msg);
}
@ -585,78 +564,69 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
// Actions
// -------------------------------
public void leave(boolean makePay)
{
public void leave(boolean makePay) {
Faction myFaction = this.getFaction();
makePay = makePay && Econ.shouldBeUsed() && ! this.isAdminBypassing();
makePay = makePay && Econ.shouldBeUsed() && !this.isAdminBypassing();
if (myFaction == null)
{
if (myFaction == null) {
resetFactionData();
return;
}
boolean perm = myFaction.isPermanent();
if (!perm && this.getRole() == Role.ADMIN && myFaction.getFPlayers().size() > 1)
{
if (!perm && this.getRole() == Role.ADMIN && myFaction.getFPlayers().size() > 1) {
msg("<b>You must give the admin role to someone else first.");
return;
}
if (!Conf.canLeaveWithNegativePower && this.getPower() < 0)
{
if (!Conf.canLeaveWithNegativePower && this.getPower() < 0) {
msg("<b>You cannot leave until your power is positive.");
return;
}
// if economy is enabled and they're not on the bypass list, make sure they can pay
if (makePay && ! Econ.hasAtLeast(this, Conf.econCostLeave, "to leave your faction.")) return;
if (makePay && !Econ.hasAtLeast(this, Conf.econCostLeave, "to leave your faction.")) return;
FPlayerLeaveEvent leaveEvent = new FPlayerLeaveEvent(this,myFaction,FPlayerLeaveEvent.PlayerLeaveReason.LEAVE);
FPlayerLeaveEvent leaveEvent = new FPlayerLeaveEvent(this, myFaction, FPlayerLeaveEvent.PlayerLeaveReason.LEAVE);
Bukkit.getServer().getPluginManager().callEvent(leaveEvent);
if (leaveEvent.isCancelled()) return;
// then make 'em pay (if applicable)
if (makePay && ! Econ.modifyMoney(this, -Conf.econCostLeave, "to leave your faction.", "for leaving your faction.")) return;
if (makePay && !Econ.modifyMoney(this, -Conf.econCostLeave, "to leave your faction.", "for leaving your faction."))
return;
// Am I the last one in the faction?
if (myFaction.getFPlayers().size() == 1)
{
if (myFaction.getFPlayers().size() == 1) {
// Transfer all money
if (Econ.shouldBeUsed())
Econ.transferMoney(this, myFaction, this, Econ.getBalance(myFaction.getAccountId()));
}
if (myFaction.isNormal())
{
for (FPlayer fplayer : myFaction.getFPlayersWhereOnline(true))
{
if (myFaction.isNormal()) {
for (FPlayer fplayer : myFaction.getFPlayersWhereOnline(true)) {
fplayer.msg("%s<i> left %s<i>.", this.describeTo(fplayer, true), myFaction.describeTo(fplayer));
}
if (Conf.logFactionLeave)
P.p.log(this.getName()+" left the faction: "+myFaction.getTag());
P.p.log(this.getName() + " left the faction: " + myFaction.getTag());
}
this.resetFactionData();
if (myFaction.isNormal() && !perm && myFaction.getFPlayers().isEmpty())
{
if (myFaction.isNormal() && !perm && myFaction.getFPlayers().isEmpty()) {
// Remove this faction
for (FPlayer fplayer : FPlayers.i.getOnline())
{
for (FPlayer fplayer : FPlayers.i.getOnline()) {
fplayer.msg("<i>%s<i> was disbanded.", myFaction.describeTo(fplayer, true));
}
myFaction.detach();
if (Conf.logFactionDisband)
P.p.log("The faction "+myFaction.getTag()+" ("+myFaction.getId()+") was disbanded due to the last player ("+this.getName()+") leaving.");
P.p.log("The faction " + myFaction.getTag() + " (" + myFaction.getId() + ") was disbanded due to the last player (" + this.getName() + ") leaving.");
}
}
public boolean canClaimForFaction(Faction forFaction)
{
public boolean canClaimForFaction(Faction forFaction) {
if (forFaction.isNone()) return false;
if
@ -665,123 +635,81 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
|| (forFaction == this.getFaction() && this.getRole().isAtLeast(Role.MODERATOR))
|| (forFaction.isSafeZone() && Permission.MANAGE_SAFE_ZONE.has(getPlayer()))
|| (forFaction.isWarZone() && Permission.MANAGE_WAR_ZONE.has(getPlayer()))
)
{
) {
return true;
}
return false;
}
public boolean canClaimForFactionAtLocation(Faction forFaction, Location location, boolean notifyFailure)
{
public boolean canClaimForFactionAtLocation(Faction forFaction, Location location, boolean notifyFailure) {
String error = null;
FLocation flocation = new FLocation(location);
Faction myFaction = getFaction();
Faction currentFaction = Board.getFactionAt(flocation);
int ownedLand = forFaction.getLandRounded();
if (Conf.worldGuardChecking && Worldguard.checkForRegionsInChunk(location))
{
if (Conf.worldGuardChecking && Worldguard.checkForRegionsInChunk(location)) {
// Checks for WorldGuard regions in the chunk attempting to be claimed
error = P.p.txt.parse("<b>This land is protected");
}
else if (Conf.worldsNoClaiming.contains(flocation.getWorldName()))
{
} else if (Conf.worldsNoClaiming.contains(flocation.getWorldName())) {
error = P.p.txt.parse("<b>Sorry, this world has land claiming disabled.");
}
else if (this.isAdminBypassing())
{
} else if (this.isAdminBypassing()) {
return true;
}
else if (forFaction.isSafeZone() && Permission.MANAGE_SAFE_ZONE.has(getPlayer()))
{
} else if (forFaction.isSafeZone() && Permission.MANAGE_SAFE_ZONE.has(getPlayer())) {
return true;
}
else if (forFaction.isWarZone() && Permission.MANAGE_WAR_ZONE.has(getPlayer()))
{
} else if (forFaction.isWarZone() && Permission.MANAGE_WAR_ZONE.has(getPlayer())) {
return true;
}
else if (myFaction != forFaction)
{
} else if (myFaction != forFaction) {
error = P.p.txt.parse("<b>You can't claim land for <h>%s<b>.", forFaction.describeTo(this));
}
else if (forFaction == currentFaction)
{
} else if (forFaction == currentFaction) {
error = P.p.txt.parse("%s<i> already own this land.", forFaction.describeTo(this, true));
}
else if (this.getRole().value < Role.MODERATOR.value)
{
} else if (this.getRole().value < Role.MODERATOR.value) {
error = P.p.txt.parse("<b>You must be <h>%s<b> to claim land.", Role.MODERATOR.toString());
}
else if (forFaction.getFPlayers().size() < Conf.claimsRequireMinFactionMembers)
{
} else if (forFaction.getFPlayers().size() < Conf.claimsRequireMinFactionMembers) {
error = P.p.txt.parse("Factions must have at least <h>%s<b> members to claim land.", Conf.claimsRequireMinFactionMembers);
}
else if (currentFaction.isSafeZone())
{
} else if (currentFaction.isSafeZone()) {
error = P.p.txt.parse("<b>You can not claim a Safe Zone.");
}
else if (currentFaction.isWarZone())
{
} else if (currentFaction.isWarZone()) {
error = P.p.txt.parse("<b>You can not claim a War Zone.");
}
else if (ownedLand >= forFaction.getPowerRounded())
{
} else if (ownedLand >= forFaction.getPowerRounded()) {
error = P.p.txt.parse("<b>You can't claim more land! You need more power!");
}
else if (Conf.claimedLandsMax != 0 && ownedLand >= Conf.claimedLandsMax && forFaction.isNormal())
{
} else if (Conf.claimedLandsMax != 0 && ownedLand >= Conf.claimedLandsMax && forFaction.isNormal()) {
error = P.p.txt.parse("<b>Limit reached. You can't claim more land!");
}
else if (currentFaction.getRelationTo(forFaction) == Relation.ALLY)
{
} else if (currentFaction.getRelationTo(forFaction) == Relation.ALLY) {
error = P.p.txt.parse("<b>You can't claim the land of your allies.");
}
else if
} else if
(
Conf.claimsMustBeConnected
&& ! this.isAdminBypassing()
&& !this.isAdminBypassing()
&& myFaction.getLandRoundedInWorld(flocation.getWorldName()) > 0
&& !Board.isConnectedLocation(flocation, myFaction)
&& (!Conf.claimsCanBeUnconnectedIfOwnedByOtherFaction || !currentFaction.isNormal())
)
{
) {
if (Conf.claimsCanBeUnconnectedIfOwnedByOtherFaction)
error = P.p.txt.parse("<b>You can only claim additional land which is connected to your first claim or controlled by another faction!");
else
error = P.p.txt.parse("<b>You can only claim additional land which is connected to your first claim!");
}
else if (currentFaction.isNormal())
{
if (myFaction.isPeaceful())
{
} else if (currentFaction.isNormal()) {
if (myFaction.isPeaceful()) {
error = P.p.txt.parse("%s<i> owns this land. Your faction is peaceful, so you cannot claim land from other factions.", currentFaction.getTag(this));
}
else if (currentFaction.isPeaceful())
{
} else if (currentFaction.isPeaceful()) {
error = P.p.txt.parse("%s<i> owns this land, and is a peaceful faction. You cannot claim land from them.", currentFaction.getTag(this));
}
else if ( ! currentFaction.hasLandInflation())
{
} else if (!currentFaction.hasLandInflation()) {
// TODO more messages WARN current faction most importantly
error = P.p.txt.parse("%s<i> owns this land and is strong enough to keep it.", currentFaction.getTag(this));
}
else if ( ! Board.isBorderLocation(flocation))
{
} else if (!Board.isBorderLocation(flocation)) {
error = P.p.txt.parse("<b>You must start claiming land at the border of the territory.");
}
}
if (notifyFailure && error != null)
{
if (notifyFailure && error != null) {
msg(error);
}
return error == null;
}
public boolean attemptClaim(Faction forFaction, Location location, boolean notifyFailure)
{
public boolean attemptClaim(Faction forFaction, Location location, boolean notifyFailure) {
// notifyFailure is false if called by auto-claim; no need to notify on every failure for it
// return value is false on failure, true on success
@ -790,36 +718,34 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
int ownedLand = forFaction.getLandRounded();
if ( ! this.canClaimForFactionAtLocation(forFaction, location, notifyFailure)) return false;
if (!this.canClaimForFactionAtLocation(forFaction, location, notifyFailure)) return false;
// if economy is enabled and they're not on the bypass list, make sure they can pay
boolean mustPay = Econ.shouldBeUsed() && ! this.isAdminBypassing() && ! forFaction.isSafeZone() && ! forFaction.isWarZone();
boolean mustPay = Econ.shouldBeUsed() && !this.isAdminBypassing() && !forFaction.isSafeZone() && !forFaction.isWarZone();
double cost = 0.0;
EconomyParticipator payee = null;
if (mustPay)
{
if (mustPay) {
cost = Econ.calculateClaimCost(ownedLand, currentFaction.isNormal());
if (Conf.econClaimUnconnectedFee != 0.0 && forFaction.getLandRoundedInWorld(flocation.getWorldName()) > 0 && !Board.isConnectedLocation(flocation, forFaction))
cost += Conf.econClaimUnconnectedFee;
if(Conf.bankEnabled && Conf.bankFactionPaysLandCosts && this.hasFaction())
if (Conf.bankEnabled && Conf.bankFactionPaysLandCosts && this.hasFaction())
payee = this.getFaction();
else
payee = this;
if ( ! Econ.hasAtLeast(payee, cost, "to claim this land")) return false;
if (!Econ.hasAtLeast(payee, cost, "to claim this land")) return false;
}
LandClaimEvent claimEvent = new LandClaimEvent(flocation, forFaction, this);
Bukkit.getServer().getPluginManager().callEvent(claimEvent);
if(claimEvent.isCancelled()) return false;
if (claimEvent.isCancelled()) return false;
// then make 'em pay (if applicable)
if (mustPay && ! Econ.modifyMoney(payee, -cost, "to claim this land", "for claiming this land")) return false;
if (mustPay && !Econ.modifyMoney(payee, -cost, "to claim this land", "for claiming this land")) return false;
if (LWCFeatures.getEnabled() && forFaction.isNormal() && Conf.onCaptureResetLwcLocks)
{
if (LWCFeatures.getEnabled() && forFaction.isNormal() && Conf.onCaptureResetLwcLocks) {
LWCFeatures.clearOtherChests(flocation, this.getFaction());
}
@ -827,8 +753,7 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
Set<FPlayer> informTheseFPlayers = new HashSet<FPlayer>();
informTheseFPlayers.add(this);
informTheseFPlayers.addAll(forFaction.getFPlayersWhereOnline(true));
for (FPlayer fp : informTheseFPlayers)
{
for (FPlayer fp : informTheseFPlayers) {
fp.msg("<h>%s<i> claimed land for <h>%s<i> from <h>%s<i>.", this.describeTo(fp, true), forFaction.describeTo(fp), currentFaction.describeTo(fp));
}
@ -836,7 +761,7 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
SpoutFeatures.updateTerritoryDisplayLoc(flocation);
if (Conf.logLandClaims)
P.p.log(this.getName()+" claimed land at ("+flocation.getCoordString()+") for the faction: "+forFaction.getTag());
P.p.log(this.getName() + " claimed land at (" + flocation.getCoordString() + ") for the faction: " + forFaction.getTag());
return true;
}
@ -846,17 +771,15 @@ public class FPlayer extends PlayerEntity implements EconomyParticipator
// -------------------------------------------- //
@Override
public boolean shouldBeSaved()
{
public boolean shouldBeSaved() {
if (!this.hasFaction() &&
(this.getPowerRounded() == this.getPowerMaxRounded() || this.getPowerRounded() == (int) Math.round(Conf.powerPlayerStarting))
)
return false;
return ! this.deleteMe;
return !this.deleteMe;
}
public void msg(String str, Object... args)
{
public void msg(String str, Object... args) {
this.sendMessage(P.p.txt.parse(str, args));
}
}

View File

@ -1,23 +1,20 @@
package com.massivecraft.factions;
import com.massivecraft.factions.zcore.persist.PlayerEntityCollection;
import org.bukkit.craftbukkit.libs.com.google.gson.reflect.TypeToken;
import java.io.File;
import java.lang.reflect.Type;
import java.util.Map;
import java.util.concurrent.ConcurrentSkipListMap;
import java.util.concurrent.CopyOnWriteArrayList;
import org.bukkit.craftbukkit.libs.com.google.gson.reflect.TypeToken;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.zcore.persist.PlayerEntityCollection;
public class FPlayers extends PlayerEntityCollection<FPlayer>
{
public class FPlayers extends PlayerEntityCollection<FPlayer> {
public static FPlayers i = new FPlayers();
P p = P.p;
private FPlayers()
{
private FPlayers() {
super
(
FPlayer.class,
@ -31,18 +28,15 @@ public class FPlayers extends PlayerEntityCollection<FPlayer>
}
@Override
public Type getMapType()
{
return new TypeToken<Map<String, FPlayer>>(){}.getType();
public Type getMapType() {
return new TypeToken<Map<String, FPlayer>>() {
}.getType();
}
public void clean()
{
for (FPlayer fplayer : this.get())
{
if ( ! Factions.i.exists(fplayer.getFactionId()))
{
p.log("Reset faction data (invalid faction) for player "+fplayer.getName());
public void clean() {
for (FPlayer fplayer : this.get()) {
if (!Factions.i.exists(fplayer.getFactionId())) {
p.log("Reset faction data (invalid faction) for player " + fplayer.getName());
fplayer.resetFactionData(false);
}
}

View File

@ -1,14 +1,5 @@
package com.massivecraft.factions;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.Map.Entry;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import com.massivecraft.factions.iface.EconomyParticipator;
import com.massivecraft.factions.iface.RelationParticipator;
import com.massivecraft.factions.integration.Econ;
@ -18,10 +9,16 @@ import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.util.*;
import com.massivecraft.factions.zcore.persist.Entity;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
public class Faction extends Entity implements EconomyParticipator
{
public class Faction extends Entity implements EconomyParticipator {
// FIELD: relationWish
private Map<String, Relation> relationWish;
@ -35,79 +32,133 @@ public class Faction extends Entity implements EconomyParticipator
// FIELD: invites
// Where string is a lowercase player name
private Set<String> invites;
public void invite(FPlayer fplayer) { this.invites.add(fplayer.getName().toLowerCase()); }
public void deinvite(FPlayer fplayer) { this.invites.remove(fplayer.getName().toLowerCase()); }
public boolean isInvited(FPlayer fplayer) { return this.invites.contains(fplayer.getName().toLowerCase()); }
public void invite(FPlayer fplayer) {
this.invites.add(fplayer.getName().toLowerCase());
}
public void deinvite(FPlayer fplayer) {
this.invites.remove(fplayer.getName().toLowerCase());
}
public boolean isInvited(FPlayer fplayer) {
return this.invites.contains(fplayer.getName().toLowerCase());
}
// FIELD: open
private boolean open;
public boolean getOpen() { return open; }
public void setOpen(boolean isOpen) { open = isOpen; }
public boolean getOpen() {
return open;
}
public void setOpen(boolean isOpen) {
open = isOpen;
}
// FIELD: peaceful
// "peaceful" status can only be set by server admins/moderators/ops, and prevents PvP and land capture to/from the faction
private boolean peaceful;
public boolean isPeaceful() { return this.peaceful; }
public void setPeaceful(boolean isPeaceful) { this.peaceful = isPeaceful; }
public boolean isPeaceful() {
return this.peaceful;
}
public void setPeaceful(boolean isPeaceful) {
this.peaceful = isPeaceful;
}
// FIELD: peacefulExplosionsEnabled
private boolean peacefulExplosionsEnabled;
public void setPeacefulExplosionsEnabled(boolean val) { peacefulExplosionsEnabled = val; }
public boolean getPeacefulExplosionsEnabled(){ return this.peacefulExplosionsEnabled; }
public boolean noExplosionsInTerritory() { return this.peaceful && ! peacefulExplosionsEnabled; }
public void setPeacefulExplosionsEnabled(boolean val) {
peacefulExplosionsEnabled = val;
}
public boolean getPeacefulExplosionsEnabled() {
return this.peacefulExplosionsEnabled;
}
public boolean noExplosionsInTerritory() {
return this.peaceful && !peacefulExplosionsEnabled;
}
// FIELD: permanent
// "permanent" status can only be set by server admins/moderators/ops, and allows the faction to remain even with 0 members
private boolean permanent;
public boolean isPermanent() { return permanent || !this.isNormal(); }
public void setPermanent(boolean isPermanent) { permanent = isPermanent; }
public boolean isPermanent() {
return permanent || !this.isNormal();
}
public void setPermanent(boolean isPermanent) {
permanent = isPermanent;
}
// FIELD: tag
private String tag;
public String getTag() { return this.tag; }
public String getTag(String prefix) { return prefix+this.tag; }
public String getTag(Faction otherFaction)
{
if (otherFaction == null)
{
public String getTag() {
return this.tag;
}
public String getTag(String prefix) {
return prefix + this.tag;
}
public String getTag(Faction otherFaction) {
if (otherFaction == null) {
return getTag();
}
return this.getTag(this.getColorTo(otherFaction).toString());
}
public String getTag(FPlayer otherFplayer) {
if (otherFplayer == null)
{
if (otherFplayer == null) {
return getTag();
}
return this.getTag(this.getColorTo(otherFplayer).toString());
}
public void setTag(String str)
{
if (Conf.factionTagForceUpperCase)
{
public void setTag(String str) {
if (Conf.factionTagForceUpperCase) {
str = str.toUpperCase();
}
this.tag = str;
}
public String getComparisonTag() { return MiscUtil.getComparisonString(this.tag); }
public String getComparisonTag() {
return MiscUtil.getComparisonString(this.tag);
}
// FIELD: description
private String description;
public String getDescription() { return this.description; }
public void setDescription(String value) { this.description = value; }
public String getDescription() {
return this.description;
}
public void setDescription(String value) {
this.description = value;
}
// FIELD: home
private LazyLocation home;
public void setHome(Location home) { this.home = new LazyLocation(home); }
public boolean hasHome() { return this.getHome() != null; }
public Location getHome()
{
public void setHome(Location home) {
this.home = new LazyLocation(home);
}
public boolean hasHome() {
return this.getHome() != null;
}
public Location getHome() {
confirmValidHome();
return (this.home != null) ? this.home.getLocation() : null;
}
public void confirmValidHome()
{
public void confirmValidHome() {
if (!Conf.homesMustBeInClaimedTerritory || this.home == null || (this.home.getLocation() != null && Board.getFactionAt(new FLocation(this.home.getLocation())) == this))
return;
@ -121,12 +172,12 @@ public class Faction extends Entity implements EconomyParticipator
// FIELD: account (fake field)
// Bank functions
public double money;
public String getAccountId()
{
String aid = "faction-"+this.getId();
public String getAccountId() {
String aid = "faction-" + this.getId();
// We need to override the default money given to players.
if ( ! Econ.hasAccount(aid))
if (!Econ.hasAccount(aid))
Econ.setBalance(aid, 0);
return aid;
@ -134,23 +185,37 @@ public class Faction extends Entity implements EconomyParticipator
// FIELD: permanentPower
private Integer permanentPower;
public Integer getPermanentPower() { return this.permanentPower; }
public void setPermanentPower(Integer permanentPower) { this.permanentPower = permanentPower; }
public boolean hasPermanentPower() { return this.permanentPower != null; }
public Integer getPermanentPower() {
return this.permanentPower;
}
public void setPermanentPower(Integer permanentPower) {
this.permanentPower = permanentPower;
}
public boolean hasPermanentPower() {
return this.permanentPower != null;
}
// FIELD: powerBoost
// special increase/decrease to default and max power for this faction
private double powerBoost;
public double getPowerBoost() { return this.powerBoost; }
public void setPowerBoost(double powerBoost) { this.powerBoost = powerBoost; }
public double getPowerBoost() {
return this.powerBoost;
}
public void setPowerBoost(double powerBoost) {
this.powerBoost = powerBoost;
}
// -------------------------------------------- //
// Construct
// -------------------------------------------- //
public Faction()
{
public Faction() {
this.relationWish = new HashMap<String, Relation>();
this.invites = new HashSet<String>();
this.open = Conf.newFactionsDefaultOpen;
@ -168,38 +233,36 @@ public class Faction extends Entity implements EconomyParticipator
// Extra Getters And Setters
// -------------------------------------------- //
public boolean noPvPInTerritory() { return isSafeZone() || (peaceful && Conf.peacefulTerritoryDisablePVP); }
public boolean noMonstersInTerritory() { return isSafeZone() || (peaceful && Conf.peacefulTerritoryDisableMonsters); }
public boolean noPvPInTerritory() {
return isSafeZone() || (peaceful && Conf.peacefulTerritoryDisablePVP);
}
public boolean noMonstersInTerritory() {
return isSafeZone() || (peaceful && Conf.peacefulTerritoryDisableMonsters);
}
// -------------------------------
// Understand the types
// -------------------------------
public boolean isNormal()
{
return ! (this.isNone() || this.isSafeZone() || this.isWarZone());
public boolean isNormal() {
return !(this.isNone() || this.isSafeZone() || this.isWarZone());
}
public boolean isNone()
{
public boolean isNone() {
return this.getId().equals("0");
}
public boolean isSafeZone()
{
public boolean isSafeZone() {
return this.getId().equals("-1");
}
public boolean isWarZone()
{
public boolean isWarZone() {
return this.getId().equals("-2");
}
public boolean isPlayerFreeType()
{
public boolean isPlayerFreeType() {
return this.isSafeZone() || this.isWarZone();
}
@ -209,52 +272,41 @@ public class Faction extends Entity implements EconomyParticipator
// -------------------------------
@Override
public String describeTo(RelationParticipator that, boolean ucfirst)
{
public String describeTo(RelationParticipator that, boolean ucfirst) {
return RelationUtil.describeThatToMe(this, that, ucfirst);
}
@Override
public String describeTo(RelationParticipator that)
{
public String describeTo(RelationParticipator that) {
return RelationUtil.describeThatToMe(this, that);
}
@Override
public Relation getRelationTo(RelationParticipator rp)
{
public Relation getRelationTo(RelationParticipator rp) {
return RelationUtil.getRelationTo(this, rp);
}
@Override
public Relation getRelationTo(RelationParticipator rp, boolean ignorePeaceful)
{
public Relation getRelationTo(RelationParticipator rp, boolean ignorePeaceful) {
return RelationUtil.getRelationTo(this, rp, ignorePeaceful);
}
@Override
public ChatColor getColorTo(RelationParticipator rp)
{
public ChatColor getColorTo(RelationParticipator rp) {
return RelationUtil.getColorOfThatToMe(this, rp);
}
public Relation getRelationWish(Faction otherFaction)
{
if (this.relationWish.containsKey(otherFaction.getId()))
{
public Relation getRelationWish(Faction otherFaction) {
if (this.relationWish.containsKey(otherFaction.getId())) {
return this.relationWish.get(otherFaction.getId());
}
return Relation.NEUTRAL;
}
public void setRelationWish(Faction otherFaction, Relation relation)
{
if (this.relationWish.containsKey(otherFaction.getId()) && relation.equals(Relation.NEUTRAL))
{
public void setRelationWish(Faction otherFaction, Relation relation) {
if (this.relationWish.containsKey(otherFaction.getId()) && relation.equals(Relation.NEUTRAL)) {
this.relationWish.remove(otherFaction.getId());
}
else
{
} else {
this.relationWish.put(otherFaction.getId(), relation);
}
}
@ -262,51 +314,41 @@ public class Faction extends Entity implements EconomyParticipator
//----------------------------------------------//
// Power
//----------------------------------------------//
public double getPower()
{
if (this.hasPermanentPower())
{
public double getPower() {
if (this.hasPermanentPower()) {
return this.getPermanentPower();
}
double ret = 0;
for (FPlayer fplayer : fplayers)
{
for (FPlayer fplayer : fplayers) {
ret += fplayer.getPower();
}
if (Conf.powerFactionMax > 0 && ret > Conf.powerFactionMax)
{
if (Conf.powerFactionMax > 0 && ret > Conf.powerFactionMax) {
ret = Conf.powerFactionMax;
}
return ret + this.powerBoost;
}
public double getPowerMax()
{
if (this.hasPermanentPower())
{
public double getPowerMax() {
if (this.hasPermanentPower()) {
return this.getPermanentPower();
}
double ret = 0;
for (FPlayer fplayer : fplayers)
{
for (FPlayer fplayer : fplayers) {
ret += fplayer.getPowerMax();
}
if (Conf.powerFactionMax > 0 && ret > Conf.powerFactionMax)
{
if (Conf.powerFactionMax > 0 && ret > Conf.powerFactionMax) {
ret = Conf.powerFactionMax;
}
return ret + this.powerBoost;
}
public int getPowerRounded()
{
public int getPowerRounded() {
return (int) Math.round(this.getPower());
}
public int getPowerMaxRounded()
{
public int getPowerMaxRounded() {
return (int) Math.round(this.getPowerMax());
}
@ -314,13 +356,11 @@ public class Faction extends Entity implements EconomyParticipator
return Board.getFactionCoordCount(this);
}
public int getLandRoundedInWorld(String worldName)
{
public int getLandRoundedInWorld(String worldName) {
return Board.getFactionCoordCountInWorld(this, worldName);
}
public boolean hasLandInflation()
{
public boolean hasLandInflation() {
return this.getLandRounded() > this.getPowerRounded();
}
@ -329,47 +369,40 @@ public class Faction extends Entity implements EconomyParticipator
// -------------------------------
// maintain the reference list of FPlayers in this faction
public void refreshFPlayers()
{
public void refreshFPlayers() {
fplayers.clear();
if (this.isPlayerFreeType()) return;
for (FPlayer fplayer : FPlayers.i.get())
{
if (fplayer.getFaction() == this)
{
for (FPlayer fplayer : FPlayers.i.get()) {
if (fplayer.getFaction() == this) {
fplayers.add(fplayer);
}
}
}
protected boolean addFPlayer(FPlayer fplayer)
{
protected boolean addFPlayer(FPlayer fplayer) {
if (this.isPlayerFreeType()) return false;
return fplayers.add(fplayer);
}
protected boolean removeFPlayer(FPlayer fplayer)
{
protected boolean removeFPlayer(FPlayer fplayer) {
if (this.isPlayerFreeType()) return false;
return fplayers.remove(fplayer);
}
public Set<FPlayer> getFPlayers()
{
public Set<FPlayer> getFPlayers() {
// return a shallow copy of the FPlayer list, to prevent tampering and concurrency issues
Set<FPlayer> ret = new HashSet<FPlayer>(fplayers);
return ret;
}
public Set<FPlayer> getFPlayersWhereOnline(boolean online)
{
public Set<FPlayer> getFPlayersWhereOnline(boolean online) {
Set<FPlayer> ret = new HashSet<FPlayer>();
for (FPlayer fplayer : fplayers)
{
if (fplayer.isOnline() == online)
{
for (FPlayer fplayer : fplayers) {
if (fplayer.isOnline() == online) {
ret.add(fplayer);
}
}
@ -377,29 +410,23 @@ public class Faction extends Entity implements EconomyParticipator
return ret;
}
public FPlayer getFPlayerAdmin()
{
if ( ! this.isNormal()) return null;
public FPlayer getFPlayerAdmin() {
if (!this.isNormal()) return null;
for (FPlayer fplayer : fplayers)
{
if (fplayer.getRole() == Role.ADMIN)
{
for (FPlayer fplayer : fplayers) {
if (fplayer.getRole() == Role.ADMIN) {
return fplayer;
}
}
return null;
}
public ArrayList<FPlayer> getFPlayersWhereRole(Role role)
{
public ArrayList<FPlayer> getFPlayersWhereRole(Role role) {
ArrayList<FPlayer> ret = new ArrayList<FPlayer>();
if ( ! this.isNormal()) return ret;
if (!this.isNormal()) return ret;
for (FPlayer fplayer : fplayers)
{
if (fplayer.getRole() == role)
{
for (FPlayer fplayer : fplayers) {
if (fplayer.getRole() == role) {
ret.add(fplayer);
}
}
@ -407,16 +434,13 @@ public class Faction extends Entity implements EconomyParticipator
return ret;
}
public ArrayList<Player> getOnlinePlayers()
{
public ArrayList<Player> getOnlinePlayers() {
ArrayList<Player> ret = new ArrayList<Player>();
if (this.isPlayerFreeType()) return ret;
for (Player player: P.p.getServer().getOnlinePlayers())
{
for (Player player : P.p.getServer().getOnlinePlayers()) {
FPlayer fplayer = FPlayers.i.get(player);
if (fplayer.getFaction() == this)
{
if (fplayer.getFaction() == this) {
ret.add(player);
}
}
@ -425,40 +449,33 @@ public class Faction extends Entity implements EconomyParticipator
}
// slightly faster check than getOnlinePlayers() if you just want to see if there are any players online
public boolean hasPlayersOnline()
{
public boolean hasPlayersOnline() {
// only real factions can have players online, not safe zone / war zone
if (this.isPlayerFreeType()) return false;
for (Player player: P.p.getServer().getOnlinePlayers())
{
for (Player player : P.p.getServer().getOnlinePlayers()) {
FPlayer fplayer = FPlayers.i.get(player);
if (fplayer.getFaction() == this)
{
if (fplayer.getFaction() == this) {
return true;
}
}
// even if all players are technically logged off, maybe someone was on recently enough to not consider them officially offline yet
if (Conf.considerFactionsReallyOfflineAfterXMinutes > 0 && System.currentTimeMillis() < lastPlayerLoggedOffTime + (Conf.considerFactionsReallyOfflineAfterXMinutes * 60000))
{
if (Conf.considerFactionsReallyOfflineAfterXMinutes > 0 && System.currentTimeMillis() < lastPlayerLoggedOffTime + (Conf.considerFactionsReallyOfflineAfterXMinutes * 60000)) {
return true;
}
return false;
}
public void memberLoggedOff()
{
if (this.isNormal())
{
public void memberLoggedOff() {
if (this.isNormal()) {
lastPlayerLoggedOffTime = System.currentTimeMillis();
}
}
// used when current leader is about to be removed from the faction; promotes new leader, or disbands faction if no other members left
public void promoteNewLeader()
{
if (! this.isNormal()) return;
public void promoteNewLeader() {
if (!this.isNormal()) return;
if (this.isPermanent() && Conf.permanentFactionsDisableLeaderPromotion) return;
FPlayer oldLeader = this.getFPlayerAdmin();
@ -468,10 +485,8 @@ public class Faction extends Entity implements EconomyParticipator
if (replacements == null || replacements.isEmpty())
replacements = this.getFPlayersWhereRole(Role.NORMAL);
if (replacements == null || replacements.isEmpty())
{ // faction admin is the only member; one-man faction
if (this.isPermanent())
{
if (replacements == null || replacements.isEmpty()) { // faction admin is the only member; one-man faction
if (this.isPermanent()) {
if (oldLeader != null)
oldLeader.setRole(Role.NORMAL);
return;
@ -479,22 +494,19 @@ public class Faction extends Entity implements EconomyParticipator
// no members left and faction isn't permanent, so disband it
if (Conf.logFactionDisband)
P.p.log("The faction "+this.getTag()+" ("+this.getId()+") has been disbanded since it has no members left.");
P.p.log("The faction " + this.getTag() + " (" + this.getId() + ") has been disbanded since it has no members left.");
for (FPlayer fplayer : FPlayers.i.getOnline())
{
for (FPlayer fplayer : FPlayers.i.getOnline()) {
fplayer.msg("The faction %s<i> was disbanded.", this.getTag(fplayer));
}
this.detach();
}
else
{ // promote new faction admin
} else { // promote new faction admin
if (oldLeader != null)
oldLeader.setRole(Role.NORMAL);
replacements.get(0).setRole(Role.ADMIN);
this.msg("<i>Faction admin <h>%s<i> has been removed. %s<i> has been promoted as the new faction admin.", oldLeader == null ? "" : oldLeader.getName(), replacements.get(0).getName());
P.p.log("Faction "+this.getTag()+" ("+this.getId()+") admin was removed. Replacement admin: "+replacements.get(0).getName());
P.p.log("Faction " + this.getTag() + " (" + this.getId() + ") admin was removed. Replacement admin: " + replacements.get(0).getName());
}
}
@ -502,28 +514,22 @@ public class Faction extends Entity implements EconomyParticipator
//----------------------------------------------//
// Messages
//----------------------------------------------//
public void msg(String message, Object... args)
{
public void msg(String message, Object... args) {
message = P.p.txt.parse(message, args);
for (FPlayer fplayer : this.getFPlayersWhereOnline(true))
{
for (FPlayer fplayer : this.getFPlayersWhereOnline(true)) {
fplayer.sendMessage(message);
}
}
public void sendMessage(String message)
{
for (FPlayer fplayer : this.getFPlayersWhereOnline(true))
{
public void sendMessage(String message) {
for (FPlayer fplayer : this.getFPlayersWhereOnline(true)) {
fplayer.sendMessage(message);
}
}
public void sendMessage(List<String> messages)
{
for (FPlayer fplayer : this.getFPlayersWhereOnline(true))
{
public void sendMessage(List<String> messages) {
for (FPlayer fplayer : this.getFPlayersWhereOnline(true)) {
fplayer.sendMessage(messages);
}
}
@ -532,49 +538,39 @@ public class Faction extends Entity implements EconomyParticipator
// Ownership of specific claims
//----------------------------------------------//
public void clearAllClaimOwnership()
{
public void clearAllClaimOwnership() {
claimOwnership.clear();
}
public void clearClaimOwnership(FLocation loc)
{
if(Conf.onUnclaimResetLwcLocks && LWCFeatures.getEnabled())
{
public void clearClaimOwnership(FLocation loc) {
if (Conf.onUnclaimResetLwcLocks && LWCFeatures.getEnabled()) {
LWCFeatures.clearAllChests(loc);
}
claimOwnership.remove(loc);
}
public void clearClaimOwnership(String playerName)
{
if (playerName == null || playerName.isEmpty())
{
public void clearClaimOwnership(String playerName) {
if (playerName == null || playerName.isEmpty()) {
return;
}
Set<String> ownerData;
String player = playerName.toLowerCase();
for (Entry<FLocation, Set<String>> entry : claimOwnership.entrySet())
{
for (Entry<FLocation, Set<String>> entry : claimOwnership.entrySet()) {
ownerData = entry.getValue();
if (ownerData == null) continue;
Iterator<String> iter = ownerData.iterator();
while (iter.hasNext())
{
if (iter.next().equals(player))
{
while (iter.hasNext()) {
if (iter.next().equals(player)) {
iter.remove();
}
}
if (ownerData.isEmpty())
{
if(Conf.onUnclaimResetLwcLocks && LWCFeatures.getEnabled())
{
if (ownerData.isEmpty()) {
if (Conf.onUnclaimResetLwcLocks && LWCFeatures.getEnabled()) {
LWCFeatures.clearAllChests(entry.getKey());
}
claimOwnership.remove(entry.getKey());
@ -582,15 +578,12 @@ public class Faction extends Entity implements EconomyParticipator
}
}
public int getCountOfClaimsWithOwners()
{
public int getCountOfClaimsWithOwners() {
return claimOwnership.isEmpty() ? 0 : claimOwnership.size();
}
public boolean doesLocationHaveOwnersSet(FLocation loc)
{
if (claimOwnership.isEmpty() || !claimOwnership.containsKey(loc))
{
public boolean doesLocationHaveOwnersSet(FLocation loc) {
if (claimOwnership.isEmpty() || !claimOwnership.containsKey(loc)) {
return false;
}
@ -598,57 +591,46 @@ public class Faction extends Entity implements EconomyParticipator
return ownerData != null && !ownerData.isEmpty();
}
public boolean isPlayerInOwnerList(String playerName, FLocation loc)
{
if (claimOwnership.isEmpty())
{
public boolean isPlayerInOwnerList(String playerName, FLocation loc) {
if (claimOwnership.isEmpty()) {
return false;
}
Set<String> ownerData = claimOwnership.get(loc);
if (ownerData == null)
{
if (ownerData == null) {
return false;
}
if (ownerData.contains(playerName.toLowerCase()))
{
if (ownerData.contains(playerName.toLowerCase())) {
return true;
}
return false;
}
public void setPlayerAsOwner(String playerName, FLocation loc)
{
public void setPlayerAsOwner(String playerName, FLocation loc) {
Set<String> ownerData = claimOwnership.get(loc);
if (ownerData == null)
{
if (ownerData == null) {
ownerData = new HashSet<String>();
}
ownerData.add(playerName.toLowerCase());
claimOwnership.put(loc, ownerData);
}
public void removePlayerAsOwner(String playerName, FLocation loc)
{
public void removePlayerAsOwner(String playerName, FLocation loc) {
Set<String> ownerData = claimOwnership.get(loc);
if (ownerData == null)
{
if (ownerData == null) {
return;
}
ownerData.remove(playerName.toLowerCase());
claimOwnership.put(loc, ownerData);
}
public Set<String> getOwnerList(FLocation loc)
{
public Set<String> getOwnerList(FLocation loc) {
return claimOwnership.get(loc);
}
public String getOwnerListString(FLocation loc)
{
public String getOwnerListString(FLocation loc) {
Set<String> ownerData = claimOwnership.get(loc);
if (ownerData == null || ownerData.isEmpty())
{
if (ownerData == null || ownerData.isEmpty()) {
return "";
}
@ -656,8 +638,7 @@ public class Faction extends Entity implements EconomyParticipator
Iterator<String> iter = ownerData.iterator();
while (iter.hasNext()) {
if (!ownerList.isEmpty())
{
if (!ownerList.isEmpty()) {
ownerList += ", ";
}
ownerList += iter.next();
@ -665,8 +646,7 @@ public class Faction extends Entity implements EconomyParticipator
return ownerList;
}
public boolean playerHasOwnershipRights(FPlayer fplayer, FLocation loc)
{
public boolean playerHasOwnershipRights(FPlayer fplayer, FLocation loc) {
// in own faction, with sufficient role or permission to bypass ownership?
if
(
@ -677,8 +657,7 @@ public class Faction extends Entity implements EconomyParticipator
||
Permission.OWNERSHIP_BYPASS.has(fplayer.getPlayer())
)
)
{
) {
return true;
}
@ -703,10 +682,8 @@ public class Faction extends Entity implements EconomyParticipator
@Override
public void postDetach()
{
if (Econ.shouldBeUsed())
{
public void postDetach() {
if (Econ.shouldBeUsed()) {
Econ.setBalance(getAccountId(), 0);
}

View File

@ -1,27 +1,26 @@
package com.massivecraft.factions;
import com.massivecraft.factions.util.MiscUtil;
import com.massivecraft.factions.zcore.persist.EntityCollection;
import com.massivecraft.factions.zcore.util.TextUtil;
import org.bukkit.ChatColor;
import org.bukkit.craftbukkit.libs.com.google.gson.reflect.TypeToken;
import java.io.File;
import java.lang.reflect.Type;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.logging.Level;
import org.bukkit.ChatColor;
import org.bukkit.craftbukkit.libs.com.google.gson.reflect.TypeToken;
import com.massivecraft.factions.util.MiscUtil;
import com.massivecraft.factions.zcore.persist.EntityCollection;
import com.massivecraft.factions.zcore.util.TextUtil;
public class Factions extends EntityCollection<Faction>
{
public class Factions extends EntityCollection<Faction> {
public static Factions i = new Factions();
P p = P.p;
private Factions()
{
private Factions() {
super
(
Faction.class,
@ -33,33 +32,28 @@ public class Factions extends EntityCollection<Faction>
}
@Override
public Type getMapType()
{
return new TypeToken<Map<String, Faction>>(){}.getType();
public Type getMapType() {
return new TypeToken<Map<String, Faction>>() {
}.getType();
}
@Override
public boolean loadFromDisc()
{
if ( ! super.loadFromDisc()) return false;
public boolean loadFromDisc() {
if (!super.loadFromDisc()) return false;
// Make sure the default neutral faction exists
if ( ! this.exists("0"))
{
if (!this.exists("0")) {
Faction faction = this.create("0");
faction.setTag(ChatColor.DARK_GREEN+"Wilderness");
faction.setTag(ChatColor.DARK_GREEN + "Wilderness");
faction.setDescription("");
}
// Make sure the safe zone faction exists
if ( ! this.exists("-1"))
{
if (!this.exists("-1")) {
Faction faction = this.create("-1");
faction.setTag("SafeZone");
faction.setDescription("Free from PVP and monsters");
}
else
{
} else {
// if SafeZone has old pre-1.6.0 name, rename it to remove troublesome " "
Faction faction = this.getSafeZone();
if (faction.getTag().contains(" "))
@ -67,14 +61,11 @@ public class Factions extends EntityCollection<Faction>
}
// Make sure the war zone faction exists
if ( ! this.exists("-2"))
{
if (!this.exists("-2")) {
Faction faction = this.create("-2");
faction.setTag("WarZone");
faction.setDescription("Not the safest place to be");
}
else
{
} else {
// if WarZone has old pre-1.6.0 name, rename it to remove troublesome " "
Faction faction = this.getWarZone();
if (faction.getTag().contains(" "))
@ -82,8 +73,7 @@ public class Factions extends EntityCollection<Faction>
}
// populate all faction player lists
for (Faction faction : i.get())
{
for (Faction faction : i.get()) {
faction.refreshFPlayers();
}
@ -96,11 +86,9 @@ public class Factions extends EntityCollection<Faction>
//----------------------------------------------//
@Override
public Faction get(String id)
{
if ( ! this.exists(id))
{
p.log(Level.WARNING, "Non existing factionId "+id+" requested! Issuing cleaning!");
public Faction get(String id) {
if (!this.exists(id)) {
p.log(Level.WARNING, "Non existing factionId " + id + " requested! Issuing cleaning!");
Board.clean();
FPlayers.i.clean();
}
@ -108,18 +96,15 @@ public class Factions extends EntityCollection<Faction>
return super.get(id);
}
public Faction getNone()
{
public Faction getNone() {
return this.get("0");
}
public Faction getSafeZone()
{
public Faction getSafeZone() {
return this.get("-1");
}
public Faction getWarZone()
{
public Faction getWarZone() {
return this.get("-2");
}
@ -128,24 +113,19 @@ public class Factions extends EntityCollection<Faction>
// Faction tag
//----------------------------------------------//
public static ArrayList<String> validateTag(String str)
{
public static ArrayList<String> validateTag(String str) {
ArrayList<String> errors = new ArrayList<String>();
if(MiscUtil.getComparisonString(str).length() < Conf.factionTagLengthMin)
{
if (MiscUtil.getComparisonString(str).length() < Conf.factionTagLengthMin) {
errors.add(P.p.txt.parse("<i>The faction tag can't be shorter than <h>%s<i> chars.", Conf.factionTagLengthMin));
}
if(str.length() > Conf.factionTagLengthMax)
{
if (str.length() > Conf.factionTagLengthMax) {
errors.add(P.p.txt.parse("<i>The faction tag can't be longer than <h>%s<i> chars.", Conf.factionTagLengthMax));
}
for (char c : str.toCharArray())
{
if ( ! MiscUtil.substanceChars.contains(String.valueOf(c)))
{
for (char c : str.toCharArray()) {
if (!MiscUtil.substanceChars.contains(String.valueOf(c))) {
errors.add(P.p.txt.parse("<i>Faction tag must be alphanumeric. \"<h>%s<i>\" is not allowed.", c));
}
}
@ -153,26 +133,21 @@ public class Factions extends EntityCollection<Faction>
return errors;
}
public Faction getByTag(String str)
{
public Faction getByTag(String str) {
String compStr = MiscUtil.getComparisonString(str);
for (Faction faction : this.get())
{
if (faction.getComparisonTag().equals(compStr))
{
for (Faction faction : this.get()) {
if (faction.getComparisonTag().equals(compStr)) {
return faction;
}
}
return null;
}
public Faction getBestTagMatch(String searchFor)
{
public Faction getBestTagMatch(String searchFor) {
Map<String, Faction> tag2faction = new HashMap<String, Faction>();
// TODO: Slow index building
for (Faction faction : this.get())
{
for (Faction faction : this.get()) {
tag2faction.put(ChatColor.stripColor(faction.getTag()), faction);
}
@ -181,8 +156,7 @@ public class Factions extends EntityCollection<Faction>
return tag2faction.get(tag);
}
public boolean isTagTaken(String str)
{
public boolean isTagTaken(String str) {
return this.getByTag(str) != null;
}

View File

@ -1,34 +1,10 @@
package com.massivecraft.factions;
import java.lang.reflect.Modifier;
import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.bukkit.block.Block;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.Location;
import org.bukkit.Material;
import com.massivecraft.factions.cmd.CmdAutoHelp;
import com.massivecraft.factions.cmd.FCmdRoot;
import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.integration.EssentialsFeatures;
import com.massivecraft.factions.integration.LWCFeatures;
import com.massivecraft.factions.integration.SpoutFeatures;
import com.massivecraft.factions.integration.Worldguard;
import com.massivecraft.factions.integration.*;
import com.massivecraft.factions.integration.capi.CapiFeatures;
import com.massivecraft.factions.listeners.FactionsBlockListener;
import com.massivecraft.factions.listeners.FactionsChatListener;
import com.massivecraft.factions.listeners.FactionsEntityListener;
import com.massivecraft.factions.listeners.FactionsExploitListener;
import com.massivecraft.factions.listeners.FactionsPlayerListener;
import com.massivecraft.factions.listeners.FactionsServerListener;
import com.massivecraft.factions.listeners.*;
import com.massivecraft.factions.struct.ChatMode;
import com.massivecraft.factions.util.AutoLeaveTask;
import com.massivecraft.factions.util.LazyLocation;
@ -36,14 +12,26 @@ import com.massivecraft.factions.util.MapFLocToStringSetTypeAdapter;
import com.massivecraft.factions.util.MyLocationTypeAdapter;
import com.massivecraft.factions.zcore.MPlugin;
import com.massivecraft.factions.zcore.util.TextUtil;
import java.util.logging.Level;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.craftbukkit.libs.com.google.gson.GsonBuilder;
import org.bukkit.craftbukkit.libs.com.google.gson.reflect.TypeToken;
import org.bukkit.entity.Player;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import java.lang.reflect.Modifier;
import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
public class P extends MPlugin
{
public class P extends MPlugin {
// Our single plugin instance
public static P p;
@ -57,16 +45,23 @@ public class P extends MPlugin
// Persistance related
private boolean locked = false;
public boolean getLocked() {return this.locked;}
public void setLocked(boolean val) {this.locked = val; this.setAutoSave(val);}
public boolean getLocked() {
return this.locked;
}
public void setLocked(boolean val) {
this.locked = val;
this.setAutoSave(val);
}
private Integer AutoLeaveTask = null;
// Commands
public FCmdRoot cmdBase;
public CmdAutoHelp cmdAutoHelp;
public P()
{
public P() {
p = this;
this.playerListener = new FactionsPlayerListener(this);
this.chatListener = new FactionsChatListener(this);
@ -78,21 +73,17 @@ public class P extends MPlugin
@Override
public void onEnable()
{
public void onEnable() {
// bit of (apparently absolutely necessary) idiot-proofing for CB version support due to changed GSON lib package name
try
{
try {
Class.forName("org.bukkit.craftbukkit.libs.com.google.gson.reflect.TypeToken");
}
catch (ClassNotFoundException ex)
{
} catch (ClassNotFoundException ex) {
this.log(Level.SEVERE, "GSON lib not found. Your CraftBukkit build is too old (< 1.3.2) or otherwise not compatible.");
this.suicide();
return;
}
if ( ! preEnable()) return;
if (!preEnable()) return;
this.loadSuccessful = false;
// Load Conf from disk
@ -112,8 +103,7 @@ public class P extends MPlugin
CapiFeatures.setup();
LWCFeatures.setup();
if(Conf.worldGuardChecking || Conf.worldGuardBuildPriority)
{
if (Conf.worldGuardChecking || Conf.worldGuardBuildPriority) {
Worldguard.init(this);
}
@ -136,9 +126,9 @@ public class P extends MPlugin
}
@Override
public GsonBuilder getGsonBuilder()
{
Type mapFLocToStringSetType = new TypeToken<Map<FLocation, Set<String>>>(){}.getType();
public GsonBuilder getGsonBuilder() {
Type mapFLocToStringSetType = new TypeToken<Map<FLocation, Set<String>>>() {
}.getType();
return new GsonBuilder()
.setPrettyPrinting()
@ -149,62 +139,53 @@ public class P extends MPlugin
}
@Override
public void onDisable()
{
public void onDisable() {
// only save data if plugin actually completely loaded successfully
if (this.loadSuccessful)
{
if (this.loadSuccessful) {
Board.save();
Conf.save();
}
EssentialsFeatures.unhookChat();
if (AutoLeaveTask != null)
{
if (AutoLeaveTask != null) {
this.getServer().getScheduler().cancelTask(AutoLeaveTask);
AutoLeaveTask = null;
}
super.onDisable();
}
public void startAutoLeaveTask(boolean restartIfRunning)
{
if (AutoLeaveTask != null)
{
if ( ! restartIfRunning) return;
public void startAutoLeaveTask(boolean restartIfRunning) {
if (AutoLeaveTask != null) {
if (!restartIfRunning) return;
this.getServer().getScheduler().cancelTask(AutoLeaveTask);
}
if (Conf.autoLeaveRoutineRunsEveryXMinutes > 0.0)
{
long ticks = (long)(20 * 60 * Conf.autoLeaveRoutineRunsEveryXMinutes);
if (Conf.autoLeaveRoutineRunsEveryXMinutes > 0.0) {
long ticks = (long) (20 * 60 * Conf.autoLeaveRoutineRunsEveryXMinutes);
AutoLeaveTask = getServer().getScheduler().scheduleSyncRepeatingTask(this, new AutoLeaveTask(), ticks, ticks);
}
}
@Override
public void postAutoSave()
{
public void postAutoSave() {
Board.save();
Conf.save();
}
@Override
public boolean logPlayerCommands()
{
public boolean logPlayerCommands() {
return Conf.logPlayerCommands;
}
@Override
public boolean handleCommand(CommandSender sender, String commandString, boolean testOnly)
{
if (sender instanceof Player && FactionsPlayerListener.preventCommand(commandString, (Player)sender)) return true;
public boolean handleCommand(CommandSender sender, String commandString, boolean testOnly) {
if (sender instanceof Player && FactionsPlayerListener.preventCommand(commandString, (Player) sender))
return true;
return super.handleCommand(sender, commandString, testOnly);
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] split)
{
public boolean onCommand(CommandSender sender, Command command, String label, String[] split) {
// if bare command at this point, it has already been handled by MPlugin's command listeners
if (split == null || split.length == 0) return true;
@ -214,40 +195,35 @@ public class P extends MPlugin
}
// -------------------------------------------- //
// Functions for other plugins to hook into
// -------------------------------------------- //
// This value will be updated whenever new hooks are added
public int hookSupportVersion()
{
public int hookSupportVersion() {
return 3;
}
// If another plugin is handling insertion of chat tags, this should be used to notify Factions
public void handleFactionTagExternally(boolean notByFactions)
{
public void handleFactionTagExternally(boolean notByFactions) {
Conf.chatTagHandledByAnotherPlugin = notByFactions;
}
// Simply put, should this chat event be left for Factions to handle? For now, that means players with Faction Chat
// enabled or use of the Factions f command without a slash; combination of isPlayerFactionChatting() and isFactionsCommand()
public boolean shouldLetFactionsHandleThisChat(AsyncPlayerChatEvent event)
{
public boolean shouldLetFactionsHandleThisChat(AsyncPlayerChatEvent event) {
if (event == null) return false;
return (isPlayerFactionChatting(event.getPlayer()) || isFactionsCommand(event.getMessage()));
}
// Does player have Faction Chat enabled? If so, chat plugins should preferably not do channels,
// local chat, or anything else which targets individual recipients, so Faction Chat can be done
public boolean isPlayerFactionChatting(Player player)
{
public boolean isPlayerFactionChatting(Player player) {
if (player == null) return false;
FPlayer me = FPlayers.i.get(player);
if (me == null)return false;
if (me == null) return false;
return me.getChatMode().isAtLeast(ChatMode.ALLIANCE);
}
@ -255,21 +231,18 @@ public class P extends MPlugin
// TODO: GET THIS BACK AND WORKING
public boolean isFactionsCommand(String check)
{
public boolean isFactionsCommand(String check) {
if (check == null || check.isEmpty()) return false;
return this.handleCommand(null, check, true);
}
// Get a player's faction tag (faction name), mainly for usage by chat plugins for local/channel chat
public String getPlayerFactionTag(Player player)
{
public String getPlayerFactionTag(Player player) {
return getPlayerFactionTagRelation(player, null);
}
// Same as above, but with relation (enemy/neutral/ally) coloring potentially added to the tag
public String getPlayerFactionTagRelation(Player speaker, Player listener)
{
public String getPlayerFactionTagRelation(Player speaker, Player listener) {
String tag = "~";
if (speaker == null)
@ -296,8 +269,7 @@ public class P extends MPlugin
}
// Get a player's title within their faction, mainly for usage by chat plugins for local/channel chat
public String getPlayerTitle(Player player)
{
public String getPlayerTitle(Player player) {
if (player == null)
return "";
@ -309,25 +281,20 @@ public class P extends MPlugin
}
// Get a list of all faction tags (names)
public Set<String> getFactionTags()
{
public Set<String> getFactionTags() {
Set<String> tags = new HashSet<String>();
for (Faction faction : Factions.i.get())
{
for (Faction faction : Factions.i.get()) {
tags.add(faction.getTag());
}
return tags;
}
// Get a list of all players in the specified faction
public Set<String> getPlayersInFaction(String factionTag)
{
public Set<String> getPlayersInFaction(String factionTag) {
Set<String> players = new HashSet<String>();
Faction faction = Factions.i.getByTag(factionTag);
if (faction != null)
{
for (FPlayer fplayer : faction.getFPlayers())
{
if (faction != null) {
for (FPlayer fplayer : faction.getFPlayers()) {
players.add(fplayer.getName());
}
}
@ -335,14 +302,11 @@ public class P extends MPlugin
}
// Get a list of all online players in the specified faction
public Set<String> getOnlinePlayersInFaction(String factionTag)
{
public Set<String> getOnlinePlayersInFaction(String factionTag) {
Set<String> players = new HashSet<String>();
Faction faction = Factions.i.getByTag(factionTag);
if (faction != null)
{
for (FPlayer fplayer : faction.getFPlayersWhereOnline(true))
{
if (faction != null) {
for (FPlayer fplayer : faction.getFPlayersWhereOnline(true)) {
players.add(fplayer.getName());
}
}
@ -350,20 +314,17 @@ public class P extends MPlugin
}
// check if player is allowed to build/destroy in a particular location
public boolean isPlayerAllowedToBuildHere(Player player, Location location)
{
public boolean isPlayerAllowedToBuildHere(Player player, Location location) {
return FactionsBlockListener.playerCanBuildDestroyBlock(player, location, "", true);
}
// check if player is allowed to interact with the specified block (doors/chests/whatever)
public boolean isPlayerAllowedToInteractWith(Player player, Block block)
{
public boolean isPlayerAllowedToInteractWith(Player player, Block block) {
return FactionsPlayerListener.canPlayerUseBlock(player, block, true);
}
// check if player is allowed to use a specified item (flint&steel, buckets, etc) in a particular location
public boolean isPlayerAllowedToUseThisHere(Player player, Location location, Material material)
{
public boolean isPlayerAllowedToUseThisHere(Player player, Location location, Material material) {
return FactionsPlayerListener.playerCanUseItemHere(player, location, material, true);
}
}

View File

@ -1,18 +1,15 @@
package com.massivecraft.factions.cmd;
import org.bukkit.Bukkit;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.event.FPlayerJoinEvent;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
import org.bukkit.Bukkit;
public class CmdAdmin extends FCommand
{
public CmdAdmin()
{
public class CmdAdmin extends FCommand {
public CmdAdmin() {
super();
this.aliases.add("admin");
@ -29,36 +26,31 @@ public class CmdAdmin extends FCommand
}
@Override
public void perform()
{
public void perform() {
FPlayer fyou = this.argAsBestFPlayerMatch(0);
if (fyou == null) return;
boolean permAny = Permission.ADMIN_ANY.has(sender, false);
Faction targetFaction = fyou.getFaction();
if (targetFaction != myFaction && !permAny)
{
if (targetFaction != myFaction && !permAny) {
msg("%s<i> is not a member in your faction.", fyou.describeTo(fme, true));
return;
}
if (fme != null && fme.getRole() != Role.ADMIN && !permAny)
{
if (fme != null && fme.getRole() != Role.ADMIN && !permAny) {
msg("<b>You are not the faction admin.");
return;
}
if (fyou == fme && !permAny)
{
if (fyou == fme && !permAny) {
msg("<b>The target player musn't be yourself.");
return;
}
// only perform a FPlayerJoinEvent when newLeader isn't actually in the faction
if (fyou.getFaction() != targetFaction)
{
FPlayerJoinEvent event = new FPlayerJoinEvent(FPlayers.i.get(me),targetFaction,FPlayerJoinEvent.PlayerJoinReason.LEADER);
if (fyou.getFaction() != targetFaction) {
FPlayerJoinEvent event = new FPlayerJoinEvent(FPlayers.i.get(me), targetFaction, FPlayerJoinEvent.PlayerJoinReason.LEADER);
Bukkit.getServer().getPluginManager().callEvent(event);
if (event.isCancelled()) return;
}
@ -66,8 +58,7 @@ public class CmdAdmin extends FCommand
FPlayer admin = targetFaction.getFPlayerAdmin();
// if target player is currently admin, demote and replace him
if (fyou == admin)
{
if (fyou == admin) {
targetFaction.promoteNewLeader();
msg("<i>You have demoted %s<i> from the position of faction admin.", fyou.describeTo(fme, true));
fyou.msg("<i>You have been demoted from the position of faction admin by %s<i>.", senderIsConsole ? "a server admin" : fme.describeTo(fyou, true));
@ -81,8 +72,7 @@ public class CmdAdmin extends FCommand
msg("<i>You have promoted %s<i> to the position of faction admin.", fyou.describeTo(fme, true));
// Inform all players
for (FPlayer fplayer : FPlayers.i.getOnline())
{
for (FPlayer fplayer : FPlayers.i.getOnline()) {
fplayer.msg("%s<i> gave %s<i> the leadership of %s<i>.", senderIsConsole ? "A server admin" : fme.describeTo(fplayer, true), fyou.describeTo(fplayer), targetFaction.describeTo(fplayer));
}
}

View File

@ -4,10 +4,8 @@ import com.massivecraft.factions.Faction;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
public class CmdAutoClaim extends FCommand
{
public CmdAutoClaim()
{
public class CmdAutoClaim extends FCommand {
public CmdAutoClaim() {
super();
this.aliases.add("autoclaim");
@ -24,18 +22,15 @@ public class CmdAutoClaim extends FCommand
}
@Override
public void perform()
{
public void perform() {
Faction forFaction = this.argAsFaction(0, myFaction);
if (forFaction == null || forFaction == fme.getAutoClaimFor())
{
if (forFaction == null || forFaction == fme.getAutoClaimFor()) {
fme.setAutoClaimFor(null);
msg("<i>Auto-claiming of land disabled.");
return;
}
if (! fme.canClaimForFaction(forFaction))
{
if (!fme.canClaimForFaction(forFaction)) {
if (myFaction == forFaction)
msg("<b>You must be <h>%s<b> to claim land.", Role.MODERATOR.toString());
else

View File

@ -1,15 +1,13 @@
package com.massivecraft.factions.cmd;
import java.util.ArrayList;
import com.massivecraft.factions.P;
import com.massivecraft.factions.zcore.CommandVisibility;
import com.massivecraft.factions.zcore.MCommand;
public class CmdAutoHelp extends MCommand<P>
{
public CmdAutoHelp()
{
import java.util.ArrayList;
public class CmdAutoHelp extends MCommand<P> {
public CmdAutoHelp() {
super(P.p);
this.aliases.add("?");
this.aliases.add("h");
@ -17,32 +15,29 @@ public class CmdAutoHelp extends MCommand<P>
this.setHelpShort("");
this.optionalArgs.put("page","1");
this.optionalArgs.put("page", "1");
}
@Override
public void perform()
{
public void perform() {
if (this.commandChain.size() == 0) return;
MCommand<?> pcmd = this.commandChain.get(this.commandChain.size()-1);
MCommand<?> pcmd = this.commandChain.get(this.commandChain.size() - 1);
ArrayList<String> lines = new ArrayList<String>();
lines.addAll(pcmd.helpLong);
for(MCommand<?> scmd : pcmd.subCommands)
{
for (MCommand<?> scmd : pcmd.subCommands) {
if
(
scmd.visibility == CommandVisibility.VISIBLE
||
(scmd.visibility == CommandVisibility.SECRET && scmd.validSenderPermissions(sender, false))
)
{
) {
lines.add(scmd.getUseageTemplate(this.commandChain, true));
}
}
sendMessage(p.txt.getPage(lines, this.argAsInt(0, 1), "Help for command \""+pcmd.aliases.get(0)+"\""));
sendMessage(p.txt.getPage(lines, this.argAsInt(0, 1), "Help for command \"" + pcmd.aliases.get(0) + "\""));
}
}

View File

@ -3,10 +3,8 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.struct.Permission;
public class CmdBoom extends FCommand
{
public CmdBoom()
{
public class CmdBoom extends FCommand {
public CmdBoom() {
super();
this.aliases.add("noboom");
@ -23,22 +21,20 @@ public class CmdBoom extends FCommand
}
@Override
public void perform()
{
if ( ! myFaction.isPeaceful())
{
public void perform() {
if (!myFaction.isPeaceful()) {
fme.msg("<b>This command is only usable by factions which are specially designated as peaceful.");
return;
}
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if ( ! payForCommand(Conf.econCostNoBoom, "to toggle explosions", "for toggling explosions")) return;
if (!payForCommand(Conf.econCostNoBoom, "to toggle explosions", "for toggling explosions")) return;
myFaction.setPeacefulExplosionsEnabled(this.argAsBool(0, ! myFaction.getPeacefulExplosionsEnabled()));
myFaction.setPeacefulExplosionsEnabled(this.argAsBool(0, !myFaction.getPeacefulExplosionsEnabled()));
String enabled = myFaction.noExplosionsInTerritory() ? "disabled" : "enabled";
// Inform
myFaction.msg("%s<i> has "+enabled+" explosions in your faction's territory.", fme.describeTo(myFaction));
myFaction.msg("%s<i> has " + enabled + " explosions in your faction's territory.", fme.describeTo(myFaction));
}
}

View File

@ -3,10 +3,8 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.P;
import com.massivecraft.factions.struct.Permission;
public class CmdBypass extends FCommand
{
public CmdBypass()
{
public class CmdBypass extends FCommand {
public CmdBypass() {
super();
this.aliases.add("bypass");
@ -23,18 +21,14 @@ public class CmdBypass extends FCommand
}
@Override
public void perform()
{
fme.setIsAdminBypassing(this.argAsBool(0, ! fme.isAdminBypassing()));
public void perform() {
fme.setIsAdminBypassing(this.argAsBool(0, !fme.isAdminBypassing()));
// TODO: Move this to a transient field in the model??
if ( fme.isAdminBypassing())
{
if (fme.isAdminBypassing()) {
fme.msg("<i>You have enabled admin bypass mode. You will be able to build or destroy anywhere.");
P.p.log(fme.getName() + " has ENABLED admin bypass mode.");
}
else
{
} else {
fme.msg("<i>You have disabled admin bypass mode.");
P.p.log(fme.getName() + " DISABLED admin bypass mode.");
}

View File

@ -4,11 +4,9 @@ import com.massivecraft.factions.Conf;
import com.massivecraft.factions.struct.ChatMode;
import com.massivecraft.factions.struct.Permission;
public class CmdChat extends FCommand
{
public class CmdChat extends FCommand {
public CmdChat()
{
public CmdChat() {
super();
this.aliases.add("c");
this.aliases.add("chat");
@ -26,10 +24,8 @@ public class CmdChat extends FCommand
}
@Override
public void perform()
{
if ( ! Conf.factionOnlyChat )
{
public void perform() {
if (!Conf.factionOnlyChat) {
msg("<b>The built in chat chat channels are disabled on this server.");
return;
}
@ -37,23 +33,15 @@ public class CmdChat extends FCommand
String modeString = this.argAsString(0);
ChatMode modeTarget = fme.getChatMode().getNext();
if (modeString != null)
{
if (modeString != null) {
modeString.toLowerCase();
if(modeString.startsWith("p"))
{
if (modeString.startsWith("p")) {
modeTarget = ChatMode.PUBLIC;
}
else if (modeString.startsWith("a"))
{
} else if (modeString.startsWith("a")) {
modeTarget = ChatMode.ALLIANCE;
}
else if(modeString.startsWith("f"))
{
} else if (modeString.startsWith("f")) {
modeTarget = ChatMode.FACTION;
}
else
{
} else {
msg("<b>Unrecognised chat mode. <i>Please enter either 'a','f' or 'p'");
return;
}
@ -61,16 +49,11 @@ public class CmdChat extends FCommand
fme.setChatMode(modeTarget);
if(fme.getChatMode() == ChatMode.PUBLIC)
{
if (fme.getChatMode() == ChatMode.PUBLIC) {
msg("<i>Public chat mode.");
}
else if (fme.getChatMode() == ChatMode.ALLIANCE )
{
} else if (fme.getChatMode() == ChatMode.ALLIANCE) {
msg("<i>Alliance only chat mode.");
}
else
{
} else {
msg("<i>Faction only chat mode.");
}
}

View File

@ -3,10 +3,8 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.P;
import com.massivecraft.factions.struct.Permission;
public class CmdChatSpy extends FCommand
{
public CmdChatSpy()
{
public class CmdChatSpy extends FCommand {
public CmdChatSpy() {
super();
this.aliases.add("chatspy");
@ -22,17 +20,13 @@ public class CmdChatSpy extends FCommand
}
@Override
public void perform()
{
fme.setSpyingChat(this.argAsBool(0, ! fme.isSpyingChat()));
public void perform() {
fme.setSpyingChat(this.argAsBool(0, !fme.isSpyingChat()));
if ( fme.isSpyingChat())
{
if (fme.isSpyingChat()) {
fme.msg("<i>You have enabled chat spying mode.");
P.p.log(fme.getName() + " has ENABLED chat spying mode.");
}
else
{
} else {
fme.msg("<i>You have disabled chat spying mode.");
P.p.log(fme.getName() + " DISABLED chat spying mode.");
}

View File

@ -1,17 +1,15 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.util.SpiralTask;
public class CmdClaim extends FCommand
{
public class CmdClaim extends FCommand {
public CmdClaim()
{
public CmdClaim() {
super();
this.aliases.add("claim");
@ -29,45 +27,36 @@ public class CmdClaim extends FCommand
}
@Override
public void perform()
{
public void perform() {
// Read and validate input
final Faction forFaction = this.argAsFaction(0, myFaction);
int radius = this.argAsInt(1, 1);
if (radius < 1)
{
if (radius < 1) {
msg("<b>If you specify a radius, it must be at least 1.");
return;
}
if (radius < 2)
{
if (radius < 2) {
// single chunk
fme.attemptClaim(forFaction, me.getLocation(), true);
}
else
{
} else {
// radius claim
if (! Permission.CLAIM_RADIUS.has(sender, false))
{
if (!Permission.CLAIM_RADIUS.has(sender, false)) {
msg("<b>You do not have permission to claim in a radius.");
return;
}
new SpiralTask(new FLocation(me), radius)
{
new SpiralTask(new FLocation(me), radius) {
private int failCount = 0;
private final int limit = Conf.radiusClaimFailureLimit - 1;
@Override
public boolean work()
{
public boolean work() {
boolean success = fme.attemptClaim(forFaction, this.currentLocation(), true);
if (success)
failCount = 0;
else if ( ! success && failCount++ >= limit)
{
else if (!success && failCount++ >= limit) {
this.stop();
return false;
}

View File

@ -1,26 +1,23 @@
package com.massivecraft.factions.cmd;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Set;
import java.util.HashMap;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.P;
import com.massivecraft.factions.integration.SpoutFeatures;
import com.massivecraft.factions.struct.Permission;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
public class CmdConfig extends FCommand
{
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Set;
public class CmdConfig extends FCommand {
private static HashMap<String, String> properFieldNames = new HashMap<String, String>();
public CmdConfig()
{
public CmdConfig() {
super();
this.aliases.add("config");
@ -38,28 +35,23 @@ public class CmdConfig extends FCommand
}
@Override
public void perform()
{
public void perform() {
// store a lookup map of lowercase field names paired with proper capitalization field names
// that way, if the person using this command messes up the capitalization, we can fix that
if (properFieldNames.isEmpty())
{
if (properFieldNames.isEmpty()) {
Field[] fields = Conf.class.getDeclaredFields();
for(int i = 0; i < fields.length; i++)
{
for (int i = 0; i < fields.length; i++) {
properFieldNames.put(fields[i].getName().toLowerCase(), fields[i].getName());
}
}
String field = this.argAsString(0).toLowerCase();
if (field.startsWith("\"") && field.endsWith("\""))
{
if (field.startsWith("\"") && field.endsWith("\"")) {
field = field.substring(1, field.length() - 1);
}
String fieldName = properFieldNames.get(field);
if (fieldName == null || fieldName.isEmpty())
{
if (fieldName == null || fieldName.isEmpty()) {
msg("<b>No configuration setting \"<h>%s<b>\" exists.", field);
return;
}
@ -67,229 +59,180 @@ public class CmdConfig extends FCommand
String success = "";
String value = args.get(1);
for(int i = 2; i < args.size(); i++)
{
for (int i = 2; i < args.size(); i++) {
value += ' ' + args.get(i);
}
try
{
try {
Field target = Conf.class.getField(fieldName);
// boolean
if (target.getType() == boolean.class)
{
if (target.getType() == boolean.class) {
boolean targetValue = this.strAsBool(value);
target.setBoolean(null, targetValue);
if (targetValue)
{
success = "\""+fieldName+"\" option set to true (enabled).";
}
else
{
success = "\""+fieldName+"\" option set to false (disabled).";
if (targetValue) {
success = "\"" + fieldName + "\" option set to true (enabled).";
} else {
success = "\"" + fieldName + "\" option set to false (disabled).";
}
}
// int
else if (target.getType() == int.class)
{
try
{
else if (target.getType() == int.class) {
try {
int intVal = Integer.parseInt(value);
target.setInt(null, intVal);
success = "\""+fieldName+"\" option set to "+intVal+".";
}
catch(NumberFormatException ex)
{
sendMessage("Cannot set \""+fieldName+"\": integer (whole number) value required.");
success = "\"" + fieldName + "\" option set to " + intVal + ".";
} catch (NumberFormatException ex) {
sendMessage("Cannot set \"" + fieldName + "\": integer (whole number) value required.");
return;
}
}
// long
else if (target.getType() == long.class)
{
try
{
else if (target.getType() == long.class) {
try {
long longVal = Long.parseLong(value);
target.setLong(null, longVal);
success = "\""+fieldName+"\" option set to "+longVal+".";
}
catch(NumberFormatException ex)
{
sendMessage("Cannot set \""+fieldName+"\": long integer (whole number) value required.");
success = "\"" + fieldName + "\" option set to " + longVal + ".";
} catch (NumberFormatException ex) {
sendMessage("Cannot set \"" + fieldName + "\": long integer (whole number) value required.");
return;
}
}
// double
else if (target.getType() == double.class)
{
try
{
else if (target.getType() == double.class) {
try {
double doubleVal = Double.parseDouble(value);
target.setDouble(null, doubleVal);
success = "\""+fieldName+"\" option set to "+doubleVal+".";
}
catch(NumberFormatException ex)
{
sendMessage("Cannot set \""+fieldName+"\": double (numeric) value required.");
success = "\"" + fieldName + "\" option set to " + doubleVal + ".";
} catch (NumberFormatException ex) {
sendMessage("Cannot set \"" + fieldName + "\": double (numeric) value required.");
return;
}
}
// float
else if (target.getType() == float.class)
{
try
{
else if (target.getType() == float.class) {
try {
float floatVal = Float.parseFloat(value);
target.setFloat(null, floatVal);
success = "\""+fieldName+"\" option set to "+floatVal+".";
}
catch(NumberFormatException ex)
{
sendMessage("Cannot set \""+fieldName+"\": float (numeric) value required.");
success = "\"" + fieldName + "\" option set to " + floatVal + ".";
} catch (NumberFormatException ex) {
sendMessage("Cannot set \"" + fieldName + "\": float (numeric) value required.");
return;
}
}
// String
else if (target.getType() == String.class)
{
else if (target.getType() == String.class) {
target.set(null, value);
success = "\""+fieldName+"\" option set to \""+value+"\".";
success = "\"" + fieldName + "\" option set to \"" + value + "\".";
}
// ChatColor
else if (target.getType() == ChatColor.class)
{
else if (target.getType() == ChatColor.class) {
ChatColor newColor = null;
try
{
try {
newColor = ChatColor.valueOf(value.toUpperCase());
}
catch (IllegalArgumentException ex)
{
} catch (IllegalArgumentException ex) {
}
if (newColor == null)
{
sendMessage("Cannot set \""+fieldName+"\": \""+value.toUpperCase()+"\" is not a valid color.");
if (newColor == null) {
sendMessage("Cannot set \"" + fieldName + "\": \"" + value.toUpperCase() + "\" is not a valid color.");
return;
}
target.set(null, newColor);
success = "\""+fieldName+"\" color option set to \""+value.toUpperCase()+"\".";
success = "\"" + fieldName + "\" color option set to \"" + value.toUpperCase() + "\".";
}
// Set<?> or other parameterized collection
else if (target.getGenericType() instanceof ParameterizedType)
{
ParameterizedType targSet = (ParameterizedType)target.getGenericType();
else if (target.getGenericType() instanceof ParameterizedType) {
ParameterizedType targSet = (ParameterizedType) target.getGenericType();
Type innerType = targSet.getActualTypeArguments()[0];
// not a Set, somehow, and that should be the only collection we're using in Conf.java
if (targSet.getRawType() != Set.class)
{
sendMessage("\""+fieldName+"\" is not a data collection type which can be modified with this command.");
if (targSet.getRawType() != Set.class) {
sendMessage("\"" + fieldName + "\" is not a data collection type which can be modified with this command.");
return;
}
// Set<Material>
else if (innerType == Material.class)
{
else if (innerType == Material.class) {
Material newMat = null;
try
{
try {
newMat = Material.valueOf(value.toUpperCase());
}
catch (IllegalArgumentException ex)
{
} catch (IllegalArgumentException ex) {
}
if (newMat == null)
{
sendMessage("Cannot change \""+fieldName+"\" set: \""+value.toUpperCase()+"\" is not a valid material.");
if (newMat == null) {
sendMessage("Cannot change \"" + fieldName + "\" set: \"" + value.toUpperCase() + "\" is not a valid material.");
return;
}
@SuppressWarnings("unchecked")
Set<Material> matSet = (Set<Material>)target.get(null);
Set<Material> matSet = (Set<Material>) target.get(null);
// Material already present, so remove it
if (matSet.contains(newMat))
{
if (matSet.contains(newMat)) {
matSet.remove(newMat);
target.set(null, matSet);
success = "\""+fieldName+"\" set: Material \""+value.toUpperCase()+"\" removed.";
success = "\"" + fieldName + "\" set: Material \"" + value.toUpperCase() + "\" removed.";
}
// Material not present yet, add it
else
{
else {
matSet.add(newMat);
target.set(null, matSet);
success = "\""+fieldName+"\" set: Material \""+value.toUpperCase()+"\" added.";
success = "\"" + fieldName + "\" set: Material \"" + value.toUpperCase() + "\" added.";
}
}
// Set<String>
else if (innerType == String.class)
{
else if (innerType == String.class) {
@SuppressWarnings("unchecked")
Set<String> stringSet = (Set<String>)target.get(null);
Set<String> stringSet = (Set<String>) target.get(null);
// String already present, so remove it
if (stringSet.contains(value))
{
if (stringSet.contains(value)) {
stringSet.remove(value);
target.set(null, stringSet);
success = "\""+fieldName+"\" set: \""+value+"\" removed.";
success = "\"" + fieldName + "\" set: \"" + value + "\" removed.";
}
// String not present yet, add it
else
{
else {
stringSet.add(value);
target.set(null, stringSet);
success = "\""+fieldName+"\" set: \""+value+"\" added.";
success = "\"" + fieldName + "\" set: \"" + value + "\" added.";
}
}
// Set of unknown type
else
{
sendMessage("\""+fieldName+"\" is not a data type set which can be modified with this command.");
else {
sendMessage("\"" + fieldName + "\" is not a data type set which can be modified with this command.");
return;
}
}
// unknown type
else
{
sendMessage("\""+fieldName+"\" is not a data type which can be modified with this command.");
else {
sendMessage("\"" + fieldName + "\" is not a data type which can be modified with this command.");
return;
}
}
catch (NoSuchFieldException ex)
{
sendMessage("Configuration setting \""+fieldName+"\" couldn't be matched, though it should be... please report this error.");
} catch (NoSuchFieldException ex) {
sendMessage("Configuration setting \"" + fieldName + "\" couldn't be matched, though it should be... please report this error.");
return;
}
catch (IllegalAccessException ex)
{
sendMessage("Error setting configuration setting \""+fieldName+"\" to \""+value+"\".");
} catch (IllegalAccessException ex) {
sendMessage("Error setting configuration setting \"" + fieldName + "\" to \"" + value + "\".");
return;
}
if (!success.isEmpty())
{
if (sender instanceof Player)
{
if (!success.isEmpty()) {
if (sender instanceof Player) {
sendMessage(success);
P.p.log(success + " Command was run by "+fme.getName()+".");
}
else // using P.p.log() instead of sendMessage if run from server console so that "[Factions v#.#.#]" is prepended in server log
P.p.log(success + " Command was run by " + fme.getName() + ".");
} else // using P.p.log() instead of sendMessage if run from server console so that "[Factions v#.#.#]" is prepended in server log
P.p.log(success);
}
// save change to disk

View File

@ -1,25 +1,17 @@
package com.massivecraft.factions.cmd;
import java.util.ArrayList;
import org.bukkit.Bukkit;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.P;
import com.massivecraft.factions.*;
import com.massivecraft.factions.event.FPlayerJoinEvent;
import com.massivecraft.factions.event.FactionCreateEvent;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
import org.bukkit.Bukkit;
import java.util.ArrayList;
public class CmdCreate extends FCommand
{
public CmdCreate()
{
public class CmdCreate extends FCommand {
public CmdCreate() {
super();
this.aliases.add("create");
@ -36,45 +28,40 @@ public class CmdCreate extends FCommand
}
@Override
public void perform()
{
public void perform() {
String tag = this.argAsString(0);
if (fme.hasFaction())
{
if (fme.hasFaction()) {
msg("<b>You must leave your current faction first.");
return;
}
if (Factions.i.isTagTaken(tag))
{
if (Factions.i.isTagTaken(tag)) {
msg("<b>That tag is already in use.");
return;
}
ArrayList<String> tagValidationErrors = Factions.validateTag(tag);
if (tagValidationErrors.size() > 0)
{
if (tagValidationErrors.size() > 0) {
sendMessage(tagValidationErrors);
return;
}
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make sure they can pay
if ( ! canAffordCommand(Conf.econCostCreate, "to create a new faction")) return;
if (!canAffordCommand(Conf.econCostCreate, "to create a new faction")) return;
// trigger the faction creation event (cancellable)
FactionCreateEvent createEvent = new FactionCreateEvent(me, tag);
Bukkit.getServer().getPluginManager().callEvent(createEvent);
if(createEvent.isCancelled()) return;
if (createEvent.isCancelled()) return;
// then make 'em pay (if applicable)
if ( ! payForCommand(Conf.econCostCreate, "to create a new faction", "for creating a new faction")) return;
if (!payForCommand(Conf.econCostCreate, "to create a new faction", "for creating a new faction")) return;
Faction faction = Factions.i.create();
// TODO: Why would this even happen??? Auto increment clash??
if (faction == null)
{
if (faction == null) {
msg("<b>There was an internal error while trying to create your faction. Please try again.");
return;
}
@ -83,7 +70,7 @@ public class CmdCreate extends FCommand
faction.setTag(tag);
// trigger the faction join event for the creator
FPlayerJoinEvent joinEvent = new FPlayerJoinEvent(FPlayers.i.get(me),faction,FPlayerJoinEvent.PlayerJoinReason.CREATE);
FPlayerJoinEvent joinEvent = new FPlayerJoinEvent(FPlayers.i.get(me), faction, FPlayerJoinEvent.PlayerJoinReason.CREATE);
Bukkit.getServer().getPluginManager().callEvent(joinEvent);
// join event cannot be cancelled or you'll have an empty faction
@ -91,15 +78,14 @@ public class CmdCreate extends FCommand
fme.setRole(Role.ADMIN);
fme.setFaction(faction);
for (FPlayer follower : FPlayers.i.getOnline())
{
for (FPlayer follower : FPlayers.i.getOnline()) {
follower.msg("%s<i> created a new faction %s", fme.describeTo(follower, true), faction.getTag(follower));
}
msg("<i>You should now: %s", p.cmdBase.cmdDescription.getUseageTemplate());
if (Conf.logFactionCreate)
P.p.log(fme.getName()+" created a new faction: "+tag);
P.p.log(fme.getName() + " created a new faction: " + tag);
}
}

View File

@ -3,11 +3,9 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.struct.Permission;
public class CmdDeinvite extends FCommand
{
public class CmdDeinvite extends FCommand {
public CmdDeinvite()
{
public CmdDeinvite() {
super();
this.aliases.add("deinvite");
this.aliases.add("deinv");
@ -25,13 +23,11 @@ public class CmdDeinvite extends FCommand
}
@Override
public void perform()
{
public void perform() {
FPlayer you = this.argAsBestFPlayerMatch(0);
if (you == null) return;
if (you.getFaction() == myFaction)
{
if (you.getFaction() == myFaction) {
msg("%s<i> is already a member of %s", you.getName(), myFaction.getTag());
msg("<i>You might want to: %s", p.cmdBase.cmdKick.getUseageTemplate(false));
return;

View File

@ -6,10 +6,8 @@ import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TextUtil;
public class CmdDescription extends FCommand
{
public CmdDescription()
{
public class CmdDescription extends FCommand {
public CmdDescription() {
super();
this.aliases.add("desc");
@ -27,23 +25,21 @@ public class CmdDescription extends FCommand
}
@Override
public void perform()
{
public void perform() {
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if ( ! payForCommand(Conf.econCostDesc, "to change faction description", "for changing faction description")) return;
if (!payForCommand(Conf.econCostDesc, "to change faction description", "for changing faction description"))
return;
myFaction.setDescription(TextUtil.implode(args, " ").replaceAll("(&([a-f0-9]))", "& $2")); // since "&" color tags seem to work even through plain old FPlayer.sendMessage() for some reason, we need to break those up
if ( ! Conf.broadcastDescriptionChanges)
{
if (!Conf.broadcastDescriptionChanges) {
fme.msg("You have changed the description for <h>%s<i> to:", myFaction.describeTo(fme));
fme.sendMessage(myFaction.getDescription());
return;
}
// Broadcast the description to everyone
for (FPlayer fplayer : FPlayers.i.getOnline())
{
for (FPlayer fplayer : FPlayers.i.getOnline()) {
fplayer.msg("<i>The faction %s<i> changed their description to:", myFaction.describeTo(fplayer));
fplayer.sendMessage(myFaction.getDescription()); // players can inject "&" or "`" or "<i>" or whatever in their description; &k is particularly interesting looking
}

View File

@ -1,24 +1,17 @@
package com.massivecraft.factions.cmd;
import org.bukkit.Bukkit;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.*;
import com.massivecraft.factions.event.FPlayerLeaveEvent;
import com.massivecraft.factions.event.FactionDisbandEvent;
import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.P;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.integration.SpoutFeatures;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
import org.bukkit.Bukkit;
public class CmdDisband extends FCommand
{
public CmdDisband()
{
public class CmdDisband extends FCommand {
public CmdDisband() {
super();
this.aliases.add("disband");
@ -35,74 +28,60 @@ public class CmdDisband extends FCommand
}
@Override
public void perform()
{
public void perform() {
// The faction, default to your own.. but null if console sender.
Faction faction = this.argAsFaction(0, fme == null ? null : myFaction);
if (faction == null) return;
boolean isMyFaction = fme == null ? false : faction == myFaction;
if (isMyFaction)
{
if ( ! assertMinRole(Role.ADMIN)) return;
}
else
{
if ( ! Permission.DISBAND_ANY.has(sender, true))
{
if (isMyFaction) {
if (!assertMinRole(Role.ADMIN)) return;
} else {
if (!Permission.DISBAND_ANY.has(sender, true)) {
return;
}
}
if (! faction.isNormal())
{
if (!faction.isNormal()) {
msg("<i>You cannot disband the Wilderness, SafeZone, or WarZone.");
return;
}
if (faction.isPermanent())
{
if (faction.isPermanent()) {
msg("<i>This faction is designated as permanent, so you cannot disband it.");
return;
}
FactionDisbandEvent disbandEvent = new FactionDisbandEvent(me, faction.getId());
Bukkit.getServer().getPluginManager().callEvent(disbandEvent);
if(disbandEvent.isCancelled()) return;
if (disbandEvent.isCancelled()) return;
// Send FPlayerLeaveEvent for each player in the faction
for ( FPlayer fplayer : faction.getFPlayers() )
{
for (FPlayer fplayer : faction.getFPlayers()) {
Bukkit.getServer().getPluginManager().callEvent(new FPlayerLeaveEvent(fplayer, faction, FPlayerLeaveEvent.PlayerLeaveReason.DISBAND));
}
// Inform all players
for (FPlayer fplayer : FPlayers.i.getOnline())
{
for (FPlayer fplayer : FPlayers.i.getOnline()) {
String who = senderIsConsole ? "A server admin" : fme.describeTo(fplayer);
if (fplayer.getFaction() == faction)
{
if (fplayer.getFaction() == faction) {
fplayer.msg("<h>%s<i> disbanded your faction.", who);
}
else
{
} else {
fplayer.msg("<h>%s<i> disbanded the faction %s.", who, faction.getTag(fplayer));
}
}
if (Conf.logFactionDisband)
P.p.log("The faction "+faction.getTag()+" ("+faction.getId()+") was disbanded by "+(senderIsConsole ? "console command" : fme.getName())+".");
P.p.log("The faction " + faction.getTag() + " (" + faction.getId() + ") was disbanded by " + (senderIsConsole ? "console command" : fme.getName()) + ".");
if (Econ.shouldBeUsed() && ! senderIsConsole)
{
if (Econ.shouldBeUsed() && !senderIsConsole) {
//Give all the faction's money to the disbander
double amount = Econ.getBalance(faction.getAccountId());
Econ.transferMoney(fme, faction, fme, amount, false);
if (amount > 0.0)
{
if (amount > 0.0) {
String amountString = Econ.moneyString(amount);
msg("<i>You have been given the disbanded faction's bank, totaling %s.", amountString);
P.p.log(fme.getName() + " has been given bank holdings of "+amountString+" from disbanding "+faction.getTag()+".");
P.p.log(fme.getName() + " has been given bank holdings of " + amountString + " from disbanding " + faction.getTag() + ".");
}
}

View File

@ -1,18 +1,16 @@
package com.massivecraft.factions.cmd;
import java.util.ArrayList;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.P;
import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.struct.Permission;
import java.util.ArrayList;
public class CmdHelp extends FCommand
{
public CmdHelp()
{
public class CmdHelp extends FCommand {
public CmdHelp() {
super();
this.aliases.add("help");
this.aliases.add("h");
@ -31,18 +29,16 @@ public class CmdHelp extends FCommand
}
@Override
public void perform()
{
public void perform() {
if (helpPages == null) updateHelp();
int page = this.argAsInt(0, 1);
sendMessage(p.txt.titleize("Factions Help ("+page+"/"+helpPages.size()+")"));
sendMessage(p.txt.titleize("Factions Help (" + page + "/" + helpPages.size() + ")"));
page -= 1;
if (page < 0 || page >= helpPages.size())
{
if (page < 0 || page >= helpPages.size()) {
msg("<b>This page does not exist");
return;
}
@ -55,78 +51,76 @@ public class CmdHelp extends FCommand
public ArrayList<ArrayList<String>> helpPages;
public void updateHelp()
{
public void updateHelp() {
helpPages = new ArrayList<ArrayList<String>>();
ArrayList<String> pageLines;
pageLines = new ArrayList<String>();
pageLines.add( p.cmdBase.cmdHelp.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdList.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdShow.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdPower.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdJoin.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdLeave.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdChat.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdHome.getUseageTemplate(true) );
pageLines.add( p.txt.parse("<i>Learn how to create a faction on the next page.") );
pageLines.add(p.cmdBase.cmdHelp.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdList.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdShow.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdPower.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdJoin.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdLeave.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdChat.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdHome.getUseageTemplate(true));
pageLines.add(p.txt.parse("<i>Learn how to create a faction on the next page."));
helpPages.add(pageLines);
pageLines = new ArrayList<String>();
pageLines.add( p.cmdBase.cmdCreate.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdDescription.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdTag.getUseageTemplate(true) );
pageLines.add( p.txt.parse("<i>You might want to close it and use invitations:" ));
pageLines.add( p.cmdBase.cmdOpen.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdInvite.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdDeinvite.getUseageTemplate(true) );
pageLines.add( p.txt.parse("<i>And don't forget to set your home:" ));
pageLines.add( p.cmdBase.cmdSethome.getUseageTemplate(true) );
pageLines.add(p.cmdBase.cmdCreate.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdDescription.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdTag.getUseageTemplate(true));
pageLines.add(p.txt.parse("<i>You might want to close it and use invitations:"));
pageLines.add(p.cmdBase.cmdOpen.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdInvite.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdDeinvite.getUseageTemplate(true));
pageLines.add(p.txt.parse("<i>And don't forget to set your home:"));
pageLines.add(p.cmdBase.cmdSethome.getUseageTemplate(true));
helpPages.add(pageLines);
if (Econ.isSetup() && Conf.econEnabled && Conf.bankEnabled)
{
if (Econ.isSetup() && Conf.econEnabled && Conf.bankEnabled) {
pageLines = new ArrayList<String>();
pageLines.add( "" );
pageLines.add( p.txt.parse("<i>Your faction has a bank which is used to pay for certain" ));
pageLines.add( p.txt.parse("<i>things, so it will need to have money deposited into it." ));
pageLines.add( p.txt.parse("<i>To learn more, use the money command." ));
pageLines.add( "" );
pageLines.add( p.cmdBase.cmdMoney.getUseageTemplate(true) );
pageLines.add( "" );
pageLines.add( "" );
pageLines.add( "" );
pageLines.add("");
pageLines.add(p.txt.parse("<i>Your faction has a bank which is used to pay for certain"));
pageLines.add(p.txt.parse("<i>things, so it will need to have money deposited into it."));
pageLines.add(p.txt.parse("<i>To learn more, use the money command."));
pageLines.add("");
pageLines.add(p.cmdBase.cmdMoney.getUseageTemplate(true));
pageLines.add("");
pageLines.add("");
pageLines.add("");
helpPages.add(pageLines);
}
pageLines = new ArrayList<String>();
pageLines.add( p.cmdBase.cmdClaim.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdAutoClaim.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdUnclaim.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdUnclaimall.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdKick.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdMod.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdAdmin.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdTitle.getUseageTemplate(true) );
pageLines.add( p.txt.parse("<i>Player titles are just for fun. No rules connected to them." ));
pageLines.add(p.cmdBase.cmdClaim.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdAutoClaim.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdUnclaim.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdUnclaimall.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdKick.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdMod.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdAdmin.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdTitle.getUseageTemplate(true));
pageLines.add(p.txt.parse("<i>Player titles are just for fun. No rules connected to them."));
helpPages.add(pageLines);
pageLines = new ArrayList<String>();
pageLines.add( p.cmdBase.cmdMap.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdBoom.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdOwner.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdOwnerList.getUseageTemplate(true) );
pageLines.add(p.cmdBase.cmdMap.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdBoom.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdOwner.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdOwnerList.getUseageTemplate(true));
pageLines.add(p.txt.parse("<i>Claimed land with ownership set is further protected so"));
pageLines.add(p.txt.parse("<i>that only the owner(s), faction admin, and possibly the"));
pageLines.add(p.txt.parse("<i>faction moderators have full access."));
helpPages.add(pageLines);
pageLines = new ArrayList<String>();
pageLines.add( p.cmdBase.cmdDisband.getUseageTemplate(true) );
pageLines.add(p.cmdBase.cmdDisband.getUseageTemplate(true));
pageLines.add("");
pageLines.add( p.cmdBase.cmdRelationAlly.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdRelationNeutral.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdRelationEnemy.getUseageTemplate(true) );
pageLines.add(p.cmdBase.cmdRelationAlly.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdRelationNeutral.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdRelationEnemy.getUseageTemplate(true));
pageLines.add(p.txt.parse("<i>Set the relation you WISH to have with another faction."));
pageLines.add(p.txt.parse("<i>Your default relation with other factions will be neutral."));
pageLines.add(p.txt.parse("<i>If BOTH factions choose \"ally\" you will be allies."));
@ -159,31 +153,31 @@ public class CmdHelp extends FCommand
pageLines = new ArrayList<String>();
pageLines.add("Finally some commands for the server admins:");
pageLines.add( p.cmdBase.cmdBypass.getUseageTemplate(true) );
pageLines.add(p.cmdBase.cmdBypass.getUseageTemplate(true));
pageLines.add(p.txt.parse("<c>/f claim safezone <i>claim land for the Safe Zone"));
pageLines.add(p.txt.parse("<c>/f claim warzone <i>claim land for the War Zone"));
pageLines.add(p.txt.parse("<c>/f autoclaim [safezone|warzone] <i>take a guess"));
pageLines.add( p.cmdBase.cmdSafeunclaimall.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdWarunclaimall.getUseageTemplate(true) );
pageLines.add(p.cmdBase.cmdSafeunclaimall.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdWarunclaimall.getUseageTemplate(true));
pageLines.add(p.txt.parse("<i>Note: " + p.cmdBase.cmdUnclaim.getUseageTemplate(false) + P.p.txt.parse("<i>") + " works on safe/war zones as well."));
pageLines.add( p.cmdBase.cmdPeaceful.getUseageTemplate(true) );
pageLines.add(p.cmdBase.cmdPeaceful.getUseageTemplate(true));
helpPages.add(pageLines);
pageLines = new ArrayList<String>();
pageLines.add(p.txt.parse("<i>More commands for server admins:"));
pageLines.add( p.cmdBase.cmdChatSpy.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdPermanent.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdPermanentPower.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdPowerBoost.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdConfig.getUseageTemplate(true) );
pageLines.add(p.cmdBase.cmdChatSpy.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdPermanent.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdPermanentPower.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdPowerBoost.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdConfig.getUseageTemplate(true));
helpPages.add(pageLines);
pageLines = new ArrayList<String>();
pageLines.add(p.txt.parse("<i>Even more commands for server admins:"));
pageLines.add( p.cmdBase.cmdLock.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdReload.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdSaveAll.getUseageTemplate(true) );
pageLines.add( p.cmdBase.cmdVersion.getUseageTemplate(true) );
pageLines.add(p.cmdBase.cmdLock.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdReload.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdSaveAll.getUseageTemplate(true));
pageLines.add(p.cmdBase.cmdVersion.getUseageTemplate(true));
helpPages.add(pageLines);
}
}

View File

@ -1,30 +1,22 @@
package com.massivecraft.factions.cmd;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import com.massivecraft.factions.Board;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.*;
import com.massivecraft.factions.integration.EssentialsFeatures;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.zcore.util.SmokeUtil;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.List;
public class CmdHome extends FCommand
{
public class CmdHome extends FCommand {
public CmdHome()
{
public CmdHome() {
super();
this.aliases.add("home");
@ -41,36 +33,30 @@ public class CmdHome extends FCommand
}
@Override
public void perform()
{
public void perform() {
// TODO: Hide this command on help also.
if ( ! Conf.homesEnabled)
{
if (!Conf.homesEnabled) {
fme.msg("<b>Sorry, Faction homes are disabled on this server.");
return;
}
if ( ! Conf.homesTeleportCommandEnabled)
{
if (!Conf.homesTeleportCommandEnabled) {
fme.msg("<b>Sorry, the ability to teleport to Faction homes is disabled on this server.");
return;
}
if ( ! myFaction.hasHome())
{
if (!myFaction.hasHome()) {
fme.msg("<b>Your faction does not have a home. " + (fme.getRole().value < Role.MODERATOR.value ? "<i> Ask your leader to:" : "<i>You should:"));
fme.sendMessage(p.cmdBase.cmdSethome.getUseageTemplate());
return;
}
if ( ! Conf.homesTeleportAllowedFromEnemyTerritory && fme.isInEnemyTerritory())
{
if (!Conf.homesTeleportAllowedFromEnemyTerritory && fme.isInEnemyTerritory()) {
fme.msg("<b>You cannot teleport to your faction home while in the territory of an enemy faction.");
return;
}
if ( ! Conf.homesTeleportAllowedFromDifferentWorld && me.getWorld().getUID() != myFaction.getHome().getWorld().getUID())
{
if (!Conf.homesTeleportAllowedFromDifferentWorld && me.getWorld().getUID() != myFaction.getHome().getWorld().getUID()) {
fme.msg("<b>You cannot teleport to your faction home while in a different world.");
return;
}
@ -83,26 +69,24 @@ public class CmdHome extends FCommand
(
Conf.homesTeleportAllowedEnemyDistance > 0
&&
! faction.isSafeZone()
!faction.isSafeZone()
&&
(
! fme.isInOwnTerritory()
!fme.isInOwnTerritory()
||
(
fme.isInOwnTerritory()
&&
! Conf.homesTeleportIgnoreEnemiesIfInOwnTerritory
!Conf.homesTeleportIgnoreEnemiesIfInOwnTerritory
)
)
)
{
) {
World w = loc.getWorld();
double x = loc.getX();
double y = loc.getY();
double z = loc.getZ();
for (Player p : me.getServer().getOnlinePlayers())
{
for (Player p : me.getServer().getOnlinePlayers()) {
if (p == null || !p.isOnline() || p.isDead() || p == me || p.getWorld() != w)
continue;
@ -129,11 +113,11 @@ public class CmdHome extends FCommand
if (EssentialsFeatures.handleTeleport(me, myFaction.getHome())) return;
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if ( ! payForCommand(Conf.econCostHome, "to teleport to your faction home", "for teleporting to your faction home")) return;
if (!payForCommand(Conf.econCostHome, "to teleport to your faction home", "for teleporting to your faction home"))
return;
// Create a smoke effect
if (Conf.homesTeleportCommandSmokeEffectEnabled)
{
if (Conf.homesTeleportCommandSmokeEffectEnabled) {
List<Location> smokeLocations = new ArrayList<Location>();
smokeLocations.add(loc);
smokeLocations.add(loc.add(0, 1, 0));

View File

@ -4,10 +4,8 @@ import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.struct.Permission;
public class CmdInvite extends FCommand
{
public CmdInvite()
{
public class CmdInvite extends FCommand {
public CmdInvite() {
super();
this.aliases.add("invite");
this.aliases.add("inv");
@ -25,20 +23,18 @@ public class CmdInvite extends FCommand
}
@Override
public void perform()
{
public void perform() {
FPlayer you = this.argAsBestFPlayerMatch(0);
if (you == null) return;
if (you.getFaction() == myFaction)
{
if (you.getFaction() == myFaction) {
msg("%s<i> is already a member of %s", you.getName(), myFaction.getTag());
msg("<i>You might want to: " + p.cmdBase.cmdKick.getUseageTemplate(false));
return;
}
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if ( ! payForCommand(Conf.econCostInvite, "to invite someone", "for inviting someone")) return;
if (!payForCommand(Conf.econCostInvite, "to invite someone", "for inviting someone")) return;
myFaction.invite(you);

View File

@ -1,19 +1,12 @@
package com.massivecraft.factions.cmd;
import org.bukkit.Bukkit;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.P;
import com.massivecraft.factions.*;
import com.massivecraft.factions.event.FPlayerJoinEvent;
import com.massivecraft.factions.struct.Permission;
import org.bukkit.Bukkit;
public class CmdJoin extends FCommand
{
public CmdJoin()
{
public class CmdJoin extends FCommand {
public CmdJoin() {
super();
this.aliases.add("join");
@ -30,52 +23,44 @@ public class CmdJoin extends FCommand
}
@Override
public void perform()
{
public void perform() {
Faction faction = this.argAsFaction(0);
if (faction == null) return;
FPlayer fplayer = this.argAsBestFPlayerMatch(1, fme, false);
boolean samePlayer = fplayer == fme;
if (!samePlayer && ! Permission.JOIN_OTHERS.has(sender, false))
{
if (!samePlayer && !Permission.JOIN_OTHERS.has(sender, false)) {
msg("<b>You do not have permission to move other players into a faction.");
return;
}
if ( ! faction.isNormal())
{
if (!faction.isNormal()) {
msg("<b>Players may only join normal factions. This is a system faction.");
return;
}
if (faction == fplayer.getFaction())
{
if (faction == fplayer.getFaction()) {
msg("<b>%s %s already a member of %s", fplayer.describeTo(fme, true), (samePlayer ? "are" : "is"), faction.getTag(fme));
return;
}
if (Conf.factionMemberLimit > 0 && faction.getFPlayers().size() >= Conf.factionMemberLimit)
{
if (Conf.factionMemberLimit > 0 && faction.getFPlayers().size() >= Conf.factionMemberLimit) {
msg(" <b>!<white> The faction %s is at the limit of %d members, so %s cannot currently join.", faction.getTag(fme), Conf.factionMemberLimit, fplayer.describeTo(fme, false));
return;
}
if (fplayer.hasFaction())
{
if (fplayer.hasFaction()) {
msg("<b>%s must leave %s current faction first.", fplayer.describeTo(fme, true), (samePlayer ? "your" : "their"));
return;
}
if (!Conf.canLeaveWithNegativePower && fplayer.getPower() < 0)
{
if (!Conf.canLeaveWithNegativePower && fplayer.getPower() < 0) {
msg("<b>%s cannot join a faction with a negative power level.", fplayer.describeTo(fme, true));
return;
}
if( ! (faction.getOpen() || faction.isInvited(fplayer) || fme.isAdminBypassing() || Permission.JOIN_ANY.has(sender, false)))
{
if (!(faction.getOpen() || faction.isInvited(fplayer) || fme.isAdminBypassing() || Permission.JOIN_ANY.has(sender, false))) {
msg("<i>This faction requires invitation.");
if (samePlayer)
faction.msg("%s<i> tried to join your faction.", fplayer.describeTo(faction, true));
@ -83,15 +68,15 @@ public class CmdJoin extends FCommand
}
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make sure they can pay
if (samePlayer && ! canAffordCommand(Conf.econCostJoin, "to join a faction")) return;
if (samePlayer && !canAffordCommand(Conf.econCostJoin, "to join a faction")) return;
// trigger the join event (cancellable)
FPlayerJoinEvent joinEvent = new FPlayerJoinEvent(FPlayers.i.get(me),faction,FPlayerJoinEvent.PlayerJoinReason.COMMAND);
FPlayerJoinEvent joinEvent = new FPlayerJoinEvent(FPlayers.i.get(me), faction, FPlayerJoinEvent.PlayerJoinReason.COMMAND);
Bukkit.getServer().getPluginManager().callEvent(joinEvent);
if (joinEvent.isCancelled()) return;
// then make 'em pay (if applicable)
if (samePlayer && ! payForCommand(Conf.econCostJoin, "to join a faction", "for joining a faction")) return;
if (samePlayer && !payForCommand(Conf.econCostJoin, "to join a faction", "for joining a faction")) return;
fme.msg("<i>%s successfully joined %s.", fplayer.describeTo(fme, true), faction.getTag(fme));
@ -103,8 +88,7 @@ public class CmdJoin extends FCommand
fplayer.setFaction(faction);
faction.deinvite(fplayer);
if (Conf.logFactionJoin)
{
if (Conf.logFactionJoin) {
if (samePlayer)
P.p.log("%s joined the faction %s.", fplayer.getName(), faction.getTag());
else

View File

@ -1,7 +1,5 @@
package com.massivecraft.factions.cmd;
import org.bukkit.Bukkit;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
@ -9,12 +7,11 @@ import com.massivecraft.factions.P;
import com.massivecraft.factions.event.FPlayerLeaveEvent;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
import org.bukkit.Bukkit;
public class CmdKick extends FCommand
{
public class CmdKick extends FCommand {
public CmdKick()
{
public CmdKick() {
super();
this.aliases.add("kick");
@ -31,13 +28,11 @@ public class CmdKick extends FCommand
}
@Override
public void perform()
{
public void perform() {
FPlayer you = this.argAsBestFPlayerMatch(0);
if (you == null) return;
if (fme == you)
{
if (fme == you) {
msg("<b>You cannot kick yourself.");
msg("<i>You might want to: %s", p.cmdBase.cmdLeave.getUseageTemplate(false));
return;
@ -46,30 +41,26 @@ public class CmdKick extends FCommand
Faction yourFaction = you.getFaction();
// players with admin-level "disband" permission can bypass these requirements
if ( ! Permission.KICK_ANY.has(sender))
{
if (yourFaction != myFaction)
{
if (!Permission.KICK_ANY.has(sender)) {
if (yourFaction != myFaction) {
msg("%s<b> is not a member of %s", you.describeTo(fme, true), myFaction.describeTo(fme));
return;
}
if (you.getRole().value >= fme.getRole().value)
{
if (you.getRole().value >= fme.getRole().value) {
// TODO add more informative messages.
msg("<b>Your rank is too low to kick this player.");
return;
}
if ( ! Conf.canLeaveWithNegativePower && you.getPower() < 0)
{
if (!Conf.canLeaveWithNegativePower && you.getPower() < 0) {
msg("<b>You cannot kick that member until their power is positive.");
return;
}
}
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make sure they can pay
if ( ! canAffordCommand(Conf.econCostKick, "to kick someone from the faction")) return;
if (!canAffordCommand(Conf.econCostKick, "to kick someone from the faction")) return;
// trigger the leave event (cancellable) [reason:kicked]
FPlayerLeaveEvent event = new FPlayerLeaveEvent(you, you.getFaction(), FPlayerLeaveEvent.PlayerLeaveReason.KICKED);
@ -77,17 +68,17 @@ public class CmdKick extends FCommand
if (event.isCancelled()) return;
// then make 'em pay (if applicable)
if ( ! payForCommand(Conf.econCostKick, "to kick someone from the faction", "for kicking someone from the faction")) return;
if (!payForCommand(Conf.econCostKick, "to kick someone from the faction", "for kicking someone from the faction"))
return;
yourFaction.msg("%s<i> kicked %s<i> from the faction! :O", fme.describeTo(yourFaction, true), you.describeTo(yourFaction, true));
you.msg("%s<i> kicked you from %s<i>! :O", fme.describeTo(you, true), yourFaction.describeTo(you));
if (yourFaction != myFaction)
{
if (yourFaction != myFaction) {
fme.msg("<i>You kicked %s<i> from the faction %s<i>!", you.describeTo(fme), yourFaction.describeTo(fme));
}
if (Conf.logFactionKick)
P.p.log((senderIsConsole ? "A console command" : fme.getName())+" kicked "+you.getName()+" from the faction: "+yourFaction.getTag());
P.p.log((senderIsConsole ? "A console command" : fme.getName()) + " kicked " + you.getName() + " from the faction: " + yourFaction.getTag());
if (you.getRole() == Role.ADMIN)
yourFaction.promoteNewLeader();

View File

@ -4,8 +4,7 @@ import com.massivecraft.factions.struct.Permission;
public class CmdLeave extends FCommand {
public CmdLeave()
{
public CmdLeave() {
super();
this.aliases.add("leave");
@ -22,8 +21,7 @@ public class CmdLeave extends FCommand {
}
@Override
public void perform()
{
public void perform() {
fme.leave(true);
}

View File

@ -1,20 +1,18 @@
package com.massivecraft.factions.cmd;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.struct.Permission;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class CmdList extends FCommand
{
public CmdList()
{
public class CmdList extends FCommand {
public CmdList() {
super();
this.aliases.add("list");
this.aliases.add("ls");
@ -32,10 +30,9 @@ public class CmdList extends FCommand
}
@Override
public void perform()
{
public void perform() {
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if ( ! payForCommand(Conf.econCostList, "to list the factions", "for listing the factions")) return;
if (!payForCommand(Conf.econCostList, "to list the factions", "for listing the factions")) return;
ArrayList<Faction> factionList = new ArrayList<Faction>(Factions.i.get());
factionList.remove(Factions.i.getNone());
@ -43,7 +40,7 @@ public class CmdList extends FCommand
factionList.remove(Factions.i.getWarZone());
// Sort by total followers first
Collections.sort(factionList, new Comparator<Faction>(){
Collections.sort(factionList, new Comparator<Faction>() {
@Override
public int compare(Faction f1, Faction f2) {
int f1Size = f1.getFPlayers().size();
@ -57,7 +54,7 @@ public class CmdList extends FCommand
});
// Then sort by how many members are online now
Collections.sort(factionList, new Comparator<Faction>(){
Collections.sort(factionList, new Comparator<Faction>() {
@Override
public int compare(Faction f1, Faction f2) {
int f1Size = f1.getFPlayersWhereOnline(true).size();
@ -103,12 +100,10 @@ public class CmdList extends FCommand
if (end > factionList.size())
end = factionList.size();
lines.add(p.txt.titleize("Faction List "+pagenumber+"/"+pagecount));
lines.add(p.txt.titleize("Faction List " + pagenumber + "/" + pagecount));
for (Faction faction : factionList.subList(start, end))
{
if (faction.isNone())
{
for (Faction faction : factionList.subList(start, end)) {
if (faction.isNone()) {
lines.add(p.txt.parse("<i>Factionless<i> %d online", Factions.i.getNone().getFPlayersWhereOnline(true).size()));
continue;
}

View File

@ -11,8 +11,7 @@ public class CmdLock extends FCommand {
default: op
*/
public CmdLock()
{
public CmdLock() {
super();
this.aliases.add("lock");
@ -29,16 +28,12 @@ public class CmdLock extends FCommand {
}
@Override
public void perform()
{
p.setLocked(this.argAsBool(0, ! p.getLocked()));
public void perform() {
p.setLocked(this.argAsBool(0, !p.getLocked()));
if( p.getLocked())
{
if (p.getLocked()) {
msg("<i>Factions is now locked");
}
else
{
} else {
msg("<i>Factions in now unlocked");
}
}

View File

@ -6,10 +6,8 @@ import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.struct.Permission;
public class CmdMap extends FCommand
{
public CmdMap()
{
public class CmdMap extends FCommand {
public CmdMap() {
super();
this.aliases.add("map");
@ -26,41 +24,33 @@ public class CmdMap extends FCommand
}
@Override
public void perform()
{
if (this.argIsSet(0))
{
if (this.argAsBool(0, ! fme.isMapAutoUpdating()))
{
public void perform() {
if (this.argIsSet(0)) {
if (this.argAsBool(0, !fme.isMapAutoUpdating())) {
// Turn on
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if ( ! payForCommand(Conf.econCostMap, "to show the map", "for showing the map")) return;
if (!payForCommand(Conf.econCostMap, "to show the map", "for showing the map")) return;
fme.setMapAutoUpdating(true);
msg("<i>Map auto update <green>ENABLED.");
// And show the map once
showMap();
}
else
{
} else {
// Turn off
fme.setMapAutoUpdating(false);
msg("<i>Map auto update <red>DISABLED.");
}
}
else
{
} else {
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if ( ! payForCommand(Conf.econCostMap, "to show the map", "for showing the map")) return;
if (!payForCommand(Conf.econCostMap, "to show the map", "for showing the map")) return;
showMap();
}
}
public void showMap()
{
public void showMap() {
sendMessage(Board.getMap(myFaction, new FLocation(fme), fme.getPlayer().getLocation().getYaw()));
}

View File

@ -1,15 +1,13 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
public class CmdMod extends FCommand
{
public class CmdMod extends FCommand {
public CmdMod()
{
public CmdMod() {
super();
this.aliases.add("mod");
@ -26,47 +24,39 @@ public class CmdMod extends FCommand
}
@Override
public void perform()
{
public void perform() {
FPlayer you = this.argAsBestFPlayerMatch(0);
if (you == null) return;
boolean permAny = Permission.MOD_ANY.has(sender, false);
Faction targetFaction = you.getFaction();
if (targetFaction != myFaction && !permAny)
{
if (targetFaction != myFaction && !permAny) {
msg("%s<b> is not a member in your faction.", you.describeTo(fme, true));
return;
}
if (fme != null && fme.getRole() != Role.ADMIN && !permAny)
{
if (fme != null && fme.getRole() != Role.ADMIN && !permAny) {
msg("<b>You are not the faction admin.");
return;
}
if (you == fme && !permAny)
{
if (you == fme && !permAny) {
msg("<b>The target player musn't be yourself.");
return;
}
if (you.getRole() == Role.ADMIN)
{
if (you.getRole() == Role.ADMIN) {
msg("<b>The target player is a faction admin. Demote them first.");
return;
}
if (you.getRole() == Role.MODERATOR)
{
if (you.getRole() == Role.MODERATOR) {
// Revoke
you.setRole(Role.NORMAL);
targetFaction.msg("%s<i> is no longer moderator in your faction.", you.describeTo(targetFaction, true));
msg("<i>You have removed moderator status from %s<i>.", you.describeTo(fme, true));
}
else
{
} else {
// Give
you.setRole(Role.MODERATOR);
targetFaction.msg("%s<i> was promoted to moderator in your faction.", you.describeTo(targetFaction, true));

View File

@ -2,8 +2,7 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.P;
public class CmdMoney extends FCommand
{
public class CmdMoney extends FCommand {
public CmdMoneyBalance cmdMoneyBalance = new CmdMoneyBalance();
public CmdMoneyDeposit cmdMoneyDeposit = new CmdMoneyDeposit();
public CmdMoneyWithdraw cmdMoneyWithdraw = new CmdMoneyWithdraw();
@ -11,8 +10,7 @@ public class CmdMoney extends FCommand
public CmdMoneyTransferFp cmdMoneyTransferFp = new CmdMoneyTransferFp();
public CmdMoneyTransferPf cmdMoneyTransferPf = new CmdMoneyTransferPf();
public CmdMoney()
{
public CmdMoney() {
super();
this.aliases.add("money");
@ -38,8 +36,7 @@ public class CmdMoney extends FCommand
}
@Override
public void perform()
{
public void perform() {
this.commandChain.add(this);
P.p.cmdAutoHelp.execute(this.sender, this.args, this.commandChain);
}

View File

@ -1,13 +1,11 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.Faction;
public class CmdMoneyBalance extends FCommand
{
public CmdMoneyBalance()
{
public class CmdMoneyBalance extends FCommand {
public CmdMoneyBalance() {
super();
this.aliases.add("b");
this.aliases.add("balance");
@ -25,16 +23,14 @@ public class CmdMoneyBalance extends FCommand
}
@Override
public void perform()
{
public void perform() {
Faction faction = myFaction;
if (this.argIsSet(0))
{
if (this.argIsSet(0)) {
faction = this.argAsFaction(0);
}
if (faction == null) return;
if (faction != myFaction && ! Permission.MONEY_BALANCE_ANY.has(sender, true)) return;
if (faction != myFaction && !Permission.MONEY_BALANCE_ANY.has(sender, true)) return;
Econ.sendBalanceInfo(fme, faction);
}

View File

@ -5,15 +5,12 @@ import com.massivecraft.factions.P;
import com.massivecraft.factions.iface.EconomyParticipator;
import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.struct.Permission;
import org.bukkit.ChatColor;
public class CmdMoneyDeposit extends FCommand
{
public class CmdMoneyDeposit extends FCommand {
public CmdMoneyDeposit()
{
public CmdMoneyDeposit() {
super();
this.aliases.add("d");
this.aliases.add("deposit");
@ -31,8 +28,7 @@ public class CmdMoneyDeposit extends FCommand
}
@Override
public void perform()
{
public void perform() {
double amount = this.argAsDouble(0, 0d);
EconomyParticipator faction = this.argAsFaction(1, myFaction);
if (faction == null) return;

View File

@ -1,18 +1,15 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.iface.EconomyParticipator;
import com.massivecraft.factions.P;
import com.massivecraft.factions.iface.EconomyParticipator;
import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.struct.Permission;
import org.bukkit.ChatColor;
public class CmdMoneyTransferFf extends FCommand
{
public CmdMoneyTransferFf()
{
public class CmdMoneyTransferFf extends FCommand {
public CmdMoneyTransferFf() {
this.aliases.add("ff");
this.requiredArgs.add("amount");
@ -31,8 +28,7 @@ public class CmdMoneyTransferFf extends FCommand
}
@Override
public void perform()
{
public void perform() {
double amount = this.argAsDouble(0, 0d);
EconomyParticipator from = this.argAsFaction(1);
if (from == null) return;

View File

@ -1,18 +1,15 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.iface.EconomyParticipator;
import com.massivecraft.factions.P;
import com.massivecraft.factions.iface.EconomyParticipator;
import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.struct.Permission;
import org.bukkit.ChatColor;
public class CmdMoneyTransferFp extends FCommand
{
public CmdMoneyTransferFp()
{
public class CmdMoneyTransferFp extends FCommand {
public CmdMoneyTransferFp() {
this.aliases.add("fp");
this.requiredArgs.add("amount");
@ -31,8 +28,7 @@ public class CmdMoneyTransferFp extends FCommand
}
@Override
public void perform()
{
public void perform() {
double amount = this.argAsDouble(0, 0d);
EconomyParticipator from = this.argAsFaction(1);
if (from == null) return;

View File

@ -1,18 +1,15 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.iface.EconomyParticipator;
import com.massivecraft.factions.P;
import com.massivecraft.factions.iface.EconomyParticipator;
import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.struct.Permission;
import org.bukkit.ChatColor;
public class CmdMoneyTransferPf extends FCommand
{
public CmdMoneyTransferPf()
{
public class CmdMoneyTransferPf extends FCommand {
public CmdMoneyTransferPf() {
this.aliases.add("pf");
this.requiredArgs.add("amount");
@ -31,8 +28,7 @@ public class CmdMoneyTransferPf extends FCommand
}
@Override
public void perform()
{
public void perform() {
double amount = this.argAsDouble(0, 0d);
EconomyParticipator from = this.argAsBestFPlayerMatch(1);
if (from == null) return;

View File

@ -1,18 +1,15 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.iface.EconomyParticipator;
import com.massivecraft.factions.P;
import com.massivecraft.factions.iface.EconomyParticipator;
import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.struct.Permission;
import org.bukkit.ChatColor;
public class CmdMoneyWithdraw extends FCommand
{
public CmdMoneyWithdraw()
{
public class CmdMoneyWithdraw extends FCommand {
public CmdMoneyWithdraw() {
this.aliases.add("w");
this.aliases.add("withdraw");
@ -29,8 +26,7 @@ public class CmdMoneyWithdraw extends FCommand
}
@Override
public void perform()
{
public void perform() {
double amount = this.argAsDouble(0, 0d);
EconomyParticipator faction = this.argAsFaction(1, myFaction);
if (faction == null) return;

View File

@ -5,10 +5,8 @@ import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.struct.Permission;
public class CmdOpen extends FCommand
{
public CmdOpen()
{
public class CmdOpen extends FCommand {
public CmdOpen() {
super();
this.aliases.add("open");
@ -25,21 +23,19 @@ public class CmdOpen extends FCommand
}
@Override
public void perform()
{
public void perform() {
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if ( ! payForCommand(Conf.econCostOpen, "to open or close the faction", "for opening or closing the faction")) return;
if (!payForCommand(Conf.econCostOpen, "to open or close the faction", "for opening or closing the faction"))
return;
myFaction.setOpen(this.argAsBool(0, ! myFaction.getOpen()));
myFaction.setOpen(this.argAsBool(0, !myFaction.getOpen()));
String open = myFaction.getOpen() ? "open" : "closed";
// Inform
myFaction.msg("%s<i> changed the faction to <h>%s<i>.", fme.describeTo(myFaction, true), open);
for (Faction faction : Factions.i.get())
{
if (faction == myFaction)
{
for (Faction faction : Factions.i.get()) {
if (faction == myFaction) {
continue;
}
faction.msg("<i>The faction %s<i> is now %s", myFaction.getTag(faction), open);

View File

@ -1,20 +1,14 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Board;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.*;
import com.massivecraft.factions.integration.SpoutFeatures;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
public class CmdOwner extends FCommand
{
public class CmdOwner extends FCommand {
public CmdOwner()
{
public CmdOwner() {
super();
this.aliases.add("owner");
@ -33,44 +27,37 @@ public class CmdOwner extends FCommand
// TODO: Fix colors!
@Override
public void perform()
{
public void perform() {
boolean hasBypass = fme.isAdminBypassing();
if ( ! hasBypass && ! assertHasFaction()) {
if (!hasBypass && !assertHasFaction()) {
return;
}
if ( ! Conf.ownedAreasEnabled)
{
if (!Conf.ownedAreasEnabled) {
fme.msg("<b>Sorry, but owned areas are disabled on this server.");
return;
}
if ( ! hasBypass && Conf.ownedAreasLimitPerFaction > 0 && myFaction.getCountOfClaimsWithOwners() >= Conf.ownedAreasLimitPerFaction)
{
if (!hasBypass && Conf.ownedAreasLimitPerFaction > 0 && myFaction.getCountOfClaimsWithOwners() >= Conf.ownedAreasLimitPerFaction) {
fme.msg("<b>Sorry, but you have reached the server's <h>limit of %d <b>owned areas per faction.", Conf.ownedAreasLimitPerFaction);
return;
}
if ( ! hasBypass && !assertMinRole(Conf.ownedAreasModeratorsCanSet ? Role.MODERATOR : Role.ADMIN))
{
if (!hasBypass && !assertMinRole(Conf.ownedAreasModeratorsCanSet ? Role.MODERATOR : Role.ADMIN)) {
return;
}
FLocation flocation = new FLocation(fme);
Faction factionHere = Board.getFactionAt(flocation);
if (factionHere != myFaction)
{
if ( ! hasBypass)
{
if (factionHere != myFaction) {
if (!hasBypass) {
fme.msg("<b>This land is not claimed by your faction, so you can't set ownership of it.");
return;
}
if ( ! factionHere.isNormal())
{
if (!factionHere.isNormal()) {
fme.msg("<b>This land is not claimed by a faction. Ownership is not possible.");
return;
}
@ -81,23 +68,20 @@ public class CmdOwner extends FCommand
String playerName = target.getName();
if (target.getFaction() != myFaction)
{
if (target.getFaction() != myFaction) {
fme.msg("%s<i> is not a member of this faction.", playerName);
return;
}
// if no player name was passed, and this claim does already have owners set, clear them
if (args.isEmpty() && myFaction.doesLocationHaveOwnersSet(flocation))
{
if (args.isEmpty() && myFaction.doesLocationHaveOwnersSet(flocation)) {
myFaction.clearClaimOwnership(flocation);
SpoutFeatures.updateOwnerListLoc(flocation);
fme.msg("<i>You have cleared ownership for this claimed area.");
return;
}
if (myFaction.isPlayerInOwnerList(playerName, flocation))
{
if (myFaction.isPlayerInOwnerList(playerName, flocation)) {
myFaction.removePlayerAsOwner(playerName, flocation);
SpoutFeatures.updateOwnerListLoc(flocation);
fme.msg("<i>You have removed ownership of this claimed land from %s<i>.", playerName);
@ -105,7 +89,8 @@ public class CmdOwner extends FCommand
}
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if ( ! payForCommand(Conf.econCostOwner, "to set ownership of claimed land", "for setting ownership of claimed land")) return;
if (!payForCommand(Conf.econCostOwner, "to set ownership of claimed land", "for setting ownership of claimed land"))
return;
myFaction.setPlayerAsOwner(playerName, flocation);
SpoutFeatures.updateOwnerListLoc(flocation);

View File

@ -6,11 +6,9 @@ import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.struct.Permission;
public class CmdOwnerList extends FCommand
{
public class CmdOwnerList extends FCommand {
public CmdOwnerList()
{
public CmdOwnerList() {
super();
this.aliases.add("ownerlist");
@ -27,34 +25,28 @@ public class CmdOwnerList extends FCommand
}
@Override
public void perform()
{
public void perform() {
boolean hasBypass = fme.isAdminBypassing();
if ( ! hasBypass && ! assertHasFaction())
{
if (!hasBypass && !assertHasFaction()) {
return;
}
if ( ! Conf.ownedAreasEnabled)
{
if (!Conf.ownedAreasEnabled) {
fme.msg("<b>Owned areas are disabled on this server.");
return;
}
FLocation flocation = new FLocation(fme);
if (Board.getFactionAt(flocation) != myFaction)
{
if (!hasBypass)
{
if (Board.getFactionAt(flocation) != myFaction) {
if (!hasBypass) {
fme.msg("<b>This land is not claimed by your faction.");
return;
}
myFaction = Board.getFactionAt(flocation);
if (!myFaction.isNormal())
{
if (!myFaction.isNormal()) {
fme.msg("<i>This land is not claimed by any faction, thus no owners.");
return;
}
@ -62,8 +54,7 @@ public class CmdOwnerList extends FCommand
String owners = myFaction.getOwnerListString(flocation);
if (owners == null || owners.isEmpty())
{
if (owners == null || owners.isEmpty()) {
fme.msg("<i>No owners are set here; everyone in the faction has access.");
return;
}

View File

@ -1,16 +1,14 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.integration.SpoutFeatures;
import com.massivecraft.factions.struct.Permission;
public class CmdPeaceful extends FCommand
{
public class CmdPeaceful extends FCommand {
public CmdPeaceful()
{
public CmdPeaceful() {
super();
this.aliases.add("peaceful");
@ -27,33 +25,25 @@ public class CmdPeaceful extends FCommand
}
@Override
public void perform()
{
public void perform() {
Faction faction = this.argAsFaction(0);
if (faction == null) return;
String change;
if (faction.isPeaceful())
{
if (faction.isPeaceful()) {
change = "removed peaceful status from";
faction.setPeaceful(false);
}
else
{
} else {
change = "granted peaceful status to";
faction.setPeaceful(true);
}
// Inform all players
for (FPlayer fplayer : FPlayers.i.getOnline())
{
if (fplayer.getFaction() == faction)
{
fplayer.msg((fme == null ? "A server admin" : fme.describeTo(fplayer, true))+"<i> has "+change+" your faction.");
}
else
{
fplayer.msg((fme == null ? "A server admin" : fme.describeTo(fplayer, true))+"<i> has "+change+" the faction \"" + faction.getTag(fplayer) + "<i>\".");
for (FPlayer fplayer : FPlayers.i.getOnline()) {
if (fplayer.getFaction() == faction) {
fplayer.msg((fme == null ? "A server admin" : fme.describeTo(fplayer, true)) + "<i> has " + change + " your faction.");
} else {
fplayer.msg((fme == null ? "A server admin" : fme.describeTo(fplayer, true)) + "<i> has " + change + " the faction \"" + faction.getTag(fplayer) + "<i>\".");
}
}

View File

@ -1,16 +1,14 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.P;
import com.massivecraft.factions.struct.Permission;
public class CmdPermanent extends FCommand
{
public CmdPermanent()
{
public class CmdPermanent extends FCommand {
public CmdPermanent() {
super();
this.aliases.add("permanent");
@ -27,35 +25,27 @@ public class CmdPermanent extends FCommand
}
@Override
public void perform()
{
public void perform() {
Faction faction = this.argAsFaction(0);
if (faction == null) return;
String change;
if(faction.isPermanent())
{
if (faction.isPermanent()) {
change = "removed permanent status from";
faction.setPermanent(false);
}
else
{
} else {
change = "added permanent status to";
faction.setPermanent(true);
}
P.p.log((fme == null ? "A server admin" : fme.getName())+" "+change+" the faction \"" + faction.getTag() + "\".");
P.p.log((fme == null ? "A server admin" : fme.getName()) + " " + change + " the faction \"" + faction.getTag() + "\".");
// Inform all players
for (FPlayer fplayer : FPlayers.i.getOnline())
{
if (fplayer.getFaction() == faction)
{
fplayer.msg((fme == null ? "A server admin" : fme.describeTo(fplayer, true))+"<i> "+change+" your faction.");
}
else
{
fplayer.msg((fme == null ? "A server admin" : fme.describeTo(fplayer, true))+"<i> "+change+" the faction \"" + faction.getTag(fplayer) + "\".");
for (FPlayer fplayer : FPlayers.i.getOnline()) {
if (fplayer.getFaction() == faction) {
fplayer.msg((fme == null ? "A server admin" : fme.describeTo(fplayer, true)) + "<i> " + change + " your faction.");
} else {
fplayer.msg((fme == null ? "A server admin" : fme.describeTo(fplayer, true)) + "<i> " + change + " the faction \"" + faction.getTag(fplayer) + "\".");
}
}
}

View File

@ -1,13 +1,11 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.struct.Permission;
public class CmdPermanentPower extends FCommand
{
public CmdPermanentPower()
{
public class CmdPermanentPower extends FCommand {
public CmdPermanentPower() {
super();
this.aliases.add("permanentpower");
@ -24,8 +22,7 @@ public class CmdPermanentPower extends FCommand
}
@Override
public void perform()
{
public void perform() {
Faction targetFaction = this.argAsFaction(0);
if (targetFaction == null) return;
@ -34,17 +31,15 @@ public class CmdPermanentPower extends FCommand
targetFaction.setPermanentPower(targetPower);
String change = "removed permanentpower status from";
if(targetFaction.hasPermanentPower())
{
if (targetFaction.hasPermanentPower()) {
change = "added permanentpower status to";
}
msg("<i>You %s <h>%s<i>.", change, targetFaction.describeTo(fme));
// Inform all players
for (FPlayer fplayer : targetFaction.getFPlayersWhereOnline(true))
{
fplayer.msg((fme == null ? "A server admin" : fme.describeTo(fplayer, true))+"<i> "+change+" your faction.");
for (FPlayer fplayer : targetFaction.getFPlayersWhereOnline(true)) {
fplayer.msg((fme == null ? "A server admin" : fme.describeTo(fplayer, true)) + "<i> " + change + " your faction.");
}
}
}

View File

@ -4,11 +4,9 @@ import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.struct.Permission;
public class CmdPower extends FCommand
{
public class CmdPower extends FCommand {
public CmdPower()
{
public CmdPower() {
super();
this.aliases.add("power");
this.aliases.add("pow");
@ -26,15 +24,14 @@ public class CmdPower extends FCommand
}
@Override
public void perform()
{
public void perform() {
FPlayer target = this.argAsBestFPlayerMatch(0, fme);
if (target == null) return;
if (target != fme && ! Permission.POWER_ANY.has(sender, true)) return;
if (target != fme && !Permission.POWER_ANY.has(sender, true)) return;
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if ( ! payForCommand(Conf.econCostPower, "to show player power info", "for showing player power info")) return;
if (!payForCommand(Conf.econCostPower, "to show player power info", "for showing player power info")) return;
double powerBoost = target.getPowerBoost();
String boost = (powerBoost == 0.0) ? "" : (powerBoost > 0.0 ? " (bonus: " : " (penalty: ") + powerBoost + ")";

View File

@ -1,14 +1,12 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.P;
import com.massivecraft.factions.struct.Permission;
public class CmdPowerBoost extends FCommand
{
public CmdPowerBoost()
{
public class CmdPowerBoost extends FCommand {
public CmdPowerBoost() {
super();
this.aliases.add("powerboost");
@ -26,47 +24,39 @@ public class CmdPowerBoost extends FCommand
}
@Override
public void perform()
{
public void perform() {
String type = this.argAsString(0).toLowerCase();
boolean doPlayer = true;
if (type.equals("f") || type.equals("faction"))
{
if (type.equals("f") || type.equals("faction")) {
doPlayer = false;
}
else if (!type.equals("p") && !type.equals("player"))
{
} else if (!type.equals("p") && !type.equals("player")) {
msg("<b>You must specify \"p\" or \"player\" to target a player or \"f\" or \"faction\" to target a faction.");
msg("<b>ex. /f powerboost p SomePlayer 0.5 -or- /f powerboost f SomeFaction -5");
return;
}
Double targetPower = this.argAsDouble(2);
if (targetPower == null)
{
if (targetPower == null) {
msg("<b>You must specify a valid numeric value for the power bonus/penalty amount.");
return;
}
String target;
if (doPlayer)
{
if (doPlayer) {
FPlayer targetPlayer = this.argAsBestFPlayerMatch(1);
if (targetPlayer == null) return;
targetPlayer.setPowerBoost(targetPower);
target = "Player \""+targetPlayer.getName()+"\"";
}
else
{
target = "Player \"" + targetPlayer.getName() + "\"";
} else {
Faction targetFaction = this.argAsFaction(1);
if (targetFaction == null) return;
targetFaction.setPowerBoost(targetPower);
target = "Faction \""+targetFaction.getTag()+"\"";
target = "Faction \"" + targetFaction.getTag() + "\"";
}
msg("<i>"+target+" now has a power bonus/penalty of "+targetPower+" to min and max power levels.");
msg("<i>" + target + " now has a power bonus/penalty of " + targetPower + " to min and max power levels.");
if (!senderIsConsole)
P.p.log(fme.getName()+" has set the power bonus/penalty for "+target+" to "+targetPower+".");
P.p.log(fme.getName() + " has set the power bonus/penalty for " + target + " to " + targetPower + ".");
}
}

View File

@ -2,10 +2,8 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.struct.Relation;
public class CmdRelationAlly extends FRelationCommand
{
public CmdRelationAlly()
{
public class CmdRelationAlly extends FRelationCommand {
public CmdRelationAlly() {
aliases.add("ally");
targetRelation = Relation.ALLY;
}

View File

@ -2,10 +2,8 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.struct.Relation;
public class CmdRelationEnemy extends FRelationCommand
{
public CmdRelationEnemy()
{
public class CmdRelationEnemy extends FRelationCommand {
public CmdRelationEnemy() {
aliases.add("enemy");
targetRelation = Relation.ENEMY;
}

View File

@ -2,10 +2,8 @@ package com.massivecraft.factions.cmd;
import com.massivecraft.factions.struct.Relation;
public class CmdRelationNeutral extends FRelationCommand
{
public CmdRelationNeutral()
{
public class CmdRelationNeutral extends FRelationCommand {
public CmdRelationNeutral() {
aliases.add("neutral");
targetRelation = Relation.NEUTRAL;
}

View File

@ -1,17 +1,11 @@
package com.massivecraft.factions.cmd;
import com.massivecraft.factions.Board;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.P;
import com.massivecraft.factions.*;
import com.massivecraft.factions.struct.Permission;
public class CmdReload extends FCommand
{
public class CmdReload extends FCommand {
public CmdReload()
{
public CmdReload() {
super();
this.aliases.add("reload");
@ -28,49 +22,37 @@ public class CmdReload extends FCommand
}
@Override
public void perform()
{
public void perform() {
long timeInitStart = System.currentTimeMillis();
String file = this.argAsString(0, "all").toLowerCase();
String fileName;
if (file.startsWith("c"))
{
if (file.startsWith("c")) {
Conf.load();
fileName = "conf.json";
}
else if (file.startsWith("b"))
{
} else if (file.startsWith("b")) {
Board.load();
fileName = "board.json";
}
else if (file.startsWith("f"))
{
} else if (file.startsWith("f")) {
Factions.i.loadFromDisc();
fileName = "factions.json";
}
else if (file.startsWith("p"))
{
} else if (file.startsWith("p")) {
FPlayers.i.loadFromDisc();
fileName = "players.json";
}
else if (file.startsWith("a"))
{
} else if (file.startsWith("a")) {
fileName = "all";
Conf.load();
FPlayers.i.loadFromDisc();
Factions.i.loadFromDisc();
Board.load();
}
else
{
} else {
P.p.log("RELOAD CANCELLED - SPECIFIED FILE INVALID");
msg("<b>Invalid file specified. <i>Valid files: all, conf, board, factions, players");
return;
}
long timeReload = (System.currentTimeMillis()-timeInitStart);
long timeReload = (System.currentTimeMillis() - timeInitStart);
msg("<i>Reloaded <h>%s <i>from disk, took <h>%dms<i>.", fileName, timeReload);
}

View File

@ -6,11 +6,9 @@ import com.massivecraft.factions.Factions;
import com.massivecraft.factions.P;
import com.massivecraft.factions.struct.Permission;
public class CmdSafeunclaimall extends FCommand
{
public class CmdSafeunclaimall extends FCommand {
public CmdSafeunclaimall()
{
public CmdSafeunclaimall() {
this.aliases.add("safeunclaimall");
this.aliases.add("safedeclaimall");
@ -29,13 +27,12 @@ public class CmdSafeunclaimall extends FCommand
}
@Override
public void perform()
{
public void perform() {
Board.unclaimAll(Factions.i.getSafeZone().getId());
msg("<i>You unclaimed ALL safe zone land.");
if (Conf.logLandUnclaims)
P.p.log(fme.getName()+" unclaimed all safe zones.");
P.p.log(fme.getName() + " unclaimed all safe zones.");
}
}

View File

@ -6,11 +6,9 @@ import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.struct.Permission;
public class CmdSaveAll extends FCommand
{
public class CmdSaveAll extends FCommand {
public CmdSaveAll()
{
public CmdSaveAll() {
super();
this.aliases.add("saveall");
this.aliases.add("save");
@ -28,8 +26,7 @@ public class CmdSaveAll extends FCommand
}
@Override
public void perform()
{
public void perform() {
FPlayers.i.saveToDisc();
Factions.i.saveToDisc();
Board.save();

View File

@ -7,10 +7,8 @@ import com.massivecraft.factions.Faction;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
public class CmdSethome extends FCommand
{
public CmdSethome()
{
public class CmdSethome extends FCommand {
public CmdSethome() {
this.aliases.add("sethome");
//this.requiredArgs.add("");
@ -26,10 +24,8 @@ public class CmdSethome extends FCommand
}
@Override
public void perform()
{
if ( ! Conf.homesEnabled)
{
public void perform() {
if (!Conf.homesEnabled) {
fme.msg("<b>Sorry, Faction homes are disabled on this server.");
return;
}
@ -38,39 +34,34 @@ public class CmdSethome extends FCommand
if (faction == null) return;
// Can the player set the home for this faction?
if (faction == myFaction)
{
if ( ! Permission.SETHOME_ANY.has(sender) && ! assertMinRole(Role.MODERATOR)) return;
}
else
{
if ( ! Permission.SETHOME_ANY.has(sender, true)) return;
if (faction == myFaction) {
if (!Permission.SETHOME_ANY.has(sender) && !assertMinRole(Role.MODERATOR)) return;
} else {
if (!Permission.SETHOME_ANY.has(sender, true)) return;
}
// Can the player set the faction home HERE?
if
(
! Permission.BYPASS.has(me)
!Permission.BYPASS.has(me)
&&
Conf.homesMustBeInClaimedTerritory
&&
Board.getFactionAt(new FLocation(me)) != faction
)
{
) {
fme.msg("<b>Sorry, your faction home can only be set inside your own claimed territory.");
return;
}
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if ( ! payForCommand(Conf.econCostSethome, "to set the faction home", "for setting the faction home")) return;
if (!payForCommand(Conf.econCostSethome, "to set the faction home", "for setting the faction home")) return;
faction.setHome(me.getLocation());
faction.msg("%s<i> set the home for your faction. You can now use:", fme.describeTo(myFaction, true));
faction.sendMessage(p.cmdBase.cmdHome.getUseageTemplate());
if (faction != myFaction)
{
fme.msg("<b>You have set the home for the "+faction.getTag(fme)+"<i> faction.");
if (faction != myFaction) {
fme.msg("<b>You have set the home for the " + faction.getTag(fme) + "<i> faction.");
}
}

View File

@ -1,21 +1,19 @@
package com.massivecraft.factions.cmd;
import java.util.Collection;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.struct.Role;
public class CmdShow extends FCommand
{
import java.util.Collection;
public CmdShow()
{
public class CmdShow extends FCommand {
public CmdShow() {
this.aliases.add("show");
this.aliases.add("who");
@ -32,17 +30,15 @@ public class CmdShow extends FCommand
}
@Override
public void perform()
{
public void perform() {
Faction faction = myFaction;
if (this.argIsSet(0))
{
if (this.argIsSet(0)) {
faction = this.argAsFaction(0);
if (faction == null) return;
}
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if ( ! payForCommand(Conf.econCostShow, "to show faction information", "for showing faction information")) return;
if (!payForCommand(Conf.econCostShow, "to show faction information", "for showing faction information")) return;
Collection<FPlayer> admins = faction.getFPlayersWhereRole(Role.ADMIN);
Collection<FPlayer> mods = faction.getFPlayersWhereRole(Role.MODERATOR);
@ -50,43 +46,38 @@ public class CmdShow extends FCommand
msg(p.txt.titleize(faction.getTag(fme)));
msg("<a>Description: <i>%s", faction.getDescription());
if ( ! faction.isNormal())
{
if (!faction.isNormal()) {
return;
}
String peaceStatus = "";
if (faction.isPeaceful())
{
peaceStatus = " "+Conf.colorNeutral+"This faction is Peaceful";
if (faction.isPeaceful()) {
peaceStatus = " " + Conf.colorNeutral + "This faction is Peaceful";
}
msg("<a>Joining: <i>"+(faction.getOpen() ? "no invitation is needed" : "invitation is required")+peaceStatus);
msg("<a>Joining: <i>" + (faction.getOpen() ? "no invitation is needed" : "invitation is required") + peaceStatus);
double powerBoost = faction.getPowerBoost();
String boost = (powerBoost == 0.0) ? "" : (powerBoost > 0.0 ? " (bonus: " : " (penalty: ") + powerBoost + ")";
msg("<a>Land / Power / Maxpower: <i> %d/%d/%d %s", faction.getLandRounded(), faction.getPowerRounded(), faction.getPowerMaxRounded(), boost);
if (faction.isPermanent())
{
if (faction.isPermanent()) {
msg("<a>This faction is permanent, remaining even with no members.");
}
// show the land value
if (Econ.shouldBeUsed())
{
if (Econ.shouldBeUsed()) {
double value = Econ.calculateTotalLandValue(faction.getLandRounded());
double refund = value * Conf.econClaimRefundMultiplier;
if (value > 0)
{
if (value > 0) {
String stringValue = Econ.moneyString(value);
String stringRefund = (refund > 0.0) ? (" ("+Econ.moneyString(refund)+" depreciated)") : "";
String stringRefund = (refund > 0.0) ? (" (" + Econ.moneyString(refund) + " depreciated)") : "";
msg("<a>Total land value: <i>" + stringValue + stringRefund);
}
//Show bank contents
if(Conf.bankEnabled) {
msg("<a>Bank contains: <i>"+Econ.moneyString(Econ.getBalance(faction.getAccountId())));
if (Conf.bankEnabled) {
msg("<a>Bank contains: <i>" + Econ.moneyString(Econ.getBalance(faction.getAccountId())));
}
}
@ -95,55 +86,49 @@ public class CmdShow extends FCommand
// List relation
String allyList = p.txt.parse("<a>Allies: ");
String enemyList = p.txt.parse("<a>Enemies: ");
for (Faction otherFaction : Factions.i.get())
{
for (Faction otherFaction : Factions.i.get()) {
if (otherFaction == faction) continue;
Relation rel = otherFaction.getRelationTo(faction);
if ( ! rel.isAlly() && ! rel.isEnemy()) continue; // if not ally or enemy, drop out now so we're not wasting time on it; good performance boost
if (!rel.isAlly() && !rel.isEnemy())
continue; // if not ally or enemy, drop out now so we're not wasting time on it; good performance boost
listpart = otherFaction.getTag(fme)+p.txt.parse("<i>")+", ";
listpart = otherFaction.getTag(fme) + p.txt.parse("<i>") + ", ";
if (rel.isAlly())
allyList += listpart;
else if (rel.isEnemy())
enemyList += listpart;
}
if (allyList.endsWith(", "))
allyList = allyList.substring(0, allyList.length()-2);
allyList = allyList.substring(0, allyList.length() - 2);
if (enemyList.endsWith(", "))
enemyList = enemyList.substring(0, enemyList.length()-2);
enemyList = enemyList.substring(0, enemyList.length() - 2);
sendMessage(allyList);
sendMessage(enemyList);
// List the members...
String onlineList = p.txt.parse("<a>")+"Members online: ";
String offlineList = p.txt.parse("<a>")+"Members offline: ";
for (FPlayer follower : admins)
{
listpart = follower.getNameAndTitle(fme)+p.txt.parse("<i>")+", ";
if (follower.isOnlineAndVisibleTo(me))
{
String onlineList = p.txt.parse("<a>") + "Members online: ";
String offlineList = p.txt.parse("<a>") + "Members offline: ";
for (FPlayer follower : admins) {
listpart = follower.getNameAndTitle(fme) + p.txt.parse("<i>") + ", ";
if (follower.isOnlineAndVisibleTo(me)) {
onlineList += listpart;
}
else
{
} else {
offlineList += listpart;
}
}
for (FPlayer follower : mods)
{
listpart = follower.getNameAndTitle(fme)+p.txt.parse("<i>")+", ";
for (FPlayer follower : mods) {
listpart = follower.getNameAndTitle(fme) + p.txt.parse("<i>") + ", ";
if
(follower.isOnlineAndVisibleTo(me))
{
(follower.isOnlineAndVisibleTo(me)) {
onlineList += listpart;
} else {
offlineList += listpart;
}
}
for (FPlayer follower : normals) {
listpart = follower.getNameAndTitle(fme)+p.txt.parse("<i>")+", ";
listpart = follower.getNameAndTitle(fme) + p.txt.parse("<i>") + ", ";
if (follower.isOnlineAndVisibleTo(me)) {
onlineList += listpart;
} else {
@ -152,10 +137,10 @@ public class CmdShow extends FCommand
}
if (onlineList.endsWith(", ")) {
onlineList = onlineList.substring(0, onlineList.length()-2);
onlineList = onlineList.substring(0, onlineList.length() - 2);
}
if (offlineList.endsWith(", ")) {
offlineList = offlineList.substring(0, offlineList.length()-2);
offlineList = offlineList.substring(0, offlineList.length() - 2);
}
sendMessage(onlineList);

View File

@ -1,9 +1,5 @@
package com.massivecraft.factions.cmd;
import java.util.ArrayList;
import org.bukkit.Bukkit;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Factions;
@ -11,12 +7,13 @@ import com.massivecraft.factions.event.FactionRenameEvent;
import com.massivecraft.factions.integration.SpoutFeatures;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.util.MiscUtil;
import org.bukkit.Bukkit;
public class CmdTag extends FCommand
{
import java.util.ArrayList;
public CmdTag()
{
public class CmdTag extends FCommand {
public CmdTag() {
this.aliases.add("tag");
this.requiredArgs.add("faction tag");
@ -32,52 +29,46 @@ public class CmdTag extends FCommand
}
@Override
public void perform()
{
public void perform() {
String tag = this.argAsString(0);
// TODO does not first test cover selfcase?
if (Factions.i.isTagTaken(tag) && ! MiscUtil.getComparisonString(tag).equals(myFaction.getComparisonTag()))
{
if (Factions.i.isTagTaken(tag) && !MiscUtil.getComparisonString(tag).equals(myFaction.getComparisonTag())) {
msg("<b>That tag is already taken");
return;
}
ArrayList<String> errors = new ArrayList<String>();
errors.addAll(Factions.validateTag(tag));
if (errors.size() > 0)
{
if (errors.size() > 0) {
sendMessage(errors);
return;
}
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make sure they can pay
if ( ! canAffordCommand(Conf.econCostTag, "to change the faction tag")) return;
if (!canAffordCommand(Conf.econCostTag, "to change the faction tag")) return;
// trigger the faction rename event (cancellable)
FactionRenameEvent renameEvent = new FactionRenameEvent(fme, tag);
Bukkit.getServer().getPluginManager().callEvent(renameEvent);
if(renameEvent.isCancelled()) return;
if (renameEvent.isCancelled()) return;
// then make 'em pay (if applicable)
if ( ! payForCommand(Conf.econCostTag, "to change the faction tag", "for changing the faction tag")) return;
if (!payForCommand(Conf.econCostTag, "to change the faction tag", "for changing the faction tag")) return;
String oldtag = myFaction.getTag();
myFaction.setTag(tag);
// Inform
myFaction.msg("%s<i> changed your faction tag to %s", fme.describeTo(myFaction, true), myFaction.getTag(myFaction));
for (Faction faction : Factions.i.get())
{
if (faction == myFaction)
{
for (Faction faction : Factions.i.get()) {
if (faction == myFaction) {
continue;
}
faction.msg("<i>The faction %s<i> changed their name to %s.", fme.getColorTo(faction)+oldtag, myFaction.getTag(faction));
faction.msg("<i>The faction %s<i> changed their name to %s.", fme.getColorTo(faction) + oldtag, myFaction.getTag(faction));
}
if (Conf.spoutFactionTagsOverNames)
{
if (Conf.spoutFactionTagsOverNames) {
SpoutFeatures.updateAppearances(myFaction);
}
}

View File

@ -6,10 +6,8 @@ import com.massivecraft.factions.integration.SpoutFeatures;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.zcore.util.TextUtil;
public class CmdTitle extends FCommand
{
public CmdTitle()
{
public class CmdTitle extends FCommand {
public CmdTitle() {
this.aliases.add("title");
this.requiredArgs.add("player name");
@ -25,26 +23,24 @@ public class CmdTitle extends FCommand
}
@Override
public void perform()
{
public void perform() {
FPlayer you = this.argAsBestFPlayerMatch(0);
if (you == null) return;
args.remove(0);
String title = TextUtil.implode(args, " ");
if ( ! canIAdministerYou(fme, you)) return;
if (!canIAdministerYou(fme, you)) return;
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if ( ! payForCommand(Conf.econCostTitle, "to change a players title", "for changing a players title")) return;
if (!payForCommand(Conf.econCostTitle, "to change a players title", "for changing a players title")) return;
you.setTitle(title);
// Inform
myFaction.msg("%s<i> changed a title: %s", fme.describeTo(myFaction, true), you.describeTo(myFaction, true));
if (Conf.spoutFactionTitlesOverNames)
{
if (Conf.spoutFactionTitlesOverNames) {
SpoutFeatures.updateAppearances(me);
}
}

View File

@ -1,22 +1,15 @@
package com.massivecraft.factions.cmd;
import org.bukkit.Bukkit;
import com.massivecraft.factions.Board;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.*;
import com.massivecraft.factions.event.LandUnclaimEvent;
import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.integration.SpoutFeatures;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.P;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
import org.bukkit.Bukkit;
public class CmdUnclaim extends FCommand
{
public CmdUnclaim()
{
public class CmdUnclaim extends FCommand {
public CmdUnclaim() {
this.aliases.add("unclaim");
this.aliases.add("declaim");
@ -33,48 +26,37 @@ public class CmdUnclaim extends FCommand
}
@Override
public void perform()
{
public void perform() {
FLocation flocation = new FLocation(fme);
Faction otherFaction = Board.getFactionAt(flocation);
if (otherFaction.isSafeZone())
{
if (Permission.MANAGE_SAFE_ZONE.has(sender))
{
if (otherFaction.isSafeZone()) {
if (Permission.MANAGE_SAFE_ZONE.has(sender)) {
Board.removeAt(flocation);
SpoutFeatures.updateTerritoryDisplayLoc(flocation);
msg("<i>Safe zone was unclaimed.");
if (Conf.logLandUnclaims)
P.p.log(fme.getName()+" unclaimed land at ("+flocation.getCoordString()+") from the faction: "+otherFaction.getTag());
}
else
{
P.p.log(fme.getName() + " unclaimed land at (" + flocation.getCoordString() + ") from the faction: " + otherFaction.getTag());
} else {
msg("<b>This is a safe zone. You lack permissions to unclaim.");
}
return;
}
else if (otherFaction.isWarZone())
{
if (Permission.MANAGE_WAR_ZONE.has(sender))
{
} else if (otherFaction.isWarZone()) {
if (Permission.MANAGE_WAR_ZONE.has(sender)) {
Board.removeAt(flocation);
SpoutFeatures.updateTerritoryDisplayLoc(flocation);
msg("<i>War zone was unclaimed.");
if (Conf.logLandUnclaims)
P.p.log(fme.getName()+" unclaimed land at ("+flocation.getCoordString()+") from the faction: "+otherFaction.getTag());
}
else
{
P.p.log(fme.getName() + " unclaimed land at (" + flocation.getCoordString() + ") from the faction: " + otherFaction.getTag());
} else {
msg("<b>This is a war zone. You lack permissions to unclaim.");
}
return;
}
if (fme.isAdminBypassing())
{
if (fme.isAdminBypassing()) {
Board.removeAt(flocation);
SpoutFeatures.updateTerritoryDisplayLoc(flocation);
@ -82,43 +64,36 @@ public class CmdUnclaim extends FCommand
msg("<i>You unclaimed this land.");
if (Conf.logLandUnclaims)
P.p.log(fme.getName()+" unclaimed land at ("+flocation.getCoordString()+") from the faction: "+otherFaction.getTag());
P.p.log(fme.getName() + " unclaimed land at (" + flocation.getCoordString() + ") from the faction: " + otherFaction.getTag());
return;
}
if ( ! assertHasFaction())
{
if (!assertHasFaction()) {
return;
}
if ( ! assertMinRole(Role.MODERATOR))
{
if (!assertMinRole(Role.MODERATOR)) {
return;
}
if ( myFaction != otherFaction)
{
if (myFaction != otherFaction) {
msg("<b>You don't own this land.");
return;
}
LandUnclaimEvent unclaimEvent = new LandUnclaimEvent(flocation, otherFaction, fme);
Bukkit.getServer().getPluginManager().callEvent(unclaimEvent);
if(unclaimEvent.isCancelled()) return;
if (unclaimEvent.isCancelled()) return;
if (Econ.shouldBeUsed())
{
if (Econ.shouldBeUsed()) {
double refund = Econ.calculateClaimRefund(myFaction.getLandRounded());
if(Conf.bankEnabled && Conf.bankFactionPaysLandCosts)
{
if ( ! Econ.modifyMoney(myFaction, refund, "to unclaim this land", "for unclaiming this land")) return;
}
else
{
if ( ! Econ.modifyMoney(fme , refund, "to unclaim this land", "for unclaiming this land")) return;
if (Conf.bankEnabled && Conf.bankFactionPaysLandCosts) {
if (!Econ.modifyMoney(myFaction, refund, "to unclaim this land", "for unclaiming this land")) return;
} else {
if (!Econ.modifyMoney(fme, refund, "to unclaim this land", "for unclaiming this land")) return;
}
}
@ -127,7 +102,7 @@ public class CmdUnclaim extends FCommand
myFaction.msg("%s<i> unclaimed some land.", fme.describeTo(myFaction, true));
if (Conf.logLandUnclaims)
P.p.log(fme.getName()+" unclaimed land at ("+flocation.getCoordString()+") from the faction: "+otherFaction.getTag());
P.p.log(fme.getName() + " unclaimed land at (" + flocation.getCoordString() + ") from the faction: " + otherFaction.getTag());
}
}

View File

@ -1,7 +1,5 @@
package com.massivecraft.factions.cmd;
import org.bukkit.Bukkit;
import com.massivecraft.factions.Board;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.P;
@ -9,11 +7,10 @@ import com.massivecraft.factions.event.LandUnclaimAllEvent;
import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.integration.SpoutFeatures;
import com.massivecraft.factions.struct.Permission;
import org.bukkit.Bukkit;
public class CmdUnclaimall extends FCommand
{
public CmdUnclaimall()
{
public class CmdUnclaimall extends FCommand {
public CmdUnclaimall() {
this.aliases.add("unclaimall");
this.aliases.add("declaimall");
@ -30,18 +27,15 @@ public class CmdUnclaimall extends FCommand
}
@Override
public void perform()
{
if (Econ.shouldBeUsed())
{
public void perform() {
if (Econ.shouldBeUsed()) {
double refund = Econ.calculateTotalLandRefund(myFaction.getLandRounded());
if(Conf.bankEnabled && Conf.bankFactionPaysLandCosts)
{
if ( ! Econ.modifyMoney(myFaction, refund, "to unclaim all faction land", "for unclaiming all faction land")) return;
}
else
{
if ( ! Econ.modifyMoney(fme , refund, "to unclaim all faction land", "for unclaiming all faction land")) return;
if (Conf.bankEnabled && Conf.bankFactionPaysLandCosts) {
if (!Econ.modifyMoney(myFaction, refund, "to unclaim all faction land", "for unclaiming all faction land"))
return;
} else {
if (!Econ.modifyMoney(fme, refund, "to unclaim all faction land", "for unclaiming all faction land"))
return;
}
}
@ -54,7 +48,7 @@ public class CmdUnclaimall extends FCommand
SpoutFeatures.updateTerritoryDisplayLoc(null);
if (Conf.logLandUnclaims)
P.p.log(fme.getName()+" unclaimed everything for the faction: "+myFaction.getTag());
P.p.log(fme.getName() + " unclaimed everything for the faction: " + myFaction.getTag());
}
}

View File

@ -4,10 +4,8 @@ import com.massivecraft.factions.P;
import com.massivecraft.factions.struct.Permission;
public class CmdVersion extends FCommand
{
public CmdVersion()
{
public class CmdVersion extends FCommand {
public CmdVersion() {
this.aliases.add("version");
//this.requiredArgs.add("");
@ -23,8 +21,7 @@ public class CmdVersion extends FCommand
}
@Override
public void perform()
{
msg("<i>You are running "+P.p.getDescription().getFullName());
public void perform() {
msg("<i>You are running " + P.p.getDescription().getFullName());
}
}

View File

@ -6,11 +6,9 @@ import com.massivecraft.factions.Factions;
import com.massivecraft.factions.P;
import com.massivecraft.factions.struct.Permission;
public class CmdWarunclaimall extends FCommand
{
public class CmdWarunclaimall extends FCommand {
public CmdWarunclaimall()
{
public CmdWarunclaimall() {
this.aliases.add("warunclaimall");
this.aliases.add("wardeclaimall");
@ -29,13 +27,12 @@ public class CmdWarunclaimall extends FCommand
}
@Override
public void perform()
{
public void perform() {
Board.unclaimAll(Factions.i.getWarZone().getId());
msg("<i>You unclaimed ALL war zone land.");
if (Conf.logLandUnclaims)
P.p.log(fme.getName()+" unclaimed all war zones.");
P.p.log(fme.getName() + " unclaimed all war zones.");
}
}

View File

@ -1,11 +1,10 @@
package com.massivecraft.factions.cmd;
import java.util.Collections;
import com.massivecraft.factions.Conf;
public class FCmdRoot extends FCommand
{
import java.util.Collections;
public class FCmdRoot extends FCommand {
public CmdAdmin cmdAdmin = new CmdAdmin();
public CmdAutoClaim cmdAutoClaim = new CmdAutoClaim();
public CmdBoom cmdBoom = new CmdBoom();
@ -52,8 +51,7 @@ public class FCmdRoot extends FCommand
public CmdVersion cmdVersion = new CmdVersion();
public CmdWarunclaimall cmdWarunclaimall = new CmdWarunclaimall();
public FCmdRoot()
{
public FCmdRoot() {
super();
this.aliases.addAll(Conf.baseCommandAliases);
this.aliases.removeAll(Collections.singletonList(null)); // remove any nulls from extra commas
@ -122,8 +120,7 @@ public class FCmdRoot extends FCommand
}
@Override
public void perform()
{
public void perform() {
this.commandChain.add(this);
this.cmdHelp.execute(this.sender, this.args, this.commandChain);
}

View File

@ -1,23 +1,16 @@
package com.massivecraft.factions.cmd;
import java.util.List;
import com.massivecraft.factions.*;
import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.zcore.MCommand;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.integration.Econ;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.P;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.zcore.MCommand;
import java.util.List;
public abstract class FCommand extends MCommand<P>
{
public abstract class FCommand extends MCommand<P> {
public boolean disableOnLock;
public FPlayer fme;
@ -28,8 +21,7 @@ public abstract class FCommand extends MCommand<P>
public boolean isMoneyCommand;
public FCommand()
{
public FCommand() {
super(P.p);
// Due to safety reasons it defaults to disable on lock.
@ -44,15 +36,11 @@ public abstract class FCommand extends MCommand<P>
}
@Override
public void execute(CommandSender sender, List<String> args, List<MCommand<?>> commandChain)
{
if (sender instanceof Player)
{
this.fme = FPlayers.i.get((Player)sender);
public void execute(CommandSender sender, List<String> args, List<MCommand<?>> commandChain) {
if (sender instanceof Player) {
this.fme = FPlayers.i.get((Player) sender);
this.myFaction = this.fme.getFaction();
}
else
{
} else {
this.fme = null;
this.myFaction = null;
}
@ -60,22 +48,18 @@ public abstract class FCommand extends MCommand<P>
}
@Override
public boolean isEnabled()
{
if (p.getLocked() && this.disableOnLock)
{
public boolean isEnabled() {
if (p.getLocked() && this.disableOnLock) {
msg("<b>Factions was locked by an admin. Please try again later.");
return false;
}
if (this.isMoneyCommand && ! Conf.econEnabled)
{
if (this.isMoneyCommand && !Conf.econEnabled) {
msg("<b>Faction economy features are disabled on this server.");
return false;
}
if (this.isMoneyCommand && ! Conf.bankEnabled)
{
if (this.isMoneyCommand && !Conf.bankEnabled) {
msg("<b>The faction bank system is disabled on this server.");
return false;
}
@ -84,31 +68,27 @@ public abstract class FCommand extends MCommand<P>
}
@Override
public boolean validSenderType(CommandSender sender, boolean informSenderIfNot)
{
public boolean validSenderType(CommandSender sender, boolean informSenderIfNot) {
boolean superValid = super.validSenderType(sender, informSenderIfNot);
if ( ! superValid) return false;
if (!superValid) return false;
if ( ! (this.senderMustBeMember || this.senderMustBeModerator || this.senderMustBeAdmin)) return true;
if (!(this.senderMustBeMember || this.senderMustBeModerator || this.senderMustBeAdmin)) return true;
if ( ! (sender instanceof Player)) return false;
if (!(sender instanceof Player)) return false;
FPlayer fplayer = FPlayers.i.get((Player)sender);
FPlayer fplayer = FPlayers.i.get((Player) sender);
if ( ! fplayer.hasFaction())
{
if (!fplayer.hasFaction()) {
sender.sendMessage(p.txt.parse("<b>You are not member of any faction."));
return false;
}
if (this.senderMustBeModerator && ! fplayer.getRole().isAtLeast(Role.MODERATOR))
{
if (this.senderMustBeModerator && !fplayer.getRole().isAtLeast(Role.MODERATOR)) {
sender.sendMessage(p.txt.parse("<b>Only faction moderators can %s.", this.getHelpShort()));
return false;
}
if (this.senderMustBeAdmin && ! fplayer.getRole().isAtLeast(Role.ADMIN))
{
if (this.senderMustBeAdmin && !fplayer.getRole().isAtLeast(Role.ADMIN)) {
sender.sendMessage(p.txt.parse("<b>Only faction admins can %s.", this.getHelpShort()));
return false;
}
@ -120,25 +100,21 @@ public abstract class FCommand extends MCommand<P>
// Assertions
// -------------------------------------------- //
public boolean assertHasFaction()
{
public boolean assertHasFaction() {
if (me == null) return true;
if ( ! fme.hasFaction())
{
if (!fme.hasFaction()) {
sendMessage("You are not member of any faction.");
return false;
}
return true;
}
public boolean assertMinRole(Role role)
{
public boolean assertMinRole(Role role) {
if (me == null) return true;
if (fme.getRole().value < role.value)
{
msg("<b>You <h>must be "+role+"<b> to "+this.getHelpShort()+".");
if (fme.getRole().value < role.value) {
msg("<b>You <h>must be " + role + "<b> to " + this.getHelpShort() + ".");
return false;
}
return true;
@ -149,127 +125,111 @@ public abstract class FCommand extends MCommand<P>
// -------------------------------------------- //
// FPLAYER ======================
public FPlayer strAsFPlayer(String name, FPlayer def, boolean msg)
{
public FPlayer strAsFPlayer(String name, FPlayer def, boolean msg) {
FPlayer ret = def;
if (name != null)
{
if (name != null) {
FPlayer fplayer = FPlayers.i.get(name);
if (fplayer != null)
{
if (fplayer != null) {
ret = fplayer;
}
}
if (msg && ret == null)
{
if (msg && ret == null) {
this.msg("<b>No player \"<p>%s<b>\" could be found.", name);
}
return ret;
}
public FPlayer argAsFPlayer(int idx, FPlayer def, boolean msg)
{
public FPlayer argAsFPlayer(int idx, FPlayer def, boolean msg) {
return this.strAsFPlayer(this.argAsString(idx), def, msg);
}
public FPlayer argAsFPlayer(int idx, FPlayer def)
{
public FPlayer argAsFPlayer(int idx, FPlayer def) {
return this.argAsFPlayer(idx, def, true);
}
public FPlayer argAsFPlayer(int idx)
{
public FPlayer argAsFPlayer(int idx) {
return this.argAsFPlayer(idx, null);
}
// BEST FPLAYER MATCH ======================
public FPlayer strAsBestFPlayerMatch(String name, FPlayer def, boolean msg)
{
public FPlayer strAsBestFPlayerMatch(String name, FPlayer def, boolean msg) {
FPlayer ret = def;
if (name != null)
{
if (name != null) {
FPlayer fplayer = FPlayers.i.getBestIdMatch(name);
if (fplayer != null)
{
if (fplayer != null) {
ret = fplayer;
}
}
if (msg && ret == null)
{
if (msg && ret == null) {
this.msg("<b>No player match found for \"<p>%s<b>\".", name);
}
return ret;
}
public FPlayer argAsBestFPlayerMatch(int idx, FPlayer def, boolean msg)
{
public FPlayer argAsBestFPlayerMatch(int idx, FPlayer def, boolean msg) {
return this.strAsBestFPlayerMatch(this.argAsString(idx), def, msg);
}
public FPlayer argAsBestFPlayerMatch(int idx, FPlayer def)
{
public FPlayer argAsBestFPlayerMatch(int idx, FPlayer def) {
return this.argAsBestFPlayerMatch(idx, def, true);
}
public FPlayer argAsBestFPlayerMatch(int idx)
{
public FPlayer argAsBestFPlayerMatch(int idx) {
return this.argAsBestFPlayerMatch(idx, null);
}
// FACTION ======================
public Faction strAsFaction(String name, Faction def, boolean msg)
{
public Faction strAsFaction(String name, Faction def, boolean msg) {
Faction ret = def;
if (name != null)
{
if (name != null) {
Faction faction = null;
// First we try an exact match
if (faction == null)
{
if (faction == null) {
faction = Factions.i.getByTag(name);
}
// Next we match faction tags
if (faction == null)
{
if (faction == null) {
faction = Factions.i.getBestTagMatch(name);
}
// Next we match player names
if (faction == null)
{
if (faction == null) {
FPlayer fplayer = FPlayers.i.getBestIdMatch(name);
if (fplayer != null)
{
if (fplayer != null) {
faction = fplayer.getFaction();
}
}
if (faction != null)
{
if (faction != null) {
ret = faction;
}
}
if (msg && ret == null)
{
if (msg && ret == null) {
this.msg("<b>The faction or player \"<p>%s<b>\" could not be found.", name);
}
return ret;
}
public Faction argAsFaction(int idx, Faction def, boolean msg)
{
public Faction argAsFaction(int idx, Faction def, boolean msg) {
return this.strAsFaction(this.argAsString(idx), def, msg);
}
public Faction argAsFaction(int idx, Faction def)
{
public Faction argAsFaction(int idx, Faction def) {
return this.argAsFaction(idx, def, true);
}
public Faction argAsFaction(int idx)
{
public Faction argAsFaction(int idx) {
return this.argAsFaction(idx, null);
}
@ -277,36 +237,25 @@ public abstract class FCommand extends MCommand<P>
// Commonly used logic
// -------------------------------------------- //
public boolean canIAdministerYou(FPlayer i, FPlayer you)
{
if ( ! i.getFaction().equals(you.getFaction()))
{
i.sendMessage(p.txt.parse("%s <b>is not in the same faction as you.",you.describeTo(i, true)));
public boolean canIAdministerYou(FPlayer i, FPlayer you) {
if (!i.getFaction().equals(you.getFaction())) {
i.sendMessage(p.txt.parse("%s <b>is not in the same faction as you.", you.describeTo(i, true)));
return false;
}
if (i.getRole().value > you.getRole().value || i.getRole().equals(Role.ADMIN) )
{
if (i.getRole().value > you.getRole().value || i.getRole().equals(Role.ADMIN)) {
return true;
}
if (you.getRole().equals(Role.ADMIN))
{
if (you.getRole().equals(Role.ADMIN)) {
i.sendMessage(p.txt.parse("<b>Only the faction admin can do that."));
}
else if (i.getRole().equals(Role.MODERATOR))
{
if ( i == you )
{
} else if (i.getRole().equals(Role.MODERATOR)) {
if (i == you) {
return true; //Moderators can control themselves
}
else
{
} else {
i.sendMessage(p.txt.parse("<b>Moderators can't control each other..."));
}
}
else
{
} else {
i.sendMessage(p.txt.parse("<b>You must be a faction moderator to do that."));
}
@ -314,22 +263,20 @@ public abstract class FCommand extends MCommand<P>
}
// if economy is enabled and they're not on the bypass list, make 'em pay; returns true unless person can't afford the cost
public boolean payForCommand(double cost, String toDoThis, String forDoingThis)
{
if ( ! Econ.shouldBeUsed() || this.fme == null || cost == 0.0 || fme.isAdminBypassing()) return true;
public boolean payForCommand(double cost, String toDoThis, String forDoingThis) {
if (!Econ.shouldBeUsed() || this.fme == null || cost == 0.0 || fme.isAdminBypassing()) return true;
if(Conf.bankEnabled && Conf.bankFactionPaysCosts && fme.hasFaction())
if (Conf.bankEnabled && Conf.bankFactionPaysCosts && fme.hasFaction())
return Econ.modifyMoney(myFaction, -cost, toDoThis, forDoingThis);
else
return Econ.modifyMoney(fme, -cost, toDoThis, forDoingThis);
}
// like above, but just make sure they can pay; returns true unless person can't afford the cost
public boolean canAffordCommand(double cost, String toDoThis)
{
if ( ! Econ.shouldBeUsed() || this.fme == null || cost == 0.0 || fme.isAdminBypassing()) return true;
public boolean canAffordCommand(double cost, String toDoThis) {
if (!Econ.shouldBeUsed() || this.fme == null || cost == 0.0 || fme.isAdminBypassing()) return true;
if(Conf.bankEnabled && Conf.bankFactionPaysCosts && fme.hasFaction())
if (Conf.bankEnabled && Conf.bankFactionPaysCosts && fme.hasFaction())
return Econ.hasAtLeast(myFaction, cost, toDoThis);
else
return Econ.hasAtLeast(fme, cost, toDoThis);

View File

@ -1,21 +1,18 @@
package com.massivecraft.factions.cmd;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.event.FactionRelationEvent;
import com.massivecraft.factions.integration.SpoutFeatures;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Relation;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
public abstract class FRelationCommand extends FCommand
{
public abstract class FRelationCommand extends FCommand {
public Relation targetRelation;
public FRelationCommand()
{
public FRelationCommand() {
super();
this.requiredArgs.add("faction tag");
//this.optionalArgs.put("player name", "you");
@ -30,31 +27,28 @@ public abstract class FRelationCommand extends FCommand
}
@Override
public void perform()
{
public void perform() {
Faction them = this.argAsFaction(0);
if (them == null) return;
if ( ! them.isNormal())
{
if (!them.isNormal()) {
msg("<b>Nope! You can't.");
return;
}
if (them == myFaction)
{
if (them == myFaction) {
msg("<b>Nope! You can't declare a relation to yourself :)");
return;
}
if (myFaction.getRelationWish(them) == targetRelation)
{
if (myFaction.getRelationWish(them) == targetRelation) {
msg("<b>You already have that relation wish set with %s.", them.getTag());
return;
}
// if economy is enabled, they're not on the bypass list, and this command has a cost set, make 'em pay
if ( ! payForCommand(targetRelation.getRelationCost(), "to change a relation wish", "for changing a relation wish")) return;
if (!payForCommand(targetRelation.getRelationCost(), "to change a relation wish", "for changing a relation wish"))
return;
// try to set the new relation
Relation oldRelation = myFaction.getRelationTo(them, true);
@ -63,31 +57,27 @@ public abstract class FRelationCommand extends FCommand
ChatColor currentRelationColor = currentRelation.getColor();
// if the relation change was successful
if (targetRelation.value == currentRelation.value)
{
if (targetRelation.value == currentRelation.value) {
// trigger the faction relation event
FactionRelationEvent relationEvent = new FactionRelationEvent(myFaction, them, oldRelation, currentRelation);
Bukkit.getServer().getPluginManager().callEvent(relationEvent);
them.msg("<i>Your faction is now "+currentRelationColor+targetRelation.toString()+"<i> to "+currentRelationColor+myFaction.getTag());
myFaction.msg("<i>Your faction is now "+currentRelationColor+targetRelation.toString()+"<i> to "+currentRelationColor+them.getTag());
them.msg("<i>Your faction is now " + currentRelationColor + targetRelation.toString() + "<i> to " + currentRelationColor + myFaction.getTag());
myFaction.msg("<i>Your faction is now " + currentRelationColor + targetRelation.toString() + "<i> to " + currentRelationColor + them.getTag());
}
// inform the other faction of your request
else
{
them.msg(currentRelationColor+myFaction.getTag()+"<i> wishes to be your "+targetRelation.getColor()+targetRelation.toString());
them.msg("<i>Type <c>/"+Conf.baseCommandAliases.get(0)+" "+targetRelation+" "+myFaction.getTag()+"<i> to accept.");
myFaction.msg(currentRelationColor+them.getTag()+"<i> were informed that you wish to be "+targetRelation.getColor()+targetRelation);
else {
them.msg(currentRelationColor + myFaction.getTag() + "<i> wishes to be your " + targetRelation.getColor() + targetRelation.toString());
them.msg("<i>Type <c>/" + Conf.baseCommandAliases.get(0) + " " + targetRelation + " " + myFaction.getTag() + "<i> to accept.");
myFaction.msg(currentRelationColor + them.getTag() + "<i> were informed that you wish to be " + targetRelation.getColor() + targetRelation);
}
if ( ! targetRelation.isNeutral() && them.isPeaceful())
{
if (!targetRelation.isNeutral() && them.isPeaceful()) {
them.msg("<i>This will have no effect while your faction is peaceful.");
myFaction.msg("<i>This will have no effect while their faction is peaceful.");
}
if ( ! targetRelation.isNeutral() && myFaction.isPeaceful())
{
if (!targetRelation.isNeutral() && myFaction.isPeaceful()) {
them.msg("<i>This will have no effect while their faction is peaceful.");
myFaction.msg("<i>This will have no effect while your faction is peaceful.");
}

View File

@ -1,60 +1,56 @@
package com.massivecraft.factions.event;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
public class FPlayerJoinEvent extends Event implements Cancellable
{
public class FPlayerJoinEvent extends Event implements Cancellable {
private static final HandlerList handlers = new HandlerList();
FPlayer fplayer;
Faction faction;
PlayerJoinReason reason;
boolean cancelled = false;
public enum PlayerJoinReason
{
public enum PlayerJoinReason {
CREATE, LEADER, COMMAND
}
public FPlayerJoinEvent(FPlayer fp, Faction f, PlayerJoinReason r)
{
public FPlayerJoinEvent(FPlayer fp, Faction f, PlayerJoinReason r) {
fplayer = fp;
faction = f;
reason = r;
}
public FPlayer getFPlayer()
{
public FPlayer getFPlayer() {
return fplayer;
}
public Faction getFaction()
{
public Faction getFaction() {
return faction;
}
public PlayerJoinReason getReason()
{
public PlayerJoinReason getReason() {
return reason;
}
public HandlerList getHandlers()
{
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList()
{
public static HandlerList getHandlerList() {
return handlers;
}
@Override
public boolean isCancelled()
{
public boolean isCancelled() {
return cancelled;
}
@Override
public void setCancelled(boolean c)
{
public void setCancelled(boolean c) {
cancelled = c;
}
}

View File

@ -1,68 +1,56 @@
package com.massivecraft.factions.event;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
public class FPlayerLeaveEvent extends Event implements Cancellable
{
public class FPlayerLeaveEvent extends Event implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private PlayerLeaveReason reason;
FPlayer FPlayer;
Faction Faction;
boolean cancelled = false;
public enum PlayerLeaveReason
{
public enum PlayerLeaveReason {
KICKED, DISBAND, RESET, JOINOTHER, LEAVE
}
public FPlayerLeaveEvent(FPlayer p, Faction f, PlayerLeaveReason r)
{
public FPlayerLeaveEvent(FPlayer p, Faction f, PlayerLeaveReason r) {
FPlayer = p;
Faction = f;
reason = r;
}
public HandlerList getHandlers()
{
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList()
{
public static HandlerList getHandlerList() {
return handlers;
}
public PlayerLeaveReason getReason()
{
public PlayerLeaveReason getReason() {
return reason;
}
public FPlayer getFPlayer()
{
public FPlayer getFPlayer() {
return FPlayer;
}
public Faction getFaction()
{
public Faction getFaction() {
return Faction;
}
@Override
public boolean isCancelled()
{
public boolean isCancelled() {
return cancelled;
}
@Override
public void setCancelled(boolean c)
{
if (reason == PlayerLeaveReason.DISBAND || reason == PlayerLeaveReason.RESET)
{
public void setCancelled(boolean c) {
if (reason == PlayerLeaveReason.DISBAND || reason == PlayerLeaveReason.RESET) {
cancelled = false;
return;
}

View File

@ -1,63 +1,53 @@
package com.massivecraft.factions.event;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Factions;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Factions;
public class FactionCreateEvent extends Event implements Cancellable
{
public class FactionCreateEvent extends Event implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private String factionTag;
private Player sender;
private boolean cancelled;
public FactionCreateEvent(Player sender, String tag)
{
public FactionCreateEvent(Player sender, String tag) {
this.factionTag = tag;
this.sender = sender;
this.cancelled = false;
}
public FPlayer getFPlayer()
{
public FPlayer getFPlayer() {
return FPlayers.i.get(sender);
}
public String getFactionId()
{
public String getFactionId() {
return Factions.i.getNextId();
}
public String getFactionTag()
{
public String getFactionTag() {
return factionTag;
}
public HandlerList getHandlers()
{
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList()
{
public static HandlerList getHandlerList() {
return handlers;
}
@Override
public boolean isCancelled()
{
public boolean isCancelled() {
return cancelled;
}
@Override
public void setCancelled(boolean c)
{
public void setCancelled(boolean c) {
this.cancelled = c;
}
}

View File

@ -1,64 +1,54 @@
package com.massivecraft.factions.event;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Factions;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
public class FactionDisbandEvent extends Event implements Cancellable
{
public class FactionDisbandEvent extends Event implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private boolean cancelled;
private String id;
private Player sender;
public FactionDisbandEvent(Player sender, String factionId)
{
public FactionDisbandEvent(Player sender, String factionId) {
cancelled = false;
this.sender = sender;
this.id = factionId;
}
public HandlerList getHandlers()
{
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList()
{
public static HandlerList getHandlerList() {
return handlers;
}
public Faction getFaction()
{
public Faction getFaction() {
return Factions.i.get(id);
}
public FPlayer getFPlayer()
{
public FPlayer getFPlayer() {
return FPlayers.i.get(sender);
}
public Player getPlayer()
{
public Player getPlayer() {
return sender;
}
@Override
public boolean isCancelled()
{
public boolean isCancelled() {
return cancelled;
}
@Override
public void setCancelled(boolean c)
{
public void setCancelled(boolean c) {
cancelled = c;
}
}

View File

@ -1,14 +1,12 @@
package com.massivecraft.factions.event;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.struct.Relation;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.Faction;
public class FactionRelationEvent extends Event
{
public class FactionRelationEvent extends Event {
private static final HandlerList handlers = new HandlerList();
private Faction fsender;
@ -16,41 +14,34 @@ public class FactionRelationEvent extends Event
private Relation foldrel;
private Relation frel;
public FactionRelationEvent(Faction sender, Faction target, Relation oldrel, Relation rel)
{
public FactionRelationEvent(Faction sender, Faction target, Relation oldrel, Relation rel) {
fsender = sender;
ftarget = target;
foldrel = oldrel;
frel = rel;
}
public HandlerList getHandlers()
{
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList()
{
public static HandlerList getHandlerList() {
return handlers;
}
public Relation getOldRelation()
{
public Relation getOldRelation() {
return foldrel;
}
public Relation getRelation()
{
public Relation getRelation() {
return frel;
}
public Faction getFaction()
{
public Faction getFaction() {
return fsender;
}
public Faction getTargetFaction()
{
public Faction getTargetFaction() {
return ftarget;
}
}

View File

@ -1,15 +1,13 @@
package com.massivecraft.factions.event;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
public class FactionRenameEvent extends Event implements Cancellable
{
public class FactionRenameEvent extends Event implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private boolean cancelled;
@ -17,58 +15,48 @@ public class FactionRenameEvent extends Event implements Cancellable
private Faction faction;
private String tag;
public FactionRenameEvent(FPlayer sender, String newTag)
{
public FactionRenameEvent(FPlayer sender, String newTag) {
fplayer = sender;
faction = sender.getFaction();
tag = newTag;
this.cancelled = false;
}
public Faction getFaction()
{
return(faction);
public Faction getFaction() {
return (faction);
}
public FPlayer getFPlayer()
{
return(fplayer);
public FPlayer getFPlayer() {
return (fplayer);
}
public Player getPlayer()
{
return(fplayer.getPlayer());
public Player getPlayer() {
return (fplayer.getPlayer());
}
public String getOldFactionTag()
{
return(faction.getTag());
public String getOldFactionTag() {
return (faction.getTag());
}
public String getFactionTag()
{
return(tag);
public String getFactionTag() {
return (tag);
}
public HandlerList getHandlers()
{
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList()
{
public static HandlerList getHandlerList() {
return handlers;
}
@Override
public boolean isCancelled()
{
public boolean isCancelled() {
return cancelled;
}
@Override
public void setCancelled(boolean c)
{
public void setCancelled(boolean c) {
this.cancelled = c;
}
}

View File

@ -1,16 +1,14 @@
package com.massivecraft.factions.event;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FPlayer;
import org.bukkit.entity.Player;
public class LandClaimEvent extends Event implements Cancellable
{
public class LandClaimEvent extends Event implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private boolean cancelled;
@ -18,63 +16,52 @@ public class LandClaimEvent extends Event implements Cancellable
private Faction faction;
private FPlayer fplayer;
public LandClaimEvent(FLocation loc, Faction f, FPlayer p)
{
public LandClaimEvent(FLocation loc, Faction f, FPlayer p) {
cancelled = false;
location = loc;
faction = f;
fplayer = p;
}
public HandlerList getHandlers()
{
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList()
{
public static HandlerList getHandlerList() {
return handlers;
}
public FLocation getLocation()
{
public FLocation getLocation() {
return this.location;
}
public Faction getFaction()
{
public Faction getFaction() {
return faction;
}
public String getFactionId()
{
public String getFactionId() {
return faction.getId();
}
public String getFactionTag()
{
public String getFactionTag() {
return faction.getTag();
}
public FPlayer getFPlayer()
{
public FPlayer getFPlayer() {
return fplayer;
}
public Player getPlayer()
{
public Player getPlayer() {
return fplayer.getPlayer();
}
@Override
public boolean isCancelled()
{
public boolean isCancelled() {
return cancelled;
}
@Override
public void setCancelled(boolean c)
{
public void setCancelled(boolean c) {
this.cancelled = c;
}
}

View File

@ -1,57 +1,47 @@
package com.massivecraft.factions.event;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FPlayer;
import org.bukkit.entity.Player;
public class LandUnclaimAllEvent extends Event
{
public class LandUnclaimAllEvent extends Event {
private static final HandlerList handlers = new HandlerList();
private Faction faction;
private FPlayer fplayer;
public LandUnclaimAllEvent(Faction f, FPlayer p)
{
public LandUnclaimAllEvent(Faction f, FPlayer p) {
faction = f;
fplayer = p;
}
public HandlerList getHandlers()
{
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList()
{
public static HandlerList getHandlerList() {
return handlers;
}
public Faction getFaction()
{
public Faction getFaction() {
return faction;
}
public String getFactionId()
{
public String getFactionId() {
return faction.getId();
}
public String getFactionTag()
{
public String getFactionTag() {
return faction.getTag();
}
public FPlayer getFPlayer()
{
public FPlayer getFPlayer() {
return fplayer;
}
public Player getPlayer()
{
public Player getPlayer() {
return fplayer.getPlayer();
}
}

View File

@ -1,16 +1,14 @@
package com.massivecraft.factions.event;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FPlayer;
import org.bukkit.entity.Player;
public class LandUnclaimEvent extends Event implements Cancellable
{
public class LandUnclaimEvent extends Event implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private boolean cancelled;
@ -18,57 +16,47 @@ public class LandUnclaimEvent extends Event implements Cancellable
private Faction faction;
private FPlayer fplayer;
public LandUnclaimEvent(FLocation loc, Faction f, FPlayer p)
{
public LandUnclaimEvent(FLocation loc, Faction f, FPlayer p) {
cancelled = false;
location = loc;
faction = f;
fplayer = p;
}
public HandlerList getHandlers()
{
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList()
{
public static HandlerList getHandlerList() {
return handlers;
}
public FLocation getLocation()
{
public FLocation getLocation() {
return this.location;
}
public Faction getFaction()
{
public Faction getFaction() {
return faction;
}
public String getFactionId()
{
public String getFactionId() {
return faction.getId();
}
public String getFactionTag()
{
public String getFactionTag() {
return faction.getTag();
}
public FPlayer getFPlayer()
{
public FPlayer getFPlayer() {
return fplayer;
}
public Player getPlayer()
{
public Player getPlayer() {
return fplayer.getPlayer();
}
@Override
public boolean isCancelled()
{
public boolean isCancelled() {
return cancelled;
}

View File

@ -1,17 +1,14 @@
package com.massivecraft.factions.event;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
import org.bukkit.entity.Player;
public class PowerLossEvent extends Event implements Cancellable
{
public class PowerLossEvent extends Event implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private boolean cancelled;
@ -19,46 +16,38 @@ public class PowerLossEvent extends Event implements Cancellable
private FPlayer fplayer;
private String message;
public PowerLossEvent(Faction f, FPlayer p)
{
public PowerLossEvent(Faction f, FPlayer p) {
cancelled = false;
faction = f;
fplayer = p;
}
@Override
public HandlerList getHandlers()
{
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList()
{
public static HandlerList getHandlerList() {
return handlers;
}
public Faction getFaction()
{
public Faction getFaction() {
return faction;
}
public String getFactionId()
{
public String getFactionId() {
return faction.getId();
}
public String getFactionTag()
{
public String getFactionTag() {
return faction.getTag();
}
public FPlayer getFPlayer()
{
public FPlayer getFPlayer() {
return fplayer;
}
public Player getPlayer()
{
public Player getPlayer() {
return fplayer.getPlayer();
}
@ -71,14 +60,12 @@ public class PowerLossEvent extends Event implements Cancellable
}
@Override
public boolean isCancelled()
{
public boolean isCancelled() {
return cancelled;
}
@Override
public void setCancelled(boolean c)
{
public void setCancelled(boolean c) {
this.cancelled = c;
}

View File

@ -1,7 +1,6 @@
package com.massivecraft.factions.iface;
public interface EconomyParticipator extends RelationParticipator
{
public interface EconomyParticipator extends RelationParticipator {
public String getAccountId();
public void msg(String str, Object... args);

View File

@ -1,15 +1,15 @@
package com.massivecraft.factions.iface;
import com.massivecraft.factions.struct.Relation;
import org.bukkit.ChatColor;
import com.massivecraft.factions.struct.Relation;
public interface RelationParticipator
{
public interface RelationParticipator {
public String describeTo(RelationParticipator that);
public String describeTo(RelationParticipator that, boolean ucfirst);
public Relation getRelationTo(RelationParticipator that);
public Relation getRelationTo(RelationParticipator that, boolean ignorePeaceful);
public ChatColor getColorTo(RelationParticipator to);

View File

@ -1,53 +1,43 @@
package com.massivecraft.factions.integration;
import com.massivecraft.factions.*;
import com.massivecraft.factions.iface.EconomyParticipator;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.util.RelationUtil;
import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.economy.EconomyResponse;
import org.bukkit.Bukkit;
import org.bukkit.plugin.RegisteredServiceProvider;
import java.util.HashSet;
import java.util.Set;
import java.util.logging.Level;
import org.bukkit.Bukkit;
import org.bukkit.plugin.RegisteredServiceProvider;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.P;
import com.massivecraft.factions.iface.EconomyParticipator;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.util.RelationUtil;
import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.economy.EconomyResponse;
public class Econ
{
public class Econ {
private static Economy econ = null;
public static void setup()
{
public static void setup() {
if (isSetup()) return;
String integrationFail = "Economy integration is "+(Conf.econEnabled ? "enabled, but" : "disabled, and")+" the plugin \"Vault\" ";
String integrationFail = "Economy integration is " + (Conf.econEnabled ? "enabled, but" : "disabled, and") + " the plugin \"Vault\" ";
if (Bukkit.getServer().getPluginManager().getPlugin("Vault") == null)
{
P.p.log(integrationFail+"is not installed.");
if (Bukkit.getServer().getPluginManager().getPlugin("Vault") == null) {
P.p.log(integrationFail + "is not installed.");
return;
}
RegisteredServiceProvider<Economy> rsp = Bukkit.getServer().getServicesManager().getRegistration(Economy.class);
if (rsp == null)
{
P.p.log(integrationFail+"is not hooked into an economy plugin.");
if (rsp == null) {
P.p.log(integrationFail + "is not hooked into an economy plugin.");
return;
}
econ = rsp.getProvider();
P.p.log("Economy integration through Vault plugin successful.");
if ( ! Conf.econEnabled)
if (!Conf.econEnabled)
P.p.log("NOTE: Economy is disabled. You can enable it with the command: f config econEnabled true");
P.p.cmdBase.cmdHelp.updateHelp();
@ -55,40 +45,34 @@ public class Econ
oldMoneyDoTransfer();
}
public static boolean shouldBeUsed()
{
public static boolean shouldBeUsed() {
return Conf.econEnabled && econ != null && econ.isEnabled();
}
public static boolean isSetup()
{
public static boolean isSetup() {
return econ != null;
}
public static void modifyUniverseMoney(double delta)
{
public static void modifyUniverseMoney(double delta) {
if (!shouldBeUsed()) return;
if (Conf.econUniverseAccount == null) return;
if (Conf.econUniverseAccount.length() == 0) return;
if ( ! econ.hasAccount(Conf.econUniverseAccount)) return;
if (!econ.hasAccount(Conf.econUniverseAccount)) return;
modifyBalance(Conf.econUniverseAccount, delta);
}
public static void sendBalanceInfo(FPlayer to, EconomyParticipator about)
{
if (!shouldBeUsed())
{
public static void sendBalanceInfo(FPlayer to, EconomyParticipator about) {
if (!shouldBeUsed()) {
P.p.log(Level.WARNING, "Vault does not appear to be hooked into an economy plugin.");
return;
}
to.msg("<a>%s's<i> balance is <h>%s<i>.", about.describeTo(to, true), Econ.moneyString(econ.getBalance(about.getAccountId())));
}
public static boolean canIControllYou(EconomyParticipator i, EconomyParticipator you)
{
public static boolean canIControllYou(EconomyParticipator i, EconomyParticipator you) {
Faction fI = RelationUtil.getFaction(i);
Faction fYou = RelationUtil.getFaction(you);
@ -96,10 +80,10 @@ public class Econ
if (fI == null) return true;
// Bypassing players can do any kind of transaction
if (i instanceof FPlayer && ((FPlayer)i).isAdminBypassing()) return true;
if (i instanceof FPlayer && ((FPlayer) i).isAdminBypassing()) return true;
// Players with the any withdraw can do.
if (i instanceof FPlayer && Permission.MONEY_WITHDRAW_ANY.has(((FPlayer)i).getPlayer())) return true;
if (i instanceof FPlayer && Permission.MONEY_WITHDRAW_ANY.has(((FPlayer) i).getPlayer())) return true;
// You can deposit to anywhere you feel like. It's your loss if you can't withdraw it again.
if (i == you) return true;
@ -110,25 +94,24 @@ public class Econ
if (i == fI && fI == fYou) return true;
// Factions can be controlled by members that are moderators... or any member if any member can withdraw.
if (you instanceof Faction && fI == fYou && (Conf.bankMembersCanWithdraw || ((FPlayer)i).getRole().value >= Role.MODERATOR.value)) return true;
if (you instanceof Faction && fI == fYou && (Conf.bankMembersCanWithdraw || ((FPlayer) i).getRole().value >= Role.MODERATOR.value))
return true;
// Otherwise you may not! ;,,;
i.msg("<h>%s<i> lacks permission to control <h>%s's<i> money.", i.describeTo(i, true), you.describeTo(i));
return false;
}
public static boolean transferMoney(EconomyParticipator invoker, EconomyParticipator from, EconomyParticipator to, double amount)
{
public static boolean transferMoney(EconomyParticipator invoker, EconomyParticipator from, EconomyParticipator to, double amount) {
return transferMoney(invoker, from, to, amount, true);
}
public static boolean transferMoney(EconomyParticipator invoker, EconomyParticipator from, EconomyParticipator to, double amount, boolean notify)
{
if ( ! shouldBeUsed()) return false;
public static boolean transferMoney(EconomyParticipator invoker, EconomyParticipator from, EconomyParticipator to, double amount, boolean notify) {
if (!shouldBeUsed()) return false;
// The amount must be positive.
// If the amount is negative we must flip and multiply amount with -1.
if (amount < 0)
{
if (amount < 0) {
amount *= -1;
EconomyParticipator temp = from;
from = to;
@ -136,11 +119,10 @@ public class Econ
}
// Check the rights
if ( ! canIControllYou(invoker, from)) return false;
if (!canIControllYou(invoker, from)) return false;
// Is there enough money for the transaction to happen?
if ( ! econ.has(from.getAccountId(), amount))
{
if (!econ.has(from.getAccountId(), amount)) {
// There was not enough money to pay
if (invoker != null && notify)
invoker.msg("<h>%s<b> can't afford to transfer <h>%s<b> to %s<b>.", from.describeTo(invoker, true), moneyString(amount), to.describeTo(invoker));
@ -169,69 +151,49 @@ public class Econ
return false;
}
public static Set<FPlayer> getFplayers(EconomyParticipator ep)
{
public static Set<FPlayer> getFplayers(EconomyParticipator ep) {
Set<FPlayer> fplayers = new HashSet<FPlayer>();
if (ep == null)
{
if (ep == null) {
// Add nothing
}
else if (ep instanceof FPlayer)
{
fplayers.add((FPlayer)ep);
}
else if (ep instanceof Faction)
{
fplayers.addAll(((Faction)ep).getFPlayers());
} else if (ep instanceof FPlayer) {
fplayers.add((FPlayer) ep);
} else if (ep instanceof Faction) {
fplayers.addAll(((Faction) ep).getFPlayers());
}
return fplayers;
}
public static void sendTransferInfo(EconomyParticipator invoker, EconomyParticipator from, EconomyParticipator to, double amount)
{
public static void sendTransferInfo(EconomyParticipator invoker, EconomyParticipator from, EconomyParticipator to, double amount) {
Set<FPlayer> recipients = new HashSet<FPlayer>();
recipients.addAll(getFplayers(invoker));
recipients.addAll(getFplayers(from));
recipients.addAll(getFplayers(to));
if (invoker == null)
{
for (FPlayer recipient : recipients)
{
if (invoker == null) {
for (FPlayer recipient : recipients) {
recipient.msg("<h>%s<i> was transfered from <h>%s<i> to <h>%s<i>.", moneyString(amount), from.describeTo(recipient), to.describeTo(recipient));
}
}
else if (invoker == from)
{
for (FPlayer recipient : recipients)
{
} else if (invoker == from) {
for (FPlayer recipient : recipients) {
recipient.msg("<h>%s<i> <h>gave %s<i> to <h>%s<i>.", from.describeTo(recipient, true), moneyString(amount), to.describeTo(recipient));
}
}
else if (invoker == to)
{
for (FPlayer recipient : recipients)
{
} else if (invoker == to) {
for (FPlayer recipient : recipients) {
recipient.msg("<h>%s<i> <h>took %s<i> from <h>%s<i>.", to.describeTo(recipient, true), moneyString(amount), from.describeTo(recipient));
}
}
else
{
for (FPlayer recipient : recipients)
{
} else {
for (FPlayer recipient : recipients) {
recipient.msg("<h>%s<i> transfered <h>%s<i> from <h>%s<i> to <h>%s<i>.", invoker.describeTo(recipient, true), moneyString(amount), from.describeTo(recipient), to.describeTo(recipient));
}
}
}
public static boolean hasAtLeast(EconomyParticipator ep, double delta, String toDoThis)
{
if ( ! shouldBeUsed()) return true;
public static boolean hasAtLeast(EconomyParticipator ep, double delta, String toDoThis) {
if (!shouldBeUsed()) return true;
if ( ! econ.has(ep.getAccountId(), delta))
{
if (!econ.has(ep.getAccountId(), delta)) {
if (toDoThis != null && !toDoThis.isEmpty())
ep.msg("<h>%s<i> can't afford <h>%s<i> %s.", ep.describeTo(ep, true), moneyString(delta), toDoThis);
return false;
@ -239,22 +201,19 @@ public class Econ
return true;
}
public static boolean modifyMoney(EconomyParticipator ep, double delta, String toDoThis, String forDoingThis)
{
if ( ! shouldBeUsed()) return false;
public static boolean modifyMoney(EconomyParticipator ep, double delta, String toDoThis, String forDoingThis) {
if (!shouldBeUsed()) return false;
String acc = ep.getAccountId();
String You = ep.describeTo(ep, true);
if (delta == 0)
{
if (delta == 0) {
// no money actually transferred?
// ep.msg("<h>%s<i> didn't have to pay anything %s.", You, forDoingThis); // might be for gains, might be for losses
return true;
}
if (delta > 0)
{
if (delta > 0) {
// The player should gain money
// The account might not have enough space
EconomyResponse er = econ.depositPlayer(acc, delta);
@ -269,22 +228,17 @@ public class Econ
ep.msg("<h>%s<i> would have gained <h>%s<i> %s, but the deposit failed.", You, moneyString(delta), forDoingThis);
return false;
}
}
else
{
} else {
// The player should loose money
// The player might not have enough.
if (econ.has(acc, -delta) && econ.withdrawPlayer(acc, -delta).transactionSuccess())
{
if (econ.has(acc, -delta) && econ.withdrawPlayer(acc, -delta).transactionSuccess()) {
// There is enough money to pay
modifyUniverseMoney(-delta);
if (forDoingThis != null && !forDoingThis.isEmpty())
ep.msg("<h>%s<i> lost <h>%s<i> %s.", You, moneyString(-delta), forDoingThis);
return true;
}
else
{
} else {
// There was not enough money to pay
if (toDoThis != null && !toDoThis.isEmpty())
ep.msg("<h>%s<i> can't afford <h>%s<i> %s.", You, moneyString(-delta), toDoThis);
@ -294,19 +248,15 @@ public class Econ
}
// format money string based on server's set currency type, like "24 gold" or "$24.50"
public static String moneyString(double amount)
{
public static String moneyString(double amount) {
return econ.format(amount);
}
public static void oldMoneyDoTransfer()
{
if ( ! shouldBeUsed()) return;
public static void oldMoneyDoTransfer() {
if (!shouldBeUsed()) return;
for (Faction faction : Factions.i.get())
{
if (faction.money > 0)
{
for (Faction faction : Factions.i.get()) {
if (faction.money > 0) {
econ.depositPlayer(faction.getAccountId(), faction.money);
faction.money = 0;
}
@ -314,28 +264,24 @@ public class Econ
}
// calculate the cost for claiming land
public static double calculateClaimCost(int ownedLand, boolean takingFromAnotherFaction)
{
if ( ! shouldBeUsed())
{
public static double calculateClaimCost(int ownedLand, boolean takingFromAnotherFaction) {
if (!shouldBeUsed()) {
return 0d;
}
// basic claim cost, plus land inflation cost, minus the potential bonus given for claiming from another faction
return Conf.econCostClaimWilderness
+ (Conf.econCostClaimWilderness * Conf.econClaimAdditionalMultiplier * ownedLand)
- (takingFromAnotherFaction ? Conf.econCostClaimFromFactionBonus: 0);
- (takingFromAnotherFaction ? Conf.econCostClaimFromFactionBonus : 0);
}
// calculate refund amount for unclaiming land
public static double calculateClaimRefund(int ownedLand)
{
public static double calculateClaimRefund(int ownedLand) {
return calculateClaimCost(ownedLand - 1, false) * Conf.econClaimRefundMultiplier;
}
// calculate value of all owned land
public static double calculateTotalLandValue(int ownedLand)
{
public static double calculateTotalLandValue(int ownedLand) {
double amount = 0;
for (int x = 0; x < ownedLand; x++) {
amount += calculateClaimCost(x, false);
@ -344,8 +290,7 @@ public class Econ
}
// calculate refund amount for all owned land
public static double calculateTotalLandRefund(int ownedLand)
{
public static double calculateTotalLandRefund(int ownedLand) {
return calculateTotalLandValue(ownedLand) * Conf.econClaimRefundMultiplier;
}
@ -354,18 +299,15 @@ public class Econ
// Standard account management methods
// -------------------------------------------- //
public static boolean hasAccount(String name)
{
public static boolean hasAccount(String name) {
return econ.hasAccount(name);
}
public static double getBalance(String account)
{
public static double getBalance(String account) {
return econ.getBalance(account);
}
public static boolean setBalance(String account, double amount)
{
public static boolean setBalance(String account, double amount) {
double current = econ.getBalance(account);
if (current > amount)
return econ.withdrawPlayer(account, current - amount).transactionSuccess();
@ -373,21 +315,18 @@ public class Econ
return econ.depositPlayer(account, amount - current).transactionSuccess();
}
public static boolean modifyBalance(String account, double amount)
{
public static boolean modifyBalance(String account, double amount) {
if (amount < 0)
return econ.withdrawPlayer(account, -amount).transactionSuccess();
else
return econ.depositPlayer(account, amount).transactionSuccess();
}
public static boolean deposit(String account, double amount)
{
public static boolean deposit(String account, double amount) {
return econ.depositPlayer(account, amount).transactionSuccess();
}
public static boolean withdraw(String account, double amount)
{
public static boolean withdraw(String account, double amount) {
return econ.withdrawPlayer(account, amount).transactionSuccess();
}
}

View File

@ -1,22 +1,20 @@
package com.massivecraft.factions.integration;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.Location;
import org.bukkit.plugin.Plugin;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.P;
import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.Teleport;
import com.earth2me.essentials.Trade;
import com.earth2me.essentials.chat.EssentialsChat;
import com.earth2me.essentials.chat.EssentialsLocalChatEvent;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.P;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.plugin.Plugin;
/*
@ -26,20 +24,17 @@ import com.earth2me.essentials.chat.EssentialsLocalChatEvent;
// silence deprecation warnings with this old interface
@SuppressWarnings("deprecation")
public class EssentialsFeatures
{
public class EssentialsFeatures {
private static EssentialsChat essChat;
private static IEssentials essentials;
public static void setup()
{
public static void setup() {
// integrate main essentials plugin
// TODO: this is the old Essentials method not supported in 3.0... probably needs to eventually be moved to EssentialsOldVersionFeatures and new method implemented
if (essentials == null)
{
if (essentials == null) {
Plugin ess = Bukkit.getPluginManager().getPlugin("Essentials");
if (ess != null && ess.isEnabled())
essentials = (IEssentials)ess;
essentials = (IEssentials) ess;
}
// integrate chat
@ -48,83 +43,65 @@ public class EssentialsFeatures
Plugin test = Bukkit.getServer().getPluginManager().getPlugin("EssentialsChat");
if (test == null || !test.isEnabled()) return;
essChat = (EssentialsChat)test;
essChat = (EssentialsChat) test;
// try newer Essentials 3.x integration method
try
{
try {
Class.forName("com.earth2me.essentials.chat.EssentialsLocalChatEvent");
integrateChat(essChat);
}
catch (ClassNotFoundException ex)
{
} catch (ClassNotFoundException ex) {
// no? try older Essentials 2.x integration method
try
{
try {
EssentialsOldVersionFeatures.integrateChat(essChat);
}
catch (NoClassDefFoundError ex2) { /* no known integration method, then */ }
} catch (NoClassDefFoundError ex2) { /* no known integration method, then */ }
}
}
public static void unhookChat()
{
public static void unhookChat() {
if (essChat == null) return;
try
{
try {
EssentialsOldVersionFeatures.unhookChat();
} catch (NoClassDefFoundError ex) {
}
catch (NoClassDefFoundError ex) {}
}
// return false if feature is disabled or Essentials isn't available
public static boolean handleTeleport(Player player, Location loc)
{
if ( ! Conf.homesTeleportCommandEssentialsIntegration || essentials == null) return false;
public static boolean handleTeleport(Player player, Location loc) {
if (!Conf.homesTeleportCommandEssentialsIntegration || essentials == null) return false;
Teleport teleport = (Teleport) essentials.getUser(player).getTeleport();
Trade trade = new Trade(Conf.econCostHome, essentials);
try
{
try {
teleport.teleport(loc, trade);
}
catch (Exception e)
{
player.sendMessage(ChatColor.RED.toString()+e.getMessage());
} catch (Exception e) {
player.sendMessage(ChatColor.RED.toString() + e.getMessage());
}
return true;
}
public static void integrateChat(EssentialsChat instance)
{
public static void integrateChat(EssentialsChat instance) {
essChat = instance;
try
{
try {
Bukkit.getServer().getPluginManager().registerEvents(new LocalChatListener(), P.p);
P.p.log("Found and will integrate chat with newer "+essChat.getDescription().getFullName());
P.p.log("Found and will integrate chat with newer " + essChat.getDescription().getFullName());
// curly braces used to be accepted by the format string EssentialsChat but no longer are, so... deal with chatTagReplaceString which might need updating
if (Conf.chatTagReplaceString.contains("{"))
{
if (Conf.chatTagReplaceString.contains("{")) {
Conf.chatTagReplaceString = Conf.chatTagReplaceString.replace("{", "[").replace("}", "]");
P.p.log("NOTE: as of Essentials 2.8+, we've had to switch the default chat replacement tag from \"{FACTION}\" to \"[FACTION]\". This has automatically been updated for you.");
}
}
catch (NoSuchMethodError ex)
{
} catch (NoSuchMethodError ex) {
essChat = null;
}
}
private static class LocalChatListener implements Listener
{
private static class LocalChatListener implements Listener {
@SuppressWarnings("unused")
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerChat(EssentialsLocalChatEvent event)
{
public void onPlayerChat(EssentialsLocalChatEvent event) {
Player speaker = event.getPlayer();
String format = event.getFormat();
format = format.replace(Conf.chatTagReplaceString, P.p.getPlayerFactionTag(speaker)).replace("[FACTION_TITLE]", P.p.getPlayerTitle(speaker));

View File

@ -1,58 +1,46 @@
package com.massivecraft.factions.integration;
import org.bukkit.entity.Player;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.P;
import com.earth2me.essentials.chat.EssentialsChat;
import com.earth2me.essentials.chat.IEssentialsChatListener;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.P;
import org.bukkit.entity.Player;
import org.bukkit.event.player.AsyncPlayerChatEvent;
/*
* This Essentials integration handler is for older 2.x.x versions of Essentials which have "IEssentialsChatListener"
*/
public class EssentialsOldVersionFeatures
{
public class EssentialsOldVersionFeatures {
private static EssentialsChat essChat;
public static void integrateChat(EssentialsChat instance)
{
public static void integrateChat(EssentialsChat instance) {
essChat = instance;
try
{
essChat.addEssentialsChatListener("Factions", new IEssentialsChatListener()
{
public boolean shouldHandleThisChat(AsyncPlayerChatEvent event)
{
try {
essChat.addEssentialsChatListener("Factions", new IEssentialsChatListener() {
public boolean shouldHandleThisChat(AsyncPlayerChatEvent event) {
return P.p.shouldLetFactionsHandleThisChat(event);
}
public String modifyMessage(AsyncPlayerChatEvent event, Player target, String message)
{
public String modifyMessage(AsyncPlayerChatEvent event, Player target, String message) {
return message.replace(Conf.chatTagReplaceString, P.p.getPlayerFactionTagRelation(event.getPlayer(), target)).replace("[FACTION_TITLE]", P.p.getPlayerTitle(event.getPlayer()));
}
});
P.p.log("Found and will integrate chat with "+essChat.getDescription().getFullName());
P.p.log("Found and will integrate chat with " + essChat.getDescription().getFullName());
// As of Essentials 2.8+, curly braces are not accepted and are instead replaced with square braces, so... deal with it
if (essChat.getDescription().getVersion().startsWith("2.8.") && Conf.chatTagReplaceString.contains("{"))
{
if (essChat.getDescription().getVersion().startsWith("2.8.") && Conf.chatTagReplaceString.contains("{")) {
Conf.chatTagReplaceString = Conf.chatTagReplaceString.replace("{", "[").replace("}", "]");
P.p.log("NOTE: as of Essentials 2.8+, we've had to switch the default chat replacement tag from \"{FACTION}\" to \"[FACTION]\". This has automatically been updated for you.");
}
}
catch (NoSuchMethodError ex)
{
} catch (NoSuchMethodError ex) {
essChat = null;
}
}
public static void unhookChat()
{
if (essChat != null)
{
public static void unhookChat() {
if (essChat != null) {
essChat.removeEssentialsChatListener("Factions");
}
}

View File

@ -1,88 +1,70 @@
package com.massivecraft.factions.integration;
import com.griefcraft.lwc.LWC;
import com.griefcraft.lwc.LWCPlugin;
import com.massivecraft.factions.*;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.plugin.Plugin;
import java.util.LinkedList;
import java.util.List;
import org.bukkit.Bukkit;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.plugin.Plugin;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import com.griefcraft.lwc.LWC;
import com.griefcraft.lwc.LWCPlugin;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.P;
public class LWCFeatures
{
public class LWCFeatures {
private static LWC lwc;
public static void setup()
{
public static void setup() {
Plugin test = Bukkit.getServer().getPluginManager().getPlugin("LWC");
if(test == null || !test.isEnabled()) return;
if (test == null || !test.isEnabled()) return;
lwc = ((LWCPlugin)test).getLWC();
P.p.log("Successfully hooked into LWC!"+(Conf.lwcIntegration ? "" : " Integration is currently disabled, though (\"lwcIntegration\")."));
lwc = ((LWCPlugin) test).getLWC();
P.p.log("Successfully hooked into LWC!" + (Conf.lwcIntegration ? "" : " Integration is currently disabled, though (\"lwcIntegration\")."));
}
public static boolean getEnabled()
{
public static boolean getEnabled() {
return Conf.lwcIntegration && lwc != null;
}
public static void clearOtherChests(FLocation flocation, Faction faction)
{
public static void clearOtherChests(FLocation flocation, Faction faction) {
Location location = new Location(Bukkit.getWorld(flocation.getWorldName()), flocation.getX() * 16, 5, flocation.getZ() * 16);
if (location.getWorld() == null) return; // world not loaded or something? cancel out to prevent error
Chunk chunk = location.getChunk();
BlockState[] blocks = chunk.getTileEntities();
List<Block> chests = new LinkedList<Block>();
for(int x = 0; x < blocks.length; x++)
{
if(blocks[x].getType() == Material.CHEST)
{
for (int x = 0; x < blocks.length; x++) {
if (blocks[x].getType() == Material.CHEST) {
chests.add(blocks[x].getBlock());
}
}
for(int x = 0; x < chests.size(); x++)
{
if(lwc.findProtection(chests.get(x)) != null)
{
if(!faction.getFPlayers().contains(FPlayers.i.get(lwc.findProtection(chests.get(x)).getOwner())))
for (int x = 0; x < chests.size(); x++) {
if (lwc.findProtection(chests.get(x)) != null) {
if (!faction.getFPlayers().contains(FPlayers.i.get(lwc.findProtection(chests.get(x)).getOwner())))
lwc.findProtection(chests.get(x)).remove();
}
}
}
public static void clearAllChests(FLocation flocation)
{
public static void clearAllChests(FLocation flocation) {
Location location = new Location(Bukkit.getWorld(flocation.getWorldName()), flocation.getX() * 16, 5, flocation.getZ() * 16);
if (location.getWorld() == null) return; // world not loaded or something? cancel out to prevent error
Chunk chunk = location.getChunk();
BlockState[] blocks = chunk.getTileEntities();
List<Block> chests = new LinkedList<Block>();
for(int x = 0; x < blocks.length; x++)
{
if(blocks[x].getType() == Material.CHEST)
{
for (int x = 0; x < blocks.length; x++) {
if (blocks[x].getType() == Material.CHEST) {
chests.add(blocks[x].getBlock());
}
}
for(int x = 0; x < chests.size(); x++)
{
if(lwc.findProtection(chests.get(x)) != null)
{
for (int x = 0; x < chests.size(); x++) {
if (lwc.findProtection(chests.get(x)) != null) {
lwc.findProtection(chests.get(x)).remove();
}
}

View File

@ -1,35 +1,25 @@
package com.massivecraft.factions.integration;
import com.massivecraft.factions.*;
import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.struct.Role;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import org.getspout.spoutapi.SpoutManager;
import org.getspout.spoutapi.gui.Color;
import org.getspout.spoutapi.player.SpoutPlayer;
import java.util.Set;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.P;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.plugin.Plugin;
import org.bukkit.entity.Player;
import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.struct.Role;
import org.getspout.spoutapi.gui.Color;
import org.getspout.spoutapi.player.SpoutPlayer;
import org.getspout.spoutapi.SpoutManager;
public class SpoutFeatures
{
public class SpoutFeatures {
private transient static boolean spoutMe = false;
private transient static SpoutMainListener mainListener;
private transient static boolean listenersHooked;
public static void setup()
{
public static void setup() {
Plugin test = Bukkit.getServer().getPluginManager().getPlugin("Spout");
if (test == null || !test.isEnabled()) return;
@ -37,15 +27,13 @@ public class SpoutFeatures
}
// set integration availability
public static void setAvailable(boolean enable, String pluginName)
{
public static void setAvailable(boolean enable, String pluginName) {
spoutMe = enable;
if (!spoutMe) return;
P.p.log("Found and will use features of "+pluginName);
P.p.log("Found and will use features of " + pluginName);
if (!listenersHooked)
{
if (!listenersHooked) {
listenersHooked = true;
mainListener = new SpoutMainListener();
Bukkit.getServer().getPluginManager().registerEvents(mainListener, P.p);
@ -53,28 +41,24 @@ public class SpoutFeatures
}
// If we're successfully hooked into Spout
public static boolean enabled()
{
public static boolean enabled() {
return spoutMe;
}
// If Spout is available and the specified Player is running the Spoutcraft client
public static boolean availableFor(Player player)
{
public static boolean availableFor(Player player) {
return spoutMe && SpoutManager.getPlayer(player).isSpoutCraftEnabled();
}
// update displayed current territory for all players inside a specified chunk; if specified chunk is null, then simply update everyone online
public static void updateTerritoryDisplayLoc(FLocation fLoc)
{
public static void updateTerritoryDisplayLoc(FLocation fLoc) {
if (!enabled())
return;
Set<FPlayer> players = FPlayers.i.getOnline();
for (FPlayer player : players)
{
for (FPlayer player : players) {
if (fLoc == null)
mainListener.updateTerritoryDisplay(player, false);
else if (player.getLastStoodAt().equals(fLoc))
@ -83,8 +67,7 @@ public class SpoutFeatures
}
// update displayed current territory for specified player; returns false if unsuccessful
public static boolean updateTerritoryDisplay(FPlayer player)
{
public static boolean updateTerritoryDisplay(FPlayer player) {
if (!enabled())
return false;
@ -92,31 +75,27 @@ public class SpoutFeatures
}
// update owner list for all players inside a specified chunk; if specified chunk is null, then simply update everyone online
public static void updateOwnerListLoc(FLocation fLoc)
{
public static void updateOwnerListLoc(FLocation fLoc) {
if (!enabled())
return;
Set<FPlayer> players = FPlayers.i.getOnline();
for (FPlayer player : players)
{
for (FPlayer player : players) {
if (fLoc == null || player.getLastStoodAt().equals(fLoc))
mainListener.updateOwnerList(player);
}
}
// update owner list for specified player
public static void updateOwnerList(FPlayer player)
{
public static void updateOwnerList(FPlayer player) {
if (!enabled())
return;
mainListener.updateOwnerList(player);
}
public static void playerDisconnect(FPlayer player)
{
public static void playerDisconnect(FPlayer player) {
if (!enabled())
return;
@ -125,66 +104,55 @@ public class SpoutFeatures
// update all appearances between every player
public static void updateAppearances()
{
public static void updateAppearances() {
if (!enabled())
return;
Set<FPlayer> players = FPlayers.i.getOnline();
for (FPlayer playerA : players)
{
for (FPlayer playerB : players)
{
for (FPlayer playerA : players) {
for (FPlayer playerB : players) {
updateSingle(playerB, playerA);
}
}
}
// update all appearances related to a specific player
public static void updateAppearances(Player player)
{
public static void updateAppearances(Player player) {
if (!enabled() || player == null)
return;
Set<FPlayer> players = FPlayers.i.getOnline();
FPlayer playerA = FPlayers.i.get(player);
for (FPlayer playerB : players)
{
for (FPlayer playerB : players) {
updateSingle(playerB, playerA);
updateSingle(playerA, playerB);
}
}
// as above method, but with a delay added; useful for after-login update which doesn't always propagate if done immediately
public static void updateAppearancesShortly(final Player player)
{
P.p.getServer().getScheduler().scheduleSyncDelayedTask(P.p, new Runnable()
{
public static void updateAppearancesShortly(final Player player) {
P.p.getServer().getScheduler().scheduleSyncDelayedTask(P.p, new Runnable() {
@Override
public void run()
{
public void run() {
updateAppearances(player);
}
}, 100);
}
// update all appearances related to a single faction
public static void updateAppearances(Faction faction)
{
public static void updateAppearances(Faction faction) {
if (!enabled() || faction == null)
return;
Set<FPlayer> players = FPlayers.i.getOnline();
Faction factionA;
for (FPlayer playerA : players)
{
for (FPlayer playerA : players) {
factionA = playerA.getFaction();
for (FPlayer playerB : players)
{
for (FPlayer playerB : players) {
if (factionA != faction && playerB.getFaction() != faction)
continue;
@ -194,15 +162,12 @@ public class SpoutFeatures
}
// update all appearances between two factions
public static void updateAppearances(Faction factionA, Faction factionB)
{
public static void updateAppearances(Faction factionA, Faction factionB) {
if (!enabled() || factionA == null || factionB == null)
return;
for (FPlayer playerA : factionA.getFPlayersWhereOnline(true))
{
for (FPlayer playerB : factionB.getFPlayersWhereOnline(true))
{
for (FPlayer playerA : factionA.getFPlayersWhereOnline(true)) {
for (FPlayer playerB : factionB.getFPlayersWhereOnline(true)) {
updateSingle(playerB, playerA);
updateSingle(playerA, playerB);
}
@ -211,8 +176,7 @@ public class SpoutFeatures
// update a single appearance; internal use only by above public methods
private static void updateSingle(FPlayer viewer, FPlayer viewed)
{
private static void updateSingle(FPlayer viewer, FPlayer viewed) {
if (viewer == null || viewed == null)
return;
@ -232,10 +196,8 @@ public class SpoutFeatures
String viewedTitle = viewed.getTitle();
Role viewedRole = viewed.getRole();
if ((Conf.spoutFactionTagsOverNames || Conf.spoutFactionTitlesOverNames) && viewer != viewed)
{
if (viewedFaction.isNormal())
{
if ((Conf.spoutFactionTagsOverNames || Conf.spoutFactionTitlesOverNames) && viewer != viewed) {
if (viewedFaction.isNormal()) {
String addTag = "";
if (Conf.spoutFactionTagsOverNames)
addTag += viewedFaction.getTag(viewed.getColorTo(viewer).toString() + "[") + "]";
@ -245,9 +207,7 @@ public class SpoutFeatures
addTag += (addTag.isEmpty() ? "" : " ") + viewedRole.getPrefix() + viewedTitle;
pViewed.setTitleFor(pViewer, addTag + "\n" + pViewed.getDisplayName());
}
else
{
} else {
pViewed.setTitleFor(pViewer, pViewed.getDisplayName());
}
}
@ -265,15 +225,12 @@ public class SpoutFeatures
&&
viewedRole.equals(Role.MODERATOR)
)
)
{
) {
Relation relation = viewer.getRelationTo(viewed);
String cape = "";
if (!viewedFaction.isNormal())
{
if (!viewedFaction.isNormal()) {
// yeah, no cape if no faction
}
else if (viewedFaction.isPeaceful())
} else if (viewedFaction.isPeaceful())
cape = Conf.capePeaceful;
else if (relation.isNeutral())
cape = Conf.capeNeutral;
@ -288,42 +245,54 @@ public class SpoutFeatures
pViewed.resetCapeFor(pViewer);
else
pViewed.setCapeFor(pViewer, cape);
}
else if (Conf.spoutFactionAdminCapes || Conf.spoutFactionModeratorCapes)
{
} else if (Conf.spoutFactionAdminCapes || Conf.spoutFactionModeratorCapes) {
pViewed.resetCapeFor(pViewer);
}
}
// method to convert a Bukkit ChatColor to a Spout Color
protected static Color getSpoutColor(ChatColor inColor, int alpha)
{
protected static Color getSpoutColor(ChatColor inColor, int alpha) {
if (inColor == null)
return SpoutFixedColor(191, 191, 191, alpha);
switch (inColor.getChar())
{
case 0x1: return SpoutFixedColor(0, 0, 191, alpha);
case 0x2: return SpoutFixedColor(0, 191, 0, alpha);
case 0x3: return SpoutFixedColor(0, 191, 191, alpha);
case 0x4: return SpoutFixedColor(191, 0, 0, alpha);
case 0x5: return SpoutFixedColor(191, 0, 191, alpha);
case 0x6: return SpoutFixedColor(191, 191, 0, alpha);
case 0x7: return SpoutFixedColor(191, 191, 191, alpha);
case 0x8: return SpoutFixedColor(64, 64, 64, alpha);
case 0x9: return SpoutFixedColor(64, 64, 255, alpha);
case 0xA: return SpoutFixedColor(64, 255, 64, alpha);
case 0xB: return SpoutFixedColor(64, 255, 255, alpha);
case 0xC: return SpoutFixedColor(255, 64, 64, alpha);
case 0xD: return SpoutFixedColor(255, 64, 255, alpha);
case 0xE: return SpoutFixedColor(255, 255, 64, alpha);
case 0xF: return SpoutFixedColor(255, 255, 255, alpha);
default: return SpoutFixedColor(0, 0, 0, alpha);
switch (inColor.getChar()) {
case 0x1:
return SpoutFixedColor(0, 0, 191, alpha);
case 0x2:
return SpoutFixedColor(0, 191, 0, alpha);
case 0x3:
return SpoutFixedColor(0, 191, 191, alpha);
case 0x4:
return SpoutFixedColor(191, 0, 0, alpha);
case 0x5:
return SpoutFixedColor(191, 0, 191, alpha);
case 0x6:
return SpoutFixedColor(191, 191, 0, alpha);
case 0x7:
return SpoutFixedColor(191, 191, 191, alpha);
case 0x8:
return SpoutFixedColor(64, 64, 64, alpha);
case 0x9:
return SpoutFixedColor(64, 64, 255, alpha);
case 0xA:
return SpoutFixedColor(64, 255, 64, alpha);
case 0xB:
return SpoutFixedColor(64, 255, 255, alpha);
case 0xC:
return SpoutFixedColor(255, 64, 64, alpha);
case 0xD:
return SpoutFixedColor(255, 64, 255, alpha);
case 0xE:
return SpoutFixedColor(255, 255, 64, alpha);
case 0xF:
return SpoutFixedColor(255, 255, 255, alpha);
default:
return SpoutFixedColor(0, 0, 0, alpha);
}
}
private static Color SpoutFixedColor(int r, int g, int b, int a)
{
return new Color(r/255.0f, g/255.0f, b/255.0f, a/255.0f);
private static Color SpoutFixedColor(int r, int g, int b, int a) {
return new Color(r / 255.0f, g / 255.0f, b / 255.0f, a / 255.0f);
}
}

View File

@ -1,32 +1,22 @@
package com.massivecraft.factions.integration;
import java.util.HashMap;
import java.util.Map;
import com.massivecraft.factions.*;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import com.massivecraft.factions.Board;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.P;
import org.getspout.spoutapi.SpoutManager;
import org.getspout.spoutapi.event.spout.SpoutCraftEnableEvent;
import org.getspout.spoutapi.gui.GenericLabel;
import org.getspout.spoutapi.player.SpoutPlayer;
import org.getspout.spoutapi.SpoutManager;
import java.util.HashMap;
import java.util.Map;
public class SpoutMainListener implements Listener
{
public class SpoutMainListener implements Listener {
@EventHandler(priority = EventPriority.NORMAL)
public void onSpoutCraftEnable(SpoutCraftEnableEvent event)
{
public void onSpoutCraftEnable(SpoutCraftEnableEvent event) {
final FPlayer me = FPlayers.i.get(event.getPlayer());
SpoutFeatures.updateAppearances(me.getPlayer());
@ -44,14 +34,13 @@ public class SpoutMainListener implements Listener
// private final static int SCREEN_HEIGHT = 240;
public boolean updateTerritoryDisplay(FPlayer player, boolean notify)
{
public boolean updateTerritoryDisplay(FPlayer player, boolean notify) {
Player p = player.getPlayer();
if (p == null)
return false;
SpoutPlayer sPlayer = SpoutManager.getPlayer(p);
if (!sPlayer.isSpoutCraftEnabled() || (Conf.spoutTerritoryDisplaySize <= 0 && ! Conf.spoutTerritoryNoticeShow))
if (!sPlayer.isSpoutCraftEnabled() || (Conf.spoutTerritoryDisplaySize <= 0 && !Conf.spoutTerritoryNoticeShow))
return false;
doLabels(player, sPlayer, notify);
@ -59,10 +48,9 @@ public class SpoutMainListener implements Listener
return true;
}
public void updateOwnerList(FPlayer player)
{
public void updateOwnerList(FPlayer player) {
SpoutPlayer sPlayer = SpoutManager.getPlayer(player.getPlayer());
if (!sPlayer.isSpoutCraftEnabled() || (Conf.spoutTerritoryDisplaySize <= 0 && ! Conf.spoutTerritoryNoticeShow))
if (!sPlayer.isSpoutCraftEnabled() || (Conf.spoutTerritoryDisplaySize <= 0 && !Conf.spoutTerritoryNoticeShow))
return;
FLocation here = player.getLastStoodAt();
@ -73,16 +61,14 @@ public class SpoutMainListener implements Listener
return;
}
public void removeTerritoryLabels(String playerName)
{
public void removeTerritoryLabels(String playerName) {
territoryLabels.remove(playerName);
territoryChangeLabels.remove(playerName);
ownerLabels.remove(playerName);
}
private void doLabels(FPlayer player, SpoutPlayer sPlayer, boolean notify)
{
private void doLabels(FPlayer player, SpoutPlayer sPlayer, boolean notify) {
FLocation here = player.getLastStoodAt();
Faction factionHere = Board.getFactionAt(here);
String tag = factionHere.getColorTo(player).toString() + factionHere.getTag();
@ -90,13 +76,11 @@ public class SpoutMainListener implements Listener
// ----------------------
// Main territory display
// ----------------------
if (Conf.spoutTerritoryDisplayPosition > 0 && Conf.spoutTerritoryDisplaySize > 0)
{
if (Conf.spoutTerritoryDisplayPosition > 0 && Conf.spoutTerritoryDisplaySize > 0) {
GenericLabel label;
if (territoryLabels.containsKey(player.getName()))
label = territoryLabels.get(player.getName());
else
{
else {
label = new GenericLabel();
label.setWidth(1).setHeight(1); // prevent Spout's questionable new "no default size" warning
label.setScale(Conf.spoutTerritoryDisplaySize);
@ -118,13 +102,11 @@ public class SpoutMainListener implements Listener
// -----------------------
// Fading territory notice
// -----------------------
if (notify && Conf.spoutTerritoryNoticeShow && Conf.spoutTerritoryNoticeSize > 0)
{
if (notify && Conf.spoutTerritoryNoticeShow && Conf.spoutTerritoryNoticeSize > 0) {
NoticeLabel label;
if (territoryChangeLabels.containsKey(player.getName()))
label = territoryChangeLabels.get(player.getName());
else
{
else {
label = new NoticeLabel(Conf.spoutTerritoryNoticeLeaveAfterSeconds);
label.setWidth(1).setHeight(1); // prevent Spout's questionable new "no default size" warning
label.setScale(Conf.spoutTerritoryNoticeSize);
@ -148,30 +130,26 @@ public class SpoutMainListener implements Listener
doOwnerList(player, sPlayer, here, factionHere);
}
private void doOwnerList(FPlayer player, SpoutPlayer sPlayer, FLocation here, Faction factionHere)
{
private void doOwnerList(FPlayer player, SpoutPlayer sPlayer, FLocation here, Faction factionHere) {
// ----------
// Owner list
// ----------
if (Conf.spoutTerritoryDisplayPosition > 0 && Conf.spoutTerritoryDisplaySize > 0 && Conf.spoutTerritoryOwnersShow && Conf.ownedAreasEnabled)
{
if (Conf.spoutTerritoryDisplayPosition > 0 && Conf.spoutTerritoryDisplaySize > 0 && Conf.spoutTerritoryOwnersShow && Conf.ownedAreasEnabled) {
GenericLabel label;
if (ownerLabels.containsKey(player.getName()))
label = ownerLabels.get(player.getName());
else
{
else {
label = new GenericLabel();
label.setWidth(1).setHeight(1); // prevent Spout's questionable new "no default size" warning
label.setScale(Conf.spoutTerritoryDisplaySize);
label.setY((int)(10 * Conf.spoutTerritoryDisplaySize));
label.setY((int) (10 * Conf.spoutTerritoryDisplaySize));
sPlayer.getMainScreen().attachWidget(P.p, label);
ownerLabels.put(player.getName(), label);
}
String msg = "";
if (player.getFaction() == factionHere)
{
if (player.getFaction() == factionHere) {
msg = factionHere.getOwnerListString(here);
if (!msg.isEmpty())
@ -186,21 +164,18 @@ public class SpoutMainListener implements Listener
// this is only necessary because Spout text size scaling is currently bugged and breaks their built-in alignment methods
public void alignLabel(GenericLabel label, String text)
{
public void alignLabel(GenericLabel label, String text) {
alignLabel(label, text, Conf.spoutTerritoryDisplayPosition);
}
public void alignLabel(GenericLabel label, String text, int alignment)
{
int labelWidth = (int)((float)GenericLabel.getStringWidth(text) * Conf.spoutTerritoryDisplaySize);
if (labelWidth > SCREEN_WIDTH)
{
public void alignLabel(GenericLabel label, String text, int alignment) {
int labelWidth = (int) ((float) GenericLabel.getStringWidth(text) * Conf.spoutTerritoryDisplaySize);
if (labelWidth > SCREEN_WIDTH) {
label.setX(0);
return;
}
switch (alignment)
{
switch (alignment) {
case 1: // left aligned
label.setX(0);
break;
@ -213,32 +188,27 @@ public class SpoutMainListener implements Listener
}
private static class NoticeLabel extends GenericLabel
{
private static class NoticeLabel extends GenericLabel {
private int initial;
private int countdown; // current delay countdown
public NoticeLabel(float secondsOfLife)
{
initial = (int)(secondsOfLife * 20);
public NoticeLabel(float secondsOfLife) {
initial = (int) (secondsOfLife * 20);
resetNotice();
}
public final void resetNotice()
{
public final void resetNotice() {
countdown = initial;
}
@Override
public void onTick()
{
public void onTick() {
if (countdown <= 0)
return;
this.countdown -= 1;
if (this.countdown <= 0)
{
if (this.countdown <= 0) {
this.setText("");
this.setDirty(true);
}

View File

@ -1,56 +1,49 @@
package com.massivecraft.factions.integration;
import com.massivecraft.factions.P;
import com.sk89q.worldedit.BlockVector;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.flags.DefaultFlag;
import com.sk89q.worldguard.protection.managers.RegionManager;
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.managers.RegionManager;
import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import static com.sk89q.worldguard.bukkit.BukkitUtil.*;
import com.sk89q.worldguard.protection.flags.DefaultFlag;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.BlockVector;
import org.bukkit.World;
import org.bukkit.Chunk;
import org.bukkit.Location;
import org.bukkit.plugin.Plugin;
import org.bukkit.entity.Player;
/*
* Worldguard Region Checking
* Author: Spathizilla
*/
public class Worldguard
{
public class Worldguard {
private static WorldGuardPlugin wg;
private static boolean enabled = false;
public static void init(Plugin plugin)
{
public static void init(Plugin plugin) {
Plugin wgplug = plugin.getServer().getPluginManager().getPlugin("WorldGuard");
if (wgplug == null || !(wgplug instanceof WorldGuardPlugin))
{
if (wgplug == null || !(wgplug instanceof WorldGuardPlugin)) {
enabled = false;
wg = null;
P.p.log("Could not hook to WorldGuard. WorldGuard checks are disabled.");
}
else
{
} else {
wg = (WorldGuardPlugin) wgplug;
enabled = true;
P.p.log("Successfully hooked to WorldGuard.");
}
}
public static boolean isEnabled()
{
public static boolean isEnabled() {
return enabled;
}
@ -58,10 +51,8 @@ public class Worldguard
// Returns:
// True: PVP is allowed
// False: PVP is disallowed
public static boolean isPVP(Player player)
{
if( ! enabled)
{
public static boolean isPVP(Player player) {
if (!enabled) {
// No WG hooks so we'll always bypass this check.
return true;
}
@ -79,10 +70,8 @@ public class Worldguard
// Returns:
// True: Player can build in the region.
// False: Player can not build in the region.
public static boolean playerCanBuild(Player player, Location loc)
{
if( ! enabled)
{
public static boolean playerCanBuild(Player player, Location loc) {
if (!enabled) {
// No WG hooks so we'll always bypass this check.
return false;
}
@ -99,10 +88,8 @@ public class Worldguard
// Returns:
// True: Regions found within chunk
// False: No regions found within chunk
public static boolean checkForRegionsInChunk(Location loc)
{
if( ! enabled)
{
public static boolean checkForRegionsInChunk(Location loc) {
if (!enabled) {
// No WG hooks so we'll always bypass this check.
return false;
}
@ -126,20 +113,14 @@ public class Worldguard
List<ProtectedRegion> overlaps;
boolean foundregions = false;
try
{
try {
overlaps = region.getIntersectingRegions(allregionslist);
if(overlaps == null || overlaps.isEmpty())
{
if (overlaps == null || overlaps.isEmpty()) {
foundregions = false;
}
else
{
} else {
foundregions = true;
}
}
catch (Exception e)
{
} catch (Exception e) {
e.printStackTrace();
}

View File

@ -1,17 +1,13 @@
package com.massivecraft.factions.integration.capi;
import com.massivecraft.factions.P;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
import com.massivecraft.factions.P;
public class CapiFeatures
{
public static void setup()
{
public class CapiFeatures {
public static void setup() {
Plugin plug = Bukkit.getServer().getPluginManager().getPlugin("capi");
if (plug != null && plug.getClass().getName().equals("com.massivecraft.capi.P"))
{
if (plug != null && plug.getClass().getName().equals("com.massivecraft.capi.P")) {
P.p.log("Integration with the CAPI plugin was successful");
Bukkit.getPluginManager().registerEvents(new PluginCapiListener(P.p), P.p);
}

View File

@ -1,14 +1,5 @@
package com.massivecraft.factions.integration.capi;
import java.util.LinkedHashSet;
import java.util.Set;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import com.massivecraft.capi.Channel;
import com.massivecraft.capi.Channels;
import com.massivecraft.capi.events.CAPIListChannelsEvent;
@ -20,104 +11,97 @@ import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.P;
import com.massivecraft.factions.struct.Relation;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
public class PluginCapiListener implements Listener
{
import java.util.LinkedHashSet;
import java.util.Set;
public class PluginCapiListener implements Listener {
P p;
Set<String> myChannelIds = new LinkedHashSet<String>();
public PluginCapiListener(P p)
{
public PluginCapiListener(P p) {
this.p = p;
myChannelIds.add("faction");
myChannelIds.add("allies");
}
private String replacePlayerTags(String format, FPlayer me, FPlayer you)
{
private String replacePlayerTags(String format, FPlayer me, FPlayer you) {
String meFactionTag = me.getChatTag(you);
format = format.replace("{ME_FACTIONTAG}", meFactionTag.length() == 0 ? "" : meFactionTag);
format = format.replace("{ME_FACTIONTAG_PADR}", meFactionTag.length() == 0 ? "" : meFactionTag+" ");
format = format.replace("{ME_FACTIONTAG_PADL}", meFactionTag.length() == 0 ? "" : " "+meFactionTag);
format = format.replace("{ME_FACTIONTAG_PADB}", meFactionTag.length() == 0 ? "" : " "+meFactionTag+" ");
format = format.replace("{ME_FACTIONTAG_PADR}", meFactionTag.length() == 0 ? "" : meFactionTag + " ");
format = format.replace("{ME_FACTIONTAG_PADL}", meFactionTag.length() == 0 ? "" : " " + meFactionTag);
format = format.replace("{ME_FACTIONTAG_PADB}", meFactionTag.length() == 0 ? "" : " " + meFactionTag + " ");
String youFactionTag = you.getChatTag(me);
format = format.replace("{YOU_FACTIONTAG}", youFactionTag.length() == 0 ? "" : youFactionTag);
format = format.replace("{YOU_FACTIONTAG_PADR}", youFactionTag.length() == 0 ? "" : youFactionTag+" ");
format = format.replace("{YOU_FACTIONTAG_PADL}", youFactionTag.length() == 0 ? "" : " "+youFactionTag);
format = format.replace("{YOU_FACTIONTAG_PADB}", youFactionTag.length() == 0 ? "" : " "+youFactionTag+" ");
format = format.replace("{YOU_FACTIONTAG_PADR}", youFactionTag.length() == 0 ? "" : youFactionTag + " ");
format = format.replace("{YOU_FACTIONTAG_PADL}", youFactionTag.length() == 0 ? "" : " " + youFactionTag);
format = format.replace("{YOU_FACTIONTAG_PADB}", youFactionTag.length() == 0 ? "" : " " + youFactionTag + " ");
return format;
}
@EventHandler(priority = EventPriority.NORMAL)
public void onListChannelsEvent(CAPIListChannelsEvent event)
{
for (Channel c : Channels.i.getAll())
{
if (myChannelIds.contains(c.getId()))
{
public void onListChannelsEvent(CAPIListChannelsEvent event) {
for (Channel c : Channels.i.getAll()) {
if (myChannelIds.contains(c.getId())) {
event.getChannels().add(c);
}
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onMessageToChannel(CAPIMessageToChannelEvent event)
{
public void onMessageToChannel(CAPIMessageToChannelEvent event) {
if (event.isCancelled()) return;
if ( ! myChannelIds.contains(event.getChannel().getId())) return;
if (!myChannelIds.contains(event.getChannel().getId())) return;
Player me = event.getMe();
FPlayer fme = FPlayers.i.get(me);
Faction myFaction = fme.getFaction();
if (event.getChannel().getId().equals("faction") && myFaction.isNormal())
{
if (event.getChannel().getId().equals("faction") && myFaction.isNormal()) {
event.getThem().addAll(myFaction.getOnlinePlayers());
// Send to any players who are spying chat... could probably be implemented better than this
for (FPlayer fplayer : FPlayers.i.getOnline())
{
if(fplayer.isSpyingChat() && fplayer.getFaction() != myFaction)
fplayer.sendMessage("[FCspy] "+myFaction.getTag()+": "+event.getMessage());
for (FPlayer fplayer : FPlayers.i.getOnline()) {
if (fplayer.isSpyingChat() && fplayer.getFaction() != myFaction)
fplayer.sendMessage("[FCspy] " + myFaction.getTag() + ": " + event.getMessage());
}
}
else if (event.getChannel().getId().equals("allies"))
{
for (Player somePlayer : Bukkit.getServer().getOnlinePlayers())
{
} else if (event.getChannel().getId().equals("allies")) {
for (Player somePlayer : Bukkit.getServer().getOnlinePlayers()) {
FPlayer someFPlayer = FPlayers.i.get(somePlayer);
if (someFPlayer.getRelationTo(fme).isAtLeast(Relation.ALLY))
event.getThem().add(somePlayer);
// Send to any players who are spying chat
else if(someFPlayer.isSpyingChat())
else if (someFPlayer.isSpyingChat())
someFPlayer.sendMessage("[ACspy]: " + event.getMessage());
}
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onMessageToPlayer(CAPIMessageToPlayerEvent event)
{
public void onMessageToPlayer(CAPIMessageToPlayerEvent event) {
if (event.isCancelled()) return;
event.setFormat(this.replacePlayerTags(event.getFormat(), FPlayers.i.get(event.getMe()), FPlayers.i.get(event.getYou())));
}
@EventHandler(priority = EventPriority.NORMAL)
public void onSelectChannel(CAPISelectChannelEvent event)
{
public void onSelectChannel(CAPISelectChannelEvent event) {
if (event.isCancelled()) return;
String channelId = event.getChannel().getId();
if ( ! myChannelIds.contains(channelId)) return;
if (!myChannelIds.contains(channelId)) return;
Player me = event.getMe();
FPlayer fme = FPlayers.i.get(me);
if ( ! fme.hasFaction())
{
if (!fme.hasFaction()) {
event.setFailMessage(p.txt.parse("<b>You must be member in a faction to use this channel."));
event.setCancelled(true);
}

View File

@ -1,5 +1,9 @@
package com.massivecraft.factions.listeners;
import com.massivecraft.factions.*;
import com.massivecraft.factions.integration.Worldguard;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Relation;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
@ -7,75 +11,52 @@ import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockDamageEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.block.BlockPistonExtendEvent;
import org.bukkit.event.block.BlockPistonRetractEvent;
import com.massivecraft.factions.Board;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.P;
import com.massivecraft.factions.integration.Worldguard;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Relation;
import org.bukkit.event.block.*;
public class FactionsBlockListener implements Listener
{
public class FactionsBlockListener implements Listener {
public P p;
public FactionsBlockListener(P p)
{
public FactionsBlockListener(P p) {
this.p = p;
}
@EventHandler(priority = EventPriority.NORMAL)
public void onBlockPlace(BlockPlaceEvent event)
{
public void onBlockPlace(BlockPlaceEvent event) {
if (event.isCancelled()) return;
if ( ! event.canBuild()) return;
if (!event.canBuild()) return;
// special case for flint&steel, which should only be prevented by DenyUsage list
if (event.getBlockPlaced().getType() == Material.FIRE)
{
if (event.getBlockPlaced().getType() == Material.FIRE) {
return;
}
if ( ! playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock().getLocation(), "build", false))
if (!playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock().getLocation(), "build", false))
event.setCancelled(true);
}
@EventHandler(priority = EventPriority.NORMAL)
public void onBlockBreak(BlockBreakEvent event)
{
public void onBlockBreak(BlockBreakEvent event) {
if (event.isCancelled()) return;
if ( ! playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock().getLocation(), "destroy", false))
{
if (!playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock().getLocation(), "destroy", false)) {
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onBlockDamage(BlockDamageEvent event)
{
public void onBlockDamage(BlockDamageEvent event) {
if (event.isCancelled()) return;
if (event.getInstaBreak() && ! playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock().getLocation(), "destroy", false))
{
if (event.getInstaBreak() && !playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock().getLocation(), "destroy", false)) {
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onBlockPistonExtend(BlockPistonExtendEvent event)
{
public void onBlockPistonExtend(BlockPistonExtendEvent event) {
if (event.isCancelled()) return;
if ( ! Conf.pistonProtectionThroughDenyBuild) return;
if (!Conf.pistonProtectionThroughDenyBuild) return;
Faction pistonFaction = Board.getFactionAt(new FLocation(event.getBlock()));
@ -83,8 +64,7 @@ public class FactionsBlockListener implements Listener
Block targetBlock = event.getBlock().getRelative(event.getDirection(), event.getLength() + 1);
// if potentially pushing into air/water/lava in another territory, we need to check it out
if ((targetBlock.isEmpty() || targetBlock.isLiquid()) && !canPistonMoveBlock(pistonFaction, targetBlock.getLocation()))
{
if ((targetBlock.isEmpty() || targetBlock.isLiquid()) && !canPistonMoveBlock(pistonFaction, targetBlock.getLocation())) {
event.setCancelled(true);
return;
}
@ -97,56 +77,46 @@ public class FactionsBlockListener implements Listener
}
@EventHandler(priority = EventPriority.NORMAL)
public void onBlockPistonRetract(BlockPistonRetractEvent event)
{
public void onBlockPistonRetract(BlockPistonRetractEvent event) {
// if not a sticky piston, retraction should be fine
if (event.isCancelled() || !event.isSticky() || !Conf.pistonProtectionThroughDenyBuild)
{
if (event.isCancelled() || !event.isSticky() || !Conf.pistonProtectionThroughDenyBuild) {
return;
}
Location targetLoc = event.getRetractLocation();
// if potentially retracted block is just air/water/lava, no worries
if (targetLoc.getBlock().isEmpty() || targetLoc.getBlock().isLiquid())
{
if (targetLoc.getBlock().isEmpty() || targetLoc.getBlock().isLiquid()) {
return;
}
Faction pistonFaction = Board.getFactionAt(new FLocation(event.getBlock()));
if (!canPistonMoveBlock(pistonFaction, targetLoc))
{
if (!canPistonMoveBlock(pistonFaction, targetLoc)) {
event.setCancelled(true);
return;
}
}
private boolean canPistonMoveBlock(Faction pistonFaction, Location target)
{
private boolean canPistonMoveBlock(Faction pistonFaction, Location target) {
Faction otherFaction = Board.getFactionAt(new FLocation(target));
if (pistonFaction == otherFaction)
return true;
if (otherFaction.isNone())
{
if (otherFaction.isNone()) {
if (!Conf.wildernessDenyBuild || Conf.worldsNoWildernessProtection.contains(target.getWorld().getName()))
return true;
return false;
}
else if (otherFaction.isSafeZone())
{
if ( ! Conf.safeZoneDenyBuild)
} else if (otherFaction.isSafeZone()) {
if (!Conf.safeZoneDenyBuild)
return true;
return false;
}
else if (otherFaction.isWarZone())
{
if ( ! Conf.warZoneDenyBuild)
} else if (otherFaction.isWarZone()) {
if (!Conf.warZoneDenyBuild)
return true;
return false;
@ -160,8 +130,7 @@ public class FactionsBlockListener implements Listener
return true;
}
public static boolean playerCanBuildDestroyBlock(Player player, Location location, String action, boolean justCheck)
{
public static boolean playerCanBuildDestroyBlock(Player player, Location location, String action, boolean justCheck) {
String name = player.getName();
if (Conf.playersWhoBypassAllProtection.contains(name)) return true;
@ -171,8 +140,7 @@ public class FactionsBlockListener implements Listener
FLocation loc = new FLocation(location);
Faction otherFaction = Board.getFactionAt(loc);
if (otherFaction.isNone())
{
if (otherFaction.isNone()) {
if (Conf.worldGuardBuildPriority && Worldguard.playerCanBuild(player, location))
return true;
@ -180,12 +148,10 @@ public class FactionsBlockListener implements Listener
return true; // This is not faction territory. Use whatever you like here.
if (!justCheck)
me.msg("<b>You can't "+action+" in the wilderness.");
me.msg("<b>You can't " + action + " in the wilderness.");
return false;
}
else if (otherFaction.isSafeZone())
{
} else if (otherFaction.isSafeZone()) {
if (Conf.worldGuardBuildPriority && Worldguard.playerCanBuild(player, location))
return true;
@ -193,12 +159,10 @@ public class FactionsBlockListener implements Listener
return true;
if (!justCheck)
me.msg("<b>You can't "+action+" in a safe zone.");
me.msg("<b>You can't " + action + " in a safe zone.");
return false;
}
else if (otherFaction.isWarZone())
{
} else if (otherFaction.isWarZone()) {
if (Conf.worldGuardBuildPriority && Worldguard.playerCanBuild(player, location))
return true;
@ -206,7 +170,7 @@ public class FactionsBlockListener implements Listener
return true;
if (!justCheck)
me.msg("<b>You can't "+action+" in a war zone.");
me.msg("<b>You can't " + action + " in a war zone.");
return false;
}
@ -218,37 +182,32 @@ public class FactionsBlockListener implements Listener
boolean deny = rel.confDenyBuild(online);
// hurt the player for building/destroying in other territory?
if (pain)
{
if (pain) {
player.damage(Conf.actionDeniedPainAmount);
if (!deny)
me.msg("<b>It is painful to try to "+action+" in the territory of "+otherFaction.getTag(myFaction));
me.msg("<b>It is painful to try to " + action + " in the territory of " + otherFaction.getTag(myFaction));
}
// cancel building/destroying in other territory?
if (deny)
{
if (deny) {
if (!justCheck)
me.msg("<b>You can't "+action+" in the territory of "+otherFaction.getTag(myFaction));
me.msg("<b>You can't " + action + " in the territory of " + otherFaction.getTag(myFaction));
return false;
}
// Also cancel and/or cause pain if player doesn't have ownership rights for this claim
if (Conf.ownedAreasEnabled && (Conf.ownedAreaDenyBuild || Conf.ownedAreaPainBuild) && !otherFaction.playerHasOwnershipRights(me, loc))
{
if (!pain && Conf.ownedAreaPainBuild && !justCheck)
{
if (Conf.ownedAreasEnabled && (Conf.ownedAreaDenyBuild || Conf.ownedAreaPainBuild) && !otherFaction.playerHasOwnershipRights(me, loc)) {
if (!pain && Conf.ownedAreaPainBuild && !justCheck) {
player.damage(Conf.actionDeniedPainAmount);
if (!Conf.ownedAreaDenyBuild)
me.msg("<b>It is painful to try to "+action+" in this territory, it is owned by: "+otherFaction.getOwnerListString(loc));
me.msg("<b>It is painful to try to " + action + " in this territory, it is owned by: " + otherFaction.getOwnerListString(loc));
}
if (Conf.ownedAreaDenyBuild)
{
if (Conf.ownedAreaDenyBuild) {
if (!justCheck)
me.msg("<b>You can't "+action+" in this territory, it is owned by: "+otherFaction.getOwnerListString(loc));
me.msg("<b>You can't " + action + " in this territory, it is owned by: " + otherFaction.getOwnerListString(loc));
return false;
}

View File

@ -1,8 +1,8 @@
package com.massivecraft.factions.listeners;
import java.util.logging.Level;
import java.util.UnknownFormatConversionException;
import com.massivecraft.factions.*;
import com.massivecraft.factions.struct.ChatMode;
import com.massivecraft.factions.struct.Relation;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@ -11,27 +11,20 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerChatEvent;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.P;
import com.massivecraft.factions.struct.ChatMode;
import com.massivecraft.factions.struct.Relation;
import java.util.UnknownFormatConversionException;
import java.util.logging.Level;
public class FactionsChatListener implements Listener
{
public class FactionsChatListener implements Listener {
public P p;
public FactionsChatListener(P p)
{
public FactionsChatListener(P p) {
this.p = p;
}
// this is for handling slashless command usage and faction/alliance chat, set at lowest priority so Factions gets to them first
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerEarlyChat(PlayerChatEvent event)
{
public void onPlayerEarlyChat(PlayerChatEvent event) {
if (event.isCancelled()) return;
Player talkingPlayer = event.getPlayer();
@ -40,36 +33,31 @@ public class FactionsChatListener implements Listener
ChatMode chat = me.getChatMode();
// slashless factions commands need to be handled here if the user isn't in public chat mode
if (chat != ChatMode.PUBLIC && p.handleCommand(talkingPlayer, msg, false, true))
{
if (chat != ChatMode.PUBLIC && p.handleCommand(talkingPlayer, msg, false, true)) {
if (Conf.logPlayerCommands)
Bukkit.getLogger().log(Level.INFO, "[PLAYER_COMMAND] "+talkingPlayer.getName()+": "+msg);
Bukkit.getLogger().log(Level.INFO, "[PLAYER_COMMAND] " + talkingPlayer.getName() + ": " + msg);
event.setCancelled(true);
return;
}
// Is it a faction chat message?
if (chat == ChatMode.FACTION)
{
if (chat == ChatMode.FACTION) {
Faction myFaction = me.getFaction();
String message = String.format(Conf.factionChatFormat, me.describeTo(myFaction), msg);
myFaction.sendMessage(message);
Bukkit.getLogger().log(Level.INFO, ChatColor.stripColor("FactionChat "+myFaction.getTag()+": "+message));
Bukkit.getLogger().log(Level.INFO, ChatColor.stripColor("FactionChat " + myFaction.getTag() + ": " + message));
//Send to any players who are spying chat
for (FPlayer fplayer : FPlayers.i.getOnline())
{
if(fplayer.isSpyingChat() && fplayer.getFaction() != myFaction)
fplayer.sendMessage("[FCspy] "+myFaction.getTag()+": "+message);
for (FPlayer fplayer : FPlayers.i.getOnline()) {
if (fplayer.isSpyingChat() && fplayer.getFaction() != myFaction)
fplayer.sendMessage("[FCspy] " + myFaction.getTag() + ": " + message);
}
event.setCancelled(true);
return;
}
else if (chat == ChatMode.ALLIANCE)
{
} else if (chat == ChatMode.ALLIANCE) {
Faction myFaction = me.getFaction();
String message = String.format(Conf.allianceChatFormat, ChatColor.stripColor(me.getNameAndTag()), msg);
@ -78,17 +66,16 @@ public class FactionsChatListener implements Listener
myFaction.sendMessage(message);
//Send to all our allies
for (FPlayer fplayer : FPlayers.i.getOnline())
{
if(myFaction.getRelationTo(fplayer) == Relation.ALLY)
for (FPlayer fplayer : FPlayers.i.getOnline()) {
if (myFaction.getRelationTo(fplayer) == Relation.ALLY)
fplayer.sendMessage(message);
//Send to any players who are spying chat
else if(fplayer.isSpyingChat())
else if (fplayer.isSpyingChat())
fplayer.sendMessage("[ACspy]: " + message);
}
Bukkit.getLogger().log(Level.INFO, ChatColor.stripColor("AllianceChat: "+message));
Bukkit.getLogger().log(Level.INFO, ChatColor.stripColor("AllianceChat: " + message));
event.setCancelled(true);
return;
@ -97,13 +84,12 @@ public class FactionsChatListener implements Listener
// this is for handling insertion of the player's faction tag, set at highest priority to give other plugins a chance to modify chat first
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerChat(PlayerChatEvent event)
{
public void onPlayerChat(PlayerChatEvent event) {
if (event.isCancelled()) return;
// Are we to insert the Faction tag into the format?
// If we are not to insert it - we are done.
if ( ! Conf.chatTagEnabled || Conf.chatTagHandledByAnotherPlugin) return;
if (!Conf.chatTagEnabled || Conf.chatTagHandledByAnotherPlugin) return;
Player talkingPlayer = event.getPlayer();
String msg = event.getMessage();
@ -111,31 +97,23 @@ public class FactionsChatListener implements Listener
FPlayer me = FPlayers.i.get(talkingPlayer);
int InsertIndex = 0;
if (!Conf.chatTagReplaceString.isEmpty() && eventFormat.contains(Conf.chatTagReplaceString))
{
if (!Conf.chatTagReplaceString.isEmpty() && eventFormat.contains(Conf.chatTagReplaceString)) {
// we're using the "replace" method of inserting the faction tags
// if they stuck "[FACTION_TITLE]" in there, go ahead and do it too
if (eventFormat.contains("[FACTION_TITLE]"))
{
if (eventFormat.contains("[FACTION_TITLE]")) {
eventFormat = eventFormat.replace("[FACTION_TITLE]", me.getTitle());
}
InsertIndex = eventFormat.indexOf(Conf.chatTagReplaceString);
eventFormat = eventFormat.replace(Conf.chatTagReplaceString, "");
Conf.chatTagPadAfter = false;
Conf.chatTagPadBefore = false;
}
else if (!Conf.chatTagInsertAfterString.isEmpty() && eventFormat.contains(Conf.chatTagInsertAfterString))
{
} else if (!Conf.chatTagInsertAfterString.isEmpty() && eventFormat.contains(Conf.chatTagInsertAfterString)) {
// we're using the "insert after string" method
InsertIndex = eventFormat.indexOf(Conf.chatTagInsertAfterString) + Conf.chatTagInsertAfterString.length();
}
else if (!Conf.chatTagInsertBeforeString.isEmpty() && eventFormat.contains(Conf.chatTagInsertBeforeString))
{
} else if (!Conf.chatTagInsertBeforeString.isEmpty() && eventFormat.contains(Conf.chatTagInsertBeforeString)) {
// we're using the "insert before string" method
InsertIndex = eventFormat.indexOf(Conf.chatTagInsertBeforeString);
}
else
{
} else {
// we'll fall back to using the index place method
InsertIndex = Conf.chatTagInsertIndex;
if (InsertIndex > eventFormat.length())
@ -148,22 +126,17 @@ public class FactionsChatListener implements Listener
String nonColoredMsgFormat = formatStart + me.getChatTag().trim() + formatEnd;
// Relation Colored?
if (Conf.chatTagRelationColored)
{
if (Conf.chatTagRelationColored) {
// We must choke the standard message and send out individual messages to all players
// Why? Because the relations will differ.
event.setCancelled(true);
for (Player listeningPlayer : event.getRecipients())
{
for (Player listeningPlayer : event.getRecipients()) {
FPlayer you = FPlayers.i.get(listeningPlayer);
String yourFormat = formatStart + me.getChatTag(you).trim() + formatEnd;
try
{
try {
listeningPlayer.sendMessage(String.format(yourFormat, talkingPlayer.getDisplayName(), msg));
}
catch (UnknownFormatConversionException ex)
{
} catch (UnknownFormatConversionException ex) {
Conf.chatTagInsertIndex = 0;
P.p.log(Level.SEVERE, "Critical error in chat message formatting!");
P.p.log(Level.SEVERE, "NOTE: This has been automatically fixed right now by setting chatTagInsertIndex to 0.");
@ -175,9 +148,7 @@ public class FactionsChatListener implements Listener
// Write to the log... We will write the non colored message.
String nonColoredMsg = ChatColor.stripColor(String.format(nonColoredMsgFormat, talkingPlayer.getDisplayName(), msg));
Bukkit.getLogger().log(Level.INFO, nonColoredMsg);
}
else
{
} else {
// No relation color.
event.setFormat(nonColoredMsgFormat);
}

View File

@ -1,39 +1,18 @@
package com.massivecraft.factions.listeners;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.text.MessageFormat;
import java.util.Set;
import com.massivecraft.factions.*;
import com.massivecraft.factions.event.PowerLossEvent;
import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.util.MiscUtil;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.entity.Creeper;
import org.bukkit.entity.Enderman;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Fireball;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.*;
import org.bukkit.entity.minecart.ExplosiveMinecart;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.entity.TNTPrimed;
import org.bukkit.entity.Wither;
import org.bukkit.entity.WitherSkull;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.event.entity.EntityChangeBlockEvent;
import org.bukkit.event.entity.EntityCombustByEntityEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.entity.EntityTargetEvent;
import org.bukkit.event.entity.PotionSplashEvent;
import org.bukkit.event.entity.*;
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
import org.bukkit.event.hanging.HangingBreakEvent;
import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause;
@ -41,32 +20,21 @@ import org.bukkit.event.hanging.HangingPlaceEvent;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import com.massivecraft.factions.Board;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.P;
import com.massivecraft.factions.event.PowerLossEvent;
import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.util.MiscUtil;
import java.text.MessageFormat;
import java.util.*;
public class FactionsEntityListener implements Listener
{
public class FactionsEntityListener implements Listener {
public P p;
public FactionsEntityListener(P p)
{
public FactionsEntityListener(P p) {
this.p = p;
}
@EventHandler(priority = EventPriority.NORMAL)
public void onEntityDeath(EntityDeathEvent event)
{
public void onEntityDeath(EntityDeathEvent event) {
Entity entity = event.getEntity();
if ( ! (entity instanceof Player))
{
if (!(entity instanceof Player)) {
return;
}
@ -74,37 +42,27 @@ public class FactionsEntityListener implements Listener
FPlayer fplayer = FPlayers.i.get(player);
Faction faction = Board.getFactionAt(new FLocation(player.getLocation()));
PowerLossEvent powerLossEvent = new PowerLossEvent(faction,fplayer);
PowerLossEvent powerLossEvent = new PowerLossEvent(faction, fplayer);
// Check for no power loss conditions
if (faction.isWarZone())
{
if (faction.isWarZone()) {
// war zones always override worldsNoPowerLoss either way, thus this layout
if (! Conf.warZonePowerLoss)
{
if (!Conf.warZonePowerLoss) {
powerLossEvent.setMessage("<i>You didn't lose any power since you were in a war zone.");
powerLossEvent.setCancelled(true);
}
if (Conf.worldsNoPowerLoss.contains(player.getWorld().getName()))
{
if (Conf.worldsNoPowerLoss.contains(player.getWorld().getName())) {
powerLossEvent.setMessage("<b>The world you are in has power loss normally disabled, but you still lost power since you were in a war zone.\n<i>Your power is now <h>%d / %d");
}
}
else if (faction.isNone() && !Conf.wildernessPowerLoss && !Conf.worldsNoWildernessProtection.contains(player.getWorld().getName()))
{
} else if (faction.isNone() && !Conf.wildernessPowerLoss && !Conf.worldsNoWildernessProtection.contains(player.getWorld().getName())) {
powerLossEvent.setMessage("<i>You didn't lose any power since you were in the wilderness.");
powerLossEvent.setCancelled(true);
}
else if (Conf.worldsNoPowerLoss.contains(player.getWorld().getName()))
{
} else if (Conf.worldsNoPowerLoss.contains(player.getWorld().getName())) {
powerLossEvent.setMessage("<i>You didn't lose any power due to the world you died in.");
powerLossEvent.setCancelled(true);
}
else if (Conf.peacefulMembersDisablePowerLoss && fplayer.hasFaction() && fplayer.getFaction().isPeaceful())
{
} else if (Conf.peacefulMembersDisablePowerLoss && fplayer.hasFaction() && fplayer.getFaction().isPeaceful()) {
powerLossEvent.setMessage("<i>You didn't lose any power since you are in a peaceful faction.");
powerLossEvent.setCancelled(true);
}
else {
} else {
powerLossEvent.setMessage("<i>Your power is now <h>%d / %d");
}
@ -112,55 +70,44 @@ public class FactionsEntityListener implements Listener
Bukkit.getPluginManager().callEvent(powerLossEvent);
// Call player onDeath if the event is not cancelled
if(!powerLossEvent.isCancelled())
{
if (!powerLossEvent.isCancelled()) {
fplayer.onDeath();
}
// Send the message from the powerLossEvent
final String msg = powerLossEvent.getMessage();
if (msg != null && !msg.isEmpty())
{
fplayer.msg(msg,fplayer.getPowerRounded(),fplayer.getPowerMaxRounded());
if (msg != null && !msg.isEmpty()) {
fplayer.msg(msg, fplayer.getPowerRounded(), fplayer.getPowerMaxRounded());
}
}
/**
* Who can I hurt?
* I can never hurt members or allies.
* I can always hurt enemies.
* I can hurt neutrals as long as they are outside their own territory.
* Who can I hurt? I can never hurt members or allies. I can always hurt enemies. I can hurt neutrals as long as
* they are outside their own territory.
*/
@EventHandler(priority = EventPriority.NORMAL)
public void onEntityDamage(EntityDamageEvent event)
{
public void onEntityDamage(EntityDamageEvent event) {
if (event.isCancelled()) return;
if (event instanceof EntityDamageByEntityEvent)
{
EntityDamageByEntityEvent sub = (EntityDamageByEntityEvent)event;
if ( ! this.canDamagerHurtDamagee(sub, true))
{
if (event instanceof EntityDamageByEntityEvent) {
EntityDamageByEntityEvent sub = (EntityDamageByEntityEvent) event;
if (!this.canDamagerHurtDamagee(sub, true)) {
event.setCancelled(true);
}
}
else if (Conf.safeZonePreventAllDamageToPlayers && isPlayerInSafeZone(event.getEntity()))
{
} else if (Conf.safeZonePreventAllDamageToPlayers && isPlayerInSafeZone(event.getEntity())) {
// Players can not take any damage in a Safe Zone
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onEntityExplode(EntityExplodeEvent event)
{
public void onEntityExplode(EntityExplodeEvent event) {
if (event.isCancelled()) return;
Location loc = event.getLocation();
Entity boomer = event.getEntity();
Faction faction = Board.getFactionAt(new FLocation(loc));
if (faction.noExplosionsInTerritory())
{
if (faction.noExplosionsInTerritory()) {
// faction is peaceful and has explosions set to disabled
event.setCancelled(true);
return;
@ -181,12 +128,10 @@ public class FactionsEntityListener implements Listener
||
faction.isSafeZone()
)
)
{
) {
// creeper which needs prevention
event.setCancelled(true);
}
else if
} else if
(
// it's a bit crude just using fireball protection for Wither boss too, but I'd rather not add in a whole new set of xxxBlockWitherExplosion or whatever
(boomer instanceof Fireball || boomer instanceof WitherSkull || boomer instanceof Wither)
@ -200,37 +145,31 @@ public class FactionsEntityListener implements Listener
||
faction.isSafeZone()
)
)
{
) {
// ghast fireball which needs prevention
event.setCancelled(true);
}
else if
} else if
(
(boomer instanceof TNTPrimed || boomer instanceof ExplosiveMinecart)
&&
(
(faction.isNone() && Conf.wildernessBlockTNT && ! Conf.worldsNoWildernessProtection.contains(loc.getWorld().getName()))
(faction.isNone() && Conf.wildernessBlockTNT && !Conf.worldsNoWildernessProtection.contains(loc.getWorld().getName()))
||
(faction.isNormal() && ( online ? Conf.territoryBlockTNT : Conf.territoryBlockTNTWhenOffline ))
(faction.isNormal() && (online ? Conf.territoryBlockTNT : Conf.territoryBlockTNTWhenOffline))
||
(faction.isWarZone() && Conf.warZoneBlockTNT)
||
(faction.isSafeZone() && Conf.safeZoneBlockTNT)
)
)
{
) {
// TNT which needs prevention
event.setCancelled(true);
}
else if ((boomer instanceof TNTPrimed || boomer instanceof ExplosiveMinecart) && Conf.handleExploitTNTWaterlog)
{
} else if ((boomer instanceof TNTPrimed || boomer instanceof ExplosiveMinecart) && Conf.handleExploitTNTWaterlog) {
// TNT in water/lava doesn't normally destroy any surrounding blocks, which is usually desired behavior, but...
// this change below provides workaround for waterwalling providing perfect protection,
// and makes cheap (non-obsidian) TNT cannons require minor maintenance between shots
Block center = loc.getBlock();
if (center.isLiquid())
{
if (center.isLiquid()) {
// a single surrounding block in all 6 directions is broken if the material is weak enough
List<Block> targets = new ArrayList<Block>();
targets.add(center.getRelative(0, 0, 1));
@ -239,8 +178,7 @@ public class FactionsEntityListener implements Listener
targets.add(center.getRelative(0, -1, 0));
targets.add(center.getRelative(1, 0, 0));
targets.add(center.getRelative(-1, 0, 0));
for (Block target : targets)
{
for (Block target : targets) {
int id = target.getTypeId();
// ignore air, bedrock, water, lava, obsidian, enchanting table, etc.... too bad we can't get a blast resistance value through Bukkit yet
if (id != 0 && (id < 7 || id > 11) && id != 49 && id != 90 && id != 116 && id != 119 && id != 120 && id != 130)
@ -252,12 +190,11 @@ public class FactionsEntityListener implements Listener
// mainly for flaming arrows; don't want allies or people in safe zones to be ignited even after damage event is cancelled
@EventHandler(priority = EventPriority.NORMAL)
public void onEntityCombustByEntity(EntityCombustByEntityEvent event)
{
public void onEntityCombustByEntity(EntityCombustByEntityEvent event) {
if (event.isCancelled()) return;
EntityDamageByEntityEvent sub = new EntityDamageByEntityEvent(event.getCombuster(), event.getEntity(), EntityDamageEvent.DamageCause.FIRE, 0);
if ( ! this.canDamagerHurtDamagee(sub, false))
if (!this.canDamagerHurtDamagee(sub, false))
event.setCancelled(true);
sub = null;
}
@ -269,64 +206,55 @@ public class FactionsEntityListener implements Listener
));
@EventHandler(priority = EventPriority.NORMAL)
public void onPotionSplashEvent(PotionSplashEvent event)
{
public void onPotionSplashEvent(PotionSplashEvent event) {
if (event.isCancelled()) return;
// see if the potion has a harmful effect
boolean badjuju = false;
for (PotionEffect effect : event.getPotion().getEffects())
{
if (badPotionEffects.contains(effect.getType()))
{
for (PotionEffect effect : event.getPotion().getEffects()) {
if (badPotionEffects.contains(effect.getType())) {
badjuju = true;
break;
}
}
if ( ! badjuju) return;
if (!badjuju) return;
Entity thrower = event.getPotion().getShooter();
// scan through affected entities to make sure they're all valid targets
Iterator<LivingEntity> iter = event.getAffectedEntities().iterator();
while (iter.hasNext())
{
while (iter.hasNext()) {
LivingEntity target = iter.next();
EntityDamageByEntityEvent sub = new EntityDamageByEntityEvent(thrower, target, EntityDamageEvent.DamageCause.CUSTOM, 0);
if ( ! this.canDamagerHurtDamagee(sub, true))
if (!this.canDamagerHurtDamagee(sub, true))
event.setIntensity(target, 0.0); // affected entity list doesn't accept modification (so no iter.remove()), but this works
sub = null;
}
}
public boolean isPlayerInSafeZone(Entity damagee)
{
if ( ! (damagee instanceof Player))
{
public boolean isPlayerInSafeZone(Entity damagee) {
if (!(damagee instanceof Player)) {
return false;
}
if (Board.getFactionAt(new FLocation(damagee.getLocation())).isSafeZone())
{
if (Board.getFactionAt(new FLocation(damagee.getLocation())).isSafeZone()) {
return true;
}
return false;
}
public boolean canDamagerHurtDamagee(EntityDamageByEntityEvent sub)
{
public boolean canDamagerHurtDamagee(EntityDamageByEntityEvent sub) {
return canDamagerHurtDamagee(sub, true);
}
public boolean canDamagerHurtDamagee(EntityDamageByEntityEvent sub, boolean notify)
{
public boolean canDamagerHurtDamagee(EntityDamageByEntityEvent sub, boolean notify) {
Entity damager = sub.getDamager();
Entity damagee = sub.getEntity();
int damage = sub.getDamage();
if ( ! (damagee instanceof Player))
if (!(damagee instanceof Player))
return true;
FPlayer defender = FPlayers.i.get((Player)damagee);
FPlayer defender = FPlayers.i.get((Player) damagee);
if (defender == null || defender.getPlayer() == null)
return true;
@ -336,47 +264,45 @@ public class FactionsEntityListener implements Listener
// for damage caused by projectiles, getDamager() returns the projectile... what we need to know is the source
if (damager instanceof Projectile)
damager = ((Projectile)damager).getShooter();
damager = ((Projectile) damager).getShooter();
if (damager == damagee) // ender pearl usage and other self-inflicted damage
return true;
// Players can not take attack damage in a SafeZone, or possibly peaceful territory
if (defLocFaction.noPvPInTerritory()) {
if (damager instanceof Player)
{
if (notify)
{
FPlayer attacker = FPlayers.i.get((Player)damager);
attacker.msg("<i>You can't hurt other players in "+(defLocFaction.isSafeZone() ? "a SafeZone." : "peaceful territory."));
if (damager instanceof Player) {
if (notify) {
FPlayer attacker = FPlayers.i.get((Player) damager);
attacker.msg("<i>You can't hurt other players in " + (defLocFaction.isSafeZone() ? "a SafeZone." : "peaceful territory."));
}
return false;
}
return !defLocFaction.noMonstersInTerritory();
}
if ( ! (damager instanceof Player))
if (!(damager instanceof Player))
return true;
FPlayer attacker = FPlayers.i.get((Player)damager);
FPlayer attacker = FPlayers.i.get((Player) damager);
if (attacker == null || attacker.getPlayer() == null)
return true;
if (Conf.playersWhoBypassAllProtection.contains(attacker.getName())) return true;
if (attacker.hasLoginPvpDisabled())
{
if (notify) attacker.msg("<i>You can't hurt other players for " + Conf.noPVPDamageToOthersForXSecondsAfterLogin + " seconds after logging in.");
if (attacker.hasLoginPvpDisabled()) {
if (notify)
attacker.msg("<i>You can't hurt other players for " + Conf.noPVPDamageToOthersForXSecondsAfterLogin + " seconds after logging in.");
return false;
}
Faction locFaction = Board.getFactionAt(new FLocation(attacker));
// so we know from above that the defender isn't in a safezone... what about the attacker, sneaky dog that he might be?
if (locFaction.noPvPInTerritory())
{
if (notify) attacker.msg("<i>You can't hurt other players while you are in "+(locFaction.isSafeZone() ? "a SafeZone." : "peaceful territory."));
if (locFaction.noPvPInTerritory()) {
if (notify)
attacker.msg("<i>You can't hurt other players while you are in " + (locFaction.isSafeZone() ? "a SafeZone." : "peaceful territory."));
return false;
}
@ -389,32 +315,23 @@ public class FactionsEntityListener implements Listener
Faction defendFaction = defender.getFaction();
Faction attackFaction = attacker.getFaction();
if (attackFaction.isNone() && Conf.disablePVPForFactionlessPlayers)
{
if (attackFaction.isNone() && Conf.disablePVPForFactionlessPlayers) {
if (notify) attacker.msg("<i>You can't hurt other players until you join a faction.");
return false;
}
else if (defendFaction.isNone())
{
if (defLocFaction == attackFaction && Conf.enablePVPAgainstFactionlessInAttackersLand)
{
} else if (defendFaction.isNone()) {
if (defLocFaction == attackFaction && Conf.enablePVPAgainstFactionlessInAttackersLand) {
// Allow PVP vs. Factionless in attacker's faction territory
return true;
}
else if (Conf.disablePVPForFactionlessPlayers)
{
} else if (Conf.disablePVPForFactionlessPlayers) {
if (notify) attacker.msg("<i>You can't hurt players who are not currently in a faction.");
return false;
}
}
if (defendFaction.isPeaceful())
{
if (defendFaction.isPeaceful()) {
if (notify) attacker.msg("<i>You can't hurt players who are in a peaceful faction.");
return false;
}
else if (attackFaction.isPeaceful())
{
} else if (attackFaction.isPeaceful()) {
if (notify) attacker.msg("<i>You can't hurt players while you are in a peaceful faction.");
return false;
}
@ -422,8 +339,7 @@ public class FactionsEntityListener implements Listener
Relation relation = defendFaction.getRelationTo(attackFaction);
// You can not hurt neutral factions
if (Conf.disablePVPBetweenNeutralFactions && relation.isNeutral())
{
if (Conf.disablePVPBetweenNeutralFactions && relation.isNeutral()) {
if (notify) attacker.msg("<i>You can't hurt neutral factions. Declare them as an enemy.");
return false;
}
@ -433,8 +349,7 @@ public class FactionsEntityListener implements Listener
return true;
// You can never hurt faction members or allies
if (relation.isMember() || relation.isAlly())
{
if (relation.isMember() || relation.isAlly()) {
if (notify) attacker.msg("<i>You can't hurt %s<i>.", defender.describeTo(attacker));
return false;
}
@ -442,10 +357,8 @@ public class FactionsEntityListener implements Listener
boolean ownTerritory = defender.isInOwnTerritory();
// You can not hurt neutrals in their own territory.
if (ownTerritory && relation.isNeutral())
{
if (notify)
{
if (ownTerritory && relation.isNeutral()) {
if (notify) {
attacker.msg("<i>You can't hurt %s<i> in their own territory unless you declare them as an enemy.", defender.describeTo(attacker));
defender.msg("%s<i> tried to hurt you.", attacker.describeTo(defender, true));
}
@ -453,14 +366,12 @@ public class FactionsEntityListener implements Listener
}
// Damage will be dealt. However check if the damage should be reduced.
if (damage > 0.0 && ownTerritory && Conf.territoryShieldFactor > 0)
{
int newDamage = (int)Math.ceil(damage * (1D - Conf.territoryShieldFactor));
if (damage > 0.0 && ownTerritory && Conf.territoryShieldFactor > 0) {
int newDamage = (int) Math.ceil(damage * (1D - Conf.territoryShieldFactor));
sub.setDamage(newDamage);
// Send message
if (notify)
{
if (notify) {
String perc = MessageFormat.format("{0,number,#%}", (Conf.territoryShieldFactor)); // TODO does this display correctly??
defender.msg("<i>Enemy damage reduced by <rose>%s<i>.", perc);
}
@ -470,54 +381,44 @@ public class FactionsEntityListener implements Listener
}
@EventHandler(priority = EventPriority.NORMAL)
public void onCreatureSpawn(CreatureSpawnEvent event)
{
if (event.isCancelled() || event.getLocation() == null)
{
public void onCreatureSpawn(CreatureSpawnEvent event) {
if (event.isCancelled() || event.getLocation() == null) {
return;
}
if (Conf.safeZoneNerfedCreatureTypes.contains(event.getEntityType()) && Board.getFactionAt(new FLocation(event.getLocation())).noMonstersInTerritory())
{
if (Conf.safeZoneNerfedCreatureTypes.contains(event.getEntityType()) && Board.getFactionAt(new FLocation(event.getLocation())).noMonstersInTerritory()) {
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onEntityTarget(EntityTargetEvent event)
{
public void onEntityTarget(EntityTargetEvent event) {
if (event.isCancelled()) return;
// if there is a target
Entity target = event.getTarget();
if (target == null)
{
if (target == null) {
return;
}
// We are interested in blocking targeting for certain mobs:
if ( ! Conf.safeZoneNerfedCreatureTypes.contains(MiscUtil.creatureTypeFromEntity(event.getEntity())))
{
if (!Conf.safeZoneNerfedCreatureTypes.contains(MiscUtil.creatureTypeFromEntity(event.getEntity()))) {
return;
}
// in case the target is in a safe zone.
if (Board.getFactionAt(new FLocation(target.getLocation())).noMonstersInTerritory())
{
if (Board.getFactionAt(new FLocation(target.getLocation())).noMonstersInTerritory()) {
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onPaintingBreak(HangingBreakEvent event)
{
public void onPaintingBreak(HangingBreakEvent event) {
if (event.isCancelled()) return;
if (event.getCause() == RemoveCause.EXPLOSION)
{
if (event.getCause() == RemoveCause.EXPLOSION) {
Location loc = event.getEntity().getLocation();
Faction faction = Board.getFactionAt(new FLocation(loc));
if (faction.noExplosionsInTerritory())
{
if (faction.noExplosionsInTerritory()) {
// faction is peaceful and has explosions set to disabled
event.setCancelled(true);
return;
@ -536,7 +437,7 @@ public class FactionsEntityListener implements Listener
(
faction.isNormal()
&&
( online
(online
? (Conf.territoryBlockCreepers || Conf.territoryBlockFireballs || Conf.territoryBlockTNT)
: (Conf.territoryBlockCreepersWhenOffline || Conf.territoryBlockFireballsWhenOffline || Conf.territoryBlockTNTWhenOffline)
)
@ -548,44 +449,37 @@ public class FactionsEntityListener implements Listener
)
||
faction.isSafeZone()
)
{
) {
// explosion which needs prevention
event.setCancelled(true);
}
}
if (! (event instanceof HangingBreakByEntityEvent))
{
if (!(event instanceof HangingBreakByEntityEvent)) {
return;
}
Entity breaker = ((HangingBreakByEntityEvent)event).getRemover();
if (! (breaker instanceof Player))
{
Entity breaker = ((HangingBreakByEntityEvent) event).getRemover();
if (!(breaker instanceof Player)) {
return;
}
if ( ! FactionsBlockListener.playerCanBuildDestroyBlock((Player)breaker, event.getEntity().getLocation(), "remove paintings", false))
{
if (!FactionsBlockListener.playerCanBuildDestroyBlock((Player) breaker, event.getEntity().getLocation(), "remove paintings", false)) {
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onPaintingPlace(HangingPlaceEvent event)
{
public void onPaintingPlace(HangingPlaceEvent event) {
if (event.isCancelled()) return;
if ( ! FactionsBlockListener.playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock().getLocation(), "place paintings", false) )
{
if (!FactionsBlockListener.playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock().getLocation(), "place paintings", false)) {
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onEntityChangeBlock(EntityChangeBlockEvent event)
{
public void onEntityChangeBlock(EntityChangeBlockEvent event) {
if (event.isCancelled()) return;
Entity entity = event.getEntity();
@ -595,13 +489,10 @@ public class FactionsEntityListener implements Listener
Location loc = event.getBlock().getLocation();
if (entity instanceof Enderman)
{
if (entity instanceof Enderman) {
if (stopEndermanBlockManipulation(loc))
event.setCancelled(true);
}
else if (entity instanceof Wither)
{
} else if (entity instanceof Wither) {
Faction faction = Board.getFactionAt(new FLocation(loc));
// it's a bit crude just using fireball protection, but I'd rather not add in a whole new set of xxxBlockWitherExplosion or whatever
if
@ -618,10 +509,8 @@ public class FactionsEntityListener implements Listener
}
}
private boolean stopEndermanBlockManipulation(Location loc)
{
if (loc == null)
{
private boolean stopEndermanBlockManipulation(Location loc) {
if (loc == null) {
return false;
}
// quick check to see if all Enderman deny options are enabled; if so, no need to check location
@ -636,28 +525,20 @@ public class FactionsEntityListener implements Listener
Conf.safeZoneDenyEndermanBlocks
&&
Conf.warZoneDenyEndermanBlocks
)
{
) {
return true;
}
FLocation fLoc = new FLocation(loc);
Faction claimFaction = Board.getFactionAt(fLoc);
if (claimFaction.isNone())
{
if (claimFaction.isNone()) {
return Conf.wildernessDenyEndermanBlocks;
}
else if (claimFaction.isNormal())
{
} else if (claimFaction.isNormal()) {
return claimFaction.hasPlayersOnline() ? Conf.territoryDenyEndermanBlocks : Conf.territoryDenyEndermanBlocksWhenOffline;
}
else if (claimFaction.isSafeZone())
{
} else if (claimFaction.isSafeZone()) {
return Conf.safeZoneDenyEndermanBlocks;
}
else if (claimFaction.isWarZone())
{
} else if (claimFaction.isWarZone()) {
return Conf.warZoneDenyEndermanBlocks;
}

View File

@ -1,23 +1,20 @@
package com.massivecraft.factions.listeners;
import com.massivecraft.factions.Conf;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.event.block.BlockFromToEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.Location;
import org.bukkit.Material;
import com.massivecraft.factions.Conf;
import org.bukkit.event.block.BlockFromToEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
public class FactionsExploitListener implements Listener
{
public class FactionsExploitListener implements Listener {
@EventHandler(priority = EventPriority.NORMAL)
public void obsidianGenerator(BlockFromToEvent event)
{
if (event.isCancelled() == true || ! Conf.handleExploitObsidianGenerators) return;
public void obsidianGenerator(BlockFromToEvent event) {
if (event.isCancelled() == true || !Conf.handleExploitObsidianGenerators) return;
// thanks to ObGenBlocker and WorldGuard for this method
Block block = event.getToBlock();
@ -29,9 +26,8 @@ public class FactionsExploitListener implements Listener
@EventHandler(priority = EventPriority.NORMAL)
public void enderPearlTeleport(PlayerTeleportEvent event)
{
if (event.isCancelled() == true || ! Conf.handleExploitEnderPearlClipping) return;
public void enderPearlTeleport(PlayerTeleportEvent event) {
if (event.isCancelled() == true || !Conf.handleExploitEnderPearlClipping) return;
if (event.getCause() != PlayerTeleportEvent.TeleportCause.ENDER_PEARL) return;
// this exploit works when the target location is within 0.31 blocks or so of a door or glass block or similar...
@ -43,8 +39,7 @@ public class FactionsExploitListener implements Listener
if (
((mat == Material.THIN_GLASS || mat == Material.IRON_FENCE) && clippingThrough(target, from, 0.65))
|| ((mat == Material.FENCE || mat == Material.NETHER_FENCE) && clippingThrough(target, from, 0.45))
)
{
) {
event.setTo(from);
return;
}
@ -56,8 +51,7 @@ public class FactionsExploitListener implements Listener
}
public static boolean clippingThrough(Location target, Location from, double thickness)
{
public static boolean clippingThrough(Location target, Location from, double thickness) {
return
(
(from.getX() > target.getX() && (from.getX() - target.getX() < thickness))

View File

@ -1,9 +1,11 @@
package com.massivecraft.factions.listeners;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import com.massivecraft.factions.*;
import com.massivecraft.factions.integration.SpoutFeatures;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.zcore.util.TextUtil;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
@ -12,42 +14,23 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerBucketEmptyEvent;
import org.bukkit.event.player.PlayerBucketFillEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerRespawnEvent;
import org.bukkit.event.player.*;
import org.bukkit.util.NumberConversions;
import com.massivecraft.factions.Board;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.P;
import com.massivecraft.factions.integration.SpoutFeatures;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.zcore.util.TextUtil;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class FactionsPlayerListener implements Listener
{
public class FactionsPlayerListener implements Listener {
public P p;
public FactionsPlayerListener(P p)
{
public FactionsPlayerListener(P p) {
this.p = p;
}
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerJoin(PlayerJoinEvent event)
{
public void onPlayerJoin(PlayerJoinEvent event) {
// Make sure that all online players do have a fplayer.
final FPlayer me = FPlayers.i.get(event.getPlayer());
@ -56,15 +39,14 @@ public class FactionsPlayerListener implements Listener
// Store player's current FLocation and notify them where they are
me.setLastStoodAt(new FLocation(event.getPlayer().getLocation()));
if ( ! SpoutFeatures.updateTerritoryDisplay(me))
if (!SpoutFeatures.updateTerritoryDisplay(me))
me.sendFactionHereMessage();
SpoutFeatures.updateAppearancesShortly(event.getPlayer());
}
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerQuit(PlayerQuitEvent event)
{
public void onPlayerQuit(PlayerQuitEvent event) {
FPlayer me = FPlayers.i.get(event.getPlayer());
// Make sure player's power is up to date when they log off.
@ -73,16 +55,14 @@ public class FactionsPlayerListener implements Listener
me.setLastLoginTime(System.currentTimeMillis());
Faction myFaction = me.getFaction();
if (myFaction != null)
{
if (myFaction != null) {
myFaction.memberLoggedOff();
}
SpoutFeatures.playerDisconnect(me);
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerMove(PlayerMoveEvent event)
{
public void onPlayerMove(PlayerMoveEvent event) {
if (event.isCancelled()) return;
// quick check to make sure player is moving between chunks; good performance boost
@ -103,8 +83,7 @@ public class FactionsPlayerListener implements Listener
FLocation from = me.getLastStoodAt();
FLocation to = new FLocation(event.getTo());
if (from.equals(to))
{
if (from.equals(to)) {
return;
}
@ -121,20 +100,16 @@ public class FactionsPlayerListener implements Listener
if (changedFaction && SpoutFeatures.updateTerritoryDisplay(me))
changedFaction = false;
if (me.isMapAutoUpdating())
{
if (me.isMapAutoUpdating()) {
me.sendMessage(Board.getMap(me.getFaction(), to, player.getLocation().getYaw()));
if (spoutClient && Conf.spoutTerritoryOwnersShow)
SpoutFeatures.updateOwnerList(me);
}
else
{
} else {
Faction myFaction = me.getFaction();
String ownersTo = myFaction.getOwnerListString(to);
if (changedFaction)
{
if (changedFaction) {
me.sendFactionHereMessage();
if
(
@ -151,16 +126,12 @@ public class FactionsPlayerListener implements Listener
myFaction == factionTo
&&
!ownersTo.isEmpty()
)
{
me.sendMessage(Conf.ownedLandMessage+ownersTo);
) {
me.sendMessage(Conf.ownedLandMessage + ownersTo);
}
}
else if (spoutClient && Conf.spoutTerritoryOwnersShow)
{
} else if (spoutClient && Conf.spoutTerritoryOwnersShow) {
SpoutFeatures.updateOwnerList(me);
}
else if
} else if
(
Conf.ownedAreasEnabled
&&
@ -169,48 +140,33 @@ public class FactionsPlayerListener implements Listener
factionFrom == factionTo
&&
myFaction == factionTo
)
{
) {
String ownersFrom = myFaction.getOwnerListString(from);
if (Conf.ownedMessageByChunk || !ownersFrom.equals(ownersTo))
{
if (Conf.ownedMessageByChunk || !ownersFrom.equals(ownersTo)) {
if (!ownersTo.isEmpty())
me.sendMessage(Conf.ownedLandMessage+ownersTo);
me.sendMessage(Conf.ownedLandMessage + ownersTo);
else if (!Conf.publicLandMessage.isEmpty())
me.sendMessage(Conf.publicLandMessage);
}
}
}
if (me.getAutoClaimFor() != null)
{
if (me.getAutoClaimFor() != null) {
me.attemptClaim(me.getAutoClaimFor(), event.getTo(), true);
}
else if (me.isAutoSafeClaimEnabled())
{
if ( ! Permission.MANAGE_SAFE_ZONE.has(player))
{
} else if (me.isAutoSafeClaimEnabled()) {
if (!Permission.MANAGE_SAFE_ZONE.has(player)) {
me.setIsAutoSafeClaimEnabled(false);
}
else
{
if (!Board.getFactionAt(to).isSafeZone())
{
} else {
if (!Board.getFactionAt(to).isSafeZone()) {
Board.setFactionAt(Factions.i.getSafeZone(), to);
me.msg("<i>This land is now a safe zone.");
}
}
}
else if (me.isAutoWarClaimEnabled())
{
if ( ! Permission.MANAGE_WAR_ZONE.has(player))
{
} else if (me.isAutoWarClaimEnabled()) {
if (!Permission.MANAGE_WAR_ZONE.has(player)) {
me.setIsAutoWarClaimEnabled(false);
}
else
{
if (!Board.getFactionAt(to).isWarZone())
{
} else {
if (!Board.getFactionAt(to).isWarZone()) {
Board.setFactionAt(Factions.i.getWarZone(), to);
me.msg("<i>This land is now a war zone.");
}
@ -219,8 +175,7 @@ public class FactionsPlayerListener implements Listener
}
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerInteract(PlayerInteractEvent event)
{
public void onPlayerInteract(PlayerInteractEvent event) {
if (event.isCancelled()) return;
// only need to check right-clicks and physical as of MC 1.4+; good performance boost
if (event.getAction() != Action.RIGHT_CLICK_BLOCK && event.getAction() != Action.PHYSICAL) return;
@ -230,24 +185,20 @@ public class FactionsPlayerListener implements Listener
if (block == null) return; // clicked in air, apparently
if ( ! canPlayerUseBlock(player, block, false))
{
if (!canPlayerUseBlock(player, block, false)) {
event.setCancelled(true);
if (Conf.handleExploitInteractionSpam)
{
if (Conf.handleExploitInteractionSpam) {
String name = player.getName();
InteractAttemptSpam attempt = interactSpammers.get(name);
if (attempt == null)
{
if (attempt == null) {
attempt = new InteractAttemptSpam();
interactSpammers.put(name, attempt);
}
int count = attempt.increment();
if (count >= 10)
{
if (count >= 10) {
FPlayer me = FPlayers.i.get(name);
me.msg("<b>Ouch, that is starting to hurt. You should give it a rest.");
player.damage(NumberConversions.floor((double)count / 10));
player.damage(NumberConversions.floor((double) count / 10));
}
}
return;
@ -255,8 +206,7 @@ public class FactionsPlayerListener implements Listener
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; // only interested on right-clicks for below
if ( ! playerCanUseItemHere(player, block.getLocation(), event.getMaterial(), false))
{
if (!playerCanUseItemHere(player, block.getLocation(), event.getMaterial(), false)) {
event.setCancelled(true);
return;
}
@ -265,14 +215,13 @@ public class FactionsPlayerListener implements Listener
// for handling people who repeatedly spam attempts to open a door (or similar) in another faction's territory
private Map<String, InteractAttemptSpam> interactSpammers = new HashMap<String, InteractAttemptSpam>();
private static class InteractAttemptSpam
{
private static class InteractAttemptSpam {
private int attempts = 0;
private long lastAttempt = System.currentTimeMillis();
// returns the current attempt count
public int increment()
{
public int increment() {
long Now = System.currentTimeMillis();
if (Now > lastAttempt + 2000)
attempts = 1;
@ -284,8 +233,7 @@ public class FactionsPlayerListener implements Listener
}
public static boolean playerCanUseItemHere(Player player, Location location, Material material, boolean justCheck)
{
public static boolean playerCanUseItemHere(Player player, Location location, Material material, boolean justCheck) {
String name = player.getName();
if (Conf.playersWhoBypassAllProtection.contains(name)) return true;
@ -295,19 +243,15 @@ public class FactionsPlayerListener implements Listener
FLocation loc = new FLocation(location);
Faction otherFaction = Board.getFactionAt(loc);
if (otherFaction.hasPlayersOnline())
{
if ( ! Conf.territoryDenyUseageMaterials.contains(material))
if (otherFaction.hasPlayersOnline()) {
if (!Conf.territoryDenyUseageMaterials.contains(material))
return true; // Item isn't one we're preventing for online factions.
}
else
{
if ( ! Conf.territoryDenyUseageMaterialsWhenOffline.contains(material))
} else {
if (!Conf.territoryDenyUseageMaterialsWhenOffline.contains(material))
return true; // Item isn't one we're preventing for offline factions.
}
if (otherFaction.isNone())
{
if (otherFaction.isNone()) {
if (!Conf.wildernessDenyUseage || Conf.worldsNoWildernessProtection.contains(location.getWorld().getName()))
return true; // This is not faction territory. Use whatever you like here.
@ -315,9 +259,7 @@ public class FactionsPlayerListener implements Listener
me.msg("<b>You can't use <h>%s<b> in the wilderness.", TextUtil.getMaterialName(material));
return false;
}
else if (otherFaction.isSafeZone())
{
} else if (otherFaction.isSafeZone()) {
if (!Conf.safeZoneDenyUseage || Permission.MANAGE_SAFE_ZONE.has(player))
return true;
@ -325,9 +267,7 @@ public class FactionsPlayerListener implements Listener
me.msg("<b>You can't use <h>%s<b> in a safe zone.", TextUtil.getMaterialName(material));
return false;
}
else if (otherFaction.isWarZone())
{
} else if (otherFaction.isWarZone()) {
if (!Conf.warZoneDenyUseage || Permission.MANAGE_WAR_ZONE.has(player))
return true;
@ -341,8 +281,7 @@ public class FactionsPlayerListener implements Listener
Relation rel = myFaction.getRelationTo(otherFaction);
// Cancel if we are not in our own territory
if (rel.confDenyUseage())
{
if (rel.confDenyUseage()) {
if (!justCheck)
me.msg("<b>You can't use <h>%s<b> in the territory of <h>%s<b>.", TextUtil.getMaterialName(material), otherFaction.getTag(myFaction));
@ -350,8 +289,7 @@ public class FactionsPlayerListener implements Listener
}
// Also cancel if player doesn't have ownership rights for this claim
if (Conf.ownedAreasEnabled && Conf.ownedAreaDenyUseage && !otherFaction.playerHasOwnershipRights(me, loc))
{
if (Conf.ownedAreasEnabled && Conf.ownedAreaDenyUseage && !otherFaction.playerHasOwnershipRights(me, loc)) {
if (!justCheck)
me.msg("<b>You can't use <h>%s<b> in this territory, it is owned by: %s<b>.", TextUtil.getMaterialName(material), otherFaction.getOwnerListString(loc));
@ -361,8 +299,7 @@ public class FactionsPlayerListener implements Listener
return true;
}
public static boolean canPlayerUseBlock(Player player, Block block, boolean justCheck)
{
public static boolean canPlayerUseBlock(Player player, Block block, boolean justCheck) {
String name = player.getName();
if (Conf.playersWhoBypassAllProtection.contains(name)) return true;
@ -378,14 +315,11 @@ public class FactionsPlayerListener implements Listener
return true;
// We only care about some material types.
if (otherFaction.hasPlayersOnline())
{
if ( ! Conf.territoryProtectedMaterials.contains(material))
if (otherFaction.hasPlayersOnline()) {
if (!Conf.territoryProtectedMaterials.contains(material))
return true;
}
else
{
if ( ! Conf.territoryProtectedMaterialsWhenOffline.contains(material))
} else {
if (!Conf.territoryProtectedMaterialsWhenOffline.contains(material))
return true;
}
@ -393,8 +327,7 @@ public class FactionsPlayerListener implements Listener
Relation rel = myFaction.getRelationTo(otherFaction);
// You may use any block unless it is another faction's territory...
if (rel.isNeutral() || (rel.isEnemy() && Conf.territoryEnemyProtectMaterials) || (rel.isAlly() && Conf.territoryAllyProtectMaterials))
{
if (rel.isNeutral() || (rel.isEnemy() && Conf.territoryEnemyProtectMaterials) || (rel.isAlly() && Conf.territoryAllyProtectMaterials)) {
if (!justCheck)
me.msg("<b>You can't %s <h>%s<b> in the territory of <h>%s<b>.", (material == Material.SOIL ? "trample" : "use"), TextUtil.getMaterialName(material), otherFaction.getTag(myFaction));
@ -402,8 +335,7 @@ public class FactionsPlayerListener implements Listener
}
// Also cancel if player doesn't have ownership rights for this claim
if (Conf.ownedAreasEnabled && Conf.ownedAreaProtectMaterials && !otherFaction.playerHasOwnershipRights(me, loc))
{
if (Conf.ownedAreasEnabled && Conf.ownedAreaProtectMaterials && !otherFaction.playerHasOwnershipRights(me, loc)) {
if (!justCheck)
me.msg("<b>You can't use <h>%s<b> in this territory, it is owned by: %s<b>.", TextUtil.getMaterialName(material), otherFaction.getOwnerListString(loc));
@ -414,8 +346,7 @@ public class FactionsPlayerListener implements Listener
}
@EventHandler(priority = EventPriority.HIGH)
public void onPlayerRespawn(PlayerRespawnEvent event)
{
public void onPlayerRespawn(PlayerRespawnEvent event) {
FPlayer me = FPlayers.i.get(event.getPlayer());
me.getPower(); // update power, so they won't have gained any while dead
@ -432,10 +363,9 @@ public class FactionsPlayerListener implements Listener
(
Conf.homesRespawnFromNoPowerLossWorlds
||
! Conf.worldsNoPowerLoss.contains(event.getPlayer().getWorld().getName())
!Conf.worldsNoPowerLoss.contains(event.getPlayer().getWorld().getName())
)
)
{
) {
event.setRespawnLocation(home);
}
}
@ -443,36 +373,32 @@ public class FactionsPlayerListener implements Listener
// For some reason onPlayerInteract() sometimes misses bucket events depending on distance (something like 2-3 blocks away isn't detected),
// but these separate bucket events below always fire without fail
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event)
{
public void onPlayerBucketEmpty(PlayerBucketEmptyEvent event) {
if (event.isCancelled()) return;
Block block = event.getBlockClicked();
Player player = event.getPlayer();
if ( ! playerCanUseItemHere(player, block.getLocation(), event.getBucket(), false))
{
if (!playerCanUseItemHere(player, block.getLocation(), event.getBucket(), false)) {
event.setCancelled(true);
return;
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerBucketFill(PlayerBucketFillEvent event)
{
public void onPlayerBucketFill(PlayerBucketFillEvent event) {
if (event.isCancelled()) return;
Block block = event.getBlockClicked();
Player player = event.getPlayer();
if ( ! playerCanUseItemHere(player, block.getLocation(), event.getBucket(), false))
{
if (!playerCanUseItemHere(player, block.getLocation(), event.getBucket(), false)) {
event.setCancelled(true);
return;
}
}
public static boolean preventCommand(String fullCmd, Player player)
{
public static boolean preventCommand(String fullCmd, Player player) {
if ((Conf.territoryNeutralDenyCommands.isEmpty() && Conf.territoryEnemyDenyCommands.isEmpty() && Conf.permanentFactionMemberDenyCommands.isEmpty()))
return false;
@ -483,8 +409,7 @@ public class FactionsPlayerListener implements Listener
String shortCmd; // command without the slash at the beginning
if (fullCmd.startsWith("/"))
shortCmd = fullCmd.substring(1);
else
{
else {
shortCmd = fullCmd;
fullCmd = "/" + fullCmd;
}
@ -493,27 +418,24 @@ public class FactionsPlayerListener implements Listener
(
me.hasFaction()
&&
! me.isAdminBypassing()
!me.isAdminBypassing()
&&
! Conf.permanentFactionMemberDenyCommands.isEmpty()
!Conf.permanentFactionMemberDenyCommands.isEmpty()
&&
me.getFaction().isPermanent()
&&
isCommandInList(fullCmd, shortCmd, Conf.permanentFactionMemberDenyCommands.iterator())
)
{
me.msg("<b>You can't use the command \""+fullCmd+"\" because you are in a permanent faction.");
) {
me.msg("<b>You can't use the command \"" + fullCmd + "\" because you are in a permanent faction.");
return true;
}
if (!me.isInOthersTerritory())
{
if (!me.isInOthersTerritory()) {
return false;
}
Relation rel = me.getRelationToLocation();
if (rel.isAtLeast(Relation.ALLY))
{
if (rel.isAtLeast(Relation.ALLY)) {
return false;
}
@ -521,14 +443,13 @@ public class FactionsPlayerListener implements Listener
(
rel.isNeutral()
&&
! Conf.territoryNeutralDenyCommands.isEmpty()
!Conf.territoryNeutralDenyCommands.isEmpty()
&&
! me.isAdminBypassing()
!me.isAdminBypassing()
&&
isCommandInList(fullCmd, shortCmd, Conf.territoryNeutralDenyCommands.iterator())
)
{
me.msg("<b>You can't use the command \""+fullCmd+"\" in neutral territory.");
) {
me.msg("<b>You can't use the command \"" + fullCmd + "\" in neutral territory.");
return true;
}
@ -536,28 +457,24 @@ public class FactionsPlayerListener implements Listener
(
rel.isEnemy()
&&
! Conf.territoryEnemyDenyCommands.isEmpty()
!Conf.territoryEnemyDenyCommands.isEmpty()
&&
! me.isAdminBypassing()
!me.isAdminBypassing()
&&
isCommandInList(fullCmd, shortCmd, Conf.territoryEnemyDenyCommands.iterator())
)
{
me.msg("<b>You can't use the command \""+fullCmd+"\" in enemy territory.");
) {
me.msg("<b>You can't use the command \"" + fullCmd + "\" in enemy territory.");
return true;
}
return false;
}
private static boolean isCommandInList(String fullCmd, String shortCmd, Iterator<String> iter)
{
private static boolean isCommandInList(String fullCmd, String shortCmd, Iterator<String> iter) {
String cmdCheck;
while (iter.hasNext())
{
while (iter.hasNext()) {
cmdCheck = iter.next();
if (cmdCheck == null)
{
if (cmdCheck == null) {
iter.remove();
continue;
}
@ -570,21 +487,18 @@ public class FactionsPlayerListener implements Listener
}
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerKick(PlayerKickEvent event)
{
public void onPlayerKick(PlayerKickEvent event) {
if (event.isCancelled()) return;
FPlayer badGuy = FPlayers.i.get(event.getPlayer());
if (badGuy == null)
{
if (badGuy == null) {
return;
}
SpoutFeatures.playerDisconnect(badGuy);
// if player was banned (not just kicked), get rid of their stored info
if (Conf.removePlayerDataWhenBanned && event.getReason().equals("Banned by admin."))
{
if (Conf.removePlayerDataWhenBanned && event.getReason().equals("Banned by admin.")) {
if (badGuy.getRole() == Role.ADMIN)
badGuy.getFaction().promoteNewLeader();

View File

@ -1,41 +1,35 @@
package com.massivecraft.factions.listeners;
import org.bukkit.plugin.Plugin;
import com.massivecraft.factions.P;
import com.massivecraft.factions.integration.SpoutFeatures;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.server.PluginDisableEvent;
import org.bukkit.event.server.PluginEnableEvent;
import com.massivecraft.factions.P;
import com.massivecraft.factions.integration.SpoutFeatures;
import org.bukkit.plugin.Plugin;
public class FactionsServerListener implements Listener
{
public class FactionsServerListener implements Listener {
public P p;
public FactionsServerListener(P p)
{
public FactionsServerListener(P p) {
this.p = p;
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPluginDisable(PluginDisableEvent event)
{
public void onPluginDisable(PluginDisableEvent event) {
String name = event.getPlugin().getDescription().getName();
if (name.equals("Spout"))
{
if (name.equals("Spout")) {
SpoutFeatures.setAvailable(false, "");
}
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPluginEnable(PluginEnableEvent event)
{
public void onPluginEnable(PluginEnableEvent event) {
Plugin plug = event.getPlugin();
String name = plug.getDescription().getName();
if (name.equals("Spout"))
{
if (name.equals("Spout")) {
SpoutFeatures.setAvailable(true, plug.getDescription().getFullName());
}
}

View File

@ -1,7 +1,6 @@
package com.massivecraft.factions.struct;
public enum ChatMode
{
public enum ChatMode {
FACTION(2, "faction chat"),
ALLIANCE(1, "alliance chat"),
PUBLIC(0, "public chat");
@ -9,32 +8,27 @@ public enum ChatMode
public final int value;
public final String nicename;
private ChatMode(final int value, final String nicename)
{
private ChatMode(final int value, final String nicename) {
this.value = value;
this.nicename = nicename;
}
public boolean isAtLeast(ChatMode role)
{
public boolean isAtLeast(ChatMode role) {
return this.value >= role.value;
}
public boolean isAtMost(ChatMode role)
{
public boolean isAtMost(ChatMode role) {
return this.value <= role.value;
}
@Override
public String toString()
{
public String toString() {
return this.nicename;
}
public ChatMode getNext()
{
public ChatMode getNext() {
if (this == PUBLIC) return ALLIANCE;
if (this == ALLIANCE)return FACTION;
if (this == ALLIANCE) return FACTION;
return PUBLIC;
}
}

View File

@ -1,11 +1,9 @@
package com.massivecraft.factions.struct;
import com.massivecraft.factions.P;
import org.bukkit.command.CommandSender;
import com.massivecraft.factions.P;
public enum Permission
{
public enum Permission {
MANAGE_SAFE_ZONE("managesafezone"),
MANAGE_WAR_ZONE("managewarzone"),
OWNERSHIP_BYPASS("ownershipbypass"),
@ -65,23 +63,19 @@ public enum Permission
TITLE("title"),
UNCLAIM("unclaim"),
UNCLAIM_ALL("unclaimall"),
VERSION("version"),
;
VERSION("version"),;
public final String node;
Permission(final String node)
{
this.node = "factions."+node;
Permission(final String node) {
this.node = "factions." + node;
}
public boolean has(CommandSender sender, boolean informSenderIfNot)
{
public boolean has(CommandSender sender, boolean informSenderIfNot) {
return P.p.perm.has(sender, this.node, informSenderIfNot);
}
public boolean has(CommandSender sender)
{
public boolean has(CommandSender sender) {
return has(sender, false);
}
}

View File

@ -1,12 +1,10 @@
package com.massivecraft.factions.struct;
import com.massivecraft.factions.Conf;
import org.bukkit.ChatColor;
import com.massivecraft.factions.Conf;
public enum Relation
{
public enum Relation {
MEMBER(3, "member"),
ALLY(2, "ally"),
NEUTRAL(1, "neutral"),
@ -15,50 +13,41 @@ public enum Relation
public final int value;
public final String nicename;
private Relation(final int value, final String nicename)
{
private Relation(final int value, final String nicename) {
this.value = value;
this.nicename = nicename;
}
@Override
public String toString()
{
public String toString() {
return this.nicename;
}
public boolean isMember()
{
public boolean isMember() {
return this == MEMBER;
}
public boolean isAlly()
{
public boolean isAlly() {
return this == ALLY;
}
public boolean isNeutral()
{
public boolean isNeutral() {
return this == NEUTRAL;
}
public boolean isEnemy()
{
public boolean isEnemy() {
return this == ENEMY;
}
public boolean isAtLeast(Relation relation)
{
public boolean isAtLeast(Relation relation) {
return this.value >= relation.value;
}
public boolean isAtMost(Relation relation)
{
public boolean isAtMost(Relation relation) {
return this.value <= relation.value;
}
public ChatColor getColor()
{
public ChatColor getColor() {
if (this == MEMBER)
return Conf.colorMember;
else if (this == ALLY)
@ -70,22 +59,18 @@ public enum Relation
}
// return appropriate Conf setting for DenyBuild based on this relation and their online status
public boolean confDenyBuild(boolean online)
{
public boolean confDenyBuild(boolean online) {
if (isMember())
return false;
if (online)
{
if (online) {
if (isEnemy())
return Conf.territoryEnemyDenyBuild;
else if (isAlly())
return Conf.territoryAllyDenyBuild;
else
return Conf.territoryDenyBuild;
}
else
{
} else {
if (isEnemy())
return Conf.territoryEnemyDenyBuildWhenOffline;
else if (isAlly())
@ -96,22 +81,18 @@ public enum Relation
}
// return appropriate Conf setting for PainBuild based on this relation and their online status
public boolean confPainBuild(boolean online)
{
public boolean confPainBuild(boolean online) {
if (isMember())
return false;
if (online)
{
if (online) {
if (isEnemy())
return Conf.territoryEnemyPainBuild;
else if (isAlly())
return Conf.territoryAllyPainBuild;
else
return Conf.territoryPainBuild;
}
else
{
} else {
if (isEnemy())
return Conf.territoryEnemyPainBuildWhenOffline;
else if (isAlly())
@ -122,8 +103,7 @@ public enum Relation
}
// return appropriate Conf setting for DenyUseage based on this relation
public boolean confDenyUseage()
{
public boolean confDenyUseage() {
if (isMember())
return false;
else if (isEnemy())
@ -134,8 +114,7 @@ public enum Relation
return Conf.territoryDenyUseage;
}
public double getRelationCost()
{
public double getRelationCost() {
if (isEnemy())
return Conf.econCostEnemy;
else if (isAlly())

View File

@ -2,8 +2,7 @@ package com.massivecraft.factions.struct;
import com.massivecraft.factions.Conf;
public enum Role
{
public enum Role {
ADMIN(2, "admin"),
MODERATOR(1, "moderator"),
NORMAL(0, "normal member");
@ -11,37 +10,30 @@ public enum Role
public final int value;
public final String nicename;
private Role(final int value, final String nicename)
{
private Role(final int value, final String nicename) {
this.value = value;
this.nicename = nicename;
}
public boolean isAtLeast(Role role)
{
public boolean isAtLeast(Role role) {
return this.value >= role.value;
}
public boolean isAtMost(Role role)
{
public boolean isAtMost(Role role) {
return this.value <= role.value;
}
@Override
public String toString()
{
public String toString() {
return this.nicename;
}
public String getPrefix()
{
if (this == Role.ADMIN)
{
public String getPrefix() {
if (this == Role.ADMIN) {
return Conf.prefixAdmin;
}
if (this == Role.MODERATOR)
{
if (this == Role.MODERATOR) {
return Conf.prefixMod;
}

View File

@ -1,13 +1,11 @@
package com.massivecraft.factions.util;
import java.util.*;
import org.bukkit.ChatColor;
public class AsciiCompass
{
public enum Point
{
import java.util.ArrayList;
public class AsciiCompass {
public enum Point {
N('N'),
NE('/'),
E('E'),
@ -19,26 +17,22 @@ public class AsciiCompass
public final char asciiChar;
private Point(final char asciiChar)
{
private Point(final char asciiChar) {
this.asciiChar = asciiChar;
}
@Override
public String toString()
{
public String toString() {
return String.valueOf(this.asciiChar);
}
public String toString(boolean isActive, ChatColor colorActive, String colorDefault)
{
return (isActive ? colorActive : colorDefault)+String.valueOf(this.asciiChar);
public String toString(boolean isActive, ChatColor colorActive, String colorDefault) {
return (isActive ? colorActive : colorDefault) + String.valueOf(this.asciiChar);
}
}
public static AsciiCompass.Point getCompassPointForDirection(double inDegrees)
{
double degrees = (inDegrees - 180) % 360 ;
public static AsciiCompass.Point getCompassPointForDirection(double inDegrees) {
double degrees = (inDegrees - 180) % 360;
if (degrees < 0)
degrees += 360;
@ -64,8 +58,7 @@ public class AsciiCompass
return null;
}
public static ArrayList<String> getAsciiCompass(Point point, ChatColor colorActive, String colorDefault)
{
public static ArrayList<String> getAsciiCompass(Point point, ChatColor colorActive, String colorDefault) {
ArrayList<String> ret = new ArrayList<String>();
String row;
@ -77,7 +70,7 @@ public class AsciiCompass
row = "";
row += Point.W.toString(Point.W == point, colorActive, colorDefault);
row += colorDefault+"+";
row += colorDefault + "+";
row += Point.E.toString(Point.E == point, colorActive, colorDefault);
ret.add(row);
@ -90,8 +83,7 @@ public class AsciiCompass
return ret;
}
public static ArrayList<String> getAsciiCompass(double inDegrees, ChatColor colorActive, String colorDefault)
{
public static ArrayList<String> getAsciiCompass(double inDegrees, ChatColor colorActive, String colorDefault) {
return getAsciiCompass(getCompassPointForDirection(inDegrees), colorActive, colorDefault);
}
}

View File

@ -1,27 +1,20 @@
package com.massivecraft.factions.util;
import com.massivecraft.factions.*;
import com.massivecraft.factions.struct.Role;
import org.bukkit.scheduler.BukkitRunnable;
import java.util.ArrayList;
import java.util.ListIterator;
import org.bukkit.scheduler.BukkitRunnable;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.Faction;
import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.FPlayers;
import com.massivecraft.factions.P;
import com.massivecraft.factions.struct.Role;
public class AutoLeaveProcessTask extends BukkitRunnable
{
public class AutoLeaveProcessTask extends BukkitRunnable {
private transient boolean readyToGo = false;
private transient boolean finished = false;
private transient ArrayList<FPlayer> fplayers;
private transient ListIterator<FPlayer> iterator;
private transient double toleranceMillis;
public AutoLeaveProcessTask()
{
public AutoLeaveProcessTask() {
fplayers = new ArrayList<FPlayer>(FPlayers.i.get());
this.iterator = fplayers.listIterator();
this.toleranceMillis = Conf.autoLeaveAfterDaysOfInactivity * 24 * 60 * 60 * 1000;
@ -29,40 +22,34 @@ public class AutoLeaveProcessTask extends BukkitRunnable
this.finished = false;
}
public void run()
{
if (Conf.autoLeaveAfterDaysOfInactivity <= 0.0 || Conf.autoLeaveRoutineMaxMillisecondsPerTick <= 0.0)
{
public void run() {
if (Conf.autoLeaveAfterDaysOfInactivity <= 0.0 || Conf.autoLeaveRoutineMaxMillisecondsPerTick <= 0.0) {
this.stop();
return;
}
if ( ! readyToGo) return;
if (!readyToGo) return;
// this is set so it only does one iteration at a time, no matter how frequently the timer fires
readyToGo = false;
// and this is tracked to keep one iteration from dragging on too long and possibly choking the system if there are a very large number of players to go through
long loopStartTime = System.currentTimeMillis();
while(iterator.hasNext())
{
while (iterator.hasNext()) {
long now = System.currentTimeMillis();
// if this iteration has been running for maximum time, stop to take a breather until next tick
if (now > loopStartTime + Conf.autoLeaveRoutineMaxMillisecondsPerTick)
{
if (now > loopStartTime + Conf.autoLeaveRoutineMaxMillisecondsPerTick) {
readyToGo = true;
return;
}
FPlayer fplayer = iterator.next();
if (fplayer.isOffline() && now - fplayer.getLastLoginTime() > toleranceMillis)
{
if (fplayer.isOffline() && now - fplayer.getLastLoginTime() > toleranceMillis) {
if (Conf.logFactionLeave || Conf.logFactionKick)
P.p.log("Player "+fplayer.getName()+" was auto-removed due to inactivity.");
P.p.log("Player " + fplayer.getName() + " was auto-removed due to inactivity.");
// if player is faction admin, sort out the faction since he's going away
if (fplayer.getRole() == Role.ADMIN)
{
if (fplayer.getRole() == Role.ADMIN) {
Faction faction = fplayer.getFaction();
if (faction != null)
fplayer.getFaction().promoteNewLeader();
@ -79,16 +66,14 @@ public class AutoLeaveProcessTask extends BukkitRunnable
}
// we're done, shut down
public void stop()
{
public void stop() {
readyToGo = false;
finished = true;
this.cancel();
}
public boolean isFinished()
{
public boolean isFinished() {
return finished;
}
}

View File

@ -3,19 +3,16 @@ package com.massivecraft.factions.util;
import com.massivecraft.factions.Conf;
import com.massivecraft.factions.P;
public class AutoLeaveTask implements Runnable
{
public class AutoLeaveTask implements Runnable {
private static AutoLeaveProcessTask task;
double rate;
public AutoLeaveTask()
{
public AutoLeaveTask() {
this.rate = Conf.autoLeaveRoutineRunsEveryXMinutes;
}
public synchronized void run()
{
if (task != null && ! task.isFinished())
public synchronized void run() {
if (task != null && !task.isFinished())
return;
task = new AutoLeaveProcessTask();

View File

@ -9,8 +9,7 @@ import org.bukkit.World;
* yet when an object of this class is created, only when the Location is first accessed.
*/
public class LazyLocation
{
public class LazyLocation {
private Location location = null;
private String worldName;
private double x;
@ -19,18 +18,15 @@ public class LazyLocation
private float pitch;
private float yaw;
public LazyLocation(Location loc)
{
public LazyLocation(Location loc) {
setLocation(loc);
}
public LazyLocation(final String worldName, final double x, final double y, final double z)
{
public LazyLocation(final String worldName, final double x, final double y, final double z) {
this(worldName, x, y, z, 0, 0);
}
public LazyLocation(final String worldName, final double x, final double y, final double z, final float yaw, final float pitch)
{
public LazyLocation(final String worldName, final double x, final double y, final double z, final float yaw, final float pitch) {
this.worldName = worldName;
this.x = x;
this.y = y;
@ -40,16 +36,14 @@ public class LazyLocation
}
// This returns the actual Location
public final Location getLocation()
{
public final Location getLocation() {
// make sure Location is initialized before returning it
initLocation();
return location;
}
// change the Location
public final void setLocation(Location loc)
{
public final void setLocation(Location loc) {
this.location = loc;
this.worldName = loc.getWorld().getName();
this.x = loc.getX();
@ -61,8 +55,7 @@ public class LazyLocation
// This initializes the Location
private void initLocation()
{
private void initLocation() {
// if location is already initialized, simply return
if (location != null) return;
@ -75,33 +68,27 @@ public class LazyLocation
}
public final String getWorldName()
{
public final String getWorldName() {
return worldName;
}
public final double getX()
{
public final double getX() {
return x;
}
public final double getY()
{
public final double getY() {
return y;
}
public final double getZ()
{
public final double getZ() {
return z;
}
public final double getPitch()
{
public final double getPitch() {
return pitch;
}
public final double getYaw()
{
public final double getYaw() {
return yaw;
}
}

View File

@ -1,37 +1,26 @@
package com.massivecraft.factions.util;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.P;
import org.bukkit.craftbukkit.libs.com.google.gson.*;
import java.lang.reflect.Type;
import java.util.concurrent.ConcurrentHashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import java.util.Map.Entry;
import org.bukkit.craftbukkit.libs.com.google.gson.JsonArray;
import org.bukkit.craftbukkit.libs.com.google.gson.JsonDeserializationContext;
import org.bukkit.craftbukkit.libs.com.google.gson.JsonDeserializer;
import org.bukkit.craftbukkit.libs.com.google.gson.JsonElement;
import org.bukkit.craftbukkit.libs.com.google.gson.JsonObject;
import org.bukkit.craftbukkit.libs.com.google.gson.JsonParseException;
import org.bukkit.craftbukkit.libs.com.google.gson.JsonPrimitive;
import org.bukkit.craftbukkit.libs.com.google.gson.JsonSerializationContext;
import org.bukkit.craftbukkit.libs.com.google.gson.JsonSerializer;
import com.massivecraft.factions.FLocation;
import com.massivecraft.factions.P;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level;
public class MapFLocToStringSetTypeAdapter implements JsonDeserializer<Map<FLocation, Set<String>>>, JsonSerializer<Map<FLocation, Set<String>>>
{
public class MapFLocToStringSetTypeAdapter implements JsonDeserializer<Map<FLocation, Set<String>>>, JsonSerializer<Map<FLocation, Set<String>>> {
@Override
public Map<FLocation, Set<String>> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
{
public Map<FLocation, Set<String>> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
try {
JsonObject obj = json.getAsJsonObject();
if (obj == null)
{
if (obj == null) {
return null;
}
@ -42,19 +31,16 @@ public class MapFLocToStringSetTypeAdapter implements JsonDeserializer<Map<FLoca
String[] coords;
int x, z;
for (Entry<String, JsonElement> entry : obj.entrySet())
{
for (Entry<String, JsonElement> entry : obj.entrySet()) {
worldName = entry.getKey();
for (Entry<String, JsonElement> entry2 : entry.getValue().getAsJsonObject().entrySet())
{
for (Entry<String, JsonElement> entry2 : entry.getValue().getAsJsonObject().entrySet()) {
coords = entry2.getKey().trim().split("[,\\s]+");
x = Integer.parseInt(coords[0]);
z = Integer.parseInt(coords[1]);
nameSet = new HashSet<String>();
iter = entry2.getValue().getAsJsonArray().iterator();
while (iter.hasNext())
{
while (iter.hasNext()) {
nameSet.add(iter.next().getAsString());
}
@ -64,9 +50,7 @@ public class MapFLocToStringSetTypeAdapter implements JsonDeserializer<Map<FLoca
return locationMap;
}
catch (Exception ex)
{
} catch (Exception ex) {
ex.printStackTrace();
P.p.log(Level.WARNING, "Error encountered while deserializing a Map of FLocations to String Sets.");
return null;
@ -74,13 +58,11 @@ public class MapFLocToStringSetTypeAdapter implements JsonDeserializer<Map<FLoca
}
@Override
public JsonElement serialize(Map<FLocation, Set<String>> src, Type typeOfSrc, JsonSerializationContext context)
{
public JsonElement serialize(Map<FLocation, Set<String>> src, Type typeOfSrc, JsonSerializationContext context) {
JsonObject obj = new JsonObject();
try {
if (src != null)
{
if (src != null) {
FLocation loc;
String locWorld;
Set<String> nameSet;
@ -88,27 +70,23 @@ public class MapFLocToStringSetTypeAdapter implements JsonDeserializer<Map<FLoca
JsonArray nameArray;
JsonPrimitive nameElement;
for (Entry<FLocation, Set<String>> entry : src.entrySet())
{
for (Entry<FLocation, Set<String>> entry : src.entrySet()) {
loc = entry.getKey();
locWorld = loc.getWorldName();
nameSet = entry.getValue();
if (nameSet == null || nameSet.isEmpty())
{
if (nameSet == null || nameSet.isEmpty()) {
continue;
}
nameArray = new JsonArray();
iter = nameSet.iterator();
while (iter.hasNext())
{
while (iter.hasNext()) {
nameElement = new JsonPrimitive(iter.next());
nameArray.add(nameElement);
}
if ( ! obj.has(locWorld))
{
if (!obj.has(locWorld)) {
obj.add(locWorld, new JsonObject());
}
@ -117,9 +95,7 @@ public class MapFLocToStringSetTypeAdapter implements JsonDeserializer<Map<FLoca
}
return obj;
}
catch (Exception ex)
{
} catch (Exception ex) {
ex.printStackTrace();
P.p.log(Level.WARNING, "Error encountered while serializing a Map of FLocations to String Sets.");
return obj;

View File

@ -1,19 +1,16 @@
package com.massivecraft.factions.util;
import org.bukkit.ChatColor;
import org.bukkit.entity.Creature;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import java.util.Arrays;
import java.util.HashSet;
import org.bukkit.ChatColor;
import org.bukkit.entity.Creature;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Entity;
public class MiscUtil
{
public static EntityType creatureTypeFromEntity(Entity entity)
{
if ( ! (entity instanceof Creature))
{
public class MiscUtil {
public static EntityType creatureTypeFromEntity(Entity entity) {
if (!(entity instanceof Creature)) {
return null;
}
@ -41,24 +38,21 @@ public class MiscUtil
}
/// TODO create tag whitelist!!
public static HashSet<String> substanceChars = new HashSet<String>(Arrays.asList(new String []{
public static HashSet<String> substanceChars = new HashSet<String>(Arrays.asList(new String[]{
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H",
"I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r",
"s", "t", "u", "v", "w", "x", "y", "z"
}));
public static String getComparisonString(String str)
{
public static String getComparisonString(String str) {
String ret = "";
str = ChatColor.stripColor(str);
str = str.toLowerCase();
for (char c : str.toCharArray())
{
if (substanceChars.contains(String.valueOf(c)))
{
for (char c : str.toCharArray()) {
if (substanceChars.contains(String.valueOf(c))) {
ret += c;
}
}

Some files were not shown because too many files have changed in this diff Show More