package com.asteria.game.character.player.dialogue; import java.util.Arrays; import java.util.Objects; import com.asteria.game.character.npc.NpcDefinition; import com.asteria.game.character.player.Player; /** * The static utility class that contains functions for sending dialogues. * * @author lare96 <http://github.com/lare96> */ public final class Dialogues { /** * The maximum length of a single line of dialogue. */ private static final int MAXIMUM_LENGTH = ("A string representing maximum dialogue text length!!").length(); /** * The default constructor. * * @throws UnsupportedOperationException * if this class is instantiated. */ private Dialogues() { throw new UnsupportedOperationException("This class cannot be instantiated!"); } /** * The method that sends an NPC dialogue to {@code player}. * * @param player * the player to send the dialogue to. * @param expression * the expression the NPC will make. * @param npc * the NPC that is sending the dialogue. * @param text * the text contained within the dialogue. * @throws IllegalArgumentException * if the text array is greater than {@code 4} or less than * {@code 1}. */ public static void npcDialogue(Player player, Expression expression, int npc, String... text) { validateLength(text); switch (text.length) { case 1: player.getMessages().sendInterfaceAnimation(4883, expression.getExpression()); player.getMessages().sendString(NpcDefinition.DEFINITIONS[npc].getName(), 4884); player.getMessages().sendString(text[0], 4885); player.getMessages().sendNpcModelOnInterface(4883, npc); player.getMessages().sendChatInterface(4882); break; case 2: player.getMessages().sendInterfaceAnimation(4888, expression.getExpression()); player.getMessages().sendString(NpcDefinition.DEFINITIONS[npc].getName(), 4889); player.getMessages().sendString(text[0], 4890); player.getMessages().sendString(text[1], 4891); player.getMessages().sendNpcModelOnInterface(4888, npc); player.getMessages().sendChatInterface(4887); break; case 3: player.getMessages().sendInterfaceAnimation(4894, expression.getExpression()); player.getMessages().sendString(NpcDefinition.DEFINITIONS[npc].getName(), 4895); player.getMessages().sendString(text[0], 4896); player.getMessages().sendString(text[1], 4897); player.getMessages().sendString(text[2], 4898); player.getMessages().sendNpcModelOnInterface(4894, npc); player.getMessages().sendChatInterface(4893); break; case 4: player.getMessages().sendInterfaceAnimation(4901, expression.getExpression()); player.getMessages().sendString(NpcDefinition.DEFINITIONS[npc].getName(), 4902); player.getMessages().sendString(text[0], 4903); player.getMessages().sendString(text[1], 4904); player.getMessages().sendString(text[2], 4905); player.getMessages().sendString(text[3], 4906); player.getMessages().sendNpcModelOnInterface(4901, npc); player.getMessages().sendChatInterface(4900); break; default: throw new IllegalArgumentException("Illegal npc dialogue " + "length: " + text.length); } } /** * The method that sends a player dialogue to {@code player}. * * @param player * the player to send the dialogue to. * @param expression * the expression the player will make. * @param text * the text contained within the dialogue. * @throws IllegalArgumentException * if the text array is greater than {@code 4} or less than * {@code 1}. */ public static void playerDialogue(Player player, Expression expression, String... text) { validateLength(text); switch (text.length) { case 1: player.getMessages().sendInterfaceAnimation(969, expression.getExpression()); player.getMessages().sendString(player.getFormatUsername(), 970); player.getMessages().sendString(text[0], 971); player.getMessages().sendPlayerModelOnInterface(969); player.getMessages().sendChatInterface(968); break; case 2: player.getMessages().sendInterfaceAnimation(974, expression.getExpression()); player.getMessages().sendString(player.getFormatUsername(), 975); player.getMessages().sendString(text[0], 976); player.getMessages().sendString(text[1], 977); player.getMessages().sendPlayerModelOnInterface(974); player.getMessages().sendChatInterface(973); break; case 3: player.getMessages().sendInterfaceAnimation(980, expression.getExpression()); player.getMessages().sendString(player.getFormatUsername(), 981); player.getMessages().sendString(text[0], 982); player.getMessages().sendString(text[1], 983); player.getMessages().sendString(text[2], 984); player.getMessages().sendPlayerModelOnInterface(980); player.getMessages().sendChatInterface(979); break; case 4: player.getMessages().sendInterfaceAnimation(987, expression.getExpression()); player.getMessages().sendString(player.getFormatUsername(), 988); player.getMessages().sendString(text[0], 989); player.getMessages().sendString(text[1], 990); player.getMessages().sendString(text[2], 991); player.getMessages().sendString(text[3], 992); player.getMessages().sendPlayerModelOnInterface(987); player.getMessages().sendChatInterface(986); break; default: throw new IllegalArgumentException("Illegal player dialogue " + "length: " + text.length); } } /** * The method that sends an option dialogue to {@code player}. * * @param player * the player to send the dialogue to. * @param text * the text contained within the options. * @throws IllegalArgumentException * if the text array is greater than {@code 5} or less than * {@code 2}. */ public static void optionDialogue(Player player, String... text) { validateLength(text); switch (text.length) { case 2: player.getMessages().sendString(text[0], 14445); player.getMessages().sendString(text[1], 14446); player.getMessages().sendChatInterface(14443); break; case 3: player.getMessages().sendString(text[0], 2471); player.getMessages().sendString(text[1], 2472); player.getMessages().sendString(text[2], 2473); player.getMessages().sendChatInterface(2469); break; case 4: player.getMessages().sendString(text[0], 8209); player.getMessages().sendString(text[1], 8210); player.getMessages().sendString(text[2], 8211); player.getMessages().sendString(text[3], 8212); player.getMessages().sendChatInterface(8207); break; case 5: player.getMessages().sendString(text[0], 8221); player.getMessages().sendString(text[1], 8222); player.getMessages().sendString(text[2], 8223); player.getMessages().sendString(text[3], 8224); player.getMessages().sendString(text[4], 8225); player.getMessages().sendChatInterface(8219); break; default: throw new IllegalArgumentException("Illegal dialogue option " + "length: " + text.length); } } /** * The method that validates the length of {@code text}. * * @param text * the text that will be validated. * @throws IllegalStateException * if any lines of the text exceed a certain length. */ private static void validateLength(String... text) { if (Arrays.stream(text).filter(Objects::nonNull).anyMatch(s -> s.length() > MAXIMUM_LENGTH)) throw new IllegalStateException("Dialogue length too long, maximum length is: " + MAXIMUM_LENGTH); } }