Island whitelist

This commit is contained in:
Fabrizio La Rosa 2020-07-04 10:48:23 +02:00
parent 642c64981a
commit 35b98f5c3b
7 changed files with 53 additions and 15 deletions

View File

@ -62,14 +62,18 @@ public class TeleportCommand extends SubCommand {
if (visitManager.hasIsland(islandOwnerUUID)) {
Visit visit = visitManager.getIsland(islandOwnerUUID);
boolean isCoopPlayer = false;
boolean isWhitelistedPlayer = false;
if (islandManager.containsIsland(islandOwnerUUID)) {
if (islandManager.getIsland(Bukkit.getServer().getOfflinePlayer(islandOwnerUUID)).isCoopPlayer(player.getUniqueId())) {
isCoopPlayer = true;
}
if (islandManager.getIsland(Bukkit.getServer().getOfflinePlayer(islandOwnerUUID)).isPlayerWhitelisted(player.getUniqueId())) {
isWhitelistedPlayer = true;
}
}
if (isCoopPlayer || player.hasPermission("fabledskyblock.bypass") || player.hasPermission("fabledskyblock.bypass.*") || player.hasPermission("fabledskyblock.*") || visit.isOpen()) {
if (isCoopPlayer || isWhitelistedPlayer || player.hasPermission("fabledskyblock.bypass") || player.hasPermission("fabledskyblock.bypass.*") || player.hasPermission("fabledskyblock.*") || visit.isOpen()) {
if (!islandManager.containsIsland(islandOwnerUUID)) {
islandManager.loadIsland(Bukkit.getServer().getOfflinePlayer(islandOwnerUUID));
}

View File

@ -30,9 +30,6 @@ public class VisitorsCommand extends SubCommand {
if (island == null) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Visitors.Owner.Message"));
soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);
} else if (!island.isOpen()) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Visitors.Closed.Message"));
soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);
} else if (islandManager.getVisitorsAtIsland(island).size() == 0) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Visitors.Visitors.Message"));
soundManager.playSound(player, CompatibleSound.BLOCK_ANVIL_LAND.getSound(), 1.0F, 1.0F);

View File

@ -10,7 +10,6 @@ import com.songoda.skyblock.config.FileManager;
import com.songoda.skyblock.config.FileManager.Config;
import com.songoda.skyblock.message.MessageManager;
import com.songoda.skyblock.permission.BasicPermission;
import com.songoda.skyblock.permission.PermissionManager;
import com.songoda.skyblock.playerdata.PlayerData;
import com.songoda.skyblock.sound.SoundManager;
import com.songoda.skyblock.upgrade.Upgrade;
@ -26,7 +25,6 @@ import org.bukkit.WeatherType;
import org.bukkit.block.Biome;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import java.io.File;
import java.io.IOException;
@ -39,9 +37,10 @@ public class Island {
private final SkyBlock skyblock;
private final com.songoda.skyblock.api.island.Island apiWrapper;
private Map<IslandRole, List<IslandPermission>> islandPermissions = new HashMap<>();
private List<IslandLocation> islandLocations = new ArrayList<>();
private Map<UUID, IslandCoop> coopPlayers = new HashMap<>();
private final Map<IslandRole, List<IslandPermission>> islandPermissions = new HashMap<>();
private final List<IslandLocation> islandLocations = new ArrayList<>();
private final Map<UUID, IslandCoop> coopPlayers = new HashMap<>();
private final Set<UUID> whitelistedPlayers = new HashSet<>();
private UUID islandUUID;
private UUID ownerUUID;
@ -188,6 +187,12 @@ public class Island {
islandPermissions.put(roleList, permissions);
}
if (configLoad.getString("Whitelist") != null) {
for (String whitelistedUUID : configLoad.getStringList("Whitelist")) {
whitelistedPlayers.add(UUID.fromString(whitelistedUUID));
}
}
} else {
FileConfiguration configLoad = config.getFileConfiguration();
@ -841,6 +846,8 @@ public class Island {
Config config = fileManager
.getConfig(new File(skyblock.getDataFolder().toString() + "/island-data", ownerUUID.toString() + ".yml"));
config.getFileConfiguration().set("Whitelist", whitelistedPlayers);
try {
config.getFileConfiguration().save(config.getFile());
@ -926,5 +933,31 @@ public class Island {
public com.songoda.skyblock.api.island.Island getAPIWrapper() {
return apiWrapper;
}
public void addWhitelistedPlayer(UUID uuid) {
this.whitelistedPlayers.add(uuid);
Bukkit.getScheduler().runTaskAsynchronously(skyblock, this::save);
}
public boolean isPlayerWhitelisted(UUID uuid) {
return this.whitelistedPlayers.contains(uuid);
}
public void removeWhitelistedPlayer(UUID uuid) {
this.whitelistedPlayers.remove(uuid);
Bukkit.getScheduler().runTaskAsynchronously(skyblock, this::save);
}
public void addWhitelistedPlayer(Player player) {
this.addWhitelistedPlayer(player.getUniqueId());
}
public boolean isPlayerWhitelisted(Player player) {
return this.isPlayerWhitelisted(player.getUniqueId());
}
public void removeWhitelistedPlayer(Player player) {
this.removeWhitelistedPlayer(player.getUniqueId());
}
}

View File

@ -1189,9 +1189,9 @@ public class IslandManager {
islandOwnerPlayerName = islandOwnerPlayer.getName();
}
for (UUID visitorList : getVisitorsAtIsland(island)) {
if (!island.isCoopPlayer(visitorList)) {
Player targetPlayer = Bukkit.getServer().getPlayer(visitorList);
for (UUID visitor : getVisitorsAtIsland(island)) {
if (!island.isCoopPlayer(visitor) && !island.isPlayerWhitelisted(visitor)) {
Player targetPlayer = Bukkit.getServer().getPlayer(visitor);
LocationUtil.teleportPlayerToSpawn(targetPlayer);
messageManager.sendMessage(targetPlayer, configLoad.getString("Island.Visit.Closed.Island.Message").replace("%player", islandOwnerPlayerName));
}

View File

@ -179,7 +179,7 @@ public class Move implements Listener {
return;
}
if(loadedIsland.isOpen()){
if(loadedIsland.isOpen() || loadedIsland.isPlayerWhitelisted(player)){
loadedIsland.getVisit().addVisitor(player.getUniqueId());
return;
}

View File

@ -98,7 +98,7 @@ public class Teleport implements Listener {
if (island != null) {
if (!island.getOwnerUUID().equals(playerData.getOwner())) {
if (!player.hasPermission("fabledskyblock.bypass") && !player.hasPermission("fabledskyblock.bypass.*") && !player.hasPermission("fabledskyblock.*")) {
if (!island.isOpen() && !island.isCoopPlayer(player.getUniqueId())) {
if (!island.isOpen() && !island.isCoopPlayer(player.getUniqueId()) && !island.isPlayerWhitelisted(player)) {
event.setCancelled(true);
messageManager.sendMessage(player, configLoad.getString("Island.Visit.Closed.Plugin.Message"));

View File

@ -145,6 +145,7 @@ public class Visit {
if (visitManager.hasIsland(targetPlayerUUID)) {
com.songoda.skyblock.visit.Visit visit = visitManager.getIsland(targetPlayerUUID);
boolean isCoopPlayer = false;
boolean isWhitelistedPlayer = false;
org.bukkit.OfflinePlayer offlinePlayer = Bukkit.getServer()
.getOfflinePlayer(targetPlayerUUID);
@ -152,9 +153,12 @@ public class Visit {
if (islandManager.getIsland(offlinePlayer).isCoopPlayer(player.getUniqueId())) {
isCoopPlayer = true;
}
if (islandManager.getIsland(offlinePlayer).isPlayerWhitelisted(player.getUniqueId())) {
isWhitelistedPlayer = true;
}
}
if (isCoopPlayer || player.hasPermission("fabledskyblock.bypass")
if (isCoopPlayer || isWhitelistedPlayer || player.hasPermission("fabledskyblock.bypass")
|| player.hasPermission("fabledskyblock.bypass.*")
|| player.hasPermission("fabledskyblock.*") || visit.isOpen()) {
if (!islandManager.containsIsland(targetPlayerUUID)) {