# Added a Coop System (Allow players to access your island even if it's closed as long as an operator or owner is online).
# Added the command '/island coop [<player>]' to open the 'Island Coop' menu or add/remove a coop player.
# Added the option to the configuration file to remove islands the player has been banned from when they open the 'Island Visit' menu.
# Added the setting 'CoopPlayers' to the 'Operator Settings' menu.
# Fixed players not being teleported from an island when the island is closed or the player has been banned from the island when they join the server at the island.
# Fixed players with bypass permission not being able to visit an Island from the 'Island Visit' menu if the island was closed after the player opened the menu.
# Fixed island time not being synchronized when a player joins the server at a loaded island.
# Fixed the 'Vote' leaderboard not showing the correct top 10 players.
# Fixed Placeholders for PlaceholderAPI returning an empty string.
# Fixed a memory leak issue when unloading islands.
# Fixed falling blocks not falling at an Island.
# Replaced statistics item in the 'Island Bans' menu with information item.
This commit is contained in:
Unknown 2018-12-04 00:38:44 +00:00
parent dd50421e2b
commit d1a1988998
38 changed files with 957 additions and 265 deletions

View File

@ -2,7 +2,7 @@
<groupId>com.songoda</groupId>
<artifactId>SkyBlock</artifactId>
<modelVersion>4.0.0</modelVersion>
<version>36</version>
<version>37</version>
<build>
<defaultGoal>clean package</defaultGoal>
<plugins>

View File

