9
0
mirror of https://gitlab.com/SamB440/rpgregions-2.git synced 2026-01-04 15:31:38 +00:00

Implements #16

This commit is contained in:
Sam
2020-06-15 15:09:56 +01:00
parent 5d84675b31
commit 7cf712c839
4 changed files with 113 additions and 14 deletions

View File

@@ -0,0 +1,47 @@
package net.islandearth.rpgregions.requirements;
import com.google.common.collect.ImmutableList;
import org.bukkit.entity.Player;
import java.util.Arrays;
import java.util.List;
public class DependencyRequirement extends RegionRequirement {
private final List<String> requiredRegions;
public DependencyRequirement(List<String> requiredRegions) {
this.requiredRegions = requiredRegions;
}
/**
* Returns an immutable list of required regions by their ID.
* @return immutable list of required regions
*/
public ImmutableList<String> getRequiredRegions() {
return ImmutableList.copyOf(requiredRegions);
}
public boolean meetsRequirements(Player player, List<String> discoveries) {
for (String discovery : discoveries) {
if (!requiredRegions.contains(discovery)) return false;
}
return true;
}
@Override
@Deprecated
public boolean meetsRequirements(Player player) {
return meetsRequirements(player, Arrays.asList());
}
@Override
public String getName() {
return "Dependency";
}
@Override
public String getText(Player player) {
return "regions " + String.join(", ", requiredRegions);
}
}

View File

