2021-01-03 07:21:15 +00:00
|
|
|
package dev.plex.listener.impl;
|
2020-10-31 15:09:13 +00:00
|
|
|
|
2022-02-22 04:51:05 +00:00
|
|
|
import dev.plex.Plex;
|
2022-04-08 06:06:34 +00:00
|
|
|
import dev.plex.cache.DataUtils;
|
2022-04-04 08:36:50 +00:00
|
|
|
import dev.plex.cache.player.PlayerCache;
|
2021-01-03 07:21:15 +00:00
|
|
|
import dev.plex.listener.PlexListener;
|
|
|
|
import dev.plex.player.PlexPlayer;
|
|
|
|
import dev.plex.rank.enums.Rank;
|
2022-02-22 04:51:05 +00:00
|
|
|
import dev.plex.rank.enums.Title;
|
|
|
|
import dev.plex.util.PlexLog;
|
|
|
|
import dev.plex.util.PlexUtils;
|
2022-02-22 09:30:23 +00:00
|
|
|
import java.util.Arrays;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Locale;
|
2022-02-22 04:51:05 +00:00
|
|
|
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
2022-04-08 06:06:34 +00:00
|
|
|
import org.bukkit.Bukkit;
|
2020-10-31 15:09:13 +00:00
|
|
|
import org.bukkit.World;
|
2020-11-02 00:06:08 +00:00
|
|
|
import org.bukkit.entity.EntityType;
|
2020-10-31 15:09:13 +00:00
|
|
|
import org.bukkit.entity.Player;
|
|
|
|
import org.bukkit.event.EventHandler;
|
2022-02-22 04:51:05 +00:00
|
|
|
import org.bukkit.event.block.BlockBreakEvent;
|
2020-10-31 15:09:13 +00:00
|
|
|
import org.bukkit.event.block.BlockPlaceEvent;
|
2020-11-02 00:06:08 +00:00
|
|
|
import org.bukkit.event.entity.EntitySpawnEvent;
|
2022-04-08 06:06:34 +00:00
|
|
|
import org.bukkit.event.player.PlayerChangedWorldEvent;
|
|
|
|
import org.bukkit.event.player.PlayerTeleportEvent;
|
2022-02-22 04:51:05 +00:00
|
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
|
2020-10-31 15:09:13 +00:00
|
|
|
public class WorldListener extends PlexListener
|
|
|
|
{
|
|
|
|
@EventHandler
|
|
|
|
public void onBlockPlace(BlockPlaceEvent e)
|
|
|
|
{
|
|
|
|
Player player = e.getPlayer();
|
|
|
|
PlexPlayer plexPlayer = PlayerCache.getPlexPlayerMap().get(player.getUniqueId());
|
|
|
|
World world = player.getWorld();
|
2022-02-22 04:51:05 +00:00
|
|
|
if (plugin.getSystem().equalsIgnoreCase("permissions"))
|
2020-10-31 15:09:13 +00:00
|
|
|
{
|
2022-02-22 04:51:05 +00:00
|
|
|
String permission = plugin.config.getString("worlds." + world.getName().toLowerCase() + ".permission");
|
2022-02-22 09:30:23 +00:00
|
|
|
if (permission == null)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (player.hasPermission(permission))
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (plugin.getSystem().equalsIgnoreCase("ranks"))
|
2022-02-22 04:51:05 +00:00
|
|
|
{
|
|
|
|
if (plugin.config.contains("worlds." + world.getName().toLowerCase() + ".requiredLevels"))
|
|
|
|
{
|
|
|
|
@NotNull List<String> requiredLevel = plugin.config.getStringList("worlds." + world.getName().toLowerCase() + ".requiredLevels");
|
2022-02-22 09:30:23 +00:00
|
|
|
if (checkLevel(plexPlayer, requiredLevel.toArray(String[]::new)))
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2022-02-22 04:51:05 +00:00
|
|
|
return;
|
2020-10-31 15:09:13 +00:00
|
|
|
}
|
|
|
|
}
|
2022-02-22 04:51:05 +00:00
|
|
|
|
|
|
|
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");
|
2022-02-22 09:30:23 +00:00
|
|
|
if (permission == null)
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
if (player.hasPermission(permission))
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (plugin.getSystem().equalsIgnoreCase("ranks"))
|
2022-02-22 04:51:05 +00:00
|
|
|
{
|
|
|
|
if (plugin.config.contains("worlds." + world.getName().toLowerCase() + ".requiredLevels"))
|
|
|
|
{
|
|
|
|
@NotNull List<String> requiredLevel = plugin.config.getStringList("worlds." + world.getName().toLowerCase() + ".requiredLevels");
|
2022-02-22 09:30:23 +00:00
|
|
|
if (checkLevel(plexPlayer, requiredLevel.toArray(String[]::new)))
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2022-02-22 04:51:05 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
e.setCancelled(true);
|
|
|
|
String noEdit = plugin.config.getString("worlds." + world.getName().toLowerCase() + ".noEdit");
|
|
|
|
if (noEdit != null)
|
|
|
|
{
|
|
|
|
player.sendMessage(LegacyComponentSerializer.legacyAmpersand().deserialize(noEdit));
|
|
|
|
}
|
2020-10-31 15:09:13 +00:00
|
|
|
}
|
2020-11-02 00:06:08 +00:00
|
|
|
|
|
|
|
@EventHandler
|
|
|
|
public void onEntitySpawn(EntitySpawnEvent e)
|
|
|
|
{
|
|
|
|
if (e.getEntityType() != EntityType.SLIME)
|
2020-11-06 01:29:38 +00:00
|
|
|
{
|
2020-11-02 00:06:08 +00:00
|
|
|
return;
|
2020-11-06 01:29:38 +00:00
|
|
|
}
|
2020-11-02 00:06:08 +00:00
|
|
|
e.setCancelled(true);
|
|
|
|
}
|
2022-02-22 04:51:05 +00:00
|
|
|
|
2022-04-08 06:06:34 +00:00
|
|
|
// TODO: Add an entry setting in the config.yml and allow checking for all worlds
|
|
|
|
@EventHandler
|
|
|
|
public void onWorldTeleport(PlayerTeleportEvent e)
|
|
|
|
{
|
|
|
|
final World adminworld = Bukkit.getWorld("adminworld");
|
|
|
|
PlexPlayer plexPlayer = DataUtils.getPlayer(e.getPlayer().getUniqueId());
|
|
|
|
if (e.getTo().getWorld().equals(adminworld) && !plexPlayer.isAdminActive())
|
|
|
|
{
|
|
|
|
e.setCancelled(true);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-02-22 04:51:05 +00:00
|
|
|
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 -> {
|
2022-04-07 07:37:31 +00:00
|
|
|
hasAccess = PlexUtils.DEVELOPERS.contains(player.getUuid().toString());
|
2022-02-22 04:51:05 +00:00
|
|
|
}
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
}
|
2022-02-22 09:30:23 +00:00
|
|
|
}
|
|
|
|
else if (required.startsWith("Rank"))
|
2022-02-22 04:51:05 +00:00
|
|
|
{
|
|
|
|
String rankString = required.split("\\.")[1];
|
|
|
|
Rank rank = Rank.valueOf(rankString.toUpperCase(Locale.ROOT));
|
2022-04-07 07:37:31 +00:00
|
|
|
hasAccess = rank.isAtLeast(Rank.ADMIN) ? player.isAdminActive() && player.getRankFromString().isAtLeast(rank) : player.getRankFromString().isAtLeast(rank);
|
2022-02-22 04:51:05 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
return hasAccess;
|
|
|
|
}
|
2020-10-31 15:09:13 +00:00
|
|
|
}
|