From fa80af8e8121fb604589e3408c8188134aa21983 Mon Sep 17 00:00:00 2001 From: Mike Primm Date: Sun, 19 Feb 2012 15:18:17 -0600 Subject: [PATCH] Remove HeroChat code - HeroChat 4 API doesn't work as of 1.1-R5 --- .../org/dynmap/herochat/HeroChatHandler.java | 305 ------------------ .../dynmap/herochat/HeroWebChatComponent.java | 68 ---- src/main/resources/configuration.txt | 8 - 3 files changed, 381 deletions(-) delete mode 100644 src/main/java/org/dynmap/herochat/HeroChatHandler.java delete mode 100644 src/main/java/org/dynmap/herochat/HeroWebChatComponent.java diff --git a/src/main/java/org/dynmap/herochat/HeroChatHandler.java b/src/main/java/org/dynmap/herochat/HeroChatHandler.java deleted file mode 100644 index 1f4f1fb3..00000000 --- a/src/main/java/org/dynmap/herochat/HeroChatHandler.java +++ /dev/null @@ -1,305 +0,0 @@ -package org.dynmap.herochat; - -import java.lang.reflect.Method; -import java.util.Collections; -import java.util.List; - -import org.bukkit.event.CustomEventListener; -import org.bukkit.event.Event; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.server.PluginEnableEvent; -import org.bukkit.event.server.ServerListener; -import org.bukkit.plugin.Plugin; -import org.dynmap.Client; -import org.dynmap.ConfigurationNode; -import org.dynmap.DynmapCore; -import org.dynmap.Log; -import org.dynmap.bukkit.DynmapPlugin; - -/** - * Bukkit specific module - alternate chat handler for interfacing with HeroChat - */ -public class HeroChatHandler { - private static final String DEF_CHANNEL = "Global"; - private static final List DEF_CHANNELS = Collections - .singletonList(DEF_CHANNEL); - - private List hcchannels; - private String hcwebinputchannel; - private DynmapCore core; - private HeroChatChannel hcwebinputchan; - - private class OurPluginListener implements Listener { - @EventHandler - public void onPluginEnable(PluginEnableEvent event) { - Plugin plugin = event.getPlugin(); - String name = plugin.getDescription().getName(); - - if (name.equals("HeroChat")) { - activateHeroChat(plugin); - } - } - } - - /* Reflection-based access wrapper for ChannelChatEvent from HeroChat */ - private static class HeroChatChannelChatEvent { - @SuppressWarnings("rawtypes") - private static Class channelchatevent; - private static Method getsource; - private static Method getmessage; - private static Method issentbyplayer; - private static boolean isgood = false; - private Event evt; - - @SuppressWarnings("unchecked") - public static boolean initialize() { - try { - channelchatevent = Class - .forName("com.herocraftonline.dthielke.herochat.event.ChannelChatEvent"); - getsource = channelchatevent.getMethod("getSource", new Class[0]); - getmessage = channelchatevent.getMethod("getMessage", new Class[0]); - issentbyplayer = channelchatevent.getMethod("isSentByPlayer", new Class[0]); - isgood = true; - } catch (ClassNotFoundException cnfx) { - } catch (NoSuchMethodException nsmx) { - } - return isgood; - } - - public HeroChatChannelChatEvent(Event evt) { - this.evt = evt; - } - - public static boolean isInstance(Event evt) { - return channelchatevent.isInstance(evt); - } - - public String getSource() { - try { - return (String) getsource.invoke(evt); - } catch (Exception x) { - return null; - } - } - - public String getMessage() { - try { - return (String) getmessage.invoke(evt); - } catch (Exception x) { - return null; - } - } - - public boolean isSentByPlayer() { - try { - return (Boolean) issentbyplayer.invoke(evt); - } catch (Exception x) { - return true; - } - } - } - - /* Reflection-based access wrapper for ChannelEvent from HeroChat */ - private static class HeroChatChannelEvent { - @SuppressWarnings("rawtypes") - private static Class channelevent; - private static Method getchannel; - private static Method iscancelled; - private static boolean isgood = false; - private Event evt; - - @SuppressWarnings("unchecked") - public static boolean initialize() { - try { - channelevent = Class - .forName("com.herocraftonline.dthielke.herochat.event.ChannelEvent"); - getchannel = channelevent.getMethod("getChannel", new Class[0]); - iscancelled = channelevent.getMethod("isCancelled", new Class[0]); - isgood = true; - } catch (ClassNotFoundException cnfx) { - } catch (NoSuchMethodException nsmx) { - } - return isgood; - } - - public HeroChatChannelEvent(Event evt) { - this.evt = evt; - } - - public static boolean isInstance(Event evt) { - return channelevent.isInstance(evt); - } - - public HeroChatChannel getChannel() { - try { - Object o; - o = getchannel.invoke(evt); - if (o != null) { - return new HeroChatChannel(o); - } - } catch (Exception x) { - } - return null; - } - - public boolean isCancelled() { - try { - return (Boolean) iscancelled.invoke(evt); - } catch (Exception x) { - return true; - } - } - } - - /* Reflection-based access wrapper for Channel from HeroChat */ - private static class HeroChatChannel { - @SuppressWarnings("rawtypes") - private static Class channel; - private static Method getname; - private static Method getnick; - private static Method sendmessage; - private static boolean isgood = false; - private Object chan; - - @SuppressWarnings("unchecked") - public static boolean initialize() { - try { - channel = Class - .forName("com.herocraftonline.dthielke.herochat.channels.Channel"); - getname = channel.getMethod("getName"); - getnick = channel.getMethod("getNick", new Class[0]); - sendmessage = channel.getMethod("sendMessage", new Class[] { - String.class, String.class, String.class, boolean.class } ); - isgood = true; - } catch (ClassNotFoundException cnfx) { - } catch (NoSuchMethodException nsmx) { - Log.severe(nsmx); - } - return isgood; - } - - public HeroChatChannel(Object chan) { - this.chan = chan; - } - - public String getName() { - try { - return (String) getname.invoke(chan); - } catch (Exception x) { - return null; - } - } - - public String getNick() { - try { - return (String) getnick.invoke(chan); - } catch (Exception x) { - return null; - } - } - - public void sendMessage(String source, String msg, String format, boolean sentByPlayer) { - try { - sendmessage.invoke(chan, source, msg, format, sentByPlayer); - } catch (Exception x) { - } - } - } - - private class OurEventListener extends CustomEventListener { - /** - * Handle custom events - */ - @EventHandler - public void onCustomEvent(Event event) { - if (HeroChatChannelEvent.isInstance(event)) { - HeroChatChannelEvent ce = new HeroChatChannelEvent(event); - /* Snoop for our web channel - we'll need it, and we'll see it before it matters, - * since anyone that joins the channel will give us an event (and reflection on - * the plugin class to get the manager didn't work, due to a dependency on the IRC - * plugin that may not be present....) - */ - HeroChatChannel c = ce.getChannel(); - if (ce.isCancelled()) - return; - if((hcwebinputchannel != null) && ((hcwebinputchannel.equals(c.getName())) || - (hcwebinputchannel.equals(c.getNick())))) { - hcwebinputchan = c; - } - if (HeroChatChannelChatEvent.isInstance(event)) { - HeroChatChannelChatEvent cce = new HeroChatChannelChatEvent( - event); - /* Match on name or nickname of channel */ - if (hcchannels.contains(c.getName()) || - hcchannels.contains(c.getNick())) { - if(cce.isSentByPlayer()) { /* Player message? */ - org.bukkit.entity.Player p = DynmapPlugin.plugin.getServer().getPlayer(cce.getSource()); - if((p != null) && (core.mapManager != null)) { - core.mapManager.pushUpdate(new Client.ChatMessage("player", - c.getNick(), - p.getDisplayName(), - cce.getMessage(), - p.getName())); - } - } - } - } - } - } - } - - public HeroChatHandler(ConfigurationNode cfg, DynmapCore core) { - /* If we're enabling hero chat support */ - Log.verboseinfo("HeroChat support configured"); - this.core = core; - /* Now, get the monitored channel list */ - hcchannels = cfg.getStrings("herochatchannels", DEF_CHANNELS); - /* And get channel to send web messages */ - hcwebinputchannel = cfg.getString("herochatwebchannel", DEF_CHANNEL); - Plugin hc = DynmapPlugin.plugin.getServer().getPluginManager().getPlugin("HeroChat"); - if(hc != null) { - activateHeroChat(hc); - } - else { - /* Set up to hear when HeroChat is enabled */ - DynmapPlugin.plugin.pm.registerEvents(new OurPluginListener(), DynmapPlugin.plugin); - } - } - - private void activateHeroChat(Plugin herochat) { - if (HeroChatChannelChatEvent.initialize() == false) { - Log.severe("Cannot load HeroChat chat event class!"); - return; - } - if (HeroChatChannel.initialize() == false) { - Log.severe("Cannot load HeroChat channel class!"); - return; - } - if (HeroChatChannelEvent.initialize() == false) { - Log.severe("Cannot load HeroChat channel event class!"); - return; - } - /* Register event handler */ - DynmapPlugin.plugin.pm.registerEvent(Event.Type.CUSTOM_EVENT, new OurEventListener(), Event.Priority.Monitor, DynmapPlugin.plugin); - - Log.verboseinfo("HeroChat integration active"); - } - /** - * Send message from web to appropriate HeroChat channel - * @param sender - sender ID - * @param message - message - * @return true if herochat is handling this, false if not - */ - public boolean sendWebMessageToHeroChat(String sender, String message) { - if(hcwebinputchannel != null) { /* Are we handling them? */ - if(hcwebinputchan != null) { /* Have we seen it yet? Maybe no if nobody has logged on or - * joined it, but then who would see it anyway? - */ - hcwebinputchan.sendMessage(sender, message, "{default}", false); - } - return true; - } - return false; - } -} diff --git a/src/main/java/org/dynmap/herochat/HeroWebChatComponent.java b/src/main/java/org/dynmap/herochat/HeroWebChatComponent.java deleted file mode 100644 index 440df745..00000000 --- a/src/main/java/org/dynmap/herochat/HeroWebChatComponent.java +++ /dev/null @@ -1,68 +0,0 @@ -package org.dynmap.herochat; - -import static org.dynmap.JSONUtils.s; - -import org.dynmap.ChatEvent; -import org.dynmap.Client; -import org.dynmap.Component; -import org.dynmap.ConfigurationNode; -import org.dynmap.DynmapCore; -import org.dynmap.Event; -import org.dynmap.common.DynmapListenerManager; -import org.dynmap.common.DynmapListenerManager.EventType; -import org.dynmap.common.DynmapPlayer; -import org.json.simple.JSONObject; - -public class HeroWebChatComponent extends Component { - HeroChatHandler handler; - public HeroWebChatComponent(final DynmapCore plugin, ConfigurationNode configuration) { - super(plugin, configuration); - handler = new HeroChatHandler(configuration, plugin); - plugin.events.addListener("webchat", new Event.Listener() { - @Override - public void triggered(ChatEvent t) { - if(plugin.getServer().sendWebChatEvent(t.source, t.name, t.message)) { - /* Let HeroChat take a look - only broadcast to players if it doesn't handle it */ - if (!handler.sendWebMessageToHeroChat(t.name, t.message)) { - String msg; - String msgfmt = plugin.configuration.getString("webmsgformat", null); - if(msgfmt != null) { - msgfmt = unescapeString(msgfmt); - msg = msgfmt.replace("%playername%", t.name).replace("%message%", t.message); - } - else { - msg = unescapeString(plugin.configuration.getString("webprefix", "\u00A72[WEB] ")) + t.name + ": " + unescapeString(plugin.configuration.getString("websuffix", "\u00A7f")) + t.message; - } - plugin.getServer().broadcastMessage(msg); - } - } - } - }); - - plugin.events.addListener("buildclientconfiguration", new Event.Listener() { - @Override - public void triggered(JSONObject t) { - s(t, "allowchat", true); - } - }); - - // Also make HeroChat announce joins and quits. - core.listenerManager.addListener(EventType.PLAYER_JOIN, new DynmapListenerManager.PlayerEventListener() { - @Override - public void playerEvent(DynmapPlayer p) { - if((core.mapManager != null) && (core.playerList != null) && (core.playerList.isVisiblePlayer(p.getName()))) { - core.mapManager.pushUpdate(new Client.PlayerJoinMessage(p.getDisplayName(), p.getName())); - } - } - }); - core.listenerManager.addListener(EventType.PLAYER_QUIT, new DynmapListenerManager.PlayerEventListener() { - @Override - public void playerEvent(DynmapPlayer p) { - if((core.mapManager != null) && (core.playerList != null) && (core.playerList.isVisiblePlayer(p.getName()))) { - core.mapManager.pushUpdate(new Client.PlayerQuitMessage(p.getDisplayName(), p.getName())); - } - } - }); - - } -} diff --git a/src/main/resources/configuration.txt b/src/main/resources/configuration.txt index 86010207..c84a8513 100644 --- a/src/main/resources/configuration.txt +++ b/src/main/resources/configuration.txt @@ -53,14 +53,6 @@ components: allowchat: true # If true, web UI users can supply name for chat using 'playername' URL parameter. 'trustclientname' must also be set true. allowurlname: false - #- class: org.dynmap.herochat.HeroWebChatComponent - # # Control which HeroChat channel messages from web are directed to - # herochatwebchannel: Global - # # Control which channels are monitored and reported to the web - # herochatchannels: - # - Global - # #- Trade - # #- Haggle # Note: this component is needed for the dmarker commands, and for the Marker API to be available to other plugins - class: org.dynmap.MarkersComponent