package net.blay09.mods.eirairc.addon;
import net.blay09.mods.eirairc.api.config.IConfigProperty;
import net.blay09.mods.eirairc.api.event.*;
import net.blay09.mods.eirairc.client.gui.overlay.OverlayJoinLeave;
import net.blay09.mods.eirairc.util.ConfigHelper;
import net.blay09.mods.eirairc.util.MessageFormat;
import net.minecraft.client.Minecraft;
import net.minecraft.util.ChatComponentTranslation;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.common.eventhandler.Event;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
public class FancyOverlay {
private final OverlayJoinLeave overlay;
private IConfigProperty<Boolean> enabled;
private IConfigProperty<Integer> visibleTime;
private IConfigProperty<Float> scale;
public FancyOverlay() {
overlay = new OverlayJoinLeave(Minecraft.getMinecraft(), Minecraft.getMinecraft().fontRendererObj);
MinecraftForge.EVENT_BUS.register(this);
}
@SubscribeEvent
public void onInitConfig(InitConfigEvent.ClientGlobalSettings event) {
enabled = event.config.registerProperty("eirairc", "enableFancyOverlay", "eirairc:config.property.eirairc_enableFancyOverlay", true);
visibleTime = event.config.registerProperty("eirairc", "fancyOverlayLifetime", "eirairc:config.property.eirairc_fancyOverlayLifetime", 240);
visibleTime.setMinMax(120, 2400);
scale = event.config.registerProperty("eirairc", "fancyOverlayScale", "eirairc:config.property.eirairc_fancyOverlayScale", 0.5f);
scale.setMinMax(0.5f, 1f);
overlay.setVisibleTime(visibleTime);
overlay.setScale(scale);
}
@SubscribeEvent
public void onIRCUserJoin(IRCUserJoinEvent event) {
if(enabled.get()) {
if (ConfigHelper.getGeneralSettings(event.channel).muted.get() || !ConfigHelper.getBotSettings(event.channel).relayIRCJoinLeave.get()) {
return;
}
String format = ConfigHelper.getBotSettings(event.channel).getMessageFormat().mcUserJoin;
overlay.addMessage(MessageFormat.formatChatComponent(format, event.connection, event.channel, event.user, "", MessageFormat.Target.Minecraft, MessageFormat.Mode.Emote));
event.setResult(Event.Result.DENY);
}
}
@SubscribeEvent
public void onIRCNickChange(IRCUserNickChangeEvent event) {
if(enabled.get()) {
if (ConfigHelper.getGeneralSettings(event.user).muted.get() || !ConfigHelper.getBotSettings(event.user).relayNickChanges.get()) {
return;
}
String format = ConfigHelper.getBotSettings(event.user).getMessageFormat().mcUserNickChange;
format = format.replace("{OLDNICK}", event.oldNick);
overlay.addMessage(MessageFormat.formatChatComponent(format, event.connection, null, event.user, "", MessageFormat.Target.Minecraft, MessageFormat.Mode.Emote));
event.setResult(Event.Result.DENY);
}
}
@SubscribeEvent
public void onIRCUserLeave(IRCUserLeaveEvent event) {
if(enabled.get()) {
if (ConfigHelper.getGeneralSettings(event.channel).muted.get() || !ConfigHelper.getBotSettings(event.channel).relayIRCJoinLeave.get()) {
return;
}
String format = ConfigHelper.getBotSettings(event.channel).getMessageFormat().mcUserLeave;
overlay.addMessage(MessageFormat.formatChatComponent(format, event.connection, event.channel, event.user, "", MessageFormat.Target.Minecraft, MessageFormat.Mode.Emote));
event.setResult(Event.Result.DENY);
}
}
@SubscribeEvent
public void onConnectedEvent(IRCConnectEvent event) {
if(enabled.get()) {
overlay.addMessage(new ChatComponentTranslation("eirairc:general.connected", event.connection.getHost()));
event.setResult(Event.Result.DENY);
}
}
@SubscribeEvent
public void onConnectionFailed(IRCConnectionFailedEvent event) {
if(enabled.get()) {
overlay.addMessage(new ChatComponentTranslation("eirairc:error.couldNotConnect", event.connection.getHost(), event.exception));
event.setResult(Event.Result.DENY);
}
}
@SubscribeEvent
public void onReconnecting(IRCReconnectEvent event) {
if(enabled.get()) {
overlay.addMessage(new ChatComponentTranslation("eirairc:general.reconnecting", event.connection.getHost(), event.waitingTime / 1000));
event.setResult(Event.Result.DENY);
}
}
@SubscribeEvent
public void onDisconnectedEvent(IRCDisconnectEvent event) {
if(enabled.get()) {
overlay.addMessage(new ChatComponentTranslation("eirairc:general.disconnected", event.connection.getHost()));
event.setResult(Event.Result.DENY);
}
}
@SubscribeEvent
public void onIRCUserQuit(IRCUserQuitEvent event) {
if(enabled.get()) {
if (ConfigHelper.getGeneralSettings(event.user).muted.get() || !ConfigHelper.getBotSettings(event.user).relayIRCJoinLeave.get()) {
return;
}
String format = ConfigHelper.getBotSettings(event.user).getMessageFormat().mcUserQuit;
overlay.addMessage(MessageFormat.formatChatComponent(format, event.connection, null, event.user, "", MessageFormat.Target.Minecraft, MessageFormat.Mode.Emote));
event.setResult(Event.Result.DENY);
}
}
@SubscribeEvent
public void renderOverlay(RenderGameOverlayEvent.Post event) {
if(event.type == RenderGameOverlayEvent.ElementType.CHAT) {
overlay.updateAndRender(event.partialTicks);
}
}
}