Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Плагин [ADMIN/SEC] CommandSpy v4.0 - шпионь за игроками [1.8.9+]

Говнокод говнокодом, а чёрный список команд и игроков нужен:)
 
Вообще эта фича для администраторов/персонала сервера, глупо раздавать донатерам такие полномочия
Согласен, но идёт 2017 год и почти у всех такие плагины. Это привлекает аудиторию.
 
не могу скинуть файлом, так что, простите уж, скину сообщением
Код:
package ru.dondays.commandspy;

import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.server.ServerCommandEvent;
import org.bukkit.plugin.java.JavaPlugin;
import ru.tehkode.permissions.bukkit.PermissionsEx;

public class Main
    extends JavaPlugin
    implements Listener {

    private boolean logConsole;
    private List<String> ignore;
  
    private ConsoleListener consoleListener;
  
    private Set<Player> spy;
    private boolean pex;
  
    @Override
    public void onEnable() {
        this.saveDefaultConfig();
        this.load();
        this.spy = new HashSet<>();
        try {
            Class.forName("ru.tehkode.permissions.bukkit.PermissionsEx");
            this.pex = true;
        } catch(final ClassNotFoundException ignore) {
            this.pex = false;
        }
        this.getServer().getPluginManager().registerEvents(this, this);
    }
  
    @EventHandler(priority=EventPriority.HIGHEST)
    public void onPlayerCommand(final PlayerCommandPreprocessEvent e) {
        if(e.isCancelled()) {
            return;
        }
        for(final String ignore: this.ignore) {
            if(!e.getMessage().startsWith(ignore)) {
                continue;
            }
            return;
        }
        this.spy.forEach(player -> {
            player.sendMessage("§f[§cCommandSpy§f] " + (this.pex ? PermissionsEx.getUser(e.getPlayer()).getPrefix() : "") + e.getPlayer().getName() +" §fвыполняет команду: §a" + e.getMessage());
        });
    }

    @Override
    public boolean onCommand(final CommandSender sender, final Command cmd, final String label, final String[] args) {
        if(args.length == 1 && args[0].toLowerCase().equalsIgnoreCase("reload")) {
            if(!sender.hasPermission("commandspy.reload")) {
                sender.sendMessage("§f[§cCommandSpy§f] §cУ вас недостаточно прав!");
                return false;
            }
            this.reloadConfig();
            this.load();
            sender.sendMessage("§f[§cCommandSpy§f] Конфигурация успешно перезагружена!");
            return false;
        }
        if(!(sender instanceof Player)) {
            sender.sendMessage("§f[§cCommandSpy§f] §cPlayers only :C");
            return false;
        }
        if(!sender.hasPermission("commandspy.spy")) {
            sender.sendMessage("§f[§cCommandSpy§f] §cУ вас недостаточно прав! :C");
            return false;
        }
        if(!this.spy.contains((Player)sender)) {
            this.spy.add((Player)sender);
        } else {
            this.spy.remove((Player)sender);
        }
        sender.sendMessage("§f[§cCommandSpy§f] Вы " + (this.spy.contains((Player)sender) ? "§aвключили" : "§cвыключили") + " §fслежку за игроками.");
        return true;
    }
  
    private void load() {
        this.logConsole = this.getConfig().getBoolean("AnnounceConsoleCommands");
        this.ignore = this.getConfig().getStringList("CommandsBlacklist");
        if(!this.logConsole && this.consoleListener != null) {
            HandlerList.unregisterAll(this.consoleListener);
        } else if(this.logConsole && this.consoleListener == null) {
            this.getServer().getPluginManager().registerEvents((this.consoleListener == null ? (this.consoleListener = new ConsoleListener()) : this.consoleListener), this);
        }
    }
  
    private class ConsoleListener
        implements Listener {
      
        @EventHandler(priority=EventPriority.HIGHEST)
        public void onConsoleCommand(final ServerCommandEvent e) {
            if(e.isCancelled()) {
                return;
            }
            for(final String ignore: Main.this.ignore) {
                if(!e.getCommand().startsWith(ignore)) {
                    continue;
                }
                return;
            }
            Main.this.spy.forEach(player -> {
                player.sendMessage("§f[§cCommandSpy§f] §eКонсоль §fвыполняет команду: §a" + e.getCommand());
            });
        }
    }
}
А в плагине код закрыт чтоли?
 
А почему бы не использовать Vault, чтобы поддерживать не только префиксы PermissionsEX?
 
А почему бы не использовать Vault, чтобы поддерживать не только префиксы PermissionsEX?
Начнем с того, что все используют пекс. А вообще, мне было просто лень интегрировать Vault
p.s.: про использование его апи знаю
 
Насчет изменения версий: http://semver.org/lang/ru/
Тут, конечно, нет публичного API, но изменение мажорной версии в любом подразумевает что-то более глобальное, чем добавление поддержки цветовых кодов
 
Насчет изменения версий: http://semver.org/lang/ru/
Тут, конечно, нет публичного API, но изменение мажорной версии в любом подразумевает что-то более глобальное, чем добавление поддержки цветовых кодов
хз, лично я, когда пишу плагин для себя всегда пишу версию 1.0, а тут, при каждом обновлении, тупо увеличиваю версию плагина на 1
 

Поделиться этой страницей

Назад
Верх