Add adventure text support, fix an obsolete check, change translations to be in adventure text style

This commit is contained in:
libraryaddict 2021-05-31 23:19:53 +12:00
parent afb2f733b0
commit c49e2e6636
5 changed files with 339 additions and 305 deletions

View File

@ -75,6 +75,7 @@
<junit.version>4.13.1</junit.version> <junit.version>4.13.1</junit.version>
<paper-api.version>[1.16,]</paper-api.version> <paper-api.version>[1.16,]</paper-api.version>
<bungeecord-chat.version>1.12-SNAPSHOT</bungeecord-chat.version> <bungeecord-chat.version>1.12-SNAPSHOT</bungeecord-chat.version>
<adventure.version>4.1.0-SNAPSHOT</adventure.version>
</properties> </properties>
<dependencies> <dependencies>
@ -129,6 +130,11 @@
<version>${bungeecord-chat.version}</version> <version>${bungeecord-chat.version}</version>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency>
<groupId>net.kyori</groupId>
<artifactId>adventure-text-minimessage</artifactId>
<version>${adventure.version}</version>
</dependency>
</dependencies> </dependencies>
<repositories> <repositories>

View File

@ -4,10 +4,7 @@ import com.comphenix.protocol.PacketType.Play.Server;
import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.reflect.StructureModifier; import com.comphenix.protocol.reflect.StructureModifier;
import com.comphenix.protocol.wrappers.ComponentConverter; import com.comphenix.protocol.wrappers.*;
import com.comphenix.protocol.wrappers.WrappedChatComponent;
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
import com.comphenix.protocol.wrappers.WrappedWatchableObject;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.mojang.datafixers.util.Pair; import com.mojang.datafixers.util.Pair;
import lombok.AccessLevel; import lombok.AccessLevel;
@ -572,8 +569,15 @@ public class FlagWatcher {
} }
if (NmsVersion.v1_13.isSupported()) { if (NmsVersion.v1_13.isSupported()) {
setData(MetaIndex.ENTITY_CUSTOM_NAME, Optional<WrappedChatComponent> optional;
Optional.of(WrappedChatComponent.fromJson(ComponentSerializer.toString(DisguiseUtilities.getColoredChat(name)))));
if (DisguiseUtilities.hasAdventureTextSupport()) {
optional = Optional.of(AdventureComponentConverter.fromComponent(DisguiseUtilities.getAdventureChat(name)));
} else {
optional = Optional.of(WrappedChatComponent.fromJson(ComponentSerializer.toString(DisguiseUtilities.getColoredChat(name))));
}
setData(MetaIndex.ENTITY_CUSTOM_NAME, optional);
} else { } else {
setData(MetaIndex.ENTITY_CUSTOM_NAME_OLD, name); setData(MetaIndex.ENTITY_CUSTOM_NAME_OLD, name);
} }

View File

