Refactor ChatTag and ChatModifier to use Active.

This commit is contained in:
ulumulu1510 2017-03-01 12:07:28 +01:00
parent a18b6faf6f
commit f91cf135d4
20 changed files with 217 additions and 210 deletions

View File

@ -207,25 +207,25 @@ public class Factions extends MassivePlugin
TaskPlayerPowerUpdate.class, TaskPlayerPowerUpdate.class,
TaskPlayerDataRemove.class, TaskPlayerDataRemove.class,
TaskEconLandReward.class, TaskEconLandReward.class,
TaskFlagPermCreate.class TaskFlagPermCreate.class,
// ChatModifiers
ChatModifierLc.class,
ChatModifierLp.class,
ChatModifierParse.class,
ChatModifierRp.class,
ChatModifierUc.class,
ChatModifierUcf.class,
// ChatTags,
ChatTagRelcolor.class,
ChatTagRole.class,
ChatTagRoleprefix.class,
ChatTagRoleprefixforce.class,
ChatTagName.class,
ChatTagNameforce.class,
ChatTagTitle.class
); );
// Register built in chat modifiers
ChatModifierLc.get().register();
ChatModifierLp.get().register();
ChatModifierParse.get().register();
ChatModifierRp.get().register();
ChatModifierUc.get().register();
ChatModifierUcf.get().register();
// Register built in chat tags
ChatTagRelcolor.get().register();
ChatTagRole.get().register();
ChatTagRoleprefix.get().register();
ChatTagRoleprefixforce.get().register();
ChatTagName.get().register();
ChatTagNameforce.get().register();
ChatTagTitle.get().register();
} }
public GsonBuilder getGsonBuilderWithoutPreprocessors() public GsonBuilder getGsonBuilderWithoutPreprocessors()

View File

@ -0,0 +1,60 @@
package com.massivecraft.factions.chat;
import com.massivecraft.massivecore.Active;
import com.massivecraft.massivecore.Identified;
import com.massivecraft.massivecore.MassivePlugin;
public abstract class ChatActive implements Active, Identified
{
// -------------------------------------------- //
// FIELDS
// -------------------------------------------- //
private MassivePlugin activePlugin;
private final String id;
// -------------------------------------------- //
// CONSTRUCT
// -------------------------------------------- //
public ChatActive(final String id)
{
this.id = id.toLowerCase();
}
// -------------------------------------------- //
// OVERRIDE > IDENTIFIED
// -------------------------------------------- //
@Override
public String getId()
{
return this.id;
}
// -------------------------------------------- //
// OVERRIDE > ACTIVE
// -------------------------------------------- //
@Override
public MassivePlugin setActivePlugin(MassivePlugin plugin)
{
this.activePlugin = plugin;
return plugin;
}
@Override
public MassivePlugin getActivePlugin()
{
return this.activePlugin;
}
@Override
public void setActive(MassivePlugin plugin)
{
this.setActive(plugin != null);
this.setActivePlugin(plugin);
}
}

View File

