Patched away the errors with ugly meassures.
This commit is contained in:
parent
61e8730495
commit
390ad76fa6
@ -8,9 +8,7 @@ import java.util.LinkedHashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.ConsoleCommandSender;
|
||||
|
||||
import com.massivecraft.factions.entity.BoardColls;
|
||||
import com.massivecraft.factions.entity.FPlayer;
|
||||
@ -171,8 +169,6 @@ public enum FPerm
|
||||
private static final String errorpattern = "%s<b> does not allow you to %s<b>.";
|
||||
public boolean has(Object testSubject, Faction hostFaction, boolean informIfNot)
|
||||
{
|
||||
if (testSubject instanceof ConsoleCommandSender) return true;
|
||||
|
||||
RelationParticipator rpSubject = null;
|
||||
|
||||
if (testSubject instanceof CommandSender)
|
||||
@ -232,16 +228,8 @@ public enum FPerm
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return this.has(testSubject, access.getHostFaction(), informIfNot);
|
||||
}
|
||||
public boolean has(Object testSubject, Location loc, boolean informIfNot)
|
||||
{
|
||||
PS ps = PS.valueOf(loc);
|
||||
return this.has(testSubject, ps, informIfNot);
|
||||
}
|
||||
public boolean has(Object testSubject, Location loc)
|
||||
{
|
||||
return this.has(testSubject, loc, false);
|
||||
|
||||
return this.has(testSubject, BoardColls.get().getFactionAt(ps), informIfNot);
|
||||
}
|
||||
public boolean has(Object testSubject, PS ps)
|
||||
{
|
||||
|
@ -7,9 +7,8 @@ import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import com.massivecraft.factions.entity.FPlayer;
|
||||
import com.massivecraft.factions.entity.FPlayerColl;
|
||||
import com.massivecraft.factions.entity.Faction;
|
||||
import com.massivecraft.factions.entity.FactionColl;
|
||||
import com.massivecraft.factions.entity.FactionColls;
|
||||
|
||||
public class TerritoryAccess
|
||||
{
|
||||
@ -19,7 +18,6 @@ public class TerritoryAccess
|
||||
|
||||
private String hostFactionId;
|
||||
public String getHostFactionId() { return this.hostFactionId; }
|
||||
public Faction getHostFaction() { return FactionColl.get().get(this.hostFactionId); }
|
||||
public void setHostFactionId(String hostFactionId) { this.hostFactionId = hostFactionId; }
|
||||
|
||||
private boolean hostFactionAllowed = true;
|
||||
@ -105,7 +103,7 @@ public class TerritoryAccess
|
||||
if (testSubject instanceof String)
|
||||
return hostFactionId.equals((String)testSubject);
|
||||
else if (testSubject instanceof CommandSender)
|
||||
return hostFactionId.equals(FPlayerColl.get().get(testSubject).getFactionId());
|
||||
return hostFactionId.equals(FPlayer.get(testSubject).getFactionId());
|
||||
else if (testSubject instanceof FPlayer)
|
||||
return hostFactionId.equals(((FPlayer)testSubject).getFactionId());
|
||||
else if (testSubject instanceof Faction)
|
||||
@ -131,14 +129,14 @@ public class TerritoryAccess
|
||||
this.fplayerIds.clear();
|
||||
}
|
||||
|
||||
public String factionList()
|
||||
public String factionList(Faction universeExtractable)
|
||||
{
|
||||
StringBuilder list = new StringBuilder();
|
||||
for (String factionID : factionIds)
|
||||
{
|
||||
if (list.length() > 0)
|
||||
list.append(", ");
|
||||
list.append(FactionColl.get().get(factionID).getTag());
|
||||
list.append(FactionColls.get().get(universeExtractable).get(factionID).getTag());
|
||||
}
|
||||
return list.toString();
|
||||
}
|
||||
@ -160,7 +158,7 @@ public class TerritoryAccess
|
||||
public boolean subjectHasAccess(Object testSubject)
|
||||
{
|
||||
if (testSubject instanceof Player)
|
||||
return fPlayerHasAccess(FPlayerColl.get().get(testSubject));
|
||||
return fPlayerHasAccess(FPlayer.get(testSubject));
|
||||
else if (testSubject instanceof FPlayer)
|
||||
return fPlayerHasAccess((FPlayer)testSubject);
|
||||
else if (testSubject instanceof Faction)
|
||||
@ -184,7 +182,8 @@ public class TerritoryAccess
|
||||
// this should normally only be checked after running subjectHasAccess() or fPlayerHasAccess() above to see if they have access explicitly granted
|
||||
public boolean subjectAccessIsRestricted(Object testSubject)
|
||||
{
|
||||
return ( ! this.isHostFactionAllowed() && this.doesHostFactionMatch(testSubject) && ! FPerm.ACCESS.has(testSubject, this.getHostFaction()));
|
||||
Faction hostFaction = FactionColls.get().get(testSubject).get(this.getHostFactionId());
|
||||
return ( ! this.isHostFactionAllowed() && this.doesHostFactionMatch(testSubject) && ! FPerm.ACCESS.has(testSubject, hostFaction));
|
||||
}
|
||||
|
||||
//----------------------------------------------//
|
||||
|
@ -37,7 +37,7 @@ public class CmdFactionsAccess extends FCommand
|
||||
PS chunk = PS.valueOf(me).getChunk(true);
|
||||
|
||||
TerritoryAccess territory = BoardColls.get().getTerritoryAccessAt(chunk);
|
||||
Faction locFaction = territory.getHostFaction();
|
||||
Faction locFaction = BoardColls.get().getFactionAt(chunk);
|
||||
boolean accessAny = Perm.ACCESS_ANY.has(sender, false);
|
||||
|
||||
if (type.isEmpty() || type.equals("view"))
|
||||
@ -96,7 +96,7 @@ public class CmdFactionsAccess extends FCommand
|
||||
msg("<i>Host faction %s has %s<i> in this territory.", locFaction.getTag(), Txt.parse(territory.isHostFactionAllowed() ? "<lime>normal access" : "<rose>restricted access"));
|
||||
|
||||
String players = territory.fplayerList();
|
||||
String factions = territory.factionList();
|
||||
String factions = territory.factionList(locFaction);
|
||||
|
||||
if (factions.isEmpty())
|
||||
msg("No factions have been explicitly granted access.");
|
||||
|
@ -98,7 +98,7 @@ public class Board extends Entity<Board> implements BoardInterface
|
||||
public Faction getFactionAt(PS ps)
|
||||
{
|
||||
if (ps == null) return null;
|
||||
return this.getTerritoryAccessAt(ps).getHostFaction();
|
||||
return FactionColls.get().get(this).get(this.getTerritoryAccessAt(ps).getHostFactionId());
|
||||
}
|
||||
|
||||
// SET
|
||||
|
@ -153,13 +153,9 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
|
||||
public FPlayer()
|
||||
{
|
||||
this.resetFactionData(false);
|
||||
this.setFactionId(ConfServer.newPlayerStartingFactionID);
|
||||
this.power = ConfServer.powerStarting;
|
||||
this.lastPowerUpdateTime = System.currentTimeMillis();
|
||||
|
||||
if ( ! ConfServer.newPlayerStartingFactionID.equals(Const.FACTIONID_NONE) && FactionColl.get().containsId(ConfServer.newPlayerStartingFactionID))
|
||||
{
|
||||
this.factionId = ConfServer.newPlayerStartingFactionID;
|
||||
}
|
||||
}
|
||||
|
||||
public final void resetFactionData(boolean doSpoutUpdate)
|
||||
|
@ -5,7 +5,6 @@ import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Enderman;
|
||||
import org.bukkit.entity.Entity;
|
||||
@ -594,7 +593,7 @@ public class FactionsListenerMain implements Listener
|
||||
if (targetFaction == pistonFaction) return;
|
||||
|
||||
// if potentially pushing into air/water/lava in another territory, we need to check it out
|
||||
if ((targetBlock.isEmpty() || targetBlock.isLiquid()) && ! FPerm.BUILD.has(pistonFaction, targetBlock.getLocation()))
|
||||
if ((targetBlock.isEmpty() || targetBlock.isLiquid()) && ! FPerm.BUILD.has(pistonFaction, PS.valueOf(targetBlock)))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
@ -614,18 +613,19 @@ public class FactionsListenerMain implements Listener
|
||||
// if not a sticky piston, retraction should be fine
|
||||
if (!event.isSticky()) return;
|
||||
|
||||
Location targetLoc = event.getRetractLocation();
|
||||
Block retractBlock = event.getRetractLocation().getBlock();
|
||||
PS retractPs = PS.valueOf(retractBlock);
|
||||
|
||||
// if potentially retracted block is just air/water/lava, no worries
|
||||
if (targetLoc.getBlock().isEmpty() || targetLoc.getBlock().isLiquid()) return;
|
||||
if (retractBlock.isEmpty() || retractBlock.isLiquid()) return;
|
||||
|
||||
Faction pistonFaction = BoardColls.get().getFactionAt(PS.valueOf(event.getBlock()));
|
||||
|
||||
// members of faction might not have build rights in their own territory, but pistons should still work regardless; so, address that corner case
|
||||
Faction targetFaction = BoardColls.get().getFactionAt(PS.valueOf(targetLoc));
|
||||
Faction targetFaction = BoardColls.get().getFactionAt(retractPs);
|
||||
if (targetFaction == pistonFaction) return;
|
||||
|
||||
if ( ! FPerm.BUILD.has(pistonFaction, targetLoc))
|
||||
if (!FPerm.BUILD.has(pistonFaction, retractPs))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
package com.massivecraft.factions.listeners;
|
||||
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.block.Block;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -82,7 +81,7 @@ public class TodoFactionsPlayerListener implements Listener
|
||||
TerritoryAccess access = BoardColls.get().getTerritoryAccessAt(chunkTo);
|
||||
|
||||
// Did we change "host"(faction)?
|
||||
boolean changedFaction = (BoardColls.get().getFactionAt(chunkFrom) != access.getHostFaction());
|
||||
boolean changedFaction = (BoardColls.get().getFactionAt(chunkFrom) != BoardColls.get().getFactionAt(chunkTo));
|
||||
|
||||
// let Spout handle most of this if it's available
|
||||
boolean handledBySpout = changedFaction && SpoutFeatures.updateTerritoryDisplay(fplayer);
|
||||
@ -130,41 +129,44 @@ public class TodoFactionsPlayerListener implements Listener
|
||||
|
||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) return; // only interested on right-clicks for below
|
||||
|
||||
if ( ! playerCanUseItemHere(player, block.getLocation(), event.getMaterial(), false))
|
||||
if ( ! playerCanUseItemHere(player, PS.valueOf(block), event.getMaterial(), false))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// TODO: Refactor ! justCheck -> to informIfNot
|
||||
// TODO: Possibly incorporate pain build...
|
||||
public static boolean playerCanUseItemHere(Player player, Location loc, Material material, boolean justCheck)
|
||||
public static boolean playerCanUseItemHere(Player player, PS ps, Material material, boolean justCheck)
|
||||
{
|
||||
if (!Const.MATERIALS_EDIT_TOOLS.contains(material)) return true;
|
||||
|
||||
String name = player.getName();
|
||||
if (MConf.get().playersWhoBypassAllProtection.contains(name)) return true;
|
||||
|
||||
FPlayer me = FPlayer.get(name);
|
||||
if (me.isUsingAdminMode()) return true;
|
||||
if (Const.MATERIALS_EDIT_TOOLS.contains(material) && ! FPerm.BUILD.has(me, loc, ! justCheck)) return false;
|
||||
return true;
|
||||
FPlayer fplayer = FPlayer.get(player);
|
||||
if (fplayer.isUsingAdminMode()) return true;
|
||||
|
||||
return FPerm.BUILD.has(fplayer, ps, !justCheck);
|
||||
}
|
||||
|
||||
public static boolean canPlayerUseBlock(Player player, Block block, boolean justCheck)
|
||||
{
|
||||
String name = player.getName();
|
||||
if (MConf.get().playersWhoBypassAllProtection.contains(name)) return true;
|
||||
|
||||
FPlayer me = FPlayer.get(name);
|
||||
FPlayer me = FPlayer.get(player);
|
||||
if (me.isUsingAdminMode()) return true;
|
||||
Location loc = block.getLocation();
|
||||
|
||||
PS ps = PS.valueOf(block);
|
||||
Material material = block.getType();
|
||||
|
||||
if (Const.MATERIALS_EDIT_ON_INTERACT.contains(material) && ! FPerm.BUILD.has(me, loc, ! justCheck)) return false;
|
||||
if (Const.MATERIALS_CONTAINER.contains(material) && ! FPerm.CONTAINER.has(me, loc, ! justCheck)) return false;
|
||||
if (Const.MATERIALS_DOOR.contains(material) && ! FPerm.DOOR.has(me, loc, ! justCheck)) return false;
|
||||
if (material == Material.STONE_BUTTON && ! FPerm.BUTTON.has(me, loc, ! justCheck)) return false;
|
||||
if (material == Material.LEVER && ! FPerm.LEVER.has(me, loc, ! justCheck)) return false;
|
||||
if (Const.MATERIALS_EDIT_ON_INTERACT.contains(material) && ! FPerm.BUILD.has(me, ps, ! justCheck)) return false;
|
||||
if (Const.MATERIALS_CONTAINER.contains(material) && ! FPerm.CONTAINER.has(me, ps, ! justCheck)) return false;
|
||||
if (Const.MATERIALS_DOOR.contains(material) && ! FPerm.DOOR.has(me, ps, ! justCheck)) return false;
|
||||
if (material == Material.STONE_BUTTON && ! FPerm.BUTTON.has(me, ps, ! justCheck)) return false;
|
||||
if (material == Material.LEVER && ! FPerm.LEVER.has(me, ps, ! justCheck)) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -176,7 +178,7 @@ public class TodoFactionsPlayerListener implements Listener
|
||||
Block block = event.getBlockClicked();
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if ( ! playerCanUseItemHere(player, block.getLocation(), event.getBucket(), false))
|
||||
if ( ! playerCanUseItemHere(player, PS.valueOf(block), event.getBucket(), false))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
@ -188,7 +190,7 @@ public class TodoFactionsPlayerListener implements Listener
|
||||
Block block = event.getBlockClicked();
|
||||
Player player = event.getPlayer();
|
||||
|
||||
if ( ! playerCanUseItemHere(player, block.getLocation(), event.getBucket(), false))
|
||||
if ( ! playerCanUseItemHere(player, PS.valueOf(block), event.getBucket(), false))
|
||||
{
|
||||
event.setCancelled(true);
|
||||
return;
|
||||
|
Loading…
Reference in New Issue
Block a user