@ -35,6 +35,9 @@ import me.libraryaddict.disguise.utilities.reflection.NmsVersion;
import me.libraryaddict.disguise.utilities.reflection.ReflectionManager; import me.libraryaddict.disguise.utilities.reflection.ReflectionManager;
import me.libraryaddict.disguise.utilities.translations.LibsMsg; import me.libraryaddict.disguise.utilities.translations.LibsMsg;
import me.libraryaddict.disguise.utilities.watchers.CompileMethods; import me.libraryaddict.disguise.utilities.watchers.CompileMethods;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
import net.md_5.bungee.api.chat.BaseComponent; import net.md_5.bungee.api.chat.BaseComponent;
import net.md_5.bungee.api.chat.ClickEvent; import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.chat.TextComponent;
@ -197,6 +200,7 @@ public class DisguiseUtilities {
private final static boolean java16; private final static boolean java16;
private static boolean criedOverJava16; private static boolean criedOverJava16;
private static HashSet<UUID> warnedSkin = new HashSet<>(); private static HashSet<UUID> warnedSkin = new HashSet<>();
private static Boolean adventureTextSupport;
static { static {
final Matcher matcher = Pattern.compile("(?:1\\.)?(\\d+)").matcher(System.getProperty("java.version")); final Matcher matcher = Pattern.compile("(?:1\\.)?(\\d+)").matcher(System.getProperty("java.version"));
@ -215,6 +219,19 @@ public class DisguiseUtilities {
} }
} }
public static boolean hasAdventureTextSupport() {
if (adventureTextSupport == null) {
try {
Class.forName("net.kyori.adventure.text.minimessage.MiniMessage");
adventureTextSupport = true;
} catch (ClassNotFoundException ex) {
adventureTextSupport = false;
}
}
return adventureTextSupport;
}
public static void doSkinUUIDWarning(CommandSender sender) { public static void doSkinUUIDWarning(CommandSender sender) {
if (!(sender instanceof Player)) { if (!(sender instanceof Player)) {
return; return;
@ -2421,16 +2438,16 @@ public class DisguiseUtilities {
} }
public static void sendMessage(CommandSender sender, String message) { public static void sendMessage(CommandSender sender, String message) {
if (message.isEmpty()) {
return;
}
if (!NmsVersion.v1_16.isSupported()) { if (!NmsVersion.v1_16.isSupported()) {
if (!message.isEmpty()) { sender.sendMessage(message);
sender.sendMessage(message);
}
} else { } else {
BaseComponent[] components = getColoredChat(message); BaseComponent[] components = getColoredChat(message);
if (components.length > 0) { sender.spigot().sendMessage(components);
sender.spigot().sendMessage(components);
}
} }
} }
@ -2516,6 +2533,10 @@ public class DisguiseUtilities {
return ChatColor.translateAlternateColorCodes('&', string); return ChatColor.translateAlternateColorCodes('&', string);
} }
public static Component getAdventureChat(String message) {
return MiniMessage.get().parse(message);
}
/** /**
* Modification of TextComponent.fromLegacyText * Modification of TextComponent.fromLegacyText
*/ */
@ -2524,6 +2545,10 @@ public class DisguiseUtilities {
return new BaseComponent[0]; return new BaseComponent[0];
} }
if (hasAdventureTextSupport()) {
return ComponentSerializer.parse(GsonComponentSerializer.gson().serialize(getAdventureChat(message)));
}
ArrayList<BaseComponent> components = new ArrayList(); ArrayList<BaseComponent> components = new ArrayList();
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();
TextComponent component = new TextComponent(); TextComponent component = new TextComponent();

View File

@ -6,322 +6,319 @@ import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import java.util.Locale;
/** /**
* Created by libraryaddict on 15/06/2017. * Created by libraryaddict on 15/06/2017.
*/ */
public enum LibsMsg { public enum LibsMsg {
NO_DISGUISES_IN_USE(ChatColor.RED + "There are no disguises in use!"), NO_DISGUISES_IN_USE("<red>There are no disguises in use!"),
ACTIVE_DISGUISES_COUNT(ChatColor.DARK_GREEN + "There are %s disguises active"), ACTIVE_DISGUISES_COUNT("<dark_green>There are %s disguises active"),
ACTIVE_DISGUISES_DISGUISE(ChatColor.GREEN + "%s: " + ChatColor.AQUA + "%s"), ACTIVE_DISGUISES_DISGUISE("<green>%s: <aqua>%s"),
ACTIVE_DISGUISES(ChatColor.DARK_GREEN + "The disguises in use are: %s"), ACTIVE_DISGUISES("<dark_green>The disguises in use are: %s"),
ACTIVE_DISGUISES_SEPERATOR(ChatColor.RED + ", " + ChatColor.GREEN), ACTIVE_DISGUISES_SEPERATOR("<red>, <green>"),
BLOWN_DISGUISE(ChatColor.RED + "Your disguise was blown!"), BLOWN_DISGUISE("<red>Your disguise was blown!"),
EXPIRED_DISGUISE(ChatColor.RED + "Your disguise has expired!"), EXPIRED_DISGUISE("<red>Your disguise has expired!"),
CAN_USE_DISGS(ChatColor.DARK_GREEN + "You can use the disguises:" + ChatColor.GREEN + " %s"), CAN_USE_DISGS("<dark_green>You can use the disguises:<green> %s"),
CAN_USE_DISGS_SEPERATOR(ChatColor.RED + ", " + ChatColor.GREEN), CAN_USE_DISGS_SEPERATOR("<red>, <green>"),
CANNOT_FIND_PLAYER(ChatColor.RED + "Cannot find the player/uuid '%s'"), CANNOT_FIND_PLAYER("<red>Cannot find the player/uuid '%s'"),
CANNOT_FIND_PLAYER_NAME(ChatColor.RED + "Cannot find the player '%s'"), CANNOT_FIND_PLAYER_NAME("<red>Cannot find the player '%s'"),
CANNOT_FIND_PLAYER_UUID(ChatColor.RED + "Cannot find the uuid '%s'"), CANNOT_FIND_PLAYER_UUID("<red>Cannot find the uuid '%s'"),
CLICK_TIMER(ChatColor.RED + "Right click a entity in the next %s seconds to grab the disguise reference!"), CLICK_TIMER("<red>Right click a entity in the next %s seconds to grab the disguise reference!"),
CLONE_HELP1(ChatColor.DARK_GREEN + "Right click a entity to get a disguise reference you can pass to other disguise commands!"), CLONE_HELP1("<dark_green>Right click a entity to get a disguise reference you can pass to other disguise commands!"),
CLONE_HELP2(ChatColor.DARK_GREEN + "Security note: Any references you create will be available to all players able to use disguise " + "references."), CLONE_HELP2("<dark_green>Security note: Any references you create will be available to all players able to use disguise references."),
CLONE_HELP3( CLONE_HELP3("<dark_green>/disguiseclone IgnoreEquipment<dark_green>(<green>Optional<dark_green>)"),
ChatColor.DARK_GREEN + "/disguiseclone IgnoreEquipment" + ChatColor.DARK_GREEN + "(" + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + ")"), CUSTOM_DISGUISE_SAVED("<gold>Custom disguise has been saved as '%s'!"),
CUSTOM_DISGUISE_SAVED(ChatColor.GOLD + "Custom disguise has been saved as '%s'!"), D_HELP1("<dark_green>Disguise another player!"),
D_HELP1(ChatColor.DARK_GREEN + "Disguise another player!"), D_HELP3("<dark_green>/disguiseplayer <PlayerName> player <Name>"),
D_HELP3(ChatColor.DARK_GREEN + "/disguiseplayer <PlayerName> player <Name>"), D_HELP4("<dark_green>/disguiseplayer <PlayerName> <DisguiseType> <Baby>"),
D_HELP4(ChatColor.DARK_GREEN + "/disguiseplayer <PlayerName> <DisguiseType> <Baby>"), D_HELP5("<dark_green>/disguiseplayer <PlayerName> <Dropped_Item/Falling_Block> <Id> <Durability>"),
D_HELP5(ChatColor.DARK_GREEN + "/disguiseplayer <PlayerName> <Dropped_Item/Falling_Block> <Id> <Durability>"), D_PARSE_NOPERM("<red>You do not have permission to use the method %s"),
D_PARSE_NOPERM(ChatColor.RED + "You do not have permission to use the method %s"), DHELP_CANTFIND("<red>Cannot find the disguise %s"),
DHELP_CANTFIND(ChatColor.RED + "Cannot find the disguise %s"), DHELP_HELP1("<red>/disguisehelp <DisguiseType> <green>" +
DHELP_HELP1(ChatColor.RED + "/disguisehelp <DisguiseType> " + ChatColor.GREEN + "- View the methods you can set on a disguise. Add 'show' to reveal the methods you don't have permission to use"),
"- View the methods you can set on a disguise. Add 'show' to reveal the methods you don't have permission" + " to use"), DHELP_HELP2("<red>/disguisehelp <DisguiseOption> <green>- View information about the disguise values such as 'RabbitType'"),
DHELP_HELP2(ChatColor.RED + "/disguisehelp <DisguiseOption> " + ChatColor.GREEN + "- View information about the " + "disguise values such as 'RabbitType'"), DHELP_HELP3("<red>/disguisehelp <dark_green>%s<green> - %s"),
DHELP_HELP3(ChatColor.RED + "/disguisehelp " + ChatColor.DARK_GREEN + "%s" + ChatColor.GREEN + " - %s"), DHELP_HELP4("<red>%s: <green>%s"),
DHELP_HELP4(ChatColor.RED + "%s: " + ChatColor.GREEN + "%s"), DHELP_HELP4_SEPERATOR("<red>, <green>"),
DHELP_HELP4_SEPERATOR(ChatColor.RED + ", " + ChatColor.GREEN), DHELP_HELP5("<red>%s: <green>%s"),
DHELP_HELP5(ChatColor.RED + "%s: " + ChatColor.GREEN + "%s"), DHELP_HELP6("<red>%s: <dark_green>%s <green>%s"),
DHELP_HELP6(ChatColor.RED + "%s: " + ChatColor.DARK_GREEN + "%s " + ChatColor.GREEN + "%s"),
DHELP_OPTIONS("%s options: %s"), DHELP_OPTIONS("%s options: %s"),
DISABLED_LIVING_TO_MISC(ChatColor.RED + "Can't disguise a living entity as a misc disguise. This has been disabled in the config!"), DISABLED_LIVING_TO_MISC("<red>Can't disguise a living entity as a misc disguise. This has been disabled in the config!"),
DISG_ENT_CLICK(ChatColor.RED + "Right click an entity in the next %s seconds to disguise it as a %s!"), DISG_ENT_CLICK("<red>Right click an entity in the next %s seconds to disguise it as a %s!"),
DISG_ENT_HELP1(ChatColor.DARK_GREEN + "Choose a disguise then right click an entity to disguise it!"), DISG_ENT_HELP1("<dark_green>Choose a disguise then right click an entity to disguise it!"),
DISG_ENT_HELP3(ChatColor.DARK_GREEN + "/disguiseentity player <Name>"), DISG_ENT_HELP3("<dark_green>/disguiseentity player <Name>"),
DISG_ENT_HELP4(ChatColor.DARK_GREEN + "/disguiseentity <DisguiseType> <Baby>"), DISG_ENT_HELP4("<dark_green>/disguiseentity <DisguiseType> <Baby>"),
DISG_ENT_HELP5(ChatColor.DARK_GREEN + "/disguiseentity <Dropped_Item/Falling_Block> <Id> <Durability>"), DISG_ENT_HELP5("<dark_green>/disguiseentity <Dropped_Item/Falling_Block> <Id> <Durability>"),
DISG_HELP1(ChatColor.DARK_GREEN + "Choose a disguise to become the disguise!"), DISG_HELP1("<dark_green>Choose a disguise to become the disguise!"),
DISG_HELP2(ChatColor.DARK_GREEN + "/disguise player <Name>"), DISG_HELP2("<dark_green>/disguise player <Name>"),
DISG_HELP3(ChatColor.DARK_GREEN + "/disguise <DisguiseType> <Baby>"), DISG_HELP3("<dark_green>/disguise <DisguiseType> <Baby>"),
DISG_HELP4(ChatColor.DARK_GREEN + "/disguise <Dropped_Item/Falling_Block> <Id> <Durability>"), DISG_HELP4("<dark_green>/disguise <Dropped_Item/Falling_Block> <Id> <Durability>"),
DISG_PLAYER_AS_DISG(ChatColor.RED + "Successfully disguised %s as a %s!"), DISG_PLAYER_AS_DISG("<red>Successfully disguised %s as a %s!"),
DISG_PLAYER_AS_DISG_FAIL(ChatColor.RED + "Failed to disguise %s as a %s!"), DISG_PLAYER_AS_DISG_FAIL("<red>Failed to disguise %s as a %s!"),
DISGUISED(ChatColor.RED + "Now disguised as %s"), DISGUISED("<red>Now disguised as %s"),
DISRADIUS(ChatColor.RED + "Successfully disguised %s entities!"), DISRADIUS("<red>Successfully disguised %s entities!"),
DISRADIUS_FAIL(ChatColor.RED + "Couldn't find any entities to disguise!"), DISRADIUS_FAIL("<red>Couldn't find any entities to disguise!"),
DMODENT_HELP1(ChatColor.DARK_GREEN + "Choose the options for a disguise then right click a entity to modify it!"), DMODENT_HELP1("<dark_green>Choose the options for a disguise then right click a entity to modify it!"),
DMODIFY_HELP1(ChatColor.DARK_GREEN + "Modify your own disguise as you wear it!"), DMODIFY_HELP1("<dark_green>Modify your own disguise as you wear it!"),
DMODIFY_HELP2(ChatColor.DARK_GREEN + "/disguisemodify setBaby true setSprinting true"), DMODIFY_HELP2("<dark_green>/disguisemodify setBaby true setSprinting true"),
DMODIFY_HELP3(ChatColor.DARK_GREEN + "You can modify the disguises:" + ChatColor.GREEN + " %s"), DMODIFY_HELP3("<dark_green>You can modify the disguises:<green> %s"),
DMODIFY_MODIFIED(ChatColor.RED + "Your disguise has been modified!"), DMODIFY_MODIFIED("<red>Your disguise has been modified!"),
DMODIFY_NO_PERM(ChatColor.RED + "No permission to modify your disguise!"), DMODIFY_NO_PERM("<red>No permission to modify your disguise!"),
DMODIFYENT_CLICK(ChatColor.RED + "Right click a disguised entity in the next %s seconds to modify their disguise!"), DMODIFYENT_CLICK("<red>Right click a disguised entity in the next %s seconds to modify their disguise!"),
DISGUISECOPY_INTERACT(ChatColor.RED + "Right click a disguised entity in the next %s seconds to copy their disguise!"), DISGUISECOPY_INTERACT("<red>Right click a disguised entity in the next %s seconds to copy their disguise!"),
DMODPLAYER_HELP1(ChatColor.DARK_GREEN + "Modify the disguise of another player!"), DMODPLAYER_HELP1("<dark_green>Modify the disguise of another player!"),
DMODPLAYER_MODIFIED(ChatColor.RED + "Modified the disguise of %s!"), DMODPLAYER_MODIFIED("<red>Modified the disguise of %s!"),
DMODPLAYER_NODISGUISE(ChatColor.RED + "The player '%s' is not disguised"), DMODPLAYER_NODISGUISE("<red>The player '%s' is not disguised"),
DMODPLAYER_NOPERM(ChatColor.RED + "You do not have permission to modify this disguise"), DMODPLAYER_NOPERM("<red>You do not have permission to modify this disguise"),
DMODRADIUS(ChatColor.RED + "Successfully modified the disguises of %s entities!"), DMODRADIUS("<red>Successfully modified the disguises of %s entities!"),
DMODRADIUS_HELP1(ChatColor.DARK_GREEN + "Modify the disguises in a radius! Caps at %s blocks!"), DMODRADIUS_HELP1("<dark_green>Modify the disguises in a radius! Caps at %s blocks!"),
DHELP_SHOW("Show"), DHELP_SHOW("Show"),
DHELP_NO_OPTIONS(ChatColor.RED + "No options with permission to use"), DHELP_NO_OPTIONS("<red>No options with permission to use"),
DCLONE_EQUIP("ignoreEquip"), DCLONE_EQUIP("ignoreEquip"),
DCLONE_ADDEDANIMATIONS("doAddedAnimations"), DCLONE_ADDEDANIMATIONS("doAddedAnimations"),
DMODRADIUS_HELP2( DMODRADIUS_HELP2(
(ChatColor.DARK_GREEN + "/disguisemodifyradius <DisguiseType" + ChatColor.DARK_GREEN + "(" + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + "<dark_green>/disguisemodifyradius <<green>DisguiseType<dark_green>(<green>Optional<dark_green>)> <<green>Radius<dark_green>> <<green>Disguise " +
")> <Radius> <Disguise Methods>").replace("<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">")), "Methods<dark_green>>"),
DMODRADIUS_HELP3(ChatColor.DARK_GREEN + "See the DisguiseType's usable by " + ChatColor.GREEN + "/disguisemodifyradius DisguiseType"), DMODRADIUS_HELP3("<dark_green>See the DisguiseType's usable by <green>/disguisemodifyradius DisguiseType"),
DMODRADIUS_NEEDOPTIONS(ChatColor.RED + "You need to supply the disguise methods as well as the radius"), DMODRADIUS_NEEDOPTIONS("<red>You need to supply the disguise methods as well as the radius"),
DMODRADIUS_NEEDOPTIONS_ENTITY(ChatColor.RED + "You need to supply the disguise methods as well as the radius and EntityType"), DMODRADIUS_NEEDOPTIONS_ENTITY("<red>You need to supply the disguise methods as well as the radius and EntityType"),
DMODRADIUS_NOENTS(ChatColor.RED + "Couldn't find any disguised entities!"), DMODRADIUS_NOENTS("<red>Couldn't find any disguised entities!"),
DMODRADIUS_NOPERM(ChatColor.RED + "No permission to modify %s disguises!"), DMODRADIUS_NOPERM("<red>No permission to modify %s disguises!"),
DMODRADIUS_UNRECOGNIZED(ChatColor.RED + "Unrecognised DisguiseType %s"), DMODRADIUS_UNRECOGNIZED("<red>Unrecognised DisguiseType %s"),
DMODRADIUS_USABLE(ChatColor.DARK_GREEN + "DisguiseTypes usable are: %s" + ChatColor.DARK_GREEN + "."), DMODRADIUS_USABLE("<dark_green>DisguiseTypes usable are: %s<dark_green>."),
DPLAYER_SUPPLY(ChatColor.RED + "You need to supply a disguise as well as the player/uuid"), DPLAYER_SUPPLY("<red>You need to supply a disguise as well as the player/uuid"),
DRADIUS_ENTITIES(ChatColor.DARK_GREEN + "EntityTypes usable are: %s"), DRADIUS_ENTITIES("<dark_green>EntityTypes usable are: %s"),
DRADIUS_HELP1(ChatColor.DARK_GREEN + "Disguise all entities in a radius! Caps at %s blocks!"), DRADIUS_HELP1("<dark_green>Disguise all entities in a radius! Caps at %s blocks!"),
DRADIUS_HELP3((ChatColor.DARK_GREEN + "/disguiseradius <EntityType" + ChatColor.DARK_GREEN + "(" + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + DRADIUS_HELP3("<dark_green>/disguiseradius <<green>EntityType<dark_green>(<green>Optional<dark_green>)> <<green>Radius<dark_green>> player " +
")> <Radius> player <Name>").replace("<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">")), "<<green>Name<dark_green>>"),
DRADIUS_HELP4((ChatColor.DARK_GREEN + "/disguiseradius <EntityType" + ChatColor.DARK_GREEN + "(" + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + DRADIUS_HELP4("<dark_green>/disguiseradius <<green>EntityType<dark_green>(<green>Optional<dark_green>)> <<green>Radius<dark_green>> " +
")> <Radius> <DisguiseType> <Baby" + ChatColor.DARK_GREEN + "(" + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + ")>") "<<green>DisguiseType<dark_green>> <<green>Baby<dark_green>(<green>Optional<dark_green>)>"),
.replace("<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">")), DRADIUS_HELP5("<dark_green>/disguiseradius <<green>EntityType<dark_green>(<green>Optional<dark_green>)> <<green>Radius<dark_green>> " +
DRADIUS_HELP5((ChatColor.DARK_GREEN + "/disguiseradius <EntityType" + ChatColor.DARK_GREEN + "(" + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + "<<green>Dropped_Item/Falling_Block<dark_green>> <<green>Id<dark_green>> <<green>Durability<dark_green>(<green>Optional<dark_green>)" + ">"),
")> <Radius> <Dropped_Item/Falling_Block> <Id> <Durability" + ChatColor.DARK_GREEN + "(" + ChatColor.GREEN + "Optional" + ChatColor.DARK_GREEN + DRADIUS_HELP6("<dark_green>See the EntityType's usable by <green>/disguiseradius EntityTypes"),
")>").replace("<", "<" + ChatColor.GREEN).replace(">", ChatColor.DARK_GREEN + ">")), DRADIUS_MISCDISG("<red>Failed to disguise %s entities because the option to disguise a living entity as a non-living has been disabled in the config"),
DRADIUS_HELP6(ChatColor.DARK_GREEN + "See the EntityType's usable by " + ChatColor.GREEN + "/disguiseradius EntityTypes"), DRADIUS_NEEDOPTIONS("<red>You need to supply a disguise as well as the radius"),
DRADIUS_MISCDISG(ChatColor.RED + "Failed to disguise %s entities because the option to disguise a living entity as a non-living has been " + DRADIUS_NEEDOPTIONS_ENTITY("<red>You need to supply a disguise as well as the radius and EntityType"),
"disabled in the config"), FAILED_DISGIUSE("<red>Failed to disguise as %s"),
DRADIUS_NEEDOPTIONS(ChatColor.RED + "You need to supply a disguise as well as the radius"), GRABBED_SKIN("<gold>Grabbed skin and saved as %s!"),
DRADIUS_NEEDOPTIONS_ENTITY(ChatColor.RED + "You need to supply a disguise as well as the radius and EntityType"), PLEASE_WAIT("<gray>Please wait..."),
FAILED_DISGIUSE(ChatColor.RED + "Failed to disguise as %s"), INVALID_CLONE("<dark_red>Unknown method '%s' - Valid methods are 'IgnoreEquipment' 'DoSneakSprint' 'DoSneak' 'DoSprint'"),
GRABBED_SKIN(ChatColor.GOLD + "Grabbed skin and saved as %s!"), LIBS_COMMAND_WRONG_ARG("<red>[LibsDisguises] Invalid argument, use /libsdisguises help"),
PLEASE_WAIT(ChatColor.GRAY + "Please wait..."), LIBS_UPDATE_UNKNOWN_BRANCH("<red>[LibsDisguises] Invalid argument, use 'dev' or 'release' to switch branches"),
INVALID_CLONE(ChatColor.DARK_RED + "Unknown method '%s' - Valid methods are 'IgnoreEquipment' 'DoSneakSprint' " + "'DoSneak' 'DoSprint'"), LIMITED_RADIUS("<red>Limited radius to %s! Don't want to make too much lag right?"),
LIBS_COMMAND_WRONG_ARG(ChatColor.RED + "[LibsDisguises] Invalid argument, use /libsdisguises help"), LISTEN_ENTITY_ENTITY_DISG_ENTITY("<red>Disguised %s as a %s!"),
LIBS_UPDATE_UNKNOWN_BRANCH(ChatColor.RED + "[LibsDisguises] Invalid argument, use 'dev' or 'release' to switch branches"), LISTEN_ENTITY_ENTITY_DISG_ENTITY_FAIL("<red>Failed to disguise %s as a %s!"),
LIMITED_RADIUS(ChatColor.RED + "Limited radius to %s! Don't want to make too much lag right?"), LISTEN_ENTITY_ENTITY_DISG_PLAYER("<red>Disguised %s as the player %s!"),
LISTEN_ENTITY_ENTITY_DISG_ENTITY(ChatColor.RED + "Disguised %s as a %s!"), LISTEN_ENTITY_ENTITY_DISG_PLAYER_FAIL("<red>Failed to disguise %s as the player %s!"),
LISTEN_ENTITY_ENTITY_DISG_ENTITY_FAIL(ChatColor.RED + "Failed to disguise %s as a %s!"), LISTEN_ENTITY_PLAYER_DISG_ENTITY("<red>Disguised the player %s as a %s!"),
LISTEN_ENTITY_ENTITY_DISG_PLAYER(ChatColor.RED + "Disguised %s as the player %s!"), LISTEN_ENTITY_PLAYER_DISG_ENTITY_FAIL("<red>Failed to disguise the player %s as a %s!"),
LISTEN_ENTITY_ENTITY_DISG_PLAYER_FAIL(ChatColor.RED + "Failed to disguise %s as the player %s!"), LISTEN_ENTITY_PLAYER_DISG_PLAYER("<red>Disguised the player %s as the player %s!"),
LISTEN_ENTITY_PLAYER_DISG_ENTITY(ChatColor.RED + "Disguised the player %s as a %s!"), LISTEN_ENTITY_PLAYER_DISG_PLAYER_FAIL("<red>Failed to disguise the player %s as the player %s!"),
LISTEN_ENTITY_PLAYER_DISG_ENTITY_FAIL(ChatColor.RED + "Failed to disguise the player %s as a %s!"), LISTEN_UNDISG_ENT("<red>Undisguised the %s"),
LISTEN_ENTITY_PLAYER_DISG_PLAYER(ChatColor.RED + "Disguised the player %s as the player %s!"), LISTEN_UNDISG_ENT_FAIL("<red>%s isn't disguised!"),
LISTEN_ENTITY_PLAYER_DISG_PLAYER_FAIL(ChatColor.RED + "Failed to disguise the player %s as the player %s!"), LISTEN_UNDISG_PLAYER("<red>Undisguised %s"),
LISTEN_UNDISG_ENT(ChatColor.RED + "Undisguised the %s"), LISTEN_UNDISG_PLAYER_FAIL("<red>The %s isn't disguised!"),
LISTEN_UNDISG_ENT_FAIL(ChatColor.RED + "%s isn't disguised!"), LISTENER_MODIFIED_DISG("<red>Modified the disguise!"),
LISTEN_UNDISG_PLAYER(ChatColor.RED + "Undisguised %s"), MADE_REF("<red>Constructed a %s disguise! Your reference is %s"),
LISTEN_UNDISG_PLAYER_FAIL(ChatColor.RED + "The %s isn't disguised!"), MADE_REF_EXAMPLE("<red>Example usage: /disguise %s"),
LISTENER_MODIFIED_DISG(ChatColor.RED + "Modified the disguise!"), NO_CONSOLE("<red>You may not use this command from the console!"),
MADE_REF(ChatColor.RED + "Constructed a %s disguise! Your reference is %s"), TOO_FAST("<red>You are using the disguise command too fast!"),
MADE_REF_EXAMPLE(ChatColor.RED + "Example usage: /disguise %s"), NO_MODS("<red>%s is not using any mods!"),
NO_CONSOLE(ChatColor.RED + "You may not use this command from the console!"), MODS_LIST("<dark_green>%s has the mods:<aqua> %s"),
TOO_FAST(ChatColor.RED + "You are using the disguise command too fast!"), NO_PERM("<red>You are forbidden to use this command."),
NO_MODS(ChatColor.RED + "%s is not using any mods!"), UPDATE_ON_LATEST("<red>You are already on the latest version of LibsDisguises!"),
MODS_LIST(ChatColor.DARK_GREEN + "%s has the mods:" + ChatColor.AQUA + " %s"), UPDATE_ALREADY_DOWNLOADED("<red>That update has already been downloaded!"),
NO_PERM(ChatColor.RED + "You are forbidden to use this command."), UPDATE_FAILED("<red>LibsDisguises update failed! Check console for errors."),
UPDATE_ON_LATEST(ChatColor.RED + "You are already on the latest version of LibsDisguises!"), UPDATE_SUCCESS("<dark_green>LibsDisguises update success! Restart server to update!"),
UPDATE_ALREADY_DOWNLOADED(ChatColor.RED + "That update has already been downloaded!"), UPDATE_REQUIRED("<red>LibsDisguises requies an update check before it can give you that!"),
UPDATE_FAILED(ChatColor.RED + "LibsDisguises update failed! Check console for errors."), UPDATE_INFO("<dark_green>Lib's Disguises v%s, build %s, built %s and size %skb"),
UPDATE_SUCCESS(ChatColor.DARK_GREEN + "LibsDisguises update success! Restart server to update!"), UPDATE_IN_PROGRESS("<dark_green>LibsDisguises is now downloading an update..."),
UPDATE_REQUIRED(ChatColor.RED + "LibsDisguises requies an update check before it can give you that!"), NO_PERM_DISGUISE("<red>You do not have permission for that disguise!"),
UPDATE_INFO(ChatColor.DARK_GREEN + "Lib's Disguises v%s, build %s, built %s and size %skb"), NO_MODS_LISTENING("<red>This server is not listening for mods!"),
UPDATE_IN_PROGRESS(ChatColor.DARK_GREEN + "LibsDisguises is now downloading an update..."), NO_PERMS_USE_OPTIONS("<red>Ignored %s methods you do not have permission to use. Add 'show' to view unusable methods."),
NO_PERM_DISGUISE(ChatColor.RED + "You do not have permission for that disguise!"), OWNED_BY("<gold>Plugin registered to '%%__USER__%%'!"),
NO_MODS_LISTENING(ChatColor.RED + "This server is not listening for mods!"), NOT_DISGUISED("<red>You are not disguised!"),
NO_PERMS_USE_OPTIONS(ChatColor.RED + "Ignored %s methods you do not have permission to use. Add 'show' to view unusable methods."), DISGUISE_REQUIRED("<red>You must be disguised to run this command!"),
OWNED_BY(ChatColor.GOLD + "Plugin registered to '%%__USER__%%'!"), TARGET_NOT_DISGUISED("<red>That entity is not disguised!"),
NOT_DISGUISED(ChatColor.RED + "You are not disguised!"), NOT_NUMBER("<red>Error! %s is not a number"),
DISGUISE_REQUIRED(ChatColor.RED + "You must be disguised to run this command!"), PARSE_CANT_DISG_UNKNOWN("<red>Error! You cannot disguise as <green>Unknown!"),
TARGET_NOT_DISGUISED(ChatColor.RED + "That entity is not disguised!"), PARSE_CANT_LOAD("<red>Error! This disguise couldn't be loaded!"),
NOT_NUMBER(ChatColor.RED + "Error! %s is not a number"), PARSE_DISG_NO_EXIST("<red>Error! The disguise <green>%s<red> doesn't exist!"),
PARSE_CANT_DISG_UNKNOWN(ChatColor.RED + "Error! You cannot disguise as " + ChatColor.GREEN + "Unknown!"), PARSE_EXPECTED_RECEIVED("<red>Expected <green>%s<red>, received <green>%s<red> instead for <green>%s"),
PARSE_CANT_LOAD(ChatColor.RED + "Error! This disguise couldn't be loaded!"), PARSE_PARTICLE_BLOCK("<red>Expected <green>%s:Material<red>, received <green>%s<red> instead"),
PARSE_DISG_NO_EXIST(ChatColor.RED + "Error! The disguise " + ChatColor.GREEN + "%s" + ChatColor.RED + " doesn't exist!"), PARSE_PARTICLE_ITEM("<red>Expected <green>%s:Material,Amount?,Glow?<red>, received <green>%s<red> instead"),
PARSE_EXPECTED_RECEIVED( PARSE_PARTICLE_REDSTONE("<red>Expected <green>%s:Color,Size.0?<red>, received <green>%s<red> instead"),
ChatColor.RED + "Expected " + ChatColor.GREEN + "%s" + ChatColor.RED + ", received " + ChatColor.GREEN + "%s" + ChatColor.RED + " instead for " +
ChatColor.GREEN + "%s"),
PARSE_PARTICLE_BLOCK(
ChatColor.RED + "Expected " + ChatColor.GREEN + "%s:Material" + ChatColor.RED + ", received " + ChatColor.GREEN + "%s" + ChatColor.RED +
" instead"),
PARSE_PARTICLE_ITEM(ChatColor.RED + "Expected " + ChatColor.GREEN + "%s:Material,Amount?,Glow?" + ChatColor.RED + ", received " + ChatColor.GREEN + "%s" +
ChatColor.RED + " instead"),
PARSE_PARTICLE_REDSTONE(
ChatColor.RED + "Expected " + ChatColor.GREEN + "%s:Color,Size.0?" + ChatColor.RED + ", received " + ChatColor.GREEN + "%s" + ChatColor.RED +
" instead"),
PARSE_NO_ARGS("No arguments defined"), PARSE_NO_ARGS("No arguments defined"),
PARSE_NO_OPTION_VALUE(ChatColor.RED + "No value was given for the method %s"), PARSE_NO_OPTION_VALUE("<red>No value was given for the method %s"),
PARSE_NO_PERM_NAME(ChatColor.RED + "Error! You don't have permission to use that name!"), PARSE_NO_PERM_NAME("<red>Error! You don't have permission to use that name!"),
PARSE_NO_PERM_PARAM(ChatColor.RED + "Error! You do not have permission to use the parameter %s on the %s disguise!"), PARSE_NO_PERM_PARAM("<red>Error! You do not have permission to use the parameter %s on the %s disguise!"),
PARSE_NO_PERM_REF(ChatColor.RED + "You do not have permission to use disguise references!"), PARSE_NO_PERM_REF("<red>You do not have permission to use disguise references!"),
PARSE_NO_REF(ChatColor.RED + "Cannot find a disguise under the reference %s"), PARSE_NO_REF("<red>Cannot find a disguise under the reference %s"),
PARSE_OPTION_NA(ChatColor.RED + "Cannot find the method '%s'"), PARSE_OPTION_NA("<red>Cannot find the method '%s'"),
PARSE_SUPPLY_PLAYER(ChatColor.RED + "Error! You need to give a player name!"), PARSE_SUPPLY_PLAYER("<red>Error! You need to give a player name!"),
PARSE_TOO_MANY_ARGS(ChatColor.RED + "Error! %s doesn't know what to do with %s!"), PARSE_TOO_MANY_ARGS("<red>Error! %s doesn't know what to do with %s!"),
PARSE_INVALID_TIME(ChatColor.RED + "Error! %s is not a valid time! Use s,m,h,d or secs,mins,hours,days"), PARSE_INVALID_TIME("<red>Error! %s is not a valid time! Use s,m,h,d or secs,mins,hours,days"),
PARSE_INVALID_TIME_SEQUENCE(ChatColor.RED + "Error! %s is not a valid time! Do amount then time, eg. 4min10sec"), PARSE_INVALID_TIME_SEQUENCE("<red>Error! %s is not a valid time! Do amount then time, eg. 4min10sec"),
PARSE_USE_SECOND_NUM(ChatColor.RED + "Error! Only the disguises %s and %s uses a second number!"), PARSE_USE_SECOND_NUM("<red>Error! Only the disguises %s and %s uses a second number!"),
REF_TOO_MANY(ChatColor.RED + "Failed to store the reference, too many cloned disguises. Please raise the maximum cloned disguises, or " + REF_TOO_MANY("<red>Failed to store the reference, too many cloned disguises. Please raise the maximum cloned disguises, or lower the time they last"),
"lower the time they last"), RELOADED_CONFIG("<green>[LibsDisguises] Reloaded config."),
RELOADED_CONFIG(ChatColor.GREEN + "[LibsDisguises] Reloaded config."), UND_ENTITY("<red>Right click a disguised entity to undisguise them!"),
UND_ENTITY(ChatColor.RED + "Right click a disguised entity to undisguise them!"), UNDISG("<red>You are no longer disguised"),
UNDISG(ChatColor.RED + "You are no longer disguised"), UNDISG_PLAYER("<red>%s is no longer disguised"),
UNDISG_PLAYER(ChatColor.RED + "%s is no longer disguised"), UNDISG_PLAYER_FAIL("<red>%s not disguised!"),
UNDISG_PLAYER_FAIL(ChatColor.RED + "%s not disguised!"), UNDISG_PLAYER_HELP("<red>/undisguiseplayer <Name>"),
UNDISG_PLAYER_HELP(ChatColor.RED + "/undisguiseplayer <Name>"), UNDISRADIUS("<red>Successfully undisguised %s entities!"),
UNDISRADIUS(ChatColor.RED + "Successfully undisguised %s entities!"), UPDATE_READY("<red>[LibsDisguises] <dark_red>There is a update ready to be downloaded! You are using <red>v%s<dark_red>, the new version is " +
UPDATE_READY(ChatColor.RED + "[LibsDisguises] " + ChatColor.DARK_RED + "There is a update ready to be downloaded! You are using " + ChatColor.RED + "v%s" + "<red>v%s<dark_red>!"),
ChatColor.DARK_RED + ", the new version is " + ChatColor.RED + "v%s" + ChatColor.DARK_RED + "!"), UPDATE_READY_SNAPSHOT("<red>[LibsDisguises] <dark_red>There is a new build of Lib's Disguises! You are using <red>%s<dark_red>, the latest build is " +
UPDATE_READY_SNAPSHOT( "<red>#%s<dark_red>!"),
ChatColor.RED + "[LibsDisguises] " + ChatColor.DARK_RED + "There is a new build of Lib's Disguises! You are using " + ChatColor.RED + "%s" + UPDATE_HOW("<dark_aqua>Use <aqua>/libsdisgusies changelog<dark_aqua> to see what changed, use <aqua>/libsdisguises update!" +
ChatColor.DARK_RED + ", the latest build is " + ChatColor.RED + "#%s" + ChatColor.DARK_RED + "!"), "<dark_aqua> to download the update!"),
UPDATE_HOW( VIEW_SELF_ON("<green>Toggled viewing own disguise on!"),
ChatColor.DARK_AQUA + "Use " + ChatColor.AQUA + "/libsdisgusies changelog" + ChatColor.DARK_AQUA + " to see what changed, use " + ChatColor.AQUA + VIEW_SELF_OFF("<green>Toggled viewing own disguise off!"),
"/libsdisguises update!" + ChatColor.DARK_AQUA + " to download the update!"), VIEW_BAR_ON("<green>Toggled disguised notify bar on!"),
VIEW_SELF_ON(ChatColor.GREEN + "Toggled viewing own disguise on!"), VIEW_BAR_OFF("<green>Toggled disguised notify bar off!"),
VIEW_SELF_OFF(ChatColor.GREEN + "Toggled viewing own disguise off!"), CLICK_TO_COPY("<green>Click to Copy:"),
VIEW_BAR_ON(ChatColor.GREEN + "Toggled disguised notify bar on!"), SKIN_DATA("<green>Skin Data: <yellow>%s"),
VIEW_BAR_OFF(ChatColor.GREEN + "Toggled disguised notify bar off!"), CLICK_TO_COPY_DATA("<yellow>Data"),
CLICK_TO_COPY(ChatColor.GREEN + "Click to Copy:"), CLICK_TO_COPY_WITH_SKIN("<green>Version with skin data:"),
SKIN_DATA(ChatColor.GREEN + "Skin Data: " + ChatColor.YELLOW + "%s"), CLICK_TO_COPY_WITH_SKIN_NO_COPY("<green>Version with skin data: <yellow>%s"),
CLICK_TO_COPY_DATA(ChatColor.YELLOW + "Data"), COPY_DISGUISE_NO_COPY("<green>Data: <yellow>%s"),
CLICK_TO_COPY_WITH_SKIN(ChatColor.GREEN + "Version with skin data:"), CLICK_TO_COPY_HOVER("<gold>Click to Copy"),
CLICK_TO_COPY_WITH_SKIN_NO_COPY(ChatColor.GREEN + "Version with skin data: " + ChatColor.YELLOW + "%s"), CLICK_COPY("<yellow><bold>%s"),
COPY_DISGUISE_NO_COPY(ChatColor.GREEN + "Data: " + ChatColor.YELLOW + "%s"), SKIN_API_UUID_3("<red>Using account with UUID version 3. If skin is incorrect, try change 'UUIDVersion' in protocol.yml" +
CLICK_TO_COPY_HOVER(ChatColor.GOLD + "Click to Copy"),
CLICK_COPY(ChatColor.YELLOW + "" + ChatColor.BOLD + "%s"),
SKIN_API_UUID_3(ChatColor.RED + "Using account with UUID version 3. If skin is incorrect, try change 'UUIDVersion' in protocol.yml" +
" to 3. If skin is still incorrect and you did not purchase Minecraft, this cannot be fixed."), " to 3. If skin is still incorrect and you did not purchase Minecraft, this cannot be fixed."),
SKIN_API_IN_USE(ChatColor.RED + "mineskin.org is currently in use, please try again"), SKIN_API_IN_USE("<red>mineskin.org is currently in use, please try again"),
SKIN_API_TIMER(ChatColor.RED + "mineskin.org can be used again in %s seconds"), SKIN_API_TIMER("<red>mineskin.org can be used again in %s seconds"),
SKIN_API_FAIL(ChatColor.RED + "Unexpected error while accessing mineskin.org, please try again"), SKIN_API_FAIL("<red>Unexpected error while accessing mineskin.org, please try again"),
SKIN_API_FAIL_TOO_FAST(ChatColor.RED + "Too many requests accessing mineskin.org, please slow down!"), SKIN_API_FAIL_TOO_FAST("<red>Too many requests accessing mineskin.org, please slow down!"),
SKIN_API_BAD_URL(ChatColor.RED + "Invalid url provided! Please ensure it is a .png file download!"), SKIN_API_BAD_URL("<red>Invalid url provided! Please ensure it is a .png file download!"),
SKIN_API_FAILED_URL(ChatColor.RED + "Invalid url provided! mineskin.org failed to grab it!"), SKIN_API_FAILED_URL("<red>Invalid url provided! mineskin.org failed to grab it!"),
SKIN_API_FAIL_CODE(ChatColor.RED + "Error %s! %s"), SKIN_API_FAIL_CODE("<red>Error %s! %s"),
SKIN_API_403("mineskin.org denied access to that url"), SKIN_API_403("mineskin.org denied access to that url"),
SKIN_API_404("mineskin.org unable to find an image at that url"), SKIN_API_404("mineskin.org unable to find an image at that url"),
SKIN_API_IMAGE_TIMEOUT(ChatColor.RED + "Error! mineskin.org took too long to connect! Is your image valid?"), SKIN_API_IMAGE_TIMEOUT("<red>Error! mineskin.org took too long to connect! Is your image valid?"),
SKIN_API_TIMEOUT_ERROR(ChatColor.RED + "Error! Took too long to connect to mineskin.org!"), SKIN_API_TIMEOUT_ERROR("<red>Error! Took too long to connect to mineskin.org!"),
SKIN_API_TIMEOUT_API_KEY_ERROR(ChatColor.RED + "Error! Took too long to connect to mineskin.org! Is the API Key correct?"), SKIN_API_TIMEOUT_API_KEY_ERROR("<red>Error! Took too long to connect to mineskin.org! Is the API Key correct?"),
SKIN_API_TIMEOUT(ChatColor.RED + "Took too long to connect to mineskin.org!"), SKIN_API_TIMEOUT("<red>Took too long to connect to mineskin.org!"),
SKIN_API_IMAGE_HAS_ERROR("Your image has the error: %s"), SKIN_API_IMAGE_HAS_ERROR("Your image has the error: %s"),
SKIN_API_USING_URL(ChatColor.GRAY + "Url provided, now attempting to connect to mineskin.org"), SKIN_API_USING_URL("<gray>Url provided, now attempting to connect to mineskin.org"),
SKIN_API_BAD_FILE_NAME(ChatColor.RED + "Invalid file name provided! File not found!"), SKIN_API_BAD_FILE_NAME("<red>Invalid file name provided! File not found!"),
SKIN_API_BAD_FILE(ChatColor.RED + "Invalid file provided! Please ensure it is a valid .png skin!"), SKIN_API_BAD_FILE("<red>Invalid file provided! Please ensure it is a valid .png skin!"),
SKIN_API_USING_FILE(ChatColor.GRAY + "File provided and found, now attempting to upload to mineskin.org"), SKIN_API_USING_FILE("<gray>File provided and found, now attempting to upload to mineskin.org"),
SKIN_API_INVALID_NAME(ChatColor.RED + "Invalid name/file/uuid provided!"), SKIN_API_INVALID_NAME("<red>Invalid name/file/uuid provided!"),
SKIN_API_USING_UUID(ChatColor.GRAY + "UUID successfully parsed, now attempting to connect to mineskin.org"), SKIN_API_USING_UUID("<gray>UUID successfully parsed, now attempting to connect to mineskin.org"),
SKIN_API_USING_EXISTING_NAME(ChatColor.GRAY + "Found a saved skin under that name locally! Using that!"), SKIN_API_USING_EXISTING_NAME("<gray>Found a saved skin under that name locally! Using that!"),
SKIN_API_USING_NAME(ChatColor.GRAY + "Determined to be player name, now attempting to validate and connect to mineskin.org"), SKIN_API_USING_NAME("<gray>Determined to be player name, now attempting to validate and connect to mineskin.org"),
SAVE_DISG_HELP_1(ChatColor.GREEN + "The <DisguiseName> is what the disguise will be called in Lib's Disguises"), SAVE_DISG_HELP_1("<green>The <DisguiseName> is what the disguise will be called in Lib's Disguises"),
SAVE_DISG_HELP_2(ChatColor.GREEN + "/savedisguise <DisguiseName> - If you don't provide arguments, it'll try make a disguise from your" + SAVE_DISG_HELP_2("<green>/savedisguise <DisguiseName> - If you don't provide arguments, it'll try make a disguise from your" +
" current disguise. This will not work if you are not disguised!"), " current disguise. This will not work if you are not disguised!"),
SAVE_DISG_HELP_3(ChatColor.GREEN + "/savedisguise <DisguiseName> <Arguments>"), SAVE_DISG_HELP_3("<green>/savedisguise <DisguiseName> <Arguments>"),
SAVE_DISG_HELP_4(ChatColor.GREEN + "Your arguments need to be as if you're using /disguise. So '/disguise player Notch setsneaking' - " + SAVE_DISG_HELP_4("<green>Your arguments need to be as if you're using /disguise. So '/disguise player Notch setsneaking' - " +
"Means '/savedisguise Notch player Notch setsneaking'"), "Means '/savedisguise Notch player Notch setsneaking'"),
SAVE_DISG_HELP_5(ChatColor.GREEN + "Remember! You can upload your own skins, then reference those skins!"), SAVE_DISG_HELP_5("<green>Remember! You can upload your own skins, then reference those skins!"),
SAVE_DISG_HELP_6(ChatColor.GREEN + "If you are using setSkin, you can append :slim to your skin path to get the slim Alex model. So myskin" + ".png:slim"), SAVE_DISG_HELP_6("<green>If you are using setSkin, you can append :slim to your skin path to get the slim Alex model. So myskin.png:slim"),
GRAB_DISG_HELP_1(ChatColor.GREEN + "You can choose a name to save the skins under, the names will be usable as if it was an actual player " + "skin"), GRAB_DISG_HELP_1("<green>You can choose a name to save the skins under, the names will be usable as if it was an actual player skin"),
GRAB_DISG_HELP_2(ChatColor.DARK_GREEN + "/grabskin <Optional Name> https://somesite.com/myskin.png"), GRAB_DISG_HELP_2("<dark_green>/grabskin <Optional Name> https://somesite.com/myskin.png"),
GRAB_DISG_HELP_3(ChatColor.DARK_GREEN + "/grabskin <Optional Name> myskin.png - Skins must be in the folder!"), GRAB_DISG_HELP_3("<dark_green>/grabskin <Optional Name> myskin.png - Skins must be in the folder!"),
GRAB_DISG_HELP_4(ChatColor.DARK_GREEN + "/grabskin <Optional Name> <Player name or UUID>"), GRAB_DISG_HELP_4("<dark_green>/grabskin <Optional Name> <Player name or UUID>"),
GRAB_DISG_HELP_5(ChatColor.GREEN + "If you want the slim Alex version of the skin, append :slim. So 'myskin.png:slim'"), GRAB_DISG_HELP_5("<green>If you want the slim Alex version of the skin, append :slim. So 'myskin.png:slim'"),
GRAB_DISG_HELP_6(ChatColor.GREEN + "You will be sent the skin data, but you can also use the saved names in disguises"), GRAB_DISG_HELP_6("<green>You will be sent the skin data, but you can also use the saved names in disguises"),
GRAB_HEAD_SUCCESS(ChatColor.GREEN + "Head successfully grabbed and added to inventory!"), GRAB_HEAD_SUCCESS("<green>Head successfully grabbed and added to inventory!"),
GRAB_HEAD_HELP_1(ChatColor.GREEN + "Grab the head of a file, player or url! This is a Lib's Disguises feature."), GRAB_HEAD_HELP_1("<green>Grab the head of a file, player or url! This is a Lib's Disguises feature."),
GRAB_HEAD_HELP_2(ChatColor.DARK_GREEN + "/grabhead https://somesite.com/myskin.png"), GRAB_HEAD_HELP_2("<dark_green>/grabhead https://somesite.com/myskin.png"),
GRAB_HEAD_HELP_3(ChatColor.DARK_GREEN + "/grabhead myskin.png - Skins must be in the folder!"), GRAB_HEAD_HELP_3("<dark_green>/grabhead myskin.png - Skins must be in the folder!"),
GRAB_HEAD_HELP_4(ChatColor.DARK_GREEN + "/grabhead <Player name or UUID>"), GRAB_HEAD_HELP_4("<dark_green>/grabhead <Player name or UUID>"),
CUSTOM_DISGUISE_NAME_CONFLICT(ChatColor.RED + "Cannot create the custom disguise '%s' as there is a name conflict!"), CUSTOM_DISGUISE_NAME_CONFLICT("<red>Cannot create the custom disguise '%s' as there is a name conflict!"),
ERROR_LOADING_CUSTOM_DISGUISE(ChatColor.RED + "Error while loading custom disguise '%s'%s"), ERROR_LOADING_CUSTOM_DISGUISE("<red>Error while loading custom disguise '%s'%s"),
SKIN_API_INTERNAL_ERROR(ChatColor.RED + "Internal error in the skin API, perhaps bad data?"), SKIN_API_INTERNAL_ERROR("<red>Internal error in the skin API, perhaps bad data?"),
META_INFO(ChatColor.GREEN + "Name: %s, Watcher: %s, Index: %s, Type: %s, Default: %s"), META_INFO("<green>Name: %s, Watcher: %s, Index: %s, Type: %s, Default: %s"),
META_NOT_FOUND(ChatColor.RED + "No meta exists under that name!"), META_NOT_FOUND("<red>No meta exists under that name!"),
META_VALUES(ChatColor.BLUE + "Metas: " + ChatColor.DARK_AQUA), META_VALUES("<blue>Metas: <dark_aqua>"),
META_VALUES_NO_CLICK(ChatColor.BLUE + "Metas, use as param for more info: " + ChatColor.DARK_AQUA), META_VALUES_NO_CLICK("<blue>Metas, use as param for more info: <dark_aqua>"),
META_VALUE_SEPERATOR(ChatColor.AQUA + ", " + ChatColor.DARK_AQUA), META_VALUE_SEPERATOR("<aqua>, <dark_aqua>"),
META_CLICK_SHOW(ChatColor.GOLD + "Click to show %s"), META_CLICK_SHOW("<gold>Click to show %s"),
LIBS_PERM_CHECK_NON_PREM(ChatColor.RED + "This server is not premium, non-admins should not be able to use commands"), LIBS_PERM_CHECK_NON_PREM("<red>This server is not premium, non-admins should not be able to use commands"),
LIBS_PERM_CHECK_CAN_TARGET(ChatColor.GOLD + "You can specify a player target with /ld permtest <Target> instead!"), LIBS_PERM_CHECK_CAN_TARGET("<gold>You can specify a player target with /ld permtest <Target> instead!"),
LIBS_PERM_CHECK_USING_TARGET(ChatColor.GOLD + "Running the permission test on '%s'"), LIBS_PERM_CHECK_USING_TARGET("<gold>Running the permission test on '%s'"),
LIBS_PERM_CHECK_INFO_1(ChatColor.AQUA + "Now checking for the permission 'libsdisguises.disguise.pig'"), LIBS_PERM_CHECK_INFO_1("<aqua>Now checking for the permission 'libsdisguises.disguise.pig'"),
LIBS_PERM_CHECK_INFO_2(ChatColor.AQUA + "If you did not give this permission, please set it."), LIBS_PERM_CHECK_INFO_2("<aqua>If you did not give this permission, please set it."),
NORMAL_PERM_CHECK_SUCCESS(ChatColor.GOLD + "Normal permission check, success."), NORMAL_PERM_CHECK_SUCCESS("<gold>Normal permission check, success."),
NORMAL_PERM_CHECK_FAIL(ChatColor.RED + "Normal permission check, fail."), NORMAL_PERM_CHECK_FAIL("<red>Normal permission check, fail."),
LIBS_PERM_CHECK_SUCCESS(ChatColor.GOLD + "Lib's Disguises permission check, success. Pig disguise should be usable!"), LIBS_PERM_CHECK_SUCCESS("<gold>Lib's Disguises permission check, success. Pig disguise should be usable!"),
LIBS_PERM_CHECK_FAIL(ChatColor.GOLD + "Lib's Disguises permission check, fail. Your permission plugin isn't compliant!"), LIBS_PERM_CHECK_FAIL("<gold>Lib's Disguises permission check, fail. Your permission plugin isn't compliant!"),
LIBS_PERM_CHECK_ZOMBIE_PERMISSIONS( LIBS_PERM_CHECK_ZOMBIE_PERMISSIONS(
ChatColor.GOLD + "Tested libsdisguises.disguise.zombie, which your player seems to have! There may be a problem in your " + "permissions setup!"), "<gold>Tested libsdisguises.disguise.zombie, which your player seems to have! There may be a problem in your permissions setup!"),
LIBS_PERM_CHECK_COMMAND_UNREGISTERED(ChatColor.RED + "The /disguise command seems to be unregistered! Check your config!"), LIBS_PERM_CHECK_COMMAND_UNREGISTERED("<red>The /disguise command seems to be unregistered! Check your config!"),
LIBS_PERM_COMMAND_SUCCESS(ChatColor.GOLD + "Tested permission '%s' for /disguise command access, permission success!"), LIBS_PERM_COMMAND_SUCCESS("<gold>Tested permission '%s' for /disguise command access, permission success!"),
LIBS_PERM_COMMAND_FAIL(ChatColor.RED + "Tested permission '%s' for /disguise command access, permission failed!"), LIBS_PERM_COMMAND_FAIL("<red>Tested permission '%s' for /disguise command access, permission failed!"),
CANT_ATTACK_DISGUISED(ChatColor.RED + "Cannot fight while disguised!"), CANT_ATTACK_DISGUISED("<red>Cannot fight while disguised!"),
CANT_ATTACK_DISGUISED_RECENTLY(ChatColor.RED + "You were disguised recently! Can't attack yet!"), CANT_ATTACK_DISGUISED_RECENTLY("<red>You were disguised recently! Can't attack yet!"),
SWITCH_WORLD_DISGUISE_REMOVED(ChatColor.RED + "Disguise removed as you've switched worlds!"), SWITCH_WORLD_DISGUISE_REMOVED("<red>Disguise removed as you've switched worlds!"),
ACTION_BAR_MESSAGE(ChatColor.GOLD + "Currently disguised as %s"), ACTION_BAR_MESSAGE("<gold>Currently disguised as %s"),
ITEM_SERIALIZED(ChatColor.GOLD + "Json Serialized, click to copy: "), ITEM_SERIALIZED("<gold>Json Serialized, click to copy: "),
ITEM_SERIALIZED_MC(ChatColor.GOLD + "MC Serialized, click to copy: "), ITEM_SERIALIZED_MC("<gold>MC Serialized, click to copy: "),
ITEM_SERIALIZED_MC_LD(ChatColor.GOLD + "MC Serialized for LD, click to copy: "), ITEM_SERIALIZED_MC_LD("<gold>MC Serialized for LD, click to copy: "),
ITEM_SIMPLE_STRING(ChatColor.GOLD + "Simple, click to copy: "), ITEM_SIMPLE_STRING("<gold>Simple, click to copy: "),
ITEM_SERIALIZED_NO_COPY(ChatColor.GOLD + "Json Serialized: " + ChatColor.YELLOW + "%s"), ITEM_SERIALIZED_NO_COPY("<gold>Json Serialized: <yellow>%s"),
ITEM_SERIALIZED_MC_NO_COPY(ChatColor.GOLD + "MC Serialized: " + ChatColor.YELLOW + "%s"), ITEM_SERIALIZED_MC_NO_COPY("<gold>MC Serialized: <yellow>%s"),
ITEM_SERIALIZED_MC_LD_NO_COPY(ChatColor.GOLD + "MC Serialized for LD: " + ChatColor.YELLOW + "%s"), ITEM_SERIALIZED_MC_LD_NO_COPY("<gold>MC Serialized for LD: <yellow>%s"),
ITEM_SIMPLE_STRING_NO_COPY(ChatColor.GOLD + "Simple: " + ChatColor.YELLOW + "%s"), ITEM_SIMPLE_STRING_NO_COPY("<gold>Simple: <yellow>%s"),
LIBS_SCOREBOARD_NO_TEAM(ChatColor.RED + "Not on a scoreboard team!"), LIBS_SCOREBOARD_NO_TEAM("<red>Not on a scoreboard team!"),
LIBS_SCOREBOARD_SUCCESS( LIBS_SCOREBOARD_SUCCESS("<gold>On scoreboard team '%s' with pushing disabled! If you're still having issues and you are disguised right now, then " +
ChatColor.GOLD + "On scoreboard team '%s' with pushing disabled! If you're still having issues and you are disguised right" + " now, then " + "you have a plugin modifying scoreboard through packets. Example of this is a plugin that modifies your " +
"you have a plugin modifying scoreboard through packets. Example of this is a plugin that modifies your " + "name above head, or the tablist. Check their configs for pushing disabling options\nSay 'I read to the end' if you " +
"name above head, or the tablist. Check their configs for pushing disabling options\nSay 'I read to the " + "end' if you " + "still need help with this, or we'll assume you can't read."),
"still need help with this, or we'll assume you can't read."), LIBS_SCOREBOARD_NAMES_DISABLED("<red>Scoreboard names has been disabled, the test for player disguises has failed before it started"),
LIBS_SCOREBOARD_NAMES_DISABLED(ChatColor.RED + "Scoreboard names has been disabled, the test for player disguises has failed before it started"), LIBS_SCOREBOARD_IGNORE_TEST("<green>This was a seperate test from the self disguising collision test that will follow!"),
LIBS_SCOREBOARD_IGNORE_TEST(ChatColor.GREEN + "This was a seperate test from the self disguising collision test that will follow!"), USING_DEFAULT_CONFIG("<dark_green>Using the default config!"),
USING_DEFAULT_CONFIG(ChatColor.DARK_GREEN + "Using the default config!"), LIBS_SCOREBOARD_ISSUES("<green>Too many issues found, hidden %s"),
LIBS_SCOREBOARD_ISSUES(ChatColor.GREEN + "Too many issues found, hidden %s"), LIBS_SCOREBOARD_NO_ISSUES("<green>No issues found in player disguise scoreboard name teams"),
LIBS_SCOREBOARD_NO_ISSUES(ChatColor.GREEN + "No issues found in player disguise scoreboard name teams"), LD_COMMAND_UPDATEPROTOCOLLIB("<blue>/libsdisguises updateprotocollib - <aqua>Updates ProtocolLib to the latest development version"),
LD_COMMAND_UPDATEPROTOCOLLIB( LD_COMMAND_HELP("<blue>/libsdisguises help - <aqua>Returns this!"),
ChatColor.BLUE + "/libsdisguises updateprotocollib - " + ChatColor.AQUA + "Updates ProtocolLib to the latest development version"), LD_COMMAND_COUNT("<blue>/libsdisguises count - <aqua>Tells you how many active disguises there are"),
LD_COMMAND_HELP(ChatColor.BLUE + "/libsdisguises help - " + ChatColor.AQUA + "Returns this!"), LD_COMMAND_METAINFO("<blue>/libsdisguises metainfo - <aqua>Debugging info, tells you what the metadata is for a disguise"),
LD_COMMAND_COUNT(ChatColor.BLUE + "/libsdisguises count - " + ChatColor.AQUA + "Tells you how many active disguises there are"), LD_COMMAND_CONFIG("<blue>/libsdisguises config - <aqua>Tells you what's not normal in your config"),
LD_COMMAND_METAINFO(ChatColor.BLUE + "/libsdisguises metainfo - " + ChatColor.AQUA + "Debugging info, tells you what the metadata is for a disguise"), LD_COMMAND_UPDATE("<blue>/libsdisguises update - <aqua>" +
LD_COMMAND_CONFIG(ChatColor.BLUE + "/libsdisguises config - " + ChatColor.AQUA + "Tells you what's not normal in your config"),
LD_COMMAND_UPDATE(ChatColor.BLUE + "/libsdisguises update - " + ChatColor.AQUA +
"'update' will fetch an update, 'update dev' will fetch a dev build update, 'update release' will fetch a" + "'update' will fetch an update, 'update dev' will fetch a dev build update, 'update release' will fetch a" +
" release build update and 'update!' will download that update!"), " release build update and 'update!' will download that update!"),
LD_COMMAND_CHANGELOG(ChatColor.BLUE + "/libsdisguises changelog - " + ChatColor.AQUA + "Gives you the changelog of the current update fetched"), LD_COMMAND_CHANGELOG("<blue>/libsdisguises changelog - <aqua>Gives you the changelog of the current update fetched"),
LD_DEBUG_MINESKIN(ChatColor.BLUE + "/libsdisguises mineskin - " + ChatColor.AQUA + "Prints debug information about MineSkin to console"), LD_DEBUG_MINESKIN("<blue>/libsdisguises mineskin - <aqua>Prints debug information about MineSkin to console"),
LD_DEBUG_MINESKIN_TOGGLE(ChatColor.BLUE + "MineSkin debug is now %s, this command toggles the printing of MineSkin information to console"), LD_DEBUG_MINESKIN_TOGGLE("<blue>MineSkin debug is now %s, this command toggles the printing of MineSkin information to console"),
LD_COMMAND_JSON(ChatColor.BLUE + "/libsdisguises json - " + ChatColor.AQUA + "Turns the current held item into a string format"), LD_COMMAND_JSON("<blue>/libsdisguises json - <aqua>Turns the current held item into a string format"),
LD_COMMAND_MODS(ChatColor.BLUE + "/libsdisguises mods <Player?> - " + ChatColor.AQUA + LD_COMMAND_MODS("<blue>/libsdisguises mods <Player?> - <aqua>" + "If using modded entities, this will tell you what mods a player is using if possible"),
"If using modded entities, this will tell you what mods a player is using if possible"), LD_COMMAND_PERMTEST("<blue>/libsdisguises permtest <Player?> - <aqua>Does a quick test to see if your permissions are working"),
LD_COMMAND_PERMTEST(ChatColor.BLUE + "/libsdisguises permtest <Player?> - " + ChatColor.AQUA + "Does a quick test to see if your permissions are working"), LD_COMMAND_SCOREBOARD("<blue>/libsdisguises scoreboard <Player?> - <aqua>Does a test to see if there's any scoreboard issues it can detect"),
LD_COMMAND_SCOREBOARD( LD_COMMAND_RELOAD("<blue>/libsdisguises reload - <aqua>Reload's the plugin config and possibly blows disguises"),
ChatColor.BLUE + "/libsdisguises scoreboard <Player?> - " + ChatColor.AQUA + "Does a test to see if there's any scoreboard issues it can detect"), LD_COMMAND_DEBUG("<blue>/libsdisguises debug - <aqua>Used to help debug scoreboard issues on a player disguise"),
LD_COMMAND_RELOAD(ChatColor.BLUE + "/libsdisguises reload - " + ChatColor.AQUA + "Reload's the plugin config and possibly blows disguises"), LD_COMMAND_UPLOAD_LOGS("<blue>/libsdisguises uploadlogs - <aqua>" +
LD_COMMAND_DEBUG(ChatColor.BLUE + "/libsdisguises debug - " + ChatColor.AQUA + "Used to help debug scoreboard issues on a player disguise"), "Uploads latest.log, disguises.yml and configs and gives you the link to share. Used when seeking assistance."),
LD_COMMAND_UPLOAD_LOGS(ChatColor.BLUE + "/libsdisguises uploadlogs - " + ChatColor.AQUA + SELF_DISGUISE_HIDDEN("<green>Self disguise hidden as it's too tall..");
"Uploads latest.log, disguises.yml and configs and gives you the link to share. Used when seeking " + "assistance."),
SELF_DISGUISE_HIDDEN(ChatColor.GREEN + "Self disguise hidden as it's too tall..");
private final String string; private final String string;
private final String useString;
LibsMsg(String string) { LibsMsg(String string) {
this.string = string; this.string = string;
if (!DisguiseUtilities.hasAdventureTextSupport()) {
for (ChatColor c : ChatColor.values()) {
string = string.replaceAll("<" + c.name().toLowerCase(Locale.ROOT) + ">", "§" + c.getChar());
}
}
useString = string;
} }
public String getRaw() { public String getRaw() {
return string; return string;
} }
public String getStringToUse() {
return useString;
}
public BaseComponent[] getChat(Object... strings) { public BaseComponent[] getChat(Object... strings) {
String string = get(strings); String string = get(strings);
@ -341,7 +338,7 @@ public enum LibsMsg {
.severe("Mismatch in messages, incorrect parameters supplied for " + name() + ". Please inform plugin author if not using translations."); .severe("Mismatch in messages, incorrect parameters supplied for " + name() + ". Please inform plugin author if not using translations.");
} }
String trans = TranslateType.MESSAGES.get(getRaw()); String trans = TranslateType.MESSAGES.get(this);
if (trans.isEmpty() || strings.length == 0) { if (trans.isEmpty() || strings.length == 0) {
return trans; return trans;

View File

@ -7,15 +7,12 @@ import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import org.checkerframework.checker.regex.qual.Regex;
import java.io.File; import java.io.File;
import java.io.FileWriter; import java.io.FileWriter;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.util.*; import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/** /**
* Created by libraryaddict on 10/06/2017. * Created by libraryaddict on 10/06/2017.
@ -102,9 +99,9 @@ public enum TranslateType {
if (value == null) { if (value == null) {
DisguiseUtilities.getLogger().severe("Translation for " + name() + " has a null value for the key '" + key + "'"); DisguiseUtilities.getLogger().severe("Translation for " + name() + " has a null value for the key '" + key + "'");
} else { } else {
String newKey = DisguiseUtilities.translateAlternateColorCodes(key); toDeDupe.put(key, true);
toDeDupe.put(newKey, true); String newKey = DisguiseUtilities.translateAlternateColorCodes(key);
translated.put(newKey, DisguiseUtilities.translateAlternateColorCodes(value)); translated.put(newKey, DisguiseUtilities.translateAlternateColorCodes(value));
if (!newKey.equals(translated.get(newKey))) { if (!newKey.equals(translated.get(newKey))) {
@ -120,7 +117,8 @@ public enum TranslateType {
DisguiseUtilities.getLogger().info("Loaded " + translated.size() + " translations for " + name() + " with " + diff + " changed"); DisguiseUtilities.getLogger().info("Loaded " + translated.size() + " translations for " + name() + " with " + diff + " changed");
} else if (diff > 0 && !DisguiseConfig.isUseTranslations()) { } else if (diff > 0 && !DisguiseConfig.isUseTranslations()) {
DisguiseUtilities.getLogger() DisguiseUtilities.getLogger()
.info("Translations are disabled in libsdisguises.yml, but you modified " + diff + " messages in the translations for " + name() +". Is this intended?"); .info("Translations are disabled in libsdisguises.yml, but you modified " + diff + " messages in the translations for " + name() +
". Is this intended?");
} }
} }
@ -256,6 +254,10 @@ public enum TranslateType {
return translated; return translated;
} }
public String get(LibsMsg msg) {
return get(msg.getStringToUse());
}
public String get(String msg) { public String get(String msg) {
if (msg == null || !LibsPremium.isPremium() || !DisguiseConfig.isUseTranslations()) { if (msg == null || !LibsPremium.isPremium() || !DisguiseConfig.isUseTranslations()) {
return msg; return msg;