@ -79,7 +79,7 @@ public class BanManager {
Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml"));
FileConfiguration configLoad = config.getFileConfiguration();
for (UUID visitorList : island.getVisitors()) {
for (UUID visitorList : skyblock.getIslandManager().getVisitorsAtIsland(island)) {
Player targetPlayer = Bukkit.getServer().getPlayer(visitorList);
LocationUtil.teleportPlayerToSpawn(targetPlayer);

View File

@ -26,6 +26,7 @@ import me.goodandevil.skyblock.command.commands.ChatCommand;
import me.goodandevil.skyblock.command.commands.CloseCommand;
import me.goodandevil.skyblock.command.commands.ConfirmCommand;
import me.goodandevil.skyblock.command.commands.ControlPanelCommand;
import me.goodandevil.skyblock.command.commands.CoopCommand;
import me.goodandevil.skyblock.command.commands.CreateCommand;
import me.goodandevil.skyblock.command.commands.CurrentCommand;
import me.goodandevil.skyblock.command.commands.DeleteCommand;
@ -115,6 +116,7 @@ public class CommandManager implements CommandExecutor, TabCompleter {
subCommands.add(new LevelCommand(skyblock).setInfo(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Command.Island.Level.Info.Message"))));
subCommands.add(new SettingsCommand(skyblock).setInfo(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Command.Island.Settings.Info.Message"))));
subCommands.add(new InformationCommand(skyblock).setInfo(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Command.Island.Information.Info.Message"))));
subCommands.add(new CoopCommand(skyblock).setInfo(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Command.Island.Coop.Info.Message"))));
subCommands.add(new MembersCommand(skyblock).setInfo(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Command.Island.Members.Info.Message"))));
subCommands.add(new OwnerCommand(skyblock).setInfo(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Command.Island.Ownership.Info.Message"))));
subCommands.add(new ConfirmCommand(skyblock).setInfo(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Command.Island.Confirmation.Info.Message"))));

View File

@ -85,7 +85,7 @@ public class AcceptCommand extends SubCommand {
if (islandJoinEvent.isCancelled()) {
if (unloadIsland) {
islandManager.unloadIsland(invite.getOwnerUUID());
islandManager.unloadIsland(island, null);
}
} else {
Player targetPlayer = Bukkit.getServer().getPlayer(invite.getSenderUUID());
@ -142,7 +142,7 @@ public class AcceptCommand extends SubCommand {
scoreboard.cancel();
scoreboard.setDisplayName(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Scoreboard.Island.Team.Displayname")));
if (island.getVisitors().size() == 0) {
if (islandManager.getVisitorsAtIsland(island).size() == 0) {
scoreboard.setDisplayList(configLoad.getStringList("Scoreboard.Island.Team.Empty.Displaylines"));
} else {
scoreboard.setDisplayList(configLoad.getStringList("Scoreboard.Island.Team.Occupied.Displaylines"));
@ -167,7 +167,7 @@ public class AcceptCommand extends SubCommand {
scoreboard.cancel();
scoreboard.setDisplayName(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Scoreboard.Island.Team.Displayname")));
if (island.getVisitors().size() == 0) {
if (islandManager.getVisitorsAtIsland(island).size() == 0) {
scoreboard.setDisplayList(configLoad.getStringList("Scoreboard.Island.Team.Empty.Displaylines"));
} else {
scoreboard.setDisplayList(configLoad.getStringList("Scoreboard.Island.Team.Occupied.Displaylines"));

View File

@ -16,7 +16,6 @@ import me.goodandevil.skyblock.island.Role;
import me.goodandevil.skyblock.island.Setting;
import me.goodandevil.skyblock.message.MessageManager;
import me.goodandevil.skyblock.playerdata.PlayerData;
import me.goodandevil.skyblock.playerdata.PlayerDataManager;
import me.goodandevil.skyblock.sound.SoundManager;
import me.goodandevil.skyblock.utils.OfflinePlayer;
import me.goodandevil.skyblock.utils.version.Sounds;
@ -37,28 +36,27 @@ public class BanCommand extends SubCommand {
@Override
public void onCommand(Player player, String[] args) {
PlayerDataManager playerDataManager = skyblock.getPlayerDataManager();
MessageManager messageManager = skyblock.getMessageManager();
IslandManager islandManager = skyblock.getIslandManager();
SoundManager soundManager = skyblock.getSoundManager();
FileManager fileManager = skyblock.getFileManager();
PlayerData playerData = playerDataManager.getPlayerData(player);
Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml"));
FileConfiguration configLoad = config.getFileConfiguration();
PlayerData playerData = skyblock.getPlayerDataManager().getPlayerData(player);
if (args.length == 1) {
if (islandManager.hasIsland(player)) {
if (fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Visitor.Banning")) {
me.goodandevil.skyblock.island.Island island = islandManager.getIsland(playerData.getOwner());
if (island.isRole(Role.Owner, player.getUniqueId()) || (island.isRole(Role.Operator, player.getUniqueId()) && island.getSetting(Setting.Role.Operator, "Ban").getStatus())) {
Player targetPlayer = Bukkit.getServer().getPlayer(args[0]);
UUID targetPlayerUUID = null;
String targetPlayerName = null;
Player targetPlayer = Bukkit.getServer().getPlayer(args[0]);
if (targetPlayer == null) {
OfflinePlayer targetPlayerOffline = new OfflinePlayer(args[0]);
targetPlayerUUID = targetPlayerOffline.getUniqueId();
@ -84,6 +82,10 @@ public class BanCommand extends SubCommand {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Ban.Banned.Sender.Message").replace("%player", targetPlayerName));
soundManager.playSound(player, Sounds.IRONGOLEM_HIT.bukkitSound(), 1.0F, 1.0F);
if (island.isCoopPlayer(targetPlayerUUID)) {
island.removeCoopPlayer(targetPlayerUUID);
}
Ban ban = island.getBan();
ban.addBan(targetPlayerUUID);
ban.save();

View File

@ -0,0 +1,146 @@
package me.goodandevil.skyblock.command.commands;
import java.io.File;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import me.goodandevil.skyblock.SkyBlock;
import me.goodandevil.skyblock.command.CommandManager;
import me.goodandevil.skyblock.command.SubCommand;
import me.goodandevil.skyblock.command.CommandManager.Type;
import me.goodandevil.skyblock.config.FileManager.Config;
import me.goodandevil.skyblock.island.IslandManager;
import me.goodandevil.skyblock.island.Role;
import me.goodandevil.skyblock.island.Setting;
import me.goodandevil.skyblock.menus.Coop;
import me.goodandevil.skyblock.message.MessageManager;
import me.goodandevil.skyblock.playerdata.PlayerData;
import me.goodandevil.skyblock.sound.SoundManager;
import me.goodandevil.skyblock.utils.OfflinePlayer;
import me.goodandevil.skyblock.utils.version.Sounds;
import me.goodandevil.skyblock.utils.world.LocationUtil;
public class CoopCommand extends SubCommand {
private final SkyBlock skyblock;
private String info;
public CoopCommand(SkyBlock skyblock) {
this.skyblock = skyblock;
}
@Override
public void onCommand(Player player, String[] args) {
MessageManager messageManager = skyblock.getMessageManager();
IslandManager islandManager = skyblock.getIslandManager();
SoundManager soundManager = skyblock.getSoundManager();
Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "language.yml"));
FileConfiguration configLoad = config.getFileConfiguration();
PlayerData playerData = skyblock.getPlayerDataManager().getPlayerData(player);
if (islandManager.hasIsland(player)) {
me.goodandevil.skyblock.island.Island island = islandManager.getIsland(playerData.getOwner());
if (island.isRole(Role.Owner, player.getUniqueId()) || (island.isRole(Role.Operator, player.getUniqueId()) && island.getSetting(Setting.Role.Operator, "CoopPlayers").getStatus())) {
if (args.length == 1) {
Player targetPlayer = Bukkit.getServer().getPlayer(args[0]);
UUID targetPlayerUUID = null;
String targetPlayerName = null;
if (targetPlayer == null) {
OfflinePlayer offlinePlayer = new OfflinePlayer(args[0]);
targetPlayerUUID = offlinePlayer.getUniqueId();
targetPlayerName = offlinePlayer.getName();
} else {
targetPlayerUUID = targetPlayer.getUniqueId();
targetPlayerName = targetPlayer.getName();
}
if (targetPlayerUUID == null) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Coop.Found.Message"));
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
} else if (targetPlayerUUID.equals(player.getUniqueId())) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Coop.Yourself.Message"));
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
} else if (island.isRole(Role.Member, targetPlayerUUID) || island.isRole(Role.Operator, targetPlayerUUID) || island.isRole(Role.Owner, targetPlayerUUID)) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Coop.Member.Message"));
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
} else if (island.getBan().isBanned(targetPlayerUUID)) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Coop.Banned.Message"));
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
} else if (island.isCoopPlayer(targetPlayerUUID)) {
if (targetPlayer != null) {
if (islandManager.getVisitorsAtIsland(island).contains(targetPlayerUUID)) {
if (!island.isOpen()) {
LocationUtil.teleportPlayerToSpawn(targetPlayer);
messageManager.sendMessage(targetPlayer, configLoad.getString("Command.Island.Coop.Removed.Target.Message"));
soundManager.playSound(targetPlayer, Sounds.IRONGOLEM_HIT.bukkitSound(), 1.0F, 1.0F);
}
}
}
island.removeCoopPlayer(targetPlayerUUID);
messageManager.sendMessage(player, configLoad.getString("Command.Island.Coop.Removed.Sender.Message").replace("%player", targetPlayerName));
soundManager.playSound(player, Sounds.IRONGOLEM_HIT.bukkitSound(), 1.0F, 1.0F);
} else {
island.addCoopPlayer(targetPlayerUUID);
messageManager.sendMessage(player, configLoad.getString("Command.Island.Coop.Added.Message").replace("%player", targetPlayerName));
soundManager.playSound(player, Sounds.NOTE_PLING.bukkitSound(), 1.0F, 1.0F);
}
return;
} else if (args.length != 0) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Coop.Invalid.Message"));
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
return;
}
Coop.getInstance().open(player);
soundManager.playSound(player, Sounds.CHEST_OPEN.bukkitSound(), 1.0F, 1.0F);
} else {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Coop.Permission.Message"));
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
}
} else {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Coop.Owner.Message"));
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
}
}
@Override
public String getName() {
return "coop";
}
@Override
public String getInfo() {
return info;
}
@Override
public SubCommand setInfo(String info) {
this.info = info;
return this;
}
@Override
public String[] getAliases() {
return new String[0];
}
@Override
public Type getType() {
return CommandManager.Type.Default;
}
}

View File

@ -50,7 +50,7 @@ public class KickAllCommand extends SubCommand {
if (island.isRole(Role.Owner, player.getUniqueId()) || (island.isRole(Role.Operator, player.getUniqueId()) && island.getSetting(Setting.Role.Operator, "Kick").getStatus())) {
if (island.isOpen()) {
List<UUID> islandVisitors = island.getVisitors();
List<UUID> islandVisitors = islandManager.getVisitorsAtIsland(island);
if (islandVisitors.size() == 0) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.KickAll.Visitors.Message"));

View File

@ -65,7 +65,7 @@ public class KickCommand extends SubCommand {
Player targetPlayer = Bukkit.getServer().getPlayer(args[0]);
List<UUID> islandMembers = island.getRole(Role.Member), islandOperators = island.getRole(Role.Operator), islandVisitors = island.getVisitors();
List<UUID> islandMembers = island.getRole(Role.Member), islandOperators = island.getRole(Role.Operator), islandVisitors = islandManager.getVisitorsAtIsland(island);
if (targetPlayer == null) {
OfflinePlayer targetPlayerOffline = new OfflinePlayer(args[0]);
@ -86,17 +86,22 @@ public class KickCommand extends SubCommand {
messageManager.sendMessage(player, languageConfig.getFileConfiguration().getString("Command.Island.Kick.Role.Owner.Message"));
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
} else if (isOpen && islandVisitors.contains(targetPlayerUUID) && targetPlayer != null) {
IslandKickEvent islandKickEvent = new IslandKickEvent(island, Role.Visitor, targetPlayerUUID, player);
Bukkit.getServer().getPluginManager().callEvent(islandKickEvent);
if (!islandKickEvent.isCancelled()) {
LocationUtil.teleportPlayerToSpawn(targetPlayer);
if (island.isCoopPlayer(targetPlayerUUID)) {
messageManager.sendMessage(player, languageConfig.getFileConfiguration().getString("Command.Island.Kick.Cooped.Message"));
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
} else {
IslandKickEvent islandKickEvent = new IslandKickEvent(island, Role.Visitor, targetPlayerUUID, player);
Bukkit.getServer().getPluginManager().callEvent(islandKickEvent);
messageManager.sendMessage(player, languageConfig.getFileConfiguration().getString("Command.Island.Kick.Kicked.Sender.Message").replace("%player", targetPlayerName));
soundManager.playSound(player, Sounds.IRONGOLEM_HIT.bukkitSound(), 1.0F, 1.0F);
messageManager.sendMessage(targetPlayer, languageConfig.getFileConfiguration().getString("Command.Island.Kick.Kicked.Target.Message").replace("%player", player.getName()));
soundManager.playSound(targetPlayer, Sounds.IRONGOLEM_HIT.bukkitSound(), 1.0F, 1.0F);
if (!islandKickEvent.isCancelled()) {
LocationUtil.teleportPlayerToSpawn(targetPlayer);
messageManager.sendMessage(player, languageConfig.getFileConfiguration().getString("Command.Island.Kick.Kicked.Sender.Message").replace("%player", targetPlayerName));
soundManager.playSound(player, Sounds.IRONGOLEM_HIT.bukkitSound(), 1.0F, 1.0F);
messageManager.sendMessage(targetPlayer, languageConfig.getFileConfiguration().getString("Command.Island.Kick.Kicked.Target.Message").replace("%player", player.getName()));
soundManager.playSound(targetPlayer, Sounds.IRONGOLEM_HIT.bukkitSound(), 1.0F, 1.0F);
}
}
} else if (islandMembers.contains(targetPlayerUUID) || islandOperators.contains(targetPlayerUUID)) {
Role islandRole = Role.Member;
@ -183,7 +188,7 @@ public class KickCommand extends SubCommand {
scoreboard.cancel();
scoreboard.setDisplayName(ChatColor.translateAlternateColorCodes('&', languageConfig.getFileConfiguration().getString("Scoreboard.Island.Solo.Displayname")));
if (island.getVisitors().size() == 0) {
if (islandManager.getVisitorsAtIsland(island).size() == 0) {
scoreboard.setDisplayList(languageConfig.getFileConfiguration().getStringList("Scoreboard.Island.Solo.Empty.Displaylines"));
} else {
scoreboard.setDisplayList(languageConfig.getFileConfiguration().getStringList("Scoreboard.Island.Solo.Occupied.Displaylines"));

View File

@ -98,7 +98,8 @@ public class LeaveCommand extends SubCommand {
}
}
islandManager.unloadIsland(player.getUniqueId());
// TODO Check if player has been teleported
islandManager.unloadIsland(island, null);
for (Player all : Bukkit.getOnlinePlayers()) {
if (!all.getUniqueId().equals(player.getUniqueId())) {
@ -112,7 +113,7 @@ public class LeaveCommand extends SubCommand {
scoreboard.cancel();
scoreboard.setDisplayName(ChatColor.translateAlternateColorCodes('&', languageConfig.getFileConfiguration().getString("Scoreboard.Island.Solo.Displayname")));
if (island.getVisitors().size() == 0) {
if (islandManager.getVisitorsAtIsland(island).size() == 0) {
scoreboard.setDisplayList(languageConfig.getFileConfiguration().getStringList("Scoreboard.Island.Solo.Empty.Displaylines"));
} else {
scoreboard.setDisplayList(languageConfig.getFileConfiguration().getStringList("Scoreboard.Island.Solo.Occupied.Displaylines"));

View File

@ -64,8 +64,15 @@ public class TeleportCommand extends SubCommand {
} else if (!islandOwnerUUID.equals(playerDataManager.getPlayerData(player).getOwner())) {
if (visitManager.hasIsland(islandOwnerUUID)) {
me.goodandevil.skyblock.visit.Visit visit = visitManager.getIsland(islandOwnerUUID);
boolean isCoopPlayer = false;
if (player.hasPermission("skyblock.bypass") || player.hasPermission("skyblock.bypass.*") || player.hasPermission("skyblock.*") || visit.isOpen()) {
if (islandManager.containsIsland(islandOwnerUUID)) {
if (islandManager.getIsland(islandOwnerUUID).isCoopPlayer(player.getUniqueId())) {
isCoopPlayer = true;
}
}
if (isCoopPlayer || player.hasPermission("skyblock.bypass") || player.hasPermission("skyblock.bypass.*") || player.hasPermission("skyblock.*") || visit.isOpen()) {
if (!islandManager.containsIsland(islandOwnerUUID)) {
islandManager.loadIsland(islandOwnerUUID);
}
@ -74,6 +81,8 @@ public class TeleportCommand extends SubCommand {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Teleport.Teleported.Other.Message").replace("%player", targetPlayerName));
soundManager.playSound(player, Sounds.ENDERMAN_TELEPORT.bukkitSound(), 1.0F, 1.0F);
return;
} else {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Teleport.Island.Closed.Message"));
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);

View File

@ -52,11 +52,11 @@ public class UnbanCommand extends SubCommand {
me.goodandevil.skyblock.island.Island island = islandManager.getIsland(playerData.getOwner());
if (island.isRole(Role.Owner, player.getUniqueId()) || (island.isRole(Role.Operator, player.getUniqueId()) && island.getSetting(Setting.Role.Operator, "Unban").getStatus())) {
Player targetPlayer = Bukkit.getServer().getPlayer(args[0]);
UUID targetPlayerUUID = null;
String targetPlayerName = null;
Player targetPlayer = Bukkit.getServer().getPlayer(args[0]);
if (targetPlayer == null) {
OfflinePlayer targetPlayerOffline = new OfflinePlayer(args[0]);
targetPlayerUUID = targetPlayerOffline.getUniqueId();

View File

@ -42,7 +42,7 @@ public class VisitorsCommand extends SubCommand {
if (!island.isOpen()) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Visitors.Closed.Message"));
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
} else if (island.getVisitors().size() == 0) {
} else if (islandManager.getVisitorsAtIsland(island).size() == 0) {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Visitors.Visitors.Message"));
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
} else {

View File

@ -108,7 +108,7 @@ public class VoteCommand extends SubCommand {
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
}
islandManager.unloadIsland(islandOwnerUUID);
islandManager.unloadIsland(island, null);
}
} else {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Vote.Island.Closed.Message"));

View File

@ -40,8 +40,9 @@ public class Island {
private final SkyBlock skyblock;
private List<Location> islandLocations = new ArrayList<>();
private Map<Setting.Role, List<Setting>> islandSettings = new HashMap<>();
private List<Location> islandLocations = new ArrayList<>();
private List<UUID> coopPlayers = new ArrayList<>();
private UUID ownerUUID;
private Level level;
@ -65,9 +66,12 @@ public class Island {
islandLocations.add(new Location(Location.World.Nether, Location.Environment.Island, islandNetherLocation));
File configFile = new File(skyblock.getDataFolder().toString() + "/island-data");
Config config = fileManager.getConfig(new File(configFile, ownerUUID + ".yml"));
Config config = fileManager.getConfig(new File(configFile, ownerUUID + ".yml"));
Config defaultSettingsConfig = fileManager.getConfig(new File(skyblock.getDataFolder(), "settings.yml"));
Config mainConfig = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml"));
FileConfiguration mainConfigLoad = mainConfig.getFileConfiguration();
if (fileManager.isFileExist(new File(configFile, ownerUUID + ".yml"))) {
FileConfiguration configLoad = config.getFileConfiguration();
@ -94,20 +98,20 @@ public class Island {
}
}
Config islandSettingsConfig = null;
Config settingsDataConfig = null;
if (fileManager.isFileExist(new File(skyblock.getDataFolder().toString() + "/setting-data", getOwnerUUID().toString() + ".yml"))) {
islandSettingsConfig = fileManager.getConfig(new File(skyblock.getDataFolder().toString() + "/setting-data", getOwnerUUID().toString() + ".yml"));
settingsDataConfig = fileManager.getConfig(new File(skyblock.getDataFolder().toString() + "/setting-data", getOwnerUUID().toString() + ".yml"));
}
for (Setting.Role roleList : Setting.Role.values()) {
List<Setting> settings = new ArrayList<>();
for (String settingList : defaultSettingsConfig.getFileConfiguration().getConfigurationSection("Settings." + roleList.name()).getKeys(false)) {
if (islandSettingsConfig == null) {
if (settingsDataConfig == null) {
settings.add(new Setting(settingList, defaultSettingsConfig.getFileConfiguration().getBoolean("Settings." + roleList.name() + "." + settingList)));
} else {
settings.add(new Setting(settingList, islandSettingsConfig.getFileConfiguration().getBoolean("Settings." + roleList.name() + "." + settingList)));
settings.add(new Setting(settingList, settingsDataConfig.getFileConfiguration().getBoolean("Settings." + roleList.name() + "." + settingList)));
}
}
@ -119,9 +123,6 @@ public class Island {
islandLocations.add(new Location(Location.World.Normal, Location.Environment.Visitor, islandNormalLocation.clone().add(0.5D, 0.0D, 0.5D)));
islandLocations.add(new Location(Location.World.Nether, Location.Environment.Visitor, islandNetherLocation.clone().add(0.5D, 0.0D, 0.5D)));
Config mainConfig = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml"));
FileConfiguration mainConfigLoad = mainConfig.getFileConfiguration();
fileManager.setLocation(config, "Location.Normal.Island", islandNormalLocation, true);
fileManager.setLocation(config, "Location.Nether.Island", islandNetherLocation, true);
fileManager.setLocation(config, "Location.Normal.Spawn.Main", islandNormalLocation.clone().add(0.5D, 0.0D, 0.5D), true);
@ -157,7 +158,7 @@ public class Island {
playerData.setMemberSince(new SimpleDateFormat("dd/MM/yyyy HH:mm:ss").format(new Date()));
playerData.save();
if (fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Spawn.Protection")) {
if (mainConfigLoad.getBoolean("Island.Spawn.Protection")) {
Bukkit.getServer().getScheduler().runTask(skyblock, new Runnable() {
@Override
public void run() {
@ -169,6 +170,21 @@ public class Island {
}
}
if (!mainConfigLoad.getBoolean("Island.Coop.Unload")) {
File coopDataFile = new File(skyblock.getDataFolder().toString() + "/coop-data", getOwnerUUID().toString() + ".yml");
if (fileManager.isFileExist(coopDataFile)) {
Config coopDataConfig = fileManager.getConfig(coopDataFile);
FileConfiguration coopDataConfigLoad = coopDataConfig.getFileConfiguration();
if (coopDataConfigLoad.getString("CoopPlayers") != null) {
for (String coopPlayerList : coopDataConfigLoad.getStringList("CoopPlayers")) {
coopPlayers.add(UUID.fromString(coopPlayerList));
}
}
}
}
level = new Level(getOwnerUUID(), skyblock);
VisitManager visitManager = skyblock.getVisitManager();
@ -300,6 +316,22 @@ public class Island {
skyblock.getFileManager().getConfig(new File(new File(skyblock.getDataFolder().toString() + "/island-data"), ownerUUID.toString() + ".yml")).getFileConfiguration().set("Weather.Time", time);
}
public List<UUID> getCoopPlayers() {
return coopPlayers;
}
public void addCoopPlayer(UUID uuid) {
coopPlayers.add(uuid);
}
public void removeCoopPlayer(UUID uuid) {
coopPlayers.remove(uuid);
}
public boolean isCoopPlayer(UUID uuid) {
return coopPlayers.contains(uuid);
}
public List<UUID> getRole(Role role) {
Config config = skyblock.getFileManager().getConfig(new File(new File(skyblock.getDataFolder().toString() + "/island-data"), ownerUUID.toString() + ".yml"));
FileConfiguration configLoad = config.getFileConfiguration();
@ -436,26 +468,6 @@ public class Island {
return skyblock.getFileManager().getConfig(new File(new File(skyblock.getDataFolder().toString() + "/island-data"), ownerUUID.toString() + ".yml")).getFileConfiguration().getBoolean("Visitor.Open");
}
public List<UUID> getVisitors() {
Map<UUID, PlayerData> playerDataStorage = skyblock.getPlayerDataManager().getPlayerData();
List<UUID> islandVisitors = new ArrayList<>();
for (UUID playerDataStorageList : playerDataStorage.keySet()) {
PlayerData playerData = playerDataStorage.get(playerDataStorageList);
UUID islandOwnerUUID = playerData.getIsland();
if (islandOwnerUUID != null && islandOwnerUUID.equals(getOwnerUUID())) {
if (playerData.getOwner() == null || !playerData.getOwner().equals(getOwnerUUID())) {
if (Bukkit.getServer().getPlayer(playerDataStorageList) != null) {
islandVisitors.add(playerDataStorageList);
}
}
}
}
return islandVisitors;
}
public List<String> getMessage(Message message) {
List<String> islandMessage = new ArrayList<>();
@ -529,9 +541,28 @@ public class Island {
}
try {
config.getFileConfiguration().save(config.getFile());
configLoad.save(config.getFile());
} catch (IOException e) {
e.printStackTrace();
}
if (!fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Coop.Unload")) {
config = fileManager.getConfig(new File(skyblock.getDataFolder().toString() + "/coop-data", ownerUUID.toString() + ".yml"));
configLoad = config.getFileConfiguration();
List<String> coopPlayersAsString = new ArrayList<>();
for (UUID coopPlayerList : coopPlayers) {
coopPlayersAsString.add(coopPlayerList.toString());
}
configLoad.set("CoopPlayers", coopPlayersAsString);
try {
configLoad.save(config.getFile());
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

View File

@ -38,6 +38,7 @@ import me.goodandevil.skyblock.playerdata.PlayerData;
import me.goodandevil.skyblock.playerdata.PlayerDataManager;
import me.goodandevil.skyblock.scoreboard.Scoreboard;
import me.goodandevil.skyblock.scoreboard.ScoreboardManager;
import me.goodandevil.skyblock.sound.SoundManager;
import me.goodandevil.skyblock.structure.Structure;
import me.goodandevil.skyblock.upgrade.Upgrade;
import me.goodandevil.skyblock.upgrade.UpgradeManager;
@ -45,6 +46,7 @@ import me.goodandevil.skyblock.utils.OfflinePlayer;
import me.goodandevil.skyblock.utils.structure.StructureUtil;
import me.goodandevil.skyblock.utils.version.Materials;
import me.goodandevil.skyblock.utils.version.NMSUtil;
import me.goodandevil.skyblock.utils.version.Sounds;
import me.goodandevil.skyblock.utils.world.LocationUtil;
import me.goodandevil.skyblock.utils.world.WorldBorder;
import me.goodandevil.skyblock.utils.world.block.BlockDegreesType;
@ -77,8 +79,10 @@ public class IslandManager {
}
public void onDisable() {
for (Player all : Bukkit.getOnlinePlayers()) {
unloadIsland(all.getUniqueId());
for (int i = 0; i < islandStorage.size(); i++) {
UUID islandOwnerUUID = (UUID) islandStorage.keySet().toArray()[i];
Island island = islandStorage.get(islandOwnerUUID);
island.save();
}
}
@ -273,6 +277,16 @@ public class IslandManager {
island.setPassword(null);
}
File oldCoopDataFile = new File(new File(skyblock.getDataFolder().toString() + "/coop-data"), islandOwnerUUID.toString() + ".yml");
if (fileManager.isFileExist(oldCoopDataFile)) {
File newCoopDataFile = new File(new File(skyblock.getDataFolder().toString() + "/coop-data"), uuid.toString() + ".yml");
fileManager.unloadConfig(oldCoopDataFile);
fileManager.unloadConfig(newCoopDataFile);
oldCoopDataFile.renameTo(newCoopDataFile);
}
File oldSettingDataFile = new File(new File(skyblock.getDataFolder().toString() + "/setting-data"), islandOwnerUUID.toString() + ".yml");
File newSettingDataFile = new File(new File(skyblock.getDataFolder().toString() + "/setting-data"), uuid.toString() + ".yml");
@ -367,6 +381,7 @@ public class IslandManager {
}
}
fileManager.deleteConfig(new File(new File(skyblock.getDataFolder().toString() + "/coop-data"), island.getOwnerUUID().toString() + ".yml"));
fileManager.deleteConfig(new File(new File(skyblock.getDataFolder().toString() + "/setting-data"), island.getOwnerUUID().toString() + ".yml"));
fileManager.deleteConfig(new File(new File(skyblock.getDataFolder().toString() + "/island-data"), island.getOwnerUUID().toString() + ".yml"));
@ -415,89 +430,103 @@ public class IslandManager {
}
}
public void unloadIsland(UUID uuid) {
public void unloadIsland(Island island, UUID uuid) {
ScoreboardManager scoreboardManager = skyblock.getScoreboardManager();
FileManager fileManager = skyblock.getFileManager();
if (hasIsland(uuid)) {
UUID islandOwnerUUID = uuid;
if (!isIslandExist(uuid)) {
Config config = fileManager.getConfig(new File(new File(skyblock.getDataFolder().toString() + "/player-data"), uuid.toString() + ".yml"));
FileConfiguration configLoad = config.getFileConfiguration();
if (configLoad.getString("Island.Owner") != null) {
islandOwnerUUID = UUID.fromString(configLoad.getString("Island.Owner"));
}
Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml"));
FileConfiguration configLoad = config.getFileConfiguration();
island.save();
int islandMembers = island.getRole(Role.Member).size() + island.getRole(Role.Operator).size() + 1, islandVisitors = getVisitorsAtIsland(island).size();
boolean unloadIsland = true;
for (Player all : Bukkit.getOnlinePlayers()) {
if (uuid != null && all.getUniqueId().equals(uuid)) {
continue;
}
Island island = getIsland(islandOwnerUUID);
island.save();
Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml"));
FileConfiguration configLoad = config.getFileConfiguration();
int islandMembers = island.getRole(Role.Member).size() + island.getRole(Role.Operator).size() + 1, islandVisitors = island.getVisitors().size();
for (Player all : Bukkit.getOnlinePlayers()) {
if (!uuid.equals(islandOwnerUUID)) {
if (all.getUniqueId().equals(uuid)) {
continue;
}
if (island.isRole(Role.Member, all.getUniqueId()) || island.isRole(Role.Operator, all.getUniqueId()) || island.isRole(Role.Owner, all.getUniqueId())) {
if (scoreboardManager != null) {
try {
if (islandMembers == 1 && islandVisitors == 0) {
Scoreboard scoreboard = scoreboardManager.getScoreboard(all);
scoreboard.cancel();
scoreboard.setDisplayName(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Scoreboard.Island.Solo.Displayname")));
scoreboard.setDisplayList(configLoad.getStringList("Scoreboard.Island.Solo.Empty.Displaylines"));
scoreboard.run();
} else if (islandVisitors == 0) {
Scoreboard scoreboard = scoreboardManager.getScoreboard(all);
scoreboard.cancel();
scoreboard.setDisplayName(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Scoreboard.Island.Team.Displayname")));
scoreboard.setDisplayList(configLoad.getStringList("Scoreboard.Island.Team.Empty.Displaylines"));
HashMap<String, String> displayVariables = new HashMap<>();
displayVariables.put("%owner", configLoad.getString("Scoreboard.Island.Team.Word.Owner"));
displayVariables.put("%operator", configLoad.getString("Scoreboard.Island.Team.Word.Operator"));
displayVariables.put("%member", configLoad.getString("Scoreboard.Island.Team.Word.Member"));
scoreboard.setDisplayVariables(displayVariables);
scoreboard.run();
}
} catch (IllegalPluginAccessException e) {}
}
if (island.isRole(Role.Member, all.getUniqueId()) || island.isRole(Role.Operator, all.getUniqueId()) || island.isRole(Role.Owner, all.getUniqueId())) {
if (scoreboardManager != null) {
try {
if (islandMembers == 1 && islandVisitors == 0) {
Scoreboard scoreboard = scoreboardManager.getScoreboard(all);
scoreboard.cancel();
scoreboard.setDisplayName(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Scoreboard.Island.Solo.Displayname")));
scoreboard.setDisplayList(configLoad.getStringList("Scoreboard.Island.Solo.Empty.Displaylines"));
scoreboard.run();
} else if (islandVisitors == 0) {
Scoreboard scoreboard = scoreboardManager.getScoreboard(all);
scoreboard.cancel();
scoreboard.setDisplayName(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Scoreboard.Island.Team.Displayname")));
scoreboard.setDisplayList(configLoad.getStringList("Scoreboard.Island.Team.Empty.Displaylines"));
HashMap<String, String> displayVariables = new HashMap<>();
displayVariables.put("%owner", configLoad.getString("Scoreboard.Island.Team.Word.Owner"));
displayVariables.put("%operator", configLoad.getString("Scoreboard.Island.Team.Word.Operator"));
displayVariables.put("%member", configLoad.getString("Scoreboard.Island.Team.Word.Member"));
scoreboard.setDisplayVariables(displayVariables);
scoreboard.run();
}
} catch (IllegalPluginAccessException e) {}
}
return;
}
unloadIsland = false;
}
boolean unloadIsland = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Visitor.Unload");
if (unloadIsland) {
VisitManager visitManager = skyblock.getVisitManager();
visitManager.removeVisitors(island, VisitManager.Removal.Unloaded);
visitManager.unloadIsland(islandOwnerUUID);
BanManager banManager = skyblock.getBanManager();
banManager.unloadIsland(islandOwnerUUID);
} else {
if (island.getVisitors().size() != 0) {
return;
}
}
fileManager.unloadConfig(new File(new File(skyblock.getDataFolder().toString() + "/setting-data"), islandOwnerUUID + ".yml"));
fileManager.unloadConfig(new File(new File(skyblock.getDataFolder().toString() + "/island-data"), islandOwnerUUID + ".yml"));
islandStorage.remove(islandOwnerUUID);
Bukkit.getServer().getPluginManager().callEvent(new IslandUnloadEvent(island));
}
if (!unloadIsland) {
return;
}
unloadIsland = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Visitor.Unload");
if (unloadIsland) {
VisitManager visitManager = skyblock.getVisitManager();
visitManager.removeVisitors(island, VisitManager.Removal.Unloaded);
visitManager.unloadIsland(island.getOwnerUUID());
BanManager banManager = skyblock.getBanManager();
banManager.unloadIsland(island.getOwnerUUID());
} else {
int nonIslandMembers = islandVisitors - getCoopPlayersAtIsland(island).size();
if (nonIslandMembers <= 0) {
removeCoopPlayers(island, uuid);
} else {
return;
}
}
fileManager.unloadConfig(new File(new File(skyblock.getDataFolder().toString() + "/coop-data"), island.getOwnerUUID() + ".yml"));
fileManager.unloadConfig(new File(new File(skyblock.getDataFolder().toString() + "/setting-data"), island.getOwnerUUID() + ".yml"));
fileManager.unloadConfig(new File(new File(skyblock.getDataFolder().toString() + "/island-data"), island.getOwnerUUID() + ".yml"));
islandStorage.remove(island.getOwnerUUID());
Bukkit.getServer().getPluginManager().callEvent(new IslandUnloadEvent(island));
}
public List<UUID> getVisitorsAtIsland(Island island) {
Map<UUID, PlayerData> playerDataStorage = skyblock.getPlayerDataManager().getPlayerData();
List<UUID> islandVisitors = new ArrayList<>();
for (UUID playerDataStorageList : playerDataStorage.keySet()) {
PlayerData playerData = playerDataStorage.get(playerDataStorageList);
UUID islandOwnerUUID = playerData.getIsland();
if (islandOwnerUUID != null && islandOwnerUUID.equals(island.getOwnerUUID())) {
if (playerData.getOwner() == null || !playerData.getOwner().equals(island.getOwnerUUID())) {
if (Bukkit.getServer().getPlayer(playerDataStorageList) != null) {
islandVisitors.add(playerDataStorageList);
}
}
}
}
return islandVisitors;
}
public void visitIsland(Player player, Island island) {
@ -511,7 +540,7 @@ public class IslandManager {
player.teleport(island.getLocation(Location.World.Normal, Location.Environment.Visitor));
} else {
if (scoreboardManager != null) {
int islandVisitors = island.getVisitors().size(), islandMembers = island.getRole(Role.Member).size() + island.getRole(Role.Operator).size() + 1;
int islandVisitors = getVisitorsAtIsland(island).size(), islandMembers = island.getRole(Role.Member).size() + island.getRole(Role.Operator).size() + 1;
if (islandVisitors == 0) {
for (Player all : Bukkit.getOnlinePlayers()) {
@ -579,12 +608,12 @@ public class IslandManager {
islandOwnerPlayerName = islandOwnerPlayer.getName();
}
for (UUID visitorList : island.getVisitors()) {
Player targetPlayer = Bukkit.getServer().getPlayer(visitorList);
LocationUtil.teleportPlayerToSpawn(targetPlayer);
messageManager.sendMessage(targetPlayer, configLoad.getString("Island.Visit.Closed.Island.Message").replace("%player", islandOwnerPlayerName));
for (UUID visitorList : getVisitorsAtIsland(island)) {
if (!island.isCoopPlayer(visitorList)) {
Player targetPlayer = Bukkit.getServer().getPlayer(visitorList);
LocationUtil.teleportPlayerToSpawn(targetPlayer);
messageManager.sendMessage(targetPlayer, configLoad.getString("Island.Visit.Closed.Island.Message").replace("%player", islandOwnerPlayerName));
}
}
}
@ -812,4 +841,62 @@ public class IslandManager {
player.setAllowFlight(false);
}
}
public List<UUID> getCoopPlayersAtIsland(Island island) {
List<UUID> coopPlayersAtIsland = new ArrayList<>();
if (island != null) {
for (Player all : Bukkit.getOnlinePlayers()) {
if (island.getCoopPlayers().contains(all.getUniqueId())) {
for (Location.World worldList : Location.World.values()) {
if (LocationUtil.isLocationAtLocationRadius(all.getLocation(), island.getLocation(worldList, Location.Environment.Island), island.getRadius())) {
coopPlayersAtIsland.add(all.getUniqueId());
}
}
}
}
}
return coopPlayersAtIsland;
}
public boolean removeCoopPlayers(Island island, UUID uuid) {
MessageManager messageManager = skyblock.getMessageManager();
SoundManager soundManager = skyblock.getSoundManager();
Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "language.yml"));
FileConfiguration configLoad = config.getFileConfiguration();
boolean coopPlayers = island.getSetting(Setting.Role.Operator, "CoopPlayers").getStatus();
for (Player all : Bukkit.getOnlinePlayers()) {
if (uuid != null && all.getUniqueId().equals(uuid)) {
continue;
}
if (island.isRole(Role.Owner, all.getUniqueId())) {
return false;
} else if (coopPlayers && island.isRole(Role.Operator, all.getUniqueId())) {
return false;
}
}
for (UUID coopPlayerAtIslandList : getCoopPlayersAtIsland(island)) {
Player targetPlayer = Bukkit.getServer().getPlayer(coopPlayerAtIslandList);
if (targetPlayer != null) {
LocationUtil.teleportPlayerToSpawn(targetPlayer);
if (coopPlayers) {
messageManager.sendMessage(targetPlayer, configLoad.getString("Island.Coop.Removed.Operator.Message"));
} else {
messageManager.sendMessage(targetPlayer, configLoad.getString("Island.Coop.Removed.Owner.Message"));
}
soundManager.playSound(targetPlayer, Sounds.IRONGOLEM_HIT.bukkitSound(), 1.0F, 1.0F);
}
}
return true;
}
}

View File

@ -57,7 +57,7 @@ public class LeaderboardManager {
}
if (islandVotes.size() != 0 && i <= islandVotes.size()-1) {
leaderboardStorage.add(new Leaderboard(Leaderboard.Type.Votes, visitManager.getIsland((UUID) islandLevels.get(i).getUUID()), i));
leaderboardStorage.add(new Leaderboard(Leaderboard.Type.Votes, visitManager.getIsland((UUID) islandVotes.get(i).getUUID()), i));
}
}
}

View File

@ -6,6 +6,7 @@ import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.FallingBlock;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
@ -143,6 +144,10 @@ public class Entity implements Listener {
public void onEntityChangeBlock(EntityChangeBlockEvent event) {
org.bukkit.entity.Entity entity = event.getEntity();
if (entity instanceof FallingBlock) {
return;
}
if (!(entity instanceof Player)) {
if (entity.getWorld().getName().equals(skyblock.getWorldManager().getWorld(Location.World.Normal).getName()) || entity.getWorld().getName().equals(skyblock.getWorldManager().getWorld(Location.World.Nether).getName())) {
IslandManager islandManager = skyblock.getIslandManager();
@ -232,7 +237,7 @@ public class Entity implements Listener {
if (event.getSpawnReason() == SpawnReason.CUSTOM || event.getSpawnReason() == SpawnReason.NATURAL) {
LivingEntity livingEntity = event.getEntity();
if (event.getEntity() instanceof ArmorStand) {
if (event.getEntity() instanceof ArmorStand || event.getEntity() instanceof FallingBlock) {
return;
}

View File

@ -90,7 +90,7 @@ public class Join implements Listener {
if (island.getRole(Role.Member).size() == 0 && island.getRole(Role.Operator).size() == 0) {
scoreboard.setDisplayName(ChatColor.translateAlternateColorCodes('&', config.getFileConfiguration().getString("Scoreboard.Island.Solo.Displayname")));
if (island.getVisitors().size() == 0) {
if (islandManager.getVisitorsAtIsland(island).size() == 0) {
scoreboard.setDisplayList(config.getFileConfiguration().getStringList("Scoreboard.Island.Solo.Empty.Displaylines"));
} else {
scoreboard.setDisplayList(config.getFileConfiguration().getStringList("Scoreboard.Island.Solo.Occupied.Displaylines"));
@ -98,7 +98,7 @@ public class Join implements Listener {
} else {
scoreboard.setDisplayName(ChatColor.translateAlternateColorCodes('&', config.getFileConfiguration().getString("Scoreboard.Island.Team.Displayname")));
if (island.getVisitors().size() == 0) {
if (islandManager.getVisitorsAtIsland(island).size() == 0) {
scoreboard.setDisplayList(config.getFileConfiguration().getStringList("Scoreboard.Island.Team.Empty.Displaylines"));
} else {
scoreboard.setDisplayList(config.getFileConfiguration().getStringList("Scoreboard.Island.Team.Occupied.Displaylines"));

View File

@ -41,7 +41,7 @@ public class Move implements Listener {
Location from = event.getFrom();
Location to = event.getTo();
if (from.getX() != to.getX() || from.getY() != to.getY() || from.getZ() != to.getZ()) {
String netherWorldName = skyblock.getWorldManager().getWorld(me.goodandevil.skyblock.island.Location.World.Nether).getName();
@ -105,6 +105,7 @@ public class Move implements Listener {
if (to.getY() <= configLoad.getInt("Island.World." + world.name() + ".Liquid.Height")) {
if (island.getSetting(Setting.Role.Owner, "KeepItemsOnDeath").getStatus()) {
player.setFallDistance(0.0F);
player.teleport(island.getLocation(world, me.goodandevil.skyblock.island.Location.Environment.Main));
soundManager.playSound(player, Sounds.ENDERMAN_TELEPORT.bukkitSound(), 1.0F, 1.0F);
}
@ -134,6 +135,7 @@ public class Move implements Listener {
}
player.setFallDistance(0.0F);
player.teleport(island.getLocation(world, me.goodandevil.skyblock.island.Location.Environment.Main));
soundManager.playSound(player, Sounds.ENDERMAN_TELEPORT.bukkitSound(), 1.0F, 1.0F);
}

View File

@ -69,17 +69,25 @@ public class Quit implements Listener {
}
}
}
islandManager.unloadIsland(island, player.getUniqueId());
}
islandManager.unloadIsland(player.getUniqueId());
playerDataManager.savePlayerData(player);
playerDataManager.unloadPlayerData(player);
UUID islandOwnerUUID = playerData.getIsland();
if (islandOwnerUUID != null && islandManager.containsIsland(islandOwnerUUID)) {
islandManager.unloadIsland(islandOwnerUUID);
if (skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Coop.Unload")) {
Island island = islandManager.getIsland(islandOwnerUUID);
if (island.isCoopPlayer(islandOwnerUUID)) {
island.removeCoopPlayer(islandOwnerUUID);
}
}
islandManager.unloadIsland(islandManager.getIsland(islandOwnerUUID), null);
}
InviteManager inviteManager = skyblock.getInviteManager();

View File

@ -78,13 +78,13 @@ public class Teleport implements Listener {
if (LocationUtil.isLocationAtLocationRadius(event.getTo(), island.getLocation(worldList, Location.Environment.Island), island.getRadius())) {
if (!island.getOwnerUUID().equals(playerData.getOwner())) {
if (!(player.hasPermission("skyblock.bypass") && player.hasPermission("skyblock.bypass.*") && player.hasPermission("skyblock.*"))) {
if (!island.isOpen()) {
if (!island.isOpen() && !island.isCoopPlayer(player.getUniqueId())) {
event.setCancelled(true);
messageManager.sendMessage(player, configLoad.getString("Island.Visit.Closed.Plugin.Message"));
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
return;
return;
} else if (fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Visitor.Banning") && island.getBan().isBanned(player.getUniqueId())) {
event.setCancelled(true);
@ -92,7 +92,7 @@ public class Teleport implements Listener {
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
return;
}
}
}
}
@ -113,7 +113,7 @@ public class Teleport implements Listener {
playerData.setIsland(island.getOwnerUUID());
if (islandOwnerUUID != null && islandManager.containsIsland(islandOwnerUUID) && (playerData.getOwner() == null || !playerData.getOwner().equals(islandOwnerUUID))) {
islandManager.unloadIsland(islandOwnerUUID);
islandManager.unloadIsland(islandManager.getIsland(islandOwnerUUID), null);
}
Visit visit = island.getVisit();
@ -142,7 +142,7 @@ public class Teleport implements Listener {
playerData.setIsland(null);
if (islandOwnerUUID != null && islandManager.containsIsland(islandOwnerUUID) && (playerData.getOwner() == null || !playerData.getOwner().equals(islandOwnerUUID))) {
islandManager.unloadIsland(islandOwnerUUID);
islandManager.unloadIsland(islandManager.getIsland(islandOwnerUUID), null);
}
}
}

View File

@ -10,6 +10,7 @@ import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import me.goodandevil.skyblock.SkyBlock;
import me.goodandevil.skyblock.config.FileManager;
@ -22,6 +23,7 @@ import me.goodandevil.skyblock.message.MessageManager;
import me.goodandevil.skyblock.playerdata.PlayerData;
import me.goodandevil.skyblock.playerdata.PlayerDataManager;
import me.goodandevil.skyblock.sound.SoundManager;
import me.goodandevil.skyblock.utils.AnvilGUI;
import me.goodandevil.skyblock.utils.OfflinePlayer;
import me.goodandevil.skyblock.utils.item.SkullUtil;
import me.goodandevil.skyblock.utils.item.nInventoryUtil;
@ -91,14 +93,36 @@ public class Bans {
} else if ((is.getType() == Materials.OAK_FENCE_GATE.parseMaterial()) && (is.hasItemMeta()) && (is.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Bans.Item.Exit.Displayname"))))) {
soundManager.playSound(player, Sounds.CHEST_CLOSE.bukkitSound(), 1.0F, 1.0F);
player.closeInventory();
} else if ((is.getType() == Material.PAINTING) && (is.hasItemMeta()) && (is.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Bans.Item.Statistics.Displayname"))))) {
soundManager.playSound(player, Sounds.VILLAGER_YES.bukkitSound(), 1.0F, 1.0F);
event.setWillClose(false);
event.setWillDestroy(false);
} else if ((is.getType() == Material.PAINTING) && (is.hasItemMeta()) && (is.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Bans.Item.Information.Displayname"))))) {
soundManager.playSound(player, Sounds.WOOD_CLICK.bukkitSound(), 1.0F, 1.0F);
Bukkit.getServer().getScheduler().runTaskLaterAsynchronously(skyblock, new Runnable() {
@Override
public void run() {
AnvilGUI gui = new AnvilGUI(player, event1 -> {
if (event1.getSlot() == AnvilGUI.AnvilSlot.OUTPUT) {
Bukkit.getServer().dispatchCommand(player, "island ban " + event1.getName());
event1.setWillClose(true);
event1.setWillDestroy(true);
} else {
event1.setWillClose(false);
event1.setWillDestroy(false);
}
});
ItemStack is = new ItemStack(Material.NAME_TAG);
ItemMeta im = is.getItemMeta();
im.setDisplayName(configLoad.getString("Menu.Bans.Item.Word.Enter"));
is.setItemMeta(im);
gui.setSlot(AnvilGUI.AnvilSlot.INPUT_LEFT, is);
gui.open();
}
}, 1L);
} else if ((is.getType() == Material.BARRIER) && (is.hasItemMeta()) && (is.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Bans.Item.Nothing.Displayname"))))) {
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
event.setWillClose(false);
event.setWillDestroy(false);
} else if ((is.getType() == SkullUtil.createItemStack().getType()) && (is.hasItemMeta())) {
@ -149,7 +173,7 @@ public class Bans {
List<UUID> islandBans = island.getBan().getBans();
nInv.addItem(nInv.createItem(Materials.OAK_FENCE_GATE.parseItem(), configLoad.getString("Menu.Bans.Item.Exit.Displayname"), null, null, null, null), 0, 8);
nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), configLoad.getString("Menu.Bans.Item.Statistics.Displayname"), configLoad.getStringList("Menu.Bans.Item.Statistics.Lore"), nInv.createItemLoreVariable(new String[] { "%bans#" + islandBans.size() }), null, null), 4);
nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), configLoad.getString("Menu.Bans.Item.Information.Displayname"), configLoad.getStringList("Menu.Bans.Item.Information.Lore"), nInv.createItemLoreVariable(new String[] { "%bans#" + islandBans.size() }), null, null), 4);
nInv.addItem(nInv.createItem(Materials.BLACK_STAINED_GLASS_PANE.parseItem(), configLoad.getString("Menu.Bans.Item.Barrier.Displayname"), null, null, null, null), 9, 10, 11, 12, 13, 14, 15, 16, 17);
int playerMenuPage = playerData.getPage(), nextEndIndex = islandBans.size() - playerMenuPage * 36;

View File

@ -0,0 +1,220 @@
package me.goodandevil.skyblock.menus;
import java.io.File;
import java.util.List;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import me.goodandevil.skyblock.SkyBlock;
import me.goodandevil.skyblock.config.FileManager.Config;
import me.goodandevil.skyblock.island.Island;
import me.goodandevil.skyblock.island.IslandManager;
import me.goodandevil.skyblock.island.Role;
import me.goodandevil.skyblock.island.Setting;
import me.goodandevil.skyblock.message.MessageManager;
import me.goodandevil.skyblock.playerdata.PlayerData;
import me.goodandevil.skyblock.playerdata.PlayerDataManager;
import me.goodandevil.skyblock.sound.SoundManager;
import me.goodandevil.skyblock.utils.AnvilGUI;
import me.goodandevil.skyblock.utils.OfflinePlayer;
import me.goodandevil.skyblock.utils.item.SkullUtil;
import me.goodandevil.skyblock.utils.item.nInventoryUtil;
import me.goodandevil.skyblock.utils.item.nInventoryUtil.ClickEvent;
import me.goodandevil.skyblock.utils.item.nInventoryUtil.ClickEventHandler;
import me.goodandevil.skyblock.utils.version.Materials;
import me.goodandevil.skyblock.utils.version.Sounds;
public class Coop {
private static Coop instance;
public static Coop getInstance(){
if(instance == null) {
instance = new Coop();
}
return instance;
}
public void open(Player player) {
SkyBlock skyblock = SkyBlock.getInstance();
PlayerDataManager playerDataManager = skyblock.getPlayerDataManager();
MessageManager messageManager = skyblock.getMessageManager();
IslandManager islandManager = skyblock.getIslandManager();
SoundManager soundManager = skyblock.getSoundManager();
if (playerDataManager.hasPlayerData(player)) {
Config config = skyblock.getFileManager().getConfig(new File(skyblock.getDataFolder(), "language.yml"));
FileConfiguration configLoad = config.getFileConfiguration();
nInventoryUtil nInv = new nInventoryUtil(player, new ClickEventHandler() {
@Override
public void onClick(ClickEvent event) {
if (playerDataManager.hasPlayerData(player)) {
PlayerData playerData = playerDataManager.getPlayerData(player);
Island island = null;
if (islandManager.hasIsland(player)) {
island = islandManager.getIsland(playerData.getOwner());
} else {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Coop.Owner.Message"));
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
return;
}
ItemStack is = event.getItem();
if ((is.getType() == Materials.BLACK_STAINED_GLASS_PANE.parseMaterial()) && (is.hasItemMeta()) && (is.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Coop.Item.Barrier.Displayname"))))) {
soundManager.playSound(player, Sounds.GLASS.bukkitSound(), 1.0F, 1.0F);
event.setWillClose(false);
event.setWillDestroy(false);
} else if ((is.getType() == Materials.OAK_FENCE_GATE.parseMaterial()) && (is.hasItemMeta()) && (is.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Coop.Item.Exit.Displayname"))))) {
soundManager.playSound(player, Sounds.CHEST_CLOSE.bukkitSound(), 1.0F, 1.0F);
player.closeInventory();
} else if ((is.getType() == Material.PAINTING) && (is.hasItemMeta()) && (is.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Coop.Item.Information.Displayname"))))) {
soundManager.playSound(player, Sounds.WOOD_CLICK.bukkitSound(), 1.0F, 1.0F);
Bukkit.getServer().getScheduler().runTaskLaterAsynchronously(skyblock, new Runnable() {
@Override
public void run() {
AnvilGUI gui = new AnvilGUI(player, event1 -> {
if (event1.getSlot() == AnvilGUI.AnvilSlot.OUTPUT) {
Bukkit.getServer().dispatchCommand(player, "island coop " + event1.getName());
event1.setWillClose(true);
event1.setWillDestroy(true);
} else {
event1.setWillClose(false);
event1.setWillDestroy(false);
}
});
ItemStack is = new ItemStack(Material.NAME_TAG);
ItemMeta im = is.getItemMeta();
im.setDisplayName(configLoad.getString("Menu.Coop.Item.Word.Enter"));
is.setItemMeta(im);
gui.setSlot(AnvilGUI.AnvilSlot.INPUT_LEFT, is);
gui.open();
}
}, 1L);
} else if ((is.getType() == Material.BARRIER) && (is.hasItemMeta()) && (is.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Coop.Item.Nothing.Displayname"))))) {
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
event.setWillClose(false);
event.setWillDestroy(false);
} else if ((is.getType() == SkullUtil.createItemStack().getType()) && (is.hasItemMeta())) {
if (is.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Coop.Item.Previous.Displayname")))) {
playerData.setPage(playerData.getPage() - 1);
soundManager.playSound(player, Sounds.ARROW_HIT.bukkitSound(), 1.0F, 1.0F);
Bukkit.getServer().getScheduler().runTaskLaterAsynchronously(skyblock, new Runnable() {
@Override
public void run() {
open(player);
}
}, 1L);
} else if (is.getItemMeta().getDisplayName().equals(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Coop.Item.Next.Displayname")))) {
playerData.setPage(playerData.getPage() + 1);
soundManager.playSound(player, Sounds.ARROW_HIT.bukkitSound(), 1.0F, 1.0F);
Bukkit.getServer().getScheduler().runTaskLaterAsynchronously(skyblock, new Runnable() {
@Override
public void run() {
open(player);
}
}, 1L);
} else {
if ((island.isRole(Role.Operator, player.getUniqueId()) && island.getSetting(Setting.Role.Operator, "CoopPlayers").getStatus()) || island.isRole(Role.Owner, player.getUniqueId())) {
String playerName = ChatColor.stripColor(is.getItemMeta().getDisplayName());
Bukkit.getServer().dispatchCommand(player, "island coop " + playerName);
Bukkit.getServer().getScheduler().runTaskLaterAsynchronously(skyblock, new Runnable() {
@Override
public void run() {
open(player);
}
}, 3L);
} else {
messageManager.sendMessage(player, configLoad.getString("Command.Island.Coop.Permission.Message"));
soundManager.playSound(player, Sounds.VILLAGER_NO.bukkitSound(), 1.0F, 1.0F);
event.setWillClose(false);
event.setWillDestroy(false);
}
}
}
}
}
});
PlayerData playerData = playerDataManager.getPlayerData(player);
Island island = islandManager.getIsland(playerData.getOwner());
List<UUID> coopPlayers = island.getCoopPlayers();
int playerMenuPage = playerData.getPage(), nextEndIndex = coopPlayers.size() - playerMenuPage * 36;
nInv.addItem(nInv.createItem(Materials.OAK_FENCE_GATE.parseItem(), configLoad.getString("Menu.Coop.Item.Exit.Displayname"), null, null, null, null), 0, 8);
nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), configLoad.getString("Menu.Coop.Item.Information.Displayname"), configLoad.getStringList("Menu.Coop.Item.Information.Lore"), nInv.createItemLoreVariable(new String[] { "%coops#" + coopPlayers.size() }), null, null), 4);
nInv.addItem(nInv.createItem(Materials.BLACK_STAINED_GLASS_PANE.parseItem(), configLoad.getString("Menu.Coop.Item.Barrier.Displayname"), null, null, null, null), 9, 10, 11, 12, 13, 14, 15, 16, 17);
if (playerMenuPage != 1) {
nInv.addItem(nInv.createItem(SkullUtil.create("ToR1w9ZV7zpzCiLBhoaJH3uixs5mAlMhNz42oaRRvrG4HRua5hC6oyyOPfn2HKdSseYA9b1be14fjNRQbSJRvXF3mlvt5/zct4sm+cPVmX8K5kbM2vfwHJgCnfjtPkzT8sqqg6YFdT35mAZGqb9/xY/wDSNSu/S3k2WgmHrJKirszaBZrZfnVnqITUOgM9TmixhcJn2obeqICv6tl7/Wyk/1W62wXlXGm9+WjS+8rRNB+vYxqKR3XmH2lhAiyVGbADsjjGtBVUTWjq+aPw670SjXkoii0YE8sqzUlMMGEkXdXl9fvGtnWKk3APSseuTsjedr7yq+AkXFVDqqkqcUuXwmZl2EjC2WRRbhmYdbtY5nEfqh5+MiBrGdR/JqdEUL4yRutyRTw8mSUAI6X2oSVge7EdM/8f4HwLf33EO4pTocTqAkNbpt6Z54asLe5Y12jSXbvd2dFsgeJbrslK7e4uy/TK8CXf0BP3KLU20QELYrjz9I70gtj9lJ9xwjdx4/xJtxDtrxfC4Afmpu+GNYA/mifpyP3GDeBB5CqN7btIvEWyVvRNH7ppAqZIPqYJ7dSDd2RFuhAId5Yq98GUTBn+eRzeigBvSi1bFkkEgldfghOoK5WhsQtQbXuBBXITMME3NaWCN6zG7DxspS6ew/rZ8E809Xe0ArllquIZ0sP+k=", "eyJ0aW1lc3RhbXAiOjE0OTU3NTE5MTYwNjksInByb2ZpbGVJZCI6ImE2OGYwYjY0OGQxNDQwMDBhOTVmNGI5YmExNGY4ZGY5IiwicHJvZmlsZU5hbWUiOiJNSEZfQXJyb3dMZWZ0Iiwic2lnbmF0dXJlUmVxdWlyZWQiOnRydWUsInRleHR1cmVzIjp7IlNLSU4iOnsidXJsIjoiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS8zZWJmOTA3NDk0YTkzNWU5NTViZmNhZGFiODFiZWFmYjkwZmI5YmU0OWM3MDI2YmE5N2Q3OThkNWYxYTIzIn19fQ=="), configLoad.getString("Menu.Coop.Item.Previous.Displayname"), null, null, null, null), 1);
}
if (!(nextEndIndex == 0 || nextEndIndex < 0)) {
nInv.addItem(nInv.createItem(SkullUtil.create("wZPrsmxckJn4/ybw/iXoMWgAe+1titw3hjhmf7bfg9vtOl0f/J6YLNMOI0OTvqeRKzSQVCxqNOij6k2iM32ZRInCQyblDIFmFadQxryEJDJJPVs7rXR6LRXlN8ON2VDGtboRTL7LwMGpzsrdPNt0oYDJLpR0huEeZKc1+g4W13Y4YM5FUgEs8HvMcg4aaGokSbvrYRRcEh3LR1lVmgxtbiUIr2gZkR3jnwdmZaIw/Ujw28+Et2pDMVCf96E5vC0aNY0KHTdMYheT6hwgw0VAZS2VnJg+Gz4JCl4eQmN2fs4dUBELIW2Rdnp4U1Eb+ZL8DvTV7ofBeZupknqPOyoKIjpInDml9BB2/EkD3zxFtW6AWocRphn03Z203navBkR6ztCMz0BgbmQU/m8VL/s8o4cxOn+2ppjrlj0p8AQxEsBdHozrBi8kNOGf1j97SDHxnvVAF3X8XDso+MthRx5pbEqpxmLyKKgFh25pJE7UaMSnzH2lc7aAZiax67MFw55pDtgfpl+Nlum4r7CK2w5Xob2QTCovVhu78/6SV7qM2Lhlwx/Sjqcl8rn5UIoyM49QE5Iyf1tk+xHXkIvY0m7q358oXsfca4eKmxMe6DFRjUDo1VuWxdg9iVjn22flqz1LD1FhGlPoqv0k4jX5Q733LwtPPI6VOTK+QzqrmiuR6e8=", "eyJ0aW1lc3RhbXAiOjE0OTM4NjgxMDA2NzMsInByb2ZpbGVJZCI6IjUwYzg1MTBiNWVhMDRkNjBiZTlhN2Q1NDJkNmNkMTU2IiwicHJvZmlsZU5hbWUiOiJNSEZfQXJyb3dSaWdodCIsInNpZ25hdHVyZVJlcXVpcmVkIjp0cnVlLCJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMWI2ZjFhMjViNmJjMTk5OTQ2NDcyYWVkYjM3MDUyMjU4NGZmNmY0ZTgzMjIxZTU5NDZiZDJlNDFiNWNhMTNiIn19fQ=="), configLoad.getString("Menu.Coop.Item.Next.Displayname"), null, null, null, null), 7);
}
if (coopPlayers.size() == 0) {
nInv.addItem(nInv.createItem(new ItemStack(Material.BARRIER), configLoad.getString("Menu.Coop.Item.Nothing.Displayname"), null, null, null, null), 31);
} else {
int index = playerMenuPage * 36 - 36, endIndex = index >= coopPlayers.size() ? coopPlayers.size() - 1 : index + 36, inventorySlot = 17;
for (; index < endIndex; index++) {
if (coopPlayers.size() > index) {
inventorySlot++;
UUID targetPlayerUUID = coopPlayers.get(index);
String targetPlayerName;
String[] targetPlayerTexture;
Player targetPlayer = Bukkit.getServer().getPlayer(targetPlayerUUID);
if (targetPlayer == null) {
OfflinePlayer offlinePlayer = new OfflinePlayer(targetPlayerUUID);
targetPlayerName = offlinePlayer.getName();
targetPlayerTexture = offlinePlayer.getTexture();
} else {
targetPlayerName = targetPlayer.getName();
targetPlayerTexture = playerDataManager.getPlayerData(targetPlayer).getTexture();
}
nInv.addItem(nInv.createItem(SkullUtil.create(targetPlayerTexture[0], targetPlayerTexture[1]), ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Coop.Item.Coop.Displayname").replace("%player", targetPlayerName)), configLoad.getStringList("Menu.Coop.Item.Coop.Lore"), null, null, null), inventorySlot);
}
}
}
nInv.setTitle(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Coop.Title")));
nInv.setRows(6);
Bukkit.getServer().getScheduler().runTask(skyblock, new Runnable() {
@Override
public void run() {
nInv.open();
}
});
}
}
}

View File

@ -76,7 +76,7 @@ public class Information {
if (viewer.getType() == Information.Viewer.Type.Visitors) {
if (island.isOpen()) {
if (island.getVisitors().size() == 0) {
if (islandManager.getVisitorsAtIsland(island).size() == 0) {
messageManager.sendMessage(player, configLoad.getString("Island.Information.Visitors.Message"));
soundManager.playSound(player, Sounds.ANVIL_LAND.bukkitSound(), 1.0F, 1.0F);
@ -396,7 +396,7 @@ public class Information {
});
List<UUID> displayedVisitors = new ArrayList<>();
displayedVisitors.addAll(island.getVisitors());
displayedVisitors.addAll(islandManager.getVisitorsAtIsland(island));
nInv.addItem(nInv.createItem(Materials.OAK_FENCE_GATE.parseItem(), configLoad.getString("Menu.Information.Visitors.Item.Return.Displayname"), null, null, null, null), 0, 8);
nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), configLoad.getString("Menu.Information.Visitors.Item.Statistics.Displayname"), configLoad.getStringList("Menu.Information.Visitors.Item.Statistics.Lore"), nInv.createItemLoreVariable(new String[] { "%island_visitors#" + displayedVisitors.size() }), null, null), 4);
@ -450,7 +450,7 @@ public class Information {
});
}
islandManager.unloadIsland(viewer.getOwner());
islandManager.unloadIsland(island, null);
}
}
}

View File

@ -296,15 +296,15 @@ public class Settings {
if (config.getFileConfiguration().getBoolean("Island.Visitor.Vote")) {
if (visit.isOpen()) {
nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), configLoad.getString("Menu.Settings.Visitor.Item.Statistics.Displayname"), configLoad.getStringList("Menu.Settings.Visitor.Item.Statistics.Vote.Enabled.Open.Lore"), nInv.createItemLoreVariable(new String[] { "%visits#" + visit.getVisitors().size(), "%votes#" + visit.getVoters().size(), "%visitors#" + island.getVisitors().size() }), null, null), 4);
nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), configLoad.getString("Menu.Settings.Visitor.Item.Statistics.Displayname"), configLoad.getStringList("Menu.Settings.Visitor.Item.Statistics.Vote.Enabled.Open.Lore"), nInv.createItemLoreVariable(new String[] { "%visits#" + visit.getVisitors().size(), "%votes#" + visit.getVoters().size(), "%visitors#" + islandManager.getVisitorsAtIsland(island).size() }), null, null), 4);
} else {
nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), configLoad.getString("Menu.Settings.Visitor.Item.Statistics.Displayname"), configLoad.getStringList("Menu.Settings.Visitor.Item.Statistics.Vote.Enabled.Closed.Lore"), nInv.createItemLoreVariable(new String[] { "%visits#" + visit.getVisitors().size(), "%votes#" + visit.getVoters().size(), "%visitors#" + island.getVisitors().size() }), null, null), 4);
nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), configLoad.getString("Menu.Settings.Visitor.Item.Statistics.Displayname"), configLoad.getStringList("Menu.Settings.Visitor.Item.Statistics.Vote.Enabled.Closed.Lore"), nInv.createItemLoreVariable(new String[] { "%visits#" + visit.getVisitors().size(), "%votes#" + visit.getVoters().size(), "%visitors#" + islandManager.getVisitorsAtIsland(island).size() }), null, null), 4);
}
} else {
if (visit.isOpen()) {
nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), configLoad.getString("Menu.Settings.Visitor.Item.Statistics.Displayname"), configLoad.getStringList("Menu.Settings.Visitor.Item.Statistics.Vote.Disabled.Open.Lore"), nInv.createItemLoreVariable(new String[] { "%visits#" + visit.getVisitors().size(), "%visitors#" + island.getVisitors().size() }), null, null), 4);
nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), configLoad.getString("Menu.Settings.Visitor.Item.Statistics.Displayname"), configLoad.getStringList("Menu.Settings.Visitor.Item.Statistics.Vote.Disabled.Open.Lore"), nInv.createItemLoreVariable(new String[] { "%visits#" + visit.getVisitors().size(), "%visitors#" + islandManager.getVisitorsAtIsland(island).size() }), null, null), 4);
} else {
nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), configLoad.getString("Menu.Settings.Visitor.Item.Statistics.Displayname"), configLoad.getStringList("Menu.Settings.Visitor.Item.Statistics.Vote.Disabled.Closed.Lore"), nInv.createItemLoreVariable(new String[] { "%visits#" + visit.getVisitors().size(), "%visitors#" + island.getVisitors().size() }), null, null), 4);
nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), configLoad.getString("Menu.Settings.Visitor.Item.Statistics.Displayname"), configLoad.getStringList("Menu.Settings.Visitor.Item.Statistics.Vote.Disabled.Closed.Lore"), nInv.createItemLoreVariable(new String[] { "%visits#" + visit.getVisitors().size(), "%visitors#" + islandManager.getVisitorsAtIsland(island).size() }), null, null), 4);
}
}
@ -368,25 +368,24 @@ public class Settings {
nInv.addItemStack(createItem(island, role, "Island", Materials.OAK_SAPLING.parseMaterial()), 16);
nInv.addItemStack(createItem(island, role, "MainSpawn", Material.EMERALD), 20);
nInv.addItemStack(createItem(island, role, "VisitorSpawn", Material.NETHER_STAR), 21);
nInv.addItemStack(createItem(island, role, "Biome", Material.MAP), 23);
nInv.addItemStack(createItem(island, role, "Weather", Materials.CLOCK.parseMaterial()), 24);
nInv.setTitle(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Settings." + role.name() + ".Title")));
nInv.setRows(3);
nInv.addItemStack(createItem(island, role, "Biome", Material.MAP), 22);
nInv.addItemStack(createItem(island, role, "Weather", Materials.CLOCK.parseMaterial()), 23);
nInv.addItemStack(createItem(island, role, "CoopPlayers", Material.BOOK), 24);
} else {
nInv.addItemStack(createItem(island, role, "Invite", Materials.WRITABLE_BOOK.parseMaterial()), 9);
nInv.addItemStack(createItem(island, role, "Kick", Material.IRON_DOOR), 10);
nInv.addItemStack(createItem(island, role, "Visitor", Material.SIGN), 11);
nInv.addItemStack(createItem(island, role, "Member", Material.PAINTING), 12);
nInv.addItemStack(createItem(island, role, "Island", Materials.OAK_SAPLING.parseMaterial()), 13);
nInv.addItemStack(createItem(island, role, "MainSpawn", Material.EMERALD), 14);
nInv.addItemStack(createItem(island, role, "VisitorSpawn", Material.NETHER_STAR), 15);
nInv.addItemStack(createItem(island, role, "Biome", Material.MAP), 16);
nInv.addItemStack(createItem(island, role, "Weather", Materials.CLOCK.parseMaterial()), 17);
nInv.setTitle(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Settings." + role.name() + ".Title")));
nInv.setRows(2);
nInv.addItemStack(createItem(island, role, "Invite", Materials.WRITABLE_BOOK.parseMaterial()), 10);
nInv.addItemStack(createItem(island, role, "Kick", Material.IRON_DOOR), 11);
nInv.addItemStack(createItem(island, role, "Visitor", Material.SIGN), 12);
nInv.addItemStack(createItem(island, role, "Member", Material.PAINTING), 13);
nInv.addItemStack(createItem(island, role, "Island", Materials.OAK_SAPLING.parseMaterial()), 14);
nInv.addItemStack(createItem(island, role, "MainSpawn", Material.EMERALD), 15);
nInv.addItemStack(createItem(island, role, "VisitorSpawn", Material.NETHER_STAR), 16);
nInv.addItemStack(createItem(island, role, "Biome", Material.MAP), 21);
nInv.addItemStack(createItem(island, role, "Weather", Materials.CLOCK.parseMaterial()), 22);
nInv.addItemStack(createItem(island, role, "CoopPlayers", Material.BOOK), 23);
}
nInv.setTitle(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Menu.Settings." + role.name() + ".Title")));
nInv.setRows(3);
} else if (role == me.goodandevil.skyblock.island.Setting.Role.Owner) {
nInv.addItemStack(createItem(island, role, "NaturalMobSpawning", Materials.PIG_SPAWN_EGG.parseMaterial()), 10);
nInv.addItemStack(createItem(island, role, "MobGriefing", Materials.IRON_SHOVEL.parseMaterial()), 11);

View File

@ -154,8 +154,15 @@ public class Visit {
if (visitManager.hasIsland(targetPlayerUUID)) {
me.goodandevil.skyblock.visit.Visit visit = visitManager.getIsland(targetPlayerUUID);
boolean isCoopPlayer = false;
if (visit.isOpen()) {
if (islandManager.containsIsland(targetPlayerUUID)) {
if (islandManager.getIsland(targetPlayerUUID).isCoopPlayer(player.getUniqueId())) {
isCoopPlayer = true;
}
}
if (isCoopPlayer || player.hasPermission("skyblock.bypass") || player.hasPermission("skyblock.bypass.*") || player.hasPermission("skyblock.*") || visit.isOpen()) {
if (!islandManager.containsIsland(targetPlayerUUID)) {
islandManager.loadIsland(targetPlayerUUID);
}
@ -195,7 +202,7 @@ public class Visit {
event.setWillDestroy(false);
}
islandManager.unloadIsland(targetPlayerUUID);
islandManager.unloadIsland(island, null);
return;
} else if (event.getClick() != ClickType.LEFT) {
@ -252,6 +259,8 @@ public class Visit {
Map<UUID, me.goodandevil.skyblock.visit.Visit> openIslands = visitManager.getOpenIslands();
List<me.goodandevil.skyblock.visit.Visit> visitIslands = new ArrayList<>();
boolean keepBannedIslands = fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Visit.Menu.Bans");
for (int i = 0; i < openIslands.size(); i++) {
UUID islandOwnerUUID = (UUID) openIslands.keySet().toArray()[i];
me.goodandevil.skyblock.visit.Visit visit = openIslands.get(islandOwnerUUID);
@ -266,6 +275,10 @@ public class Visit {
}
}
if (!keepBannedIslands && visit.getBan().isBanned(player.getUniqueId())) {
continue;
}
visitIslands.add(visit);
}

View File

@ -160,8 +160,8 @@ public class Visitors {
PlayerData playerData = playerDataManager.getPlayerData(player);
Island island = skyblock.getIslandManager().getIsland(playerData.getOwner());
List<UUID> islandVisitors = islandManager.getVisitorsAtIsland(island);
Map<Integer, UUID> sortedIslandVisitors = new TreeMap<>();
List<UUID> islandVisitors = island.getVisitors();
nInv.addItem(nInv.createItem(Materials.OAK_FENCE_GATE.parseItem(), configLoad.getString("Menu.Visitors.Item.Exit.Displayname"), null, null, null, null), 0, 8);
nInv.addItem(nInv.createItem(new ItemStack(Material.PAINTING), configLoad.getString("Menu.Visitors.Item.Statistics.Displayname"), configLoad.getStringList("Menu.Visitors.Item.Statistics.Lore"), nInv.createItemLoreVariable(new String[] { "%visitors#" + islandVisitors.size() }), null, null), 4);

View File

@ -102,7 +102,7 @@ public class EZPlaceholder extends PlaceholderExpansion {
return "";
}
return placeholderManager.getPlaceholder(player, identifier);
return placeholderManager.getPlaceholder(player, "skyblock_" + identifier);
}
}

View File

@ -172,7 +172,7 @@ public class PlaceholderManager {
if (island == null) {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_visitors.Empty.Message"));
} else {
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_visitors.Non-empty.Message").replace("%placeholder", "" + island.getVisitors().size()));
return ChatColor.translateAlternateColorCodes('&', configLoad.getString("Placeholder.skyblock_island_visitors.Non-empty.Message").replace("%placeholder", "" + islandManager.getVisitorsAtIsland(island).size()));
}
}

View File

@ -131,6 +131,10 @@ public class PlayerDataManager {
IslandManager islandManager = skyblock.getIslandManager();
WorldManager worldManager = skyblock.getWorldManager();
FileManager fileManager = skyblock.getFileManager();
BanManager banManager = skyblock.getBanManager();
Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml"));
FileConfiguration configLoad = config.getFileConfiguration();
if (hasPlayerData(player) && (player.getWorld().getName().equals(worldManager.getWorld(Location.World.Normal).getName()) || player.getWorld().getName().equals(worldManager.getWorld(Location.World.Nether).getName()))) {
for (UUID islandList : islandManager.getIslands().keySet()) {
@ -138,53 +142,89 @@ public class PlayerDataManager {
for (Location.World worldList : Location.World.values()) {
if (LocationUtil.isLocationAtLocationRadius(player.getLocation(), island.getLocation(worldList, Location.Environment.Island), island.getRadius())) {
PlayerData playerData = getPlayerData(player);
playerData.setIsland(island.getOwnerUUID());
Player targetPlayer = Bukkit.getServer().getPlayer(islandList);
String targetPlayerName;
if (targetPlayer == null) {
targetPlayerName = new OfflinePlayer(islandList).getName();
} else {
targetPlayerName = targetPlayer.getName();
}
if (worldList == Location.World.Normal) {
if (!island.isWeatherSynchronised()) {
player.setPlayerTime(island.getTime(), fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Weather.Time.Cycle"));
player.setPlayerWeather(island.getWeather());
}
}
islandManager.giveUpgrades(player, island);
ScoreboardManager scoreboardManager = skyblock.getScoreboardManager();
if (scoreboardManager != null) {
if (!island.isRole(Role.Member, player.getUniqueId()) && !island.isRole(Role.Operator, player.getUniqueId()) && !island.isRole(Role.Owner, player.getUniqueId())) {
Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml"));
FileConfiguration configLoad = config.getFileConfiguration();
if (banManager.hasIsland(islandList) && fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Visitor.Banning") && banManager.getIsland(islandList).isBanned(player.getUniqueId())) {
messageManager.sendMessage(player, configLoad.getString("Island.Visit.Teleport.Island.Message").replace("%player", targetPlayerName));
} else {
if (island.isRole(Role.Member, player.getUniqueId()) || island.isRole(Role.Operator, player.getUniqueId()) || island.isRole(Role.Owner, player.getUniqueId())) {
PlayerData playerData = getPlayerData(player);
playerData.setIsland(island.getOwnerUUID());
for (Player all : Bukkit.getOnlinePlayers()) {
PlayerData targetPlayerData = getPlayerData(all);
if (targetPlayerData.getOwner() != null && targetPlayerData.getOwner().equals(island.getOwnerUUID())) {
Scoreboard scoreboard = scoreboardManager.getScoreboard(all);
scoreboard.cancel();
if ((island.getRole(Role.Member).size() + island.getRole(Role.Operator).size() + 1) == 1) {
scoreboard.setDisplayName(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Scoreboard.Island.Solo.Displayname")));
scoreboard.setDisplayList(configLoad.getStringList("Scoreboard.Island.Solo.Occupied.Displaylines"));
} else {
scoreboard.setDisplayName(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Scoreboard.Island.Team.Displayname")));
scoreboard.setDisplayList(configLoad.getStringList("Scoreboard.Island.Team.Occupied.Displaylines"));
Map<String, String> displayVariables = new HashMap<>();
displayVariables.put("%owner", configLoad.getString("Scoreboard.Island.Team.Word.Owner"));
displayVariables.put("%operator", configLoad.getString("Scoreboard.Island.Team.Word.Operator"));
displayVariables.put("%member", configLoad.getString("Scoreboard.Island.Team.Word.Member"));
scoreboard.setDisplayVariables(displayVariables);
}
scoreboard.run();
if (worldList == Location.World.Normal) {
if (!island.isWeatherSynchronised()) {
player.setPlayerTime(island.getTime(), fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Weather.Time.Cycle"));
player.setPlayerWeather(island.getWeather());
}
}
islandManager.giveUpgrades(player, island);
return;
} else if (island.isOpen() || island.isCoopPlayer(player.getUniqueId())) {
if (!island.isOpen() && island.isCoopPlayer(player.getUniqueId())) {
if (islandManager.removeCoopPlayers(island, null)) {
return;
}
}
PlayerData playerData = getPlayerData(player);
playerData.setIsland(island.getOwnerUUID());
if (worldList == Location.World.Normal) {
if (!island.isWeatherSynchronised()) {
player.setPlayerTime(island.getTime(), fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Weather.Time.Cycle"));
player.setPlayerWeather(island.getWeather());
}
}
islandManager.giveUpgrades(player, island);
ScoreboardManager scoreboardManager = skyblock.getScoreboardManager();
if (scoreboardManager != null) {
for (Player all : Bukkit.getOnlinePlayers()) {
PlayerData targetPlayerData = getPlayerData(all);
if (targetPlayerData.getOwner() != null && targetPlayerData.getOwner().equals(island.getOwnerUUID())) {
Scoreboard scoreboard = scoreboardManager.getScoreboard(all);
scoreboard.cancel();
if ((island.getRole(Role.Member).size() + island.getRole(Role.Operator).size() + 1) == 1) {
scoreboard.setDisplayName(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Scoreboard.Island.Solo.Displayname")));
scoreboard.setDisplayList(configLoad.getStringList("Scoreboard.Island.Solo.Occupied.Displaylines"));
} else {
scoreboard.setDisplayName(ChatColor.translateAlternateColorCodes('&', configLoad.getString("Scoreboard.Island.Team.Displayname")));
scoreboard.setDisplayList(configLoad.getStringList("Scoreboard.Island.Team.Occupied.Displaylines"));
Map<String, String> displayVariables = new HashMap<>();
displayVariables.put("%owner", configLoad.getString("Scoreboard.Island.Team.Word.Owner"));
displayVariables.put("%operator", configLoad.getString("Scoreboard.Island.Team.Word.Operator"));
displayVariables.put("%member", configLoad.getString("Scoreboard.Island.Team.Word.Member"));
scoreboard.setDisplayVariables(displayVariables);
}
scoreboard.run();
}
}
}
return;
} else {
messageManager.sendMessage(player, configLoad.getString("Island.Visit.Closed.Island.Message").replace("%player", targetPlayerName));
}
}
LocationUtil.teleportPlayerToSpawn(player);
return;
}
}
@ -197,11 +237,6 @@ public class PlayerDataManager {
for (Location.World worldList : Location.World.values()) {
if (LocationUtil.isLocationAtLocationRadius(player.getLocation(), visit.getLocation(worldList), visit.getRadius())) {
BanManager banManager = skyblock.getBanManager();
Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml"));
FileConfiguration configLoad = config.getFileConfiguration();
Player targetPlayer = Bukkit.getServer().getPlayer(visitIslandList);
String targetPlayerName;
@ -214,26 +249,43 @@ public class PlayerDataManager {
if (banManager.hasIsland(visitIslandList) && fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Visitor.Banning") && banManager.getIsland(visitIslandList).isBanned(player.getUniqueId())) {
messageManager.sendMessage(player, configLoad.getString("Island.Visit.Teleport.Island.Message").replace("%player", targetPlayerName));
} else {
if (visit.isOpen()) {
PlayerData playerData = getPlayerData(player);
playerData.setIsland(visitIslandList);
islandManager.loadIsland(visitIslandList);
Island island = islandManager.getIsland(visitIslandList);
if (island != null) {
islandManager.giveUpgrades(player, island);
islandManager.loadIsland(visitIslandList);
Island island = islandManager.getIsland(visitIslandList);
if (island != null) {
if (island.isOpen() || island.isCoopPlayer(player.getUniqueId())) {
if (!island.isOpen() && island.isCoopPlayer(player.getUniqueId())) {
if (islandManager.removeCoopPlayers(island, null)) {
islandManager.unloadIsland(island, visitIslandList);
return;
}
}
PlayerData playerData = getPlayerData(player);
playerData.setIsland(visitIslandList);
if (island != null) {
if (worldList == Location.World.Normal) {
if (!island.isWeatherSynchronised()) {
player.setPlayerTime(island.getTime(), fileManager.getConfig(new File(skyblock.getDataFolder(), "config.yml")).getFileConfiguration().getBoolean("Island.Weather.Time.Cycle"));
player.setPlayerWeather(island.getWeather());
}
}
islandManager.giveUpgrades(player, island);
}
return;
} else {
islandManager.unloadIsland(island, visitIslandList);
messageManager.sendMessage(player, configLoad.getString("Island.Visit.Closed.Island.Message").replace("%player", targetPlayerName));
}
return;
} else {
messageManager.sendMessage(player, configLoad.getString("Island.Visit.Closed.Island.Message").replace("%player", targetPlayerName));
}
}
LocationUtil.teleportPlayerToSpawn(player);
return;
}
}

View File

@ -173,7 +173,7 @@ public class Scoreboard {
Level level = island.getLevel();
if (island.getRole(Role.Member).size() == 0 && island.getRole(Role.Operator).size() == 0) {
displayLine = displayLine.replace("%island_level", "" + NumberUtil.formatNumber(level.getLevel())).replace("%island_members", ChatColor.RED + "0").replace("%island_role", ChatColor.RED + "null").replace("%island_visitors", "" + island.getVisitors().size()).replace("%island_size", "" + island.getSize()).replace("%island_radius", "" + island.getRadius());
displayLine = displayLine.replace("%island_level", "" + NumberUtil.formatNumber(level.getLevel())).replace("%island_members", ChatColor.RED + "0").replace("%island_role", ChatColor.RED + "null").replace("%island_visitors", "" + islandManager.getVisitorsAtIsland(island).size()).replace("%island_size", "" + island.getSize()).replace("%island_radius", "" + island.getRadius());
} else {
int islandMembers = 1 + island.getRole(Role.Member).size() + island.getRole(Role.Operator).size();
String islandRole = "";
@ -186,7 +186,7 @@ public class Scoreboard {
islandRole = displayVariables.get("%member");
}
displayLine = displayLine.replace("%island_level", "" + NumberUtil.formatNumber(level.getLevel())).replace("%island_members", "" + islandMembers).replace("%island_role", islandRole).replace("%island_visitors", "" + island.getVisitors().size()).replace("%island_size", "" + island.getSize()).replace("%island_radius", "" + island.getRadius());
displayLine = displayLine.replace("%island_level", "" + NumberUtil.formatNumber(level.getLevel())).replace("%island_members", "" + islandMembers).replace("%island_role", islandRole).replace("%island_visitors", "" + islandManager.getVisitorsAtIsland(island).size()).replace("%island_size", "" + island.getSize()).replace("%island_radius", "" + island.getRadius());
}
} else {
displayLine = displayLine.replace("%island_level", ChatColor.RED + "0").replace("%island_members", ChatColor.RED + "0").replace("%island_role", ChatColor.RED + "null").replace("%island_size", ChatColor.RED + "0").replace("%island_radius", ChatColor.RED + "0");

View File

@ -45,7 +45,7 @@ public class ScoreboardManager {
if (island.getRole(Role.Member).size() == 0 && island.getRole(Role.Operator).size() == 0) {
scoreboard.setDisplayName(ChatColor.translateAlternateColorCodes('&', config.getFileConfiguration().getString("Scoreboard.Island.Solo.Displayname")));
if (island.getVisitors().size() == 0) {
if (islandManager.getVisitorsAtIsland(island).size() == 0) {
scoreboard.setDisplayList(config.getFileConfiguration().getStringList("Scoreboard.Island.Solo.Empty.Displaylines"));
} else {
scoreboard.setDisplayList(config.getFileConfiguration().getStringList("Scoreboard.Island.Solo.Occupied.Displaylines"));
@ -53,7 +53,7 @@ public class ScoreboardManager {
} else {
scoreboard.setDisplayName(ChatColor.translateAlternateColorCodes('&', config.getFileConfiguration().getString("Scoreboard.Island.Team.Displayname")));
if (island.getVisitors().size() == 0) {
if (islandManager.getVisitorsAtIsland(island).size() == 0) {
scoreboard.setDisplayList(config.getFileConfiguration().getStringList("Scoreboard.Island.Team.Empty.Displaylines"));
} else {
scoreboard.setDisplayList(config.getFileConfiguration().getStringList("Scoreboard.Island.Team.Occupied.Displaylines"));
@ -98,7 +98,7 @@ public class ScoreboardManager {
if (island.getRole(Role.Member).size() == 0 && island.getRole(Role.Operator).size() == 0) {
scoreboard.setDisplayName(ChatColor.translateAlternateColorCodes('&', config.getFileConfiguration().getString("Scoreboard.Island.Solo.Displayname")));
if (island.getVisitors().size() == 0) {
if (islandManager.getVisitorsAtIsland(island).size() == 0) {
scoreboard.setDisplayList(config.getFileConfiguration().getStringList("Scoreboard.Island.Solo.Empty.Displaylines"));
} else {
scoreboard.setDisplayList(config.getFileConfiguration().getStringList("Scoreboard.Island.Solo.Occupied.Displaylines"));
@ -106,7 +106,7 @@ public class ScoreboardManager {
} else {
scoreboard.setDisplayName(ChatColor.translateAlternateColorCodes('&', config.getFileConfiguration().getString("Scoreboard.Island.Team.Displayname")));
if (island.getVisitors().size() == 0) {
if (islandManager.getVisitorsAtIsland(island).size() == 0) {
scoreboard.setDisplayList(config.getFileConfiguration().getStringList("Scoreboard.Island.Team.Empty.Displaylines"));
} else {
scoreboard.setDisplayList(config.getFileConfiguration().getStringList("Scoreboard.Island.Team.Occupied.Displaylines"));

View File

@ -10,6 +10,7 @@ import org.bukkit.Location;
import org.bukkit.configuration.file.FileConfiguration;
import me.goodandevil.skyblock.SkyBlock;
import me.goodandevil.skyblock.ban.Ban;
import me.goodandevil.skyblock.config.FileManager.Config;
import me.goodandevil.skyblock.island.Level;
@ -171,6 +172,10 @@ public class Visit {
this.open = open;
}
public Ban getBan() {
return skyblock.getBanManager().getIsland(getOwnerUUID());
}
public void save() {
Config config = skyblock.getFileManager().getConfig(new File(new File(skyblock.getDataFolder().toString() + "/visit-data"), islandOwnerUUID.toString() + ".yml"));

View File

@ -121,7 +121,7 @@ public class VisitManager {
Config config = fileManager.getConfig(new File(skyblock.getDataFolder(), "language.yml"));
FileConfiguration configLoad = config.getFileConfiguration();
for (UUID visitorList : island.getVisitors()) {
for (UUID visitorList : skyblock.getIslandManager().getVisitorsAtIsland(island)) {
Player targetPlayer = Bukkit.getServer().getPlayer(visitorList);
LocationUtil.teleportPlayerToSpawn(targetPlayer);

View File

@ -84,6 +84,14 @@ Island:
Invite:
# Time until Island invite expires
Time: 300
Coop:
# If enabled, cooped players will not be saved when they disconnect from the server.
Unload: false
Visit:
Menu:
# If disabled, any islands the player has been banned from will be removed when they
# open the Island Visit menu.
Bans: false
Visitor:
# When an Island is unloaded if enabled players won't be able to visit the Island
# even if it's open.

View File

@ -289,6 +289,8 @@ Command:
Message: "&bSkyBlock &8| &cError&8: &eThat player is not a member of your Island."
Yourself:
Message: "&bSkyBlock &8| &cError&8: &eYou cannot kick yourself from the Island."
Cooped:
Message: "&bSkyBlock &8| &cError&8: &eYou cannot kick a cooped player."
Role:
Operator:
Message: "&bSkyBlock &8| &cError&8: &eYou cannot kick a member the Island the same role as you."
@ -425,6 +427,30 @@ Command:
Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner."
Island:
Message: "&bSkyBlock &8| &cError&8: &eThat player is not a Member or owns an Island."
Coop:
Info:
Message: "&f&oOpen the Island Coop menu or add/remove coop players."
Permisison:
Message: "&bSkyBlock &8| &cError&8: &eYou do not have the right to do that."
Invalid:
Message: "&bSkyBlock &8| &cError&8: &eInvalid: /island coop [<player>]"
Owner:
Message: "&bSkyBlock &8| &cError&8: &eYou are not an Island owner."
Found:
Message: "&bSkyBlock &8| &cError&8: &eA player by that name was not found."
Yourself:
Message: "&bSkyBlock &8| &cError&8: &eYou cannot coop yourself because you're a Member of the Island."
Member:
Message: "&bSkyBlock &8| &cError&8: &eThat player cannot be cooped because they are a Member of the Island."
Banned:
Message: "&bSkyBlock &8| &cError&8: &eYou cannot coop a banned player."
Added:
Message: "&bSkyBlock &8| &aInfo&8: &eYou have cooped the player &d%player&e."
Removed:
Sender:
Message: "&bSkyBlock &8| &aInfo&8: &eYou have removed the coop player &d%player&e."
Target:
Message: "&bSkyBlock &8| &aInfo&8: &eYou are no longer a coop member of that Island."
Members:
Info:
Message: "&f&oOpen the Island Members menu."
@ -838,6 +864,12 @@ Island:
Message: "&8[&bSkyBlock &8| &dChat&8] %role &e%player&8: &f%message"
Untoggled:
Message: "&bSkyBlock &8| &aInfo&8: &eThe Island chat has been untoggled because there are no Island members online. Chat messages will now be visible for all players."
Coop:
Removed:
Owner:
Message: "&bSkyBlock &8| &aInfo&8: &eYou have been removed from the island because the owner went offline."
Operator:
Message: "&bSkyBlock &8| &aInfo&8: &eYou have been removed from the island because the owner and no operators of the island are online."
Admin:
Creator:
Permission:
@ -1810,6 +1842,8 @@ Menu:
Displayname: "&aSet Biome"
Weather:
Displayname: "&aSet Weather"
CoopPlayers:
Displayname: "&aCoop Players"
Owner:
Title: "&8Island Settings"
Item:
@ -2056,6 +2090,36 @@ Menu:
- "&e%island_visitors"
Visitor:
Displayname: "&b%player"
Coop:
Title: "&8Island Coop"
Item:
Word:
Enter: "Enter player"
Exit:
Displayname: "&cExit Island Coop"
Previous:
Displayname: "&a< Previous Page"
Next:
Displayname: "&aNext Page >"
Barrier:
Displayname: "&cCooped Players Below"
Information:
Displayname: "&bInformation"
Lore:
- "&7Allow certain players to"
- "&7enter your Island while"
- "&7an operator or owner is"
- "&7online even if the island"
- "&7island closed to visitors."
- ""
- "&eClick to coop a player!"
Nothing:
Displayname: "&cThere are no cooped players."
Coop:
Displayname: "&a%player"
Lore:
- ""
- "&eClick to remove player!"
Members:
Title: "&8Island Members"
Item:
@ -2392,6 +2456,8 @@ Menu:
Bans:
Title: "&8Island Ban"
Item:
Word:
Enter: "Enter player"
Exit:
Displayname: "&cExit Island Bans"
Previous:
@ -2400,10 +2466,14 @@ Menu:
Displayname: "&aNext Page >"
Barrier:
Displayname: "&cIsland Bans Below"
Statistics:
Displayname: "&bIsland Bans"
Information:
Displayname: "&bInformation"
Lore:
- "&7Bans&8: &f%bans"
- "&7Prevent certain players"
- "&7from entering your Island"
- "&7by banning them."
- ""
- "&eClick to ban a player!"
Nothing:
Displayname: "&cThere are no Bans at your Island."
Ban:
@ -2791,6 +2861,8 @@ Menu:
Displayname: "&aSet Biome"
Weather:
Displayname: "&aSet Weather"
CoopPlayers:
Displayname: "&aCoop Players"
Owner:
Title: "&8Settings Editor - Island"
Item:

View File

@ -1,6 +1,6 @@
name: SkyBlock
main: me.goodandevil.skyblock.SkyBlock
version: 36
version: 37
api-version: 1.13
description: A unique SkyBlock plugin
author: GoodAndEvil

View File

@ -95,6 +95,7 @@ Settings:
VisitorSpawn: true
Biome: true
Weather: true
CoopPlayers: true
Owner:
NaturalMobSpawning: true
MobGriefing: false