mirror of
https://github.com/plexusorg/Plex.git
synced 2025-07-12 08:08:34 +00:00
- Fix world permissions handling and add more customization
This commit is contained in:
@ -41,6 +41,6 @@ public class AdminListener extends PlexListener
|
||||
Rank newRank = event.getRank();
|
||||
target.setRank(newRank.name().toLowerCase());
|
||||
DataUtils.update(target);
|
||||
PlexUtils.broadcast(tl("adminSetRank", userSender, target.getName(), newRank.getReadableString()));
|
||||
PlexUtils.broadcast(tl("adminSetRank", userSender, target.getName(), newRank.getReadable()));
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
package dev.plex.listener.impl;
|
||||
|
||||
import dev.plex.Plex;
|
||||
import dev.plex.cache.PlayerCache;
|
||||
import dev.plex.listener.PlexListener;
|
||||
import dev.plex.player.PlexPlayer;
|
||||
@ -23,15 +22,11 @@ public class ChatListener extends PlexListener
|
||||
{
|
||||
PlexPlayer plexPlayer = PlayerCache.getPlexPlayerMap().get(event.getPlayer().getUniqueId());
|
||||
|
||||
if (!plexPlayer.getPrefix().isEmpty())
|
||||
String prefix = plugin.getRankManager().getPrefix(plexPlayer);
|
||||
if (!prefix.isEmpty())
|
||||
{
|
||||
renderer.hasPrefix = true;
|
||||
renderer.prefix = plexPlayer.getPrefix();
|
||||
}
|
||||
else if (Plex.get().getRankManager().isAdmin(plexPlayer))
|
||||
{
|
||||
renderer.hasPrefix = true;
|
||||
renderer.prefix = plexPlayer.getRankFromString().getPrefix();
|
||||
renderer.prefix = prefix;
|
||||
}
|
||||
event.renderer(renderer);
|
||||
}
|
||||
|
@ -9,8 +9,6 @@ import dev.plex.listener.PlexListener;
|
||||
import dev.plex.player.PlexPlayer;
|
||||
import dev.plex.player.PunishedPlayer;
|
||||
import dev.plex.util.PlexLog;
|
||||
import java.util.Collections;
|
||||
import java.util.UUID;
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.entity.Player;
|
||||
@ -19,6 +17,9 @@ import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.UUID;
|
||||
|
||||
public class PlayerListener extends PlexListener
|
||||
{
|
||||
private final MongoPlayerData mongoPlayerData = plugin.getMongoPlayerData() != null ? plugin.getMongoPlayerData() : null;
|
||||
@ -36,8 +37,7 @@ public class PlayerListener extends PlexListener
|
||||
{
|
||||
player.setOp(true);
|
||||
PlexLog.debug("Automatically opped " + player.getName() + " since ranks are enabled.");
|
||||
}
|
||||
else if (plugin.getSystem().equalsIgnoreCase("permissions"))
|
||||
} else if (plugin.getSystem().equalsIgnoreCase("permissions"))
|
||||
{
|
||||
player.setOp(false);
|
||||
PlexLog.debug("Automatically deopped " + player.getName() + " since ranks are disabled.");
|
||||
@ -50,8 +50,7 @@ public class PlayerListener extends PlexListener
|
||||
plexPlayer.setName(player.getName()); //set the name of the player
|
||||
plexPlayer.setIps(Collections.singletonList(player.getAddress().getAddress().getHostAddress().trim())); //set the arraylist of ips
|
||||
DataUtils.insert(plexPlayer); // insert data in some wack db
|
||||
}
|
||||
else
|
||||
} else
|
||||
{
|
||||
plexPlayer = DataUtils.getPlayer(player.getUniqueId());
|
||||
}
|
||||
@ -62,27 +61,30 @@ public class PlayerListener extends PlexListener
|
||||
{
|
||||
punishedPlayer = new PunishedPlayer(player.getUniqueId());
|
||||
PlayerCache.getPunishedPlayerMap().put(player.getUniqueId(), punishedPlayer);
|
||||
} else {
|
||||
} else
|
||||
{
|
||||
punishedPlayer = PlayerCache.getPunishedPlayer(player.getUniqueId());
|
||||
}
|
||||
punishedPlayer.convertPunishments();
|
||||
|
||||
assert plexPlayer != null;
|
||||
|
||||
if (plugin.getRankManager().isAdmin(plexPlayer))
|
||||
if (plugin.getSystem().equalsIgnoreCase("ranks"))
|
||||
{
|
||||
Admin admin = new Admin(UUID.fromString(plexPlayer.getUuid()));
|
||||
admin.setRank(plexPlayer.getRankFromString());
|
||||
|
||||
plugin.getAdminList().addToCache(admin);
|
||||
|
||||
if (!plexPlayer.getLoginMSG().isEmpty())
|
||||
if (plugin.getRankManager().isAdmin(plexPlayer))
|
||||
{
|
||||
event.joinMessage(LegacyComponentSerializer.legacyAmpersand().deserialize(ChatColor.AQUA + player.getName() + " is " + plexPlayer.getLoginMSG()));
|
||||
}
|
||||
else
|
||||
{
|
||||
event.joinMessage(LegacyComponentSerializer.legacyAmpersand().deserialize(ChatColor.AQUA + player.getName() + " is " + plexPlayer.getRankFromString().getLoginMSG()));
|
||||
Admin admin = new Admin(UUID.fromString(plexPlayer.getUuid()));
|
||||
admin.setRank(plexPlayer.getRankFromString());
|
||||
|
||||
plugin.getAdminList().addToCache(admin);
|
||||
|
||||
if (!plexPlayer.getLoginMSG().isEmpty())
|
||||
{
|
||||
event.joinMessage(LegacyComponentSerializer.legacyAmpersand().deserialize(ChatColor.AQUA + player.getName() + " is " + plexPlayer.getLoginMSG()));
|
||||
} else
|
||||
{
|
||||
event.joinMessage(LegacyComponentSerializer.legacyAmpersand().deserialize(ChatColor.AQUA + player.getName() + " is " + plexPlayer.getRankFromString().getLoginMessage()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -101,8 +103,7 @@ public class PlayerListener extends PlexListener
|
||||
if (mongoPlayerData != null) //back to mongo checking
|
||||
{
|
||||
mongoPlayerData.update(plexPlayer); //update the player's document
|
||||
}
|
||||
else if (sqlPlayerData != null) //sql checking
|
||||
} else if (sqlPlayerData != null) //sql checking
|
||||
{
|
||||
sqlPlayerData.update(plexPlayer);
|
||||
}
|
||||
|
@ -1,21 +1,29 @@
|
||||
package dev.plex.listener.impl;
|
||||
|
||||
import dev.plex.Plex;
|
||||
import dev.plex.cache.PlayerCache;
|
||||
import dev.plex.listener.PlexListener;
|
||||
import dev.plex.player.PlexPlayer;
|
||||
import dev.plex.rank.enums.Rank;
|
||||
import dev.plex.rank.enums.Title;
|
||||
import dev.plex.util.PlexLog;
|
||||
import dev.plex.util.PlexUtils;
|
||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.block.BlockBreakEvent;
|
||||
import org.bukkit.event.block.BlockPlaceEvent;
|
||||
import org.bukkit.event.entity.EntitySpawnEvent;
|
||||
import static dev.plex.util.PlexUtils.tl;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
public class WorldListener extends PlexListener
|
||||
{
|
||||
// TODO: Actually implement permissions for every world properly
|
||||
private final String permission = plugin.config.getString("plex.adminworld.permission");
|
||||
|
||||
@EventHandler
|
||||
public void onBlockPlace(BlockPlaceEvent e)
|
||||
@ -23,28 +31,58 @@ public class WorldListener extends PlexListener
|
||||
Player player = e.getPlayer();
|
||||
PlexPlayer plexPlayer = PlayerCache.getPlexPlayerMap().get(player.getUniqueId());
|
||||
World world = player.getWorld();
|
||||
switch (world.getName().toLowerCase())
|
||||
if (plugin.getSystem().equalsIgnoreCase("permissions"))
|
||||
{
|
||||
case "adminworld" -> {
|
||||
if (plugin.getSystem().equalsIgnoreCase("ranks"))
|
||||
{
|
||||
if (plexPlayer.getRankFromString().isAtLeast(Rank.ADMIN))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (plugin.getSystem().equalsIgnoreCase("permissions"))
|
||||
{
|
||||
if (player.hasPermission(permission));
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
e.setCancelled(true);
|
||||
player.sendMessage(tl("noAdminWorldBlockPlace"));
|
||||
break;
|
||||
String permission = plugin.config.getString("worlds." + world.getName().toLowerCase() + ".permission");
|
||||
if (permission == null) return;
|
||||
if (player.hasPermission(permission)) return;
|
||||
} else if (plugin.getSystem().equalsIgnoreCase("ranks"))
|
||||
{
|
||||
if (plugin.config.contains("worlds." + world.getName().toLowerCase() + ".requiredLevels"))
|
||||
{
|
||||
@NotNull List<String> requiredLevel = plugin.config.getStringList("worlds." + world.getName().toLowerCase() + ".requiredLevels");
|
||||
if (checkLevel(plexPlayer, requiredLevel.toArray(String[]::new))) return;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
e.setCancelled(true);
|
||||
String noEdit = plugin.config.getString("worlds." + world.getName().toLowerCase() + ".noEdit");
|
||||
if (noEdit != null)
|
||||
{
|
||||
player.sendMessage(LegacyComponentSerializer.legacyAmpersand().deserialize(noEdit));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onBlockBreak(BlockBreakEvent e)
|
||||
{
|
||||
Player player = e.getPlayer();
|
||||
PlexPlayer plexPlayer = PlayerCache.getPlexPlayerMap().get(player.getUniqueId());
|
||||
World world = player.getWorld();
|
||||
if (plugin.getSystem().equalsIgnoreCase("permissions"))
|
||||
{
|
||||
String permission = plugin.config.getString("worlds." + world.getName().toLowerCase() + ".permission");
|
||||
if (permission == null) return;
|
||||
if (player.hasPermission(permission)) return;
|
||||
} else if (plugin.getSystem().equalsIgnoreCase("ranks"))
|
||||
{
|
||||
if (plugin.config.contains("worlds." + world.getName().toLowerCase() + ".requiredLevels"))
|
||||
{
|
||||
@NotNull List<String> requiredLevel = plugin.config.getStringList("worlds." + world.getName().toLowerCase() + ".requiredLevels");
|
||||
if (checkLevel(plexPlayer, requiredLevel.toArray(String[]::new))) return;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
e.setCancelled(true);
|
||||
String noEdit = plugin.config.getString("worlds." + world.getName().toLowerCase() + ".noEdit");
|
||||
if (noEdit != null)
|
||||
{
|
||||
player.sendMessage(LegacyComponentSerializer.legacyAmpersand().deserialize(noEdit));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@ -56,4 +94,40 @@ public class WorldListener extends PlexListener
|
||||
}
|
||||
e.setCancelled(true);
|
||||
}
|
||||
|
||||
private boolean checkLevel(PlexPlayer player, String[] requiredList)
|
||||
{
|
||||
PlexLog.debug("Checking world required levels " + Arrays.toString(requiredList));
|
||||
boolean hasAccess = false;
|
||||
for (String required : requiredList)
|
||||
{
|
||||
PlexLog.debug("Checking if player has " + required);
|
||||
if (required.startsWith("Title"))
|
||||
{
|
||||
String titleString = required.split("\\.")[1];
|
||||
Title title = Title.valueOf(titleString.toUpperCase(Locale.ROOT));
|
||||
switch (title)
|
||||
{
|
||||
case DEV -> {
|
||||
hasAccess = PlexUtils.DEVELOPERS.contains(player.getUuid());
|
||||
}
|
||||
case MASTER_BUILDER -> {
|
||||
hasAccess = Plex.get().config.contains("titles.masterbuilders") && Plex.get().config.getStringList("titles.masterbuilders").contains(player.getName());
|
||||
}
|
||||
case OWNER -> {
|
||||
hasAccess = Plex.get().config.contains("titles.owners") && Plex.get().config.getStringList("titles.owners").contains(player.getName());
|
||||
}
|
||||
default -> {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
} else if (required.startsWith("Rank"))
|
||||
{
|
||||
String rankString = required.split("\\.")[1];
|
||||
Rank rank = Rank.valueOf(rankString.toUpperCase(Locale.ROOT));
|
||||
hasAccess = player.getRankFromString().isAtLeast(rank);
|
||||
}
|
||||
}
|
||||
return hasAccess;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user