Check for f perm in building

This commit is contained in:
Trent Hensler
2018-02-03 12:49:04 -08:00
parent 9384b0faa6
commit 182022fe5f
10 changed files with 88 additions and 62 deletions

View File

@@ -6,7 +6,7 @@ import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.util.LazyLocation;
import com.massivecraft.factions.zcore.fperms.Access;
import com.massivecraft.factions.zcore.fperms.Action;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.fperms.Permissable;
import org.bukkit.ChatColor;
import org.bukkit.Location;
@@ -139,11 +139,11 @@ public interface Faction extends EconomyParticipator {
public int getDeaths();
public Access getAccess(Permissable permissable, Action action);
public Access getAccess(Permissable permissable, PermissableAction permissableAction);
public Access getAccess(FPlayer player, Action action);
public Access getAccess(FPlayer player, PermissableAction permissableAction);
public void setPermission(Permissable permissable, Action action, Access access);
public void setPermission(Permissable permissable, PermissableAction permissableAction, Access access);
public void resetPerms();

View File

@@ -14,7 +14,7 @@ import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.util.*;
import com.massivecraft.factions.zcore.MPlugin;
import com.massivecraft.factions.zcore.fperms.Access;
import com.massivecraft.factions.zcore.fperms.Action;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TextUtil;
import net.milkbowl.vault.permission.Permission;
import org.bukkit.Bukkit;
@@ -171,7 +171,7 @@ public class P extends MPlugin {
Type mapFLocToStringSetType = new TypeToken<Map<FLocation, Set<String>>>() {
}.getType();
Type accessTypeAdatper = new TypeToken<Map<Relation, Map<Action, Access>>>() {
Type accessTypeAdatper = new TypeToken<Map<Relation, Map<PermissableAction, Access>>>() {
}.getType();
return new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().excludeFieldsWithModifiers(Modifier.TRANSIENT, Modifier.VOLATILE).registerTypeAdapter(accessTypeAdatper, new PermissionsMapTypeAdapter()).registerTypeAdapter(LazyLocation.class, new MyLocationTypeAdapter()).registerTypeAdapter(mapFLocToStringSetType, new MapFLocToStringSetTypeAdapter()).registerTypeAdapterFactory(EnumTypeAdapter.ENUM_FACTORY);

View File

@@ -4,7 +4,7 @@ import com.massivecraft.factions.P;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.zcore.fperms.Access;
import com.massivecraft.factions.zcore.fperms.Action;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TL;
import java.util.Arrays;
@@ -47,7 +47,7 @@ public class CmdPerm extends FCommand {
}
Set<Relation> relations = new HashSet<>();
Set<Action> actions = new HashSet<>();
Set<PermissableAction> permissableActions = new HashSet<>();
boolean allRelations = argAsString(0).equalsIgnoreCase("all");
boolean allActions = argAsString(1).equalsIgnoreCase("all");
@@ -65,15 +65,15 @@ public class CmdPerm extends FCommand {
}
if (allActions) {
actions.addAll(Arrays.asList(Action.values()));
permissableActions.addAll(Arrays.asList(PermissableAction.values()));
} else {
Action action = Action.fromString(argAsString(1));
if (action == null) {
PermissableAction permissableAction = PermissableAction.fromString(argAsString(1));
if (permissableAction == null) {
fme.msg(TL.COMMAND_PERM_INVALID_ACTION);
return;
}
actions.add(action);
permissableActions.add(permissableAction);
}
Access access = Access.fromString(argAsString(2));
@@ -84,8 +84,8 @@ public class CmdPerm extends FCommand {
}
for (Relation relation : relations) {
for (Action action : actions) {
fme.getFaction().setPermission(relation, action, access);
for (PermissableAction permissableAction : permissableActions) {
fme.getFaction().setPermission(relation, permissableAction, access);
}
}

View File

@@ -4,7 +4,7 @@ import com.massivecraft.factions.FPlayer;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.zcore.fperms.Access;
import com.massivecraft.factions.zcore.fperms.Action;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.util.TL;
public class FPromoteCommand extends FCommand {
@@ -38,7 +38,7 @@ public class FPromoteCommand extends FCommand {
return;
}
Access access = myFaction.getAccess(fme.getRole(), Action.PROMOTE);
Access access = myFaction.getAccess(fme.getRole(), PermissableAction.PROMOTE);
// Well this is messy.
if (access == null || access == Access.UNDEFINED) {

View File

@@ -5,7 +5,7 @@ import com.massivecraft.factions.integration.Worldguard;
import com.massivecraft.factions.struct.Permission;
import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.zcore.fperms.Access;
import com.massivecraft.factions.zcore.fperms.Action;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
@@ -252,7 +252,7 @@ public class FactionsBlockListener implements Listener {
}
}
Access access = otherFaction.getAccess(me, Action.fromString(action));
Access access = otherFaction.getAccess(me, PermissableAction.fromString(action));
if (access != null && access != Access.UNDEFINED) {
// TODO: Update this once new access values are added other than just allow / deny.
return access == Access.ALLOW;

View File

@@ -11,6 +11,7 @@ import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.struct.Role;
import com.massivecraft.factions.util.VisualizeUtil;
import com.massivecraft.factions.zcore.fperms.Access;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.persist.MemoryFPlayer;
import com.massivecraft.factions.zcore.util.TL;
import com.massivecraft.factions.zcore.util.TextUtil;
@@ -32,10 +33,9 @@ import java.util.Map;
import java.util.UUID;
import java.util.logging.Level;
public class FactionsPlayerListener implements Listener {
public P p;
private P p;
public FactionsPlayerListener(P p) {
this.p = p;
@@ -355,7 +355,7 @@ public class FactionsPlayerListener implements Listener {
Relation rel = myFaction.getRelationTo(otherFaction);
Access access = otherFaction.getAccess(me, com.massivecraft.factions.zcore.fperms.Action.ITEM);
Access access = otherFaction.getAccess(me, PermissableAction.ITEM);
if (access != null && access != Access.UNDEFINED) {
// TODO: Update this once new access values are added other than just allow / deny.
return access == Access.ALLOW;
@@ -422,10 +422,36 @@ public class FactionsPlayerListener implements Listener {
}
}
Access access = otherFaction.getAccess(me, com.massivecraft.factions.zcore.fperms.Action.BUILD);
if (access != null && access != Access.UNDEFINED) {
// TODO: Update this once new access values are added other than just allow / deny.
return access == Access.ALLOW;
PermissableAction action = null;
switch (block.getType()) {
case LEVER:
action = PermissableAction.LEVER;
break;
case STONE_BUTTON:
case WOOD_BUTTON:
action = PermissableAction.BUTTON;
break;
case DARK_OAK_DOOR:
case ACACIA_DOOR:
case BIRCH_DOOR:
case IRON_DOOR:
case JUNGLE_DOOR:
case SPRUCE_DOOR:
case TRAP_DOOR:
case WOOD_DOOR:
case WOODEN_DOOR:
action = PermissableAction.DOOR;
break;
default:
break;
}
// F PERM check runs through before other checks.
Access access = otherFaction.getAccess(me, action);
if (access == null || access == Access.DENY) {
me.msg(TL.GENERIC_NOPERMISSION, action);
return false;
}
// We only care about some material types.

View File

@@ -4,7 +4,7 @@ import com.google.gson.*;
import com.massivecraft.factions.P;
import com.massivecraft.factions.struct.Relation;
import com.massivecraft.factions.zcore.fperms.Access;
import com.massivecraft.factions.zcore.fperms.Action;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import java.lang.reflect.Type;
import java.util.HashMap;
@@ -12,10 +12,10 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level;
public class PermissionsMapTypeAdapter implements JsonDeserializer<Map<Relation, Map<Action, Access>>> {
public class PermissionsMapTypeAdapter implements JsonDeserializer<Map<Relation, Map<PermissableAction, Access>>> {
@Override
public Map<Relation, Map<Action, Access>> deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException {
public Map<Relation, Map<PermissableAction, Access>> deserialize(JsonElement json, Type type, JsonDeserializationContext context) throws JsonParseException {
try {
JsonObject obj = json.getAsJsonObject();
@@ -23,7 +23,7 @@ public class PermissionsMapTypeAdapter implements JsonDeserializer<Map<Relation,
return null;
}
Map<Relation, Map<Action, Access>> permissionsMap = new ConcurrentHashMap<>();
Map<Relation, Map<PermissableAction, Access>> permissionsMap = new ConcurrentHashMap<>();
// Top level is Relation
for (Map.Entry<String, JsonElement> entry : obj.entrySet()) {
@@ -31,10 +31,10 @@ public class PermissionsMapTypeAdapter implements JsonDeserializer<Map<Relation,
// Second level is the map between action -> access
for (Map.Entry<String, JsonElement> entry2 : entry.getValue().getAsJsonObject().entrySet()) {
Map<Action, Access> accessMap = new HashMap<>();
Action action = Action.fromString(entry2.getKey());
Map<PermissableAction, Access> accessMap = new HashMap<>();
PermissableAction permissableAction = PermissableAction.fromString(entry2.getKey());
Access access = Access.fromString(entry2.getValue().getAsString());
accessMap.put(action, access);
accessMap.put(permissableAction, access);
permissionsMap.put(relation, accessMap);
}

View File

@@ -1,6 +1,6 @@
package com.massivecraft.factions.zcore.fperms;
public enum Action {
public enum PermissableAction {
BUILD("build"),
DESTROY("destroy"),
FROST_WALK("frostwalk"),
@@ -22,7 +22,7 @@ public enum Action {
private String name;
Action(String name) {
PermissableAction(String name) {
this.name = name;
}
@@ -41,10 +41,10 @@ public enum Action {
* @param check
* @return
*/
public static Action fromString(String check) {
for (Action action : values()) {
if (action.name().equalsIgnoreCase(check)) {
return action;
public static PermissableAction fromString(String check) {
for (PermissableAction permissableAction : values()) {
if (permissableAction.name().equalsIgnoreCase(check)) {
return permissableAction;
}
}

View File

@@ -11,7 +11,7 @@ import com.massivecraft.factions.util.LazyLocation;
import com.massivecraft.factions.util.MiscUtil;
import com.massivecraft.factions.util.RelationUtil;
import com.massivecraft.factions.zcore.fperms.Access;
import com.massivecraft.factions.zcore.fperms.Action;
import com.massivecraft.factions.zcore.fperms.PermissableAction;
import com.massivecraft.factions.zcore.fperms.Permissable;
import com.massivecraft.factions.zcore.util.TL;
import org.bukkit.Bukkit;
@@ -49,7 +49,7 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
private long lastDeath;
protected int maxVaults;
protected Role defaultRole;
protected Map<Permissable, Map<Action, Access>> permissions = new HashMap<>();
protected Map<Permissable, Map<PermissableAction, Access>> permissions = new HashMap<>();
public HashMap<String, List<String>> getAnnouncements() {
return this.announcements;
@@ -325,29 +325,29 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
// -------------------------------------------- //
public Access getAccess(Permissable permissable, Action action) {
if (permissable == null || action == null) {
return null;
public Access getAccess(Permissable permissable, PermissableAction permissableAction) {
if (permissable == null || permissableAction == null) {
return Access.UNDEFINED;
}
Map<Action, Access> accessMap = permissions.get(permissable);
if (accessMap != null && accessMap.containsKey(action)) {
return accessMap.get(action);
Map<PermissableAction, Access> accessMap = permissions.get(permissable);
if (accessMap != null && accessMap.containsKey(permissableAction)) {
return accessMap.get(permissableAction);
}
return null;
return Access.UNDEFINED;
}
/**
* Get the Access of a player. Will use player's Role if they are a faction member. Otherwise, uses their Relation.
*
* @param player
* @param action
* @param permissableAction
* @return
*/
public Access getAccess(FPlayer player, Action action) {
if (player == null || action == null) {
return null;
public Access getAccess(FPlayer player, PermissableAction permissableAction) {
if (player == null || permissableAction == null) {
return Access.UNDEFINED;
}
Permissable perm;
@@ -358,21 +358,21 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
perm = player.getFaction().getRelationTo(this);
}
Map<Action, Access> accessMap = permissions.get(perm);
if (accessMap != null && accessMap.containsKey(action)) {
return accessMap.get(action);
Map<PermissableAction, Access> accessMap = permissions.get(perm);
if (accessMap != null && accessMap.containsKey(permissableAction)) {
return accessMap.get(permissableAction);
}
return null;
return Access.UNDEFINED;
}
public void setPermission(Permissable permissable, Action action, Access access) {
Map<Action, Access> accessMap = permissions.get(permissable);
public void setPermission(Permissable permissable, PermissableAction permissableAction, Access access) {
Map<PermissableAction, Access> accessMap = permissions.get(permissable);
if (accessMap == null) {
accessMap = new HashMap<>();
}
accessMap.put(action, access);
accessMap.put(permissableAction, access);
}
public void resetPerms() {
@@ -381,9 +381,9 @@ public abstract class MemoryFaction implements Faction, EconomyParticipator {
permissions.clear();
// First populate a map with undefined as the permission for each action.
Map<Action, Access> freshMap = new HashMap<>();
for (Action action : Action.values()) {
freshMap.put(action, Access.UNDEFINED);
Map<PermissableAction, Access> freshMap = new HashMap<>();
for (PermissableAction permissableAction : PermissableAction.values()) {
freshMap.put(permissableAction, Access.UNDEFINED);
}
// Put the map in there for each relation.