Skip to content

Commit

Permalink
Fix #6 Adding permission level to config and hide upgrade
Browse files Browse the repository at this point in the history
  • Loading branch information
Guillaume-Lebegue committed Jun 29, 2020
1 parent 204b0d4 commit 3b62f28
Show file tree
Hide file tree
Showing 4 changed files with 192 additions and 0 deletions.
24 changes: 24 additions & 0 deletions src/main/java/world/bentobox/upgrades/UpgradesManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,14 @@ public Map<String, Integer> getRangeUpgradeInfos(int rangeLevel, int islandLevel
return info;
}

public int getRangePermissionLevel(int rangeLevel, World world) {
Settings.UpgradeTier rangeUpgradeTier = this.getRangeUpgradeTier(rangeLevel, world);

if (rangeUpgradeTier == null)
return 0;
return rangeUpgradeTier.getPermissionLevel();
}

public String getRangeUpgradeTierName(int rangeLevel, World world) {
Settings.UpgradeTier rangeUpgradeTier = this.getRangeUpgradeTier(rangeLevel, world);

Expand Down Expand Up @@ -252,6 +260,14 @@ public Map<String, Integer> getBlockLimitsUpgradeInfos(Material mat, int limitsL
return info;
}

public int getBlockLimitsPermissionLevel(Material mat, int limitsLevel, World world) {
Settings.UpgradeTier limitsUpgradeTier = this.getBlockLimitsUpgradeTier(mat, limitsLevel, world);

if (limitsUpgradeTier == null)
return 0;
return limitsUpgradeTier.getPermissionLevel();
}

public String getBlockLimitsUpgradeTierName(Material mat, int limitsLevel, World world) {
Settings.UpgradeTier limitsUpgradeTier = this.getBlockLimitsUpgradeTier(mat, limitsLevel, world);

Expand Down Expand Up @@ -280,6 +296,14 @@ public Map<String, Integer> getEntityLimitsUpgradeInfos(EntityType ent, int limi
return info;
}

public int getEntityLimitsPermissionLevel(EntityType ent, int limitsLevel, World world) {
Settings.UpgradeTier limitsUpgradeTier = this.getEntityLimitsUpgradeTier(ent, limitsLevel, world);

if (limitsUpgradeTier == null)
return 0;
return limitsUpgradeTier.getPermissionLevel();
}

public String getEntityLimitsUpgradeTierName(EntityType ent, int limitsLevel, World world) {
Settings.UpgradeTier limitsUpgradeTier = this.getEntityLimitsUpgradeTier(ent, limitsLevel, world);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

import java.util.Map;

import org.apache.commons.lang.math.NumberUtils;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionAttachmentInfo;

import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.database.objects.Island;
Expand Down Expand Up @@ -62,6 +65,59 @@ public void updateUpgradeValue(User user, Island island) {
this.setDisplayName(newDisplayName);
}

@Override
public boolean isShowed(User user, Island island) {
// Get the addon
UpgradesAddon upgradesAddon = this.getUpgradesAddon();
// Get the data from upgrades
UpgradesData islandData = upgradesAddon.getUpgradesLevels(island.getUniqueId());
// Get level of the upgrade
int upgradeLevel = islandData.getUpgradeLevel(this.getName());
// Permission level required
int permissionLevel = upgradesAddon.getUpgradesManager().getBlockLimitsPermissionLevel(this.block, upgradeLevel, island.getWorld());

// If default permission, then true
if (permissionLevel == 0)
return true;

Player player = user.getPlayer();
String gamemode = island.getGameMode();
String permissionStart = gamemode + ".upgrades." + this.getName() + ".";

// For each permission of the player
for (PermissionAttachmentInfo perms : player.getEffectivePermissions()) {

// If permission is the one we search
if (!perms.getValue() || !perms.getPermission().startsWith(permissionStart))
continue;

if (perms.getPermission().contains(permissionStart + "*")) {
this.logError(player.getName(), perms.getPermission(), "Wildcards are not allowed.");
return false;
}

String[] split = perms.getPermission().split("\\.");
if (split.length != 4) {
logError(player.getName(), perms.getPermission(), "format must be '" + permissionStart + "LEVEL'");
return false;
}

if (!NumberUtils.isDigits(split[3])) {
logError(player.getName(), perms.getPermission(), "The last part must be a number");
return false;
}

if (permissionLevel <= Integer.parseInt(split[3]))
return true;
}

return false;
}

private void logError(String name, String perm, String error) {
this.getUpgradesAddon().logError("Player " + name + " has permission: '" + perm + "' but " + error + " Ignoring...");
}

@Override
public boolean doUpgrade(User user, Island island) {
UpgradesAddon islandAddon = this.getUpgradesAddon();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

import java.util.Map;

import org.apache.commons.lang.math.NumberUtils;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionAttachmentInfo;

import world.bentobox.bentobox.api.user.User;
import world.bentobox.bentobox.database.objects.Island;
Expand Down Expand Up @@ -60,6 +63,59 @@ public void updateUpgradeValue(User user, Island island) {
this.setDisplayName(newDisplayName);
}

@Override
public boolean isShowed(User user, Island island) {
// Get the addon
UpgradesAddon upgradesAddon = this.getUpgradesAddon();
// Get the data from upgrades
UpgradesData islandData = upgradesAddon.getUpgradesLevels(island.getUniqueId());
// Get level of the upgrade
int upgradeLevel = islandData.getUpgradeLevel(this.getName());
// Permission level required
int permissionLevel = upgradesAddon.getUpgradesManager().getEntityLimitsPermissionLevel(this.entity, upgradeLevel, island.getWorld());

// If default permission, then true
if (permissionLevel == 0)
return true;

Player player = user.getPlayer();
String gamemode = island.getGameMode();
String permissionStart = gamemode + ".upgrades." + this.getName() + ".";

// For each permission of the player
for (PermissionAttachmentInfo perms : player.getEffectivePermissions()) {

// If permission is the one we search
if (!perms.getValue() || !perms.getPermission().startsWith(permissionStart))
continue;

if (perms.getPermission().contains(permissionStart + "*")) {
this.logError(player.getName(), perms.getPermission(), "Wildcards are not allowed.");
return false;
}

String[] split = perms.getPermission().split("\\.");
if (split.length != 4) {
logError(player.getName(), perms.getPermission(), "format must be '" + permissionStart + "LEVEL'");
return false;
}

if (!NumberUtils.isDigits(split[3])) {
logError(player.getName(), perms.getPermission(), "The last part must be a number");
return false;
}

if (permissionLevel <= Integer.parseInt(split[3]))
return true;
}

return false;
}

private void logError(String name, String perm, String error) {
this.getUpgradesAddon().logError("Player " + name + " has permission: '" + perm + "' but " + error + " Ignoring...");
}

@Override
public boolean doUpgrade(User user, Island island) {
UpgradesAddon islandAddon = this.getUpgradesAddon();
Expand Down
56 changes: 56 additions & 0 deletions src/main/java/world/bentobox/upgrades/upgrades/RangeUpgrade.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@

import java.util.Map;

import org.apache.commons.lang.math.NumberUtils;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionAttachmentInfo;

import world.bentobox.bentobox.api.events.island.IslandEvent;
import world.bentobox.bentobox.api.user.User;
Expand Down Expand Up @@ -79,6 +82,59 @@ public void updateUpgradeValue(User user, Island island) {
this.setDisplayName(newDisplayName);
}

@Override
public boolean isShowed(User user, Island island) {
// Get the addon
UpgradesAddon upgradesAddon = this.getUpgradesAddon();
// Get the data from upgrades
UpgradesData islandData = upgradesAddon.getUpgradesLevels(island.getUniqueId());
// Get level of the upgrade
int upgradeLevel = islandData.getUpgradeLevel(this.getName());
// Permission level required
int permissionLevel = upgradesAddon.getUpgradesManager().getRangePermissionLevel(upgradeLevel, island.getWorld());

// If default permission, then true
if (permissionLevel == 0)
return true;

Player player = user.getPlayer();
String gamemode = island.getGameMode();
String permissionStart = gamemode + ".upgrades." + this.getName() + ".";

// For each permission of the player
for (PermissionAttachmentInfo perms : player.getEffectivePermissions()) {

// If permission is the one we search
if (!perms.getValue() || !perms.getPermission().startsWith(permissionStart))
continue;

if (perms.getPermission().contains(permissionStart + "*")) {
this.logError(player.getName(), perms.getPermission(), "Wildcards are not allowed.");
return false;
}

String[] split = perms.getPermission().split("\\.");
if (split.length != 4) {
logError(player.getName(), perms.getPermission(), "format must be '" + permissionStart + "LEVEL'");
return false;
}

if (!NumberUtils.isDigits(split[3])) {
logError(player.getName(), perms.getPermission(), "The last part must be a number");
return false;
}

if (permissionLevel <= Integer.parseInt(split[3]))
return true;
}

return false;
}

private void logError(String name, String perm, String error) {
this.getUpgradesAddon().logError("Player " + name + " has permission: '" + perm + "' but " + error + " Ignoring...");
}

/**
* When user do upgrade
*/
Expand Down

0 comments on commit 3b62f28

Please sign in to comment.