Preemptive EssentialsChat 3.x support, since they'll be removing the old local chat integration method; new implementation will need improvement to support relation coloring, but for now it otherwise works.
When chat event hits an UnknownFormatConversionException which requires better chat configuration, the quick dirty fix of setting chatTagInsertIndex to 0 is now automatically applied.
This commit is contained in:
parent
dcd167d4e0
commit
4f4b988b42
BIN
lib/EssentialsChat.jar
Normal file
BIN
lib/EssentialsChat.jar
Normal file
Binary file not shown.
@ -21,7 +21,10 @@ import com.massivecraft.factions.adapters.FPermTypeAdapter;
|
|||||||
import com.massivecraft.factions.adapters.LocationTypeAdapter;
|
import com.massivecraft.factions.adapters.LocationTypeAdapter;
|
||||||
import com.massivecraft.factions.adapters.RelTypeAdapter;
|
import com.massivecraft.factions.adapters.RelTypeAdapter;
|
||||||
import com.massivecraft.factions.cmd.*;
|
import com.massivecraft.factions.cmd.*;
|
||||||
|
import com.massivecraft.factions.integration.capi.CapiFeatures;
|
||||||
import com.massivecraft.factions.integration.Econ;
|
import com.massivecraft.factions.integration.Econ;
|
||||||
|
import com.massivecraft.factions.integration.EssentialsFeatures;
|
||||||
|
import com.massivecraft.factions.integration.EssentialsOldVersionFeatures;
|
||||||
import com.massivecraft.factions.integration.LWCFeatures;
|
import com.massivecraft.factions.integration.LWCFeatures;
|
||||||
import com.massivecraft.factions.integration.SpoutFeatures;
|
import com.massivecraft.factions.integration.SpoutFeatures;
|
||||||
//import com.massivecraft.factions.integration.Worldguard;
|
//import com.massivecraft.factions.integration.Worldguard;
|
||||||
@ -40,8 +43,6 @@ import com.griefcraft.lwc.LWCPlugin;
|
|||||||
import com.earth2me.essentials.chat.EssentialsChat;
|
import com.earth2me.essentials.chat.EssentialsChat;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
import com.google.gson.reflect.TypeToken;
|
import com.google.gson.reflect.TypeToken;
|
||||||
import com.massivecraft.factions.integration.EssentialsFeatures;
|
|
||||||
import com.massivecraft.factions.integration.capi.CapiFeatures;
|
|
||||||
|
|
||||||
|
|
||||||
public class P extends MPlugin
|
public class P extends MPlugin
|
||||||
@ -184,15 +185,39 @@ public class P extends MPlugin
|
|||||||
if (test != null && test.isEnabled())
|
if (test != null && test.isEnabled())
|
||||||
{
|
{
|
||||||
essChat = (EssentialsChat)test;
|
essChat = (EssentialsChat)test;
|
||||||
|
|
||||||
|
// try newer Essentials 3.x integration method
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Class.forName("com.earth2me.essentials.chat.EssentialsLocalChatEvent");
|
||||||
EssentialsFeatures.integrateChat(essChat);
|
EssentialsFeatures.integrateChat(essChat);
|
||||||
}
|
}
|
||||||
|
catch (ClassNotFoundException ex)
|
||||||
|
{
|
||||||
|
// no? try older Essentials 2.x integration method
|
||||||
|
try
|
||||||
|
{
|
||||||
|
EssentialsOldVersionFeatures.integrateChat(essChat);
|
||||||
|
}
|
||||||
|
catch (NoClassDefFoundError ex2)
|
||||||
|
{
|
||||||
|
// no known method for hooking into Essentials chat stuff
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void unhookEssentialsChat()
|
private void unhookEssentialsChat()
|
||||||
{
|
{
|
||||||
if (essChat != null)
|
if (essChat != null)
|
||||||
{
|
{
|
||||||
EssentialsFeatures.unhookChat();
|
try
|
||||||
|
{
|
||||||
|
EssentialsOldVersionFeatures.unhookChat();
|
||||||
|
}
|
||||||
|
catch (NoClassDefFoundError ex)
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,15 +1,22 @@
|
|||||||
package com.massivecraft.factions.integration;
|
package com.massivecraft.factions.integration;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.player.PlayerChatEvent;
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
import com.massivecraft.factions.Conf;
|
import com.massivecraft.factions.Conf;
|
||||||
import com.massivecraft.factions.P;
|
import com.massivecraft.factions.P;
|
||||||
|
|
||||||
import com.earth2me.essentials.chat.EssentialsChat;
|
import com.earth2me.essentials.chat.EssentialsChat;
|
||||||
import com.earth2me.essentials.chat.IEssentialsChatListener;
|
import com.earth2me.essentials.chat.EssentialsLocalChatEvent;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This Essentials integration handler is for newer 3.x.x versions of Essentials which don't have "IEssentialsChatListener"
|
||||||
|
*/
|
||||||
|
|
||||||
public class EssentialsFeatures
|
public class EssentialsFeatures
|
||||||
{
|
{
|
||||||
private static EssentialsChat essChat;
|
private static EssentialsChat essChat;
|
||||||
@ -19,21 +26,11 @@ public class EssentialsFeatures
|
|||||||
essChat = instance;
|
essChat = instance;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
essChat.addEssentialsChatListener("Factions", new IEssentialsChatListener()
|
Bukkit.getServer().getPluginManager().registerEvents(new LocalChatListener(), P.p);
|
||||||
{
|
P.p.log("Found and will integrate chat with newer "+essChat.getDescription().getFullName());
|
||||||
public boolean shouldHandleThisChat(PlayerChatEvent event)
|
|
||||||
{
|
|
||||||
return P.p.shouldLetFactionsHandleThisChat(event);
|
|
||||||
}
|
|
||||||
public String modifyMessage(PlayerChatEvent event, Player target, String message)
|
|
||||||
{
|
|
||||||
return message.replace(Conf.chatTagReplaceString, P.p.getPlayerFactionTagRelation(event.getPlayer(), target)).replace("[FACTION_TITLE]", P.p.getPlayerTitle(event.getPlayer()));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
P.p.log("Found and will integrate chat with "+essChat.getDescription().getFullName());
|
|
||||||
|
|
||||||
// As of Essentials 2.8+, curly braces are not accepted and are instead replaced with square braces, so... deal with it
|
// curly braces used to be accepted by the format string EssentialsChat but no longer are, so... deal with chatTagReplaceString which might need updating
|
||||||
if (essChat.getDescription().getVersion().startsWith("2.8.") && Conf.chatTagReplaceString.contains("{"))
|
if (Conf.chatTagReplaceString.contains("{"))
|
||||||
{
|
{
|
||||||
Conf.chatTagReplaceString = Conf.chatTagReplaceString.replace("{", "[").replace("}", "]");
|
Conf.chatTagReplaceString = Conf.chatTagReplaceString.replace("{", "[").replace("}", "]");
|
||||||
P.p.log("NOTE: as of Essentials 2.8+, we've had to switch the default chat replacement tag from \"{FACTION}\" to \"[FACTION]\". This has automatically been updated for you.");
|
P.p.log("NOTE: as of Essentials 2.8+, we've had to switch the default chat replacement tag from \"{FACTION}\" to \"[FACTION]\". This has automatically been updated for you.");
|
||||||
@ -45,11 +42,17 @@ public class EssentialsFeatures
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void unhookChat()
|
private static class LocalChatListener implements Listener
|
||||||
{
|
{
|
||||||
if (essChat != null)
|
@EventHandler(priority = EventPriority.NORMAL)
|
||||||
|
public void onPlayerChat(EssentialsLocalChatEvent event)
|
||||||
{
|
{
|
||||||
essChat.removeEssentialsChatListener("Factions");
|
Player speaker = event.getPlayer();
|
||||||
|
String format = event.getFormat();
|
||||||
|
format = format.replace(Conf.chatTagReplaceString, P.p.getPlayerFactionTag(speaker)).replace("[FACTION_TITLE]", P.p.getPlayerTitle(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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,59 @@
|
|||||||
|
package com.massivecraft.factions.integration;
|
||||||
|
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.player.PlayerChatEvent;
|
||||||
|
|
||||||
|
import com.massivecraft.factions.Conf;
|
||||||
|
import com.massivecraft.factions.P;
|
||||||
|
|
||||||
|
import com.earth2me.essentials.chat.EssentialsChat;
|
||||||
|
import com.earth2me.essentials.chat.IEssentialsChatListener;
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This Essentials integration handler is for older 2.x.x versions of Essentials which have "IEssentialsChatListener"
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class EssentialsOldVersionFeatures
|
||||||
|
{
|
||||||
|
private static EssentialsChat essChat;
|
||||||
|
|
||||||
|
public static void integrateChat(EssentialsChat instance)
|
||||||
|
{
|
||||||
|
essChat = instance;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
essChat.addEssentialsChatListener("Factions", new IEssentialsChatListener()
|
||||||
|
{
|
||||||
|
public boolean shouldHandleThisChat(PlayerChatEvent event)
|
||||||
|
{
|
||||||
|
return P.p.shouldLetFactionsHandleThisChat(event);
|
||||||
|
}
|
||||||
|
public String modifyMessage(PlayerChatEvent event, Player target, String message)
|
||||||
|
{
|
||||||
|
return message.replace(Conf.chatTagReplaceString, P.p.getPlayerFactionTagRelation(event.getPlayer(), target)).replace("[FACTION_TITLE]", P.p.getPlayerTitle(event.getPlayer()));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
P.p.log("Found and will integrate chat with "+essChat.getDescription().getFullName());
|
||||||
|
|
||||||
|
// As of Essentials 2.8+, curly braces are not accepted and are instead replaced with square braces, so... deal with it
|
||||||
|
if (essChat.getDescription().getVersion().startsWith("2.8.") && Conf.chatTagReplaceString.contains("{"))
|
||||||
|
{
|
||||||
|
Conf.chatTagReplaceString = Conf.chatTagReplaceString.replace("{", "[").replace("}", "]");
|
||||||
|
P.p.log("NOTE: as of Essentials 2.8+, we've had to switch the default chat replacement tag from \"{FACTION}\" to \"[FACTION]\". This has automatically been updated for you.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (NoSuchMethodError ex)
|
||||||
|
{
|
||||||
|
essChat = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void unhookChat()
|
||||||
|
{
|
||||||
|
if (essChat != null)
|
||||||
|
{
|
||||||
|
essChat.removeEssentialsChatListener("Factions");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -73,10 +73,10 @@ public class FactionsPlayerListener implements Listener
|
|||||||
if (!Conf.chatTagReplaceString.isEmpty() && eventFormat.contains(Conf.chatTagReplaceString))
|
if (!Conf.chatTagReplaceString.isEmpty() && eventFormat.contains(Conf.chatTagReplaceString))
|
||||||
{
|
{
|
||||||
// we're using the "replace" method of inserting the faction tags
|
// we're using the "replace" method of inserting the faction tags
|
||||||
// if they stuck "{FACTION_TITLE}" in there, go ahead and do it too
|
// if they stuck "[FACTION_TITLE]" in there, go ahead and do it too
|
||||||
if (eventFormat.contains("{FACTION_TITLE}"))
|
if (eventFormat.contains("[FACTION_TITLE]"))
|
||||||
{
|
{
|
||||||
eventFormat = eventFormat.replace("{FACTION_TITLE}", me.getTitle());
|
eventFormat = eventFormat.replace("[FACTION_TITLE]", me.getTitle());
|
||||||
}
|
}
|
||||||
InsertIndex = eventFormat.indexOf(Conf.chatTagReplaceString);
|
InsertIndex = eventFormat.indexOf(Conf.chatTagReplaceString);
|
||||||
eventFormat = eventFormat.replace(Conf.chatTagReplaceString, "");
|
eventFormat = eventFormat.replace(Conf.chatTagReplaceString, "");
|
||||||
@ -123,8 +123,9 @@ public class FactionsPlayerListener implements Listener
|
|||||||
}
|
}
|
||||||
catch (UnknownFormatConversionException ex)
|
catch (UnknownFormatConversionException ex)
|
||||||
{
|
{
|
||||||
|
Conf.chatTagInsertIndex = 0;
|
||||||
P.p.log(Level.SEVERE, "Critical error in chat message formatting!");
|
P.p.log(Level.SEVERE, "Critical error in chat message formatting!");
|
||||||
P.p.log(Level.SEVERE, "NOTE: To fix this quickly, running this command should work: f config chatTagInsertIndex 0");
|
P.p.log(Level.SEVERE, "NOTE: This has been automatically fixed right now by setting chatTagInsertIndex to 0.");
|
||||||
P.p.log(Level.SEVERE, "For a more proper fix, please read this regarding chat configuration: http://massivecraft.com/plugins/factions/config#Chat_configuration");
|
P.p.log(Level.SEVERE, "For a more proper fix, please read this regarding chat configuration: http://massivecraft.com/plugins/factions/config#Chat_configuration");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user