Fixing a few bugs, and adding in some debug output for unsolved ones.
This commit is contained in:
		@@ -165,6 +165,7 @@ permissions:
 | 
			
		||||
      factions.list: true
 | 
			
		||||
      factions.map: true
 | 
			
		||||
      factions.money.*: true
 | 
			
		||||
      factions.officer: true
 | 
			
		||||
      factions.open: true
 | 
			
		||||
      factions.perm: true
 | 
			
		||||
      factions.power: true
 | 
			
		||||
 
 | 
			
		||||
@@ -49,7 +49,7 @@ public class CmdFactionsMap extends FCommand
 | 
			
		||||
	
 | 
			
		||||
	public void showMap()
 | 
			
		||||
	{
 | 
			
		||||
		sendMessage(BoardColls.get().getMap(usenderFaction, PS.valueOf(me), usender.getPlayer().getLocation().getYaw()));
 | 
			
		||||
		sendMessage(BoardColls.get().getMap(usenderFaction, PS.valueOf(me), me.getLocation().getYaw()));
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -18,6 +18,8 @@ public abstract class CmdFactionsRelationAbstract extends FCommand
 | 
			
		||||
	
 | 
			
		||||
	public CmdFactionsRelationAbstract()
 | 
			
		||||
	{
 | 
			
		||||
		this.addRequiredArg("faction");
 | 
			
		||||
		
 | 
			
		||||
		this.addRequirements(ReqFactionsEnabled.get());
 | 
			
		||||
		this.addRequirements(ReqHasPerm.get(Perm.RELATION.node));
 | 
			
		||||
		this.addRequirements(ReqHasFaction.get());
 | 
			
		||||
 
 | 
			
		||||
@@ -98,7 +98,8 @@ public class Board extends Entity<Board> implements BoardInterface
 | 
			
		||||
	public Faction getFactionAt(PS ps)
 | 
			
		||||
	{
 | 
			
		||||
		if (ps == null) return null;
 | 
			
		||||
		return FactionColls.get().get(this).get(this.getTerritoryAccessAt(ps).getHostFactionId()); 
 | 
			
		||||
		String factionId = this.getTerritoryAccessAt(ps).getHostFactionId();
 | 
			
		||||
		return FactionColls.get().get(this).get(factionId);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// SET
 | 
			
		||||
@@ -158,16 +159,18 @@ public class Board extends Entity<Board> implements BoardInterface
 | 
			
		||||
	@Override
 | 
			
		||||
	public void clean()
 | 
			
		||||
	{
 | 
			
		||||
		FactionColl factionColl = FactionColls.get().get(this);
 | 
			
		||||
		
 | 
			
		||||
		for (Entry<PS, TerritoryAccess> entry : this.map.entrySet())
 | 
			
		||||
		{
 | 
			
		||||
			TerritoryAccess territoryAccess = entry.getValue();
 | 
			
		||||
			
 | 
			
		||||
			if (FactionColls.get().get(this).containsId(territoryAccess.getHostFactionId())) continue;
 | 
			
		||||
			String factionId = territoryAccess.getHostFactionId();
 | 
			
		||||
			if (factionColl.containsId(factionId)) continue;
 | 
			
		||||
			
 | 
			
		||||
			PS ps = entry.getKey();
 | 
			
		||||
			this.removeAt(ps);
 | 
			
		||||
			
 | 
			
		||||
			Factions.get().log("Board cleaner removed "+territoryAccess.getHostFactionId()+" from "+entry.getKey());
 | 
			
		||||
			Factions.get().log("Board cleaner removed "+factionId+" from "+ps);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
 
 | 
			
		||||
@@ -642,7 +642,14 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
 | 
			
		||||
				while (iter.hasNext())
 | 
			
		||||
				{
 | 
			
		||||
					Entry<FPerm, Set<Rel>> entry = iter.next();
 | 
			
		||||
					if (entry.getKey().getDefault(this).equals(entry.getValue()))
 | 
			
		||||
					FPerm key = entry.getKey();
 | 
			
		||||
					Set<Rel> keyDefault = key.getDefault(this);
 | 
			
		||||
					Set<Rel> value = entry.getValue();
 | 
			
		||||
					
 | 
			
		||||
					if (keyDefault == null) System.out.println("keyDefault was null");
 | 
			
		||||
					if (value == null) System.out.println("value was null");
 | 
			
		||||
					
 | 
			
		||||
					if (keyDefault.equals(value))
 | 
			
		||||
					{
 | 
			
		||||
						iter.remove();
 | 
			
		||||
					}
 | 
			
		||||
 
 | 
			
		||||
@@ -40,29 +40,6 @@ public class FactionColl extends Coll<Faction>
 | 
			
		||||
		this.createSpecialFactions();
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	/*
 | 
			
		||||
	@Override
 | 
			
		||||
	protected synchronized String attach(Faction faction, Object oid, boolean noteChange)
 | 
			
		||||
	{
 | 
			
		||||
		String ret = super.attach(faction, oid, noteChange);
 | 
			
		||||
		
 | 
			
		||||
		// Factions start with 0 money.
 | 
			
		||||
		// TODO: Can this be done here?
 | 
			
		||||
		// TODO: Or will it be a to heavy operation to do this often?
 | 
			
		||||
		
 | 
			
		||||
		//System.out.println("faction "+faction);
 | 
			
		||||
		//System.out.println("faction.getId() "+faction.getId());
 | 
			
		||||
		// TODO: Why does this happen for Wilderness?
 | 
			
		||||
		if (faction.getId() == null) return ret;
 | 
			
		||||
		
 | 
			
		||||
		if (!Money.exists(faction))
 | 
			
		||||
		{
 | 
			
		||||
			Money.set(faction, 0);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		return ret;
 | 
			
		||||
	}*/
 | 
			
		||||
	
 | 
			
		||||
	// TODO: I hope this one is not crucial anymore.
 | 
			
		||||
	// If it turns out to be I will just have to recreate the feature in the proper place.
 | 
			
		||||
	/*
 | 
			
		||||
@@ -80,6 +57,23 @@ public class FactionColl extends Coll<Faction>
 | 
			
		||||
	}
 | 
			
		||||
	*/
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public Faction get(Object oid)
 | 
			
		||||
	{
 | 
			
		||||
		Faction ret = super.get(oid);
 | 
			
		||||
		
 | 
			
		||||
		if (ret == null)
 | 
			
		||||
		{
 | 
			
		||||
			String message = Txt.parse("<b>Non existing factionId <h>%s <b>requested. <i>Cleaning all boards and uplayers.", this.fixId(oid));
 | 
			
		||||
			Factions.get().log(message);
 | 
			
		||||
			
 | 
			
		||||
			BoardColls.get().clean();
 | 
			
		||||
			UPlayerColls.get().clean();
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	@Override
 | 
			
		||||
	public Faction detachId(Object oid)
 | 
			
		||||
	{
 | 
			
		||||
 
 | 
			
		||||
@@ -80,4 +80,16 @@ public class UPlayerColls extends XColls<UPlayerColl, UPlayer>
 | 
			
		||||
		oldFile.renameTo(newFile);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// EXTRAS
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	
 | 
			
		||||
	public void clean()
 | 
			
		||||
	{
 | 
			
		||||
		for (UPlayerColl coll : this.getColls())
 | 
			
		||||
		{
 | 
			
		||||
			coll.clean();
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,29 +1,22 @@
 | 
			
		||||
package com.massivecraft.factions.listeners;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.block.Block;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.entity.TNTPrimed;
 | 
			
		||||
import org.bukkit.event.block.BlockFromToEvent;
 | 
			
		||||
import org.bukkit.event.entity.EntityExplodeEvent;
 | 
			
		||||
import org.bukkit.event.player.PlayerInteractEvent;
 | 
			
		||||
import org.bukkit.event.player.PlayerTeleportEvent;
 | 
			
		||||
import org.bukkit.event.EventHandler;
 | 
			
		||||
import org.bukkit.event.EventPriority;
 | 
			
		||||
import org.bukkit.event.Listener; 
 | 
			
		||||
import org.bukkit.util.NumberConversions;
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.Location;
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
 | 
			
		||||
import com.massivecraft.factions.Factions;
 | 
			
		||||
import com.massivecraft.factions.entity.MConf;
 | 
			
		||||
import com.massivecraft.mcore.util.SenderUtil;
 | 
			
		||||
import com.massivecraft.mcore.util.Txt;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
public class FactionsListenerExploit implements Listener
 | 
			
		||||
@@ -48,7 +41,9 @@ public class FactionsListenerExploit implements Listener
 | 
			
		||||
	// INTERACT SPAM
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// TODO: Now that I decoupled this one it may be to sensitive.
 | 
			
		||||
	// TODO: Yeah it's faaaaaaaaaar to sensitive. Let's just comment it out for now.
 | 
			
		||||
	
 | 
			
		||||
	/*
 | 
			
		||||
	@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
 | 
			
		||||
	public void interactSpam(PlayerInteractEvent event)
 | 
			
		||||
	{
 | 
			
		||||
@@ -91,6 +86,7 @@ public class FactionsListenerExploit implements Listener
 | 
			
		||||
			return attempts;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	*/
 | 
			
		||||
	
 | 
			
		||||
	// -------------------------------------------- //
 | 
			
		||||
	// OBSIDIAN GENERATORS
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ import java.util.Iterator;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.Location;
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
import org.bukkit.block.Block;
 | 
			
		||||
import org.bukkit.entity.Enderman;
 | 
			
		||||
@@ -560,14 +561,14 @@ public class FactionsListenerMain implements Listener
 | 
			
		||||
	@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
 | 
			
		||||
	public void blockExplosion(EntityExplodeEvent event)
 | 
			
		||||
	{
 | 
			
		||||
		// If an entity is exploding ...
 | 
			
		||||
		Entity entity = event.getEntity();
 | 
			
		||||
		// If an explosion occurs at a location ...
 | 
			
		||||
		Location location = event.getLocation();
 | 
			
		||||
		
 | 
			
		||||
		// Check Disabled
 | 
			
		||||
		if (UConf.isDisabled(entity)) return;
 | 
			
		||||
		if (UConf.isDisabled(location)) return;
 | 
			
		||||
		
 | 
			
		||||
		// Check the entity. Are explosions disabled there? 
 | 
			
		||||
		if (BoardColls.get().getFactionAt(PS.valueOf(event.getEntity())).getFlag(FFlag.EXPLOSIONS) == false)
 | 
			
		||||
		if (BoardColls.get().getFactionAt(PS.valueOf(location)).getFlag(FFlag.EXPLOSIONS) == false)
 | 
			
		||||
		{
 | 
			
		||||
			event.setCancelled(true);
 | 
			
		||||
			return;
 | 
			
		||||
@@ -637,6 +638,16 @@ public class FactionsListenerMain implements Listener
 | 
			
		||||
		// If the faction at the block has firespread disabled ...
 | 
			
		||||
		PS ps = PS.valueOf(block);
 | 
			
		||||
		Faction faction = BoardColls.get().getFactionAt(ps);
 | 
			
		||||
		
 | 
			
		||||
		// TODO: Remove this debug output soon.
 | 
			
		||||
		if (faction == null)
 | 
			
		||||
		{
 | 
			
		||||
			System.out.println("faction was null");
 | 
			
		||||
			System.out.println("block was "+block);
 | 
			
		||||
			System.out.println("ps was "+ps);
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
			
 | 
			
		||||
		if (faction.getFlag(FFlag.FIRESPREAD)) return;
 | 
			
		||||
		
 | 
			
		||||
		// then cancel the event.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user