9
0
mirror of https://gitlab.com/SamB440/rpgregions-2.git synced 2025-12-27 10:49:08 +00:00

Add /rpgregions discover command

This commit is contained in:
SamB440
2020-10-18 21:13:57 +01:00
parent 6b243eb607
commit e2f0eeb8b9
7 changed files with 37 additions and 15 deletions

View File

@@ -23,17 +23,14 @@ public class DependencyRequirement extends RegionRequirement {
return ImmutableList.copyOf(requiredRegions);
}
public boolean meetsRequirements(Player player, List<String> discoveries) {
for (String discovery : discoveries) {
if (!requiredRegions.contains(discovery)) return false;
}
return true;
public boolean meetsRequirements(List<String> discoveries) {
return discoveries.containsAll(requiredRegions);
}
@Override
@Deprecated
public boolean meetsRequirements(Player player) {
return meetsRequirements(player, Collections.emptyList());
return meetsRequirements(Collections.emptyList());
}
@Override

View File

@@ -55,7 +55,7 @@ public class GriefPreventionIntegration implements IntegrationManager {
return null;
});
if (!player.hasPermission("rpgregions.bypassentry") && !dependencyRequirement.meetsRequirements(player, discoveries)) {
if (!player.hasPermission("rpgregions.bypassentry") && !dependencyRequirement.meetsRequirements(discoveries)) {
requirement.getPreventType().prevent(pme);
Translations.CANNOT_ENTER.send(player, requirement.getText(player));
return;

View File

@@ -54,7 +54,7 @@ public class ResidenceIntegration implements IntegrationManager {
return null;
});
if (!player.hasPermission("rpgregions.bypassentry") && !dependencyRequirement.meetsRequirements(player, discoveries)) {
if (!player.hasPermission("rpgregions.bypassentry") && !dependencyRequirement.meetsRequirements(discoveries)) {
requirement.getPreventType().prevent(pme);
Translations.CANNOT_ENTER.send(player, requirement.getText(player));
return;

View File

@@ -65,7 +65,7 @@ public class UltraRegionsIntegration implements IntegrationManager {
return null;
});
if (!player.hasPermission("rpgregions.bypassentry") && !dependencyRequirement.meetsRequirements(player, discoveries)) {
if (!player.hasPermission("rpgregions.bypassentry") && !dependencyRequirement.meetsRequirements(discoveries)) {
requirement.getPreventType().prevent(pme);
Translations.CANNOT_ENTER.send(player, requirement.getText(player));
return;

View File

@@ -61,7 +61,7 @@ public class WorldGuardIntegration implements IntegrationManager {
return null;
});
if (!player.hasPermission("rpgregions.bypassentry") && !dependencyRequirement.meetsRequirements(player, discoveries)) {
if (!player.hasPermission("rpgregions.bypassentry") && !dependencyRequirement.meetsRequirements(discoveries)) {
requirement.getPreventType().prevent(pme);
Translations.CANNOT_ENTER.send(player, requirement.getText(player));
return;

View File

@@ -13,6 +13,7 @@ import net.islandearth.rpgregions.api.integrations.IntegrationType;
import net.islandearth.rpgregions.gui.DiscoveryGUI;
import net.islandearth.rpgregions.gui.EditorGUI;
import net.islandearth.rpgregions.managers.data.region.ConfiguredRegion;
import net.islandearth.rpgregions.managers.data.region.WorldDiscovery;
import net.islandearth.rpgregions.regenerate.Regenerate;
import net.islandearth.rpgregions.rewards.ItemReward;
import net.islandearth.rpgregions.utils.RegenUtils;
@@ -28,6 +29,8 @@ import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
@@ -310,4 +313,19 @@ public class RPGRegionsCommand extends BaseCommand {
}
}
}
@Subcommand("discover")
@CommandPermission("rpgregions.discover")
@CommandCompletion("@regions @players")
public void onDiscover(Player player, ConfiguredRegion configuredRegion, Player target) {
plugin.getManagers().getStorageManager().getAccount(target.getUniqueId()).thenAccept(account -> {
LocalDateTime date = LocalDateTime.now();
DateTimeFormatter format = DateTimeFormatter.ofPattern(plugin.getConfig().getString("settings.server.discoveries.date.format"));
String formattedDate = date.format(format);
account.addDiscovery(new WorldDiscovery(formattedDate, configuredRegion.getId()));
target.sendMessage(ChatColor.GREEN + "An administrator added a discovery to your account.");
player.sendMessage(ChatColor.GREEN + "The player " + target.getName() + " has had the discovery added.");
});
}
}

View File

@@ -12,6 +12,7 @@ import net.islandearth.rpgregions.RPGRegions;
import net.islandearth.rpgregions.command.IconCommand;
import net.islandearth.rpgregions.managers.data.account.RPGRegionsAccount;
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 net.islandearth.rpgregions.utils.ItemStackBuilder;
@@ -217,15 +218,21 @@ public class DiscoveryGUI extends RPGRegionsGUI {
&& hasDiscovered
? Translations.TELEPORT.get(player)
: null;
StringBuilder stringBuilder = new StringBuilder();
List<String> requirementStrings = new ArrayList<>();
boolean requirements = true;
if (!player.hasPermission("rpgregions.bypassentry") && configuredRegion.getRequirements() != null) {
for (RegionRequirement requirement : configuredRegion.getRequirements()) {
if (!requirement.meetsRequirements(player)) {
boolean meets = requirement.meetsRequirements(player);
if (requirement instanceof DependencyRequirement) {
DependencyRequirement dependencyRequirement = (DependencyRequirement) requirement;
List<String> discoveries = new ArrayList<>(account.getDiscoveredRegions().keySet());
meets = dependencyRequirement.meetsRequirements(discoveries);
}
if (!meets) {
requirements = false;
stringBuilder.append(ChatColor.RED + "\u2718 " + requirement.getText(player));
requirementStrings.add(ChatColor.RED + "\u2718 " + requirement.getText(player));
} else {
stringBuilder.append(ChatColor.GREEN + "\u2714 " + requirement.getText(player));
requirementStrings.add(ChatColor.GREEN + "\u2714 " + requirement.getText(player));
}
}
}
@@ -250,7 +257,7 @@ public class DiscoveryGUI extends RPGRegionsGUI {
.withLore(lore2)
.withLore(hint)
.withLore(" ")
.withLore(stringBuilder.toString())
.withLore(requirementStrings)
.withLore(teleport)
.addFlags(ItemFlag.HIDE_ATTRIBUTES)
.build(),