Redo the Lobby Selector
This commit is contained in:
parent
f9504a9e4c
commit
4327c8468a
@ -107,7 +107,7 @@ public class ServerManager extends MiniPlugin
|
||||
private final Map<String, ServerGroup> _serverGroupsByNPCName;
|
||||
// Maps ServerGroup prefix (CW4) to a Map that maps server name (CW4-5) to GameServer
|
||||
private final Map<String, Map<String, GameServer>> _gameServers;
|
||||
// Maps ServerGroup prefix (CW4) to the number of players on that server
|
||||
// Maps ServerType (Not ServerGroup) prefix (CW4) to the number of players on that server
|
||||
private final Map<String, Integer> _playersPlaying;
|
||||
// Maps (in both directions) ServerGroup NPC name to the game room location
|
||||
private final BiMap<String, Location> _serverNPCTeleport;
|
||||
@ -472,7 +472,7 @@ public class ServerManager extends MiniPlugin
|
||||
|
||||
public boolean selectServer(Player player, GameServer server)
|
||||
{
|
||||
if (!Recharge.Instance.use(player, getName(), SELECT_SERVER_COOLDOWN, false, false))
|
||||
if (!Recharge.Instance.use(player, "Select Server", SELECT_SERVER_COOLDOWN, false, false))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@ -486,6 +486,11 @@ public class ServerManager extends MiniPlugin
|
||||
|
||||
public boolean selectBest(Player player, ServerGroup serverGroup)
|
||||
{
|
||||
if (!Recharge.Instance.use(player, "Select Best Server", SELECT_SERVER_COOLDOWN, false, false))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
Collection<GameServer> servers = getServers(serverGroup.getPrefix());
|
||||
int required = getRequiredSlots(player);
|
||||
|
||||
|
@ -1,28 +1,96 @@
|
||||
package mineplex.hub.server.ui.lobby;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import mineplex.core.account.CoreClientManager;
|
||||
import mineplex.core.common.util.C;
|
||||
import mineplex.core.common.util.UtilServer;
|
||||
import mineplex.core.donation.DonationManager;
|
||||
import mineplex.core.itemstack.ItemBuilder;
|
||||
import mineplex.core.shop.page.ShopPageBase;
|
||||
import mineplex.hub.server.GameServer;
|
||||
import mineplex.hub.server.ServerManager;
|
||||
import mineplex.hub.server.ServerManager.Perm;
|
||||
import mineplex.serverdata.data.MinecraftServer;
|
||||
|
||||
public class LobbyMenu extends ShopPageBase<ServerManager, LobbyShop>
|
||||
{
|
||||
|
||||
private final String _serverGroup;
|
||||
|
||||
LobbyMenu(ServerManager plugin, LobbyShop lobbyShop, CoreClientManager clientManager, DonationManager donationManager, String name, Player player, String serverGroup)
|
||||
LobbyMenu(ServerManager plugin, LobbyShop lobbyShop, CoreClientManager clientManager, DonationManager donationManager, Player player)
|
||||
{
|
||||
super(plugin, lobbyShop, clientManager, donationManager, name, player, 54);
|
||||
|
||||
_serverGroup = serverGroup;
|
||||
|
||||
super(plugin, lobbyShop, clientManager, donationManager, "Lobby Selector", player);
|
||||
buildPage();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void buildPage()
|
||||
{
|
||||
List<GameServer> servers = new ArrayList<>(getPlugin().getServers("Lobby"));
|
||||
boolean ownsUltra = getClientManager().Get(getPlayer()).hasPermission(Perm.JOIN_FULL);
|
||||
String serverName = UtilServer.getServerName();
|
||||
|
||||
servers.sort(Comparator.comparingInt(GameServer::getNumber));
|
||||
|
||||
servers.forEach(server ->
|
||||
{
|
||||
if (server.getNumber() >= getSize())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
MinecraftServer serverStatus = server.getServer();
|
||||
|
||||
ItemBuilder builder = new ItemBuilder(Material.IRON_BLOCK);
|
||||
String colour = C.cYellow, bottomLine = "Click to Join!";
|
||||
boolean sameServer = serverName.equals(serverStatus.getName());
|
||||
boolean full = serverStatus.getPlayerCount() >= serverStatus.getMaxPlayerCount();
|
||||
boolean canJoin = ownsUltra || !full;
|
||||
|
||||
if (sameServer)
|
||||
{
|
||||
builder.setType(Material.EMERALD_BLOCK);
|
||||
colour = C.cGreenB;
|
||||
bottomLine = "You are here!";
|
||||
}
|
||||
else if (full)
|
||||
{
|
||||
if (ownsUltra)
|
||||
{
|
||||
builder.setType(Material.DIAMOND_BLOCK);
|
||||
colour = C.cAquaB;
|
||||
}
|
||||
else
|
||||
{
|
||||
builder.setType(Material.REDSTONE_BLOCK);
|
||||
colour = C.cRedB;
|
||||
bottomLine = "Ultra+ can join. Visit mineplex.com/shop!";
|
||||
}
|
||||
}
|
||||
|
||||
builder.setTitle(colour + serverStatus.getName());
|
||||
builder.addLore(
|
||||
"",
|
||||
C.cYellow + "Players: " + C.Reset + serverStatus.getPlayerCount() + "/" + serverStatus.getMaxPlayerCount(),
|
||||
"",
|
||||
bottomLine
|
||||
);
|
||||
|
||||
addButton(server.getNumber() - 1, builder.build(), (player, clickType) ->
|
||||
{
|
||||
if (sameServer)
|
||||
{
|
||||
playDenySound(player);
|
||||
}
|
||||
else if (canJoin)
|
||||
{
|
||||
getPlugin().selectServer(player, server);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
@ -19,7 +19,7 @@ public class LobbyShop extends ShopBase<ServerManager>
|
||||
@Override
|
||||
protected ShopPageBase<ServerManager, ? extends ShopBase<ServerManager>> buildPagesFor(Player player)
|
||||
{
|
||||
return new LobbyMenu(getPlugin(), this, getClientManager(), getDonationManager(), "Lobby Selector", player, "Lobby");
|
||||
return new LobbyMenu(getPlugin(), this, getClientManager(), getDonationManager(), player);
|
||||
}
|
||||
|
||||
public void updatePages()
|
||||
|
Loading…
Reference in New Issue
Block a user