1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Плагин Protocoller v0.0.5 - Многофункциональный и простой в использовании прехватчик пакетов Minecraft

Тема в разделе "Неподтвержденные плагины", создана пользователем ReloGGrc, 8 апр 2023.

  1. Автор темы
    ReloGGrc

    ReloGGrc Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    ALis
    GitHub: https://github.com/ItsALisName/Protocoller
    Скачать: https://github.com/ItsALisName/Protocoller/releases/

    Protocoller


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


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

    Код:
    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() { }
    
    }
    
    
    Код:
    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");
            }
        }
    
    }
    Код:
    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;
            }
        }
    
    }
    Код:
    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();
    
        }
    
    
    }
    Код:
    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);
                }
            }
        }
    
    }
    
    Код:
    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");
            }
        }
    
    }

    Команды:
    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'
    При выполнение из игры все команды снабжены автозаполением, наводимым и кликабельным текстом(В некоторых случаях при наличии определенных прав).​
     
    Последнее редактирование: 24 апр 2023
  2. Автор темы
    ReloGGrc

    ReloGGrc Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    ALis
    Обновление, версия 0.0.3:
    • Добавлены методы NetworkPlayer#getGameProfile(), NetworkPlayer#getPlayerAbilities(), NetworkPlayer#setPlayerAbilities(PlayerAbilities);
    • Добавлен пакет ClientboundChunksBiomesPacket
    • Добавлен пакет ClientboundCustomChatCompletionsPacket
    • Добавлен пакет ClientboundDamageEventPacket
    • Добавлен пакет ClientboundDeleteChatPacket
    • Добавлен пакет ClientboundDisguisedChatPacket
    • Добавлен пакет ClientboundHurtAnimationPacket
    • Добавлен пакет ClientboundInitializeBorderPacket

    Новая версия доступна на GitHub'e
     
  3. Автор темы
    ReloGGrc

    ReloGGrc Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    ALis
    Protocoller v0.0.4
    • (BETA) Добавлена проверка более новых версий с возможность автоматической загрузки новой версии (Все настраивается в конфиге)
    Новая версия доступна на GitHub'e
     
  4. imDaniX

    imDaniX Активный участник Пользователь

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    В чем преимущество над ProtocolLib?
     
  5. Автор темы
    ReloGGrc

    ReloGGrc Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    ALis
    На мой взгляд только в том, что он проще, ну а вообще кому как
     
  6. Автор темы
    ReloGGrc

    ReloGGrc Активный участник Пользователь

    Баллы:
    46
    Имя в Minecraft:
    ALis
    Protocoller v0.0.5
    • Добавлен метод NetworkPlayer#setGameProfile(GameProfile)
    • Исправлен метод ClientboundPlayerInfoRemovePacket#setPlayerList(List<UUID>)
    • Добавлен пакет ClientboundPlayerInfoUpdatePacket
    • Добавлен пакет ClientboundServerDataPacket
    • Добавлен метод NetworkServer#worlds() [BETA]
    • Доработан класс Vector2F
    • Добавлен конструктор для пакета ClientboundInitializeBorderPacket
    • Добавлен конструктор для пакета ClientboundLevelChunkPacketData
    • Добавлен метод NetworkServer#getWorldServer(String) [BETA]
    • Добавлен конструктор для пакета ClientboundLevelChunkWithLightPacket
    • Добавлен конструктор для пакета ClientboundLightUpdatePacketData
    • Исправлен пакет ClientboundSetSimulationDistancePacket
    • Добавлен конструктор для пакета PacketPlayInBEdit(Только для версий 1.17 и выше)
    • Добавлен метод NetworkServer#getCommandListenerWrapper()
    • Добавлен метод NetworkPlayer#getCommandListenerWrapper()
    • Добавлен метод NetworkPlayer#getWorld()
    • Добавлен метод NetworkPlayer#setPlayerInput(float, float, boolean, boolean)
    • Добавлен метод NetworkPlayer#restoreFrom(NetworkPlayer, boolean)
    • Добавлен метод NetworkPlayer#sendChatMessage(ChatComponent)
    • Добавлен метод NetworkPlayer#sendChatMessageAsync(ChatComponent)
    • Добавлен метод NetworkPlayer#sendActionbarText(ChatComponent)
    • Добавлен метод NetworkPlayer#sendActionbarTextAsync(ChatComponent)
    • Добавлен метод NetworkPlayer#trackChunk(ChunkCoordIntPair, Packet)
    • Добавлен метод NetworkPlayer#untrackChunk(ChunkCoordIntPair)
    • Добавлен пакет PacketPlayOutTitle
    • Добавлен метод NetworkServer#syncCommands()
    • Добавлен пакет ClientboundSetTitleTextPacket
    • Добавлен пакет ClientboundSetSubtitleTextPacket
    • Добавлен метод NetworkPlayer#sendTitle(TitleData)
    • Добавлен метод NetworkPlayer#sendTitleAsync(TitleData)
    • Добавлен пакет ClientboundSetBorderCenterPacket
    • Добавлен пакет ClientboundSetBorderLerpSizePacket
    • Добавлен пакет ClientboundSetBorderSizePacket
    • Добавлен пакет ClientboundSystemChatPacket
    • Добавлен пакет ClientboundUpdateEnabledFeaturesPacket
    • Добавлен пакет ClientboundPlayerChatPacket
    • В файле general.yml добавлен параметр replace-plugins-command
    • В файле general.yml добавлен параметр async.command-execution
    • Добавлен метод NetworkServer#getCommandMap()
    • В файле general.yml добавлен параметр disable-reload-command
    • В файле general.yml добавлен параметр replace-version-command
    • В файле general.yml добавлен параметр version-command-message
    • Обновлен пакет PacketPlayOutAdvancements
    Добавлены команды:
    • /protocoller, /protocoller ?, /protocoller help - показывает список команд с описанием; (PERMISSION: protocoller.command)
    • /protocoller version - показывает текущую версию плагина; (PERMISSION: protocoller.command.version)
    • /protocoller checkupdates - принудительно запускает проверку обновлений; (PERMISSION: protocoller.command.checkupdates)
    • /protocoller users - показывает список пользователей API; (PERMISSION: protocoller.command.users)
    • /protocoller users unregister <name> - удаляет определенного пользователя; (PERMISSION: protocoller.command.users.unregister)
    • /protocoller reload - перезагружает конфигурацию; (PERMISSION: protocoller.command.reload)

    Новая версия доступна на GitHub'e
     

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