From 92862d4e7e31a954cef37ba8e7cdaa09c3077943 Mon Sep 17 00:00:00 2001 From: Sleaker Date: Fri, 6 Jan 2012 00:19:43 -0800 Subject: [PATCH] fix a couple log messages, add heroTitles hooks. --- lib/HeroTitles.jar | Bin 0 -> 37723 bytes pom.xml | 7 + src/net/milkbowl/vault/Vault.java | 64 +++-- .../vault/chat/plugins/Chat_HeroTitles.java | 268 ++++++++++++++++++ .../vault/chat/plugins/Chat_iChat.java | 4 +- 5 files changed, 314 insertions(+), 29 deletions(-) create mode 100644 lib/HeroTitles.jar create mode 100644 src/net/milkbowl/vault/chat/plugins/Chat_HeroTitles.java diff --git a/lib/HeroTitles.jar b/lib/HeroTitles.jar new file mode 100644 index 0000000000000000000000000000000000000000..1a6ba6c990ac875c157cf69e0b245b6baeb99345 GIT binary patch literal 37723 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⪻ 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 1.18 + + com.herocraftonline.HeroTitles + HeroTitles + system + 0.0.1 + ${project.basedir}/lib/HeroTitles.jar + diff --git a/src/net/milkbowl/vault/Vault.java b/src/net/milkbowl/vault/Vault.java index 4d75b5d..287144c 100644 --- a/src/net/milkbowl/vault/Vault.java +++ b/src/net/milkbowl/vault/Vault.java @@ -27,6 +27,7 @@ import javax.xml.parsers.DocumentBuilderFactory; import net.milkbowl.vault.chat.Chat; import net.milkbowl.vault.chat.plugins.Chat_GroupManager; +import net.milkbowl.vault.chat.plugins.Chat_HeroTitles; import net.milkbowl.vault.chat.plugins.Chat_Permissions3; import net.milkbowl.vault.chat.plugins.Chat_PermissionsEx; import net.milkbowl.vault.chat.plugins.Chat_Towny; @@ -65,6 +66,7 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerListener; import org.bukkit.plugin.RegisteredServiceProvider; import org.bukkit.plugin.ServicePriority; +import org.bukkit.plugin.ServicesManager; import org.bukkit.plugin.java.JavaPlugin; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -77,6 +79,7 @@ public class Vault extends JavaPlugin { private Permission perms; private String newVersion; private String currentVersion; + private ServicesManager sm; @Override public void onDisable() { @@ -89,6 +92,7 @@ public class Vault extends JavaPlugin { @Override public void onEnable() { currentVersion = getDescription().getVersion().substring(0, 5); + sm = getServer().getServicesManager(); // Load Vault Addons loadEconomy(); loadPermission(); @@ -129,51 +133,57 @@ public class Vault extends JavaPlugin { // Try to load PermissionsEx if (packageExists(new String[] { "ru.tehkode.permissions.bukkit.PermissionsEx" })) { Chat eChat = new Chat_PermissionsEx(this, perms); - getServer().getServicesManager().register(Chat.class, eChat, this, ServicePriority.Highest); + sm.register(Chat.class, eChat, this, ServicePriority.High); log.info(String.format("[%s][Chat] PermissionsEx found: %s", getDescription().getName(), eChat.isEnabled() ? "Loaded" : "Waiting")); } //Try loading mChat if (packageExists(new String[] {"net.D3GN.MiracleM4n.mChat"} )) { Chat mChat = new Chat_mChat(this, perms); - getServer().getServicesManager().register(Chat.class, mChat, this, ServicePriority.Highest); + sm.register(Chat.class, mChat, this, ServicePriority.High); log.info(String.format("[%s][Chat] mChat found: %s", getDescription().getName(), mChat.isEnabled() ? "Loaded" : "Waiting")); } //try loading bPermissions if (packageExists(new String[] {"de.bananaco.permissions.worlds.WorldPermissionsManager"})) { Chat bPerms = new Chat_bPermissions(this, perms); - getServer().getServicesManager().register(Chat.class, bPerms, this, ServicePriority.High); + sm.register(Chat.class, bPerms, this, ServicePriority.Normal); log.info(String.format("[%s][Chat] bPermissions found: %s", getDescription().getName(), bPerms.isEnabled() ? "Loaded" : "Waiting")); } // Try to load GroupManager if (packageExists(new String[] { "org.anjocaido.groupmanager.GroupManager" })) { Chat gPerms = new Chat_GroupManager(this, perms); - getServer().getServicesManager().register(Chat.class, gPerms, this, ServicePriority.High); + sm.register(Chat.class, gPerms, this, ServicePriority.Normal); log.info(String.format("[%s][Chat] GroupManager found: %s", getDescription().getName(), gPerms.isEnabled() ? "Loaded" : "Waiting")); } // Try to load Permissions 3 (Yeti) if (packageExists(new String[] { "com.nijiko.permissions.ModularControl" })) { Chat nPerms = new Chat_Permissions3(this, perms); - getServer().getServicesManager().register(Chat.class, nPerms, this, ServicePriority.High); + sm.register(Chat.class, nPerms, this, ServicePriority.Normal); log.info(String.format("[%s][Chat] Permissions 3 (Yeti) found: %s", getDescription().getName(), nPerms.isEnabled() ? "Loaded" : "Waiting")); } // Try to load iChat if (packageExists(new String[] { "net.TheDgtl.iChat.iChat" })) { Chat iChat = new Chat_iChat(this, perms); - getServer().getServicesManager().register(Chat.class, iChat, this, ServicePriority.Low); + sm.register(Chat.class, iChat, this, ServicePriority.Low); log.info(String.format("[%s][Chat] iChat found: %s", getDescription().getName(), iChat.isEnabled() ? "Loaded" : "Waiting")); } //Try to load Towny Chat if (packageExists(new String[] {"com.palmergames.bukkit.towny;"})) { Chat townChat = new Chat_Towny(this, perms); - getServer().getServicesManager().register(Chat.class, townChat, this, ServicePriority.Lowest); + sm.register(Chat.class, townChat, this, ServicePriority.Lowest); log.info(String.format("[%s][Chat] Towny found: %s", getDescription().getName(), townChat.isEnabled() ? "Loaded" : "Waiting")); } + + if (packageExists(new String[] {"com.herocraftonline.herotitles"} )) { + Chat htChat = new Chat_HeroTitles(this, perms, sm.getRegistration(Chat.class).getProvider()); + sm.register(Chat.class, htChat, this, ServicePriority.Highest); + log.info(String.format("[%s][Chat] HeroTitles found: %s", getDescription().getName(), htChat.isEnabled() ? "Loaded" : "Waiting")); + } } /** @@ -183,14 +193,14 @@ public class Vault extends JavaPlugin { // Try to load MultiCurrency if (packageExists(new String[] { "me.ashtheking.currency.Currency", "me.ashtheking.currency.CurrencyList" })) { Economy econ = new Economy_MultiCurrency(this); - getServer().getServicesManager().register(Economy.class, econ, this, ServicePriority.Normal); + sm.register(Economy.class, econ, this, ServicePriority.Normal); log.info(String.format("[%s][Economy] MultiCurrency found: %s", getDescription().getName(), econ.isEnabled() ? "Loaded" : "Waiting")); } //Try Loading MineConomy if (packageExists(new String[] { "me.mjolnir.mineconomy.MineConomy" })) { Economy econ = new Economy_MineConomy(this); - getServer().getServicesManager().register(Economy.class, econ, this, ServicePriority.Normal); + sm.register(Economy.class, econ, this, ServicePriority.Normal); log.info(String.format("[%s][Economy] MineConomy found: %s", getDescription().getName(), econ.isEnabled() ? "Loaded" : "Waiting")); } @@ -198,70 +208,70 @@ public class Vault extends JavaPlugin { //Try loading eWallet if (packageExists(new String[] { "me.ethan.eWallet.ECO" })) { Economy econ = new Economy_eWallet(this); - getServer().getServicesManager().register(Economy.class, econ, this, ServicePriority.Normal); + sm.register(Economy.class, econ, this, ServicePriority.Normal); log.info(String.format("[%s][Economy] eWallet found: %s", getDescription().getName(), econ.isEnabled() ? "Loaded" : "Waiting")); } // Try to load 3co if (packageExists(new String[] { "me.ic3d.eco.ECO" })) { Economy econ = new Economy_3co(this); - getServer().getServicesManager().register(Economy.class, econ, this, ServicePriority.Normal); + sm.register(Economy.class, econ, this, ServicePriority.Normal); log.info(String.format("[%s][Economy] 3co found: %s", getDescription().getName(), econ.isEnabled() ? "Loaded" : "Waiting")); } // Try to load BOSEconomy if (packageExists(new String[] { "cosine.boseconomy.BOSEconomy", "cosine.boseconomy.CommandManager" })) { Economy bose6 = new Economy_BOSE6(this); - getServer().getServicesManager().register(Economy.class, bose6, this, ServicePriority.Normal); + sm.register(Economy.class, bose6, this, ServicePriority.Normal); log.info(String.format("[%s][Economy] BOSEconomy6 found: %s", getDescription().getName(), bose6.isEnabled() ? "Loaded" : "Waiting")); } // Try to load BOSEconomy if (packageExists(new String[] { "cosine.boseconomy.BOSEconomy", "cosine.boseconomy.CommandHandler" })) { Economy bose7 = new Economy_BOSE7(this); - getServer().getServicesManager().register(net.milkbowl.vault.economy.Economy.class, bose7, this, ServicePriority.Normal); + sm.register(net.milkbowl.vault.economy.Economy.class, bose7, this, ServicePriority.Normal); log.info(String.format("[%s][Economy] BOSEconomy7 found: %s", getDescription().getName(), bose7.isEnabled() ? "Loaded" : "Waiting")); } //Try to load CurrencyCore if (packageExists(new String[] { "is.currency.Currency" })) { Economy cCore = new Economy_CurrencyCore(this); - getServer().getServicesManager().register(net.milkbowl.vault.economy.Economy.class, cCore, this, ServicePriority.Normal); + sm.register(net.milkbowl.vault.economy.Economy.class, cCore, this, ServicePriority.Normal); log.info(String.format("[%s][Economy] CurrencyCore found: %s", getDescription().getName(), cCore.isEnabled() ? "Loaded" : "Waiting")); } // Try to load Essentials Economy if (packageExists(new String[] { "com.earth2me.essentials.api.Economy", "com.earth2me.essentials.api.NoLoanPermittedException", "com.earth2me.essentials.api.UserDoesNotExistException" })) { Economy essentials = new Economy_Essentials(this); - getServer().getServicesManager().register(net.milkbowl.vault.economy.Economy.class, essentials, this, ServicePriority.Low); + sm.register(net.milkbowl.vault.economy.Economy.class, essentials, this, ServicePriority.Low); log.info(String.format("[%s][Economy] Essentials Economy found: %s", getDescription().getName(), essentials.isEnabled() ? "Loaded" : "Waiting")); } // Try to load iConomy 4 if (packageExists(new String[] { "com.nijiko.coelho.iConomy.iConomy", "com.nijiko.coelho.iConomy.system.Account" })) { Economy icon4 = new Economy_iConomy4(this); - getServer().getServicesManager().register(net.milkbowl.vault.economy.Economy.class, icon4, this, ServicePriority.High); + sm.register(net.milkbowl.vault.economy.Economy.class, icon4, this, ServicePriority.High); log.info(String.format("[%s][Economy] iConomy 4 found: ", getDescription().getName(), icon4.isEnabled() ? "Loaded" : "Waiting")); } // Try to load iConomy 5 if (packageExists(new String[] { "com.iConomy.iConomy", "com.iConomy.system.Account", "com.iConomy.system.Holdings" })) { Economy icon5 = new Economy_iConomy5(this); - getServer().getServicesManager().register(net.milkbowl.vault.economy.Economy.class, icon5, this, ServicePriority.High); + sm.register(net.milkbowl.vault.economy.Economy.class, icon5, this, ServicePriority.High); log.info(String.format("[%s][Economy] iConomy 5 found: %s", getDescription().getName(), icon5.isEnabled() ? "Loaded" : "Waiting")); } // Try to load iConomy 6 if (packageExists(new String[] { "com.iCo6.iConomy" })) { Economy icon6 = new Economy_iConomy6(this); - getServer().getServicesManager().register(Economy.class, icon6, this, ServicePriority.High); + sm.register(Economy.class, icon6, this, ServicePriority.High); log.info(String.format("[%s][Economy] iConomy 6 found: %s", getDescription().getName(), icon6.isEnabled() ? "Loaded" : "Waiting")); } //Try loading EconXP if (packageExists(new String[] { "ca.agnate.EconXP.EconXP" })) { Economy econ = new Economy_EconXP(this); - getServer().getServicesManager().register(Economy.class, econ, this, ServicePriority.Normal); + sm.register(Economy.class, econ, this, ServicePriority.Normal); log.info(String.format("[%s][Economy] EconXP found: %s", getDescription().getName(), econ.isEnabled() ? "Loaded" : "Waiting")); } } @@ -273,49 +283,49 @@ public class Vault extends JavaPlugin { // Try to load PermissionsEx if (packageExists(new String[] { "ru.tehkode.permissions.bukkit.PermissionsEx" })) { Permission ePerms = new Permission_PermissionsEx(this); - getServer().getServicesManager().register(Permission.class, ePerms, this, ServicePriority.Highest); + sm.register(Permission.class, ePerms, this, ServicePriority.Highest); log.info(String.format("[%s][Permission] PermissionsEx found: %s", getDescription().getName(), ePerms.isEnabled() ? "Loaded" : "Waiting")); } //Try loading PermissionsBukkit if (packageExists(new String[] {"com.platymuus.bukkit.permissions.PermissionsPlugin"} )) { Permission pPerms = new Permission_PermissionsBukkit(this); - getServer().getServicesManager().register(Permission.class, pPerms, this, ServicePriority.Highest); + sm.register(Permission.class, pPerms, this, ServicePriority.Highest); log.info(String.format("[%s][Permission] PermissionsBukkit found: %s", getDescription().getName(), pPerms.isEnabled() ? "Loaded" : "Waiting")); } //Try to load bPermissions if (packageExists(new String[] {"de.bananaco.permissions.worlds.WorldPermissionsManager"} )) { Permission bPerms = new Permission_bPermissions(this); - getServer().getServicesManager().register(Permission.class, bPerms, this, ServicePriority.Highest); + sm.register(Permission.class, bPerms, this, ServicePriority.Highest); log.info(String.format("[%s][Permission] bPermissions found: %s", getDescription().getName(), bPerms.isEnabled() ? "Loaded" : "Waiting")); } //Try to load zPermission if (packageExists(new String[] {"org.tyrannyofheaven.bukkit.zPermissions"})) { Permission zPerms = new Permission_zPermissions(this); - getServer().getServicesManager().register(Permission.class, zPerms, this, ServicePriority.Highest); + sm.register(Permission.class, zPerms, this, ServicePriority.Highest); log.info(String.format("[%s][Permission] GroupManager found: %s", getDescription().getName(), zPerms.isEnabled() ? "Loaded" : "Waiting")); } // Try to load GroupManager if (packageExists(new String[] { "org.anjocaido.groupmanager.GroupManager" })) { Permission gPerms = new Permission_GroupManager(this); - getServer().getServicesManager().register(Permission.class, gPerms, this, ServicePriority.High); + sm.register(Permission.class, gPerms, this, ServicePriority.High); log.info(String.format("[%s][Permission] GroupManager found: %s", getDescription().getName(), gPerms.isEnabled() ? "Loaded" : "Waiting")); } // Try to load Permissions 3 (Yeti) if (packageExists(new String[] { "com.nijiko.permissions.ModularControl" })) { Permission nPerms = new Permission_Permissions3(this); - getServer().getServicesManager().register(Permission.class, nPerms, this, ServicePriority.High); + sm.register(Permission.class, nPerms, this, ServicePriority.High); log.info(String.format("[%s][Permission] Permissions 3 (Yeti) found: %s", getDescription().getName(), nPerms.isEnabled() ? "Loaded" : "Waiting")); } Permission perms = new Permission_SuperPerms(this); - getServer().getServicesManager().register(Permission.class, perms, this, ServicePriority.Lowest); + sm.register(Permission.class, perms, this, ServicePriority.Lowest); log.info(String.format("[%s][Permission] SuperPermissions loaded as backup permission system.", getDescription().getName())); - this.perms = getServer().getServicesManager().getRegistration(Permission.class).getProvider(); + this.perms = sm.getRegistration(Permission.class).getProvider(); } @Override diff --git a/src/net/milkbowl/vault/chat/plugins/Chat_HeroTitles.java b/src/net/milkbowl/vault/chat/plugins/Chat_HeroTitles.java new file mode 100644 index 0000000..16432aa --- /dev/null +++ b/src/net/milkbowl/vault/chat/plugins/Chat_HeroTitles.java @@ -0,0 +1,268 @@ +package net.milkbowl.vault.chat.plugins; + +import java.util.logging.Logger; + +import org.bukkit.event.Event.Priority; +import org.bukkit.event.Event.Type; +import org.bukkit.event.server.PluginDisableEvent; +import org.bukkit.event.server.PluginEnableEvent; +import org.bukkit.event.server.ServerListener; +import org.bukkit.plugin.Plugin; +import org.bukkit.plugin.PluginManager; + +import com.herocraftonline.herotitles.HeroTitles; +import com.herocraftonline.herotitles.PlayerTitleManager; + +import net.milkbowl.vault.chat.Chat; +import net.milkbowl.vault.permission.Permission; + +public class Chat_HeroTitles extends Chat { + + private final Logger log = Logger.getLogger("Minecraft"); + private final String name = "HeroTitles"; + private PermissionServerListener permissionServerListener; + private Chat subChat; + private HeroTitles chat; + private Plugin plugin = null; + + public Chat_HeroTitles(Plugin plugin, Permission perms, Chat subChat) { + super(perms); + this.plugin = plugin; + this.subChat = subChat; + PluginManager pluginManager = this.plugin.getServer().getPluginManager(); + + permissionServerListener = new PermissionServerListener(this); + + pluginManager.registerEvent(Type.PLUGIN_ENABLE, permissionServerListener, Priority.Monitor, plugin); + pluginManager.registerEvent(Type.PLUGIN_DISABLE, permissionServerListener, Priority.Monitor, plugin); + + // Load Plugin in case it was loaded before + if (this.chat == null) { + Plugin chat = plugin.getServer().getPluginManager().getPlugin("HeroTitles"); + if (chat != null) { + this.chat = (HeroTitles) chat; + log.info(String.format("[%s][Chat] %s hooked.", plugin.getDescription().getName(), "HeroTitles")); + } + } + } + + private class PermissionServerListener extends ServerListener { + Chat_HeroTitles chat = null; + + public PermissionServerListener(Chat_HeroTitles chat) { + this.chat = chat; + } + + public void onPluginEnable(PluginEnableEvent event) { + if (this.chat.chat == null) { + Plugin chat = plugin.getServer().getPluginManager().getPlugin("HeroTitles"); + if (chat != null) { + this.chat.chat = (HeroTitles) chat; + log.info(String.format("[%s][Chat] %s hooked.", plugin.getDescription().getName(), "HeroTitles")); + } + } + } + + public void onPluginDisable(PluginDisableEvent event) { + if (this.chat.chat != null) { + if (event.getPlugin().getDescription().getName().equals("HeroTitles")) { + this.chat.chat = null; + log.info(String.format("[%s][Chat] %s un-hooked.", plugin.getDescription().getName(), "HeroTitles")); + } + } + } + } + + @Override + public String getName() { + return name; + } + + @Override + public boolean isEnabled() { + return chat != null && chat.isEnabled(); + } + + @Override + public String getPlayerPrefix(String world, String player) { + return PlayerTitleManager.getTitlePrefix(player).data; + } + + @Override + public void setPlayerPrefix(String world, String player, String prefix) { + PlayerTitleManager.setTitlePrefix(player, prefix); + } + + @Override + public String getPlayerSuffix(String world, String player) { + return PlayerTitleManager.getTitleSuffix(player).data; + } + + @Override + public void setPlayerSuffix(String world, String player, String suffix) { + PlayerTitleManager.setTitleSuffix(player, suffix); + } + + @Override + public String getGroupPrefix(String world, String group) { + if (subChat != null) + return subChat.getGroupPrefix(world, group); + + throw new UnsupportedOperationException("HeroTitles does not support info nodes!"); + } + + @Override + public void setGroupPrefix(String world, String group, String prefix) { + if (subChat != null) + subChat.setGroupPrefix(world, group, prefix); + + throw new UnsupportedOperationException("HeroTitles does not support info nodes!"); + } + + @Override + public String getGroupSuffix(String world, String group) { + if (subChat != null) + return subChat.getGroupSuffix(world, group); + + throw new UnsupportedOperationException("HeroTitles does not support info nodes!"); + } + + @Override + public void setGroupSuffix(String world, String group, String suffix) { + if (subChat != null) + subChat.setGroupSuffix(world, group, suffix); + } + + @Override + public int getPlayerInfoInteger(String world, String player, String node, int defaultValue) { + if (subChat != null) + return subChat.getPlayerInfoInteger(world, player, node, defaultValue); + + throw new UnsupportedOperationException("HeroTitles does not support info nodes!"); + } + + @Override + public void setPlayerInfoInteger(String world, String player, String node, int value) { + if (subChat != null) + subChat.setPlayerInfoInteger(world, player, node, value); + + throw new UnsupportedOperationException("HeroTitles does not support info nodes!"); + } + + @Override + public int getGroupInfoInteger(String world, String group, String node, int defaultValue) { + if (subChat != null) + return subChat.getGroupInfoInteger(world, group, node, defaultValue); + + throw new UnsupportedOperationException("HeroTitles does not support info nodes!"); + } + + @Override + public void setGroupInfoInteger(String world, String group, String node, int value) { + if (subChat != null) + subChat.setGroupInfoInteger(world, group, node, value); + + throw new UnsupportedOperationException("HeroTitles does not support info nodes!"); + } + + @Override + public double getPlayerInfoDouble(String world, String player, String node, double defaultValue) { + if (subChat != null) + return subChat.getPlayerInfoDouble(world, player, node, defaultValue); + + throw new UnsupportedOperationException("HeroTitles does not support info nodes!"); + } + + @Override + public void setPlayerInfoDouble(String world, String player, String node, double value) { + if (subChat != null) + subChat.setPlayerInfoDouble(world, player, node, value); + + throw new UnsupportedOperationException("HeroTitles does not support info nodes!"); + + } + + @Override + public double getGroupInfoDouble(String world, String group, String node, double defaultValue) { + if (subChat != null) + return subChat.getGroupInfoDouble(world, group, node, defaultValue); + + throw new UnsupportedOperationException("HeroTitles does not support info nodes!"); + } + + @Override + public void setGroupInfoDouble(String world, String group, String node, double value) { + if (subChat != null) + subChat.setGroupInfoDouble(world, group, node, value); + + throw new UnsupportedOperationException("HeroTitles does not support info nodes!"); + } + + @Override + public boolean getPlayerInfoBoolean(String world, String player, String node, boolean defaultValue) { + if (subChat != null) + return subChat.getPlayerInfoBoolean(world, player, node, defaultValue); + + throw new UnsupportedOperationException("HeroTitles does not support info nodes!"); + } + + @Override + public void setPlayerInfoBoolean(String world, String player, String node, boolean value) { + if (subChat != null) + subChat.setPlayerInfoBoolean(world, player, node, value); + + throw new UnsupportedOperationException("HeroTitles does not support info nodes!"); + + } + + @Override + public boolean getGroupInfoBoolean(String world, String group, String node, boolean defaultValue) { + if (subChat != null) + return subChat.getGroupInfoBoolean(world, group, node, defaultValue); + + throw new UnsupportedOperationException("HeroTitles does not support info nodes!"); + } + + @Override + public void setGroupInfoBoolean(String world, String group, String node, boolean value) { + if (subChat != null) + subChat.setGroupInfoBoolean(world, group, node, value); + + throw new UnsupportedOperationException("HeroTitles does not support info nodes!"); + } + + @Override + public String getPlayerInfoString(String world, String player, String node, String defaultValue) { + if (node.equals("color")) + return PlayerTitleManager.getTitleColor(player).toString(); + + if (subChat != null) + return subChat.getPlayerInfoString(world, player, node, defaultValue); + + throw new UnsupportedOperationException("HeroTitles does not support info nodes!"); + } + + @Override + public void setPlayerInfoString(String world, String player, String node, String value) { + if (subChat != null) + subChat.setPlayerInfoString(world, player, node, value); + + throw new UnsupportedOperationException("HeroTitles does not support info nodes!"); + } + + @Override + public String getGroupInfoString(String world, String group, String node, String defaultValue) { + if (subChat != null) + return subChat.getGroupInfoString(world, group, node, defaultValue); + + throw new UnsupportedOperationException("HeroTitles does not support info nodes!"); + } + + @Override + public void setGroupInfoString(String world, String group, String node, String value) { + if (subChat != null) + subChat.setGroupInfoString(world, group, node, value); + + throw new UnsupportedOperationException("HeroTitles does not support info nodes!"); + } +} diff --git a/src/net/milkbowl/vault/chat/plugins/Chat_iChat.java b/src/net/milkbowl/vault/chat/plugins/Chat_iChat.java index cd2877f..485f7d0 100644 --- a/src/net/milkbowl/vault/chat/plugins/Chat_iChat.java +++ b/src/net/milkbowl/vault/chat/plugins/Chat_iChat.java @@ -40,7 +40,7 @@ public class Chat_iChat extends Chat { Plugin chat = plugin.getServer().getPluginManager().getPlugin("iChat"); if (chat != null) { iChat = ((iChat) chat).API; - log.info(String.format("[%s][Chat] %s hooked.", chat.getDescription().getName(), "iChat")); + log.info(String.format("[%s][Chat] %s hooked.", plugin.getDescription().getName(), "iChat")); } } } @@ -57,7 +57,7 @@ public class Chat_iChat extends Chat { Plugin chat = plugin.getServer().getPluginManager().getPlugin("iChat"); if (chat != null) { this.chat.iChat = ((iChat) chat).API; - log.info(String.format("[%s][Chat] %s hooked.", chat.getDescription().getName(), "iChat")); + log.info(String.format("[%s][Chat] %s hooked.", plugin.getDescription().getName(), "iChat")); } } }