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

Помогите "Ловление" сообщений и отмена их отправки

Тема в разделе "Разработка плагинов для новичков", создана пользователем GoodPlayer, 29 окт 2024.

Статус темы:
Закрыта.
  1. Автор темы
    GoodPlayer

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

    Баллы:
    66
    Имя в Minecraft:
    GoodPlayer
    Всем привет. Есть плагин, который отправляет определённое сообщение игроку. Исходников этого плагина у меня нет, чтобы удалить это сообщение самостоятельно и, собственно говоря я не хочу, чтобы этот плагин отправлял это сообщение (считаю его излишним). Возможно ли перехватывать это сообщение другим плагином и запрещать его отправку игроку (например, как это делает ConsoleSpamFix только в консоли)? Или, возможно, такой плагин уже есть в открытом доступе?
     
  2. erger

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

    Баллы:
    66
    Имя в Minecraft:
    FeatureTeam
    удали текстовое сообщение через прогу luyten
     
  3. erger

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

    Баллы:
    66
    Имя в Minecraft:
    FeatureTeam
    в крайнем случае сделай копию через эту прогу и в коде удали текст
     
  4. Автор темы
    GoodPlayer

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

    Баллы:
    66
    Имя в Minecraft:
    GoodPlayer
    Оно всё равно будет отправляться игроку, просто в виде пустой строки.
     
  5. minecraft 1.8.10

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

    Баллы:
    66
  6. Автор темы
    GoodPlayer

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

    Баллы:
    66
    Имя в Minecraft:
    GoodPlayer
    А есть что-нибудь попроще?) Чтобы, как, например в ConsoleSpamFix в конфиг вписал сообщение и больше игрок его не получал. Или может, кто-нибудь знает, как это реализовать самому кодом?
     
    Последнее редактирование: 30 окт 2024
  7. Loker541

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

    Баллы:
    76
    Имя в Minecraft:
    Moveton
    Вскрывай плагин с помощью InJarTranslator-2.0.jar ищи сообщение которое он отправляет и удали текст, тогда игроку будет лететь пустой месседж. Либо сам придумай текст, вместо того, что тебе не нравится.

    А еще лучше напиши что это за плагин такой и что там за сообщение.
     
  8. Автор темы
    GoodPlayer

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

    Баллы:
    66
    Имя в Minecraft:
    GoodPlayer
    Заменять сообщение не вариант, т.к. оно отправляется при определённых условиях, да и собственно, говоря оно не нужно. Пустой текст - тоже странно выглядит.
     
  9. tnt15x15

    tnt15x15 Участник Пользователь

    Баллы:
    36
    Лучше всего Message Editor ну или менять сам jar файл
     
  10. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Варианты:

    1) Декомпильнуть плагин и пересобрать с удалением строки. В будущем исходники могут пригодиться для других правок

    2) Использовать Message Editor. Не в курсе, что это, но раз уже второй человек пишет, то наверняка сработает

    3) Самостоятельно на уровне пакетов отменять отправку сообщения (можно через ProtocolLib)
     
  11. Автор темы
    GoodPlayer

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

    Баллы:
    66
    Имя в Minecraft:
    GoodPlayer
    Самый удобный для меня вариант, но вот только как? Набросал тут пару набросков, но все они не работают:
    PHP:
    import com.comphenix.protocol.PacketType;
    import com.comphenix.protocol.ProtocolLibrary;
    import com.comphenix.protocol.ProtocolManager;
    import com.comphenix.protocol.events.PacketAdapter;
    import com.comphenix.protocol.events.PacketEvent;
    import org.bukkit.plugin.java.JavaPlugin;
    import org.bukkit.event.Listener;

    public class 
    MessageFilter extends JavaPlugin implements Listener {

        private 
    ProtocolManager protocolManager;

        @
    Override
        
    public void onEnable() {
            
    protocolManager ProtocolLibrary.getProtocolManager();
            
    getServer().getPluginManager().registerEvents(thisthis);
            
            
    protocolManager.addPacketListener(new PacketAdapter(thisPacketType.Play.Server.CHAT) {
                @
    Override
                
    public void onPacketSending(PacketEvent event) {
                    
    String message event.getPacket().getChatComponents().read(0).getJson();

              
                    if (
    message.contains("test")) {
                        
    event.setCancelled(true);
                    }
                }
            });
        }
    }
     
  12. CioLay

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

    Баллы:
    61
    Имя в Minecraft:
    NordNM
    Попробуй следующий код.
    Я заменил CHAT на SYSTEM_CHAT
    Также добавил проверку на null и использовал метод readSafely
    PHP:
    protocolManager.addPacketListener(new PacketAdapter(thisPacketType.Play.Server.SYSTEM_CHAT) {
        @
    Override
        
    public void onPacketSending(PacketEvent event) {
            
    WrappedChatComponent chatComponent event.getPacket().getChatComponents().readSafely(0);

            if (
    chatComponent != null) {
                
    String message chatComponent.getJson();

                
    getLogger().info("Перехвачено сообщение: " message);

                if (
    message.contains("test")) {
                    
    event.setCancelled(true);
                }
            }
        }
    });
     
  13. Автор темы
    GoodPlayer

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

    Баллы:
    66
    Имя в Minecraft:
    GoodPlayer
    Сделал так, но тоже не помогло:
    PHP:
    import com.comphenix.protocol.ProtocolLibrary;
    import com.comphenix.protocol.ProtocolManager;
    import com.comphenix.protocol.PacketType;
    import com.comphenix.protocol.events.PacketAdapter;
    import com.comphenix.protocol.events.PacketEvent;
    import com.comphenix.protocol.wrappers.WrappedChatComponent;
    import org.bukkit.plugin.java.JavaPlugin;

    public final class 
    MessageFilter extends JavaPlugin {

        private 
    ProtocolManager protocolManager;

        @
    Override
        
    public void onEnable() {
            
    protocolManager ProtocolLibrary.getProtocolManager();

            
    protocolManager.addPacketListener(new PacketAdapter(thisPacketType.Play.Server.SYSTEM_CHAT) {
                @
    Override
                
    public void onPacketSending(PacketEvent event) {
                    
    WrappedChatComponent chatComponent event.getPacket().getChatComponents().readSafely(0);

                    if (
    chatComponent != null) {
                        
    String message chatComponent.getJson();

                        
    getLogger().info("Перехвачено сообщение: " message);

                        if (
    message.contains("test")) {
                            
    event.setCancelled(true);
                        }
                    }
                }
            });
        }
    }
     
  14. BetterLex

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

    Баллы:
    76
    PHP:
    PacketType.Play.Server.SYSTEM_CHAT
    замени на
    PHP:
    PacketType.Play.Server.CHAT
     
  15. Автор темы
    GoodPlayer

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

    Баллы:
    66
    Имя в Minecraft:
    GoodPlayer
    Да, действительно заработало. Спасибо! Закрыто.
     
Статус темы:
Закрыта.

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