@ -2,9 +2,7 @@ package com.massivecraft.factions.chat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -32,72 +30,6 @@ public class ChatFormatter
public final static Pattern pattern = Pattern.compile(ESC_START+"([^"+ESC_START+ESC_END+"]+)"+ESC_END); public final static Pattern pattern = Pattern.compile(ESC_START+"([^"+ESC_START+ESC_END+"]+)"+ESC_END);
// -------------------------------------------- //
// TAG REGISTER
// -------------------------------------------- //
private final static Map<String, ChatTag> idToTag = new HashMap<String, ChatTag>();
public static ChatTag getTag(String tagId) { return idToTag.get(tagId); }
public static boolean registerTag(ChatTag tag)
{
if (tag == null) throw new NullPointerException("tag");
String id = tag.getId();
if (id == null) throw new NullPointerException("tag id");
if (!id.equals(id.toLowerCase()))
{
throw new IllegalArgumentException("tag id must be lowercase");
}
ChatTag current = idToTag.get(id);
if (current != null)
{
return current.equals(tag);
}
idToTag.put(id, tag);
return true;
}
public static boolean unregisterTag(ChatTag tag)
{
if (tag == null) return false;
return idToTag.remove(tag.getId()) != null;
}
// -------------------------------------------- //
// MODIFIER REGISTER
// -------------------------------------------- //
private final static Map<String, ChatModifier> idToModifier = new HashMap<String, ChatModifier>();
public static ChatModifier getModifier(String modifierId) { return idToModifier.get(modifierId); }
public static boolean registerModifier(ChatModifier modifier)
{
if (modifier == null) throw new NullPointerException("modifier");
String id = modifier.getId();
if (id == null) throw new NullPointerException("modifier id");
if (!id.equals(id.toLowerCase()))
{
throw new IllegalArgumentException("modifier id must be lowercase");
}
ChatModifier current = idToModifier.get(id);
if (current != null)
{
return current.equals(modifier);
}
idToModifier.put(id, modifier);
return true;
}
public static boolean unregisterModifier(ChatModifier modifier)
{
if (modifier == null) return false;
return idToModifier.remove(modifier.getId()) != null;
}
// -------------------------------------------- // // -------------------------------------------- //
// FORMAT // FORMAT
// -------------------------------------------- // // -------------------------------------------- //
@ -127,7 +59,7 @@ public class ChatFormatter
String tagId = modifierIds.remove(0); String tagId = modifierIds.remove(0);
// Fetch tag for the id // Fetch tag for the id
ChatTag tag = getTag(tagId); ChatTag tag = ChatTag.getTag(tagId);
String replacement; String replacement;
if (tag == null) if (tag == null)
@ -167,7 +99,7 @@ public class ChatFormatter
for (String modifierId : modifierIds) for (String modifierId : modifierIds)
{ {
// Find the modifier or skip // Find the modifier or skip
ChatModifier modifier = getModifier(modifierId); ChatModifier modifier = ChatModifier.getModifier(modifierId);
if (modifier == null) continue; if (modifier == null) continue;
// Modify and ignore change if null. // Modify and ignore change if null.

View File

@ -1,11 +1,55 @@
package com.massivecraft.factions.chat; package com.massivecraft.factions.chat;
import org.bukkit.command.CommandSender; import java.util.Map;
public interface ChatModifier import org.bukkit.command.CommandSender;
{
public String getId(); import com.massivecraft.massivecore.collections.MassiveMap;
public String getModified(String subject, CommandSender sender, CommandSender recipient);
public boolean register(); public abstract class ChatModifier extends ChatActive
public boolean unregister(); {
} // -------------------------------------------- //
// MODIFIER REGISTER
// -------------------------------------------- //
private final static Map<String, ChatModifier> idToModifier = new MassiveMap<>();
public static ChatModifier getModifier(String modifierId) { return idToModifier.get(modifierId); }
// -------------------------------------------- //
// CONSTRUCT
// -------------------------------------------- //
public ChatModifier(final String id)
{
super(id);
}
// -------------------------------------------- //
// OVERRIDE
// -------------------------------------------- //
@Override
public boolean isActive()
{
return idToModifier.containsKey(this.getId());
}
@Override
public void setActive(boolean active)
{
if (active)
{
idToModifier.put(this.getId(), this);
}
else
{
idToModifier.remove(this.getId());
}
}
// -------------------------------------------- //
// ABSTRACT
// -------------------------------------------- //
public abstract String getModified(String subject, CommandSender sender, CommandSender recipient);
}

View File

@ -1,37 +0,0 @@
package com.massivecraft.factions.chat;
public abstract class ChatModifierAbstract implements ChatModifier
{
// -------------------------------------------- //
// FIELDS & RAWDATA GET/SET
// -------------------------------------------- //
private final String id;
@Override public String getId() { return this.id; }
// -------------------------------------------- //
// OVERRIDES
// -------------------------------------------- //
@Override
public boolean register()
{
return ChatFormatter.registerModifier(this);
}
@Override
public boolean unregister()
{
return ChatFormatter.unregisterModifier(this);
}
// -------------------------------------------- //
// CONSTRUCT
// -------------------------------------------- //
public ChatModifierAbstract(final String id)
{
this.id = id.toLowerCase();
}
}

View File

@ -1,11 +1,56 @@
package com.massivecraft.factions.chat; package com.massivecraft.factions.chat;
import org.bukkit.command.CommandSender; import java.util.Map;
public interface ChatTag import org.bukkit.command.CommandSender;
{
public String getId(); import com.massivecraft.massivecore.collections.MassiveMap;
public String getReplacement(CommandSender sender, CommandSender recipient);
public boolean register(); public abstract class ChatTag extends ChatActive
public boolean unregister(); {
} // -------------------------------------------- //
// TAG REGISTER
// -------------------------------------------- //
private final static Map<String, ChatTag> idToTag = new MassiveMap<>();
public static ChatTag getTag(String tagId) { return (ChatTag) idToTag.get(tagId); }
// -------------------------------------------- //
// CONSTRUCT
// -------------------------------------------- //
public ChatTag(final String id)
{
super(id);
}
// -------------------------------------------- //
// OVERRIDE
// -------------------------------------------- //
@Override
public boolean isActive()
{
return idToTag.containsKey(this.getId());
}
@Override
public void setActive(boolean active)
{
if (active)
{
idToTag.put(this.getId(), this);
}
else
{
idToTag.remove(this.getId());
}
}
// -------------------------------------------- //
// ABSTRACT
// -------------------------------------------- //
public abstract String getReplacement(CommandSender sender, CommandSender recipient);
}

View File

@ -1,37 +0,0 @@
package com.massivecraft.factions.chat;
public abstract class ChatTagAbstract implements ChatTag
{
// -------------------------------------------- //
// FIELDS & RAWDATA GET/SET
// -------------------------------------------- //
private final String id;
@Override public String getId() { return this.id; }
// -------------------------------------------- //
// OVERRIDES
// -------------------------------------------- //
@Override
public boolean register()
{
return ChatFormatter.registerTag(this);
}
@Override
public boolean unregister()
{
return ChatFormatter.unregisterTag(this);
}
// -------------------------------------------- //
// CONSTRUCT
// -------------------------------------------- //
public ChatTagAbstract(final String id)
{
this.id = id.toLowerCase();
}
}

View File

@ -2,9 +2,9 @@ package com.massivecraft.factions.chat.modifier;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import com.massivecraft.factions.chat.ChatModifierAbstract; import com.massivecraft.factions.chat.ChatModifier;
public class ChatModifierLc extends ChatModifierAbstract public class ChatModifierLc extends ChatModifier
{ {
// -------------------------------------------- // // -------------------------------------------- //
// INSTANCE & CONSTRUCT // INSTANCE & CONSTRUCT

View File

@ -2,10 +2,10 @@ package com.massivecraft.factions.chat.modifier;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import com.massivecraft.factions.chat.ChatModifierAbstract; import com.massivecraft.factions.chat.ChatModifier;
public class ChatModifierLp extends ChatModifierAbstract public class ChatModifierLp extends ChatModifier
{ {
// -------------------------------------------- // // -------------------------------------------- //
// INSTANCE & CONSTRUCT // INSTANCE & CONSTRUCT

View File

@ -2,10 +2,10 @@ package com.massivecraft.factions.chat.modifier;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import com.massivecraft.factions.chat.ChatModifierAbstract; import com.massivecraft.factions.chat.ChatModifier;
import com.massivecraft.massivecore.util.Txt; import com.massivecraft.massivecore.util.Txt;
public class ChatModifierParse extends ChatModifierAbstract public class ChatModifierParse extends ChatModifier
{ {
// -------------------------------------------- // // -------------------------------------------- //
// INSTANCE & CONSTRUCT // INSTANCE & CONSTRUCT

View File

@ -2,9 +2,9 @@ package com.massivecraft.factions.chat.modifier;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import com.massivecraft.factions.chat.ChatModifierAbstract; import com.massivecraft.factions.chat.ChatModifier;
public class ChatModifierRp extends ChatModifierAbstract public class ChatModifierRp extends ChatModifier
{ {
// -------------------------------------------- // // -------------------------------------------- //
// INSTANCE & CONSTRUCT // INSTANCE & CONSTRUCT

View File

@ -2,9 +2,9 @@ package com.massivecraft.factions.chat.modifier;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import com.massivecraft.factions.chat.ChatModifierAbstract; import com.massivecraft.factions.chat.ChatModifier;
public class ChatModifierUc extends ChatModifierAbstract public class ChatModifierUc extends ChatModifier
{ {
// -------------------------------------------- // // -------------------------------------------- //
// INSTANCE & CONSTRUCT // INSTANCE & CONSTRUCT

View File

@ -2,10 +2,10 @@ package com.massivecraft.factions.chat.modifier;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import com.massivecraft.factions.chat.ChatModifierAbstract; import com.massivecraft.factions.chat.ChatModifier;
import com.massivecraft.massivecore.util.Txt; import com.massivecraft.massivecore.util.Txt;
public class ChatModifierUcf extends ChatModifierAbstract public class ChatModifierUcf extends ChatModifier
{ {
// -------------------------------------------- // // -------------------------------------------- //
// INSTANCE & CONSTRUCT // INSTANCE & CONSTRUCT

View File

@ -2,11 +2,11 @@ package com.massivecraft.factions.chat.tag;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import com.massivecraft.factions.chat.ChatTagAbstract; import com.massivecraft.factions.chat.ChatTag;
import com.massivecraft.factions.entity.Faction; import com.massivecraft.factions.entity.Faction;
import com.massivecraft.factions.entity.MPlayer; import com.massivecraft.factions.entity.MPlayer;
public class ChatTagName extends ChatTagAbstract public class ChatTagName extends ChatTag
{ {
// -------------------------------------------- // // -------------------------------------------- //
// INSTANCE & CONSTRUCT // INSTANCE & CONSTRUCT

View File

@ -2,11 +2,11 @@ package com.massivecraft.factions.chat.tag;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import com.massivecraft.factions.chat.ChatTagAbstract; import com.massivecraft.factions.chat.ChatTag;
import com.massivecraft.factions.entity.Faction; import com.massivecraft.factions.entity.Faction;
import com.massivecraft.factions.entity.MPlayer; import com.massivecraft.factions.entity.MPlayer;
public class ChatTagNameforce extends ChatTagAbstract public class ChatTagNameforce extends ChatTag
{ {
// -------------------------------------------- // // -------------------------------------------- //
// INSTANCE & CONSTRUCT // INSTANCE & CONSTRUCT

View File

@ -2,10 +2,10 @@ package com.massivecraft.factions.chat.tag;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import com.massivecraft.factions.chat.ChatTagAbstract; import com.massivecraft.factions.chat.ChatTag;
import com.massivecraft.factions.entity.MPlayer; import com.massivecraft.factions.entity.MPlayer;
public class ChatTagRelcolor extends ChatTagAbstract public class ChatTagRelcolor extends ChatTag
{ {
// -------------------------------------------- // // -------------------------------------------- //
// INSTANCE & CONSTRUCT // INSTANCE & CONSTRUCT

View File

@ -2,11 +2,11 @@ package com.massivecraft.factions.chat.tag;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import com.massivecraft.factions.chat.ChatTagAbstract; import com.massivecraft.factions.chat.ChatTag;
import com.massivecraft.factions.entity.MPlayer; import com.massivecraft.factions.entity.MPlayer;
import com.massivecraft.massivecore.util.Txt; import com.massivecraft.massivecore.util.Txt;
public class ChatTagRole extends ChatTagAbstract public class ChatTagRole extends ChatTag
{ {
// -------------------------------------------- // // -------------------------------------------- //
// INSTANCE & CONSTRUCT // INSTANCE & CONSTRUCT

View File

@ -2,11 +2,11 @@ package com.massivecraft.factions.chat.tag;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import com.massivecraft.factions.chat.ChatTagAbstract; import com.massivecraft.factions.chat.ChatTag;
import com.massivecraft.factions.entity.Faction; import com.massivecraft.factions.entity.Faction;
import com.massivecraft.factions.entity.MPlayer; import com.massivecraft.factions.entity.MPlayer;
public class ChatTagRoleprefix extends ChatTagAbstract public class ChatTagRoleprefix extends ChatTag
{ {
// -------------------------------------------- // // -------------------------------------------- //
// INSTANCE & CONSTRUCT // INSTANCE & CONSTRUCT

View File

@ -2,10 +2,10 @@ package com.massivecraft.factions.chat.tag;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import com.massivecraft.factions.chat.ChatTagAbstract; import com.massivecraft.factions.chat.ChatTag;
import com.massivecraft.factions.entity.MPlayer; import com.massivecraft.factions.entity.MPlayer;
public class ChatTagRoleprefixforce extends ChatTagAbstract public class ChatTagRoleprefixforce extends ChatTag
{ {
// -------------------------------------------- // // -------------------------------------------- //
// INSTANCE & CONSTRUCT // INSTANCE & CONSTRUCT

View File

@ -2,10 +2,10 @@ package com.massivecraft.factions.chat.tag;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import com.massivecraft.factions.chat.ChatTagAbstract; import com.massivecraft.factions.chat.ChatTag;
import com.massivecraft.factions.entity.MPlayer; import com.massivecraft.factions.entity.MPlayer;
public class ChatTagTitle extends ChatTagAbstract public class ChatTagTitle extends ChatTag
{ {
// -------------------------------------------- // // -------------------------------------------- //
// INSTANCE & CONSTRUCT // INSTANCE & CONSTRUCT