2011-10-08 22:03:44 +02:00
|
|
|
package com.massivecraft.factions;
|
|
|
|
|
|
|
|
import java.lang.reflect.Modifier;
|
2013-01-03 08:23:46 +01:00
|
|
|
import java.util.ArrayList;
|
2012-03-11 17:41:56 +01:00
|
|
|
import java.util.Arrays;
|
2011-10-08 22:03:44 +02:00
|
|
|
import java.util.HashSet;
|
2012-09-05 10:42:59 +02:00
|
|
|
import java.util.logging.Level;
|
2011-10-08 22:03:44 +02:00
|
|
|
import java.util.Set;
|
|
|
|
|
|
|
|
import org.bukkit.block.Block;
|
|
|
|
import org.bukkit.entity.Player;
|
2012-08-08 04:51:22 +02:00
|
|
|
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
2012-03-11 17:41:56 +01:00
|
|
|
import org.bukkit.Location;
|
|
|
|
import org.bukkit.Material;
|
2011-10-08 22:03:44 +02:00
|
|
|
|
2011-10-25 21:18:08 +02:00
|
|
|
import com.massivecraft.factions.adapters.FFlagTypeAdapter;
|
|
|
|
import com.massivecraft.factions.adapters.FPermTypeAdapter;
|
|
|
|
import com.massivecraft.factions.adapters.LocationTypeAdapter;
|
|
|
|
import com.massivecraft.factions.adapters.RelTypeAdapter;
|
2011-10-09 21:57:43 +02:00
|
|
|
import com.massivecraft.factions.cmd.*;
|
2012-02-03 02:31:33 +01:00
|
|
|
import com.massivecraft.factions.integration.capi.CapiFeatures;
|
2012-08-26 00:54:15 +02:00
|
|
|
import com.massivecraft.factions.integration.herochat.HerochatFeatures;
|
2011-10-08 22:03:44 +02:00
|
|
|
import com.massivecraft.factions.integration.Econ;
|
2012-02-03 02:31:33 +01:00
|
|
|
import com.massivecraft.factions.integration.EssentialsFeatures;
|
2012-01-15 19:41:33 +01:00
|
|
|
import com.massivecraft.factions.integration.LWCFeatures;
|
2011-10-08 22:03:44 +02:00
|
|
|
import com.massivecraft.factions.integration.SpoutFeatures;
|
2012-02-03 07:16:03 +01:00
|
|
|
import com.massivecraft.factions.integration.Worldguard;
|
2011-10-08 22:03:44 +02:00
|
|
|
import com.massivecraft.factions.listeners.FactionsBlockListener;
|
2012-03-10 04:25:01 +01:00
|
|
|
import com.massivecraft.factions.listeners.FactionsChatListener;
|
2011-10-08 22:03:44 +02:00
|
|
|
import com.massivecraft.factions.listeners.FactionsEntityListener;
|
2012-03-19 12:55:00 +01:00
|
|
|
import com.massivecraft.factions.listeners.FactionsExploitListener;
|
2012-05-09 05:21:21 +02:00
|
|
|
import com.massivecraft.factions.listeners.FactionsAppearanceListener;
|
2011-10-08 22:03:44 +02:00
|
|
|
import com.massivecraft.factions.listeners.FactionsPlayerListener;
|
2011-10-12 17:25:01 +02:00
|
|
|
import com.massivecraft.factions.listeners.FactionsServerListener;
|
2011-10-25 21:18:08 +02:00
|
|
|
import com.massivecraft.factions.struct.FFlag;
|
|
|
|
import com.massivecraft.factions.struct.FPerm;
|
2011-10-23 17:55:53 +02:00
|
|
|
import com.massivecraft.factions.struct.Rel;
|
New "access" system to replace old ownership system. Access can be granted to build, destroy, and fully interact within any chunk for specific players or factions. Access can also optionally be denied to normal members of the host faction.
Some further info display to go with this feature is yet to come, and further testing for possible bugs is also needed.
Related info:
New FPerm "ACCESS" which is granted to faction leaders and officers by default. This FPerm allows you to bypass access restrictions throughout your faction territory, and (along with the "factions.access" Bukkit permission below) allows you to change access settings for any chunk owned by your faction.
New permissions:
factions.access - Ability to grant territory access for your faction, if you have the proper "ACCESS" FPerm (defaults to leaders and officers only). Added to factions.kit.halfplayer permission kit.
factions.access.any - Ability to grant territory access for any faction on the server. Added to factions.kit.mod permission kit.
factions.access.view - Ability to view territory access info for your own faction. Added to factions.kit.halfplayer permission kit.
New command:
/f access [view|p|f|player|faction=view] [name=you] - view or change the access information for the chunk you are in. If "view" or nothing is specified, it will simply display the info. If "p" or "player" is specified, a player will be granted access, or removed from the list if they were already granted access. If "f" or "faction" is specified, the same will be done for the specified faction. The name defaults to yourself or your faction if not specified. If your own faction is specified, you will toggle restricted access for the chunk so that normal faction members can be denied access, unless they are in the access list.
Examples:
/f access - view access list, if in your own territory
/f access p SomePlayer - grant access to player "SomePlayer" for the current chunk, or remove them from the access list if already there
/f access f - toggle restricted access for the current chunk (since faction name isn't specified, uses your own faction), assuming you're in your own factions territory
2012-05-15 04:41:13 +02:00
|
|
|
import com.massivecraft.factions.struct.TerritoryAccess;
|
2012-02-26 23:55:58 +01:00
|
|
|
import com.massivecraft.factions.util.AutoLeaveTask;
|
2012-11-28 06:51:37 +01:00
|
|
|
import com.massivecraft.factions.util.EconLandRewardTask;
|
2012-03-14 19:06:38 +01:00
|
|
|
import com.massivecraft.factions.util.LazyLocation;
|
2011-10-08 22:03:44 +02:00
|
|
|
import com.massivecraft.factions.zcore.MPlugin;
|
|
|
|
|
2013-01-03 08:23:46 +01:00
|
|
|
import org.bukkit.command.Command;
|
|
|
|
import org.bukkit.command.CommandSender;
|
2012-08-26 08:02:31 +02:00
|
|
|
import org.bukkit.craftbukkit.libs.com.google.gson.GsonBuilder;
|
2011-10-08 22:03:44 +02:00
|
|
|
|
2012-02-02 22:20:43 +01:00
|
|
|
|
2011-10-08 22:03:44 +02:00
|
|
|
public class P extends MPlugin
|
|
|
|
{
|
|
|
|
// Our single plugin instance
|
|
|
|
public static P p;
|
|
|
|
|
|
|
|
// Listeners
|
|
|
|
public final FactionsPlayerListener playerListener;
|
2012-03-10 04:25:01 +01:00
|
|
|
public final FactionsChatListener chatListener;
|
2011-10-08 22:03:44 +02:00
|
|
|
public final FactionsEntityListener entityListener;
|
2012-03-19 12:55:00 +01:00
|
|
|
public final FactionsExploitListener exploitListener;
|
2011-10-08 22:03:44 +02:00
|
|
|
public final FactionsBlockListener blockListener;
|
2011-10-12 17:25:01 +02:00
|
|
|
public final FactionsServerListener serverListener;
|
2012-05-09 05:21:21 +02:00
|
|
|
public final FactionsAppearanceListener appearanceListener;
|
2011-10-08 22:03:44 +02:00
|
|
|
|
2011-10-09 21:57:43 +02:00
|
|
|
// Persistance related
|
2011-10-10 01:21:05 +02:00
|
|
|
private boolean locked = false;
|
2011-10-09 21:57:43 +02:00
|
|
|
public boolean getLocked() {return this.locked;}
|
|
|
|
public void setLocked(boolean val) {this.locked = val; this.setAutoSave(val);}
|
2012-02-26 23:55:58 +01:00
|
|
|
private Integer AutoLeaveTask = null;
|
2012-11-28 06:51:37 +01:00
|
|
|
private Integer econLandRewardTaskID = null;
|
2011-10-09 21:57:43 +02:00
|
|
|
|
|
|
|
// Commands
|
2011-10-09 20:10:19 +02:00
|
|
|
public FCmdRoot cmdBase;
|
2011-10-13 14:41:07 +02:00
|
|
|
public CmdAutoHelp cmdAutoHelp;
|
2011-10-09 14:53:38 +02:00
|
|
|
|
2011-10-08 22:03:44 +02:00
|
|
|
public P()
|
|
|
|
{
|
|
|
|
p = this;
|
|
|
|
this.playerListener = new FactionsPlayerListener(this);
|
2012-03-10 04:25:01 +01:00
|
|
|
this.chatListener = new FactionsChatListener(this);
|
2011-10-08 22:03:44 +02:00
|
|
|
this.entityListener = new FactionsEntityListener(this);
|
2012-03-19 12:55:00 +01:00
|
|
|
this.exploitListener = new FactionsExploitListener();
|
2011-10-08 22:03:44 +02:00
|
|
|
this.blockListener = new FactionsBlockListener(this);
|
2011-10-12 17:25:01 +02:00
|
|
|
this.serverListener = new FactionsServerListener(this);
|
2012-05-09 05:21:21 +02:00
|
|
|
this.appearanceListener = new FactionsAppearanceListener(this);
|
2011-10-08 22:03:44 +02:00
|
|
|
}
|
2012-01-31 17:52:34 +01:00
|
|
|
|
2011-10-08 22:03:44 +02:00
|
|
|
@Override
|
|
|
|
public void onEnable()
|
|
|
|
{
|
2012-09-05 10:42:59 +02:00
|
|
|
// bit of (apparently absolutely necessary) idiot-proofing for CB version support due to changed GSON lib package name
|
|
|
|
try
|
|
|
|
{
|
|
|
|
Class.forName("org.bukkit.craftbukkit.libs.com.google.gson.reflect.TypeToken");
|
|
|
|
}
|
|
|
|
catch (ClassNotFoundException ex)
|
|
|
|
{
|
2012-10-31 22:16:21 +01:00
|
|
|
this.log(Level.SEVERE, "GSON lib not found. Your CraftBukkit build is too old (< 1.3.2) or otherwise not compatible.");
|
2012-09-05 10:42:59 +02:00
|
|
|
this.suicide();
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2011-10-08 22:03:44 +02:00
|
|
|
if ( ! preEnable()) return;
|
2012-03-09 21:44:17 +01:00
|
|
|
this.loadSuccessful = false;
|
|
|
|
|
2011-10-08 22:03:44 +02:00
|
|
|
// Load Conf from disk
|
|
|
|
Conf.load();
|
|
|
|
FPlayers.i.loadFromDisc();
|
2013-04-09 12:58:39 +02:00
|
|
|
FactionColl.i.loadFromDisc();
|
2011-10-08 22:03:44 +02:00
|
|
|
Board.load();
|
|
|
|
|
2011-10-09 14:53:38 +02:00
|
|
|
// Add Base Commands
|
2011-10-13 14:41:07 +02:00
|
|
|
this.cmdAutoHelp = new CmdAutoHelp();
|
2012-05-09 03:24:07 +02:00
|
|
|
this.cmdBase = new FCmdRoot();
|
2012-02-22 18:43:53 +01:00
|
|
|
|
|
|
|
EssentialsFeatures.setup();
|
|
|
|
SpoutFeatures.setup();
|
|
|
|
Econ.setup();
|
2011-10-14 15:03:23 +02:00
|
|
|
CapiFeatures.setup();
|
2012-05-02 04:45:10 +02:00
|
|
|
HerochatFeatures.setup();
|
2012-02-22 18:43:53 +01:00
|
|
|
LWCFeatures.setup();
|
2011-10-08 22:03:44 +02:00
|
|
|
|
|
|
|
if(Conf.worldGuardChecking)
|
|
|
|
{
|
2012-02-03 07:16:03 +01:00
|
|
|
Worldguard.init(this);
|
2011-10-08 22:03:44 +02:00
|
|
|
}
|
2012-01-28 11:37:56 +01:00
|
|
|
|
2012-02-26 23:55:58 +01:00
|
|
|
// start up task which runs the autoLeaveAfterDaysOfInactivity routine
|
|
|
|
startAutoLeaveTask(false);
|
|
|
|
|
2012-11-30 21:02:43 +01:00
|
|
|
// start up task which runs the econLandRewardRoutine
|
|
|
|
startEconLandRewardTask(false);
|
|
|
|
|
2012-01-28 11:37:56 +01:00
|
|
|
// Register Event Handlers
|
2012-05-09 05:21:21 +02:00
|
|
|
getServer().getPluginManager().registerEvents(this.playerListener, this);
|
|
|
|
getServer().getPluginManager().registerEvents(this.chatListener, this);
|
|
|
|
getServer().getPluginManager().registerEvents(this.entityListener, this);
|
|
|
|
getServer().getPluginManager().registerEvents(this.exploitListener, this);
|
|
|
|
getServer().getPluginManager().registerEvents(this.blockListener, this);
|
|
|
|
getServer().getPluginManager().registerEvents(this.serverListener, this);
|
|
|
|
getServer().getPluginManager().registerEvents(this.appearanceListener, this);
|
2012-01-28 11:37:56 +01:00
|
|
|
|
2011-10-08 22:03:44 +02:00
|
|
|
postEnable();
|
2012-03-09 21:44:17 +01:00
|
|
|
this.loadSuccessful = true;
|
2011-10-08 22:03:44 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public GsonBuilder getGsonBuilder()
|
|
|
|
{
|
|
|
|
return new GsonBuilder()
|
|
|
|
.setPrettyPrinting()
|
|
|
|
.disableHtmlEscaping()
|
2011-10-10 14:21:22 +02:00
|
|
|
.excludeFieldsWithModifiers(Modifier.TRANSIENT, Modifier.VOLATILE)
|
2012-03-14 19:06:38 +01:00
|
|
|
.registerTypeAdapter(LazyLocation.class, new LocationTypeAdapter())
|
New "access" system to replace old ownership system. Access can be granted to build, destroy, and fully interact within any chunk for specific players or factions. Access can also optionally be denied to normal members of the host faction.
Some further info display to go with this feature is yet to come, and further testing for possible bugs is also needed.
Related info:
New FPerm "ACCESS" which is granted to faction leaders and officers by default. This FPerm allows you to bypass access restrictions throughout your faction territory, and (along with the "factions.access" Bukkit permission below) allows you to change access settings for any chunk owned by your faction.
New permissions:
factions.access - Ability to grant territory access for your faction, if you have the proper "ACCESS" FPerm (defaults to leaders and officers only). Added to factions.kit.halfplayer permission kit.
factions.access.any - Ability to grant territory access for any faction on the server. Added to factions.kit.mod permission kit.
factions.access.view - Ability to view territory access info for your own faction. Added to factions.kit.halfplayer permission kit.
New command:
/f access [view|p|f|player|faction=view] [name=you] - view or change the access information for the chunk you are in. If "view" or nothing is specified, it will simply display the info. If "p" or "player" is specified, a player will be granted access, or removed from the list if they were already granted access. If "f" or "faction" is specified, the same will be done for the specified faction. The name defaults to yourself or your faction if not specified. If your own faction is specified, you will toggle restricted access for the chunk so that normal faction members can be denied access, unless they are in the access list.
Examples:
/f access - view access list, if in your own territory
/f access p SomePlayer - grant access to player "SomePlayer" for the current chunk, or remove them from the access list if already there
/f access f - toggle restricted access for the current chunk (since faction name isn't specified, uses your own faction), assuming you're in your own factions territory
2012-05-15 04:41:13 +02:00
|
|
|
.registerTypeAdapter(TerritoryAccess.class, new TerritoryAccess())
|
2011-10-25 21:18:08 +02:00
|
|
|
.registerTypeAdapter(Rel.class, new RelTypeAdapter())
|
|
|
|
.registerTypeAdapter(FPerm.class, new FPermTypeAdapter())
|
|
|
|
.registerTypeAdapter(FFlag.class, new FFlagTypeAdapter());
|
2011-10-08 22:03:44 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void onDisable()
|
|
|
|
{
|
2012-03-09 21:44:17 +01:00
|
|
|
// only save data if plugin actually completely loaded successfully
|
|
|
|
if (this.loadSuccessful)
|
|
|
|
{
|
|
|
|
Board.save();
|
|
|
|
Conf.save();
|
|
|
|
}
|
2012-02-22 18:43:53 +01:00
|
|
|
EssentialsFeatures.unhookChat();
|
2012-02-26 23:55:58 +01:00
|
|
|
if (AutoLeaveTask != null)
|
|
|
|
{
|
|
|
|
this.getServer().getScheduler().cancelTask(AutoLeaveTask);
|
|
|
|
AutoLeaveTask = null;
|
|
|
|
}
|
2011-10-08 22:03:44 +02:00
|
|
|
super.onDisable();
|
|
|
|
}
|
2012-02-26 23:55:58 +01:00
|
|
|
|
|
|
|
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);
|
|
|
|
AutoLeaveTask = getServer().getScheduler().scheduleSyncRepeatingTask(this, new AutoLeaveTask(), ticks, ticks);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-11-28 06:51:37 +01:00
|
|
|
public void startEconLandRewardTask(boolean restartIfRunning)
|
|
|
|
{
|
|
|
|
if (econLandRewardTaskID != null)
|
|
|
|
{
|
|
|
|
if (!restartIfRunning) return;
|
|
|
|
this.getServer().getScheduler().cancelTask(econLandRewardTaskID);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (Conf.econEnabled &&
|
|
|
|
Conf.econLandRewardTaskRunsEveryXMinutes > 0.0 &&
|
|
|
|
Conf.econLandReward > 0.0)
|
|
|
|
{
|
|
|
|
long ticks = (long)(20 * 60 * Conf.econLandRewardTaskRunsEveryXMinutes);
|
|
|
|
econLandRewardTaskID = getServer().getScheduler().scheduleSyncRepeatingTask(this, new EconLandRewardTask(), ticks, ticks);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2011-10-09 18:35:39 +02:00
|
|
|
@Override
|
2011-10-09 21:57:43 +02:00
|
|
|
public void postAutoSave()
|
2011-10-09 18:35:39 +02:00
|
|
|
{
|
|
|
|
Board.save();
|
|
|
|
Conf.save();
|
|
|
|
}
|
2013-01-03 08:23:46 +01:00
|
|
|
|
2012-03-11 17:41:56 +01:00
|
|
|
@Override
|
|
|
|
public boolean onCommand(CommandSender sender, Command command, String label, String[] split)
|
|
|
|
{
|
2013-01-03 08:23:46 +01:00
|
|
|
this.cmdBase.execute(sender, new ArrayList<String>(Arrays.asList(split)));
|
|
|
|
return true;
|
2012-03-11 17:41:56 +01:00
|
|
|
}
|
|
|
|
|
2011-10-08 22:03:44 +02:00
|
|
|
// -------------------------------------------- //
|
|
|
|
// Functions for other plugins to hook into
|
|
|
|
// -------------------------------------------- //
|
|
|
|
|
|
|
|
// This value will be updated whenever new hooks are added
|
|
|
|
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)
|
|
|
|
{
|
|
|
|
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()
|
2011-10-09 20:10:19 +02:00
|
|
|
|
|
|
|
|
2012-08-08 04:51:22 +02:00
|
|
|
public boolean shouldLetFactionsHandleThisChat(AsyncPlayerChatEvent event)
|
2011-10-08 22:03:44 +02:00
|
|
|
{
|
|
|
|
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
|
2012-05-02 04:45:10 +02:00
|
|
|
/**
|
|
|
|
* @deprecated As of release 1.8, there is no built in faction chat.
|
|
|
|
*/
|
2011-10-08 22:03:44 +02:00
|
|
|
public boolean isPlayerFactionChatting(Player player)
|
|
|
|
{
|
2012-05-02 04:45:10 +02:00
|
|
|
return false;
|
2011-10-08 22:03:44 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// Is this chat message actually a Factions command, and thus should be left alone by other plugins?
|
2013-01-03 08:23:46 +01:00
|
|
|
/**
|
|
|
|
* @deprecated As of release 1.8.1 the normal Bukkit command-handling is used.
|
|
|
|
*/
|
2011-10-08 22:03:44 +02:00
|
|
|
public boolean isFactionsCommand(String check)
|
|
|
|
{
|
2013-01-03 08:23:46 +01:00
|
|
|
return false;
|
2011-10-08 22:03:44 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// Get a player's faction tag (faction name), mainly for usage by chat plugins for local/channel chat
|
|
|
|
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)
|
|
|
|
{
|
|
|
|
String tag = "~";
|
|
|
|
|
|
|
|
if (speaker == null)
|
|
|
|
return tag;
|
|
|
|
|
|
|
|
FPlayer me = FPlayers.i.get(speaker);
|
|
|
|
if (me == null)
|
|
|
|
return tag;
|
|
|
|
|
|
|
|
// if listener isn't set, or config option is disabled, give back uncolored tag
|
2012-05-02 04:45:10 +02:00
|
|
|
if (listener == null || !Conf.chatParseTagsColored) {
|
2011-10-08 22:03:44 +02:00
|
|
|
tag = me.getChatTag().trim();
|
|
|
|
} else {
|
|
|
|
FPlayer you = FPlayers.i.get(listener);
|
|
|
|
if (you == null)
|
|
|
|
tag = me.getChatTag().trim();
|
|
|
|
else // everything checks out, give the colored tag
|
|
|
|
tag = me.getChatTag(you).trim();
|
|
|
|
}
|
|
|
|
if (tag.isEmpty())
|
|
|
|
tag = "~";
|
|
|
|
|
|
|
|
return tag;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Get a player's title within their faction, mainly for usage by chat plugins for local/channel chat
|
|
|
|
public String getPlayerTitle(Player player)
|
|
|
|
{
|
|
|
|
if (player == null)
|
|
|
|
return "";
|
|
|
|
|
|
|
|
FPlayer me = FPlayers.i.get(player);
|
|
|
|
if (me == null)
|
|
|
|
return "";
|
|
|
|
|
|
|
|
return me.getTitle().trim();
|
|
|
|
}
|
|
|
|
|
|
|
|
// Get a list of all faction tags (names)
|
|
|
|
public Set<String> getFactionTags()
|
|
|
|
{
|
|
|
|
Set<String> tags = new HashSet<String>();
|
2013-04-09 12:58:39 +02:00
|
|
|
for (Faction faction : FactionColl.i.get())
|
2011-10-08 22:03:44 +02:00
|
|
|
{
|
|
|
|
tags.add(faction.getTag());
|
|
|
|
}
|
|
|
|
return tags;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Get a list of all players in the specified faction
|
|
|
|
public Set<String> getPlayersInFaction(String factionTag)
|
|
|
|
{
|
|
|
|
Set<String> players = new HashSet<String>();
|
2013-04-09 12:58:39 +02:00
|
|
|
Faction faction = FactionColl.i.getByTag(factionTag);
|
2011-10-08 22:03:44 +02:00
|
|
|
if (faction != null)
|
|
|
|
{
|
|
|
|
for (FPlayer fplayer : faction.getFPlayers())
|
|
|
|
{
|
|
|
|
players.add(fplayer.getName());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return players;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Get a list of all online players in the specified faction
|
|
|
|
public Set<String> getOnlinePlayersInFaction(String factionTag)
|
|
|
|
{
|
|
|
|
Set<String> players = new HashSet<String>();
|
2013-04-09 12:58:39 +02:00
|
|
|
Faction faction = FactionColl.i.getByTag(factionTag);
|
2011-10-08 22:03:44 +02:00
|
|
|
if (faction != null)
|
|
|
|
{
|
|
|
|
for (FPlayer fplayer : faction.getFPlayersWhereOnline(true))
|
|
|
|
{
|
|
|
|
players.add(fplayer.getName());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return players;
|
|
|
|
}
|
|
|
|
|
|
|
|
// check if player is allowed to build/destroy in a particular location
|
|
|
|
public boolean isPlayerAllowedToBuildHere(Player player, Location location)
|
|
|
|
{
|
2011-10-24 01:37:51 +02:00
|
|
|
return FactionsBlockListener.playerCanBuildDestroyBlock(player, location.getBlock(), "", true);
|
2011-10-08 22:03:44 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// check if player is allowed to interact with the specified block (doors/chests/whatever)
|
|
|
|
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)
|
|
|
|
{
|
|
|
|
return FactionsPlayerListener.playerCanUseItemHere(player, location, material, true);
|
|
|
|
}
|
|
|
|
}
|