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

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

Статус
Закрыто для дальнейших ответов.

GoodPlayer

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
GoodPlayer
Всем привет. Есть плагин, который отправляет определённое сообщение игроку. Исходников этого плагина у меня нет, чтобы удалить это сообщение самостоятельно и, собственно говоря я не хочу, чтобы этот плагин отправлял это сообщение (считаю его излишним). Возможно ли перехватывать это сообщение другим плагином и запрещать его отправку игроку (например, как это делает ConsoleSpamFix только в консоли)? Или, возможно, такой плагин уже есть в открытом доступе?
 
удали текстовое сообщение через прогу luyten
 
в крайнем случае сделай копию через эту прогу и в коде удали текст
 
Да, есть такой плагин. Он называется Message Editor
https://www.spigotmc.org/resources/message-editor.82154/
А есть что-нибудь попроще?) Чтобы, как, например в ConsoleSpamFix в конфиг вписал сообщение и больше игрок его не получал. Или может, кто-нибудь знает, как это реализовать самому кодом?
 
Последнее редактирование:
Вскрывай плагин с помощью InJarTranslator-2.0.jar ищи сообщение которое он отправляет и удали текст, тогда игроку будет лететь пустой месседж. Либо сам придумай текст, вместо того, что тебе не нравится.

А еще лучше напиши что это за плагин такой и что там за сообщение.
 
Вскрывай плагин с помощью InJarTranslator-2.0.jar ищи сообщение которое он отправляет и удали текст, тогда игроку будет лететь пустой месседж. Либо сам придумай текст, вместо того, что тебе не нравится.

А еще лучше напиши что это за плагин такой и что там за сообщение.
Заменять сообщение не вариант, т.к. оно отправляется при определённых условиях, да и собственно, говоря оно не нужно. Пустой текст - тоже странно выглядит.
 
Лучше всего Message Editor ну или менять сам jar файл
 
Варианты:

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

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

3) Самостоятельно на уровне пакетов отменять отправку сообщения (можно через ProtocolLib)
 
Самостоятельно на уровне пакетов отменять отправку сообщения (можно через ProtocolLib)
Самый удобный для меня вариант, но вот только как? Набросал тут пару набросков, но все они не работают:
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(this, this);
        
        protocolManager.addPacketListener(new PacketAdapter(this, PacketType.Play.Server.CHAT) {
            @Override
            public void onPacketSending(PacketEvent event) {
                String message = event.getPacket().getChatComponents().read(0).getJson();

          
                if (message.contains("test")) {
                    event.setCancelled(true);
                }
            }
        });
    }
}
 
Самый удобный для меня вариант, но вот только как? Набросал тут пару набросков, но все они не работают:
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(this, this);
   
        protocolManager.addPacketListener(new PacketAdapter(this, PacketType.Play.Server.CHAT) {
            @Override
            public void onPacketSending(PacketEvent event) {
                String message = event.getPacket().getChatComponents().read(0).getJson();

     
                if (message.contains("test")) {
                    event.setCancelled(true);
                }
            }
        });
    }
}
Попробуй следующий код.
Я заменил CHAT на SYSTEM_CHAT
Также добавил проверку на null и использовал метод readSafely
PHP:
protocolManager.addPacketListener(new PacketAdapter(this, PacketType.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);
            }
        }
    }
});
 
Попробуй следующий код.
Я заменил CHAT на SYSTEM_CHAT
Также добавил проверку на null и использовал метод readSafely
PHP:
protocolManager.addPacketListener(new PacketAdapter(this, PacketType.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);
            }
        }
    }
});
Сделал так, но тоже не помогло:
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(this, PacketType.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);
                    }
                }
            }
        });
    }
}
 
Сделал так, но тоже не помогло:
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(this, PacketType.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);
                    }
                }
            }
        });
    }
}
PHP:
PacketType.Play.Server.SYSTEM_CHAT
замени на
PHP:
PacketType.Play.Server.CHAT
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх