Some case insensitivity fixes
This commit is contained in:
		@@ -16,7 +16,7 @@ import com.bukkit.mcteam.gson.reflect.TypeToken;
 | 
			
		||||
import com.bukkit.mcteam.util.AsciiCompass;
 | 
			
		||||
import com.bukkit.mcteam.util.DiscUtil;
 | 
			
		||||
 | 
			
		||||
//import com.bukkit.mcteam.factions.util.*;
 | 
			
		||||
// TODO rework to use single layer hash map and convert from and to the formay while saving and loading!!
 | 
			
		||||
 | 
			
		||||
public class Board {
 | 
			
		||||
	protected static transient File file = new File(Factions.instance.getDataFolder(), "board.json");
 | 
			
		||||
@@ -182,6 +182,8 @@ public class Board {
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public static boolean load() {
 | 
			
		||||
		Factions.log("Loading board from disk");
 | 
			
		||||
		
 | 
			
		||||
		if ( ! file.exists()) {
 | 
			
		||||
			Factions.log("No board to load from disk. Creating new file.");
 | 
			
		||||
			save();
 | 
			
		||||
 
 | 
			
		||||
@@ -49,7 +49,9 @@ public class Conf {
 | 
			
		||||
	public static boolean territoryBlockCreepers = false;
 | 
			
		||||
	public static boolean territoryBlockFireballs = false;
 | 
			
		||||
	
 | 
			
		||||
	public static List<Material> territoryProtectedMaterials = new ArrayList<Material>();
 | 
			
		||||
	public static Set<Material> territoryProtectedMaterials = new HashSet<Material>();
 | 
			
		||||
	public static Set<Material> territoryDenyUseageMaterials = new HashSet<Material>();
 | 
			
		||||
	public static transient Set<Material> instaDestroyMaterials = new HashSet<Material>(); // This one is not really configuration therefore transient
 | 
			
		||||
 | 
			
		||||
	public static boolean allowNoSlashCommand = true;
 | 
			
		||||
	
 | 
			
		||||
@@ -60,6 +62,25 @@ public class Conf {
 | 
			
		||||
		territoryProtectedMaterials.add(Material.DISPENSER);
 | 
			
		||||
		territoryProtectedMaterials.add(Material.CHEST);
 | 
			
		||||
		territoryProtectedMaterials.add(Material.FURNACE);
 | 
			
		||||
		
 | 
			
		||||
		territoryDenyUseageMaterials.add(Material.REDSTONE);
 | 
			
		||||
		territoryDenyUseageMaterials.add(Material.SIGN);
 | 
			
		||||
		territoryDenyUseageMaterials.add(Material.FLINT_AND_STEEL);
 | 
			
		||||
		territoryDenyUseageMaterials.add(Material.BED);
 | 
			
		||||
		territoryDenyUseageMaterials.add(Material.BUCKET);
 | 
			
		||||
		territoryDenyUseageMaterials.add(Material.WATER_BUCKET);
 | 
			
		||||
		territoryDenyUseageMaterials.add(Material.DIODE);
 | 
			
		||||
		territoryDenyUseageMaterials.add(Material.SUGAR_CANE);
 | 
			
		||||
		
 | 
			
		||||
		instaDestroyMaterials.add(Material.SAPLING);
 | 
			
		||||
		instaDestroyMaterials.add(Material.TORCH);
 | 
			
		||||
		instaDestroyMaterials.add(Material.REDSTONE_WIRE);
 | 
			
		||||
		instaDestroyMaterials.add(Material.CROPS);
 | 
			
		||||
		instaDestroyMaterials.add(Material.REDSTONE_TORCH_OFF);
 | 
			
		||||
		instaDestroyMaterials.add(Material.REDSTONE_TORCH_ON);
 | 
			
		||||
		instaDestroyMaterials.add(Material.SUGAR_CANE_BLOCK);
 | 
			
		||||
		instaDestroyMaterials.add(Material.DIODE_BLOCK_OFF);
 | 
			
		||||
		instaDestroyMaterials.add(Material.DIODE_BLOCK_ON);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
@@ -80,6 +101,8 @@ public class Conf {
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public static boolean load() {
 | 
			
		||||
		Factions.log("Loading conf from disk");
 | 
			
		||||
		
 | 
			
		||||
		if ( ! file.exists()) {
 | 
			
		||||
			Factions.log("No conf to load from disk. Creating new file.");
 | 
			
		||||
			save();
 | 
			
		||||
@@ -97,3 +120,4 @@ public class Conf {
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -86,6 +86,14 @@ public class FLocation {
 | 
			
		||||
	// Comparison
 | 
			
		||||
	//----------------------------------------------//
 | 
			
		||||
	
 | 
			
		||||
	public int hashCode() {
 | 
			
		||||
		int hash = 3;
 | 
			
		||||
        hash = 19 * hash + (this.worldName != null ? this.worldName.hashCode() : 0);
 | 
			
		||||
        hash = 19 * hash + this.x;
 | 
			
		||||
        hash = 19 * hash + this.z;
 | 
			
		||||
        return hash;
 | 
			
		||||
	};
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public boolean equals(Object obj) {
 | 
			
		||||
		if (obj == this)
 | 
			
		||||
@@ -93,7 +101,7 @@ public class FLocation {
 | 
			
		||||
		if (!(obj instanceof FLocation))
 | 
			
		||||
			return false;
 | 
			
		||||
 | 
			
		||||
		FLocation o = (FLocation) obj;
 | 
			
		||||
		return this.x == o.x && this.z == o.z && this.worldName.equals(o.worldName);
 | 
			
		||||
		FLocation that = (FLocation) obj;
 | 
			
		||||
		return this.x == that.x && this.z == that.z && ( this.worldName==null ? that.worldName==null : this.worldName.equals(that.worldName) );
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
@@ -19,8 +19,7 @@ import com.bukkit.mcteam.util.DiscUtil;
 | 
			
		||||
 * 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).
 | 
			
		||||
 * 
 | 
			
		||||
 * The FPlayer is linked to a minecraft player using the player name in lowercase form.
 | 
			
		||||
 * Lowercase is enforced while loading from disk TODO
 | 
			
		||||
 * 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.
 | 
			
		||||
@@ -32,7 +31,7 @@ public class FPlayer {
 | 
			
		||||
	// Fields
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	private static transient Map<String, FPlayer> instances = new HashMap<String, FPlayer>();
 | 
			
		||||
	private static transient TreeMap<String, FPlayer> instances = new TreeMap<String, FPlayer>(String.CASE_INSENSITIVE_ORDER);
 | 
			
		||||
	private static transient File file = new File(Factions.instance.getDataFolder(), "players.json");
 | 
			
		||||
	
 | 
			
		||||
	private transient String playerName;
 | 
			
		||||
@@ -75,8 +74,6 @@ public class FPlayer {
 | 
			
		||||
		return Factions.instance.getServer().getPlayer(playerName);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	// TODO lowercase vs mixedcase for logged in chars...
 | 
			
		||||
	public String getPlayerName() {
 | 
			
		||||
		return this.playerName;
 | 
			
		||||
	}
 | 
			
		||||
@@ -202,15 +199,15 @@ public class FPlayer {
 | 
			
		||||
	public String getNameAndTitle(Faction faction) {
 | 
			
		||||
		return this.getRelationColor(faction)+this.getNameAndTitle();
 | 
			
		||||
	}
 | 
			
		||||
	public String getNameAndTitle(FPlayer follower) {
 | 
			
		||||
		return this.getRelationColor(follower)+this.getNameAndTitle();
 | 
			
		||||
	public String getNameAndTitle(FPlayer fplayer) {
 | 
			
		||||
		return this.getRelationColor(fplayer)+this.getNameAndTitle();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public String getNameAndTag(Faction faction) {
 | 
			
		||||
		return this.getRelationColor(faction)+this.getNameAndTag();
 | 
			
		||||
	}
 | 
			
		||||
	public String getNameAndTag(FPlayer follower) {
 | 
			
		||||
		return this.getRelationColor(follower)+this.getNameAndTag();
 | 
			
		||||
	public String getNameAndTag(FPlayer fplayer) {
 | 
			
		||||
		return this.getRelationColor(fplayer)+this.getNameAndTag();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public String getNameAndRelevant(Faction faction) {
 | 
			
		||||
@@ -225,8 +222,8 @@ public class FPlayer {
 | 
			
		||||
		// For non members we show tag
 | 
			
		||||
		return rel.getColor() + this.getNameAndTag();
 | 
			
		||||
	}
 | 
			
		||||
	public String getNameAndRelevant(FPlayer follower) {
 | 
			
		||||
		return getNameAndRelevant(follower.getFaction());
 | 
			
		||||
	public String getNameAndRelevant(FPlayer fplayer) {
 | 
			
		||||
		return getNameAndRelevant(fplayer.getFaction());
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// Chat Tag: 
 | 
			
		||||
@@ -248,12 +245,12 @@ public class FPlayer {
 | 
			
		||||
		
 | 
			
		||||
		return this.getRelation(faction).getColor()+getChatTag();
 | 
			
		||||
	}
 | 
			
		||||
	public String getChatTag(FPlayer follower) {
 | 
			
		||||
	public String getChatTag(FPlayer fplayer) {
 | 
			
		||||
		if ( ! this.hasFaction()) {
 | 
			
		||||
			return "";
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		return this.getRelation(follower).getColor()+getChatTag();
 | 
			
		||||
		return this.getRelation(fplayer).getColor()+getChatTag();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------
 | 
			
		||||
@@ -264,16 +261,16 @@ public class FPlayer {
 | 
			
		||||
		return faction.getRelation(this);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public Relation getRelation(FPlayer follower) {
 | 
			
		||||
		return this.getFaction().getRelation(follower);
 | 
			
		||||
	public Relation getRelation(FPlayer fplayer) {
 | 
			
		||||
		return this.getFaction().getRelation(fplayer);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public ChatColor getRelationColor(Faction faction) {
 | 
			
		||||
		return faction.getRelationColor(this);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public ChatColor getRelationColor(FPlayer follower) {
 | 
			
		||||
		return this.getRelation(follower).getColor();
 | 
			
		||||
	public ChatColor getRelationColor(FPlayer fplayer) {
 | 
			
		||||
		return this.getRelation(fplayer).getColor();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
@@ -402,8 +399,13 @@ public class FPlayer {
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// Get and search
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	public static FPlayer get(String playerName) {
 | 
			
		||||
		playerName = playerName.toLowerCase();
 | 
			
		||||
	
 | 
			
		||||
	// You should use this one to be sure you do not spell the player name wrong.
 | 
			
		||||
	public static FPlayer get(Player player) {
 | 
			
		||||
		return get(player.getName());
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	private static FPlayer get(String playerName) {
 | 
			
		||||
		if (instances.containsKey(playerName)) {
 | 
			
		||||
			return instances.get(playerName);
 | 
			
		||||
		}
 | 
			
		||||
@@ -415,11 +417,6 @@ public class FPlayer {
 | 
			
		||||
		return vplayer;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// You should use this one to be sure you do not spell the player name wrong.
 | 
			
		||||
	public static FPlayer get(Player player) {
 | 
			
		||||
		return get(player.getName());
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public static Set<FPlayer> getAllOnline() {
 | 
			
		||||
		Set<FPlayer> fplayers = new HashSet<FPlayer>();
 | 
			
		||||
		for (Player player : Factions.instance.getServer().getOnlinePlayers()) {
 | 
			
		||||
@@ -452,16 +449,16 @@ public class FPlayer {
 | 
			
		||||
	public static boolean save() {
 | 
			
		||||
		//Factions.log("Saving players to disk");
 | 
			
		||||
		
 | 
			
		||||
		// We only wan't to save the vplayers with non default values
 | 
			
		||||
		Map<String, FPlayer> vplayersToSave = new HashMap<String, FPlayer>();
 | 
			
		||||
		// We only wan't to save the players with non default values
 | 
			
		||||
		Map<String, FPlayer> playersToSave = new HashMap<String, FPlayer>();
 | 
			
		||||
		for (Entry<String, FPlayer> entry : instances.entrySet()) {
 | 
			
		||||
			if (entry.getValue().shouldBeSaved()) {
 | 
			
		||||
				vplayersToSave.put(entry.getKey(), entry.getValue());
 | 
			
		||||
				playersToSave.put(entry.getKey(), entry.getValue());
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		try {
 | 
			
		||||
			DiscUtil.write(file, Factions.gson.toJson(vplayersToSave));
 | 
			
		||||
			DiscUtil.write(file, Factions.gson.toJson(playersToSave));
 | 
			
		||||
		} catch (IOException e) {
 | 
			
		||||
			Factions.log("Failed to save the players to disk.");
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
@@ -471,6 +468,7 @@ public class FPlayer {
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public static boolean load() {
 | 
			
		||||
		Factions.log("Loading players from disk");
 | 
			
		||||
		if ( ! file.exists()) {
 | 
			
		||||
			Factions.log("No players to load from disk. Creating new file.");
 | 
			
		||||
			save();
 | 
			
		||||
@@ -480,11 +478,8 @@ public class FPlayer {
 | 
			
		||||
		try {
 | 
			
		||||
			Type type = new TypeToken<Map<String, FPlayer>>(){}.getType();
 | 
			
		||||
			Map<String, FPlayer> instancesFromFile = Factions.gson.fromJson(DiscUtil.read(file), type);
 | 
			
		||||
			
 | 
			
		||||
			instances = new HashMap<String, FPlayer>();
 | 
			
		||||
			for (Entry<String, FPlayer> instanceFromFile : instancesFromFile.entrySet()) {
 | 
			
		||||
				instances.put(instanceFromFile.getKey().toLowerCase(), instanceFromFile.getValue());
 | 
			
		||||
			}
 | 
			
		||||
			instances.clear();
 | 
			
		||||
			instances.putAll(instancesFromFile);
 | 
			
		||||
		} catch (IOException e) {
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
			return false;
 | 
			
		||||
 
 | 
			
		||||
@@ -28,7 +28,7 @@ public class Faction {
 | 
			
		||||
	
 | 
			
		||||
	private transient int id;
 | 
			
		||||
	private Map<Integer, Relation> relationWish;
 | 
			
		||||
	private Set<String> invites; // Where string is a follower id (lower case name)
 | 
			
		||||
	private Set<String> invites; // Where string is a lowercase player name
 | 
			
		||||
	private boolean open;
 | 
			
		||||
	private String tag;
 | 
			
		||||
	private String description;
 | 
			
		||||
@@ -70,8 +70,8 @@ public class Faction {
 | 
			
		||||
	public String getTag(Faction otherFaction) {
 | 
			
		||||
		return this.getTag(otherFaction.getRelationColor(this).toString());
 | 
			
		||||
	}
 | 
			
		||||
	public String getTag(FPlayer otherFollower) {
 | 
			
		||||
		return this.getTag(otherFollower.getRelationColor(this).toString());
 | 
			
		||||
	public String getTag(FPlayer otherFplayer) {
 | 
			
		||||
		return this.getTag(otherFplayer.getRelationColor(this).toString());
 | 
			
		||||
	}
 | 
			
		||||
	public void setTag(String str) {
 | 
			
		||||
		if (Conf.factionTagForceUpperCase) {
 | 
			
		||||
@@ -89,19 +89,19 @@ public class Faction {
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------
 | 
			
		||||
	// Invites
 | 
			
		||||
	// Invites - uses lowercase name
 | 
			
		||||
	// -------------------------------
 | 
			
		||||
	
 | 
			
		||||
	public void invite(FPlayer fplayer) {
 | 
			
		||||
		this.invites.add(fplayer.getName()); //TODO Lowercase paradigm shit....
 | 
			
		||||
		this.invites.add(fplayer.getName().toLowerCase());
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public void deinvite(FPlayer fplayer) {
 | 
			
		||||
		this.invites.remove(fplayer.getName()); //TODO Lowercase paradigm shit....
 | 
			
		||||
		this.invites.remove(fplayer.getName().toLowerCase());
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public boolean isInvited(FPlayer fplayer) {
 | 
			
		||||
		return this.invites.contains(fplayer.getName()); //TODO Lowercase paradigm shit....
 | 
			
		||||
		return this.invites.contains(fplayer.getName().toLowerCase());
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------
 | 
			
		||||
@@ -136,8 +136,8 @@ public class Faction {
 | 
			
		||||
		return this.getRelationWish(otherFaction);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public Relation getRelation(FPlayer follower) {
 | 
			
		||||
		return getRelation(follower.getFaction());
 | 
			
		||||
	public Relation getRelation(FPlayer fplayer) {
 | 
			
		||||
		return getRelation(fplayer.getFaction());
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	//----------------------------------------------//
 | 
			
		||||
@@ -145,16 +145,16 @@ public class Faction {
 | 
			
		||||
	//----------------------------------------------//
 | 
			
		||||
	public double getPower() {
 | 
			
		||||
		double ret = 0;
 | 
			
		||||
		for (FPlayer follower : this.getFPlayers()) {
 | 
			
		||||
			ret += follower.getPower();
 | 
			
		||||
		for (FPlayer fplayer : this.getFPlayers()) {
 | 
			
		||||
			ret += fplayer.getPower();
 | 
			
		||||
		}
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public double getPowerMax() {
 | 
			
		||||
		double ret = 0;
 | 
			
		||||
		for (FPlayer follower : this.getFPlayers()) {
 | 
			
		||||
			ret += follower.getPowerMax();
 | 
			
		||||
		for (FPlayer fplayer : this.getFPlayers()) {
 | 
			
		||||
			ret += fplayer.getPowerMax();
 | 
			
		||||
		}
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
@@ -176,14 +176,14 @@ public class Faction {
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------
 | 
			
		||||
	// Followers
 | 
			
		||||
	// Fplayers
 | 
			
		||||
	// -------------------------------
 | 
			
		||||
	
 | 
			
		||||
	public ArrayList<FPlayer> getFPlayers() {
 | 
			
		||||
		ArrayList<FPlayer> ret = new ArrayList<FPlayer>();
 | 
			
		||||
		for (FPlayer follower : FPlayer.getAll()) {
 | 
			
		||||
			if (follower.getFaction() == this) {
 | 
			
		||||
				ret.add(follower);
 | 
			
		||||
		for (FPlayer fplayer : FPlayer.getAll()) {
 | 
			
		||||
			if (fplayer.getFaction() == this) {
 | 
			
		||||
				ret.add(fplayer);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		return ret;
 | 
			
		||||
@@ -214,8 +214,8 @@ public class Faction {
 | 
			
		||||
	public ArrayList<Player> getOnlinePlayers() {
 | 
			
		||||
		ArrayList<Player> ret = new ArrayList<Player>();
 | 
			
		||||
		for (Player player: Factions.instance.getServer().getOnlinePlayers()) {
 | 
			
		||||
			FPlayer follower = FPlayer.get(player);
 | 
			
		||||
			if (follower.getFaction() == this) {
 | 
			
		||||
			FPlayer fplayer = FPlayer.get(player);
 | 
			
		||||
			if (fplayer.getFaction() == this) {
 | 
			
		||||
				ret.add(player);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
@@ -287,8 +287,8 @@ public class Faction {
 | 
			
		||||
		return this.getRelation(otherFaction).getColor();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public ChatColor getRelationColor(FPlayer follower) {
 | 
			
		||||
		return this.getRelation(follower).getColor();
 | 
			
		||||
	public ChatColor getRelationColor(FPlayer fplayer) {
 | 
			
		||||
		return this.getRelation(fplayer).getColor();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 | 
			
		||||
@@ -312,6 +312,8 @@ public class Faction {
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public static boolean load() {
 | 
			
		||||
		Factions.log("Loading factions from disk");
 | 
			
		||||
		
 | 
			
		||||
		if ( ! file.exists()) {
 | 
			
		||||
			Factions.log("No factions to load from disk. Creating new file.");
 | 
			
		||||
			save();
 | 
			
		||||
@@ -319,7 +321,9 @@ public class Faction {
 | 
			
		||||
		
 | 
			
		||||
		try {
 | 
			
		||||
			Type type = new TypeToken<Map<Integer, Faction>>(){}.getType();
 | 
			
		||||
			instances = Factions.gson.fromJson(DiscUtil.read(file), type);
 | 
			
		||||
			Map<Integer, Faction> instancesFromFile = Factions.gson.fromJson(DiscUtil.read(file), type);
 | 
			
		||||
			instances.clear();
 | 
			
		||||
			instances.putAll(instancesFromFile);
 | 
			
		||||
		} catch (IOException e) {
 | 
			
		||||
			e.printStackTrace();
 | 
			
		||||
			return false;
 | 
			
		||||
 
 | 
			
		||||
@@ -181,7 +181,8 @@ public class Factions extends JavaPlugin {
 | 
			
		||||
		if (test != null) {
 | 
			
		||||
			helpPlugin = ((Help) test);
 | 
			
		||||
			Factions.log("Found and will use plugin "+helpPlugin.getDescription().getFullName());
 | 
			
		||||
			helpPlugin.registerCommand(this.getBaseCommand()+" help *[page]", "Factions plugin help.", helpPlugin, true);
 | 
			
		||||
			helpPlugin.registerCommand(this.getBaseCommand()+" help *[page]", "Factions plugin help.", this, false);
 | 
			
		||||
			helpPlugin.registerCommand("help factions", "instead use: /f help", helpPlugin, true);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,5 @@
 | 
			
		||||
package com.bukkit.mcteam.factions.listeners;
 | 
			
		||||
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
import org.bukkit.block.Block;
 | 
			
		||||
import org.bukkit.block.BlockDamageLevel;
 | 
			
		||||
@@ -34,22 +29,15 @@ public class FactionsBlockListener extends BlockListener {
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//special cases, check for destruction of: torch, redstone torch (on & off), repeater (on & off), redstonewire, sapling, crops, sugar cane
 | 
			
		||||
	private static Set<Integer> specialBlocks = new HashSet<Integer>(Arrays.asList(
 | 
			
		||||
		 new Integer[] {50, 75, 76, 93, 94, 55, 6, 59, 83}
 | 
			
		||||
	));
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public void onBlockDamage(BlockDamageEvent event) {
 | 
			
		||||
		// debug
 | 
			
		||||
		//event.getPlayer().sendMessage("Block damaged: " + event.getBlock().getTypeId() + " (" + event.getBlock().getType().toString() + ")");
 | 
			
		||||
 | 
			
		||||
		if (event.isCancelled()) {
 | 
			
		||||
			return; // Alright. lets listen to that.
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		boolean badBlock = event.getDamageLevel() == BlockDamageLevel.STOPPED || specialBlocks.contains(new Integer(event.getBlock().getTypeId()));
 | 
			
		||||
		if (badBlock && ! this.playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock(), "destroy")) {
 | 
			
		||||
		boolean blockDestroyed = event.getDamageLevel() == BlockDamageLevel.STOPPED || Conf.instaDestroyMaterials.contains(event.getBlock().getType());
 | 
			
		||||
		
 | 
			
		||||
		if (blockDestroyed && ! this.playerCanBuildDestroyBlock(event.getPlayer(), event.getBlock(), "destroy")) {
 | 
			
		||||
			event.setCancelled(true);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -57,7 +45,7 @@ public class FactionsBlockListener extends BlockListener {
 | 
			
		||||
	public boolean playerCanBuildDestroyBlock(Player player, Block block, String action) {
 | 
			
		||||
		Faction otherFaction = Board.getFactionAt(new FLocation(block));
 | 
			
		||||
		
 | 
			
		||||
		if (otherFaction == null || otherFaction.getId() == 0) {
 | 
			
		||||
		if (otherFaction.getId() == 0) {
 | 
			
		||||
			return true; // This is no faction territory. You may build or break stuff here.
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,9 @@
 | 
			
		||||
package com.bukkit.mcteam.factions.listeners;
 | 
			
		||||
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.logging.Logger;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
import org.bukkit.block.Block;
 | 
			
		||||
import org.bukkit.command.CommandSender;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
@@ -96,7 +94,7 @@ public class FactionsPlayerListener extends PlayerListener{
 | 
			
		||||
		// Update the lastLoginTime for this fplayer
 | 
			
		||||
		me.setLastLoginTime(System.currentTimeMillis());
 | 
			
		||||
		
 | 
			
		||||
		// Run the member auto kick routine. Twice to getToTheAdmins...
 | 
			
		||||
		// Run the member auto kick routine. Twice to get to the admins...
 | 
			
		||||
		FPlayer.autoLeaveOnInactivityRoutine();
 | 
			
		||||
		FPlayer.autoLeaveOnInactivityRoutine();
 | 
			
		||||
	}
 | 
			
		||||
@@ -146,7 +144,7 @@ public class FactionsPlayerListener extends PlayerListener{
 | 
			
		||||
			return;  // right-clicked on air, not a block; no worries then
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if ( ! this.playerCanUseItemHere(event.getPlayer(), event.getBlockClicked(), event.getItem().getTypeId())) {
 | 
			
		||||
		if ( ! this.playerCanUseItemHere(event.getPlayer(), event.getBlockClicked(), event.getMaterial())) {
 | 
			
		||||
			event.setCancelled(true);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
@@ -154,19 +152,15 @@ public class FactionsPlayerListener extends PlayerListener{
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//currently checking placement/use of: redstone, sign, flint&steel, beds (not currently detected by Bukkit), buckets (empty, water, lava), repeater (not currently detected by Bukkit)
 | 
			
		||||
	private static Set<Integer> badItems = new HashSet<Integer>(Arrays.asList(
 | 
			
		||||
		 new Integer[] {331, 323, 259, 355, 325, 326, 327, 356}
 | 
			
		||||
	));
 | 
			
		||||
	public boolean playerCanUseItemHere(Player player, Block block, Material material) {
 | 
			
		||||
 | 
			
		||||
	public boolean playerCanUseItemHere(Player player, Block block, int itemId) {
 | 
			
		||||
 | 
			
		||||
		if ( ! badItems.contains(new Integer(itemId))) {
 | 
			
		||||
		if ( ! Conf.territoryDenyUseageMaterials.contains(material)) {
 | 
			
		||||
			return true; // Item isn't one we're preventing.
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		Faction otherFaction = Board.getFactionAt(new FLocation(block));
 | 
			
		||||
 | 
			
		||||
		if (otherFaction == null || otherFaction.getId() == 0) {
 | 
			
		||||
		if (otherFaction.getId() == 0) {
 | 
			
		||||
			return true; // This is not faction territory. Use whatever you like here.
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user