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:
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user