2015-11-15 23:32:04 +00:00
|
|
|
package me.totalfreedom.totalfreedommod.rank;
|
|
|
|
|
2020-12-25 19:46:43 +00:00
|
|
|
import java.util.Objects;
|
2016-03-01 16:47:01 +00:00
|
|
|
import me.totalfreedom.totalfreedommod.FreedomService;
|
2020-12-25 19:46:43 +00:00
|
|
|
import me.totalfreedom.totalfreedommod.admin.Admin;
|
2015-11-15 23:32:04 +00:00
|
|
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
|
|
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
2020-06-30 07:25:38 +00:00
|
|
|
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
2015-11-15 23:32:04 +00:00
|
|
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
2019-07-28 06:04:16 +00:00
|
|
|
import org.apache.commons.lang.StringUtils;
|
2015-11-15 23:32:04 +00:00
|
|
|
import org.bukkit.ChatColor;
|
|
|
|
import org.bukkit.command.CommandSender;
|
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
import org.bukkit.event.EventHandler;
|
|
|
|
import org.bukkit.event.EventPriority;
|
|
|
|
import org.bukkit.event.player.PlayerJoinEvent;
|
2020-05-29 10:14:21 +00:00
|
|
|
import org.bukkit.scoreboard.Scoreboard;
|
|
|
|
import org.bukkit.scoreboard.Team;
|
2015-11-15 23:32:04 +00:00
|
|
|
|
2016-03-01 16:47:01 +00:00
|
|
|
public class RankManager extends FreedomService
|
2015-11-15 23:32:04 +00:00
|
|
|
{
|
|
|
|
@Override
|
2020-07-01 01:51:06 +00:00
|
|
|
public void onStart()
|
2015-11-15 23:32:04 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2020-07-01 01:51:06 +00:00
|
|
|
public void onStop()
|
2015-11-15 23:32:04 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2016-05-12 19:40:39 +00:00
|
|
|
public Displayable getDisplay(CommandSender sender)
|
2015-11-15 23:32:04 +00:00
|
|
|
{
|
|
|
|
if (!(sender instanceof Player))
|
|
|
|
{
|
|
|
|
return getRank(sender); // Consoles don't have display ranks
|
|
|
|
}
|
|
|
|
|
2018-07-31 07:01:29 +00:00
|
|
|
final Player player = (Player)sender;
|
2015-11-15 23:32:04 +00:00
|
|
|
|
2019-01-28 01:49:07 +00:00
|
|
|
// If the player's an owner, display that
|
|
|
|
if (ConfigEntry.SERVER_OWNERS.getList().contains(player.getName()))
|
2018-05-12 03:09:23 +00:00
|
|
|
{
|
2019-01-28 01:49:07 +00:00
|
|
|
return Title.OWNER;
|
2018-05-12 03:09:23 +00:00
|
|
|
}
|
|
|
|
|
2015-11-15 23:32:04 +00:00
|
|
|
// Developers always show up
|
2020-08-20 01:19:15 +00:00
|
|
|
if (FUtil.isDeveloper(player))
|
2015-11-15 23:32:04 +00:00
|
|
|
{
|
2016-03-06 15:56:15 +00:00
|
|
|
return Title.DEVELOPER;
|
2015-11-15 23:32:04 +00:00
|
|
|
}
|
|
|
|
|
2020-12-04 00:28:53 +00:00
|
|
|
if (ConfigEntry.SERVER_EXECUTIVES.getList().contains(player.getName()) && plugin.al.isAdmin(player))
|
2018-05-13 19:49:13 +00:00
|
|
|
{
|
|
|
|
return Title.EXECUTIVE;
|
|
|
|
}
|
2021-04-04 12:24:06 +00:00
|
|
|
|
|
|
|
if (ConfigEntry.SERVER_ASSISTANT_EXECUTIVES.getList().contains(player.getName()) && plugin.al.isAdmin(player))
|
|
|
|
{
|
|
|
|
return Title.ASSTEXEC;
|
|
|
|
}
|
2018-05-13 19:49:13 +00:00
|
|
|
|
2020-12-04 00:28:53 +00:00
|
|
|
// Master builders show up if they are not an admin
|
|
|
|
if (plugin.pl.getData(player).isMasterBuilder() && !plugin.al.isAdmin(player))
|
2015-11-15 23:32:04 +00:00
|
|
|
{
|
2019-01-28 01:49:07 +00:00
|
|
|
return Title.MASTER_BUILDER;
|
2016-02-29 20:48:17 +00:00
|
|
|
}
|
|
|
|
|
2018-01-07 19:33:58 +00:00
|
|
|
return getRank(player);
|
2015-11-15 23:32:04 +00:00
|
|
|
}
|
|
|
|
|
2020-12-04 00:28:53 +00:00
|
|
|
public Displayable getDisplay(Admin admin)
|
2019-08-11 21:12:53 +00:00
|
|
|
{
|
|
|
|
// If the player's an owner, display that
|
2020-12-04 00:28:53 +00:00
|
|
|
if (ConfigEntry.SERVER_OWNERS.getList().contains(admin.getName()))
|
2019-08-11 21:12:53 +00:00
|
|
|
{
|
|
|
|
return Title.OWNER;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Developers always show up
|
2020-12-04 00:28:53 +00:00
|
|
|
if (FUtil.isDeveloper((Player)admin))
|
2019-08-11 21:12:53 +00:00
|
|
|
{
|
|
|
|
return Title.DEVELOPER;
|
|
|
|
}
|
|
|
|
|
2020-12-04 00:28:53 +00:00
|
|
|
if (ConfigEntry.SERVER_EXECUTIVES.getList().contains(admin.getName()))
|
2019-08-11 21:12:53 +00:00
|
|
|
{
|
|
|
|
return Title.EXECUTIVE;
|
|
|
|
}
|
|
|
|
|
2020-12-04 00:28:53 +00:00
|
|
|
return admin.getRank();
|
2019-08-11 21:12:53 +00:00
|
|
|
}
|
|
|
|
|
2016-03-06 15:56:15 +00:00
|
|
|
public Rank getRank(CommandSender sender)
|
2015-11-15 23:32:04 +00:00
|
|
|
{
|
|
|
|
if (sender instanceof Player)
|
|
|
|
{
|
2018-07-31 07:01:29 +00:00
|
|
|
return getRank((Player)sender);
|
2015-11-15 23:32:04 +00:00
|
|
|
}
|
|
|
|
|
2016-03-02 19:28:01 +00:00
|
|
|
// CONSOLE?
|
2016-03-06 15:56:15 +00:00
|
|
|
if (sender.getName().equals("CONSOLE"))
|
|
|
|
{
|
2020-12-04 00:28:53 +00:00
|
|
|
return ConfigEntry.ADMINLIST_CONSOLE_IS_ADMIN.getBoolean() ? Rank.SENIOR_CONSOLE : Rank.ADMIN_CONSOLE;
|
2016-03-02 19:28:01 +00:00
|
|
|
}
|
|
|
|
|
2016-02-29 20:48:17 +00:00
|
|
|
// Console admin, get by name
|
2020-12-04 00:28:53 +00:00
|
|
|
Admin admin = plugin.al.getEntryByName(sender.getName());
|
2015-11-15 23:32:04 +00:00
|
|
|
|
2016-03-02 19:28:01 +00:00
|
|
|
// Unknown console: RCON?
|
2020-12-04 00:28:53 +00:00
|
|
|
if (admin == null)
|
2016-02-29 20:48:17 +00:00
|
|
|
{
|
2020-09-28 02:51:15 +00:00
|
|
|
return Rank.SENIOR_CONSOLE;
|
2015-11-15 23:32:04 +00:00
|
|
|
}
|
|
|
|
|
2020-12-04 00:28:53 +00:00
|
|
|
Rank rank = admin.getRank();
|
2016-05-12 19:40:39 +00:00
|
|
|
|
|
|
|
// Get console
|
|
|
|
if (rank.hasConsoleVariant())
|
|
|
|
{
|
|
|
|
rank = rank.getConsoleVariant();
|
|
|
|
}
|
|
|
|
return rank;
|
2015-11-15 23:32:04 +00:00
|
|
|
}
|
|
|
|
|
2016-03-06 15:56:15 +00:00
|
|
|
public Rank getRank(Player player)
|
2015-11-15 23:32:04 +00:00
|
|
|
{
|
2020-12-04 00:28:53 +00:00
|
|
|
final Admin entry = plugin.al.getAdmin(player);
|
2016-03-02 19:28:01 +00:00
|
|
|
if (entry != null)
|
2015-11-15 23:32:04 +00:00
|
|
|
{
|
2016-03-02 19:28:01 +00:00
|
|
|
return entry.getRank();
|
2015-11-15 23:32:04 +00:00
|
|
|
}
|
|
|
|
|
2016-03-06 15:56:15 +00:00
|
|
|
return player.isOp() ? Rank.OP : Rank.NON_OP;
|
2015-11-15 23:32:04 +00:00
|
|
|
}
|
|
|
|
|
2020-06-30 07:25:38 +00:00
|
|
|
public String getTag(Player player, String defaultTag)
|
|
|
|
{
|
|
|
|
String tag = defaultTag;
|
|
|
|
|
|
|
|
PlayerData playerData = plugin.pl.getData(player);
|
|
|
|
String t = playerData.getTag();
|
|
|
|
if (t != null && !t.isEmpty())
|
|
|
|
{
|
|
|
|
tag = t;
|
|
|
|
}
|
|
|
|
|
|
|
|
return tag;
|
|
|
|
}
|
|
|
|
|
2018-01-07 19:33:58 +00:00
|
|
|
public void updateDisplay(Player player)
|
|
|
|
{
|
2018-02-22 01:22:13 +00:00
|
|
|
if (!player.isOnline())
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
2018-01-07 19:33:58 +00:00
|
|
|
FPlayer fPlayer = plugin.pl.getPlayer(player);
|
2020-06-30 07:25:38 +00:00
|
|
|
PlayerData data = plugin.pl.getData(player);
|
|
|
|
Displayable display = getDisplay(player);
|
2020-12-04 00:28:53 +00:00
|
|
|
if (plugin.al.isAdmin(player) || data.isMasterBuilder() || FUtil.isDeveloper(player))
|
2018-01-07 19:33:58 +00:00
|
|
|
{
|
|
|
|
String displayName = display.getColor() + player.getName();
|
2020-06-30 07:25:38 +00:00
|
|
|
player.setPlayerListName(displayName);
|
2018-01-07 19:33:58 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
fPlayer.setTag(null);
|
|
|
|
player.setPlayerListName(null);
|
|
|
|
}
|
2020-06-30 07:25:38 +00:00
|
|
|
fPlayer.setTag(getTag(player, display.getColoredTag()));
|
2020-05-29 10:14:21 +00:00
|
|
|
updatePlayerTeam(player);
|
2020-04-14 06:40:22 +00:00
|
|
|
plugin.pem.setPermissions(player);
|
2018-01-07 19:33:58 +00:00
|
|
|
}
|
|
|
|
|
2015-11-15 23:32:04 +00:00
|
|
|
@EventHandler(priority = EventPriority.MONITOR)
|
|
|
|
public void onPlayerJoin(PlayerJoinEvent event)
|
|
|
|
{
|
|
|
|
final Player player = event.getPlayer();
|
2020-06-30 07:25:38 +00:00
|
|
|
PlayerData target = plugin.pl.getData(player);
|
2015-11-15 23:32:04 +00:00
|
|
|
|
2020-12-04 00:28:53 +00:00
|
|
|
boolean isAdmin = plugin.al.isAdmin(player);
|
2015-11-15 23:32:04 +00:00
|
|
|
|
2022-04-15 13:52:06 +00:00
|
|
|
// Updates last login time
|
|
|
|
if (isAdmin)
|
2015-11-15 23:32:04 +00:00
|
|
|
{
|
2022-04-15 13:52:06 +00:00
|
|
|
plugin.al.updateLastLogin(player);
|
2022-05-03 08:44:36 +00:00
|
|
|
} else
|
|
|
|
{
|
|
|
|
// Ensure admins don't have admin functionality when removed (FS-222)
|
|
|
|
FPlayer freedomPlayer = plugin.pl.getPlayer(player);
|
|
|
|
|
|
|
|
freedomPlayer.removeAdminFunctionality();
|
2015-11-15 23:32:04 +00:00
|
|
|
}
|
|
|
|
|
2020-07-09 23:22:12 +00:00
|
|
|
// Broadcast login message
|
2020-12-04 00:28:53 +00:00
|
|
|
if (isAdmin || FUtil.isDeveloper(player) || plugin.pl.getData(player).isMasterBuilder() || plugin.pl.getData(player).hasLoginMessage())
|
2015-11-15 23:32:04 +00:00
|
|
|
{
|
2020-12-04 00:28:53 +00:00
|
|
|
if (!plugin.al.isVanished(player.getName()))
|
2020-07-22 21:40:58 +00:00
|
|
|
{
|
|
|
|
FUtil.bcastMsg(craftLoginMessage(player, null));
|
|
|
|
}
|
2015-11-15 23:32:04 +00:00
|
|
|
}
|
2018-07-30 07:23:01 +00:00
|
|
|
|
2020-07-09 23:22:12 +00:00
|
|
|
// Set display
|
|
|
|
updateDisplay(player);
|
|
|
|
|
2022-04-15 13:52:06 +00:00
|
|
|
if (target.getTag() != null)
|
2018-07-30 07:23:01 +00:00
|
|
|
{
|
2022-04-15 13:52:06 +00:00
|
|
|
plugin.pl.getData(player).setTag(FUtil.colorize(target.getTag()));
|
2018-07-30 07:23:01 +00:00
|
|
|
}
|
2015-11-15 23:32:04 +00:00
|
|
|
}
|
2020-04-23 11:18:03 +00:00
|
|
|
|
|
|
|
public String craftLoginMessage(Player player, String message)
|
|
|
|
{
|
|
|
|
Displayable display = plugin.rm.getDisplay(player);
|
2020-10-02 09:27:06 +00:00
|
|
|
PlayerData playerData = plugin.pl.getData(player);
|
|
|
|
if (message == null)
|
2020-04-23 11:18:03 +00:00
|
|
|
{
|
2020-10-02 09:27:06 +00:00
|
|
|
if (playerData.hasLoginMessage())
|
|
|
|
{
|
|
|
|
message = playerData.getLoginMessage();
|
|
|
|
}
|
|
|
|
else
|
2020-04-23 11:18:03 +00:00
|
|
|
{
|
2020-10-02 09:27:06 +00:00
|
|
|
if (display.hasDefaultLoginMessage())
|
2020-04-23 11:18:03 +00:00
|
|
|
{
|
2020-10-25 16:27:56 +00:00
|
|
|
message = "%name% is %art% %coloredrank%";
|
2020-04-23 11:18:03 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2020-10-02 09:27:06 +00:00
|
|
|
if (message != null)
|
|
|
|
{
|
2020-12-25 19:46:43 +00:00
|
|
|
return FUtil.colorize(ChatColor.AQUA + (message.contains("%name%") ? "" : player.getName() + " is ")
|
2020-10-02 09:27:06 +00:00
|
|
|
+ FUtil.colorize(message).replace("%name%", player.getName())
|
|
|
|
.replace("%rank%", display.getName())
|
|
|
|
.replace("%coloredrank%", display.getColoredName())
|
2020-10-25 17:24:41 +00:00
|
|
|
.replace("%art%", display.getArticle()));
|
2020-10-02 09:27:06 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return null;
|
2020-04-23 11:18:03 +00:00
|
|
|
}
|
2020-05-29 10:14:21 +00:00
|
|
|
|
2020-12-25 19:46:43 +00:00
|
|
|
@SuppressWarnings("deprecation")
|
2020-05-29 10:14:21 +00:00
|
|
|
public void updatePlayerTeam(Player player)
|
|
|
|
{
|
|
|
|
Displayable display = getDisplay(player);
|
2020-12-25 19:46:43 +00:00
|
|
|
Scoreboard scoreboard = Objects.requireNonNull(server.getScoreboardManager()).getMainScoreboard();
|
2020-05-29 10:14:21 +00:00
|
|
|
Team team = scoreboard.getPlayerTeam(player);
|
2020-06-30 07:25:38 +00:00
|
|
|
if (!display.hasTeam())
|
2020-05-29 10:14:21 +00:00
|
|
|
{
|
2020-06-30 07:25:38 +00:00
|
|
|
if (team != null)
|
|
|
|
{
|
|
|
|
team.removePlayer(player);
|
|
|
|
}
|
2020-05-29 10:14:21 +00:00
|
|
|
return;
|
|
|
|
}
|
2020-06-30 07:25:38 +00:00
|
|
|
String name = StringUtils.substring(display.toString(), 0, 16);
|
|
|
|
team = scoreboard.getTeam(name);
|
2020-05-29 10:14:21 +00:00
|
|
|
if (team == null)
|
|
|
|
{
|
2020-06-30 07:25:38 +00:00
|
|
|
team = scoreboard.registerNewTeam(name);
|
|
|
|
team.setColor(display.getTeamColor());
|
|
|
|
}
|
|
|
|
if (!team.hasPlayer(player))
|
|
|
|
{
|
|
|
|
team.addPlayer(player);
|
2020-05-29 10:14:21 +00:00
|
|
|
}
|
|
|
|
}
|
2021-04-04 12:24:06 +00:00
|
|
|
}
|