mirror of
https://github.com/MassiveCraft/Factions.git
synced 2024-11-23 10:45:51 +01:00
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.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.command.ConsoleCommandSender;
|
|
||||||
|
|
||||||
import com.massivecraft.factions.entity.BoardColls;
|
import com.massivecraft.factions.entity.BoardColls;
|
||||||
import com.massivecraft.factions.entity.FPlayer;
|
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>.";
|
private static final String errorpattern = "%s<b> does not allow you to %s<b>.";
|
||||||
public boolean has(Object testSubject, Faction hostFaction, boolean informIfNot)
|
public boolean has(Object testSubject, Faction hostFaction, boolean informIfNot)
|
||||||
{
|
{
|
||||||
if (testSubject instanceof ConsoleCommandSender) return true;
|
|
||||||
|
|
||||||
RelationParticipator rpSubject = null;
|
RelationParticipator rpSubject = null;
|
||||||
|
|
||||||
if (testSubject instanceof CommandSender)
|
if (testSubject instanceof CommandSender)
|
||||||
@ -232,16 +228,8 @@ public enum FPerm
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return this.has(testSubject, access.getHostFaction(), informIfNot);
|
|
||||||
}
|
return this.has(testSubject, BoardColls.get().getFactionAt(ps), 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);
|
|
||||||
}
|
}
|
||||||
public boolean has(Object testSubject, PS ps)
|
public boolean has(Object testSubject, PS ps)
|
||||||
{
|
{
|
||||||
|
@ -7,9 +7,8 @@ import org.bukkit.command.CommandSender;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.massivecraft.factions.entity.FPlayer;
|
import com.massivecraft.factions.entity.FPlayer;
|
||||||
import com.massivecraft.factions.entity.FPlayerColl;
|
|
||||||
import com.massivecraft.factions.entity.Faction;
|
import com.massivecraft.factions.entity.Faction;
|
||||||
import com.massivecraft.factions.entity.FactionColl;
|
import com.massivecraft.factions.entity.FactionColls;
|
||||||
|
|
||||||
public class TerritoryAccess
|
public class TerritoryAccess
|
||||||
{
|
{
|
||||||
@ -19,7 +18,6 @@ public class TerritoryAccess
|
|||||||
|
|
||||||
private String hostFactionId;
|
private String hostFactionId;
|
||||||
public String getHostFactionId() { return this.hostFactionId; }
|
public String getHostFactionId() { return this.hostFactionId; }
|
||||||
public Faction getHostFaction() { return FactionColl.get().get(this.hostFactionId); }
|
|
||||||
public void setHostFactionId(String hostFactionId) { this.hostFactionId = hostFactionId; }
|
public void setHostFactionId(String hostFactionId) { this.hostFactionId = hostFactionId; }
|
||||||
|
|
||||||
private boolean hostFactionAllowed = true;
|
private boolean hostFactionAllowed = true;
|
||||||
@ -105,7 +103,7 @@ public class TerritoryAccess
|
|||||||
if (testSubject instanceof String)
|
if (testSubject instanceof String)
|
||||||
return hostFactionId.equals((String)testSubject);
|
return hostFactionId.equals((String)testSubject);
|
||||||
else if (testSubject instanceof CommandSender)
|
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)
|
else if (testSubject instanceof FPlayer)
|
||||||
return hostFactionId.equals(((FPlayer)testSubject).getFactionId());
|
return hostFactionId.equals(((FPlayer)testSubject).getFactionId());
|
||||||
else if (testSubject instanceof Faction)
|
else if (testSubject instanceof Faction)
|
||||||
@ -131,14 +129,14 @@ public class TerritoryAccess
|
|||||||
this.fplayerIds.clear();
|
this.fplayerIds.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public String factionList()
|
public String factionList(Faction universeExtractable)
|
||||||
{
|
{
|
||||||
StringBuilder list = new StringBuilder();
|
StringBuilder list = new StringBuilder();
|
||||||
for (String factionID : factionIds)
|
for (String factionID : factionIds)
|
||||||
{
|
{
|
||||||
if (list.length() > 0)
|
if (list.length() > 0)
|
||||||
list.append(", ");
|
list.append(", ");
|
||||||
list.append(FactionColl.get().get(factionID).getTag());
|
list.append(FactionColls.get().get(universeExtractable).get(factionID).getTag());
|
||||||
}
|
}
|
||||||
return list.toString();
|
return list.toString();
|
||||||
}
|
}
|
||||||
@ -160,7 +158,7 @@ public class TerritoryAccess
|
|||||||
public boolean subjectHasAccess(Object testSubject)
|
public boolean subjectHasAccess(Object testSubject)
|
||||||
{
|
{
|
||||||
if (testSubject instanceof Player)
|
if (testSubject instanceof Player)
|
||||||
return fPlayerHasAccess(FPlayerColl.get().get(testSubject));
|
return fPlayerHasAccess(FPlayer.get(testSubject));
|
||||||
else if (testSubject instanceof FPlayer)
|
else if (testSubject instanceof FPlayer)
|
||||||
return fPlayerHasAccess((FPlayer)testSubject);
|
return fPlayerHasAccess((FPlayer)testSubject);
|
||||||
else if (testSubject instanceof Faction)
|
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
|
// 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)
|
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);
|
PS chunk = PS.valueOf(me).getChunk(true);
|
||||||
|
|
||||||
TerritoryAccess territory = BoardColls.get().getTerritoryAccessAt(chunk);
|
TerritoryAccess territory = BoardColls.get().getTerritoryAccessAt(chunk);
|
||||||
Faction locFaction = territory.getHostFaction();
|
Faction locFaction = BoardColls.get().getFactionAt(chunk);
|
||||||
boolean accessAny = Perm.ACCESS_ANY.has(sender, false);
|
boolean accessAny = Perm.ACCESS_ANY.has(sender, false);
|
||||||
|
|
||||||
if (type.isEmpty() || type.equals("view"))
|
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"));
|
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 players = territory.fplayerList();
|
||||||
String factions = territory.factionList();
|
String factions = territory.factionList(locFaction);
|
||||||
|
|
||||||
if (factions.isEmpty())
|
if (factions.isEmpty())
|
||||||
msg("No factions have been explicitly granted access.");
|
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)
|
public Faction getFactionAt(PS ps)
|
||||||
{
|
{
|
||||||
if (ps == null) return null;
|
if (ps == null) return null;
|
||||||
return this.getTerritoryAccessAt(ps).getHostFaction();
|
return FactionColls.get().get(this).get(this.getTerritoryAccessAt(ps).getHostFactionId());
|
||||||
}
|
}
|
||||||
|
|
||||||
// SET
|
// SET
|
||||||
|
@ -153,13 +153,9 @@ public class FPlayer extends SenderEntity<FPlayer> implements EconomyParticipato
|
|||||||
public FPlayer()
|
public FPlayer()
|
||||||
{
|
{
|
||||||
this.resetFactionData(false);
|
this.resetFactionData(false);
|
||||||
|
this.setFactionId(ConfServer.newPlayerStartingFactionID);
|
||||||
this.power = ConfServer.powerStarting;
|
this.power = ConfServer.powerStarting;
|
||||||
this.lastPowerUpdateTime = System.currentTimeMillis();
|
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)
|
public final void resetFactionData(boolean doSpoutUpdate)
|
||||||
|
@ -5,7 +5,6 @@ import java.util.Collection;
|
|||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.Enderman;
|
import org.bukkit.entity.Enderman;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
@ -594,7 +593,7 @@ public class FactionsListenerMain implements Listener
|
|||||||
if (targetFaction == pistonFaction) return;
|
if (targetFaction == pistonFaction) return;
|
||||||
|
|
||||||
// if potentially pushing into air/water/lava in another territory, we need to check it out
|
// 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);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -614,18 +613,19 @@ public class FactionsListenerMain implements Listener
|
|||||||
// if not a sticky piston, retraction should be fine
|
// if not a sticky piston, retraction should be fine
|
||||||
if (!event.isSticky()) return;
|
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 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()));
|
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
|
// 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 (targetFaction == pistonFaction) return;
|
||||||
|
|
||||||
if ( ! FPerm.BUILD.has(pistonFaction, targetLoc))
|
if (!FPerm.BUILD.has(pistonFaction, retractPs))
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package com.massivecraft.factions.listeners;
|
package com.massivecraft.factions.listeners;
|
||||||
|
|
||||||
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.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -82,7 +81,7 @@ public class TodoFactionsPlayerListener implements Listener
|
|||||||
TerritoryAccess access = BoardColls.get().getTerritoryAccessAt(chunkTo);
|
TerritoryAccess access = BoardColls.get().getTerritoryAccessAt(chunkTo);
|
||||||
|
|
||||||
// Did we change "host"(faction)?
|
// 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
|
// let Spout handle most of this if it's available
|
||||||
boolean handledBySpout = changedFaction && SpoutFeatures.updateTerritoryDisplay(fplayer);
|
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 (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);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// TODO: Refactor ! justCheck -> to informIfNot
|
// TODO: Refactor ! justCheck -> to informIfNot
|
||||||
// TODO: Possibly incorporate pain build...
|
// 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();
|
String name = player.getName();
|
||||||
if (MConf.get().playersWhoBypassAllProtection.contains(name)) return true;
|
if (MConf.get().playersWhoBypassAllProtection.contains(name)) return true;
|
||||||
|
|
||||||
FPlayer me = FPlayer.get(name);
|
FPlayer fplayer = FPlayer.get(player);
|
||||||
if (me.isUsingAdminMode()) return true;
|
if (fplayer.isUsingAdminMode()) return true;
|
||||||
if (Const.MATERIALS_EDIT_TOOLS.contains(material) && ! FPerm.BUILD.has(me, loc, ! justCheck)) return false;
|
|
||||||
return true;
|
return FPerm.BUILD.has(fplayer, ps, !justCheck);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean canPlayerUseBlock(Player player, Block block, boolean justCheck)
|
public static boolean canPlayerUseBlock(Player player, Block block, boolean justCheck)
|
||||||
{
|
{
|
||||||
String name = player.getName();
|
String name = player.getName();
|
||||||
if (MConf.get().playersWhoBypassAllProtection.contains(name)) return true;
|
if (MConf.get().playersWhoBypassAllProtection.contains(name)) return true;
|
||||||
|
|
||||||
FPlayer me = FPlayer.get(name);
|
FPlayer me = FPlayer.get(player);
|
||||||
if (me.isUsingAdminMode()) return true;
|
if (me.isUsingAdminMode()) return true;
|
||||||
Location loc = block.getLocation();
|
|
||||||
|
PS ps = PS.valueOf(block);
|
||||||
Material material = block.getType();
|
Material material = block.getType();
|
||||||
|
|
||||||
if (Const.MATERIALS_EDIT_ON_INTERACT.contains(material) && ! FPerm.BUILD.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, loc, ! 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, loc, ! 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, loc, ! justCheck)) return false;
|
if (material == Material.STONE_BUTTON && ! FPerm.BUTTON.has(me, ps, ! justCheck)) return false;
|
||||||
if (material == Material.LEVER && ! FPerm.LEVER.has(me, loc, ! justCheck)) return false;
|
if (material == Material.LEVER && ! FPerm.LEVER.has(me, ps, ! justCheck)) return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -176,7 +178,7 @@ public class TodoFactionsPlayerListener implements Listener
|
|||||||
Block block = event.getBlockClicked();
|
Block block = event.getBlockClicked();
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
|
||||||
if ( ! playerCanUseItemHere(player, block.getLocation(), event.getBucket(), false))
|
if ( ! playerCanUseItemHere(player, PS.valueOf(block), event.getBucket(), false))
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
@ -188,7 +190,7 @@ public class TodoFactionsPlayerListener implements Listener
|
|||||||
Block block = event.getBlockClicked();
|
Block block = event.getBlockClicked();
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
|
||||||
if ( ! playerCanUseItemHere(player, block.getLocation(), event.getBucket(), false))
|
if ( ! playerCanUseItemHere(player, PS.valueOf(block), event.getBucket(), false))
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user