Add proper handling of universes in Factions

This commit is contained in:
Mike Primm 2013-06-28 01:33:54 -05:00
parent 036092f53f
commit afd5d32f05

View File

@ -14,7 +14,6 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.event.EventHandler;
@ -34,8 +33,6 @@ import org.dynmap.markers.PlayerSet;
import com.massivecraft.factions.Factions;
import com.massivecraft.factions.FFlag;
import com.massivecraft.factions.TerritoryAccess;
import com.massivecraft.factions.entity.Board;
import com.massivecraft.factions.entity.BoardColls;
import com.massivecraft.factions.entity.Faction;
import com.massivecraft.factions.entity.FactionColl;
@ -146,18 +143,20 @@ public class DynmapFactionsPlugin extends JavaPlugin {
private class PlayerSetUpdate implements Runnable {
public String faction;
public PlayerSetUpdate(String fid) {
public String univ;
public PlayerSetUpdate(String univ, String fid) {
this.univ = univ;
faction = fid;
}
public void run() {
if(!stop)
updatePlayerSet(faction);
updatePlayerSet(univ, faction);
}
}
private void requestUpdatePlayerSet(String factid) {
private void requestUpdatePlayerSet(String univid, String factid) {
if(playersets)
getServer().getScheduler().scheduleSyncDelayedTask(this, new PlayerSetUpdate(factid));
getServer().getScheduler().scheduleSyncDelayedTask(this, new PlayerSetUpdate(univid, factid));
}
private FactionsUpdate pending = null;
@ -170,13 +169,13 @@ public class DynmapFactionsPlugin extends JavaPlugin {
}
}
private void updatePlayerSet(String factid) {
private void updatePlayerSet(String univid, String factid) {
/* If Wilderness or other unassociated factions, skip */
if(factid.equals("0") || factid.startsWith("-")) {
return;
}
Set<String> plids = new HashSet<String>();
FactionColl fc = FactionColls.get().get(getServer().getConsoleSender());
FactionColl fc = FactionColls.get().getForUniverse(univid);
Faction f = fc.getByName(factid); /* Get faction */
if(f != null) {
@ -186,11 +185,11 @@ public class DynmapFactionsPlugin extends JavaPlugin {
}
factid = f.getId();
}
String setid = "factions." + factid;
String setid = "factions." + univid + "." + factid;
PlayerSet set = markerapi.getPlayerSet(setid); /* See if set exists */
if((set == null) && (f != null)) {
set = markerapi.createPlayerSet(setid, true, plids, false);
info("Added player visibility set '" + setid + "' for faction " + factid);
info("Added player visibility set '" + setid + "' for faction " + univid + "." + factid);
}
else if(f != null) {
set.setPlayers(plids);
@ -470,67 +469,68 @@ public class DynmapFactionsPlugin extends JavaPlugin {
/* Parse into faction centric mapping, split by world */
Map<String, FactionBlocks> blocks_by_faction = new HashMap<String, FactionBlocks>();
FactionColl fc = FactionColls.get().get(getServer().getConsoleSender());
Collection<Faction> facts = fc.getAll();
for (Faction fact : facts) {
Set<PS> chunks = BoardColls.get().getChunks(fact);
String fid = fact.getId();
FactionBlocks factblocks = blocks_by_faction.get(fid); /* Look up faction */
if(factblocks == null) { /* Create faction block if first time */
factblocks = new FactionBlocks();
blocks_by_faction.put(fid, factblocks);
}
for (PS cc : chunks) {
String world = cc.getWorld();
/* Get block set for given world */
LinkedList<FactionBlock> blocks = factblocks.blocks.get(world);
if(blocks == null) {
blocks = new LinkedList<FactionBlock>();
factblocks.blocks.put(world, blocks);
for (FactionColl fc : FactionColls.get().getColls()) {
Collection<Faction> facts = fc.getAll();
for (Faction fact : facts) {
Set<PS> chunks = BoardColls.get().getChunks(fact);
String fid = fc.getUniverse() + "_" + fact.getId();
FactionBlocks factblocks = blocks_by_faction.get(fid); /* Look up faction */
if(factblocks == null) { /* Create faction block if first time */
factblocks = new FactionBlocks();
blocks_by_faction.put(fid, factblocks);
}
FactionBlock fb = new FactionBlock();
fb.x = cc.getChunkX();
fb.z = cc.getChunkZ();
blocks.add(fb); /* Add to list */
}
}
/* Loop through factions */
for(Faction fact : facts) {
String factname = ChatColor.stripColor(fact.getName());
FactionBlocks factblocks = blocks_by_faction.get(fact.getId()); /* Look up faction */
if (factblocks == null) continue;
/* Loop through each world that faction has blocks on */
for(Map.Entry<String, LinkedList<FactionBlock>> worldblocks : factblocks.blocks.entrySet()) {
handleFactionOnWorld(factname, fact, worldblocks.getKey(), worldblocks.getValue(), newmap, newmark);
}
factblocks.blocks.clear();
for (PS cc : chunks) {
String world = cc.getWorld();
/* Now, add marker for home location */
PS homeloc = fact.getHome();
if(homeloc != null) {
String markid = factname + "__home";
MarkerIcon ico = getMarkerIcon(factname, fact);
if(ico != null) {
Marker home = resmark.remove(markid);
String lbl = factname + " [home]";
if(home == null) {
home = set.createMarker(markid, lbl, homeloc.getWorld(),
homeloc.getBlockX(), homeloc.getBlockY(), homeloc.getBlockZ(), ico, false);
/* Get block set for given world */
LinkedList<FactionBlock> blocks = factblocks.blocks.get(world);
if(blocks == null) {
blocks = new LinkedList<FactionBlock>();
factblocks.blocks.put(world, blocks);
}
else {
home.setLocation(homeloc.getWorld(), homeloc.getBlockX(), homeloc.getBlockY(), homeloc.getBlockZ());
home.setLabel(lbl); /* Update label */
home.setMarkerIcon(ico);
}
home.setDescription(formatInfoWindow(fact)); /* Set popup */
newmark.put(markid, home);
FactionBlock fb = new FactionBlock();
fb.x = cc.getChunkX();
fb.z = cc.getChunkZ();
blocks.add(fb); /* Add to list */
}
}
/* Loop through factions */
for(Faction fact : facts) {
String factname = ChatColor.stripColor(fact.getName());
String fid = fc.getUniverse() + "_" + fact.getId();
FactionBlocks factblocks = blocks_by_faction.get(fid); /* Look up faction */
if (factblocks == null) continue;
/* Loop through each world that faction has blocks on */
for(Map.Entry<String, LinkedList<FactionBlock>> worldblocks : factblocks.blocks.entrySet()) {
handleFactionOnWorld(factname, fact, worldblocks.getKey(), worldblocks.getValue(), newmap, newmark);
}
factblocks.blocks.clear();
/* Now, add marker for home location */
PS homeloc = fact.getHome();
if(homeloc != null) {
String markid = factname + "__home";
MarkerIcon ico = getMarkerIcon(factname, fact);
if(ico != null) {
Marker home = resmark.remove(markid);
String lbl = factname + " [home]";
if(home == null) {
home = set.createMarker(markid, lbl, homeloc.getWorld(),
homeloc.getBlockX(), homeloc.getBlockY(), homeloc.getBlockZ(), ico, false);
}
else {
home.setLocation(homeloc.getWorld(), homeloc.getBlockX(), homeloc.getBlockY(), homeloc.getBlockZ());
home.setLabel(lbl); /* Update label */
home.setMarkerIcon(ico);
}
home.setDescription(formatInfoWindow(fact)); /* Set popup */
newmark.put(markid, home);
}
}
}
}
blocks_by_faction.clear();
@ -549,9 +549,10 @@ public class DynmapFactionsPlugin extends JavaPlugin {
private void updatePlayerSets() {
if(playersets) {
FactionColl fc = FactionColls.get().get(getServer().getConsoleSender());
for(Faction f : fc.getAll()) {
updatePlayerSet(f.getId());
for (FactionColl fc : FactionColls.get().getColls()) {
for(Faction f : fc.getAll()) {
updatePlayerSet(fc.getUniverse(), f.getId());
}
}
}
}
@ -570,23 +571,27 @@ public class DynmapFactionsPlugin extends JavaPlugin {
public void onFPlayerJoin(FactionsEventMembershipChange event) {
if(event.isCancelled())
return;
if(playersets)
requestUpdatePlayerSet(event.getNewFaction().getId());
if(playersets) {
Faction f = event.getNewFaction();
requestUpdatePlayerSet(f.getUniverse(), f.getId());
}
}
@EventHandler(priority=EventPriority.MONITOR)
public void onFactionCreate(FactionsEventCreate event) {
if(event.isCancelled())
return;
if(playersets)
requestUpdatePlayerSet(event.getFactionId());
requestUpdatePlayerSet(event.getUniverse(), event.getFactionId());
requestUpdateFactions();
}
@EventHandler(priority=EventPriority.MONITOR)
public void onFactionDisband(FactionsEventDisband event) {
if(event.isCancelled())
return;
if(playersets)
requestUpdatePlayerSet(event.getFaction().getId());
if(playersets) {
Faction f = event.getFaction();
requestUpdatePlayerSet(f.getUniverse(), f.getId());
}
requestUpdateFactions();
}
@EventHandler(priority=EventPriority.MONITOR)