diff --git a/pom.xml b/pom.xml index a65c14ed7..5a7359abc 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ UTF-8 chancesd https://sonarcloud.io - 3.18.18 + 4.0-SNAPSHOT @@ -27,7 +27,6 @@ pvpmanager - pvpmanager-folia @@ -51,10 +50,6 @@ true true true - - com.massivecraft:FactionsUUID - com.massivecraft:MassiveCore - post-clean @@ -75,9 +70,8 @@ maven-compiler-plugin 3.13.0 - 1.8 - 1.8 - true + 17 + 17 true true diff --git a/pvpmanager-folia/pom.xml b/pvpmanager-folia/pom.xml deleted file mode 100644 index 0d0f383ae..000000000 --- a/pvpmanager-folia/pom.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - 4.0.0 - - me.chancesd.pvpmanager - pvpmanager-parent - ${revision} - - - pvpmanager-folia - - - UTF-8 - - - - - - papermc - https://repo.papermc.io/repository/maven-public/ - - - - - - - dev.folia - folia-api - 1.20.4-R0.1-SNAPSHOT - provided - - - - diff --git a/pvpmanager-folia/src/main/java/me/chancesd/pvpmanager/utils/FoliaProvider.java b/pvpmanager-folia/src/main/java/me/chancesd/pvpmanager/utils/FoliaProvider.java deleted file mode 100644 index d1bc27ab1..000000000 --- a/pvpmanager-folia/src/main/java/me/chancesd/pvpmanager/utils/FoliaProvider.java +++ /dev/null @@ -1,78 +0,0 @@ -package me.chancesd.pvpmanager.utils; - -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.TimeUnit; - -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; -import org.jetbrains.annotations.NotNull; - -public class FoliaProvider implements SchedulerProvider { - - @NotNull - private final JavaPlugin plugin; - - public FoliaProvider(@NotNull final JavaPlugin plugin) { - this.plugin = plugin; - } - - @Override - public void runPlatformAsync(final Runnable task) { - Bukkit.getAsyncScheduler().runNow(plugin, scheduledTask -> task.run()); - } - - @Override - public void runPlatformAsyncTimer(final Runnable task, final long delay, final long period) { - Bukkit.getAsyncScheduler().runAtFixedRate(plugin, scheduledTask -> task.run(), delay / 20, period / 20, TimeUnit.SECONDS); - } - - @Override - public void runTask(final Runnable task) { - Bukkit.getGlobalRegionScheduler().execute(plugin, task); - } - - @Override - public void runTask(final Runnable task, final Entity entity) { - entity.getScheduler().run(plugin, scheduledTask -> task.run(), task); - } - - @Override - public void runTaskLater(final Runnable task, final Entity entity, final long delay) { - entity.getScheduler().runDelayed(plugin, scheduledTask -> task.run(), task, delay); - } - - @Override - public void runTaskTimer(final Runnable task, final long delay, final long period) { - Bukkit.getGlobalRegionScheduler().runAtFixedRate(plugin, scheduledTask -> task.run(), delay, period); - } - - @Override - public void executeConsoleCommand(final String command) { - Bukkit.getGlobalRegionScheduler().execute(plugin, () -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command)); - } - - @Override - public void executePlayerCommand(final Player player, final String command) { - player.performCommand(command); - } - - @Override - public boolean isPrimaryThread() { - return Bukkit.isGlobalTickThread(); - } - - @Override - public CompletableFuture teleport(final Player player, final Location loc) { - return player.teleportAsync(loc); - } - - @Override - public void cancelAllTasks() { - Bukkit.getAsyncScheduler().cancelTasks(plugin); - Bukkit.getGlobalRegionScheduler().cancelTasks(plugin); - } - -} diff --git a/pvpmanager-folia/src/main/java/me/chancesd/pvpmanager/utils/SchedulerProvider.java b/pvpmanager-folia/src/main/java/me/chancesd/pvpmanager/utils/SchedulerProvider.java deleted file mode 100644 index 39293b397..000000000 --- a/pvpmanager-folia/src/main/java/me/chancesd/pvpmanager/utils/SchedulerProvider.java +++ /dev/null @@ -1,34 +0,0 @@ -package me.chancesd.pvpmanager.utils; - -import java.util.concurrent.CompletableFuture; - -import org.bukkit.Location; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.jetbrains.annotations.NotNull; - -public interface SchedulerProvider { - - public void runPlatformAsync(final Runnable task); - - public void runPlatformAsyncTimer(final Runnable task, final long delay, final long period); - - public void runTask(final Runnable task); - - public void runTask(final Runnable task, final Entity entity); - - public void runTaskLater(final Runnable task, final Entity entity, final long delay); - - public void runTaskTimer(final Runnable task, final long delay, final long period); - - public void executeConsoleCommand(final String command); - - public void executePlayerCommand(final Player player, final String command); - - public boolean isPrimaryThread(); - - public CompletableFuture teleport(Player player, @NotNull Location loc); - - public void cancelAllTasks(); - -} diff --git a/pvpmanager/pom.xml b/pvpmanager/pom.xml index 1151a097d..489d49518 100644 --- a/pvpmanager/pom.xml +++ b/pvpmanager/pom.xml @@ -8,7 +8,6 @@ ${revision} - me.NoChance.PvPManager pvpmanager jar @@ -59,6 +58,12 @@ https://repo.md-5.net/content/groups/public/ + + + krypton + https://repo.kryptonmc.org/releases + + codemc-repo https://repo.codemc.org/repository/maven-public @@ -121,6 +126,19 @@ provided + + io.papermc.paper + paper-api + 1.21-R0.1-SNAPSHOT + provided + + + * + * + + + + net.sacredlabyrinth.phaed.simpleclans @@ -202,6 +220,14 @@ + + + me.neznamy + tab-api + 4.0.2 + provided + + com.github.TownyAdvanced @@ -232,24 +258,13 @@ provided - - - com.zaxxer - HikariCP - 4.0.3 - provided - - - org.xerial - sqlite-jdbc - 3.46.0.0 - test - + - org.apache.logging.log4j - log4j-core - 2.23.1 + com.github.TechFortress + GriefPrevention + 16.14.0 provided + true @@ -271,17 +286,30 @@ 5.12.0 test - - - me.chancesd.pvpmanager - pvpmanager-folia - ${revision} + com.zaxxer + HikariCP + 5.1.0 + test + + org.xerial + sqlite-jdbc + 3.45.3.0 + test + + + org.apache.logging.log4j + log4j-core + 2.23.1 + test + + + me.chancesd.sdutils sdutils - 1.2-SNAPSHOT + 1.3-SNAPSHOT \ No newline at end of file diff --git a/pvpmanager/src/main/java/me/NoChance/PvPManager/Commands/PvPOverride.java b/pvpmanager/src/main/java/me/NoChance/PvPManager/Commands/PvPOverride.java deleted file mode 100644 index d61023118..000000000 --- a/pvpmanager/src/main/java/me/NoChance/PvPManager/Commands/PvPOverride.java +++ /dev/null @@ -1,31 +0,0 @@ -package me.NoChance.PvPManager.Commands; - -import org.bukkit.ChatColor; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import me.NoChance.PvPManager.PvPlayer; -import me.NoChance.PvPManager.Managers.PlayerHandler; -import me.NoChance.PvPManager.Settings.Messages; - -public class PvPOverride implements CommandExecutor { - - private final PlayerHandler ph; - - public PvPOverride(final PlayerHandler ph) { - this.ph = ph; - } - - @Override - public final boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) { - if (sender instanceof Player) { - final PvPlayer pvPlayer = ph.get((Player) sender); - final boolean override = pvPlayer.toggleOverride(); - pvPlayer.message(Messages.PREFIXMSG + ChatColor.DARK_GREEN + "PvP Override set to: " + ChatColor.GOLD + override); - } - return true; - } - -} diff --git a/pvpmanager/src/main/java/me/NoChance/PvPManager/Commands/PvPStatus.java b/pvpmanager/src/main/java/me/NoChance/PvPManager/Commands/PvPStatus.java deleted file mode 100644 index f3faf48d9..000000000 --- a/pvpmanager/src/main/java/me/NoChance/PvPManager/Commands/PvPStatus.java +++ /dev/null @@ -1,50 +0,0 @@ -package me.NoChance.PvPManager.Commands; - -import org.bukkit.Bukkit; -import org.bukkit.command.Command; -import org.bukkit.command.CommandExecutor; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; - -import me.NoChance.PvPManager.PvPlayer; -import me.NoChance.PvPManager.Managers.PlayerHandler; -import me.NoChance.PvPManager.Settings.Messages; -import me.NoChance.PvPManager.Utils.CombatUtils; - -public class PvPStatus implements CommandExecutor { - - private final PlayerHandler ph; - - public PvPStatus(final PlayerHandler ph) { - this.ph = ph; - } - - @Override - public final boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) { - PvPlayer target; - if (args.length == 0 && sender instanceof Player) { - final Player player = (Player) sender; - final PvPlayer pvpPlayer = ph.get(player); - if (!pvpPlayer.hasPvPEnabled()) { - pvpPlayer.message(Messages.getSelfStatusDisabled()); - return true; - } - pvpPlayer.message(Messages.getSelfStatusEnabled()); - return true; - } else if (args.length == 1 && sender.hasPermission("pvpmanager.pvpstatus.others")) { - if (CombatUtils.isOnline(args[0])) { - target = ph.get(Bukkit.getPlayer(args[0])); - if (!target.hasPvPEnabled()) { - sender.sendMessage(Messages.getOthersStatusDisabled().replace("%p", args[0])); - return true; - } - sender.sendMessage(Messages.getOtherStatusEnabled().replace("%p", args[0])); - return true; - } - sender.sendMessage(Messages.getErrorPlayerNotFound().replace("%p", args[0])); - return true; - } - return false; - } - -} diff --git a/pvpmanager/src/main/java/me/NoChance/PvPManager/Dependencies/ForceToggleDependency.java b/pvpmanager/src/main/java/me/NoChance/PvPManager/Dependencies/ForceToggleDependency.java deleted file mode 100644 index ae8caae76..000000000 --- a/pvpmanager/src/main/java/me/NoChance/PvPManager/Dependencies/ForceToggleDependency.java +++ /dev/null @@ -1,17 +0,0 @@ -package me.NoChance.PvPManager.Dependencies; - -import org.bukkit.entity.Player; - -import me.NoChance.PvPManager.Player.CancelResult; - -public interface ForceToggleDependency extends Dependency { - - public boolean shouldDisable(Player player); - - public boolean shouldDisable(Player attacker, Player defender, CancelResult reason); - - public default boolean shouldDisableProtection() { - return getConfigBoolean("No Protection In War", true); - } - -} diff --git a/pvpmanager/src/main/java/me/NoChance/PvPManager/Dependencies/Hooks/KingdomsXHook.java b/pvpmanager/src/main/java/me/NoChance/PvPManager/Dependencies/Hooks/KingdomsXHook.java deleted file mode 100644 index 0e04837d8..000000000 --- a/pvpmanager/src/main/java/me/NoChance/PvPManager/Dependencies/Hooks/KingdomsXHook.java +++ /dev/null @@ -1,31 +0,0 @@ -package me.NoChance.PvPManager.Dependencies.Hooks; - -import org.bukkit.entity.Player; -import org.kingdoms.constants.player.KingdomPlayer; -import org.kingdoms.main.Kingdoms; - -import me.NoChance.PvPManager.Dependencies.BaseDependency; -import me.NoChance.PvPManager.Dependencies.ForceToggleDependency; -import me.NoChance.PvPManager.Dependencies.Hook; -import me.NoChance.PvPManager.Player.CancelResult; -import me.chancesd.sdutils.utils.Log; - -public class KingdomsXHook extends BaseDependency implements ForceToggleDependency { - - public KingdomsXHook(final Hook hook) { - super(hook); - Log.debug(Kingdoms.get().toString()); - } - - @Override - public boolean shouldDisable(final Player player) { - final KingdomPlayer kingdomPlayer = KingdomPlayer.getKingdomPlayer(player); - return kingdomPlayer.isInvading(); // hopefully this also returns true if they're being invaded - } - - @Override - public boolean shouldDisable(final Player attacker, final Player defender, final CancelResult reason) { - return shouldDisable(attacker) && shouldDisable(defender); - } - -} diff --git a/pvpmanager/src/main/java/me/NoChance/PvPManager/Libraries/Metrics/CustomMetrics.java b/pvpmanager/src/main/java/me/NoChance/PvPManager/Libraries/Metrics/CustomMetrics.java deleted file mode 100644 index be0b06ee1..000000000 --- a/pvpmanager/src/main/java/me/NoChance/PvPManager/Libraries/Metrics/CustomMetrics.java +++ /dev/null @@ -1,155 +0,0 @@ -package me.NoChance.PvPManager.Libraries.Metrics; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.concurrent.Callable; - -import org.bukkit.Bukkit; - -import me.NoChance.PvPManager.PvPManager; -import me.NoChance.PvPManager.Dependencies.Dependency; -import me.NoChance.PvPManager.Dependencies.Hook; -import me.NoChance.PvPManager.Settings.Settings; -import me.chancesd.sdutils.metrics.Metrics; - -public class CustomMetrics { - - public CustomMetrics(final PvPManager plugin) { - if (Settings.isReloading()) - return; - initMetrics(plugin); - } - - private void initMetrics(final PvPManager plugin) { - - final Metrics metrics = new Metrics(plugin, 5653, Settings.isOptOutMetrics()); - - metrics.addCustomChart(new Metrics.SimplePie("time_in_combat", new Callable() { - @Override - public String call() { - return Settings.isInCombatEnabled() ? Settings.getTimeInCombat() + " seconds" : "Disabled"; - } - })); - - metrics.addCustomChart(new Metrics.DrilldownPie("features", new Callable>>() { - @Override - public Map> call() throws Exception { - final Map> map = new HashMap<>(); - - map.put("Newbie Protection", getMapEntry(Settings.isNewbieProtectionEnabled() ? "Enabled" : "Disabled")); - map.put("Kill Abuse", getMapEntry(Settings.isKillAbuseEnabled() ? "Enabled" : "Disabled")); - map.put("Update Check", - getMapEntry(!Settings.isUpdateCheck() ? "Disabled" : !Settings.isAutoUpdate() ? "Update Check" : "Auto Update")); - map.put("PvP Blood", getMapEntry(Settings.isPvpBlood() ? "Enabled" : "Disabled")); - map.put("Drop Mode", getMapEntry(Settings.getDropMode().toString())); - map.put("Combat Nametags", getMapEntry(Settings.useNameTag() ? "Enabled" : "Disabled")); - map.put("Database Type", getMapEntry(plugin.getStorageManager().getStorage().getDatabaseType().toString())); - if (Settings.isBossBarEnabled() && Settings.isActionBarEnabled()) - map.put("Display Type", getMapEntry("Both")); - else if (!Settings.isBossBarEnabled() && !Settings.isActionBarEnabled()) - map.put("Display Type", getMapEntry("None")); - else - map.put("Display Type", getMapEntry(Settings.isBossBarEnabled() ? "Only Bossbar" : "Only Actionbar")); - return map; - } - })); - - if (Settings.isInCombatEnabled()) { - metrics.addCustomChart(new Metrics.SimplePie("player_drops_on_logout", new Callable() { - @Override - public String call() { - if (!Settings.isKillOnLogout()) - return "Kill On Logout Disabled"; - else if (!Settings.isDropInventory() && !Settings.isDropExp() && !Settings.isDropArmor()) - return "Keep Everything"; - else if (Settings.isDropInventory() && Settings.isDropExp() && Settings.isDropArmor()) - return "Drop Everything"; - else if (!Settings.isDropInventory() && !Settings.isDropArmor() && Settings.isDropExp()) - return "Only Drop Exp"; - else if (!Settings.isDropInventory() && !Settings.isDropExp() && Settings.isDropArmor()) - return "Only Drop Armor"; - else if (Settings.isDropInventory() && !Settings.isDropExp() && !Settings.isDropArmor()) - return "Only Drop Inventory"; - else if (!Settings.isDropInventory() && Settings.isDropExp() && Settings.isDropArmor()) - return "Only Keep Inventory"; - else if (Settings.isDropInventory() && Settings.isDropExp() && !Settings.isDropArmor()) - return "Only Keep Armor"; - else if (Settings.isDropInventory() && !Settings.isDropExp() && Settings.isDropArmor()) - return "Only Keep Exp"; - return ""; - } - })); - - } - - metrics.addCustomChart(new Metrics.AdvancedPie("hooks", new Callable>() { - @Override - public Map call() { - final Map valueMap = new HashMap<>(); - for (final Entry entry : plugin.getDependencyManager().getDependencies().entrySet()) { - valueMap.put(entry.getValue().getName(), 1); - } - final List extra = Arrays.asList("GSit", "NametagEdit", "GriefPrevention", "RedProtect", "GriefDefender", "Citizens", - "CMI", "TAB", "ProtectionStones"); - for (final String plugin : extra) { - if (Bukkit.getPluginManager().isPluginEnabled(plugin)) { - valueMap.put(plugin, 1); - } - } - return valueMap; - } - })); - - metrics.addCustomChart(new Metrics.SimplePie("locale", new Callable() { - @Override - public String call() throws Exception { - return Settings.getLocale(); - } - })); - - metrics.addCustomChart(new Metrics.SingleLineChart("players_in_combat", new Callable() { - @Override - public Integer call() throws Exception { - return PvPManager.getInstance().getPlayerHandler().getPlayersInCombat().size(); - } - })); - - metrics.addCustomChart(new Metrics.DrilldownPie("blocked_actions", () -> { - final Map> map = new HashMap<>(); - - map.put("EnderPearls", getMapEntry(Settings.isBlockEnderPearl())); - map.put("ChorusFruits", getMapEntry(Settings.isBlockChorusFruit())); - map.put("Teleport", getMapEntry(Settings.isBlockTeleport())); - map.put("Place Blocks", getMapEntry(Settings.isBlockPlaceBlocks())); - map.put("Interact", getMapEntry(Settings.blockInteract())); - map.put("Elytra", getMapEntry(Settings.isBlockGlide())); - map.put("Eat", getMapEntry(Settings.isBlockEat())); - map.put("Totem of Undying", getMapEntry(Settings.isBlockTotemUndying())); - map.put("Open Inventory", getMapEntry(Settings.isBlockInventoryOpen())); - final HashMap result = new HashMap<>(); - if (Settings.isStopCommands()) { - if (Settings.isCommandsWhitelist()) - result.put("Whitelist", 1); - else - result.put("Blacklist", 1); - } else - result.put("False", 1); - map.put("Commands", result); - return map; - })); - } - - private Map getMapEntry(final boolean value) { - return value ? getMapEntry("True") : getMapEntry("False"); - } - - private Map getMapEntry(final String key) { - final HashMap result = new HashMap<>(); - result.put(key, 1); - return result; - } - -} diff --git a/pvpmanager/src/main/java/me/NoChance/PvPManager/Listeners/MoveListener.java b/pvpmanager/src/main/java/me/NoChance/PvPManager/Listeners/MoveListener.java deleted file mode 100644 index f636946dd..000000000 --- a/pvpmanager/src/main/java/me/NoChance/PvPManager/Listeners/MoveListener.java +++ /dev/null @@ -1,54 +0,0 @@ -package me.NoChance.PvPManager.Listeners; - -import java.util.UUID; -import java.util.concurrent.TimeUnit; - -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.util.Vector; - -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; - -import me.NoChance.PvPManager.PvPlayer; -import me.NoChance.PvPManager.Dependencies.Hook; -import me.NoChance.PvPManager.Dependencies.RegionDependency; -import me.NoChance.PvPManager.Managers.PlayerHandler; -import me.NoChance.PvPManager.Settings.Messages; - -public class MoveListener implements Listener { - - private final PlayerHandler ph; - private final RegionDependency wg; - private final Cache cache = CacheBuilder.newBuilder().weakValues().expireAfterWrite(1, TimeUnit.SECONDS).build(); - - public MoveListener(final PlayerHandler ph) { - this.ph = ph; - wg = (RegionDependency) ph.getPlugin().getDependencyManager().getDependency(Hook.WORLDGUARD); - } - - @EventHandler(ignoreCancelled = true) - public final void onPlayerMove(final PlayerMoveEvent event) { - if (event.getFrom().getBlockX() == event.getTo().getBlockX() && event.getFrom().getBlockZ() == event.getTo().getBlockZ() - && event.getFrom().getBlockY() == event.getTo().getBlockY()) - return; - - final Player player = event.getPlayer(); - final PvPlayer pvplayer = ph.get(player); - if (!pvplayer.isInCombat()) - return; - - if (!wg.canAttackAt(null, event.getTo()) && wg.canAttackAt(null, event.getFrom())) { - final Vector newVel = event.getFrom().toVector().subtract(event.getTo().toVector()); - newVel.setY(newVel.getY() + 0.1).normalize().multiply(1.5); - player.setVelocity(newVel); - if (!cache.asMap().containsKey(event.getPlayer().getUniqueId())) { - pvplayer.message(Messages.getPushbackWarning()); - cache.put(player.getUniqueId(), player); - } - } - } - -} diff --git a/pvpmanager/src/main/java/me/NoChance/PvPManager/Listeners/MoveListener1_9.java b/pvpmanager/src/main/java/me/NoChance/PvPManager/Listeners/MoveListener1_9.java deleted file mode 100644 index 4e57e3608..000000000 --- a/pvpmanager/src/main/java/me/NoChance/PvPManager/Listeners/MoveListener1_9.java +++ /dev/null @@ -1,67 +0,0 @@ -package me.NoChance.PvPManager.Listeners; - -import java.util.UUID; -import java.util.concurrent.TimeUnit; - -import org.bukkit.Effect; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerMoveEvent; -import org.bukkit.util.Vector; -import org.jetbrains.annotations.NotNull; - -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; - -import me.NoChance.PvPManager.PvPlayer; -import me.NoChance.PvPManager.Managers.DependencyManager; -import me.NoChance.PvPManager.Managers.PlayerHandler; -import me.NoChance.PvPManager.Settings.Messages; -import me.NoChance.PvPManager.Utils.CombatUtils; - -public class MoveListener1_9 implements Listener { - - private final PlayerHandler playerManager; - private final DependencyManager depManager; - private final Cache cache = CacheBuilder.newBuilder().weakValues().expireAfterWrite(1, TimeUnit.SECONDS).build(); - - public MoveListener1_9(final PlayerHandler playerManager, final DependencyManager depManager) { - this.playerManager = playerManager; - this.depManager = depManager; - } - - @EventHandler(ignoreCancelled = true) - public final void onPlayerMove(final PlayerMoveEvent event) { - if (event.getFrom().getBlockX() == event.getTo().getBlockX() && event.getFrom().getBlockZ() == event.getTo().getBlockZ() - && event.getFrom().getBlockY() == event.getTo().getBlockY()) - return; - - final Player player = event.getPlayer(); - final PvPlayer pvplayer = playerManager.get(player); - if (!pvplayer.isInCombat()) - return; - - if (!depManager.canAttackAt(null, event.getTo()) && depManager.canAttackAt(null, event.getFrom())) { - final Vector newVel = event.getFrom().toVector().subtract(event.getTo().toVector()); - newVel.setY(0).normalize().multiply(1.6).setY(0.5); - CombatUtils.checkGlide(player); - player.setVelocity(sanitizeVector(newVel)); - if (!cache.asMap().containsKey(event.getPlayer().getUniqueId())) { - pvplayer.message(Messages.getPushbackWarning()); - event.getFrom().getWorld().playEffect(player.getEyeLocation(), Effect.SMOKE, 3); - cache.put(player.getUniqueId(), player); - } - } - } - - @NotNull - private Vector sanitizeVector(@NotNull final Vector vel) { - if (Double.isNaN(vel.getX())) - vel.setX(0); - if (Double.isNaN(vel.getZ())) - vel.setZ(0); - return vel; - } - -} diff --git a/pvpmanager/src/main/java/me/NoChance/PvPManager/Listeners/PlayerListener.java b/pvpmanager/src/main/java/me/NoChance/PvPManager/Listeners/PlayerListener.java deleted file mode 100644 index 5f7f50f57..000000000 --- a/pvpmanager/src/main/java/me/NoChance/PvPManager/Listeners/PlayerListener.java +++ /dev/null @@ -1,356 +0,0 @@ -package me.NoChance.PvPManager.Listeners; - -import me.chancesd.pvpmanager.world.CombatWorld; -import me.chancesd.sdutils.utils.Log; - -import java.util.Set; - -import org.bukkit.Material; -import org.bukkit.block.Block; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.block.Action; -import org.bukkit.event.block.BlockPlaceEvent; -import org.bukkit.event.entity.PlayerDeathEvent; -import org.bukkit.event.inventory.InventoryOpenEvent; -import org.bukkit.event.player.PlayerChangedWorldEvent; -import org.bukkit.event.player.PlayerCommandPreprocessEvent; -import org.bukkit.event.player.PlayerFishEvent; -import org.bukkit.event.player.PlayerFishEvent.State; -import org.bukkit.event.player.PlayerInteractEvent; -import org.bukkit.event.player.PlayerItemConsumeEvent; -import org.bukkit.event.player.PlayerJoinEvent; -import org.bukkit.event.player.PlayerKickEvent; -import org.bukkit.event.player.PlayerPickupItemEvent; -import org.bukkit.event.player.PlayerQuitEvent; -import org.bukkit.event.player.PlayerRespawnEvent; -import org.bukkit.event.player.PlayerTeleportEvent; -import org.bukkit.event.player.PlayerTeleportEvent.TeleportCause; -import org.bukkit.event.player.PlayerToggleFlightEvent; -import org.bukkit.inventory.ItemStack; -import me.NoChance.PvPManager.PvPlayer; -import me.NoChance.PvPManager.Dependencies.Hook; -import me.NoChance.PvPManager.Dependencies.WorldGuardHook; -import me.NoChance.PvPManager.Managers.PlayerHandler; -import me.NoChance.PvPManager.Player.CancelResult; -import me.NoChance.PvPManager.Settings.Messages; -import me.NoChance.PvPManager.Settings.Settings; -import me.NoChance.PvPManager.Utils.CombatUtils; -import me.chancesd.pvpmanager.setting.Permissions; -import me.chancesd.pvpmanager.utils.ScheduleUtils; - -@SuppressWarnings("deprecation") -public class PlayerListener implements Listener { - - private final PlayerHandler ph; - private final WorldGuardHook wg; - private Material mushroomSoup; - - public PlayerListener(final PlayerHandler ph) { - this.ph = ph; - this.wg = (WorldGuardHook) ph.getPlugin().getDependencyManager().getDependency(Hook.WORLDGUARD); - if (CombatUtils.isVersionAtLeast(Settings.getMinecraftVersion(), "1.13")) { - mushroomSoup = Material.MUSHROOM_STEW; - } else if (CombatUtils.isVersionAtLeast(Settings.getMinecraftVersion(), "1.0")) { // avoid loading Material class on unit tests - mushroomSoup = Material.getMaterial("MUSHROOM_SOUP"); - } - } - - @EventHandler(ignoreCancelled = true) - public final void onBlockPlace(final BlockPlaceEvent event) { - if (!Settings.isBlockPlaceBlocks() && !Settings.isBlockPlaceBlocksNewbie()) - return; - - final PvPlayer combatPlayer = ph.get(event.getPlayer()); - if (Settings.isBlockPlaceBlocks() && combatPlayer.isInCombat() || Settings.isBlockPlaceBlocksNewbie() && combatPlayer.isNewbie()) { - event.setCancelled(true); - combatPlayer.sendActionBar(Messages.getBlockPlaceBlockedInCombat(), 1000); - } - } - - @EventHandler(ignoreCancelled = true) - public final void onToggleFlight(final PlayerToggleFlightEvent event) { - if (Settings.isDisableFly() && event.isFlying() && ph.get(event.getPlayer()).isInCombat()) { - event.setCancelled(true); - } - } - - @EventHandler(ignoreCancelled = true) - public final void onPlayerEat(final PlayerItemConsumeEvent event) { - if (Settings.isBlockEat() && ph.get(event.getPlayer()).isInCombat() && event.getItem().getType().isEdible()) { - event.setCancelled(true); - ph.get(event.getPlayer()).sendActionBar(Messages.getEatBlockedInCombat(), 1000); - } - } - - @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) - public final void onPlayerKick(final PlayerKickEvent event) { - final Player player = event.getPlayer(); - Log.debugLazy(() -> player.getName() + " was kicked with reason: " + event.getReason() + " | Leave message: " + event.getLeaveMessage() - + " - In combat: " + ph.get(player).isInCombat()); - if (Settings.punishOnKick() && (!Settings.matchKickReason() || Settings.getPunishKickReasons().contains(event.getReason()))) - return; - - final PvPlayer pvPlayer = ph.get(player); - if (pvPlayer.isInCombat()) { - ph.untag(pvPlayer); - } - } - - @EventHandler // normal priority to avoid conflict with griefprevention - public final void onPlayerLogout(final PlayerQuitEvent event) { - final Player player = event.getPlayer(); - final PvPlayer pvPlayer = ph.get(player); - Log.debug(player.getName() + " quit with reason: " + event.getQuitMessage() + " - In combat: " + pvPlayer.isInCombat()); - if (pvPlayer.isInCombat() && !pvPlayer.hasPerm(Permissions.EXEMPT_COMBAT_LOG)) { - if (Settings.isLogToFile()) { - ph.getConfigManager().getLog().log(player.getName() + " tried to escape combat!"); - } - CombatUtils.executeCommands(Settings.getCommandsOnPvPLog(), player, player.getName()); - ph.applyPunishments(pvPlayer); - } - } - - @EventHandler(priority = EventPriority.MONITOR) - public final void onPlayerLogoutMonitor(final PlayerQuitEvent event) { - ph.removeUser(ph.get(event.getPlayer())); - } - - @EventHandler(priority = EventPriority.HIGH) - public final void onPlayerDeath(final PlayerDeathEvent event) { - final Player player = event.getEntity(); - if (CombatUtils.isWorldExcluded(player.getWorld().getName())) - return; - - final PvPlayer pvPlayer = ph.get(player); - final Player killer = player.getKiller(); - - // Player died in combat, process that - if (killer != null && !killer.equals(player)) { - final PvPlayer pKiller = ph.get(killer); - handlePvPDeath(player, pvPlayer, killer, pKiller); - } - - if (pvPlayer.isInCombat()) { - final Set enemies = pvPlayer.getEnemies(); - if (Settings.isUntagEnemy()) { - enemies.forEach(enemy -> enemy.removeEnemy(pvPlayer)); - } - ph.untag(pvPlayer); - } - - // Let's process player's inventory/exp according to config file - if (pvPlayer.hasPvPLogged()) { - ph.handleCombatLogDrops(event, player); - return; - } - - ph.handlePlayerDrops(event, player, killer); - } - - private void handlePvPDeath(final Player player, final PvPlayer pvPlayer, final Player killer, final PvPlayer pKiller) { - if (Settings.isKillAbuseEnabled() && !pKiller.hasPerm(Permissions.EXEMPT_KILL_ABUSE)) { - pKiller.addVictim(player); - } - if (wg == null || !wg.containsRegionsAt(killer.getLocation(), Settings.getKillsWGExclusions())) { - if (Settings.getMoneyReward() > 0) { - pKiller.giveReward(pvPlayer); - } - if (Settings.getMoneyPenalty() > 0) { - pvPlayer.applyPenalty(); - } - CombatUtils.executeCommands(Settings.getCommandsOnKill(), killer, killer.getName(), player.getName()); - } - } - - @EventHandler - public final void onPlayerUseSoup(final PlayerInteractEvent e) { - final Player player = e.getPlayer(); - if (CombatUtils.isWorldExcluded(player.getWorld().getName())) - return; - - final ItemStack i = player.getItemInHand(); - if (Settings.isAutoSoupEnabled() && i.getType() == mushroomSoup) { - if (player.getHealth() == player.getMaxHealth()) - return; - player.setHealth( - player.getHealth() + Settings.getSoupHealth() > player.getMaxHealth() ? player.getMaxHealth() - : player.getHealth() + Settings.getSoupHealth()); - if (Settings.isSoupBowlDisappear()) { - if (CombatUtils.isVersionAtLeast(Settings.getMinecraftVersion(), "1.9")) { - player.getInventory().getItemInMainHand().setAmount(0); - } else { - player.getInventory().setItemInHand(null); - e.setCancelled(true); - } - } else { - i.setType(Material.BOWL); - } - } - } - - @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) // cancel on low since some plugins check cancels on normal instead of monitor - public final void onPlayerInteract(final PlayerInteractEvent e) { - final Player player = e.getPlayer(); - if (CombatUtils.isWorldExcluded(player.getWorld().getName()) || e.getAction() != Action.RIGHT_CLICK_BLOCK) - return; - - final ItemStack i = player.getItemInHand(); - final PvPlayer pvplayer = ph.get(player); - final Block clickedBlock = e.getClickedBlock(); - if (clickedBlock == null) - return; - - if (i.getType() == Material.FLINT_AND_STEEL || i.getType() == Material.LAVA_BUCKET) { - for (final Player p : clickedBlock.getWorld().getPlayers()) { - if (player.equals(p) || !clickedBlock.getWorld().equals(p.getWorld()) || !player.canSee(p)) { - continue; - } - final PvPlayer target = ph.get(p); - if ((!target.hasPvPEnabled() || !pvplayer.hasPvPEnabled()) && clickedBlock.getLocation().distanceSquared(p.getLocation()) < 9) { - pvplayer.message(Messages.pvpDisabledOther(target.getName())); - e.setCancelled(true); - return; - } - } - } - if (Settings.blockInteract() && pvplayer.isInCombat()) { - final Material type = clickedBlock.getType(); - for (final String material : Settings.getBlockInteractItemList()) { - if (type.name().endsWith(material)) { - e.setCancelled(true); - pvplayer.sendActionBar(Messages.getInteractBlockedInCombat(), 1000); - return; - } - } - } - } - - @EventHandler(ignoreCancelled = true) - public final void onPlayerPickup(final PlayerPickupItemEvent e) { - if (Settings.isNewbieProtectionEnabled() && Settings.isBlockPickNewbies()) { - final PvPlayer player = ph.get(e.getPlayer()); - if (player.isNewbie()) { - e.setCancelled(true); - player.sendActionBar(Messages.getNewbiePickupItemBlocked(), 1000); - } - } - } - - @EventHandler - public final void onPlayerJoin(final PlayerJoinEvent event) { - final Player player = event.getPlayer(); - final PvPlayer pvPlayer = ph.get(player); - ScheduleUtils.runAsync(() -> { - if (player.isOp() || pvPlayer.hasPerm(Permissions.ADMIN)) { - Messages.sendQueuedMsgs(pvPlayer); - } - }); - - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public final void onPlayerTeleport(final PlayerTeleportEvent event) { - final Player player = event.getPlayer(); - if (CombatUtils.isNPC(player)) // Citizens seems to teleport NPCs very often so let's avoid creating new PvPlayer instances - return; - - final PvPlayer pvplayer = ph.get(player); - if (!Settings.isInCombatEnabled() || !pvplayer.isInCombat()) - return; - - if (event.getCause().equals(TeleportCause.ENDER_PEARL) && Settings.isBlockEnderPearl()) { - event.setCancelled(true); - pvplayer.message(Messages.getEnderpearlBlockedIncombat()); - } else if (CombatUtils.isVersionAtLeast(Settings.getMinecraftVersion(), "1.9") && event.getCause() == TeleportCause.CHORUS_FRUIT - && Settings.isBlockChorusFruit()) { - event.setCancelled(true); - pvplayer.message(Messages.getChorusBlockedInCombat()); - } else if (event.getCause().equals(TeleportCause.COMMAND) && Settings.isBlockTeleport()) { - event.setCancelled(true); - pvplayer.message(Messages.getTeleportBlockedInCombat()); - } - } - - @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) - public final void onCommand(final PlayerCommandPreprocessEvent event) { - if (Settings.isInCombatEnabled() && Settings.isStopCommands() || Settings.isNewbieProtectionEnabled()) { - final PvPlayer player = ph.get(event.getPlayer()); - final String[] givenCommand = event.getMessage().substring(1).split(" ", 3); - - if (player.isInCombat() && !player.hasPerm(Permissions.EXEMPT_BLOCK_COMMANDS)) { - final boolean contains = CombatUtils.recursiveContainsCommand(givenCommand, Settings.getCommandsAllowed()); - if (Settings.isCommandsWhitelist() != contains) { - event.setCancelled(true); - player.message(Messages.getCommandDeniedIncombat()); - } - } - if (player.isNewbie() && CombatUtils.recursiveContainsCommand(givenCommand, Settings.getNewbieBlacklist())) { - event.setCancelled(true); - player.message(Messages.getNewbieCommandBlocked()); - } - } - } - - @EventHandler(ignoreCancelled = true) - public final void onPlayerFish(final PlayerFishEvent event) { - final Player player = event.getPlayer(); - if (CombatUtils.isWorldExcluded(player.getWorld().getName())) - return; - - if (event.getState() == State.CAUGHT_ENTITY && event.getCaught() instanceof Player) { - final Player caught = (Player) event.getCaught(); - final CancelResult result = ph.tryCancel(player, caught); - if (result.isProtected()) { - event.setCancelled(true); - Messages.messageProtection(result, player, caught); - } // TODO trigger damage actions - } - } - - @EventHandler - public final void onPlayerRespawn(final PlayerRespawnEvent event) { - if (CombatUtils.isWorldExcluded(event.getPlayer().getWorld().getName())) - return; - if (Settings.isKillAbuseEnabled() && Settings.getRespawnProtection() != 0) { - final PvPlayer player = ph.get(event.getPlayer()); - player.setRespawnTime(System.currentTimeMillis()); - } - } - - @EventHandler - public final void onInventoryOpen(final InventoryOpenEvent event) { - if (!Settings.isBlockInventoryOpen()) - return; - final PvPlayer combatPlayer = ph.get((Player) event.getPlayer()); - if (combatPlayer.isInCombat()) { - event.setCancelled(true); - combatPlayer.sendActionBar(Messages.getInventoryBlockedInCombat(), 1000); - } - } - - @EventHandler - public void onChangeWorld(final PlayerChangedWorldEvent event) { - final Player player = event.getPlayer(); - final PvPlayer pvPlayer = ph.get(player); - final CombatWorld combatWorld = ph.getPlugin().getWorldManager().getWorld(player.getWorld()); - pvPlayer.setCombatWorld(combatWorld); - - final CombatWorld.WorldOptionState optionState = pvPlayer.getCombatWorld().isPvPForced(); - if (optionState == CombatWorld.WorldOptionState.NONE) - return; - if (pvPlayer.hasPvPEnabled() && optionState == CombatWorld.WorldOptionState.OFF) { - pvPlayer.setPvP(false); - pvPlayer.message(Messages.getErrorPvPToggleNoPvP()); - return; - } - if (!pvPlayer.hasPvPEnabled() && optionState == CombatWorld.WorldOptionState.ON) { - pvPlayer.setPvP(true); - pvPlayer.message(Messages.getErrorPvPToggleForcePvP()); - return; - } - } - -} diff --git a/pvpmanager/src/main/java/me/NoChance/PvPManager/Listeners/PlayerListener1_11.java b/pvpmanager/src/main/java/me/NoChance/PvPManager/Listeners/PlayerListener1_11.java deleted file mode 100644 index 79a5bcdc2..000000000 --- a/pvpmanager/src/main/java/me/NoChance/PvPManager/Listeners/PlayerListener1_11.java +++ /dev/null @@ -1,58 +0,0 @@ -package me.NoChance.PvPManager.Listeners; - -import org.bukkit.Material; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.Player; -import org.bukkit.entity.Projectile; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityResurrectEvent; -import org.bukkit.event.entity.ProjectileLaunchEvent; -import org.bukkit.projectiles.ProjectileSource; - -import me.NoChance.PvPManager.PvPlayer; -import me.NoChance.PvPManager.Dependencies.Hook; -import me.NoChance.PvPManager.Managers.PlayerHandler; -import me.NoChance.PvPManager.Settings.Messages; -import me.NoChance.PvPManager.Settings.Settings; -import me.chancesd.pvpmanager.utils.ScheduleUtils; - -public class PlayerListener1_11 implements Listener { - - private final PlayerHandler playerHandler; - - public PlayerListener1_11(final PlayerHandler ph) { - this.playerHandler = ph; - } - - @EventHandler - public void onProjectileLaunchEvent(final ProjectileLaunchEvent event) { - final Projectile entity = event.getEntity(); - final ProjectileSource shooter = entity.getShooter(); - if (Settings.getEnderPearlCooldown() <= 0 || entity.getType() != EntityType.ENDER_PEARL || !(shooter instanceof Player)) - return; - - final Player player = (Player) shooter; - final PvPlayer pvPlayer = playerHandler.get(player); - - if (pvPlayer.isInCombat()) { - // TODO add feedback while on cooldown - ScheduleUtils.runPlatformTask(() -> player.setCooldown(Material.ENDER_PEARL, Settings.getEnderPearlCooldown() * 20), player); - } - } - - @EventHandler - public void onEntityRessurrect(final EntityResurrectEvent event) { - if (!Settings.isBlockTotemUndying() || event.isCancelled() || event.getEntityType() != EntityType.PLAYER) - return; - - final Player player = (Player) event.getEntity(); - final PvPlayer pvPlayer = playerHandler.get(player); - if (pvPlayer.isInCombat()) { - event.setCancelled(true); - pvPlayer.message(Messages.getTotemBlockedInCombat()); - } - - } - -} diff --git a/pvpmanager/src/main/java/me/NoChance/PvPManager/Managers/ConfigManager.java b/pvpmanager/src/main/java/me/NoChance/PvPManager/Managers/ConfigManager.java deleted file mode 100644 index 246814249..000000000 --- a/pvpmanager/src/main/java/me/NoChance/PvPManager/Managers/ConfigManager.java +++ /dev/null @@ -1,132 +0,0 @@ -package me.NoChance.PvPManager.Managers; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.StandardCopyOption; -import java.util.Arrays; - -import org.bukkit.ChatColor; -import org.bukkit.configuration.Configuration; -import org.bukkit.configuration.file.YamlConfiguration; - -import me.NoChance.PvPManager.PvPManager; -import me.NoChance.PvPManager.Settings.LogFile; -import me.NoChance.PvPManager.Settings.Messages; -import me.NoChance.PvPManager.Settings.Settings; -import me.chancesd.sdutils.config.ConfigUpdater; -import me.chancesd.sdutils.utils.Log; - -public class ConfigManager { - - private static final String CONFIG_NAME = "config.yml"; - private final PvPManager plugin; - private final File configFile; - private YamlConfiguration config; - private LogFile log; - - public ConfigManager(final PvPManager plugin) { - this.plugin = plugin; - this.configFile = new File(plugin.getDataFolder(), CONFIG_NAME); - loadConfig(); - if (Settings.isLogToFile()) { - log = new LogFile(new File(plugin.getDataFolder(), "combatlogs.log")); - } - } - - private void loadConfig() { - checkConfigVersion(); - initConfig(); - } - - private void checkConfigVersion() { - if (!configFile.exists()) - return; - - plugin.reloadConfig(); - final Configuration defaults = plugin.getConfig().getDefaults(); - final int oldVersion = plugin.getConfig().getInt("Config Version", 0); - final int currentVersion = defaults != null ? defaults.getInt("Config Version") : 0; - - if (oldVersion == 0) { - resetConfig(); - return; - } - if (oldVersion < currentVersion) { - try { - ConfigUpdater.update(plugin, CONFIG_NAME, configFile, Arrays.asList("Config Version", "Metrics", "Update Check.Enabled")); - Log.infoColor("§aConfig file updated from version §c" + oldVersion + " §ato version §c" + currentVersion); - Log.warning("Checking the config file and adjusting the new settings is highly recommended"); - Messages.queueAdminMsg(Messages.PREFIXMSG + " §aConfiguration updated from version §c" + oldVersion + " §ato §c" + currentVersion); - Messages.queueAdminMsg(Messages.PREFIXMSG + " §aChecking the config file and adjusting the new settings is highly recommended"); - } catch (final IOException e) { - Log.severe("Error reading the config file!", e); - resetConfig(); - } - } - } - - private void initConfig() { - if (!configFile.exists()) { - this.prepareFile(configFile, CONFIG_NAME); - Log.infoColor(ChatColor.DARK_GREEN + "New config file created successfully!"); - } - try (InputStreamReader inputStream = new InputStreamReader(new FileInputStream(configFile), StandardCharsets.UTF_8)) { - this.config = YamlConfiguration.loadConfiguration(inputStream); - } catch (final IOException e) { - Log.severe("Config file not found", e); - } - Settings.initizalizeVariables(config); - } - - private void resetConfig() { - try { - Files.move(configFile.toPath(), configFile.toPath().resolveSibling("config.old.yml"), StandardCopyOption.REPLACE_EXISTING); - } catch (final IOException e) { - Log.severe("Error resetting config file", e); - } - initConfig(); - Log.warning("Due to an error reading the config, it was reset to default settings"); - Log.warning("This was likely caused by a mistake while you changed settings, like an extra space or missing quotes"); - Log.warning("The broken config was renamed to config.old.yml, you can copy your old settings manually if you need them"); - Messages.queueAdminMsg(Messages.PREFIXMSG + " §cDue to an error reading the config, it was reset to default settings" - + "\n§cThis was likely caused by a mistake while you changed settings, like an extra space or missing quotes"); - Messages.queueAdminMsg(Messages.PREFIXMSG + "§cThe broken config was renamed to config.old.yml, you can copy your old settings manually if you need them"); - } - - private void prepareFile(final File file, final String resource) { - try { - file.getParentFile().mkdirs(); - if (file.createNewFile() && resource != null && !resource.isEmpty()) { - this.copyResource(plugin.getResource(resource), file); - } - } catch (final IOException e) { - Log.severe("Error creating config file", e); - } - } - - private void copyResource(final InputStream resource, final File file1) { - try (OutputStream out = new FileOutputStream(file1)) { - int lenght; - final byte[] buf = new byte[1024]; - - while ((lenght = resource.read(buf)) > 0) { - out.write(buf, 0, lenght); - } - resource.close(); - } catch (final Exception e) { - Log.severe("Error copying config file", e); - } - } - - public LogFile getLog() { - return log; - } - -} diff --git a/pvpmanager/src/main/java/me/NoChance/PvPManager/Managers/DependencyManager.java b/pvpmanager/src/main/java/me/NoChance/PvPManager/Managers/DependencyManager.java deleted file mode 100644 index f37a7f0b3..000000000 --- a/pvpmanager/src/main/java/me/NoChance/PvPManager/Managers/DependencyManager.java +++ /dev/null @@ -1,276 +0,0 @@ -package me.NoChance.PvPManager.Managers; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Location; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; - -import me.NoChance.PvPManager.PvPManager; -import me.NoChance.PvPManager.Dependencies.AFKDependency; -import me.NoChance.PvPManager.Dependencies.BaseDependency; -import me.NoChance.PvPManager.Dependencies.Dependency; -import me.NoChance.PvPManager.Dependencies.DependencyException; -import me.NoChance.PvPManager.Dependencies.DisguiseDependency; -import me.NoChance.PvPManager.Dependencies.GodDependency; -import me.NoChance.PvPManager.Dependencies.Hook; -import me.NoChance.PvPManager.Dependencies.GroupDependency; -import me.NoChance.PvPManager.Dependencies.RegionDependency; -import me.NoChance.PvPManager.Dependencies.ForceToggleDependency; -import me.NoChance.PvPManager.Dependencies.WorldGuardHook; -import me.NoChance.PvPManager.Dependencies.Hooks.EssentialsHook; -import me.NoChance.PvPManager.Dependencies.Hooks.KingdomsXHook; -import me.NoChance.PvPManager.Dependencies.Hooks.LibsDisguisesHook; -import me.NoChance.PvPManager.Dependencies.Hooks.PlaceHolderAPIHook; -import me.NoChance.PvPManager.Dependencies.Hooks.SimpleClansHook; -import me.NoChance.PvPManager.Dependencies.Hooks.TownyHook; -import me.NoChance.PvPManager.Dependencies.Hooks.VaultHook; -import me.NoChance.PvPManager.Dependencies.Hooks.WorldGuardLegacyHook; -import me.NoChance.PvPManager.Dependencies.Hooks.WorldGuardModernHook; -import me.NoChance.PvPManager.Listeners.MoveListener; -import me.NoChance.PvPManager.Listeners.MoveListener1_9; -import me.NoChance.PvPManager.Player.CancelResult; -import me.NoChance.PvPManager.Settings.Settings; -import me.NoChance.PvPManager.Utils.CombatUtils; -import me.chancesd.pvpmanager.utils.ScheduleUtils; -import me.chancesd.sdutils.utils.Log; -import net.milkbowl.vault.economy.Economy; - -public class DependencyManager { - - private final HashMap dependencies = new HashMap<>(); - private final ArrayList attackChecks = new ArrayList<>(); - private final ArrayList regionChecks = new ArrayList<>(); - private final ArrayList godChecks = new ArrayList<>(); - private final ArrayList disguiseChecks = new ArrayList<>(); - private final ArrayList togglePvPChecks = new ArrayList<>(); - private final ArrayList afkChecks = new ArrayList<>(); - - public DependencyManager() { - if (Bukkit.getPluginManager().getPlugin("GriefPrevention") != null) { - Log.warning("GriefPrevention has been detected. GriefPrevention has some combat features without showing any feedback messages. " - + "Make sure to disable Punish Logout and set tag time to 0 seconds in GP config. " - + "Issues with those features often get wrongly blamed on PvPManager and cause conflicts due to the lack of GP feedback messages."); - } - if (Bukkit.getPluginManager().getPlugin("TAB") != null && Settings.useNameTag()) { - Log.info("TAB detected. If you want nametags to change while in combat, set 'anti-override' to false in TAB's config." - + " (Doing that will prevent TAB from changing nametags)"); - Log.info("Or use the premium version of PvPManager which hooks into TAB for nametag/tablist changes."); - } - if (Bukkit.getPluginManager().getPlugin("TAB-Bridge") != null && Settings.useNameTag()) { - Log.info("TAB-Bridge detected. Nametags in combat disabled due to incompatibility. Use the prefix/suffix placeholders instead"); - Settings.setUseNameTag(false); - } - final List failedHooks = setupHooks(Hook.values()); - // Delayed check for hooks that do not use softdepend - ScheduleUtils.runPlatformTask(() -> { - final Hook[] hooks = Arrays.stream(Hook.values()) - .filter(hook -> hook.isEnabled() && !isDependencyEnabled(hook) && !failedHooks.contains(hook)) - .toArray(Hook[]::new); - if (hooks.length == 0) - return; - Log.infoColor(ChatColor.LIGHT_PURPLE + "Delayed checking for any missing hooks..."); - setupHooks(hooks); - }); - } - - private List setupHooks(final Hook... hooks) { - final List failedHooks = new ArrayList<>(); - for (final Hook hook : hooks) { - try { - if (!hook.isEnabled()) { - if (hook.getDisabledWarning() != null) { - Log.warning(hook.getDisabledWarning()); - } - hook.getDisabledAction().run(); - continue; - } - attemptHookingInto(hook); - } catch (final NoClassDefFoundError | NoSuchMethodError | ClassCastException | NoSuchFieldError e) { - Log.warning("Your " + hook + " version is currently unsupported: " + hook.getDescription().getFullName()); - Log.warning(hook + " support disabled"); - failedHooks.add(hook); - } catch (final DependencyException e) { - Log.warning(e.getMessage()); - hook.getDisabledAction().run(); - failedHooks.add(hook); - } catch (final ExceptionInInitializerError e) { - // Ignore, only here for unit tests - Log.warning("Exception initializing " + hook); - } catch (final Exception | LinkageError e) { - Log.warning("Failed to enable support for " + hook.getDescription().getFullName() + ". Is " + hook + " up to date?"); - e.printStackTrace(); - failedHooks.add(hook); - } - } - return failedHooks; - } - - private void attemptHookingInto(final Hook hook) { - switch (hook) { - case SIMPLECLANS: - registerDependency(new SimpleClansHook(hook)); - break; - case VAULT: - registerDependency(new VaultHook(hook)); - break; - case WORLDGUARD: - if (CombatUtils.isVersionAtLeast(CombatUtils.stripTags(hook.getVersion()), "7.0")) { - registerDependency(new WorldGuardModernHook(hook)); - } else { - registerDependency(new WorldGuardLegacyHook(hook)); - } - break; - case ESSENTIALS: - registerDependency(new EssentialsHook(hook)); - break; - case PLACEHOLDERAPI: - registerDependency(new PlaceHolderAPIHook(hook)); - break; - case LIBSDISGUISES: - registerDependency(new LibsDisguisesHook(hook)); - break; - case TOWNY: - registerDependency(new TownyHook(hook)); - break; - case KINGDOMSX: - registerDependency(new KingdomsXHook(hook)); - break; - default: - registerDependency(new BaseDependency(hook)); - break; - } - } - - public final boolean canAttack(final Player attacker, final Player defender) { - for (final GroupDependency pvPlugin : attackChecks) - if (!pvPlugin.canAttack(attacker, defender)) - return false; - return true; - } - - public final boolean canAttackAt(final Player p, final Location l) { - for (final RegionDependency regionPlugin : regionChecks) { - if (!regionPlugin.canAttackAt(p, l)) - return false; - } - return true; - } - - public final void disableGodMode(final Player p) { - for (final GodDependency godPlugin : godChecks) { - if (godPlugin.hasGodMode(p)) { - godPlugin.disableGodMode(p); - } - } - } - - public final void disableDisguise(final Player p) { - for (final DisguiseDependency disguisePlugin : disguiseChecks) { - if (disguisePlugin.isDisguised(p)) { - disguisePlugin.unDisguise(p); - } - } - } - - public final boolean shouldDisableProtection(final Player attacker, final Player defender, final CancelResult reason) { - for (final ForceToggleDependency togglePvPPlugin : togglePvPChecks) { - if (togglePvPPlugin.shouldDisable(attacker, defender, reason)) - return true; - } - return false; - } - - public final boolean shouldProtectAFK(final Player player) { - for (final AFKDependency afkPlugin : afkChecks) { - if (afkPlugin.isAFK(player)) - return true; - } - return false; - } - - public void startListeners(final PvPManager plugin) { - if (Settings.borderHoppingPushback() && !regionChecks.isEmpty()) { - if (CombatUtils.isVersionAtLeast(Settings.getMinecraftVersion(), "1.9")) { - Bukkit.getPluginManager().registerEvents(new MoveListener1_9(plugin.getPlayerHandler(), this), plugin); - } else if (CombatUtils.isVersionAtLeast(Settings.getMinecraftVersion(), "1.8")) { - Bukkit.getPluginManager().registerEvents(new MoveListener(plugin.getPlayerHandler()), plugin); - } else { - Log.warning("Pushback on border hopping not available for 1.7.10 or below! Feature disabled!"); - Settings.setBorderHoppingPushback(false); - } - } - if (isDependencyEnabled(Hook.WORLDGUARD)) { - ((WorldGuardHook) getDependency(Hook.WORLDGUARD)).startListener(plugin.getPlayerHandler()); - } - } - - public boolean isDependencyEnabled(final Hook d) { - return dependencies.containsKey(d); - } - - public Dependency getDependency(final Hook h) { - return dependencies.get(h); - } - - public void registerDependency(final Dependency dep) { - dependencies.put(dep.getHook(), dep); - if (dep instanceof GroupDependency) { - attackChecks.add((GroupDependency) dep); - } - if (dep instanceof RegionDependency) { - regionChecks.add((RegionDependency) dep); - } - if (dep instanceof GodDependency) { - godChecks.add((GodDependency) dep); - } - if (dep instanceof DisguiseDependency) { - disguiseChecks.add((DisguiseDependency) dep); - } - if (dep instanceof ForceToggleDependency) { - final ForceToggleDependency togglePvPHook = (ForceToggleDependency) dep; - if (togglePvPHook.shouldDisableProtection()) { - togglePvPChecks.add(togglePvPHook); - } - } - if (dep instanceof AFKDependency) { - final AFKDependency afkHook = (AFKDependency) dep; - if (afkHook.shouldProtectAFK()) { - afkChecks.add(afkHook); - } - } - } - - public void unregisterDependency(final Dependency dep) { - dependencies.remove(dep.getHook()); - attackChecks.remove(dep); - regionChecks.remove(dep); - godChecks.remove(dep); - disguiseChecks.remove(dep); - togglePvPChecks.remove(dep); - } - - public JavaPlugin getDependencyMainClass(final Hook h) { - if (isDependencyEnabled(h)) - return dependencies.get(h).getPlugin(); - return null; - } - - public final Economy getEconomy() { - if (isDependencyEnabled(Hook.VAULT)) - return ((VaultHook) dependencies.get(Hook.VAULT)).getEconomy(); - return null; - } - - @SuppressWarnings("unchecked") - public Map getDependencies() { - return (Map) dependencies.clone(); - } - -} diff --git a/pvpmanager/src/main/java/me/NoChance/PvPManager/Managers/DisplayManager.java b/pvpmanager/src/main/java/me/NoChance/PvPManager/Managers/DisplayManager.java deleted file mode 100644 index 5ab498325..000000000 --- a/pvpmanager/src/main/java/me/NoChance/PvPManager/Managers/DisplayManager.java +++ /dev/null @@ -1,69 +0,0 @@ -package me.NoChance.PvPManager.Managers; - -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import org.bukkit.Bukkit; -import org.bukkit.boss.BossBar; - -import me.NoChance.PvPManager.PvPManager; -import me.NoChance.PvPManager.PvPlayer; -import me.NoChance.PvPManager.Player.display.ProgressBar; -import me.NoChance.PvPManager.Settings.Settings; -import me.NoChance.PvPManager.Utils.ChatUtils; -import me.chancesd.sdutils.utils.Log; - -public class DisplayManager { - - private final Map actionBars = new HashMap<>(); - private final Map bossBars = new ConcurrentHashMap<>(); - private final PvPManager plugin; - - public DisplayManager(final PvPManager plugin) { - this.plugin = plugin; - } - - public void updateBossbar(final PvPlayer player, final double timePassed, final int totalTime) { - final BossBar bossBar = bossBars.computeIfAbsent(player, this::setupBossbar); - final String message = Settings.getBossBarMessage().replace("