Иконка ресурса

Для ядра Protocoller API 0.0.5

Нет прав для скачивания
Поддерживаемые версии
  1. 1.8
  2. 1.9
  3. 1.10
  4. 1.11
  5. 1.12
  6. 1.13
  7. 1.14
  8. 1.15
  9. 1.16
  10. 1.17
  11. 1.18
  12. 1.19
Protocoller

Это весьма простой в использовании "перехватчик" исходящих/входящих пакетов Minecraft.
Иногда невозможно осуществить что-либо с использованием стандартных API, с помощью данного плагина, вы получаете возможность перехватывать пакеты при их отправке/получении и редактировать их, что значительно расширяет возможности разработчика плагина. Так же можно создавать свои пакеты что здесь также просто, все(почти) классы Minecraft необходимые для создания пакетов присутствуют и деобфусцированы, а так же все адаптировано под мультиверсионность.


Пример работы с API:
(Или на GitHub'e)
Java:
package ExamplePlugin;

import net.alis.protocoller.Protocoller;
import net.alis.protocoller.ProtocollerClient;
import net.alis.protocoller.event.PacketEventsManager;
import net.alis.protocoller.event.impl.ManagerType;
import net.alis.protocoller.plugin.exception.BannedClientException;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;

public final class MainClass extends JavaPlugin {

    public static ProtocollerClient protocollerApi;
    public static PacketEventsManager syncEventManager;
    public static PacketEventsManager asyncEventManager;

    @Override
    public void onEnable() {
        try {
            protocollerApi = Protocoller.get().registerClient((Plugin) this);
        } catch (BannedClientException e) {
            throw new RuntimeException(e);
        }

        syncEventManager = protocollerApi.getEventManager(ManagerType.SYNCHRONOUS);
        asyncEventManager = protocollerApi.getEventManager(ManagerType.ASYNCHRONOUS);

        syncEventManager.registerListener(protocollerApi, new ExampleSyncPacketListener());
        asyncEventManager.registerListener(protocollerApi, new ExampleAsyncPacketListener());

    }

    @Override
    public void onDisable() { }
}
Java:
package ExamplePlugin;

import net.alis.protocoller.event.async.AsyncPacketLoginReceiveEvent;
import net.alis.protocoller.event.impl.PacketEventHandler;
import net.alis.protocoller.event.impl.PacketEventPriority;
import net.alis.protocoller.event.impl.PacketListener;
import net.alis.protocoller.packet.PacketType;
import net.alis.protocoller.packet.packets.login.PacketLoginInStart;
import net.alis.protocoller.plugin.managers.LogsManager;
import net.alis.protocoller.samples.authlib.GameProfile;

public class ExampleAsyncPacketListener implements PacketListener {

    @PacketEventHandler(eventPriority = PacketEventPriority.NORMAL, ignoreCancelled = true)
    public void onPlayerLoginStart(AsyncPacketLoginReceiveEvent event) {
        if(event.getPacketType() == PacketType.Login.Client.START) {
            PacketLoginInStart loginPack = new PacketLoginInStart(event.getData());
            GameProfile prePlayerData = loginPack.getGameProfile();
            LogsManager.get().getLogger().info("Player \"" + prePlayerData.getName() + "\" will join the server soon");
        }
    }

}
Java:
package ExamplePlugin;

import net.alis.protocoller.NetworkPlayer;
import net.alis.protocoller.event.impl.PacketListener;
import net.alis.protocoller.event.sync.PacketPlaySendEvent;
import net.alis.protocoller.packet.PacketType;
import net.alis.protocoller.packet.packets.game.PacketPlayOutAbilities;
import org.bukkit.entity.Player;

public class ExampleSyncPacketListener implements PacketListener {

    public void yourCustomMethodName(PacketPlaySendEvent event) {
        if(event.getPacketType() == PacketType.Play.Server.ABILITIES) {
            PacketPlayOutAbilities abilities = new PacketPlayOutAbilities(event.getData());
            NetworkPlayer networkPlayer = event.getNetworkPlayer();
            Player player = event.getNetworkPlayer().getBukkitPlayer();
            if(player.getName().equalsIgnoreCase("ALis")) {
                if(!abilities.isCanFly()) abilities.setCanFly(true);
                event.setPacket(abilities);
            }
            return;
        }
    }

}
Java:
package ExamplePlugin;

import net.alis.protocoller.NetworkPlayer;
import net.alis.protocoller.NetworkServer;
import net.alis.protocoller.packet.packets.game.PacketPlayOutChat;
import net.alis.protocoller.plugin.enums.Version;
import net.alis.protocoller.samples.network.NetworkManager;
import net.alis.protocoller.samples.network.PlayerConnection;
import net.alis.protocoller.samples.network.chat.ChatComponent;
import net.md_5.bungee.api.MessageType;
import net.md_5.bungee.api.chat.HoverEvent;
import org.bukkit.Bukkit;

import java.util.UUID;

public class NetworkPlayerWorkExample {

    public void networkPlayerWorking() {
        NetworkServer server = MainClass.protocollerApi.getServer();
        NetworkPlayer player = server.getPlayer(UUID.fromString("ALis"));
        NetworkPlayer player1 = server.getPlayer("ALis");
        NetworkPlayer player2 = server.getPlayer(Bukkit.getPlayer("ALis"));

        PlayerConnection connection = player.getConnection();
        int ping = player.getPing();
        int protocol = player.getVersion().getProtocol();
        String versionName = player.getVersion().asString();

        ChatComponent component = new ChatComponent("Welcome to the ");
        component.append("server " + player.getName()).setHoverEvent(HoverEvent.Action.SHOW_TEXT, "You amazing!");
        connection.sendPacket(new PacketPlayOutChat(component, MessageType.CHAT, player.getUniqueId()));

        NetworkManager manager = connection.getNetworkManager();
    }

}
Java:
package ExamplePlugin;

import io.netty.channel.ChannelFuture;
import net.alis.protocoller.NetworkServer;
import net.alis.protocoller.samples.authlib.GameProfile;
import net.alis.protocoller.samples.authlib.properties.Property;
import net.alis.protocoller.samples.network.NetworkManager;
import net.alis.protocoller.samples.network.chat.ChatComponent;
import net.alis.protocoller.samples.network.status.ServerData;
import net.alis.protocoller.samples.network.status.ServerPing;
import net.alis.protocoller.samples.network.status.ServerPingPlayerSample;
import net.alis.protocoller.samples.server.ServerConnection;
import net.alis.protocoller.samples.server.rcon.QueryThreadGC4;
import net.alis.protocoller.samples.server.rcon.RconThread;
import net.alis.protocoller.samples.server.rcon.RemoteControlSession;
import net.alis.protocoller.samples.server.rcon.RemoteStatusReply;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

public class NetworkServerWorkExample {

    public static void serverConnectionAccess() {
        NetworkServer server = MainClass.protocollerApi.getServer();
        ServerConnection connection = server.getConnection();
        List<NetworkManager> managers = connection.getConnections();
        List<ChannelFuture> channels = connection.getChannels();
        NetworkManager manager = managers.get(0);
        Property[] p = manager.getSpoofedProfiles();
    }

    public static void changeServerStatusInfo() {
        NetworkServer server = MainClass.protocollerApi.getServer();
        ServerPing ping = server.getServerStatus();
        ping.setVersion(new ServerData("Spigot 1.25.1", 756));
        ping.setFavicon("Some favicon");
        ping.setDescription(new ChatComponent("A best minecraft server!"));
        ServerPingPlayerSample playerSample = new ServerPingPlayerSample(10000, 999);
        List<GameProfile> profiles = new ArrayList<>();
        profiles.add(new GameProfile(UUID.randomUUID(), "ALis"));
        profiles.add(new GameProfile(UUID.randomUUID(), "Tasher228"));
        profiles.add(new GameProfile(UUID.randomUUID(), "Notch"));
        playerSample.setSample(profiles.toArray(new GameProfile[0]));
        ping.setPlayers(playerSample);
        server.setServerStatus(ping);
    }

    public static void changeGC4Thread() {
        NetworkServer server = MainClass.protocollerApi.getServer();
        QueryThreadGC4 query = server.getQueryThreadGC4();
        if(query != null) { //QueryThread can be null(Может возвращать null)
            query.setMaxPlayers(1000);
            RemoteStatusReply statusReply = query.getRulesResponse();
            byte[] replyBytes = statusReply.toByteArray();
            query.setServerIp("1.1.1.1");
            query.setServerName("Best minecraft server");
            int queryPort = query.getQueryPort();
        }
    }

    public void rconCheck() {
        NetworkServer server = MainClass.protocollerApi.getServer();
        RconThread rcon = server.getRconThread(); //RconThread can be null(Может быть null)
        if(rcon != null){
            List<RemoteControlSession> sessions = rcon.getClients();
            RemoteControlSession session = sessions.get(0);
            if(session.isAuthed()) {
                session.setAuthed(false);
            }
        }
    }

}
Java:
package ExamplePlugin;

import net.alis.protocoller.NetworkServer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.jetbrains.annotations.NotNull;

import java.util.List;

public class CommandWorkingExample {

    public void registerCommands() {
        NetworkServer server = MainClass.protocollerApi.getServer();
        Command command = server.getCommandMap().getCommand("tpa");
        server.getCommandMap().unregister(command);
        server.getCommandMap().register("plugin_name", new ExampleCommand("example"));
        server.syncCommands();
    }

    public static class ExampleCommand extends Command {

        protected ExampleCommand(@NotNull String name) {
            super(name);
            this.setPermission("example.permission");
            this.setAliases(List.of("example1", "example2"));
        }

        @Override
        public boolean execute(@NotNull CommandSender commandSender, @NotNull String s, @NotNull String[] strings) {
            commandSender.sendMessage("Command successfully executed!");
            return true;
        }

        @NotNull
        @Override
        public List<String> tabComplete(@NotNull CommandSender sender, @NotNull String alias, @NotNull String[] args) throws IllegalArgumentException {
            return List.of("Your", "custom", "completions");
        }
    }

}
Исходный код
https://github.com/ItsALisName/Protocoller
Команды и права
  1. /protocoller, /protocoller ?, /protocoller help - показывает список команд с описанием; (PERMISSION: protocoller.command)
  2. /protocoller version - показывает текущую версию плагина; (PERMISSION: protocoller.command.version)
  3. /protocoller checkupdates - принудительно запускает проверку обновлений; (PERMISSION: protocoller.command.checkupdates)
  4. /protocoller users - показывает список пользователей API; (PERMISSION: protocoller.command.users)
  5. /protocoller users unregister <name> - удаляет определенного пользователя; (PERMISSION: protocoller.command.users.unregister)
  6. /protocoller reload - перезагружает конфигурацию; (PERMISSION: protocoller.command.reload)
Для выполенения любой команды из данных нужно как минимум право 'protocoller.command'
При выполнение из игры все команды снабжены автозаполением, наводимым и кликабельным текстом(В некоторых случаях при наличии определенных прав).​
  • Мне нравится (+1)
Реакции: GhostSetuper и Destroy
Автор
ReloGG
Скачивания
5
Просмотры
1 274
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок

Поделиться ресурсом

Последние обновления

  1. Version 0.0.5

    Добавлен метод NetworkPlayer#setGameProfile(GameProfile) Исправлен метод...
  2. Система авто-обновления

    Protocoller v0.0.4 (BETA)Добавлена проверка более новых версий с возможность автоматической...
  3. Версия 0.0.3

    Что нового: Добавлены методы NetworkPlayer#getGameProfile()...
Назад
Сверху Снизу