Fixing a few bugs, and adding in some debug output for unsolved ones.

This commit is contained in:
Olof Larsson 2013-04-26 10:32:02 +02:00
parent f6d601446e
commit 7626aed06a
9 changed files with 66 additions and 40 deletions

View File

@ -165,6 +165,7 @@ permissions:
factions.list: true factions.list: true
factions.map: true factions.map: true
factions.money.*: true factions.money.*: true
factions.officer: true
factions.open: true factions.open: true
factions.perm: true factions.perm: true
factions.power: true factions.power: true

View File

@ -49,7 +49,7 @@ public class CmdFactionsMap extends FCommand
public void showMap() 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()));
} }
} }

View File

@ -18,6 +18,8 @@ public abstract class CmdFactionsRelationAbstract extends FCommand
public CmdFactionsRelationAbstract() public CmdFactionsRelationAbstract()
{ {
this.addRequiredArg("faction");
this.addRequirements(ReqFactionsEnabled.get()); this.addRequirements(ReqFactionsEnabled.get());
this.addRequirements(ReqHasPerm.get(Perm.RELATION.node)); this.addRequirements(ReqHasPerm.get(Perm.RELATION.node));
this.addRequirements(ReqHasFaction.get()); this.addRequirements(ReqHasFaction.get());

View File

@ -98,7 +98,8 @@ public class Board extends Entity<Board> implements BoardInterface
public Faction getFactionAt(PS ps) public Faction getFactionAt(PS ps)
{ {
if (ps == null) return null; 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 // SET
@ -158,16 +159,18 @@ public class Board extends Entity<Board> implements BoardInterface
@Override @Override
public void clean() public void clean()
{ {
FactionColl factionColl = FactionColls.get().get(this);
for (Entry<PS, TerritoryAccess> entry : this.map.entrySet()) for (Entry<PS, TerritoryAccess> entry : this.map.entrySet())
{ {
TerritoryAccess territoryAccess = entry.getValue(); TerritoryAccess territoryAccess = entry.getValue();
String factionId = territoryAccess.getHostFactionId();
if (FactionColls.get().get(this).containsId(territoryAccess.getHostFactionId())) continue; if (factionColl.containsId(factionId)) continue;
PS ps = entry.getKey(); PS ps = entry.getKey();
this.removeAt(ps); this.removeAt(ps);
Factions.get().log("Board cleaner removed "+territoryAccess.getHostFactionId()+" from "+entry.getKey()); Factions.get().log("Board cleaner removed "+factionId+" from "+ps);
} }
} }

View File

@ -642,7 +642,14 @@ public class Faction extends Entity<Faction> implements EconomyParticipator
while (iter.hasNext()) while (iter.hasNext())
{ {
Entry<FPerm, Set<Rel>> entry = iter.next(); 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(); iter.remove();
} }

View File

@ -40,29 +40,6 @@ public class FactionColl extends Coll<Faction>
this.createSpecialFactions(); 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. // 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. // 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 @Override
public Faction detachId(Object oid) public Faction detachId(Object oid)
{ {

View File

@ -80,4 +80,16 @@ public class UPlayerColls extends XColls<UPlayerColl, UPlayer>
oldFile.renameTo(newFile); oldFile.renameTo(newFile);
} }
// -------------------------------------------- //
// EXTRAS
// -------------------------------------------- //
public void clean()
{
for (UPlayerColl coll : this.getColls())
{
coll.clean();
}
}
} }

View File

@ -1,29 +1,22 @@
package com.massivecraft.factions.listeners; package com.massivecraft.factions.listeners;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.Player;
import org.bukkit.entity.TNTPrimed; import org.bukkit.entity.TNTPrimed;
import org.bukkit.event.block.BlockFromToEvent; import org.bukkit.event.block.BlockFromToEvent;
import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.util.NumberConversions;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import com.massivecraft.factions.Factions; import com.massivecraft.factions.Factions;
import com.massivecraft.factions.entity.MConf; import com.massivecraft.factions.entity.MConf;
import com.massivecraft.mcore.util.SenderUtil;
import com.massivecraft.mcore.util.Txt;
public class FactionsListenerExploit implements Listener public class FactionsListenerExploit implements Listener
@ -48,7 +41,9 @@ public class FactionsListenerExploit implements Listener
// INTERACT SPAM // INTERACT SPAM
// -------------------------------------------- // // -------------------------------------------- //
// TODO: Now that I decoupled this one it may be to sensitive. // 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) @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
public void interactSpam(PlayerInteractEvent event) public void interactSpam(PlayerInteractEvent event)
{ {
@ -91,6 +86,7 @@ public class FactionsListenerExploit implements Listener
return attempts; return attempts;
} }
} }
*/
// -------------------------------------------- // // -------------------------------------------- //
// OBSIDIAN GENERATORS // OBSIDIAN GENERATORS

View File

@ -6,6 +6,7 @@ import java.util.Iterator;
import java.util.List; import java.util.List;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.Enderman; import org.bukkit.entity.Enderman;
@ -560,14 +561,14 @@ public class FactionsListenerMain implements Listener
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void blockExplosion(EntityExplodeEvent event) public void blockExplosion(EntityExplodeEvent event)
{ {
// If an entity is exploding ... // If an explosion occurs at a location ...
Entity entity = event.getEntity(); Location location = event.getLocation();
// Check Disabled // Check Disabled
if (UConf.isDisabled(entity)) return; if (UConf.isDisabled(location)) return;
// Check the entity. Are explosions disabled there? // 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); event.setCancelled(true);
return; return;
@ -637,6 +638,16 @@ public class FactionsListenerMain implements Listener
// If the faction at the block has firespread disabled ... // If the faction at the block has firespread disabled ...
PS ps = PS.valueOf(block); PS ps = PS.valueOf(block);
Faction faction = BoardColls.get().getFactionAt(ps); 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; if (faction.getFlag(FFlag.FIRESPREAD)) return;
// then cancel the event. // then cancel the event.