package net.blay09.mods.eirairc.addon; import net.blay09.mods.eirairc.api.EiraIRCAPI; import net.blay09.mods.eirairc.api.event.IRCChannelChatEvent; import net.blay09.mods.eirairc.api.event.IRCUserJoinEvent; import net.blay09.mods.eirairc.api.event.IRCUserLeaveEvent; import net.minecraft.command.CommandResultStats; import net.minecraft.command.ICommandSender; import net.minecraft.entity.Entity; import net.minecraft.server.MinecraftServer; import net.minecraft.util.BlockPos; import net.minecraft.util.ChatComponentText; import net.minecraft.util.IChatComponent; import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.fml.common.Optional; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import org.dynmap.DynmapCommonAPI; import org.dynmap.DynmapCommonAPIListener; @Optional.Interface(iface = "org.dynmap.DynmapCommonAPIListener", modid = "Dynmap") @SuppressWarnings("unused") public class DynmapWebChatAddon extends DynmapCommonAPIListener { public static class WebChatSender implements ICommandSender { public final String source; public final String name; public WebChatSender(String source, String name) { this.source = source; this.name = name; } @Override public String getName() { return "[" + source + "]" + ((name != null && !name.isEmpty()) ? " " + name : ""); } @Override public IChatComponent getDisplayName() { return new ChatComponentText(getName()); } @Override public void addChatMessage(IChatComponent p_145747_1_) {} @Override public boolean canCommandSenderUseCommand(int permLevel, String commandName) { return false; } @Override public BlockPos getPosition() { return new BlockPos(0, 0, 0); } @Override public Vec3 getPositionVector() { return new Vec3(0, 0, 0); } @Override public World getEntityWorld() { return MinecraftServer.getServer().getEntityWorld(); } @Override public Entity getCommandSenderEntity() { return null; } @Override public boolean sendCommandFeedback() { return false; } @Override public void setCommandStat(CommandResultStats.Type type, int amount) {} } private DynmapCommonAPI api; public DynmapWebChatAddon() { DynmapCommonAPIListener.register(this); } @Override @Optional.Method(modid = "Dynmap") public void apiEnabled(DynmapCommonAPI api) { this.api = api; MinecraftForge.EVENT_BUS.register(this); } @Override @Optional.Method(modid = "Dynmap") public void apiDisabled(DynmapCommonAPI api) { this.api = null; MinecraftForge.EVENT_BUS.unregister(this); } @SubscribeEvent @Optional.Method(modid = "Dynmap") public void onChannelChat(IRCChannelChatEvent event) { api.postPlayerMessageToWeb(event.sender.getName(), event.sender.getName(), event.message); } @SubscribeEvent @Optional.Method(modid = "Dynmap") public void onIRCUserJoin(IRCUserJoinEvent event) { api.postPlayerJoinQuitToWeb(event.user.getName(), event.user.getName(), true); } @SubscribeEvent @Optional.Method(modid = "Dynmap") public void onIRCUserLeave(IRCUserLeaveEvent event) { api.postPlayerJoinQuitToWeb(event.user.getName(), event.user.getName(), false); } @Optional.Method(modid = "Dynmap") @SubscribeEvent public void onIRCUserQuit(IRCUserLeaveEvent event) { api.postPlayerJoinQuitToWeb(event.user.getName(), event.user.getName(), false); } @Override @Optional.Method(modid = "Dynmap") public boolean webChatEvent(String source, String name, String message) { EiraIRCAPI.relayChat(new WebChatSender(source, name), message, false, false, null); return true; } }