Load communities in the login process, fix a few bugs
This commit is contained in:
parent
66bfcc9d9b
commit
e0245b562c
@ -16,7 +16,6 @@ import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.regex.Pattern;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -42,7 +41,6 @@ import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.communities.commands.CommunityCommand;
|
||||
import mineplex.core.communities.data.BrowserCommunity;
|
||||
import mineplex.core.communities.data.Community;
|
||||
import mineplex.core.communities.data.Community.PrivacySetting;
|
||||
import mineplex.core.communities.data.CommunityJoinRequestInfo;
|
||||
import mineplex.core.communities.data.CommunityMemberData;
|
||||
import mineplex.core.communities.data.CommunityMemberInfo;
|
||||
@ -87,7 +85,6 @@ import mineplex.core.recharge.Recharge;
|
||||
import mineplex.core.serverConfig.ServerConfiguration;
|
||||
import mineplex.serverdata.Region;
|
||||
import mineplex.serverdata.commands.ServerCommandManager;
|
||||
import mineplex.serverdata.data.DataRepository;
|
||||
import mineplex.serverdata.data.PlayerStatus;
|
||||
import mineplex.serverdata.data.ServerGroup;
|
||||
import mineplex.serverdata.redis.RedisDataRepository;
|
||||
@ -119,25 +116,25 @@ public class CommunityManager extends MiniDbClientPlugin<CommunityMemberData>
|
||||
|
||||
public final static String CHAT_PREFIX = "!";
|
||||
public final static String COMMUNITY_CHAT_KEY = "core.communities.chat.selected";
|
||||
public final static int MAX_NAME_LENGTH = 15;
|
||||
private final static int MAX_NAME_LENGTH = 15;
|
||||
|
||||
private final int UPDATE_CYCLE_SECONDS = 10; // The number of seconds between dirty communities refreshes
|
||||
private final int CACHE_INVALIDATION_SECONDS = 300; // The number of seconds between full communities refreshes
|
||||
public final Pattern VALID_NAME_PATTERN = Pattern.compile("^[A-Za-z0-9]{1," + MAX_NAME_LENGTH + "}$");
|
||||
private static final int UPDATE_CYCLE_SECONDS = 10; // The number of seconds between dirty communities refreshes
|
||||
private static final int CACHE_INVALIDATION_SECONDS = 300; // The number of seconds between full communities refreshes
|
||||
private final Pattern VALID_NAME_PATTERN = Pattern.compile("^[A-Za-z0-9]{1," + MAX_NAME_LENGTH + "}$");
|
||||
public final Pattern NON_ALPHANUMERIC_PATTERN = Pattern.compile("[^A-Za-z0-9]");
|
||||
public final List<String> BLOCKED_NAMES = Arrays.asList("help", "chat", "create", "description", "disband", "invite", "join", "mcs", "rename", "uninvite", "trainee", "mod", "moderator", "srmod", "seniormod", "seniormoderator", "builder", "maplead", "twitch", "youtube", "support", "admin", "administrator", "leader", "dev", "developer", "owner", "party", "mineplex", "mineplexofficial", "staff", "mineplexstaff", "qualityassurance", "traineemanagement", "modcoordination", "forumninja", "communitymanagement", "event", "socialmedia");
|
||||
|
||||
private final CommunityRepository _repo;
|
||||
private final Map<Integer, Community> _loadedCommunities;
|
||||
private final Map<Integer, BrowserCommunity> _browserCommunities;
|
||||
private final Map<Integer, Community> _loadedCommunities = new ConcurrentHashMap<>();
|
||||
private final Map<Integer, BrowserCommunity> _browserCommunities = new ConcurrentHashMap<>();
|
||||
|
||||
private final Random _rand = new Random();
|
||||
private final List<Integer> _browserIds = new LinkedList<>();
|
||||
|
||||
private final List<UUID> _creating = new ArrayList<>();
|
||||
|
||||
private Integer mcsCommunity = null;
|
||||
private boolean _us;
|
||||
private Integer _mcsCommunity = null;
|
||||
private Region _region;
|
||||
|
||||
private final Set<Community> _dirty = Collections.newSetFromMap(new ConcurrentHashMap<>()); // Communities with redis updates
|
||||
|
||||
@ -149,20 +146,16 @@ public class CommunityManager extends MiniDbClientPlugin<CommunityMemberData>
|
||||
private final CoreClientManager _clientManager;
|
||||
private final CustomDataManager _customDataManager;
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@SuppressWarnings({"deprecation", "unchecked"})
|
||||
private CommunityManager()
|
||||
{
|
||||
super("Communities");
|
||||
|
||||
DataRepository<PlayerStatus> statusRepo = new RedisDataRepository<>(ServerManager.getMasterConnection(),
|
||||
RedisDataRepository<PlayerStatus> statusRepo = new RedisDataRepository<>(ServerManager.getMasterConnection(),
|
||||
ServerManager.getSlaveConnection(), Region.currentRegion(), PlayerStatus.class, "playerStatus");
|
||||
|
||||
_us = _plugin.getConfig().getBoolean("serverstatus.us");
|
||||
|
||||
_repo = new CommunityRepository(_plugin, statusRepo, _us);
|
||||
|
||||
_loadedCommunities = new ConcurrentHashMap<>();
|
||||
_browserCommunities = new ConcurrentHashMap<>();
|
||||
_region = Region.currentRegion();
|
||||
_repo = new CommunityRepository(statusRepo, _region);
|
||||
|
||||
runAsync(() ->
|
||||
{
|
||||
@ -189,7 +182,7 @@ public class CommunityManager extends MiniDbClientPlugin<CommunityMemberData>
|
||||
while (resultSet.next())
|
||||
{
|
||||
String region = resultSet.getString("region");
|
||||
if ((_us && region.equalsIgnoreCase("US")) || (!_us && region.equalsIgnoreCase("EU")))
|
||||
if (region.equalsIgnoreCase(_region.name()))
|
||||
{
|
||||
CommunityManager.this.Get(uuid).Invites.add(resultSet.getInt("communityId"));
|
||||
}
|
||||
@ -225,12 +218,12 @@ public class CommunityManager extends MiniDbClientPlugin<CommunityMemberData>
|
||||
ServerGroup group = require(ServerConfiguration.class).getServerGroup();
|
||||
if (group.getName().startsWith("COM-"))
|
||||
{
|
||||
mcsCommunity = Integer.valueOf(group.getName().split("-")[1]);
|
||||
_mcsCommunity = Integer.valueOf(group.getName().split("-")[1]);
|
||||
|
||||
Community community = getLoadedCommunity(mcsCommunity);
|
||||
Community community = getLoadedCommunity(_mcsCommunity);
|
||||
if (community == null)
|
||||
{
|
||||
_repo.loadCommunity(_loadedCommunities, mcsCommunity);
|
||||
_repo.loadCommunity(_loadedCommunities, _mcsCommunity);
|
||||
}
|
||||
}
|
||||
|
||||
@ -343,9 +336,7 @@ public class CommunityManager extends MiniDbClientPlugin<CommunityMemberData>
|
||||
|
||||
public void loadBrowserCommunities(final List<Integer> displaying, final Runnable onComplete)
|
||||
{
|
||||
runAsync(() ->
|
||||
{
|
||||
List<Integer> load = new ArrayList<>(displaying.size());
|
||||
final List<Integer> load = new ArrayList<>(displaying.size());
|
||||
for (Integer id : displaying)
|
||||
{
|
||||
if (!_loadedCommunities.containsKey(id) && !_browserCommunities.containsKey(id))
|
||||
@ -354,9 +345,21 @@ public class CommunityManager extends MiniDbClientPlugin<CommunityMemberData>
|
||||
}
|
||||
}
|
||||
|
||||
if (!load.isEmpty())
|
||||
{
|
||||
runAsync(() ->
|
||||
{
|
||||
_repo.loadBrowserCommunities(_browserCommunities, load);
|
||||
|
||||
if (onComplete != null)
|
||||
{
|
||||
runSync(onComplete);
|
||||
}
|
||||
});
|
||||
} else if (onComplete != null)
|
||||
{
|
||||
runSync(onComplete);
|
||||
}
|
||||
}
|
||||
|
||||
public void tempLoadCommunity(final int id, final Consumer<Community> consumer)
|
||||
@ -377,10 +380,9 @@ public class CommunityManager extends MiniDbClientPlugin<CommunityMemberData>
|
||||
return community != null ? community : _browserCommunities.get(id);
|
||||
}
|
||||
|
||||
public void updateBrowserStatus(Community community)
|
||||
private void updateBrowserStatus(ICommunity community)
|
||||
{
|
||||
_repo.updateBrowserStatus(community, community.getPrivacySetting() != PrivacySetting.PRIVATE
|
||||
&& community.getMembers().size() >= 5);
|
||||
_repo.updateBrowserStatus(community, community.isBrowserEligible());
|
||||
}
|
||||
|
||||
public int getCount()
|
||||
@ -676,7 +678,7 @@ public class CommunityManager extends MiniDbClientPlugin<CommunityMemberData>
|
||||
|
||||
public void handleInvite(Player sender, Community community, String target)
|
||||
{
|
||||
CommunityJoinRequestInfo[] jr = community.getJoinRequests().values().stream().filter(data -> data.Name.equalsIgnoreCase(target)).toArray(size -> new CommunityJoinRequestInfo[size]);
|
||||
CommunityJoinRequestInfo[] jr = community.getJoinRequests().values().stream().filter(data -> data.Name.equalsIgnoreCase(target)).toArray(CommunityJoinRequestInfo[]::new);
|
||||
if (jr.length == 1)
|
||||
{
|
||||
UtilPlayer.message(sender, F.main(getName(), "You have accepted " + F.name(target) + "'s join request to " + F.name(community.getName()) + "!"));
|
||||
@ -725,15 +727,15 @@ public class CommunityManager extends MiniDbClientPlugin<CommunityMemberData>
|
||||
});
|
||||
}
|
||||
|
||||
public void handleRejectInvite(Player sender, Community community)
|
||||
public void handleRejectInvite(Player sender, int id)
|
||||
{
|
||||
final String playerName = _clientManager.Get(sender).getName();
|
||||
runAsync(() ->
|
||||
{
|
||||
_repo.deleteInviteToCommunity(community.getId(), playerName);
|
||||
_repo.deleteInviteToCommunity(id, playerName);
|
||||
});
|
||||
|
||||
new CommunityUnInvite(community.getId(), sender.getName(), sender.getName(), sender.getUniqueId().toString(), false).publish();
|
||||
new CommunityUnInvite(id, sender.getName(), sender.getName(), sender.getUniqueId().toString(), false).publish();
|
||||
}
|
||||
|
||||
public void handleJoinRequest(Player sender, Community community)
|
||||
@ -768,7 +770,7 @@ public class CommunityManager extends MiniDbClientPlugin<CommunityMemberData>
|
||||
new CommunityCloseJoinRequest(community.getId(), sender.getName(), info.Name, info.UUID.toString(), info.AccountId, announce).publish();
|
||||
}
|
||||
|
||||
public void handleJoin(Player sender, Community community, boolean fromInvite)
|
||||
public void handleJoin(Player sender, ICommunity community, boolean fromInvite)
|
||||
{
|
||||
final int accountId = _clientManager.getAccountId(sender);
|
||||
final String playerName = _clientManager.Get(sender).getName();
|
||||
@ -780,6 +782,8 @@ public class CommunityManager extends MiniDbClientPlugin<CommunityMemberData>
|
||||
_repo.deleteInviteToCommunity(community.getId(), playerName);
|
||||
}
|
||||
updateBrowserStatus(community);
|
||||
_repo.handlePlayerJoin(_loadedCommunities, Collections.singletonList(community.getId()), accountId);
|
||||
_browserCommunities.remove(community.getId());
|
||||
});
|
||||
new CommunityUpdateMembership(community.getId(), sender.getName(), sender.getName(), sender.getUniqueId().toString(), accountId, false, false).publish();
|
||||
if (fromInvite)
|
||||
@ -901,18 +905,36 @@ public class CommunityManager extends MiniDbClientPlugin<CommunityMemberData>
|
||||
@Override
|
||||
public void processLoginResultSet(String playerName, UUID uuid, int accountId, ResultSet resultSet) throws SQLException
|
||||
{
|
||||
List<Integer> load = new ArrayList<>();
|
||||
CommunityMemberData data = new CommunityMemberData();
|
||||
while (resultSet.next())
|
||||
{
|
||||
Integer communityId = resultSet.getInt("communityId");
|
||||
CommunityRole role = CommunityRole.parseRole(resultSet.getString("communityRole"));
|
||||
String region = resultSet.getString("region");
|
||||
if ((_us && region.equalsIgnoreCase("US")) || (!_us && region.equalsIgnoreCase("EU")))
|
||||
if (region.equalsIgnoreCase(_region.name()))
|
||||
{
|
||||
data.joinCommunity(communityId, role);
|
||||
if (getLoadedCommunity(communityId) == null)
|
||||
{
|
||||
load.add(communityId);
|
||||
}
|
||||
}
|
||||
}
|
||||
Set(uuid, data);
|
||||
|
||||
if (!load.isEmpty())
|
||||
{
|
||||
_browserCommunities.keySet().removeAll(load);
|
||||
_repo.handlePlayerJoin(_loadedCommunities, load, accountId);
|
||||
System.out.println("Loaded communities: " + load + "; Total: " + _loadedCommunities.size());
|
||||
}
|
||||
|
||||
System.out.println("invites = " + data.Invites); // TODO debug
|
||||
if (!data.Invites.isEmpty())
|
||||
{
|
||||
loadBrowserCommunities(data.Invites, null);
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true)
|
||||
@ -992,44 +1014,25 @@ public class CommunityManager extends MiniDbClientPlugin<CommunityMemberData>
|
||||
{
|
||||
UtilPlayer.message(event.getPlayer(), F.main(getName(), "You have been invited to join " + F.elem(data.Invites.size()) + " communities!"));
|
||||
}
|
||||
|
||||
Set<Integer> communityIds = data.getCommunityIds();
|
||||
|
||||
final List<Integer> load = communityIds.stream().filter(id -> getLoadedCommunity(id) == null).collect(Collectors.toList());
|
||||
if (load.isEmpty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
final int accountId = _clientManager.getAccountId(player);
|
||||
|
||||
_browserCommunities.keySet().removeAll(load);
|
||||
|
||||
runAsync(() ->
|
||||
{
|
||||
_repo.handlePlayerJoin(_loadedCommunities, load, accountId);
|
||||
System.out.println("Loaded communities: " + load + "; Total: " + _loadedCommunities.size());
|
||||
});
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW)
|
||||
public void onPlayerQuit(PlayerQuitEvent event)
|
||||
{
|
||||
// Remove their communities from memory if they're the last player
|
||||
List<Integer> unloaded = new ArrayList<>();
|
||||
Player player = event.getPlayer();
|
||||
List<Community> communities = Get(player).getCommunities();
|
||||
for (Community community : communities)
|
||||
{
|
||||
if (community.getId().equals(mcsCommunity)
|
||||
if (community.getId().equals(_mcsCommunity)
|
||||
|| community.getMembers().keySet().stream().anyMatch(uuid -> !player.getUniqueId().equals(uuid) && Bukkit.getPlayer(uuid) != null))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
System.out.println("Unloading community: " + community.getId());
|
||||
|
||||
// If it's a browser community, keep some of the data
|
||||
if (community.isBrowserEilgible())
|
||||
if (community.isBrowserEligible())
|
||||
{
|
||||
_browserCommunities.put(community.getId(), community.toBrowser());
|
||||
}
|
||||
@ -1037,6 +1040,12 @@ public class CommunityManager extends MiniDbClientPlugin<CommunityMemberData>
|
||||
// Unload this community from memory
|
||||
_dirty.remove(community);
|
||||
_loadedCommunities.remove(community.getId());
|
||||
unloaded.add(community.getId());
|
||||
}
|
||||
|
||||
if (!unloaded.isEmpty())
|
||||
{
|
||||
System.out.println("Unloaded communities: " + unloaded + "; Total: " + _loadedCommunities.size());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,9 @@ import mineplex.core.communities.data.CommunityJoinRequestInfo;
|
||||
import mineplex.core.communities.data.CommunityMemberInfo;
|
||||
import mineplex.core.communities.data.CommunityRole;
|
||||
import mineplex.core.communities.data.CommunitySetting;
|
||||
import mineplex.core.communities.data.ICommunity;
|
||||
import mineplex.core.game.GameDisplay;
|
||||
import mineplex.serverdata.Region;
|
||||
import mineplex.serverdata.data.DataRepository;
|
||||
import mineplex.serverdata.data.PlayerStatus;
|
||||
import mineplex.serverdata.database.DBPool;
|
||||
@ -30,6 +32,7 @@ import mineplex.serverdata.database.RepositoryBase;
|
||||
import mineplex.serverdata.database.column.ColumnBoolean;
|
||||
import mineplex.serverdata.database.column.ColumnInt;
|
||||
import mineplex.serverdata.database.column.ColumnVarChar;
|
||||
import mineplex.serverdata.redis.RedisDataRepository;
|
||||
|
||||
public class CommunityRepository extends RepositoryBase
|
||||
{
|
||||
@ -55,14 +58,14 @@ public class CommunityRepository extends RepositoryBase
|
||||
private static final String SET_READING_CHAT_IN = "UPDATE communityMembers SET readingChat=? WHERE accountId=? AND communityId=?;";
|
||||
|
||||
private DataRepository<PlayerStatus> _repo;
|
||||
private boolean _us;
|
||||
private Region _region;
|
||||
|
||||
public CommunityRepository(JavaPlugin plugin, DataRepository<PlayerStatus> statusRepo, boolean us)
|
||||
public CommunityRepository(RedisDataRepository<PlayerStatus> statusRepo, Region region)
|
||||
{
|
||||
super(DBPool.getAccount());
|
||||
|
||||
_repo = statusRepo;
|
||||
_us = us;
|
||||
_region = region;
|
||||
}
|
||||
|
||||
public void communityExists(String name, Consumer<Boolean> result)
|
||||
@ -188,7 +191,7 @@ public class CommunityRepository extends RepositoryBase
|
||||
updateMembersAndJoinRequests(communities);
|
||||
}
|
||||
|
||||
public void updateBrowserStatus(Community community, boolean flag)
|
||||
public void updateBrowserStatus(ICommunity community, boolean flag)
|
||||
{
|
||||
updateCommunitySetting(CommunitySetting.SHOW_IN_BROWSER, community.getId(), String.valueOf(flag));
|
||||
}
|
||||
@ -285,7 +288,8 @@ public class CommunityRepository extends RepositoryBase
|
||||
{
|
||||
if (!com.isBrowserFlagSet())
|
||||
{
|
||||
updateBrowserStatus(com, com.isBrowserEilgible());
|
||||
updateBrowserStatus(com, com.isBrowserEligible());
|
||||
com.setBrowserFlag();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -444,7 +448,7 @@ public class CommunityRepository extends RepositoryBase
|
||||
{
|
||||
idCallback.run(-1);
|
||||
}
|
||||
}, () -> idCallback.run(-1), new ColumnVarChar("name", 15, name), new ColumnVarChar("region", 5, _us ? "US" : "EU"));
|
||||
}, () -> idCallback.run(-1), new ColumnVarChar("name", 15, name), new ColumnVarChar("region", 5, _region.name()));
|
||||
}
|
||||
catch (SQLException e)
|
||||
{
|
||||
|
@ -1,50 +0,0 @@
|
||||
package mineplex.core.communities;
|
||||
|
||||
import org.bukkit.Material;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
|
||||
public enum MCSTheme
|
||||
{
|
||||
CANDYLAND(1, C.cPurple + "Candyland", Material.COOKIE, 1000, "Lobby_MPS_Candyland.zip")
|
||||
;
|
||||
|
||||
private final int _id;
|
||||
private final String _displayName, _file;
|
||||
private final Material _displayType;
|
||||
private final int _cost;
|
||||
|
||||
private MCSTheme(int id, String displayName, Material displayType, int cost, String file)
|
||||
{
|
||||
_id = id;
|
||||
_displayName = displayName;
|
||||
_displayType = displayType;
|
||||
_cost = cost;
|
||||
_file = file;
|
||||
}
|
||||
|
||||
public int getId()
|
||||
{
|
||||
return _id;
|
||||
}
|
||||
|
||||
public String getDisplayName()
|
||||
{
|
||||
return _displayName;
|
||||
}
|
||||
|
||||
public Material getDisplayType()
|
||||
{
|
||||
return _displayType;
|
||||
}
|
||||
|
||||
public int getCost()
|
||||
{
|
||||
return _cost;
|
||||
}
|
||||
|
||||
public String getFile()
|
||||
{
|
||||
return _file;
|
||||
}
|
||||
}
|
@ -1,5 +1,7 @@
|
||||
package mineplex.core.communities.data;
|
||||
|
||||
import com.google.common.base.Preconditions;
|
||||
|
||||
import mineplex.core.game.GameDisplay;
|
||||
|
||||
public class BrowserCommunity implements ICommunity
|
||||
@ -15,6 +17,9 @@ public class BrowserCommunity implements ICommunity
|
||||
{
|
||||
_id = id;
|
||||
_name = name;
|
||||
_description = "No Description Set";
|
||||
_favoriteGame = GameDisplay.ChampionsCTF;
|
||||
_privacySetting = Community.PrivacySetting.RECRUITING;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -61,19 +66,19 @@ public class BrowserCommunity implements ICommunity
|
||||
|
||||
public BrowserCommunity setDescription(String description)
|
||||
{
|
||||
_description = description;
|
||||
_description = Preconditions.checkNotNull(description);
|
||||
return this;
|
||||
}
|
||||
|
||||
public BrowserCommunity setFavoriteGame(GameDisplay favoriteGame)
|
||||
{
|
||||
_favoriteGame = favoriteGame;
|
||||
_favoriteGame = Preconditions.checkNotNull(favoriteGame);
|
||||
return this;
|
||||
}
|
||||
|
||||
public BrowserCommunity setPrivacySetting(Community.PrivacySetting privacySetting)
|
||||
{
|
||||
_privacySetting = privacySetting;
|
||||
_privacySetting = Preconditions.checkNotNull(privacySetting);
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -88,4 +93,17 @@ public class BrowserCommunity implements ICommunity
|
||||
{
|
||||
return o == this || (o instanceof BrowserCommunity && ((BrowserCommunity) o)._id == _id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "BrowserCommunity{" +
|
||||
"_id=" + _id +
|
||||
", _members=" + _members +
|
||||
", _name='" + _name + '\'' +
|
||||
", _description='" + _description + '\'' +
|
||||
", _favoriteGame=" + _favoriteGame +
|
||||
", _privacySetting=" + _privacySetting +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package mineplex.core.communities.data;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
@ -152,11 +153,6 @@ public class Community implements ICommunity
|
||||
.setMembers(getMemberCount());
|
||||
}
|
||||
|
||||
public boolean isBrowserEilgible()
|
||||
{
|
||||
return getMemberCount() >= 5 && getPrivacySetting() != PrivacySetting.PRIVATE;
|
||||
}
|
||||
|
||||
public enum PrivacySetting
|
||||
{
|
||||
OPEN("Open to Join"),
|
||||
@ -188,5 +184,38 @@ public class Community implements ICommunity
|
||||
|
||||
return PrivacySetting.RECRUITING;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return _display;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o)
|
||||
{
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
Community community = (Community) o;
|
||||
return _id == community._id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode()
|
||||
{
|
||||
return Objects.hash(_id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "Community{" +
|
||||
"_id=" + _id +
|
||||
", _name='" + _name + '\'' +
|
||||
", _description='" + _description + '\'' +
|
||||
", _favoriteGame=" + _favoriteGame +
|
||||
", _privacy=" + _privacy +
|
||||
'}';
|
||||
}
|
||||
}
|
@ -15,4 +15,9 @@ public interface ICommunity
|
||||
GameDisplay getFavoriteGame();
|
||||
|
||||
Community.PrivacySetting getPrivacySetting();
|
||||
|
||||
default boolean isBrowserEligible()
|
||||
{
|
||||
return getPrivacySetting() != Community.PrivacySetting.PRIVATE && getMemberCount() >= 5;
|
||||
}
|
||||
}
|
||||
|
@ -9,16 +9,17 @@ import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.LineFormat;
|
||||
import mineplex.core.common.util.UtilText;
|
||||
import mineplex.core.communities.data.Community;
|
||||
import mineplex.core.communities.data.ICommunity;
|
||||
import mineplex.core.communities.gui.pages.CommunityMembersPage;
|
||||
import mineplex.core.itemstack.ItemBuilder;
|
||||
|
||||
public class CommunityVisualizationButton extends CommunitiesGUIButton
|
||||
{
|
||||
private Player _viewer;
|
||||
private Community _community;
|
||||
private ICommunity _community;
|
||||
private boolean _invite;
|
||||
|
||||
public CommunityVisualizationButton(Player viewer, Community community, boolean invite)
|
||||
public CommunityVisualizationButton(Player viewer, ICommunity community, boolean invite)
|
||||
{
|
||||
super(new ItemBuilder(Material.BARRIER).build());
|
||||
|
||||
@ -28,15 +29,25 @@ public class CommunityVisualizationButton extends CommunitiesGUIButton
|
||||
update();
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Override
|
||||
public void update()
|
||||
{
|
||||
ItemBuilder builder = new ItemBuilder(new ItemStack(_community.getFavoriteGame().getMaterial(), 1, _community.getFavoriteGame().getMaterialData(), null)).setTitle(C.cGreenB + _community.getName()).addLore(UtilText.splitLinesToArray(new String[] {C.cRed, C.cYellow + "Members " + C.cWhite + _community.getMembers().size(), C.cYellow + "Favorite Game " + C.cWhite + _community.getFavoriteGame().getName(), C.cYellow + "Description " + C.cWhite + _community.getDescription()}, LineFormat.LORE));
|
||||
ItemBuilder builder = new ItemBuilder(new ItemStack(_community.getFavoriteGame().getMaterial(), 1, _community.getFavoriteGame().getMaterialData()))
|
||||
.setTitle(C.cGreenB + _community.getName())
|
||||
.addLore(UtilText.splitLinesToArray(new String[] {
|
||||
C.cRed,
|
||||
C.cYellow + "Members " + C.cWhite + _community.getMemberCount(),
|
||||
C.cYellow + "Favorite Game " + C.cWhite + _community.getFavoriteGame().getName(),
|
||||
C.cYellow + "Description " + C.cWhite + _community.getDescription()}, LineFormat.LORE));
|
||||
|
||||
if (_invite)
|
||||
{
|
||||
builder.addLore(UtilText.splitLinesToArray(new String[] {C.cGold, C.cYellow + "Shift-Left Click " + C.cWhite + "Join", C.cYellow + "Shift-Right Click " + C.cWhite + "Decline"}, LineFormat.LORE));
|
||||
builder.addLore(UtilText.splitLinesToArray(new String[] {
|
||||
C.cGold,
|
||||
C.cYellow + "Shift-Left Click " + C.cWhite + "Join",
|
||||
C.cYellow + "Shift-Right Click " + C.cWhite + "Decline"}, LineFormat.LORE));
|
||||
}
|
||||
|
||||
builder.addLore(C.cBlue, C.cGreen + "Click to view community");
|
||||
Button = builder.build();
|
||||
}
|
||||
@ -46,7 +57,7 @@ public class CommunityVisualizationButton extends CommunitiesGUIButton
|
||||
{
|
||||
if (_invite && type == ClickType.SHIFT_RIGHT)
|
||||
{
|
||||
getCommunityManager().handleRejectInvite(_viewer, _community);
|
||||
getCommunityManager().handleRejectInvite(_viewer, _community.getId());
|
||||
}
|
||||
else if (_invite && type == ClickType.SHIFT_LEFT)
|
||||
{
|
||||
@ -54,7 +65,8 @@ public class CommunityVisualizationButton extends CommunitiesGUIButton
|
||||
}
|
||||
else
|
||||
{
|
||||
new CommunityMembersPage(_viewer, _community).open();
|
||||
getCommunityManager().tempLoadCommunity(_community.getId(), community ->
|
||||
new CommunityMembersPage(_viewer, community));
|
||||
}
|
||||
}
|
||||
}
|
@ -1,10 +1,17 @@
|
||||
package mineplex.core.communities.gui.pages;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.DyeColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.communities.CommunityManager;
|
||||
import mineplex.core.communities.data.CommunityMemberData;
|
||||
import mineplex.core.communities.data.ICommunity;
|
||||
import mineplex.core.communities.events.CommunityDisbandEvent;
|
||||
import mineplex.core.communities.events.CommunityMemberDataUpdateEvent;
|
||||
import mineplex.core.communities.gui.buttons.ActionButton;
|
||||
@ -71,9 +78,14 @@ public class CommunityInvitesPage extends CommunitiesGUIPage
|
||||
Inv.setItem(53, next.Button);
|
||||
}
|
||||
|
||||
final CommunityManager manager = getCommunityManager();
|
||||
final List<Integer> invites = manager.Get(Viewer).Invites;
|
||||
|
||||
manager.loadBrowserCommunities(invites, () ->
|
||||
{
|
||||
int slot = 18;
|
||||
boolean cleared = false;
|
||||
for (int i = (page - 1) * COMMUNITIES_PER_PAGE; i < (page - 1) * COMMUNITIES_PER_PAGE + COMMUNITIES_PER_PAGE && i < getCommunityManager().Get(Viewer).Invites.size(); i++)
|
||||
for (int i = (page - 1) * COMMUNITIES_PER_PAGE; i < (page - 1) * COMMUNITIES_PER_PAGE + COMMUNITIES_PER_PAGE && i < invites.size(); i++)
|
||||
{
|
||||
if (!cleared && !initial)
|
||||
{
|
||||
@ -85,14 +97,24 @@ public class CommunityInvitesPage extends CommunitiesGUIPage
|
||||
Inv.setItem(clear, null);
|
||||
}
|
||||
}
|
||||
CommunityVisualizationButton button = new CommunityVisualizationButton(Viewer, getCommunityManager().getLoadedCommunity(getCommunityManager().Get(Viewer).Invites.get(i)), true);
|
||||
|
||||
int communityId = invites.get(i);
|
||||
ICommunity community = manager.getBrowserCommunity(communityId);
|
||||
if (community == null)
|
||||
{
|
||||
Inv.setItem(slot, new ItemStack(Material.INK_SACK, 1, DyeColor.GRAY.getDyeData()));
|
||||
} else
|
||||
{
|
||||
CommunityVisualizationButton button = new CommunityVisualizationButton(Viewer, community, true);
|
||||
Buttons.put(slot, button);
|
||||
Inv.setItem(slot, button.Button);
|
||||
}
|
||||
|
||||
slot++;
|
||||
}
|
||||
|
||||
Viewer.updateInventory();
|
||||
});
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
|
Loading…
Reference in New Issue
Block a user