эвент на сообщение в чат

35
0
ломаю голову над тем, как поймать сообщение чата. 
Код:
    public void OnChat(ClientChatReceivedEvent event, IChatComponent player) {

            if (event.message.getUnformattedTextForChat() == "test") 
            {
                ((ICommandSender) player).addChatMessage(new ChatComponentText("<nP9lHuk> нет яблока"));
                }
}
это один из вариантов. но когда игрок пишет test в чат игры, ничего не происходит. или я совсем глупый и не так делаю в корне?
 
>>это один из вариантов
Нет, эвенты делаются не так. Открывай учебника, приятного чтения
 
Код:
    private ICommandSender player;

    @SubscribeEvent
    public void OnChat(ClientChatReceivedEvent event) {
            if (event.message.getFormattedText().equals("test"))
            {
                player = null;
                ((ICommandSender) player).addChatMessage(new ChatComponentText("<nP9lHuk> нет яблока"));
                }
} 

ох, чет я навертел, но евент объявлен теперь
Код:
        @EventHandler
        public void preInit(FMLPreInitializationEvent e) {
           this.proxy.preInit(e);          
           ModEntityRegistry.init(this);
           proxy.registerRenderers();
              proxy.registerTileEntities(); 
            proxy.registerRenderThings();
           MinecraftForge.EVENT_BUS.register(new HomBot()); //вроде все верно
 
ну щас то что не так :,С вроде в многом более менее разобрался, с евентом чата, туши свет прям :С
upd:
обновил регистрацию эвента запихав ее в прокси к подобному классу эвентов(которые работают кстати)
и немного перепилил
Код:
FMLCommonHandler.instance().bus().register(new HomBot()); //лежит теперь в init
а с этим кодом все еще плакать хочется
Код:
public class HomBot 
{
    private ICommandSender player;
    
    @SubscribeEvent
    public void OnChat(ClientChatReceivedEvent event) {
            if (event.message.getFormattedText().equals("test"))
            {
                ((ICommandSender) player).addChatMessage(new ChatComponentText("<nP9lHuk> нет яблока"));
                }
}
что мне тут еще бы подправить?
 
все таки мне реально нужна помощь с чатом :( все уже перепробовал :С
 
Дебаг не пробовал юзать? Пошаговая отладка там, все дела...
Судя по твоему последнему коду, у тебя там NPE должно вылетать.
[merge_posts_bbcode]Добавлено: 09.06.2016 18:23:45[/merge_posts_bbcode]

codestyle тоже было бы неплохо соблюдать. Особенно эти рандомно расставленные фигурные скобки и пробельчики...

[merge_posts_bbcode]Добавлено: 09.06.2016 18:33:33[/merge_posts_bbcode]

В чем вообще проблема? Сообщение ивентом ты поймал. Игрока ты отсюда никак не достанешь, да это и не нужно. Просто изменяй само сообщение, как тебе нужно, и все.
 
без дебага я и не пытаюсь даже. не получается сделать вывод сообщения в чат от этого условия. что не пробую всегда тишина.
в общем, мне нужно, чтобы когда игрок писал сообщение и в нем совпадали нужные слова, в общий чат выдавалось бы сообщение в ответ. Этакий симулятор игрока который отвечает на вопросы.
 
Ну тебе надо проверять что игрок отправляет, а потом циклом получать всех юзеров на сервере. Т.е в MinecraftServer.getServer().getUsername() - если не ошибаюсь можно получить лист всех ников.
И отправить всем сообщения. Во вторых перестань использовать null'евого сендера.
В event.* нет сендера/игрока что ли?
[merge_posts_bbcode]Добавлено: 09.06.2016 19:18:37[/merge_posts_bbcode]

Код:
@SubscribeEvent
    public void OnChat(ServerChatEvent e) {
        if(e.message.equals("bot, ты сегодня ебался?")) {
            for(int i = 0; i < MinecraftServer.getServer().getAllUsernames().length; i++) {
                EntityPlayer player = e.player.worldObj.getPlayerEntityByName(MinecraftServer.getServer().getAllUsernames()[i]);
                player.addChatMessage(new ChatComponentText("<bot> да. С твоей мамкой."));
            }
        }
    }
Вот лови. Только там еще трабла, что бот отправляет сообщение раньше чем человек отправит его в чат. Но побалуйся с задержкой и будет всё хорошо.
 
Yarik, не удачное у тебя решение
[merge_posts_bbcode]Добавлено: 09.06.2016 20:30:11[/merge_posts_bbcode]

Код:
@SubscribeEvent
public void chatHandler(ServerChatEvent e)
{
    for (Object player : MinecraftServer.getServer().getConfigurationManager().playerEntityList) {
        ((EntityPlayer) player).addChatMessage(new ChatComponentText("lalala"));
    }
}
 
Код:
public void init(FMLInitializationEvent e) {
        ModRecipes.init();
        FMLCommonHandler.instance().bus().register(new EventUpdate());
        FMLCommonHandler.instance().bus().register(new HomBot()); //бот тут
         GameRegistry.registerWorldGenerator(new OreSpawner(), 0);
    }
может зарегал не так? в чате тишиа
 
Код:
MinecraftForge.EVENT_BUS.register(new HomBot());
этого достаточно, по идее
[merge_posts_bbcode]Добавлено: 09.06.2016 20:39:23[/merge_posts_bbcode]

Хотя это тоже можно оставить
Код:
FMLCommonHandler.instance().bus().register(new HomBot());
 
все, бот наконец то ожил. Спасибо всем огромное! без вас бы я не смог понять этот чат :С. Буду теперь изучать его возможности дальше :)

з.ы. этот вариант не работает похоже вовсе, похоже изза этого не работало ничего хотя бы частично О_О
Код:
FMLCommonHandler.instance().bus().register(new HomBot());
 
Назад
Сверху