Add visibility-by-faction option (uses dynmap 0.60), add '%flag.FLAGID%' macros, reload support
This commit is contained in:
parent
f0c6419992
commit
467766596e
@ -17,6 +17,7 @@ import org.bukkit.Location;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.configuration.file.FileConfiguration;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.server.PluginEnableEvent;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
@ -28,11 +29,21 @@ import org.dynmap.markers.Marker;
|
||||
import org.dynmap.markers.MarkerAPI;
|
||||
import org.dynmap.markers.MarkerIcon;
|
||||
import org.dynmap.markers.MarkerSet;
|
||||
import org.dynmap.markers.PlayerSet;
|
||||
|
||||
import com.massivecraft.factions.FPlayer;
|
||||
import com.massivecraft.factions.Factions;
|
||||
import com.massivecraft.factions.Board;
|
||||
import com.massivecraft.factions.Faction;
|
||||
import com.massivecraft.factions.event.FPlayerJoinEvent;
|
||||
import com.massivecraft.factions.event.FPlayerLeaveEvent;
|
||||
import com.massivecraft.factions.event.FactionCreateEvent;
|
||||
import com.massivecraft.factions.event.FactionDisbandEvent;
|
||||
import com.massivecraft.factions.event.FactionRenameEvent;
|
||||
import com.massivecraft.factions.event.LandClaimEvent;
|
||||
import com.massivecraft.factions.event.LandUnclaimAllEvent;
|
||||
import com.massivecraft.factions.event.LandUnclaimEvent;
|
||||
import com.massivecraft.factions.struct.FFlag;
|
||||
import com.massivecraft.factions.struct.TerritoryAccess;
|
||||
|
||||
public class DynmapFactionsPlugin extends JavaPlugin {
|
||||
@ -44,6 +55,7 @@ public class DynmapFactionsPlugin extends JavaPlugin {
|
||||
MarkerAPI markerapi;
|
||||
Plugin factions;
|
||||
Factions factapi;
|
||||
boolean playersets;
|
||||
|
||||
int blocksize;
|
||||
|
||||
@ -108,9 +120,62 @@ public class DynmapFactionsPlugin extends JavaPlugin {
|
||||
}
|
||||
|
||||
private class FactionsUpdate implements Runnable {
|
||||
public boolean runonce;
|
||||
public void run() {
|
||||
if(!stop) {
|
||||
updateFactions();
|
||||
if(!runonce) {
|
||||
getServer().getScheduler().scheduleSyncDelayedTask(DynmapFactionsPlugin.this, this, updperiod);
|
||||
}
|
||||
else if(pending == this) {
|
||||
pending = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class PlayerSetUpdate implements Runnable {
|
||||
public String faction;
|
||||
public PlayerSetUpdate(String fid) {
|
||||
faction = fid;
|
||||
}
|
||||
public void run() {
|
||||
if(!stop)
|
||||
updateFactions();
|
||||
updatePlayerSet(faction);
|
||||
}
|
||||
}
|
||||
|
||||
private void requestUpdatePlayerSet(String factid) {
|
||||
if(playersets)
|
||||
getServer().getScheduler().scheduleSyncDelayedTask(this, new PlayerSetUpdate(factid));
|
||||
}
|
||||
|
||||
private FactionsUpdate pending = null;
|
||||
|
||||
private void requestUpdateFactions() {
|
||||
if(pending == null) {
|
||||
FactionsUpdate upd = new FactionsUpdate();
|
||||
upd.runonce = true;
|
||||
getServer().getScheduler().scheduleSyncDelayedTask(this, upd, 20);
|
||||
}
|
||||
}
|
||||
|
||||
private void updatePlayerSet(String factid) {
|
||||
Set<String> plids = new HashSet<String>();
|
||||
Faction f = factapi.get(factid); /* Get faction */
|
||||
if(f != null) {
|
||||
Set<FPlayer> ps = f.getFPlayers();
|
||||
for(FPlayer fp : ps) {
|
||||
plids.add(fp.getId());
|
||||
}
|
||||
}
|
||||
String setid = "factions." + factid;
|
||||
PlayerSet set = markerapi.getPlayerSet(setid); /* See if set exists */
|
||||
if(set == null) {
|
||||
set = markerapi.createPlayerSet(setid, true, plids, false);
|
||||
}
|
||||
else {
|
||||
set.setPlayers(plids);
|
||||
}
|
||||
}
|
||||
|
||||
@ -120,7 +185,7 @@ public class DynmapFactionsPlugin extends JavaPlugin {
|
||||
private String formatInfoWindow(Faction fact) {
|
||||
String v = "<div class=\"regioninfo\">"+infowindow+"</div>";
|
||||
v = v.replaceAll("%regionname%", ChatColor.stripColor(fact.getTag()));
|
||||
FPlayer adm = fact.getFPlayerAdmin();
|
||||
FPlayer adm = fact.getFPlayerLeader();
|
||||
v = v.replaceAll("%playerowners%", (adm!=null)?adm.getName():"");
|
||||
String res = "";
|
||||
for(FPlayer r : fact.getFPlayers()) {
|
||||
@ -132,8 +197,10 @@ public class DynmapFactionsPlugin extends JavaPlugin {
|
||||
v = v.replaceAll("%nation%", ChatColor.stripColor(fact.getTag()));
|
||||
/* Build flags */
|
||||
String flgs = "open: " + fact.getOpen();
|
||||
flgs += "<br/>peaceful: " + fact.isPeaceful();
|
||||
flgs += "<br/>peacefulExplosionsEnabled: " + fact.getPeacefulExplosionsEnabled();
|
||||
for(FFlag ff : FFlag.values()) {
|
||||
flgs += "<br/>" + ff.getNicename() + ": " + fact.getFlag(ff);
|
||||
v = v.replaceAll("%flag." + ff.name() + "%", fact.getFlag(ff)?"true":"false");
|
||||
}
|
||||
v = v.replaceAll("%flags%", flgs);
|
||||
return v;
|
||||
}
|
||||
@ -468,12 +535,17 @@ public class DynmapFactionsPlugin extends JavaPlugin {
|
||||
resareas = newmap;
|
||||
resmark = newmark;
|
||||
|
||||
getServer().getScheduler().scheduleSyncDelayedTask(this, new FactionsUpdate(), updperiod);
|
||||
}
|
||||
|
||||
private void updatePlayerSets() {
|
||||
if(playersets) {
|
||||
for(Faction f : factapi.get()) {
|
||||
updatePlayerSet(f.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class OurServerListener implements Listener {
|
||||
@SuppressWarnings("unused")
|
||||
@EventHandler
|
||||
public void onPluginEnable(PluginEnableEvent event) {
|
||||
Plugin p = event.getPlugin();
|
||||
@ -483,6 +555,58 @@ public class DynmapFactionsPlugin extends JavaPlugin {
|
||||
activate();
|
||||
}
|
||||
}
|
||||
@EventHandler(priority=EventPriority.MONITOR)
|
||||
public void onFPlayerJoin(FPlayerJoinEvent event) {
|
||||
if(event.isCancelled())
|
||||
return;
|
||||
if(playersets)
|
||||
requestUpdatePlayerSet(event.getFaction().getId());
|
||||
}
|
||||
@EventHandler(priority=EventPriority.MONITOR)
|
||||
public void onFPlayerLeave(FPlayerLeaveEvent event) {
|
||||
if(event.isCancelled())
|
||||
return;
|
||||
if(playersets)
|
||||
requestUpdatePlayerSet(event.getFaction().getId());
|
||||
}
|
||||
@EventHandler(priority=EventPriority.MONITOR)
|
||||
public void onFactionCreate(FactionCreateEvent event) {
|
||||
if(event.isCancelled())
|
||||
return;
|
||||
if(playersets)
|
||||
requestUpdatePlayerSet(event.getFactionId());
|
||||
requestUpdateFactions();
|
||||
}
|
||||
@EventHandler(priority=EventPriority.MONITOR)
|
||||
public void onFactionDisband(FactionDisbandEvent event) {
|
||||
if(event.isCancelled())
|
||||
return;
|
||||
if(playersets)
|
||||
requestUpdatePlayerSet(event.getFaction().getId());
|
||||
requestUpdateFactions();
|
||||
}
|
||||
@EventHandler(priority=EventPriority.MONITOR)
|
||||
public void onFactionRename(FactionRenameEvent event) {
|
||||
if(event.isCancelled())
|
||||
return;
|
||||
requestUpdateFactions();
|
||||
}
|
||||
@EventHandler(priority=EventPriority.MONITOR)
|
||||
public void onLandClaim(LandClaimEvent event) {
|
||||
if(event.isCancelled())
|
||||
return;
|
||||
requestUpdateFactions();
|
||||
}
|
||||
@EventHandler(priority=EventPriority.MONITOR)
|
||||
public void onLandUnclaim(LandUnclaimEvent event) {
|
||||
if(event.isCancelled())
|
||||
return;
|
||||
requestUpdateFactions();
|
||||
}
|
||||
@EventHandler(priority=EventPriority.MONITOR)
|
||||
public void onLandUnclaimAll(LandUnclaimAllEvent event) {
|
||||
requestUpdateFactions();
|
||||
}
|
||||
}
|
||||
|
||||
public void onEnable() {
|
||||
@ -510,6 +634,8 @@ public class DynmapFactionsPlugin extends JavaPlugin {
|
||||
activate();
|
||||
}
|
||||
|
||||
private boolean reload = false;
|
||||
|
||||
private void activate() {
|
||||
markerapi = api.getMarkerAPI();
|
||||
if(markerapi == null) {
|
||||
@ -522,6 +648,12 @@ public class DynmapFactionsPlugin extends JavaPlugin {
|
||||
blocksize = 16; /* Fixed at 16 */
|
||||
|
||||
/* Load configuration */
|
||||
if(reload) {
|
||||
this.reloadConfig();
|
||||
}
|
||||
else {
|
||||
reload = true;
|
||||
}
|
||||
FileConfiguration cfg = getConfig();
|
||||
cfg.options().copyDefaults(true); /* Load defaults, if needed */
|
||||
this.saveConfig(); /* Save updates, if needed */
|
||||
@ -563,6 +695,17 @@ public class DynmapFactionsPlugin extends JavaPlugin {
|
||||
if(hid != null) {
|
||||
hidden = new HashSet<String>(hid);
|
||||
}
|
||||
/* Chec if player sets enabled */
|
||||
playersets = cfg.getBoolean("visibility-by-faction", false);
|
||||
if(playersets) {
|
||||
try {
|
||||
markerapi.getPlayerSets(); /* Test if API available on dynmap */
|
||||
} catch (Exception x) {
|
||||
playersets = false;
|
||||
log.info("Dynmap does not support function needed for 'visibilitybyfaction' - need to upgrade");
|
||||
}
|
||||
}
|
||||
updatePlayerSets();
|
||||
|
||||
/* Set up update job - based on periond */
|
||||
int per = cfg.getInt("update.period", 300);
|
||||
|
@ -16,6 +16,9 @@ layer:
|
||||
# Format for popup - substitute values for macros
|
||||
infowindow: '<div class="infowindow"><span style="font-size:120%;">%regionname%</span><br />Flags<br /><span style="font-weight:bold;">%flags%</span></div>'
|
||||
|
||||
# Allow players in faction to see one another on dynmap (only relevant if dynmap has 'player-info-protected' enabled)
|
||||
visibility-by-faction: true
|
||||
|
||||
regionstyle:
|
||||
strokeColor: "#FF0000"
|
||||
strokeOpacity: 0.8
|
||||
|
Loading…
Reference in New Issue
Block a user