120 lines
3.5 KiB
Java
120 lines
3.5 KiB
Java
package com.massivecraft.factions.integration;
|
|
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.ChatColor;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.event.EventHandler;
|
|
import org.bukkit.event.EventPriority;
|
|
import org.bukkit.event.Listener;
|
|
import org.bukkit.Location;
|
|
import org.bukkit.plugin.Plugin;
|
|
|
|
import com.massivecraft.factions.ConfServer;
|
|
import com.massivecraft.factions.Factions;
|
|
import com.massivecraft.factions.listeners.FactionsChatListener;
|
|
|
|
import com.earth2me.essentials.IEssentials;
|
|
import com.earth2me.essentials.Teleport;
|
|
import com.earth2me.essentials.Trade;
|
|
import com.earth2me.essentials.chat.EssentialsChat;
|
|
import com.earth2me.essentials.chat.EssentialsLocalChatEvent;
|
|
|
|
|
|
/*
|
|
* This Essentials integration handler is for newer 3.x.x versions of Essentials which don't have "IEssentialsChatListener"
|
|
* If an older version is detected in the setup() method below, handling is passed off to EssentialsOldVersionFeatures
|
|
*/
|
|
|
|
// silence deprecation warnings with this old interface
|
|
@SuppressWarnings("deprecation")
|
|
public class EssentialsFeatures
|
|
{
|
|
private static EssentialsChat essChat;
|
|
private static IEssentials essentials;
|
|
|
|
public static void setup()
|
|
{
|
|
// integrate main essentials plugin
|
|
// TODO: this is the old Essentials method not supported in 3.0... probably needs to eventually be moved to EssentialsOldVersionFeatures and new method implemented
|
|
if (essentials == null)
|
|
{
|
|
Plugin ess = Bukkit.getPluginManager().getPlugin("Essentials");
|
|
if (ess != null && ess.isEnabled())
|
|
essentials = (IEssentials)ess;
|
|
}
|
|
|
|
// integrate chat
|
|
if (essChat != null) return;
|
|
|
|
Plugin test = Bukkit.getServer().getPluginManager().getPlugin("EssentialsChat");
|
|
if (test == null || !test.isEnabled()) return;
|
|
|
|
essChat = (EssentialsChat)test;
|
|
|
|
// try newer Essentials 3.x integration method
|
|
try
|
|
{
|
|
Class.forName("com.earth2me.essentials.chat.EssentialsLocalChatEvent");
|
|
integrateChat(essChat);
|
|
}
|
|
catch (ClassNotFoundException ex)
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
public static void unhookChat()
|
|
{
|
|
if (essChat == null) return;
|
|
}
|
|
|
|
// return false if feature is disabled or Essentials isn't available
|
|
public static boolean handleTeleport(Player player, Location loc)
|
|
{
|
|
if ( ! ConfServer.homesTeleportCommandEssentialsIntegration || essentials == null) return false;
|
|
|
|
Teleport teleport = (Teleport) essentials.getUser(player).getTeleport();
|
|
Trade trade = new Trade(ConfServer.econCostHome, essentials);
|
|
try
|
|
{
|
|
teleport.teleport(loc, trade);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
player.sendMessage(ChatColor.RED.toString()+e.getMessage());
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
public static void integrateChat(EssentialsChat instance)
|
|
{
|
|
essChat = instance;
|
|
try
|
|
{
|
|
Bukkit.getServer().getPluginManager().registerEvents(new LocalChatListener(), Factions.get());
|
|
Factions.get().log("Found and will integrate chat with newer "+essChat.getDescription().getFullName());
|
|
}
|
|
catch (NoSuchMethodError ex)
|
|
{
|
|
essChat = null;
|
|
}
|
|
}
|
|
|
|
private static class LocalChatListener implements Listener
|
|
{
|
|
@EventHandler(priority = EventPriority.NORMAL)
|
|
public void onPlayerChat(EssentialsLocalChatEvent event)
|
|
{
|
|
Player speaker = event.getPlayer();
|
|
String format = event.getFormat();
|
|
|
|
format = FactionsChatListener.parseTags(format, speaker);
|
|
|
|
event.setFormat(format);
|
|
// NOTE: above doesn't do relation coloring. if/when we can get a local recipient list from EssentialsLocalChatEvent, we'll probably
|
|
// want to pass it on to FactionsPlayerListener.onPlayerChat(PlayerChatEvent event) rather than duplicating code
|
|
}
|
|
}
|
|
}
|