package de.maxgb.minecraft.second_screen.info_listener;
import net.minecraft.util.EnumChatFormatting;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.event.ServerChatEvent;
import net.minecraftforge.event.entity.player.PlayerDropsEvent;
import net.minecraftforge.fml.common.FMLCommonHandler;
import net.minecraftforge.fml.common.eventhandler.Event;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.PlayerEvent;
import org.json.JSONArray;
import org.json.JSONObject;
import de.maxgb.minecraft.second_screen.Configs;
import de.maxgb.minecraft.second_screen.StandardListener;
import de.maxgb.minecraft.second_screen.shared.PROTOKOLL;
import de.maxgb.minecraft.second_screen.util.Helper;
import de.maxgb.minecraft.second_screen.util.User;
/**
* Listener which listens to chat messages and other chat related events
* @author Max
*
*/
public class ChatListener extends StandardListener {
/**
* Is fired on MinecraftForge.Bus
*
*/
public static class RemoteChatMessageEvent extends Event {
public final String username;
public final String msg;
public RemoteChatMessageEvent(String username, String message) {
this.username = username;
this.msg = message;
}
}
private JSONArray buffer;
public ChatListener(User user) {
super(user);
buffer = new JSONArray();
MinecraftForge.EVENT_BUS.register(this);
FMLCommonHandler.instance().bus().register(this);
everyTick = Configs.chat_update_time;
JSONObject msg = new JSONObject();
msg.put("info", true);
msg.put("color", "orange");
msg.put("time", Helper.getCurrentTimeString());
msg.put("msg", "Connected to chat");
buffer.put(msg);
Helper.sendChatMessage("[MSS] "+user.username+" connected to second screen chat", EnumChatFormatting.YELLOW);
}
@SubscribeEvent
public void chatMessage(ServerChatEvent e) {
JSONObject msg = new JSONObject();
msg.put("sender", e.username);
msg.put("msg", e.message);
msg.put("time", Helper.getCurrentTimeString());
buffer.put(msg);
}
@SubscribeEvent
public void mssChatMessage(RemoteChatMessageEvent e) {
JSONObject msg = new JSONObject();
msg.put("sender", "mss~" + e.username);
msg.put("msg", e.msg);
msg.put("time", Helper.getCurrentTimeString());
buffer.put(msg);
}
@SubscribeEvent
public void playerDies(PlayerDropsEvent e) {
JSONObject msg = new JSONObject();
msg.put("info", true);
msg.put("color", "orange");
msg.put("time", Helper.getCurrentTimeString());
msg.put("msg", e.entityPlayer.getDisplayName() + " died");
buffer.put(msg);
}
@SubscribeEvent
public void playerJoined(PlayerEvent.PlayerLoggedInEvent e) {
JSONObject msg = new JSONObject();
msg.put("info", true);
msg.put("color", "orange");
msg.put("time", Helper.getCurrentTimeString());
msg.put("msg", e.player.getDisplayName() + " joined");
buffer.put(msg);
}
@SubscribeEvent
public void playerLeft(PlayerEvent.PlayerLoggedOutEvent e) {
JSONObject msg = new JSONObject();
msg.put("info", true);
msg.put("color", "orange");
msg.put("time", Helper.getCurrentTimeString());
msg.put("msg", e.player.getDisplayName() + " left");
msg.put("success", 1);
buffer.put(msg);
}
@Override
public String update() {
if (buffer.length() == 0) {
return null;
}
JSONObject response = new JSONObject();
response.put("success", 1);
response.put("messages", buffer);
buffer = new JSONArray();
return PROTOKOLL.CHAT_LISTENER + "-" + response.toString();
}
@Override
public void onUnregister(){
Helper.sendChatMessage("[MSS] "+user.username+" disconnected from second screen chat", EnumChatFormatting.YELLOW);
}
}