@@ -1,13 +1,12 @@
package net.islandearth.rpgregions.api.integrations.griefprevention;
import com.bekvon.bukkit.residence.Residence;
import com.bekvon.bukkit.residence.protection.ClaimedResidence;
import me.ryanhamshire.GriefPrevention.Claim;
import me.ryanhamshire.GriefPrevention.GriefPrevention;
import net.islandearth.rpgregions.RPGRegions;
import net.islandearth.rpgregions.api.events.RegionsEnterEvent;
import net.islandearth.rpgregions.api.integrations.IntegrationManager;
import net.islandearth.rpgregions.managers.data.region.ConfiguredRegion;
import net.islandearth.rpgregions.requirements.DependencyRequirement;
import net.islandearth.rpgregions.requirements.RegionRequirement;
import net.islandearth.rpgregions.translation.Translations;
import org.bukkit.Bukkit;
@@ -44,10 +43,27 @@ public class GriefPreventionIntegration implements IntegrationManager {
ConfiguredRegion configuredRegion = plugin.getManagers().getRegionsCache().getConfiguredRegion("" + claim.getID());
if (configuredRegion != null && configuredRegion.getRequirements() != null) {
for (RegionRequirement requirement : configuredRegion.getRequirements()) {
if (!player.hasPermission("rpgregions.bypassentry") && !requirement.meetsRequirements(player)) {
requirement.getPreventType().prevent(pme);
Translations.CANNOT_ENTER.send(player, requirement.getText(player));
return;
if (requirement instanceof DependencyRequirement) {
DependencyRequirement dependencyRequirement = (DependencyRequirement) requirement;
List<String> discoveries = new ArrayList<>();
RPGRegions.getAPI().getManagers().getStorageManager().getAccount(player.getUniqueId()).whenComplete((account, error) -> {
discoveries.addAll(account.getDiscoveredRegions().keySet());
}).exceptionally(error -> {
error.printStackTrace();
return null;
});
if (!player.hasPermission("rpgregions.bypassentry") && !dependencyRequirement.meetsRequirements(player, discoveries)) {
requirement.getPreventType().prevent(pme);
Translations.CANNOT_ENTER.send(player, requirement.getText(player));
return;
}
} else {
if (!player.hasPermission("rpgregions.bypassentry") && !requirement.meetsRequirements(player)) {
requirement.getPreventType().prevent(pme);
Translations.CANNOT_ENTER.send(player, requirement.getText(player));
return;
}
}
}
}

View File

@@ -6,6 +6,7 @@ import net.islandearth.rpgregions.RPGRegions;
import net.islandearth.rpgregions.api.events.RegionsEnterEvent;
import net.islandearth.rpgregions.api.integrations.IntegrationManager;
import net.islandearth.rpgregions.managers.data.region.ConfiguredRegion;
import net.islandearth.rpgregions.requirements.DependencyRequirement;
import net.islandearth.rpgregions.requirements.RegionRequirement;
import net.islandearth.rpgregions.translation.Translations;
import org.bukkit.Bukkit;
@@ -42,10 +43,27 @@ public class ResidenceIntegration implements IntegrationManager {
ConfiguredRegion configuredRegion = plugin.getManagers().getRegionsCache().getConfiguredRegion(residence.getName());
if (configuredRegion != null && configuredRegion.getRequirements() != null) {
for (RegionRequirement requirement : configuredRegion.getRequirements()) {
if (!player.hasPermission("rpgregions.bypassentry") && !requirement.meetsRequirements(player)) {
requirement.getPreventType().prevent(pme);
Translations.CANNOT_ENTER.send(player, requirement.getText(player));
return;
if (requirement instanceof DependencyRequirement) {
DependencyRequirement dependencyRequirement = (DependencyRequirement) requirement;
List<String> discoveries = new ArrayList<>();
RPGRegions.getAPI().getManagers().getStorageManager().getAccount(player.getUniqueId()).whenComplete((account, error) -> {
discoveries.addAll(account.getDiscoveredRegions().keySet());
}).exceptionally(error -> {
error.printStackTrace();
return null;
});
if (!player.hasPermission("rpgregions.bypassentry") && !dependencyRequirement.meetsRequirements(player, discoveries)) {
requirement.getPreventType().prevent(pme);
Translations.CANNOT_ENTER.send(player, requirement.getText(player));
return;
}
} else {
if (!player.hasPermission("rpgregions.bypassentry") && !requirement.meetsRequirements(player)) {
requirement.getPreventType().prevent(pme);
Translations.CANNOT_ENTER.send(player, requirement.getText(player));
return;
}
}
}
}

View File

@@ -8,6 +8,7 @@ import net.islandearth.rpgregions.RPGRegions;
import net.islandearth.rpgregions.api.events.RegionsEnterEvent;
import net.islandearth.rpgregions.api.integrations.IntegrationManager;
import net.islandearth.rpgregions.managers.data.region.ConfiguredRegion;
import net.islandearth.rpgregions.requirements.DependencyRequirement;
import net.islandearth.rpgregions.requirements.RegionRequirement;
import net.islandearth.rpgregions.translation.Translations;
import org.bukkit.Bukkit;
@@ -50,10 +51,27 @@ public class WorldGuardIntegration implements IntegrationManager {
ConfiguredRegion configuredRegion = plugin.getManagers().getRegionsCache().getConfiguredRegion(region.getId());
if (configuredRegion != null && configuredRegion.getRequirements() != null) {
for (RegionRequirement requirement : configuredRegion.getRequirements()) {
if (!player.hasPermission("rpgregions.bypassentry") && !requirement.meetsRequirements(player)) {
requirement.getPreventType().prevent(pme);
Translations.CANNOT_ENTER.send(player, requirement.getText(player));
return;
if (requirement instanceof DependencyRequirement) {
DependencyRequirement dependencyRequirement = (DependencyRequirement) requirement;
List<String> discoveries = new ArrayList<>();
RPGRegions.getAPI().getManagers().getStorageManager().getAccount(player.getUniqueId()).whenComplete((account, error) -> {
discoveries.addAll(account.getDiscoveredRegions().keySet());
}).exceptionally(error -> {
error.printStackTrace();
return null;
});
if (!player.hasPermission("rpgregions.bypassentry") && !dependencyRequirement.meetsRequirements(player, discoveries)) {
requirement.getPreventType().prevent(pme);
Translations.CANNOT_ENTER.send(player, requirement.getText(player));
return;
}
} else {
if (!player.hasPermission("rpgregions.bypassentry") && !requirement.meetsRequirements(player)) {
requirement.getPreventType().prevent(pme);
Translations.CANNOT_ENTER.send(player, requirement.getText(player));
return;
}
}
}
}